<?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>204352</bug_id>
          
          <creation_ts>2019-11-19 06:57:10 -0800</creation_ts>
          <short_desc>[GStreamer] Flatten MediaPlayerPrivateGStreamer into MediaPlayerPrivateGStreamerBase</short_desc>
          <delta_ts>2019-11-26 06:33:43 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>204617</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Charlie Turner">cturner</reporter>
          <assigned_to name="Charlie Turner">cturner</assigned_to>
          <cc>annulen</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbedard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1591509</commentid>
    <comment_count>0</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-19 06:57:10 -0800</bug_when>
    <thetext>[GStreamer] Flatten MediaPlayerPrivateGStreamer into MediaPlayerPrivateGStreamerBase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591519</commentid>
    <comment_count>1</comment_count>
      <attachid>383867</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-19 07:51:07 -0800</bug_when>
    <thetext>Created attachment 383867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591520</commentid>
    <comment_count>2</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-19 07:53:04 -0800</bug_when>
    <thetext>This patch is perhaps much too large to review, and due to the merging of one file into another, the diffs are impossible to follow. I haven&apos;t actually changed any code, apart from to move some ctor-initialized variables to in-class initialized variables to avoid fiddly work satisfying -Wreorder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591521</commentid>
    <comment_count>3</comment_count>
      <attachid>383868</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-19 07:54:42 -0800</bug_when>
    <thetext>Created attachment 383868
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591538</commentid>
    <comment_count>4</comment_count>
      <attachid>383871</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-19 08:34:55 -0800</bug_when>
    <thetext>Created attachment 383871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591540</commentid>
    <comment_count>5</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-19 08:37:14 -0800</bug_when>
    <thetext>The style errors are false positives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591959</commentid>
    <comment_count>6</comment_count>
      <attachid>383871</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-11-20 04:34:00 -0800</bug_when>
    <thetext>Comment on attachment 383871
Patch

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

I know that many of the comments I am doing here come from the original code, but considering that we are going to pollute the diff, I think we should fix the detected style issues. There are more for sure. I stick to the r+ because required changes should be trivial.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:247
&gt; +        } else
&gt; +#else
&gt; +        UNUSED_PARAM(flags);
&gt; +        UNUSED_PARAM(gstGLEnabled);
&gt; +#endif // USE(GSTREAMER_GL)
&gt; +
&gt; +        {
&gt; +            m_textureID = 0;
&gt; +            m_isMapped = gst_video_frame_map(&amp;m_videoFrame, &amp;videoInfo, m_buffer, GST_MAP_READ);
&gt; +            if (m_isMapped) {
&gt; +                // Right now the TextureMapper only supports chromas with one plane
&gt; +                ASSERT(GST_VIDEO_INFO_N_PLANES(&amp;videoInfo) == 1);
&gt; +            }
&gt; +        }

Does this build without GStreamer GL support?

The comment needs a period.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:273
&gt; +    GLuint textureID() const { return m_textureID; }

If this does not come from the superclass, I think we should move to textureId (all the way).

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:394
&gt; +)
&gt; +#if USE(TEXTURE_MAPPER_GL)
&gt; +#if USE(NICOSIA)
&gt; +    , m_nicosiaLayer(Nicosia::ContentLayer::create(Nicosia::ContentLayerTextureMapperImpl::createFactory(*this)))
&gt; +#else
&gt; +    , m_platformLayerProxy(adoptRef(new TextureMapperPlatformLayerProxy()))
&gt; +#endif
&gt; +#endif      

Shouldn&apos;t this be included before the ( ? I think we need to proof build with several options.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:677
&gt; +        // If we are at beginning of media, start from the end to
&gt; +        // avoid immediate EOS.

This can be one line.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:681
&gt; +        if (position &lt; MediaTime::zeroTime())
&gt; +            endTime = durationMediaTime();
&gt; +        else
&gt; +            endTime = position;

This can be a ? : assignment

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:838
&gt; +    // Higher rate causes crash.
&gt; +    rate = clampTo(rate, -20.0, 20.0);

Clamping is fine but I would warn as well (either g_warn or WebKit WARN).

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:842
&gt; +        // and make sure that upper layers were notified if rate was set

Capital and period.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:850
&gt; +        // notify upper layers that we cannot handle passed rate.

Capital

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:857
&gt; +    GstState state;
&gt; +    GstState pending;

No strong opinion, but my preference for this would be &quot;GstState state, pending;&quot;.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:930
&gt; +    // Fallback to the more general maxTimeLoaded() if no range has
&gt; +    // been found.

Single line.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:951
&gt; +    // infinite duration means live stream

Capital and period.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1008
&gt; +    gint64 length = 0;

uint64_t

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1017
&gt; +    // Fall back to querying the source pads manually.
&gt; +    // See also https://bugzilla.gnome.org/show_bug.cgi?id=638749

Single line and period.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1025
&gt; +            gint64 padLength = 0;

uint64_t

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1173
&gt; +    GstState currentState;
&gt; +    GstState pending;

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1198
&gt; +    // Create a timer when entering the READY state so that we can free resources
&gt; +    // if we stay for too long on READY.
&gt; +    // Also lets remove the timer if we request a state change for any state other than READY.
&gt; +    // See also https://bugs.webkit.org/show_bug.cgi?id=117354

Please consider two lines for this and the period.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1201
&gt; +        // Max interval in seconds to stay in the READY state on manual
&gt; +        // state change requests.

Single line

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1252
&gt; +    gint numTracks = 0;

int

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1275
&gt; +    for (gint i = 0; i &lt; numTracks; ++i) {

int

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1330
&gt; +    gint numTracks = 0;

int

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1349
&gt; +    for (gint i = 0; i &lt; numTracks; ++i) {

int

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1385
&gt; +void MediaPlayerPrivateGStreamer::notifyPlayerOfText()

Are these three functions almost the same? Wouldn&apos;t it make sense to use some templating magic here if possible?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1392
&gt; +    gint numTracks = 0;

int

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1405
&gt; +    for (gint i = 0; i &lt; numTracks; ++i) {

int

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1657
&gt; +    case TrackPrivateBaseGStreamer::TrackType::Unknown:
&gt; +    default:

Doesn&apos;t this need a FALLTHROUGH?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1670
&gt; +        // TODO: MSE GstStream API support: https://bugs.webkit.org/show_bug.cgi?id=182531

.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1708
&gt; +    if ((oldHasVideo != m_hasVideo) || (oldHasAudio != m_hasAudio))

No need for inner () here.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1767
&gt; +    const gchar* contextType;

char

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1827
&gt; +            GST_WARNING(&quot;CDM instance not initializaed&quot;);

typo!

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1878
&gt; +            if (shouldAdoptRef)
&gt; +                m_glDisplay = adoptGRef(GST_GL_DISPLAY(gst_gl_display_x11_new_with_display(downcast&lt;PlatformDisplayX11&gt;(sharedDisplay).native())));
&gt; +            else
&gt; +                m_glDisplay = GST_GL_DISPLAY(gst_gl_display_x11_new_with_display(downcast&lt;PlatformDisplayX11&gt;(sharedDisplay).native()));

I think we can do either a macro or a static inline function for this, including the webkit gst version check that could be made static. Please apply to all appearances of the pattern.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1952
&gt; +// Returns the size of the video

period.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1968
&gt; +            gint width, height;

int

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1993
&gt; +    // TODO: handle possible clean aperture data. See
&gt; +    // https://bugzilla.gnome.org/show_bug.cgi?id=596571
&gt; +    // TODO: handle possible transformation matrix. See
&gt; +    // https://bugzilla.gnome.org/show_bug.cgi?id=596326

Two lines, periods.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2024
&gt; +    guint64 width = 0, height = 0;

uint64_t

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2186
&gt; +            // Let the mediaPlayerClient handle the stream error, in
&gt; +            // this case the HTMLMediaElement will emit a stalled

Single line, period.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2513
&gt; +                for (guint j = 0; j &lt; stream-&gt;descriptors-&gt;len; ++j) {

unsigned

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2515
&gt; +                    for (guint k = 0; k &lt; descriptor-&gt;length; ++k)

unsigned

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2563
&gt; +    gint64 start = -1, stop = -1;

uint64_t

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2572
&gt; +        gchar* title = nullptr;

char

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2703
&gt; +    GstState pending;
&gt; +    GstState state;

Collapse.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2808
&gt; +        // Change failed

.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:2889
&gt; +    const gchar* newLocation = nullptr;

char

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3054
&gt; +    const gchar* playbinName = &quot;playbin&quot;;

char

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3078
&gt; +    // gst_element_factory_make() returns a floating reference so
&gt; +    // we should not adopt.

Is this comment valid? I don&apos;t see any adoption or smart ptr anywhere.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3288
&gt; +    bool triggerResize;

shouldTriggerResize.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3449
&gt; +            const gchar* formatString = GST_VIDEO_INFO_HAS_ALPHA(&amp;videoInfo) ? &quot;RGBA&quot; : &quot;BGRx&quot;;
&gt; +#else
&gt; +            const gchar* formatString = GST_VIDEO_INFO_HAS_ALPHA(&amp;videoInfo) ? &quot;RGBA&quot; : &quot;RGBx&quot;;

char

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3636
&gt; +    gboolean result = TRUE;

bool result = true;

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3829
&gt; +    guint64 decodedFrames = 0;

uint64_t

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3837
&gt; +    guint64 framesDropped = 0;

ditto

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3846
&gt; +    gint64 position = 0;

int64_t

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3858
&gt; +    gint64 position = 0;

ditto

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3935
&gt; +    bool eventHandled = gst_element_send_event(pipeline(), gst_event_new_custom(GST_EVENT_CUSTOM_DOWNSTREAM_OOB, gst_structure_new_empty(&quot;attempt-to-decrypt&quot;)));

wasEventHandled

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:3955
&gt; +void MediaPlayerPrivateGStreamer::setWaitingForKey(bool waitingForKey)

parameter isWaitingForKey

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:5
&gt; - * Copyright (C) 2009, 2010, 2011, 2012, 2013, 2015, 2016 Igalia S.L
&gt; - * Copyright (C) 2014 Cable Television Laboratories, Inc.
&gt; + * Copyright (C) 2009, 2010, 2015, 2016 Igalia S.L

Why u removing CableLabs? We need to update the year here as well.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:213
&gt; +    unsigned decodedFrameCount() const override;

As an example, could you please check all overrides here against the MSE player and make final here the ones that do not appear there?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:327
&gt; +    // FIXME: Where is this used?
&gt; +    void handlePluginInstallerResult(GstInstallPluginsReturn);

If it is used nowhere, please remove it. What is weird is that the compiler shuts up about this...

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:369
&gt; +    bool m_changingRate { false };
&gt; +    bool m_downloadFinished { false };
&gt; +    bool m_errorOccured { false };

Let&apos;s take advantage to fix the style here: m_isChangingRate, m_didDownloadFinish, m_didErrorOccur.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:372
&gt; +    bool m_paused { true };

m_isPaused

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:379
&gt; +    bool m_resetPipeline { false };
&gt; +    bool m_seeking { false };
&gt; +    bool m_seekIsPending { false };

m_shouldResetPipeline
m_isSeeking
m_isSeekPending;

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:382
&gt; +    bool m_volumeAndMuteInitialized { false };

m_areVolumeAndMuteInitialized

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:403
&gt; +    bool m_renderingCanBeAccelerated { false };
&gt; +
&gt; +    bool m_destroying { false };

m_isUsingFallbackVideoSink, m_canRenderingBeAccelerated, m_isBeingDestroyed

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:426
&gt; +    bool m_waitingForKey { false };

m_isWaitingForKey

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:495
&gt; +    bool m_playbackRatePause { false };

m_isPlaybackRatePaused

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:502
&gt; +    bool m_delayingLoad { false };

m_isDelayingLoad

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:517
&gt; +    bool m_buffering { false };

m_isBuffering

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:521
&gt; +    bool m_preservesPitch { false };

m_shouldPreservePitch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591964</commentid>
    <comment_count>7</comment_count>
      <attachid>383871</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-11-20 04:44:38 -0800</bug_when>
    <thetext>Comment on attachment 383871
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:247
&gt;&gt; +        }
&gt; 
&gt; Does this build without GStreamer GL support?
&gt; 
&gt; The comment needs a period.

I don&apos;t see why it would not. What code exactly makes you think there&apos;s a missing ifdef?

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:394
&gt;&gt; +#endif      
&gt; 
&gt; Shouldn&apos;t this be included before the ( ? I think we need to proof build with several options.

Which ( ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1591982</commentid>
    <comment_count>8</comment_count>
      <attachid>383871</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-11-20 06:29:05 -0800</bug_when>
    <thetext>Comment on attachment 383871
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:247
&gt;&gt;&gt; +        }
&gt;&gt; 
&gt;&gt; Does this build without GStreamer GL support?
&gt;&gt; 
&gt;&gt; The comment needs a period.
&gt; 
&gt; I don&apos;t see why it would not. What code exactly makes you think there&apos;s a missing ifdef?

Oh, yes, my bad. I misread the code.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:394
&gt;&gt;&gt; +#endif      
&gt;&gt; 
&gt;&gt; Shouldn&apos;t this be included before the ( ? I think we need to proof build with several options.
&gt; 
&gt; Which ( ?

I mean ) and I read wrong again, though it is true that m_readyTimerHander is misplaced and should be moved just to the line above. Right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593365</commentid>
    <comment_count>9</comment_count>
      <attachid>384280</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-25 01:26:37 -0800</bug_when>
    <thetext>Created attachment 384280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593366</commentid>
    <comment_count>10</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-25 01:28:06 -0800</bug_when>
    <thetext>I disagree with performing these cleanups in this patch. I have fixed the copyright issue I introduced in the header, but apart from that I will land this with the minimal set of cleanups possible. They can be performed in follow-up patches once the dust had settled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593377</commentid>
    <comment_count>11</comment_count>
      <attachid>384284</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-11-25 02:42:13 -0800</bug_when>
    <thetext>Created attachment 384284
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593387</commentid>
    <comment_count>12</comment_count>
      <attachid>384284</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-25 03:25:15 -0800</bug_when>
    <thetext>Comment on attachment 384284
Patch for landing

Clearing flags on attachment: 384284

Committed r252852: &lt;https://trac.webkit.org/changeset/252852&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593388</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-11-25 03:25:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593653</commentid>
    <comment_count>14</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-11-26 06:10:47 -0800</bug_when>
    <thetext>I miss the follow up bug for my comments</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383867</attachid>
            <date>2019-11-19 07:51:07 -0800</date>
            <delta_ts>2019-11-19 07:54:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204352-20191119155105.patch</filename>
            <type>text/plain</type>
            <size>324179</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRmZjgxNTg5YTkwNmFm
MGY4ZTIzYTAwNzAzODlkMzUxNzYyZDViMC4uN2VlYTVhMGU5NGIzMmNlYmY2ZGJjYWQyNzMzYTcz
NTMwOTVlYWU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NiBAQAorMjAxOS0xMS0xOSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0g
RmxhdHRlbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgaW50byBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDQzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGUgaW5oZXJpdGFuY2UgbGluayBiZXR3ZWVuIHRoZSBiYXNlIHBsYXllciBhbmQg
dGhlIHByaXZhdGUgcGxheWVyIG5vCisgICAgICAgIGxvbmdlciBzZXJ2ZXMgYSBwdXJwb3NlLiBU
aGUgb25seSB1c2VyIG9mIHRoZSBiYXNlIGNsYXNzIGlzIHRoZSBwcml2YXRlCisgICAgICAgIHBs
YXllci4KKworICAgICAgICBTcXVhc2hpbmcgdGhlc2UgdG9naGV0aGVyIG1ha2VzIGl0IGVhc3kg
dG8gZG8gZnVydGhlciByZWZhY3RvcmluZ3MsCisgICAgICAgIHNpbmNlIGV2ZXJ5dGhpbmcgY2Fu
IGJlIHNlZW4gaW4gb25lIHBsYWNlIHJhdGhlciB0aGFuIGJlaW5nIGFyYml0cmFyaWx5CisgICAg
ICAgIHNwbGl0IGludG8gdHdvIGNsYXNzZXMgYW5kIGhhdmluZyB0byBkbyBkZXJpdmVkLXRvLWJh
c2UgY29udmVyc2lvbnMgaW4KKyAgICAgICAgeW91ciBoZWFkIGZvciBubyBnYWluIGluIGNsYXJp
dHkgZWxzZXdoZXJlLgorCisgICAgICAgIEFzaWRlIGZyb20gbWVyZ2luZyB0aGUgY2xhc3Nlcywg
dGhlIG9ubHkgb3RoZXIgY2hhbmdlIGhlcmUgaXMgc3dpdGNoaW5nCisgICAgICAgIHRvIGluLWNs
YXNzIGluaXRpYWxpemF0aW9uIG9mIG1hbnkgbWVtYmVyIHZhcmlhYmxlcywgcmF0aGVyIHRoYW4g
YSBsb25nCisgICAgICAgIGxpc3Qgb2YgaW5pdGlhbGl6YXRpb25zIGluIHRoZSBjb25zdHJ1Y3Rv
ciB0aGF0IGdldHMgZmlkZGx5IHdpdGgKKyAgICAgICAgLVdyZW9yZGVyLgorCisgICAgICAgIFRo
ZXNlIGNsYXNzZXMgYXJlIG11Y2ggdG9vIGxhcmdlIGFuZCBjb3VsZCB1c2Ugc29tZSByZWRlc2ln
biwgdGhpcyBpcworICAgICAgICBvbmx5IGEgZmlyc3Qgc3RlcCB0b3dhcmQgdGhhdCBnb2FsLgor
CisgICAgICAgIFRoaXMgaXMgYSByZWZhY3RvcmluZywgaG9wZWZ1bGx5IHdlbGwgY292ZXJlZCBi
eSBvdXIgZXhpc3RpbmcgdGVzdHMhCisKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpncmVhdGVzdENvbW1vbkRpdmlz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6YnVzTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnRUb0ludGVybmFsUHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6R3N0
VmlkZW9GcmFtZUhvbGRlcjo6R3N0VmlkZW9GcmFtZUhvbGRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp+R3N0VmlkZW9GcmFtZUhvbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp3YWl0Rm9yQ1BVU3luYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6Omhhc0FscGhhQ2hhbm5lbCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjpmbGFncyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp0ZXh0dXJlSUQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3N0VmlkZW9GcmFtZUhvbGRlcjo6aGFzTWFwcGVkVGV4dHVyZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3N0VmlkZW9GcmFtZUhvbGRlcjo6dmlkZW9GcmFtZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp1cGRhdGVUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6OnBsYXRmb3JtTGF5ZXJCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppbml0
aWFsaXplRGVidWdDYXRlZ29yeSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpp
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnJlZ2lzdGVyTWVkaWFFbmdpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBhdXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtRHVyYXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbk1lZGlhVGlt
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmN1cnJlbnRNZWRpYVRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlbG9hZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1l
U2Vla2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjptYXhUaW1lTG9hZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Omhhc1Npbmds
ZVNlY3VyaXR5T3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6d291bGRUYWludE9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbnN1cmVB
dWRpb1NvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6YXVkaW9Tb3VyY2VQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9TdHJlYW1Qcm9w
ZXJ0aWVzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBs
YXliaW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U3luY09uQ2xvY2spOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzeW5jT25DbG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9m
VmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlm
eVBsYXllck9mQXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp0ZXh0Q2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNhbXBsZUNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNh
bXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZp
bGxUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUF1ZGlvU2luayk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvU2luayBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9z
aXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjplbmFibGVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnVwZGF0ZVRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNsZWFyVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQaXBlbGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVxdWVz
dEdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmVuc3VyZUdzdEdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9sdW1lIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWb2x1bWVD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
b2x1bWVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpuZXR3b3JrU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om11dGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxh
eWVyT2ZNdXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bXV0ZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVNYXhUaW1lTG9hZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRl
QnVmZmVyaW5nU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cHJvY2Vzc01wZWdUc1NlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZDb250
ZW50c0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6cHVyZ2VJbnZhbGlkQXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRWaWRlb1RyYWNrcyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFRleHRUcmFj
a3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cmlE
ZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmRvd25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlT2xk
RG93bmxvYWRGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWVkaWFMb2NhdGlvbkNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3Vw
cG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkUGFzc0NPUlNBY2Nl
c3NDaGVjayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNhblNhdmVNZWRpYURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJveHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2Vy
UmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnJlcGFpbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNhbmNlbFJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpyZXBhaW50Q2FuY2VsbGVkQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdTYW1wbGVDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1ByZXJvbGxD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmZsdXNoQ3VycmVudEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdGl2ZUltYWdlRm9yQ3Vy
cmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRWaWRlb1NvdXJjZU9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlVGV4dHVyZU1hcHBlckZsYWdzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNGdWxsc2NyZWVu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bW92aWVMb2FkVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZUdMQXBwU2luayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2lua0dMKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR0xWaWRlb1NpbmtDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFJlY3RhbmdsZVRvVmlkZW9TaW5rKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckhvbGVQdW5jaENsaWVudDo6R1N0cmVhbWVySG9sZVB1bmNoQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3Jl
YXRlSG9sZVB1bmNoVmlkZW9TaW5rKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6cHVzaE5leHRIb2xlUHVuY2hCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVWaWRlb1NpbmspOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRTdHJlYW1Wb2x1bWVF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZGVjb2RlZEZyYW1lQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpkcm9wcGVkRnJhbWVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZp
ZGVvRGVjb2RlZEJ5dGVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRh
Y2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNk
bUluc3RhbmNlRGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjphdHRlbXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2Nh
bEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlUHJvdGVjdGlvbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c0tleVN5c3Rl
bSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmV4dGVu
ZGVkU3VwcG9ydHNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6Om1lZGlhUGxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGlwZWxpbmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppc0xpdmVTdHJlYW0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb25m
aWd1cmVQbGF5U2luayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmdzdEdMQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmdzdEdMRGlzcGxheSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvU2luayBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmg6IFJlbW92ZWQuCisKIDIwMTktMTEt
MTggIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hlY2sg
aWYgSVRQIGlzIG9uIGJlZm9yZSBhcHBseWluZyB0aGlyZC1wYXJ0eSBjb29raWUgYmxvY2tpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCBmMjQwZWM3YWYxMDNi
ZWNhYjNlNzc0NjlhZTMwMjZhNjk1MTY5MDhkLi4yYzk0MWYwY2I0YWU4YWE4NjBkNWU1NzE2NWJh
MmI1NjM4YjAyMWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFt
ZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBA
IC0xNCw3ICsxNCw2IEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVH
U3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVu
Z2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxl
R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4dENv
bWJpbmVyR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
VGV4dFNpbmtHU3RyZWFtZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwCmluZGV4IGQyMmE0ZmUyYjExMmIzOTQ4ZTVkNjVlNjgyNDIxODNkMjZh
ZTk2YWEuLjg2ZTFjYWIzMDRlM2E5MGRjZjNkY2M2YTVlM2M1Nzg4MzYzODVlNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zLDkgKzMs
OSBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE1
LCAyMDE2IElnYWxpYSBTLkwKICAqIENvcHlyaWdodCAoQykgMjAxNCBDYWJsZSBUZWxldmlzaW9u
IExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTkgSWdhbGlhIFMuTAor
ICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE5IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI4LDE0NCArMjgsMzcwIEBACiAKICNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShHU1RSRUFNRVIpCiAKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJHU3RyZWFtZXJDb21tb24uaCIKICNpbmNsdWRlICJHU3RyZWFtZXJSZWdpc3RyeVNjYW5u
ZXIuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJJbWFnZU9y
aWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUmVxdWVzdElu
c3RhbGxNaXNzaW5nUGx1Z2luc0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVh
bWVyLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVGV4
dENvbWJpbmVyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVGV4dFNpbmtHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2VuZGlmIC8vIEVOQUJMRShW
SURFT19UUkFDSykKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAiR1N0cmVh
bWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKKyNpbmNsdWRlICJNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisjaW5j
bHVkZSAiQ0RNSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0
aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShXRUJfQVVESU8p
CisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5oIgorI2VuZGlmCisKICNp
bmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgogI2lu
Y2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMu
aD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CiAjaW5jbHVkZSA8bGltaXRz
PgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR0xpYlV0
aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3
dGYvVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIv
R0xpYlV0aWxpdGllcy5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL1J1bkxvb3BTb3VyY2VQcmlvcml0
eS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJz
Lmg+Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlh
U3RyZWFtU291cmNlLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSNpbmNs
dWRlICJBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIkluYmFuZE1ldGFk
YXRhVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIkluYmFuZFRleHRUcmFj
a1ByaXZhdGVHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJUZXh0Q29tYmluZXJHU3RyZWFtZXIuaCIK
LSNpbmNsdWRlICJUZXh0U2lua0dTdHJlYW1lci5oIgotI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgiCi0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8
d3RmL1dhbGxUaW1lLmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFN
RVJfTVBFR1RTKQogI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQogI2luY2x1ZGUgPGdzdC9t
cGVndHMvbXBlZ3RzLmg+CiAjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNlbmRpZiAvLyBF
TkFCTEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQorCisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorI2RlZmluZSBDUkVBVEVfVFJBQ0sodHlwZSwgVHlwZSkgR19TVE1UX1NU
QVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtX2hhcyMjVHlwZSA9IHRy
dWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBpZiAoIXVzZU1lZGlhU291cmNlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgUmVmUHRyPFR5cGUjI1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cj4gdHJhY2sgPSBUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0
cigqdGhpcyksIGksIHN0cmVhbSk7IFwKKyAgICAgICAgICAgIG1fIyN0eXBlIyNUcmFja3MuYWRk
KHRyYWNrLT5pZCgpLCB0cmFjayk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG1f
cGxheWVyLT5hZGQjI1R5cGUjI1RyYWNrKCp0cmFjayk7ICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGlmIChnc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3Moc3RyZWFtLmdl
dCgpKSAmIEdTVF9TVFJFQU1fRkxBR19TRUxFQ1QpIFwKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnQjI1R5cGUjI1N0cmVhbUlkID0gU3RyaW5nKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJl
YW0uZ2V0KCkpKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gR19TVE1UX0VORAorCisjZGVm
aW5lIENMRUFSX1RSQUNLUyh0cmFja3MsIG1ldGhvZCkgXAorICAgIGZvciAoYXV0byYgdHJhY2sg
OiB0cmFja3MudmFsdWVzKCkpXAorICAgICAgICBtZXRob2QoKnRyYWNrKTtcCisgICAgdHJhY2tz
LmNsZWFyKCk7CisjZWxzZQorI2RlZmluZSBDUkVBVEVfVFJBQ0sodHlwZSwgVHlwZSkgR19TVE1U
X1NUQVJUIHsgXAorICAgICAgICBtX2hhcyMjVHlwZSMjID0gdHJ1ZTsgICAgICAgICAgICAgICAg
ICAgXAorICAgIH0gR19TVE1UX0VORAorI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKwor
I2lmIFVTRShHU1RSRUFNRVJfR0wpCisjZGVmaW5lIFRFWFRVUkVfQ09QSUVSX0NPTE9SX0NPTlZF
UlRfRkxBRyBWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI6OkNvbG9yQ29udmVyc2lvbjo6Tm9D
b252ZXJ0CisjZGVmaW5lIEdTVF9HTF9DQVBTX0ZPUk1BVCAieyBSR0J4LCBSR0JBLCBJNDIwLCBZ
NDQ0LCBZVjEyLCBZNDFCLCBZNDJCLCBOVjEyLCBOVjIxLCBWVVlBIH0iCisKKyNpbmNsdWRlIDxn
c3QvYXBwL2dzdGFwcHNpbmsuaD4KKworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2lmIFVTRShH
TFgpCisjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSA8Z3N0L2dsL3gxMS9nc3Rn
bGRpc3BsYXlfeDExLmg+CiAjZW5kaWYKLSNpbmNsdWRlIDxnc3QvYXVkaW8vc3RyZWFtdm9sdW1l
Lmg+CiAKLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotI2luY2x1ZGUgIk1lZGlhU291cmNlLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKyNpZiBVU0UoRUdMKQor
I2luY2x1ZGUgIkdMQ29udGV4dEVHTC5oIgorI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNw
bGF5X2VnbC5oPgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotI2luY2x1ZGUgIkF1
ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIuaCIKKyNpZiBQTEFURk9STShYMTEpCisjaW5jbHVk
ZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCiAjZW5kaWYKIAotR1NUX0RFQlVHX0NBVEVHT1JZX0VY
VEVSTih3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxU
IHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcKKyNpZiBQTEFURk9STShXQVlMQU5EKQorI2luY2x1
ZGUgIlBsYXRmb3JtRGlzcGxheVdheWxhbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKFdQRV9SRU5E
RVJFUikKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlMaWJXUEUuaCIKKyNlbmRpZgorCisvLyBn
c3RnbGFwaS5oIG1heSBpbmNsdWRlIGVnbHBsYXRmb3JtLmggYW5kIGl0IGluY2x1ZGVzIFguaCwg
d2hpY2gKKy8vIGRlZmluZXMgTm9uZSwgYnJlYWtpbmcgTWVkaWFQbGF5ZXI6Ok5vbmUgZW51bQor
I2lmIFBMQVRGT1JNKFgxMSkgJiYgR1NUX0dMX0hBVkVfUExBVEZPUk1fRUdMCisjdW5kZWYgTm9u
ZQorI2VuZGlmIC8vIFBMQVRGT1JNKFgxMSkgJiYgR1NUX0dMX0hBVkVfUExBVEZPUk1fRUdMCisj
aW5jbHVkZSAiVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmgiCisjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9HTCkKKworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpbmNsdWRlICJCaXRt
YXBUZXh0dXJlR0wuaCIKKyNpbmNsdWRlICJCaXRtYXBUZXh0dXJlUG9vbC5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eS5oIgorI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKKyNpbmNsdWRlIDxjYWlyby1nbC5oPgorI2VuZGlmCisjZW5kaWYgLy8gVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQogCitHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X21lZGlhX3BsYXllcl9k
ZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVn
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLXN0YXRpYyB2
b2lkIGJ1c01lc3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKKyNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQ
VU5DSCkKK3N0YXRpYyBjb25zdCBGbG9hdFNpemUgc19ob2xlUHVuY2hEZWZhdWx0RnJhbWVTaXpl
KDEyODAsIDcyMCk7CisjZW5kaWYKKworc3RhdGljIGludCBncmVhdGVzdENvbW1vbkRpdmlzb3Io
aW50IGEsIGludCBiKQogewotICAgIHBsYXllci0+aGFuZGxlTWVzc2FnZShtZXNzYWdlKTsKKyAg
ICB3aGlsZSAoYikgeworICAgICAgICBpbnQgdGVtcCA9IGE7CisgICAgICAgIGEgPSBiOworICAg
ICAgICBiID0gdGVtcCAlIGI7CisgICAgfQorCisgICAgcmV0dXJuIEFCUyhhKTsKIH0KIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0Nh
bGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyLCBHT2JqZWN0KiBvYmpl
Y3QpCitzdGF0aWMgdm9pZCBidXNNZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSog
bWVzc2FnZSwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCiB7Ci0gICAgcGxh
eWVyLT5zZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMob2JqZWN0KTsKKyAgICBwbGF5ZXItPmhhbmRs
ZU1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMoR09iamVjdCogb2JqZWN0KQorc3RhdGljIHZvaWQg
Y29udmVydFRvSW50ZXJuYWxQcm90b2NvbChVUkwmIHVybCkKIHsKLSAgICBpZiAoZ19zdHJjbXAw
KEdfT0JKRUNUX1RZUEVfTkFNRShvYmplY3QpLCAiR3N0UHVsc2VTaW5rIikpCisgICAgaWYgKHdl
YmtpdEdzdENoZWNrVmVyc2lvbigxLCAxMiwgMCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIGNv
bnN0IGNoYXIqIHJvbGUgPSBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJJc1ZpZGVvKCkg
PyAidmlkZW8iIDogIm11c2ljIjsKLSAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9z
dHJ1Y3R1cmVfbmV3KCJzdHJlYW0tcHJvcGVydGllcyIsICJtZWRpYS5yb2xlIiwgR19UWVBFX1NU
UklORywgcm9sZSwgbnVsbHB0cik7Ci0gICAgZ19vYmplY3Rfc2V0KG9iamVjdCwgInN0cmVhbS1w
cm9wZXJ0aWVzIiwgc3RydWN0dXJlLCBudWxscHRyKTsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUo
c3RydWN0dXJlKTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBlbGVtZW50TmFtZShnc3RfZWxlbWVu
dF9nZXRfbmFtZShHU1RfRUxFTUVOVChvYmplY3QpKSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiU2V0IG1lZGlhLnJvbGUgYXMgJXMgYXQgJXMiLCByb2xlLCBlbGVtZW50TmFt
ZS5nZXQoKSk7CisgICAgaWYgKHVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgdXJsLnBy
b3RvY29sSXNCbG9iKCkpCisgICAgICAgIHVybC5zZXRQcm90b2NvbCgid2Via2l0KyIgKyB1cmwu
cHJvdG9jb2woKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWdp
c3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKLXsKLSAgICBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSgp
OwotICAgIGlmIChpc0F2YWlsYWJsZSgpKSB7Ci0gICAgICAgIHJlZ2lzdHJhcihbXShNZWRpYVBs
YXllciogcGxheWVyKSB7IHJldHVybiBtYWtlVW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcj4ocGxheWVyKTsgfSwKLSAgICAgICAgICAgIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0
c1R5cGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIHN1cHBvcnRzS2V5U3lzdGVtKTsKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCitjbGFzcyBHc3RWaWRlb0ZyYW1lSG9sZGVyIDogcHVi
bGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyOjpVbm1hbmFnZWRCdWZmZXJEYXRh
SG9sZGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHc3RWaWRlb0ZyYW1lSG9sZGVyKEdzdFNh
bXBsZSogc2FtcGxlLCBPcHRpb25hbDxHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybT4gdmlkZW9EZWNv
ZGVyUGxhdGZvcm0sIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MsIGJvb2wgZ3N0R0xFbmFi
bGVkKQorICAgICAgICA6IG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0odmlkZW9EZWNvZGVyUGxhdGZv
cm0pCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChHU1RfSVNfU0FNUExFKHNhbXBsZSkp
OworCisgICAgICAgIEdzdFZpZGVvSW5mbyB2aWRlb0luZm87CisgICAgICAgIGlmIChVTkxJS0VM
WSghZ2V0U2FtcGxlVmlkZW9JbmZvKHNhbXBsZSwgdmlkZW9JbmZvKSkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgbV9zaXplID0gSW50U2l6ZShHU1RfVklERU9fSU5GT19XSURUSCgm
dmlkZW9JbmZvKSwgR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0luZm8pKTsKKyAgICAgICAg
bV9oYXNBbHBoYUNoYW5uZWwgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbyk7
CisgICAgICAgIG1fYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZSk7CisgICAg
ICAgIGlmIChVTkxJS0VMWSghR1NUX0lTX0JVRkZFUihtX2J1ZmZlcikpKQorICAgICAgICAgICAg
cmV0dXJuOworCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICAgICAgbV9mbGFncyA9IGZsYWdz
IHwgKG1faGFzQWxwaGFDaGFubmVsID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6IDAp
OworCisgICAgICAgIGlmIChnc3RHTEVuYWJsZWQpIHsKKyAgICAgICAgICAgIG1faXNNYXBwZWQg
PSBnc3RfdmlkZW9fZnJhbWVfbWFwKCZtX3ZpZGVvRnJhbWUsICZ2aWRlb0luZm8sIG1fYnVmZmVy
LCBzdGF0aWNfY2FzdDxHc3RNYXBGbGFncz4oR1NUX01BUF9SRUFEIHwgR1NUX01BUF9HTCkpOwor
ICAgICAgICAgICAgaWYgKG1faXNNYXBwZWQpIHsKKyAgICAgICAgICAgICAgICBtX3RleHR1cmVJ
RCA9ICpyZWludGVycHJldF9jYXN0PEdMdWludCo+KG1fdmlkZW9GcmFtZS5kYXRhWzBdKTsKKyAg
ICAgICAgICAgICAgICBtX2hhc01hcHBlZFRleHR1cmVzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlCisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOworICAg
ICAgICBVTlVTRURfUEFSQU0oZ3N0R0xFbmFibGVkKTsKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
X0dMKQorCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdGV4dHVyZUlEID0gMDsKKyAgICAgICAg
ICAgIG1faXNNYXBwZWQgPSBnc3RfdmlkZW9fZnJhbWVfbWFwKCZtX3ZpZGVvRnJhbWUsICZ2aWRl
b0luZm8sIG1fYnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAgICAgICAgaWYgKG1faXNNYXBw
ZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBSaWdodCBub3cgdGhlIFRleHR1cmVNYXBwZXIgb25s
eSBzdXBwb3J0cyBjaHJvbWFzIHdpdGggb25lIHBsYW5lCisgICAgICAgICAgICAgICAgQVNTRVJU
KEdTVF9WSURFT19JTkZPX05fUExBTkVTKCZ2aWRlb0luZm8pID09IDEpOworICAgICAgICAgICAg
fQorICAgICAgICB9CiAgICAgfQotfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aXNBdmFpbGFibGUoKQotewotICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lz
dGVyV2ViS2l0RWxlbWVudHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHZpcnR1YWwg
fkdzdFZpZGVvRnJhbWVIb2xkZXIoKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX2lz
TWFwcGVkKSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgIEdSZWZQdHI8R3N0RWxlbWVudEZh
Y3Rvcnk+IGZhY3RvcnkgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kKCJwbGF5
YmluIikpOwotICAgIHJldHVybiBmYWN0b3J5OworICAgICAgICBnc3RfdmlkZW9fZnJhbWVfdW5t
YXAoJm1fdmlkZW9GcmFtZSk7CisgICAgfQorCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICB2
aXJ0dWFsIHZvaWQgd2FpdEZvckNQVVN5bmMoKQorICAgIHsKKyAgICAgICAgR3N0R0xTeW5jTWV0
YSogbWV0YSA9IGdzdF9idWZmZXJfZ2V0X2dsX3N5bmNfbWV0YShtX2J1ZmZlcik7CisgICAgICAg
IGlmIChtZXRhKSB7CisgICAgICAgICAgICBHc3RNZW1vcnkqIG1lbSA9IGdzdF9idWZmZXJfcGVl
a19tZW1vcnkobV9idWZmZXIsIDApOworICAgICAgICAgICAgR3N0R0xDb250ZXh0KiBjb250ZXh0
ID0gKChHc3RHTEJhc2VNZW1vcnkqKW1lbSktPmNvbnRleHQ7CisgICAgICAgICAgICBnc3RfZ2xf
c3luY19tZXRhX3dhaXRfY3B1KG1ldGEsIGNvbnRleHQpOworICAgICAgICB9CisgICAgfQorI2Vu
ZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCisKKyAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgYm9vbCBoYXNBbHBoYUNoYW5uZWwoKSBjb25zdCB7
IHJldHVybiBtX2hhc0FscGhhQ2hhbm5lbDsgfQorICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3Mg
ZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CisgICAgR0x1aW50IHRleHR1cmVJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlEOyB9CisgICAgYm9vbCBoYXNNYXBwZWRUZXh0dXJl
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWFwcGVkVGV4dHVyZXM7IH0KKyAgICBjb25zdCBHc3RW
aWRlb0ZyYW1lJiB2aWRlb0ZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0ZyYW1lOyB9CisK
KyAgICB2b2lkIHVwZGF0ZVRleHR1cmUoQml0bWFwVGV4dHVyZUdMJiB0ZXh0dXJlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFtX3RleHR1cmVJRCk7CisgICAgICAgIEdzdFZpZGVvR0xUZXh0dXJl
VXBsb2FkTWV0YSogbWV0YTsKKyAgICAgICAgaWYgKG1fYnVmZmVyICYmIChtZXRhID0gZ3N0X2J1
ZmZlcl9nZXRfdmlkZW9fZ2xfdGV4dHVyZV91cGxvYWRfbWV0YShtX2J1ZmZlcikpKSB7CisgICAg
ICAgICAgICBpZiAobWV0YS0+bl90ZXh0dXJlcyA9PSAxKSB7IC8vIEJSR3ggJiBCR1JBIGZvcm1h
dHMgdXNlIG9ubHkgb25lIHRleHR1cmUuCisgICAgICAgICAgICAgICAgZ3VpbnQgaWRzWzRdID0g
eyB0ZXh0dXJlLmlkKCksIDAsIDAsIDAgfTsKKworICAgICAgICAgICAgICAgIGlmIChnc3Rfdmlk
ZW9fZ2xfdGV4dHVyZV91cGxvYWRfbWV0YV91cGxvYWQobWV0YSwgaWRzKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFtX2lzTWFwcGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGludCBzdHJpZGUg
PSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFKCZtX3ZpZGVvRnJhbWUsIDApOworICAgICAg
ICBjb25zdCB2b2lkKiBzcmNEYXRhID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEoJm1fdmlk
ZW9GcmFtZSwgMCk7CisKKyAgICAgICAgaWYgKCFzcmNEYXRhKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHRleHR1cmUudXBkYXRlQ29udGVudHMoc3JjRGF0YSwgV2ViQ29yZTo6SW50
UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSwgV2ViQ29yZTo6SW50
UG9pbnQoMCwgMCksIHN0cmlkZSk7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBwbGF0Zm9ybUxheWVyQnVmZmVyKCkKKyAgICB7
CisgICAgICAgIGlmICghbV9oYXNNYXBwZWRUZXh0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIHVzaW5nIEJ1ZmZlciA9IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyQnVmZmVyOworCisgICAgICAgIGlmICgoR1NUX1ZJREVPX0lORk9fSVNfUkdCKCZtX3ZpZGVv
RnJhbWUuaW5mbykgJiYgR1NUX1ZJREVPX0lORk9fTl9QTEFORVMoJm1fdmlkZW9GcmFtZS5pbmZv
KSA9PSAxKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEJ1ZmZlcj4oQnVmZmVyOjpU
ZXh0dXJlVmFyaWFudCB7IEJ1ZmZlcjo6UkdCVGV4dHVyZSB7ICpzdGF0aWNfY2FzdDxHTHVpbnQq
PihtX3ZpZGVvRnJhbWUuZGF0YVswXSkgfSB9LCBtX3NpemUsIG1fZmxhZ3MsIEdMX1JHQkEpOwor
CisgICAgICAgIGlmIChHU1RfVklERU9fSU5GT19JU19ZVVYoJm1fdmlkZW9GcmFtZS5pbmZvKSkg
eworICAgICAgICAgICAgaWYgKEdTVF9WSURFT19JTkZPX05fQ09NUE9ORU5UUygmbV92aWRlb0Zy
YW1lLmluZm8pIDwgMyB8fCBHU1RfVklERU9fSU5GT19OX1BMQU5FUygmbV92aWRlb0ZyYW1lLmlu
Zm8pID4gMykKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAg
aWYgKG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gJiYgKm1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gPT0g
R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OklteFZQVSkgeworICAgICAgICAgICAgICAgIC8vIElN
WCBWUFUgZGVjb2RlciBkZWNvZGVzIFlVViBkYXRhIG9ubHkgaW50byB0aGUgWSB0ZXh0dXJlIGZy
b20gd2hpY2ggdGhlIHNhbXBsZXIKKyAgICAgICAgICAgICAgICAvLyB0aGVuIGRpcmVjdGx5IHBy
b2R1Y2VzIFJHQkEgZGF0YS4gVGV4dHVyZXMgZm9yIG90aGVyIHBsYW5lcyBhcmVuJ3QgdXNlZCwg
YnV0CisgICAgICAgICAgICAgICAgLy8gdGhhdCdzIGRlY29kZXIncyBwcm9ibGVtLiBXZSBoYXZl
IHRvIHRyZWF0IHRoYXQgWSB0ZXh0dXJlIGFzIGhhdmluZyBSR0JBIGRhdGEuCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8QnVmZmVyPihCdWZmZXI6OlRleHR1cmVWYXJpYW50IHsg
QnVmZmVyOjpSR0JUZXh0dXJlIHsgKnN0YXRpY19jYXN0PEdMdWludCo+KG1fdmlkZW9GcmFtZS5k
YXRhWzBdKSB9IH0sIG1fc2l6ZSwgbV9mbGFncywgR0xfUkdCQSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGxhbmVzID0gR1NUX1ZJREVPX0lORk9fTl9Q
TEFORVMoJm1fdmlkZW9GcmFtZS5pbmZvKTsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8R0x1aW50
LCAzPiBwbGFuZXM7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCAzPiB5dXZQbGFu
ZTsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIDM+IHl1dlBsYW5lT2Zmc2V0Owor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUGxhbmVzOyArK2kp
CisgICAgICAgICAgICAgICAgcGxhbmVzW2ldID0gKnN0YXRpY19jYXN0PEdMdWludCo+KG1fdmlk
ZW9GcmFtZS5kYXRhW2ldKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICB5dXZQbGFuZVtpXSA9IEdTVF9WSURFT19JTkZPX0NP
TVBfUExBTkUoJm1fdmlkZW9GcmFtZS5pbmZvLCBpKTsKKyAgICAgICAgICAgICAgICB5dXZQbGFu
ZU9mZnNldFtpXSA9IEdTVF9WSURFT19JTkZPX0NPTVBfUE9GRlNFVCgmbV92aWRlb0ZyYW1lLmlu
Zm8sIGkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGQ6OmFycmF5PEdMZmxvYXQs
IDk+IHl1dlRvUmdiOworICAgICAgICAgICAgaWYgKGdzdF92aWRlb19jb2xvcmltZXRyeV9tYXRj
aGVzKCZHU1RfVklERU9fSU5GT19DT0xPUklNRVRSWSgmbV92aWRlb0ZyYW1lLmluZm8pLCBHU1Rf
VklERU9fQ09MT1JJTUVUUllfQlQ3MDkpKSB7CisgICAgICAgICAgICAgICAgeXV2VG9SZ2IgPSB7
CisgICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgIDAuMGYsICAgIDEuNzg3ZiwKKyAgICAgICAg
ICAgICAgICAgICAgMS4xNjRmLCAtMC4yMTNmLCAtMC41MzFmLAorICAgICAgICAgICAgICAgICAg
ICAxLjE2NGYsICAyLjExMmYsICAwLjBmCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBidDYwMS4gVGhpcyBpcyB0
aGUgc2FtZSBiZWhhdmlvdXIgYXMgR1N0cmVhbWVyJ3MgZ2xjb2xvcmNvbnZlcnQgZWxlbWVudC4K
KyAgICAgICAgICAgICAgICB5dXZUb1JnYiA9IHsKKyAgICAgICAgICAgICAgICAgICAgMS4xNjRm
LCAgMC4wZiwgICAgMS41OTZmLAorICAgICAgICAgICAgICAgICAgICAxLjE2NGYsIC0wLjM5MWYs
IC0wLjgxM2YsCisgICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgIDIuMDE4ZiwgIDAuMGYKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxCdWZmZXI+KCBCdWZmZXI6OlRleHR1cmVWYXJpYW50IHsgQnVmZmVyOjpZVVZUZXh0
dXJlIHsgbnVtYmVyT2ZQbGFuZXMsIHBsYW5lcywgeXV2UGxhbmUsIHl1dlBsYW5lT2Zmc2V0LCB5
dXZUb1JnYiB9IH0sIG1fc2l6ZSwgbV9mbGFncywgR0xfUkdCQSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3N0QnVmZmVyKiBt
X2J1ZmZlcjsKKyAgICBHc3RWaWRlb0ZyYW1lIG1fdmlkZW9GcmFtZSB7IH07CisgICAgSW50U2l6
ZSBtX3NpemU7CisgICAgYm9vbCBtX2hhc0FscGhhQ2hhbm5lbDsKKyAgICBPcHRpb25hbDxHc3RW
aWRlb0RlY29kZXJQbGF0Zm9ybT4gbV92aWRlb0RlY29kZXJQbGF0Zm9ybTsKKyAgICBUZXh0dXJl
TWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3MgeyB9OworICAgIEdMdWludCBtX3RleHR1cmVJRCB7IDAg
fTsKKyAgICBib29sIG1faXNNYXBwZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNNYXBwZWRU
ZXh0dXJlcyB7IGZhbHNlIH07Cit9OworI2VuZGlmCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSgpCit7CisgICAgR1NUX0RFQlVHX0NB
VEVHT1JZX0lOSVQod2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVy
IiwgMCwgIldlYktpdCBtZWRpYSBwbGF5ZXIiKTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikK
LSAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UocGxheWVyKQotICAgICwgbV9i
dWZmZXJpbmcoZmFsc2UpCi0gICAgLCBtX2J1ZmZlcmluZ1BlcmNlbnRhZ2UoMCkKKyAgICA6IG1f
bm90aWZpZXIoTWFpblRocmVhZE5vdGlmaWVyPE1haW5UaHJlYWROb3RpZmljYXRpb24+OjpjcmVh
dGUoKSkKKyAgICAsIG1fcGxheWVyKHBsYXllcikKICAgICAsIG1fY2FjaGVkUG9zaXRpb24oTWVk
aWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAgICwgbV9jYWNoZWREdXJhdGlvbihNZWRpYVRpbWU6
OmludmFsaWRUaW1lKCkpCi0gICAgLCBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9z
aXRpb24oZmFsc2UpCi0gICAgLCBtX2NoYW5naW5nUmF0ZShmYWxzZSkKLSAgICAsIG1fZG93bmxv
YWRGaW5pc2hlZChmYWxzZSkKLSAgICAsIG1fZXJyb3JPY2N1cmVkKGZhbHNlKQotICAgICwgbV9p
c0VuZFJlYWNoZWQoZmFsc2UpCi0gICAgLCBtX2lzU3RyZWFtaW5nKGZhbHNlKQotICAgICwgbV9w
YXVzZWQodHJ1ZSkKLSAgICAsIG1fcGxheWJhY2tSYXRlKDEpCi0gICAgLCBtX3JlcXVlc3RlZFN0
YXRlKEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpCi0gICAgLCBtX3Jlc2V0UGlwZWxpbmUoZmFsc2Up
Ci0gICAgLCBtX3NlZWtpbmcoZmFsc2UpCi0gICAgLCBtX3NlZWtJc1BlbmRpbmcoZmFsc2UpCiAg
ICAgLCBtX3NlZWtUaW1lKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKLSAgICAsIG1fc291cmNl
KG51bGxwdHIpCi0gICAgLCBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZChmYWxzZSkKLSAgICAs
IG1fbWVkaWFMb2NhdGlvbnMobnVsbHB0cikKLSAgICAsIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJ
bmRleCgwKQotICAgICwgbV9wbGF5YmFja1JhdGVQYXVzZShmYWxzZSkKICAgICAsIG1fdGltZU9m
T3ZlcmxhcHBpbmdTZWVrKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKLSAgICAsIG1fbGFzdFBs
YXliYWNrUmF0ZSgxKQogICAgICwgbV9maWxsVGltZXIoKnRoaXMsICZNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKQogICAgICwgbV9tYXhUaW1lTG9hZGVkKE1lZGlh
VGltZTo6emVyb1RpbWUoKSkKICAgICAsIG1fcHJlbG9hZChwbGF5ZXItPnByZWxvYWQoKSkKLSAg
ICAsIG1fZGVsYXlpbmdMb2FkKGZhbHNlKQogICAgICwgbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlk
TG9hZGluZ1Byb2dyZXNzKE1lZGlhVGltZTo6emVyb1RpbWUoKSkKLSAgICAsIG1faGFzVmlkZW8o
ZmFsc2UpCi0gICAgLCBtX2hhc0F1ZGlvKGZhbHNlKQotICAgICwgbV9yZWFkeVRpbWVySGFuZGxl
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJl
YWR5VGltZXJGaXJlZCkKLSAgICAsIG1fdG90YWxCeXRlcygwKQotICAgICwgbV9wcmVzZXJ2ZXNQ
aXRjaChmYWxzZSkKKyAgICAsIG1fZHJhd1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVwYWludCkKKyAgICAsIG1fcmVhZHlUaW1lckhh
bmRsZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpyZWFkeVRpbWVyRmlyZWQKKykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaWYgVVNF
KE5JQ09TSUEpCisgICAgLCBtX25pY29zaWFMYXllcihOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNy
ZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9y
eSgqdGhpcykpKQorI2Vsc2UKKyAgICAsIG1fcGxhdGZvcm1MYXllclByb3h5KGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KCkpKQorI2VuZGlmCisjZW5kaWYgICAg
ICAKIHsKICNpZiBVU0UoR0xJQikKICAgICBtX3JlYWR5VGltZXJIYW5kbGVyLnNldFByaW9yaXR5
KEdfUFJJT1JJVFlfREVGQVVMVF9JRExFKTsKQEAgLTIyMiw1NCArNDQ4LDY0IEBAIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpCiAgICAg
ICAgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcihidXMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIpOwogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
bV9waXBlbGluZS5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVs
bHB0ciwgdGhpcyk7CiAgICAgfQotfQogCi1zdGF0aWMgdm9pZCBjb252ZXJ0VG9JbnRlcm5hbFBy
b3RvY29sKFVSTCYgdXJsKQotewotICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTIs
IDApKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5
KCkgfHwgdXJsLnByb3RvY29sSXNCbG9iKCkpCi0gICAgICAgIHVybC5zZXRQcm90b2NvbCgid2Vi
a2l0KyIgKyB1cmwucHJvdG9jb2woKSk7Ci19CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBp
ZiAobV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9PSBHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6Vmlk
ZW80TGludXgpCisgICAgICAgIGZsdXNoQ3VycmVudEJ1ZmZlcigpOworI2VuZGlmCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBVU0UoTklDT1NJQSkKKyAgICBkb3duY2FzdDxOaWNvc2lh
OjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSku
aW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRQbGF5YmluVVJMKGNvbnN0IFVSTCYgdXJsKQotewotICAgIC8vIENsZWFuIG91
dCBldmVyeXRoaW5nIGFmdGVyIGZpbGU6Ly8gdXJsIHBhdGguCi0gICAgU3RyaW5nIGNsZWFuVVJM
U3RyaW5nKHVybC5zdHJpbmcoKSk7Ci0gICAgaWYgKHVybC5pc0xvY2FsRmlsZSgpKQotICAgICAg
ICBjbGVhblVSTFN0cmluZyA9IGNsZWFuVVJMU3RyaW5nLnN1YnN0cmluZygwLCB1cmwucGF0aEVu
ZCgpKTsKKyAgICBtX25vdGlmaWVyLT5pbnZhbGlkYXRlKCk7CiAKLSAgICBtX3VybCA9IFVSTChV
UkwoKSwgY2xlYW5VUkxTdHJpbmcpOwotICAgIGNvbnZlcnRUb0ludGVybmFsUHJvdG9jb2wobV91
cmwpOwotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiTG9hZCAlcyIsIG1fdXJsLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgp
LCAidXJpIiwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7Ci19CisgICAg
aWYgKG1fdmlkZW9TaW5rKSB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
bWF0Y2hlZChtX3ZpZGVvU2luay5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVs
bHB0ciwgbnVsbHB0ciwgdGhpcyk7CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICAgICAgaWYg
KEdTVF9JU19CSU4obV92aWRlb1NpbmsuZ2V0KCkpKSB7CisgICAgICAgICAgICBHUmVmUHRyPEdz
dEVsZW1lbnQ+IGFwcHNpbmsgPSBhZG9wdEdSZWYoZ3N0X2Jpbl9nZXRfYnlfbmFtZShHU1RfQklO
X0NBU1QobV92aWRlb1NpbmsuZ2V0KCkpLCAid2Via2l0LWdsLXZpZGVvLXNpbmsiKSk7CisgICAg
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEoYXBwc2luay5nZXQo
KSwgdGhpcyk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgbG9h
ZEZ1bGwodXJsU3RyaW5nLCBTdHJpbmcoKSk7CisgICAgaWYgKG1fdm9sdW1lRWxlbWVudCkKKyAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fdm9sdW1lRWxlbWVu
dC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhp
cyk7CisKKyAgICAvLyBUaGlzIHdpbGwgcmVsZWFzZSB0aGUgR1N0cmVhbWVyIHRocmVhZCBmcm9t
IG1fZHJhd0NvbmRpdGlvbiBpbiBub24gQUMgbW9kZSBpbiBjYXNlIHRoZXJlJ3MgYW4gb25nb2lu
ZyB0cmlnZ2VyUmVwYWludCBjYWxsCisgICAgLy8gd2FpdGluZyB0aGVyZSwgYW5kIGVuc3VyZSB0
aGF0IGFueSB0cmlnZ2VyUmVwYWludCBjYWxsIHJlYWNoaW5nIHRoZSBsb2NrIHdvbid0IHdhaXQg
b24gbV9kcmF3Q29uZGl0aW9uLgorICAgIGNhbmNlbFJlcGFpbnQodHJ1ZSk7CisKKyNpZiBFTkFC
TEUoRU5DUllQVEVEX01FRElBKQorICAgIG1fY2RtQXR0YWNobWVudFNlbWFwaG9yZS5zaWduYWwo
KTsKKyNlbmRpZgorCisgICAgLy8gVGhlIGNoYW5nZSB0byBHU1RfU1RBVEVfTlVMTCBzdGF0ZSBp
cyBhbHdheXMgc3luY2hyb25vdXMuIFNvIGFmdGVyIHRoaXMgZ2V0cyBleGVjdXRlZCB3ZSBkb24n
dCBuZWVkIHRvIHdvcnJ5CisgICAgLy8gYWJvdXQgaGFuZGxlcnMgcnVubmluZyBpbiB0aGUgR1N0
cmVhbWVyIHRocmVhZC4KKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKworICAgIG1fcGxh
eWVyID0gbnVsbHB0cjsKIH0KIAotc3RhdGljIHZvaWQgc2V0U3luY09uQ2xvY2soR3N0RWxlbWVu
dCAqZWxlbWVudCwgYm9vbCBzeW5jKQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmlzQXZhaWxhYmxlKCkKIHsKLSAgICBpZiAoIUdTVF9JU19CSU4oZWxlbWVudCkpIHsKLSAgICAg
ICAgZ19vYmplY3Rfc2V0KGVsZW1lbnQsICJzeW5jIiwgc3luYywgTlVMTCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJL
aXRFbGVtZW50cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHc3RJdGVyYXRvciog
aXQgPSBnc3RfYmluX2l0ZXJhdGVfc2lua3MoR1NUX0JJTihlbGVtZW50KSk7Ci0gICAgd2hpbGUg
KGdzdF9pdGVyYXRvcl9mb3JlYWNoKGl0LCAoR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24pKFtd
KGNvbnN0IEdWYWx1ZSogaXRlbSwgdm9pZCogc3luY1B0cikgewotICAgICAgICBib29sKiBzeW5j
ID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHN5bmNQdHIpOwotICAgICAgICBzZXRTeW5jT25DbG9jayhH
U1RfRUxFTUVOVChnX3ZhbHVlX2dldF9vYmplY3QoaXRlbSkpLCAqc3luYyk7Ci0gICAgfSksICZz
eW5jKSA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5j
KGl0KTsKLSAgICBnc3RfaXRlcmF0b3JfZnJlZShpdCk7CisgICAgLy8gRklYTUU6IFRoaXMgaGFz
IG5vdCBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBwbGF5YmluMyBzd2l0Y2guCisgICAgR1JlZlB0cjxH
c3RFbGVtZW50RmFjdG9yeT4gZmFjdG9yeSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5
X2ZpbmQoInBsYXliaW4iKSk7CisgICAgcmV0dXJuIGZhY3Rvcnk7CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzeW5jT25DbG9jayhib29sIHN5bmMpCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJl
Z2lzdHJhciByZWdpc3RyYXIpCiB7Ci0gICAgc2V0U3luY09uQ2xvY2sodmlkZW9TaW5rKCksIHN5
bmMpOwotICAgIHNldFN5bmNPbkNsb2NrKGF1ZGlvU2luaygpLCBzeW5jKTsKKyAgICBpbml0aWFs
aXplRGVidWdDYXRlZ29yeSgpOworCisgICAgaWYgKGlzQXZhaWxhYmxlKCkpIHsKKyAgICAgICAg
cmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsgcmV0dXJuIG1ha2VVbmlxdWU8TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPihwbGF5ZXIpOyB9LAorICAgICAgICAgICAgZ2V0U3Vw
cG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgc3Vw
cG9ydHNLZXlTeXN0ZW0pOworICAgIH0KIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmxvYWRGdWxsKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBp
cGVsaW5lTmFtZSkKQEAgLTMxNCw2ICs1NTAsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmxvYWRGdWxsKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcK
ICAgICAgICAgY29tbWl0TG9hZCgpOwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBsb2FkRnVsbCh1cmxT
dHJpbmcsIFN0cmluZygpKTsKK30KKwogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJj
ZVByaXZhdGVDbGllbnQqKQogewpAQCAtMzUzLDg4ICs1OTQsMTMgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmNvbW1pdExvYWQoKQogICAgIHVwZGF0ZVN0YXRlcygpOwogfQog
Ci1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5YmFja1Bvc2l0aW9u
KCkgY29uc3QKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5jZWxMb2FkKCkK
IHsKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJpc0VuZFJlYWNoZWQ6ICVzLCBz
ZWVraW5nOiAlcywgc2Vla1RpbWU6ICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNFbmRSZWFjaGVk
KSwgYm9vbEZvclByaW50aW5nKG1fc2Vla2luZyksIG1fc2Vla1RpbWUudG9TdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKLSAgICBpZiAobV9pc0VuZFJlYWNoZWQgJiYgbV9zZWVraW5nKQotICAgICAg
ICByZXR1cm4gbV9zZWVrVGltZTsKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXll
cjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9PSBNZWRpYVBsYXllcjo6TG9hZGVkKQorICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBUaGlzIGNvbnN0YW50IHNob3VsZCByZW1haW4gbG93ZXIg
dGhhbiBIVE1MTWVkaWFFbGVtZW50J3MgbWF4VGltZXVwZGF0ZUV2ZW50RnJlcXVlbmN5LgotICAg
IHN0YXRpYyBjb25zdCBTZWNvbmRzIHBvc2l0aW9uQ2FjaGVUaHJlc2hvbGQgPSAyMDBfbXM7Ci0g
ICAgU2Vjb25kcyBub3cgPSBXVEY6OldhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgp
OwotICAgIGlmIChtX2xhc3RRdWVyeVRpbWUgJiYgKG5vdyAtIG1fbGFzdFF1ZXJ5VGltZS52YWx1
ZSgpKSA8IHBvc2l0aW9uQ2FjaGVUaHJlc2hvbGQgJiYgbV9jYWNoZWRQb3NpdGlvbi5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiUmV0dXJuaW5nIGNh
Y2hlZCBwb3NpdGlvbjogJXMiLCBtX2NhY2hlZFBvc2l0aW9uLnRvU3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgIHJldHVybiBtX2NhY2hlZFBvc2l0aW9uOwotICAgIH0KLQotICAgIG1f
bGFzdFF1ZXJ5VGltZSA9IG5vdzsKLQotICAgIC8vIFBvc2l0aW9uIGlzIG9ubHkgYXZhaWxhYmxl
IGlmIG5vIGFzeW5jIHN0YXRlIGNoYW5nZSBpcyBnb2luZyBvbiBhbmQgdGhlIHN0YXRlIGlzIGVp
dGhlciBwYXVzZWQgb3IgcGxheWluZy4KLSAgICBnaW50NjQgcG9zaXRpb24gPSBHU1RfQ0xPQ0tf
VElNRV9OT05FOwotICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24o
R1NUX0ZPUk1BVF9USU1FKTsKLSAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5n
ZXQoKSwgcXVlcnkpKQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAs
ICZwb3NpdGlvbik7Ci0gICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKLQotICAgIEdTVF9UUkFD
RV9PQkpFQ1QocGlwZWxpbmUoKSwgIlBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBjYW5G
YWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uOiAlcyIsIEdTVF9USU1FX0FSR1MocG9z
aXRpb24pLCBib29sRm9yUHJpbnRpbmcobV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bv
c2l0aW9uKSk7Ci0KLSAgICBNZWRpYVRpbWUgcGxheWJhY2tQb3NpdGlvbiA9IE1lZGlhVGltZTo6
emVyb1RpbWUoKTsKLSAgICBHc3RDbG9ja1RpbWUgZ3N0cmVhbWVyUG9zaXRpb24gPSBzdGF0aWNf
Y2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKTsKLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNf
VkFMSUQoZ3N0cmVhbWVyUG9zaXRpb24pKQotICAgICAgICBwbGF5YmFja1Bvc2l0aW9uID0gTWVk
aWFUaW1lKGdzdHJlYW1lclBvc2l0aW9uLCBHU1RfU0VDT05EKTsKLSAgICBlbHNlIGlmIChtX2Nh
bkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24pCi0gICAgICAgIHBsYXliYWNrUG9z
aXRpb24gPSBtX3NlZWtUaW1lOwotCi0gICAgbV9jYWNoZWRQb3NpdGlvbiA9IHBsYXliYWNrUG9z
aXRpb247Ci0gICAgcmV0dXJuIHBsYXliYWNrUG9zaXRpb247Ci19Ci0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVRpbWVyRmlyZWQoKQotewotICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIkluIFJFQURZIGZvciB0b28gbG9uZy4gUmVsZWFzaW5nIHBpcGVs
aW5lIHJlc291cmNlcy4iKTsKLSAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9OVUxM
KTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5l
U3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCi17Ci0gICAgQVNTRVJUKG1fcGlwZWxpbmUpOwotCi0g
ICAgR3N0U3RhdGUgY3VycmVudFN0YXRlOwotICAgIEdzdFN0YXRlIHBlbmRpbmc7Ci0KLSAgICBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJmN1cnJlbnRTdGF0ZSwgJnBl
bmRpbmcsIDApOwotICAgIGlmIChjdXJyZW50U3RhdGUgPT0gbmV3U3RhdGUgfHwgcGVuZGluZyA9
PSBuZXdTdGF0ZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJSZWpl
Y3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgZnJvbSAlcyB3aXRoICVzIHBlbmRpbmciLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSksCi0gICAgICAgICAgICBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShjdXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShw
ZW5kaW5nKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIkNoYW5naW5nIHN0YXRlIGNoYW5nZSB0byAlcyBmcm9tICVzIHdp
dGggJXMgcGVuZGluZyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSwKLSAg
ICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1l
bnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAg
ICBpZiAoY3VycmVudFN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWSAmJiBuZXdTdGF0ZSA+PSBHU1Rf
U1RBVEVfUEFVU0VEKQotICAgICAgICBlbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKTsKLSNlbmRp
ZgotCi0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgbmV3U3RhdGUpOwotICAgIEdzdFN0YXRlIHBh
dXNlZE9yUGxheWluZyA9IG5ld1N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HID8gR1NUX1NUQVRF
X1BBVVNFRCA6IEdTVF9TVEFURV9QTEFZSU5HOwotICAgIGlmIChjdXJyZW50U3RhdGUgIT0gcGF1
c2VkT3JQbGF5aW5nICYmIHNldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVS
RSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ3JlYXRlIGEgdGltZXIgd2hlbiBl
bnRlcmluZyB0aGUgUkVBRFkgc3RhdGUgc28gdGhhdCB3ZSBjYW4gZnJlZSByZXNvdXJjZXMKLSAg
ICAvLyBpZiB3ZSBzdGF5IGZvciB0b28gbG9uZyBvbiBSRUFEWS4KLSAgICAvLyBBbHNvIGxldHMg
cmVtb3ZlIHRoZSB0aW1lciBpZiB3ZSByZXF1ZXN0IGEgc3RhdGUgY2hhbmdlIGZvciBhbnkgc3Rh
dGUgb3RoZXIgdGhhbiBSRUFEWS4KLSAgICAvLyBTZWUgYWxzbyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzU0Ci0gICAgaWYgKG5ld1N0YXRlID09IEdTVF9TVEFU
RV9SRUFEWSAmJiAhbV9yZWFkeVRpbWVySGFuZGxlci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIC8v
IE1heCBpbnRlcnZhbCBpbiBzZWNvbmRzIHRvIHN0YXkgaW4gdGhlIFJFQURZIHN0YXRlIG9uIG1h
bnVhbAotICAgICAgICAvLyBzdGF0ZSBjaGFuZ2UgcmVxdWVzdHMuCi0gICAgICAgIHN0YXRpYyBj
b25zdCBTZWNvbmRzIHJlYWR5U3RhdGVUaW1lckRlbGF5IHsgMV9taW4gfTsKLSAgICAgICAgbV9y
ZWFkeVRpbWVySGFuZGxlci5zdGFydE9uZVNob3QocmVhZHlTdGF0ZVRpbWVyRGVsYXkpOwotICAg
IH0gZWxzZSBpZiAobmV3U3RhdGUgIT0gR1NUX1NUQVRFX1JFQURZKQotICAgICAgICBtX3JlYWR5
VGltZXJIYW5kbGVyLnN0b3AoKTsKLQotICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX3BpcGVs
aW5lKQorICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9SRUFEWSk7CiB9CiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcmVwYXJlVG9QbGF5KCkKQEAgLTQ3
OCw1NCArNjQ0LDQ4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZSgp
CiAgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKIH0KIAotTWVkaWFU
aW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxhdGZvcm1EdXJhdGlvbigpIGNvbnN0
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1l
KCk7Ci0KLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVz
LCBwaXBlbGluZSBzdGF0ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9lcnJvck9jY3VyZWQpLCBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShHU1RfU1RBVEUobV9waXBlbGluZS5nZXQoKSkpKTsK
LSAgICBpZiAobV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCk7CisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgLy8gVGhlIGR1cmF0aW9uIHF1
ZXJ5IHdvdWxkIGZhaWwgb24gYSBub3QtcHJlcm9sbGVkIHBpcGVsaW5lLgotICAgIGlmIChHU1Rf
U1RBVEUobV9waXBlbGluZS5nZXQoKSkgPCBHU1RfU1RBVEVfUEFVU0VEKQotICAgICAgICByZXR1
cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgIGlmIChtX2lzRW5kUmVhY2hlZCkgewor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJJZ25vcmluZyBwYXVzZSBhdCBF
T1MiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgaW50NjRfdCBkdXJhdGlv
biA9IDA7Ci0gICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbihtX3BpcGVsaW5lLmdl
dCgpLCBHU1RfRk9STUFUX1RJTUUsICZkdXJhdGlvbikgfHwgIUdTVF9DTE9DS19USU1FX0lTX1ZB
TElEKGR1cmF0aW9uKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJU
aW1lIGR1cmF0aW9uIHF1ZXJ5IGZhaWxlZCBmb3IgJXMiLCBtX3VybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUo
KTsKKyAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgeworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJQbGF5YmFjayByYXRlIGlzIDAsIHNpbXVsYXRpbmcgUEFVU0VEIHN0
YXRlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBHU1RfTE9HX09CSkVD
VChwaXBlbGluZSgpLCAiRHVyYXRpb246ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJH
UyhkdXJhdGlvbikpOwotICAgIHJldHVybiBNZWRpYVRpbWUoZHVyYXRpb24sIEdTVF9TRUNPTkQp
OworICAgIEdzdFN0YXRlIHN0YXRlOworICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOworICAgIGJvb2wgcGF1c2VkID0gc3RhdGUg
PD0gR1NUX1NUQVRFX1BBVVNFRDsKKyAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiUGF1
c2VkOiAlcyIsIHRvU3RyaW5nKHBhdXNlZCkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHBh
dXNlZDsKIH0KIAotTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVyYXRp
b25NZWRpYVRpbWUoKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRv
U2Vlayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBmbG9hdCByYXRlLCBHc3RTZWVrRmxhZ3Mg
c2Vla1R5cGUpCiB7Ci0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiQ2FjaGVkIGR1
cmF0aW9uOiAlcyIsIG1fY2FjaGVkRHVyYXRpb24udG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
LSAgICBpZiAobV9jYWNoZWREdXJhdGlvbi5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBtX2Nh
Y2hlZER1cmF0aW9uOwotCi0gICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gcGxhdGZvcm1EdXJhdGlv
bigpOwotICAgIGlmICghZHVyYXRpb24gfHwgZHVyYXRpb24uaXNJbnZhbGlkKCkpCi0gICAgICAg
IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0KLSAgICBtX2NhY2hlZER1cmF0aW9uID0g
ZHVyYXRpb247Ci0KLSAgICByZXR1cm4gbV9jYWNoZWREdXJhdGlvbjsKLX0KKyAgICAvLyBEZWZh
dWx0IHZhbHVlcyBmb3IgcmF0ZSA+PSAwLgorICAgIE1lZGlhVGltZSBzdGFydFRpbWUgPSBwb3Np
dGlvbiwgZW5kVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKIAotTWVkaWFUaW1lIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKQotICAgICAgICByZXR1cm4gTWVk
aWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgIGlmIChyYXRlIDwgMCkgeworICAgICAgICBzdGFy
dFRpbWUgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CisgICAgICAgIC8vIElmIHdlIGFyZSBhdCBi
ZWdpbm5pbmcgb2YgbWVkaWEsIHN0YXJ0IGZyb20gdGhlIGVuZCB0bworICAgICAgICAvLyBhdm9p
ZCBpbW1lZGlhdGUgRU9TLgorICAgICAgICBpZiAocG9zaXRpb24gPCBNZWRpYVRpbWU6Onplcm9U
aW1lKCkpCisgICAgICAgICAgICBlbmRUaW1lID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW5kVGltZSA9IHBvc2l0aW9uOworICAgIH0KIAotICAgIEdT
VF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgInNlZWtpbmc6ICVzLCBzZWVrVGltZTogJXMiLCBi
b29sRm9yUHJpbnRpbmcobV9zZWVraW5nKSwgbV9zZWVrVGltZS50b1N0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotICAgIGlmIChtX3NlZWtpbmcpCi0gICAgICAgIHJldHVybiBtX3NlZWtUaW1lOwor
ICAgIGlmICghcmF0ZSkKKyAgICAgICAgcmF0ZSA9IDEuMDsKIAotICAgIHJldHVybiBwbGF5YmFj
a1Bvc2l0aW9uKCk7CisgICAgcmV0dXJuIGdzdF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5nZXQo
KSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrVHlwZSwKKyAgICAgICAgR1NUX1NFRUtfVFlQ
RV9TRVQsIHRvR3N0Q2xvY2tUaW1lKHN0YXJ0VGltZSksIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dz
dENsb2NrVGltZShlbmRUaW1lKSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZWVrKGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1lKQpAQCAtNTg4LDI4ICs3NDgsNiBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayhjb25zdCBNZWRpYVRpbWUm
IG1lZGlhVGltZSkKICAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOwogfQogCi1ib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24s
IGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFncyBzZWVrVHlwZSkKLXsKLSAgICAvLyBEZWZhdWx0IHZh
bHVlcyBmb3IgcmF0ZSA+PSAwLgotICAgIE1lZGlhVGltZSBzdGFydFRpbWUgPSBwb3NpdGlvbiwg
ZW5kVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLQotICAgIGlmIChyYXRlIDwgMCkg
ewotICAgICAgICBzdGFydFRpbWUgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0gICAgICAgIC8v
IElmIHdlIGFyZSBhdCBiZWdpbm5pbmcgb2YgbWVkaWEsIHN0YXJ0IGZyb20gdGhlIGVuZCB0bwot
ICAgICAgICAvLyBhdm9pZCBpbW1lZGlhdGUgRU9TLgotICAgICAgICBpZiAocG9zaXRpb24gPCBN
ZWRpYVRpbWU6Onplcm9UaW1lKCkpCi0gICAgICAgICAgICBlbmRUaW1lID0gZHVyYXRpb25NZWRp
YVRpbWUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZW5kVGltZSA9IHBvc2l0aW9uOwot
ICAgIH0KLQotICAgIGlmICghcmF0ZSkKLSAgICAgICAgcmF0ZSA9IDEuMDsKLQotICAgIHJldHVy
biBnc3RfZWxlbWVudF9zZWVrKG1fcGlwZWxpbmUuZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRfVElN
RSwgc2Vla1R5cGUsCi0gICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShz
dGFydFRpbWUpLCBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoZW5kVGltZSkpOwot
fQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlUGxheWJhY2tSYXRl
KCkKIHsKICAgICBpZiAoIW1fY2hhbmdpbmdSYXRlKQpAQCAtNjQ0LDU4MCArNzgyLDE0MDggQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCiAg
ICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpwYXVzZWQoKSBjb25zdAorTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cGxhdGZvcm1EdXJhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BpcGVsaW5l
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxp
ZFRpbWUoKTsKIAotICAgIGlmIChtX2lzRW5kUmVhY2hlZCkgewotICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJJZ25vcmluZyBwYXVzZSBhdCBFT1MiKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQorICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgImVycm9y
T2NjdXJlZDogJXMsIHBpcGVsaW5lIHN0YXRlOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2Vycm9y
T2NjdXJlZCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKEdTVF9TVEFURShtX3BpcGVsaW5l
LmdldCgpKSkpOworICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICAgICAgcmV0dXJuIE1lZGlh
VGltZTo6aW52YWxpZFRpbWUoKTsKIAotICAgIGlmIChtX3BsYXliYWNrUmF0ZVBhdXNlKSB7Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXliYWNrIHJhdGUgaXMgMCwg
c2ltdWxhdGluZyBQQVVTRUQgc3RhdGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8v
IFRoZSBkdXJhdGlvbiBxdWVyeSB3b3VsZCBmYWlsIG9uIGEgbm90LXByZXJvbGxlZCBwaXBlbGlu
ZS4KKyAgICBpZiAoR1NUX1NUQVRFKG1fcGlwZWxpbmUuZ2V0KCkpIDwgR1NUX1NUQVRFX1BBVVNF
RCkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIGludDY0
X3QgZHVyYXRpb24gPSAwOworICAgIGlmICghZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9w
aXBlbGluZS5nZXQoKSwgR1NUX0ZPUk1BVF9USU1FLCAmZHVyYXRpb24pIHx8ICFHU1RfQ0xPQ0tf
VElNRV9JU19WQUxJRChkdXJhdGlvbikpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiVGltZSBkdXJhdGlvbiBxdWVyeSBmYWlsZWQgZm9yICVzIiwgbV91cmwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5m
aW5pdGVUaW1lKCk7CiAgICAgfQogCi0gICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7Ci0gICAg
Ym9vbCBwYXVzZWQgPSBzdGF0ZSA8PSBHU1RfU1RBVEVfUEFVU0VEOwotICAgIEdTVF9MT0dfT0JK
RUNUKHBpcGVsaW5lKCksICJQYXVzZWQ6ICVzIiwgdG9TdHJpbmcocGF1c2VkKS51dGY4KCkuZGF0
YSgpKTsKLSAgICByZXR1cm4gcGF1c2VkOworICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCks
ICJEdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTKGR1cmF0aW9uKSk7
CisgICAgcmV0dXJuIE1lZGlhVGltZShkdXJhdGlvbiwgR1NUX1NFQ09ORCk7CiB9CiAKLWJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZWVraW5nKCkgY29uc3QKK01lZGlhVGltZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9zZWVraW5nOwotfQorICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUo
KSwgIkNhY2hlZCBkdXJhdGlvbjogJXMiLCBtX2NhY2hlZER1cmF0aW9uLnRvU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgaWYgKG1fY2FjaGVkRHVyYXRpb24uaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gbV9jYWNoZWREdXJhdGlvbjsKIAotI2RlZmluZSBDTEVBUl9UUkFDS1ModHJhY2tz
LCBtZXRob2QpIFwKLSAgICBmb3IgKGF1dG8mIHRyYWNrIDogdHJhY2tzLnZhbHVlcygpKVwKLSAg
ICAgICAgbWV0aG9kKCp0cmFjayk7XAotICAgIHRyYWNrcy5jbGVhcigpOworICAgIE1lZGlhVGlt
ZSBkdXJhdGlvbiA9IHBsYXRmb3JtRHVyYXRpb24oKTsKKyAgICBpZiAoIWR1cmF0aW9uIHx8IGR1
cmF0aW9uLmlzSW52YWxpZCgpKQorICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgp
OwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2xlYXJUcmFja3MoKQotewot
I2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBDTEVBUl9UUkFDS1MobV9hdWRpb1RyYWNrcywg
bV9wbGF5ZXItPnJlbW92ZUF1ZGlvVHJhY2spOwotICAgIENMRUFSX1RSQUNLUyhtX3ZpZGVvVHJh
Y2tzLCBtX3BsYXllci0+cmVtb3ZlVmlkZW9UcmFjayk7Ci0gICAgQ0xFQVJfVFJBQ0tTKG1fdGV4
dFRyYWNrcywgbV9wbGF5ZXItPnJlbW92ZVRleHRUcmFjayk7Ci0jZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgIG1fY2FjaGVkRHVyYXRpb24gPSBkdXJhdGlvbjsKKworICAgIHJldHVy
biBtX2NhY2hlZER1cmF0aW9uOwogfQotI3VuZGVmIENMRUFSX1RSQUNLUwogCi1GbG9hdFNpemUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CitNZWRpYVRp
bWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QK
IHsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGlmICghbV9pc0xlZ2FjeVBsYXliaW4g
JiYgIW1fY3VycmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxW
aWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdmlkZW9UcmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0
KG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOwotCi0gICAgICAgIGlmICh2aWRlb1RyYWNrKSB7Ci0g
ICAgICAgICAgICBhdXRvIHRhZ3MgPSBhZG9wdEdSZWYoZ3N0X3N0cmVhbV9nZXRfdGFncyh2aWRl
b1RyYWNrLT5zdHJlYW0oKSkpOwotICAgICAgICAgICAgZ2ludCB3aWR0aCwgaGVpZ2h0OworICAg
IGlmICghbV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkKKyAgICAgICAgcmV0dXJuIE1lZGlh
VGltZTo6aW52YWxpZFRpbWUoKTsKIAotICAgICAgICAgICAgaWYgKHRhZ3MgJiYgZ3N0X3RhZ19s
aXN0X2dldF9pbnQodGFncy5nZXQoKSwgV0VCS0lUX01FRElBX1RSQUNLX1RBR19XSURUSCwgJndp
ZHRoKSAmJiBnc3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLmdldCgpLCBXRUJLSVRfTUVESUFfVFJB
Q0tfVEFHX0hFSUdIVCwgJmhlaWdodCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgInNlZWtpbmc6ICVz
LCBzZWVrVGltZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9zZWVraW5nKSwgbV9zZWVrVGltZS50
b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChtX3NlZWtpbmcpCisgICAgICAgIHJl
dHVybiBtX3NlZWtUaW1lOwogCi0gICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6Om5hdHVyYWxTaXplKCk7CisgICAgcmV0dXJuIHBsYXliYWNrUG9zaXRpb24oKTsKIH0K
IAotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSNkZWZpbmUgQ1JFQVRFX1RSQUNLKHR5cGUsIFR5
cGUpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbV9o
YXMjI1R5cGUgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgaWYgKCF1c2VNZWRpYVNvdXJjZSkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFJlZlB0cjxUeXBlIyNUcmFja1By
aXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGUobWFrZVdlYWtQdHIoKnRoaXMpLCBpLCBzdHJlYW0pOyBcCi0gICAgICAgICAgICBtXyMjdHlw
ZSMjVHJhY2tzLmFkZCh0cmFjay0+aWQoKSwgdHJhY2spOyAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2Zs
YWdzKHN0cmVhbS5nZXQoKSkgJiBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUKSBcCi0gICAgICAgICAg
ICAgICAgbV9jdXJyZW50IyNUeXBlIyNTdHJlYW1JZCA9IFN0cmluZyhnc3Rfc3RyZWFtX2dldF9z
dHJlYW1faWQoc3RyZWFtLmdldCgpKSk7IFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IEdfU1RN
VF9FTkQKLSNlbHNlCi0jZGVmaW5lIENSRUFURV9UUkFDSyh0eXBlLCBUeXBlKSBHX1NUTVRfU1RB
UlQgeyBcCi0gICAgICAgIG1faGFzIyNUeXBlIyMgPSB0cnVlOyAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSBHX1NUTVRfRU5ECi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlVHJhY2tzKCkKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRSYXRlKGZsb2F0IHJhdGUpCiB7Ci0gICAgQVNTRVJU
KCFtX2lzTGVnYWN5UGxheWJpbik7CisgICAgLy8gSGlnaGVyIHJhdGUgY2F1c2VzIGNyYXNoLgor
ICAgIHJhdGUgPSBjbGFtcFRvKHJhdGUsIC0yMC4wLCAyMC4wKTsKIAotICAgIGJvb2wgdXNlTWVk
aWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X3N0
cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQoKSk7Ci0KLSAg
ICBib29sIG9sZEhhc0F1ZGlvID0gbV9oYXNBdWRpbzsKLSAgICBib29sIG9sZEhhc1ZpZGVvID0g
bV9oYXNWaWRlbzsKLSAgICAvLyBOZXcgc3RyZWFtIGNvbGxlY3Rpb25zIG92ZXJyaWRlIHByZXZp
b3VzIG9uZXMuCi0gICAgY2xlYXJUcmFja3MoKTsKLSAgICB1bnNpZ25lZCB0ZXh0VHJhY2tJbmRl
eCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0
X3N0cmVhbShtX3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCksIGkpOwotICAgICAgICBTdHJpbmcgc3Ry
ZWFtSWQoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOwotICAgICAgICBH
c3RTdHJlYW1UeXBlIHR5cGUgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0uZ2V0
KCkpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkluc3BlY3Rpbmcg
JXMgdHJhY2sgd2l0aCBJRCAlcyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3Ry
ZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBF
X0FVRElPKQotICAgICAgICAgICAgQ1JFQVRFX1RSQUNLKGF1ZGlvLCBBdWRpbyk7Ci0gICAgICAg
IGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklERU8pCi0gICAgICAgICAgICBDUkVB
VEVfVFJBQ0sodmlkZW8sIFZpZGVvKTsKLSAgICAgICAgZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJF
QU1fVFlQRV9URVhUICYmICF1c2VNZWRpYVNvdXJjZSkgewotI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGUodGV4dFRyYWNrSW5kZXgrKywgc3RyZWFtKTsKLSAgICAgICAgICAgIG1fdGV4
dFRyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICBtX3Bs
YXllci0+YWRkVGV4dFRyYWNrKHRyYWNrLmdldCgpKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJVbmtub3duIHRyYWNrIHR5cGUgZm91bmQgZm9yIHN0
cmVhbSAlcyIsIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLQotICAgIGlmICgob2xk
SGFzVmlkZW8gIT0gbV9oYXNWaWRlbykgfHwgKG9sZEhhc0F1ZGlvICE9IG1faGFzQXVkaW8pKQot
ICAgICAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCk7Ci0KLSAgICBpZiAobV9o
YXNWaWRlbykKLSAgICAgICAgbV9wbGF5ZXItPnNpemVDaGFuZ2VkKCk7Ci0KLSAgICBtX3BsYXll
ci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKLX0KLQotI3Vu
ZGVmIENSRUFURV9UUkFDSworICAgIC8vIEF2b2lkIHVzZWxlc3MgcGxheWJhY2sgcmF0ZSB1cGRh
dGUuCisgICAgaWYgKG1fcGxheWJhY2tSYXRlID09IHJhdGUpIHsKKyAgICAgICAgLy8gYW5kIG1h
a2Ugc3VyZSB0aGF0IHVwcGVyIGxheWVycyB3ZXJlIG5vdGlmaWVkIGlmIHJhdGUgd2FzIHNldAog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5hYmxlVHJhY2soVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIHRyYWNrVHlwZSwgdW5zaWduZWQgaW5kZXgpCi17
Ci0gICAgLy8gRklYTUU6IFJlbW92ZSBpc01lZGlhU291cmNlKCkgdGVzdCBiZWxvdyB3aGVuIGZp
eGluZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNTMxLgotICAg
IGlmIChpc01lZGlhU291cmNlKCkpIHsKLSAgICAgICAgR1NUX0ZJWE1FX09CSkVDVChtX3BpcGVs
aW5lLmdldCgpLCAiQXVkaW8vVmlkZW8vVGV4dCB0cmFjayBzd2l0Y2hpbmcgaXMgbm90IHlldCBz
dXBwb3J0ZWQgYnkgdGhlIE1TRSBiYWNrZW5kLiIpOworICAgICAgICBpZiAoIW1fY2hhbmdpbmdS
YXRlICYmIG1fcGxheWVyLT5yYXRlKCkgIT0gbV9wbGF5YmFja1JhdGUpCisgICAgICAgICAgICBt
X3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNv
bnN0IGNoYXIqIHByb3BlcnR5TmFtZTsKLSAgICBjb25zdCBjaGFyKiB0cmFja1R5cGVBc1N0cmlu
ZzsKLSAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RlZFN0cmVhbXM7Ci0gICAgU3RyaW5nIHNlbGVj
dGVkU3RyZWFtSWQ7Ci0KLSAgICBHc3RTdHJlYW0qIHN0cmVhbSA9IG51bGxwdHI7Ci0KLSAgICBp
ZiAoIW1faXNMZWdhY3lQbGF5YmluKSB7Ci0gICAgICAgIHN0cmVhbSA9IGdzdF9zdHJlYW1fY29s
bGVjdGlvbl9nZXRfc3RyZWFtKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQoKSwgaW5kZXgpOwotICAg
ICAgICBpZiAoIXN0cmVhbSkgewotICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKHBpcGVs
aW5lKCksICJObyBzdHJlYW0gdG8gc2VsZWN0IGF0IGluZGV4ICV1IiwgaW5kZXgpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNlbGVjdGVkU3RyZWFtSWQgPSBTdHJp
bmc6OmZyb21VVEY4KGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pKTsKLSAgICAgICAg
c2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChzZWxlY3RlZFN0cmVhbUlkKTsKKyAgICBpZiAoaXNMaXZl
U3RyZWFtKCkpIHsKKyAgICAgICAgLy8gbm90aWZ5IHVwcGVyIGxheWVycyB0aGF0IHdlIGNhbm5v
dCBoYW5kbGUgcGFzc2VkIHJhdGUuCisgICAgICAgIG1fY2hhbmdpbmdSYXRlID0gZmFsc2U7Cisg
ICAgICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOworICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgc3dpdGNoICh0cmFja1R5cGUpIHsKLSAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3Ry
ZWFtZXI6OlRyYWNrVHlwZTo6QXVkaW86Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJjdXJyZW50
LWF1ZGlvIjsKLSAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAiYXVkaW8iOwotICAgICAgICBp
ZiAoIXNlbGVjdGVkU3RyZWFtSWQuaXNFbXB0eSgpICYmIHNlbGVjdGVkU3RyZWFtSWQgPT0gbV9j
dXJyZW50QXVkaW9TdHJlYW1JZCkgewotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICIlcyBzdHJlYW06ICVzIGFscmVhZHkgc2VsZWN0ZWQsIG5vdCBkb2luZyBhbnl0aGlu
Zy4iLCB0cmFja1R5cGVBc1N0cmluZywgc2VsZWN0ZWRTdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIEdzdFN0YXRlIHN0YXRlOworICAg
IEdzdFN0YXRlIHBlbmRpbmc7CiAKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRUZXh0U3RyZWFtSWQu
aXNFbXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRU
ZXh0U3RyZWFtSWQpOwotICAgICAgICBpZiAoIW1fY3VycmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRWaWRlb1N0
cmVhbUlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyOjpUcmFja1R5cGU6OlZpZGVvOgotICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiY3VycmVudC12
aWRlbyI7Ci0gICAgICAgIHRyYWNrVHlwZUFzU3RyaW5nID0gInZpZGVvIjsKLSAgICAgICAgaWYg
KCFzZWxlY3RlZFN0cmVhbUlkLmlzRW1wdHkoKSAmJiBzZWxlY3RlZFN0cmVhbUlkID09IG1fY3Vy
cmVudFZpZGVvU3RyZWFtSWQpIHsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGlu
ZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5IHNlbGVjdGVkLCBub3QgZG9pbmcgYW55dGhpbmcu
IiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVjdGVkU3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBtX3BsYXliYWNrUmF0ZSA9IHJhdGU7
CisgICAgbV9jaGFuZ2luZ1JhdGUgPSB0cnVlOwogCi0gICAgICAgIGlmICghbV9jdXJyZW50QXVk
aW9TdHJlYW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5k
KG1fY3VycmVudEF1ZGlvU3RyZWFtSWQpOwotICAgICAgICBpZiAoIW1fY3VycmVudFRleHRTdHJl
YW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3Vy
cmVudFRleHRTdHJlYW1JZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpUZXh0OgotICAgICAgICBwcm9wZXJ0eU5hbWUgPSAi
Y3VycmVudC10ZXh0IjsKLSAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAidGV4dCI7Ci0gICAg
ICAgIGlmICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0ZWRTdHJlYW1JZCA9
PSBtX2N1cnJlbnRUZXh0U3RyZWFtSWQpIHsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChw
aXBlbGluZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5IHNlbGVjdGVkLCBub3QgZG9pbmcgYW55
dGhpbmcuIiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVjdGVkU3RyZWFtSWQudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBnc3RfZWxlbWVudF9nZXRf
c3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGluZywgMCk7CiAKLSAgICAgICAg
aWYgKCFtX2N1cnJlbnRBdWRpb1N0cmVhbUlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNlbGVj
dGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50QXVkaW9TdHJlYW1JZCk7Ci0gICAgICAgIGlmICgh
bV9jdXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0
cmVhbXMuYXBwZW5kKG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VW5rbm93bjoKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBpZiAoIXJhdGUp
IHsKKyAgICAgICAgbV9jaGFuZ2luZ1JhdGUgPSBmYWxzZTsKKyAgICAgICAgbV9wbGF5YmFja1Jh
dGVQYXVzZSA9IHRydWU7CisgICAgICAgIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUEFVU0VEICYm
IHBlbmRpbmcgIT0gR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5l
U3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBH
U1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkVuYWJsaW5nICVzIHRyYWNrIHdpdGggaW5kZXg6
ICV1IiwgdHJhY2tUeXBlQXNTdHJpbmcsIGluZGV4KTsKLSAgICBpZiAobV9pc0xlZ2FjeVBsYXli
aW4pCi0gICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCBwcm9wZXJ0eU5hbWUs
IGluZGV4LCBudWxscHRyKTsKLSAgICBlbHNlIHsKLSAgICAgICAgR0xpc3QqIHNlbGVjdGVkU3Ry
ZWFtc0xpc3QgPSBudWxscHRyOworICAgIGlmICgoc3RhdGUgIT0gR1NUX1NUQVRFX1BMQVlJTkcg
JiYgc3RhdGUgIT0gR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgfHwgKHBlbmRpbmcgPT0gR1NU
X1NUQVRFX1BBVVNFRCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIHN0cmVhbUlkIDogc2VsZWN0ZWRTdHJlYW1zKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJl
YW1zTGlzdCA9IGdfbGlzdF9hcHBlbmQoc2VsZWN0ZWRTdHJlYW1zTGlzdCwgZ19zdHJkdXAoc3Ry
ZWFtSWQudXRmOCgpLmRhdGEoKSkpOworICAgIHVwZGF0ZVBsYXliYWNrUmF0ZSgpOworfQogCi0g
ICAgICAgIC8vIFRPRE86IE1TRSBHc3RTdHJlYW0gQVBJIHN1cHBvcnQ6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI1MzEKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2Vu
ZF9ldmVudChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zKHNl
bGVjdGVkU3RyZWFtc0xpc3QpKTsKLSAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChzZWxlY3RlZFN0
cmVhbXNMaXN0LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihnX2ZyZWUpKTsKLSAg
ICB9Citkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyYXRlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wbGF5YmFja1JhdGU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp2aWRlb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIqIHBsYXllcikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQcmVzZXJ2
ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQogewotICAgIHBsYXllci0+bV9ub3RpZmllci0+
bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlZpZGVvQ2hhbmdlZCwgW3BsYXllcl0gewot
ICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVmlkZW8oKTsKLSAgICB9KTsKKyAgICBtX3By
ZXNlcnZlc1BpdGNoID0gcHJlc2VydmVzUGl0Y2g7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWQpCiB7
Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8ICFtX3NvdXJjZSkpCisgICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyBwcmVsb2FkIHRvICVzIiwgY29udmVydEVu
dW1lcmF0aW9uVG9TdHJpbmcocHJlbG9hZCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKHByZWxv
YWQgPT0gTWVkaWFQbGF5ZXI6OkF1dG8gJiYgaXNMaXZlU3RyZWFtKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOwot
Ci0gICAgZ2ludCBudW1UcmFja3MgPSAwOwotICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01l
ZGlhU291cmNlKCk7Ci0gICAgR3N0RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8g
bV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOwotICAgIGdfb2JqZWN0X2dldChlbGVt
ZW50LCAibi12aWRlbyIsICZudW1UcmFja3MsIG51bGxwdHIpOworICAgIG1fcHJlbG9hZCA9IHBy
ZWxvYWQ7CisgICAgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdGbGFnKCk7CiAKLSAgICBHU1RfSU5G
T19PQkpFQ1QocGlwZWxpbmUoKSwgIk1lZGlhIGhhcyAlZCB2aWRlbyB0cmFja3MiLCBudW1UcmFj
a3MpOworICAgIGlmIChtX2RlbGF5aW5nTG9hZCAmJiBtX3ByZWxvYWQgIT0gTWVkaWFQbGF5ZXI6
Ok5vbmUpIHsKKyAgICAgICAgbV9kZWxheWluZ0xvYWQgPSBmYWxzZTsKKyAgICAgICAgY29tbWl0
TG9hZCgpOworICAgIH0KK30KIAotICAgIGJvb2wgb2xkSGFzVmlkZW8gPSBtX2hhc1ZpZGVvOwot
ICAgIG1faGFzVmlkZW8gPSBudW1UcmFja3MgPiAwOwotICAgIGlmIChvbGRIYXNWaWRlbyAhPSBt
X2hhc1ZpZGVvKQotICAgICAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCk7Citz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICBhdXRvIHRpbWVSYW5nZXMgPSBtYWtlVW5p
cXVlPFBsYXRmb3JtVGltZVJhbmdlcz4oKTsKKyAgICBpZiAobV9lcnJvck9jY3VyZWQgfHwgaXNM
aXZlU3RyZWFtKCkpCisgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOwogCi0gICAgaWYgKG1faGFz
VmlkZW8pCi0gICAgICAgIG1fcGxheWVyLT5zaXplQ2hhbmdlZCgpOworICAgIE1lZGlhVGltZSBt
ZWRpYUR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKKyAgICBpZiAoIW1lZGlhRHVyYXRp
b24gfHwgbWVkaWFEdXJhdGlvbi5pc1Bvc2l0aXZlSW5maW5pdGUoKSkKKyAgICAgICAgcmV0dXJu
IHRpbWVSYW5nZXM7CiAKLSAgICBpZiAodXNlTWVkaWFTb3VyY2UpIHsKLSAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiVHJhY2tzIG1hbmFnZWQgYnkgc291cmNlIGVsZW1lbnQu
IEJhaWxpbmcgb3V0IG5vdy4iKTsKLSAgICAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxh
eWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
R1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19idWZmZXJp
bmcoR1NUX0ZPUk1BVF9QRVJDRU5UKSk7CiAKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAg
VmVjdG9yPFN0cmluZz4gdmFsaWRWaWRlb1N0cmVhbXM7Ci0gICAgZm9yIChnaW50IGkgPSAwOyBp
IDwgbnVtVHJhY2tzOyArK2kpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZDsKLSAgICAg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCksICJnZXQtdmlkZW8tcGFk
IiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7Ci0gICAgICAgIEFTU0VSVChwYWQpOworICAg
IGlmICghZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQoKSwgcXVlcnkuZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gdGltZVJhbmdlczsKIAotICAgICAgICBTdHJpbmcgc3RyZWFtSWQgPSAi
ViIgKyBTdHJpbmc6Om51bWJlcihpKTsKLSAgICAgICAgdmFsaWRWaWRlb1N0cmVhbXMuYXBwZW5k
KHN0cmVhbUlkKTsKLSAgICAgICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxnaW50PihtX3ZpZGVvVHJh
Y2tzLnNpemUoKSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lcj4gZXhpc3RpbmdUcmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KHN0cmVhbUlkKTsKLSAgICAg
ICAgICAgIGlmIChleGlzdGluZ1RyYWNrKSB7Ci0gICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFj
ay0+c2V0SW5kZXgoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2stPnBhZCgp
ID09IHBhZCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Cisg
ICAgZ3VpbnQgbnVtQnVmZmVyaW5nUmFuZ2VzID0gZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19y
YW5nZXMocXVlcnkuZ2V0KCkpOworICAgIGZvciAoZ3VpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51
bUJ1ZmZlcmluZ1JhbmdlczsgaW5kZXgrKykgeworICAgICAgICBnaW50NjQgcmFuZ2VTdGFydCA9
IDAsIHJhbmdlU3RvcCA9IDA7CisgICAgICAgIGlmIChnc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZl
cmluZ19yYW5nZShxdWVyeS5nZXQoKSwgaW5kZXgsICZyYW5nZVN0YXJ0LCAmcmFuZ2VTdG9wKSkg
eworICAgICAgICAgICAgdWludDY0X3Qgc3RhcnRUaW1lID0gZ3N0X3V0aWxfdWludDY0X3NjYWxl
X2ludF9yb3VuZCh0b0dzdFVuc2lnbmVkNjRUaW1lKG1lZGlhRHVyYXRpb24pLCByYW5nZVN0YXJ0
LCBHU1RfRk9STUFUX1BFUkNFTlRfTUFYKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHN0b3BUaW1l
ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCh0b0dzdFVuc2lnbmVkNjRUaW1lKG1l
ZGlhRHVyYXRpb24pLCByYW5nZVN0b3AsIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgpOworICAgICAg
ICAgICAgdGltZVJhbmdlcy0+YWRkKE1lZGlhVGltZShzdGFydFRpbWUsIEdTVF9TRUNPTkQpLCBN
ZWRpYVRpbWUoc3RvcFRpbWUsIEdTVF9TRUNPTkQpKTsKICAgICAgICAgfQotCi0gICAgICAgIGF1
dG8gdHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRy
KCp0aGlzKSwgaSwgcGFkKTsKLSAgICAgICAgQVNTRVJUKHN0cmVhbUlkID09IHRyYWNrLT5pZCgp
KTsKLSAgICAgICAgbV92aWRlb1RyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrLmNvcHlSZWYoKSk7
Ci0gICAgICAgIG1fcGxheWVyLT5hZGRWaWRlb1RyYWNrKHRyYWNrLmdldCgpKTsKICAgICB9CiAK
LSAgICBwdXJnZUludmFsaWRWaWRlb1RyYWNrcyh2YWxpZFZpZGVvU3RyZWFtcyk7Ci0jZW5kaWYK
KyAgICAvLyBGYWxsYmFjayB0byB0aGUgbW9yZSBnZW5lcmFsIG1heFRpbWVMb2FkZWQoKSBpZiBu
byByYW5nZSBoYXMKKyAgICAvLyBiZWVuIGZvdW5kLgorICAgIGlmICghdGltZVJhbmdlcy0+bGVu
Z3RoKCkpIHsKKyAgICAgICAgTWVkaWFUaW1lIGxvYWRlZCA9IG1heFRpbWVMb2FkZWQoKTsKKyAg
ICAgICAgaWYgKGxvYWRlZC5pc1ZhbGlkKCkgJiYgbG9hZGVkKQorICAgICAgICAgICAgdGltZVJh
bmdlcy0+YWRkKE1lZGlhVGltZTo6emVyb1RpbWUoKSwgbG9hZGVkKTsKKyAgICB9CiAKLSAgICBt
X3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKKyAg
ICByZXR1cm4gdGltZVJhbmdlczsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKiBwbGF5ZXIpCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhN
ZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0CiB7Ci0gICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3Rp
ZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6VmlkZW9DYXBzQ2hhbmdlZCwgW3BsYXllcl0gewot
ICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVmlkZW9DYXBzKCk7Ci0gICAgfSk7Ci19Cisg
ICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiZXJyb3JPY2N1cmVkOiAlcywgaXNMaXZl
U3RyZWFtOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2Vycm9yT2NjdXJlZCksIGJvb2xGb3JQcmlu
dGluZyhpc0xpdmVTdHJlYW0oKSkpOworICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICAgICAg
cmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW9DYXBzKCkKLXsKLSAgICBtX3ZpZGVvU2l6ZSA9
IEludFNpemUoKTsKLSAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRh
dGVkKG1fcGxheWVyKTsKLX0KKyAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCisgICAgICAgIHJldHVy
biBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjphdWRpb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBs
YXllcikKLXsKLSAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZp
Y2F0aW9uOjpBdWRpb0NoYW5nZWQsIFtwbGF5ZXJdIHsKLSAgICAgICAgcGxheWVyLT5ub3RpZnlQ
bGF5ZXJPZkF1ZGlvKCk7Ci0gICAgfSk7CisgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gZHVyYXRp
b25NZWRpYVRpbWUoKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJtYXhNZWRp
YVRpbWVTZWVrYWJsZSwgZHVyYXRpb246ICVzIiwgdG9TdHJpbmcoZHVyYXRpb24pLnV0ZjgoKS5k
YXRhKCkpOworICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCisgICAg
aWYgKGR1cmF0aW9uLmlzUG9zaXRpdmVJbmZpbml0ZSgpKQorICAgICAgICByZXR1cm4gTWVkaWFU
aW1lOjp6ZXJvVGltZSgpOworCisgICAgcmV0dXJuIGR1cmF0aW9uOwogfQogCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCitNZWRpYVRpbWUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKLSAg
ICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgIW1fc291cmNlKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKG1faXNMZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2UoKSk7Cisg
ICAgaWYgKG1fZXJyb3JPY2N1cmVkKQorICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGlt
ZSgpOwogCi0gICAgZ2ludCBudW1UcmFja3MgPSAwOwotICAgIGJvb2wgdXNlTWVkaWFTb3VyY2Ug
PSBpc01lZGlhU291cmNlKCk7Ci0gICAgR3N0RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291
cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOwotICAgIGdfb2JqZWN0X2dl
dChlbGVtZW50LCAibi1hdWRpbyIsICZudW1UcmFja3MsIG51bGxwdHIpOwotCi0gICAgR1NUX0lO
Rk9fT0JKRUNUKHBpcGVsaW5lKCksICJNZWRpYSBoYXMgJWQgYXVkaW8gdHJhY2tzIiwgbnVtVHJh
Y2tzKTsKLSAgICBib29sIG9sZEhhc0F1ZGlvID0gbV9oYXNBdWRpbzsKLSAgICBtX2hhc0F1ZGlv
ID0gbnVtVHJhY2tzID4gMDsKLSAgICBpZiAob2xkSGFzQXVkaW8gIT0gbV9oYXNBdWRpbykKLSAg
ICAgICAgbV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOwotCi0gICAgaWYgKHVzZU1l
ZGlhU291cmNlKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRyYWNr
cyBtYW5hZ2VkIGJ5IHNvdXJjZSBlbGVtZW50LiBCYWlsaW5nIG91dCBub3cuIik7Ci0gICAgICAg
IG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIFZl
Y3RvcjxTdHJpbmc+IHZhbGlkQXVkaW9TdHJlYW1zOwotICAgIGZvciAoZ2ludCBpID0gMDsgaSA8
IG51bVRyYWNrczsgKytpKSB7Ci0gICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7Ci0gICAgICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LWF1ZGlvLXBhZCIs
IGksICZwYWQub3V0UHRyKCksIG51bGxwdHIpOwotICAgICAgICBBU1NFUlQocGFkKTsKKyAgICBN
ZWRpYVRpbWUgbG9hZGVkID0gbV9tYXhUaW1lTG9hZGVkOworICAgIGlmIChtX2lzRW5kUmVhY2hl
ZCkKKyAgICAgICAgbG9hZGVkID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKKyAgICBHU1RfTE9HX09C
SkVDVChwaXBlbGluZSgpLCAibWF4VGltZUxvYWRlZDogJXMiLCB0b1N0cmluZyhsb2FkZWQpLnV0
ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBsb2FkZWQ7Cit9CiAKLSAgICAgICAgU3RyaW5nIHN0
cmVhbUlkID0gIkEiICsgU3RyaW5nOjpudW1iZXIoaSk7Ci0gICAgICAgIHZhbGlkQXVkaW9TdHJl
YW1zLmFwcGVuZChzdHJlYW1JZCk7Ci0gICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4o
bV9hdWRpb1RyYWNrcy5zaXplKCkpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8QXVkaW9UcmFja1By
aXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX2F1ZGlvVHJhY2tzLmdldChzdHJlYW1J
ZCk7Ci0gICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgewotICAgICAgICAgICAgICAgIGV4
aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOwotICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1Ry
YWNrLT5wYWQoKSA9PSBwYWQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlk
TG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAobV9lcnJvck9jY3VyZWQgfHwgbV9s
b2FkaW5nU3RhbGxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGF1dG8gdHJh
Y2sgPSBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCp0aGlz
KSwgaSwgcGFkKTsKLSAgICAgICAgQVNTRVJUKHN0cmVhbUlkID09IHRyYWNrLT5pZCgpKTsKLSAg
ICAgICAgbV9hdWRpb1RyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrKTsKLSAgICAgICAgbV9wbGF5
ZXItPmFkZEF1ZGlvVHJhY2soKnRyYWNrKTsKKyAgICBpZiAoV0VCS0lUX0lTX1dFQl9TUkMobV9z
b3VyY2UuZ2V0KCkpKSB7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJMYXN0
IG5ldHdvcmsgcmVhZCBwb3NpdGlvbjogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBjdXJyZW50OiAl
IiBHX0dVSU5UNjRfRk9STUFULCBtX3JlYWRQb3NpdGlvbkF0TGFzdERpZExvYWRpbmdQcm9ncmVz
cywgbV9uZXR3b3JrUmVhZFBvc2l0aW9uKTsKKyAgICAgICAgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jl
c3MgPSBtX3JlYWRQb3NpdGlvbkF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyA8IG1fbmV0d29ya1Jl
YWRQb3NpdGlvbjsKKyAgICAgICAgbV9yZWFkUG9zaXRpb25BdExhc3REaWRMb2FkaW5nUHJvZ3Jl
c3MgPSBtX25ldHdvcmtSZWFkUG9zaXRpb247CisgICAgICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVs
aW5lKCksICJkaWRMb2FkaW5nUHJvZ3Jlc3M6ICVzIiwgYm9vbEZvclByaW50aW5nKGRpZExvYWRp
bmdQcm9ncmVzcykpOworICAgICAgICByZXR1cm4gZGlkTG9hZGluZ1Byb2dyZXNzOwogICAgIH0K
IAotICAgIHB1cmdlSW52YWxpZEF1ZGlvVHJhY2tzKHZhbGlkQXVkaW9TdHJlYW1zKTsKLSNlbmRp
ZgorICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCAhZHVyYXRpb25NZWRpYVRpbWUoKSB8
fCAoIWlzTWVkaWFTb3VyY2UoKSAmJiAhdG90YWxCeXRlcygpKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQo
bV9wbGF5ZXIpOworICAgIE1lZGlhVGltZSBjdXJyZW50TWF4VGltZUxvYWRlZCA9IG1heFRpbWVM
b2FkZWQoKTsKKyAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcyA9IGN1cnJlbnRNYXhUaW1lTG9h
ZGVkICE9IG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzczsKKyAgICBtX21h
eFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MgPSBjdXJyZW50TWF4VGltZUxvYWRl
ZDsKKyAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiZGlkTG9hZGluZ1Byb2dyZXNzOiAl
cyIsIGJvb2xGb3JQcmludGluZyhkaWRMb2FkaW5nUHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gZGlk
TG9hZGluZ1Byb2dyZXNzOwogfQogCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRleHRDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit1bnNpZ25lZCBsb25nIGxvbmcgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp0b3RhbEJ5dGVzKCkgY29uc3QKIHsKLSAgICBwbGF5ZXItPm1fbm90
aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpUZXh0Q2hhbmdlZCwgW3BsYXll
cl0gewotICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVGV4dCgpOwotICAgIH0pOwotfQor
ICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICAgICAgcmV0dXJuIDA7CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRleHQoKQotewotICAgIGlmIChV
TkxJS0VMWSghbV9waXBlbGluZSB8fCAhbV9zb3VyY2UpKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKG1fdG90YWxCeXRlcykKKyAgICAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKIAotICAgIEFT
U0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOworICAgIGlmICghbV9z
b3VyY2UpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgZ2ludCBudW1UcmFja3MgPSAwOwotICAg
IGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7Ci0gICAgR3N0RWxlbWVudCog
ZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdl
dCgpOwotICAgIGdfb2JqZWN0X2dldChlbGVtZW50LCAibi10ZXh0IiwgJm51bVRyYWNrcywgbnVs
bHB0cik7CisgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgICAgICByZXR1cm4gMDsKIAotICAg
IEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiTWVkaWEgaGFzICVkIHRleHQgdHJhY2tzIiwg
bnVtVHJhY2tzKTsKKyAgICBHc3RGb3JtYXQgZm10ID0gR1NUX0ZPUk1BVF9CWVRFUzsKKyAgICBn
aW50NjQgbGVuZ3RoID0gMDsKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9z
b3VyY2UuZ2V0KCksIGZtdCwgJmxlbmd0aCkpIHsKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBp
cGVsaW5lKCksICJ0b3RhbEJ5dGVzICUiIEdfR0lOVDY0X0ZPUk1BVCwgbGVuZ3RoKTsKKyAgICAg
ICAgbV90b3RhbEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihsZW5ndGgp
OworICAgICAgICBtX2lzU3RyZWFtaW5nID0gIWxlbmd0aDsKKyAgICAgICAgcmV0dXJuIG1fdG90
YWxCeXRlczsKKyAgICB9CiAKLSAgICBpZiAodXNlTWVkaWFTb3VyY2UpIHsKLSAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVHJhY2tzIG1hbmFnZWQgYnkgc291cmNlIGVsZW1l
bnQuIEJhaWxpbmcgb3V0IG5vdy4iKTsKLSAgICAgICAgcmV0dXJuOworICAgIC8vIEZhbGwgYmFj
ayB0byBxdWVyeWluZyB0aGUgc291cmNlIHBhZHMgbWFudWFsbHkuCisgICAgLy8gU2VlIGFsc28g
aHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzODc0OQorICAgIEdz
dEl0ZXJhdG9yKiBpdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyhtX3NvdXJjZS5n
ZXQoKSk7CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgd2hpbGUgKCFkb25lKSB7CisgICAg
ICAgIEdWYWx1ZSBpdGVtID0gR19WQUxVRV9JTklUOworICAgICAgICBzd2l0Y2ggKGdzdF9pdGVy
YXRvcl9uZXh0KGl0ZXIsICZpdGVtKSkgeworICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzog
eworICAgICAgICAgICAgR3N0UGFkKiBwYWQgPSBzdGF0aWNfY2FzdDxHc3RQYWQqPihnX3ZhbHVl
X2dldF9vYmplY3QoJml0ZW0pKTsKKyAgICAgICAgICAgIGdpbnQ2NCBwYWRMZW5ndGggPSAwOwor
ICAgICAgICAgICAgaWYgKGdzdF9wYWRfcXVlcnlfZHVyYXRpb24ocGFkLCBmbXQsICZwYWRMZW5n
dGgpICYmIHBhZExlbmd0aCA+IGxlbmd0aCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBwYWRM
ZW5ndGg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdTVF9J
VEVSQVRPUl9SRVNZTkM6CisgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorICAg
ICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6Cisg
ICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgZ192YWx1ZV91bnNldCgmaXRlbSk7CiAgICAgfQogCi0gICAgVmVjdG9yPFN0cmlu
Zz4gdmFsaWRUZXh0U3RyZWFtczsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7
ICsraSkgewotICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOwotICAgICAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUobV9waXBlbGluZS5nZXQoKSwgImdldC10ZXh0LXBhZCIsIGksICZwYWQub3V0
UHRyKCksIG51bGxwdHIpOwotICAgICAgICBBU1NFUlQocGFkKTsKKyAgICBnc3RfaXRlcmF0b3Jf
ZnJlZShpdGVyKTsKIAotICAgICAgICAvLyBXZSBjYW4ndCBhc3N1bWUgdGhlIHBhZCBoYXMgYSBz
dGlja3kgZXZlbnQgaGVyZSBsaWtlIGltcGxlbWVudGVkIGluCi0gICAgICAgIC8vIEluYmFuZFRl
eHRUcmFja1ByaXZhdGVHU3RyZWFtZXIgYmVjYXVzZSBpdCBtaWdodCBiZSBlbWl0dGVkIGFmdGVy
IHRoZQotICAgICAgICAvLyB0cmFjayB3YXMgY3JlYXRlZC4gU28gZmFsbGJhY2sgdG8gYSBkdW1t
eSBzdHJlYW0gSUQgbGlrZSBpbiB0aGUgQXVkaW8KLSAgICAgICAgLy8gYW5kIFZpZGVvIHRyYWNr
cy4KLSAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIlQiICsgU3RyaW5nOjpudW1iZXIoaSk7Cisg
ICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ0b3RhbEJ5dGVzICUiIEdfR0lOVDY0X0ZP
Uk1BVCwgbGVuZ3RoKTsKKyAgICBtX3RvdGFsQnl0ZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nIGxvbmc+KGxlbmd0aCk7CisgICAgbV9pc1N0cmVhbWluZyA9ICFsZW5ndGg7CisgICAgcmV0
dXJuIG1fdG90YWxCeXRlczsKK30KIAotICAgICAgICB2YWxpZFRleHRTdHJlYW1zLmFwcGVuZChz
dHJlYW1JZCk7Ci0gICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV90ZXh0VHJhY2tz
LnNpemUoKSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0
cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV90ZXh0VHJhY2tzLmdldChzdHJlYW1JZCk7Ci0gICAg
ICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgewotICAgICAgICAgICAgICAgIGV4aXN0aW5nVHJh
Y2stPnNldEluZGV4KGkpOwotICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrLT5wYWQo
KSA9PSBwYWQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIVdFQktJ
VF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBHVW5pcXVlT3V0UHRyPGNoYXI+IG9yaWdpbmFsVVJJLCByZXNvbHZlZFVSSTsKKyAgICBnX29i
amVjdF9nZXQobV9zb3VyY2UuZ2V0KCksICJsb2NhdGlvbiIsICZvcmlnaW5hbFVSSS5vdXRQdHIo
KSwgInJlc29sdmVkLWxvY2F0aW9uIiwgJnJlc29sdmVkVVJJLm91dFB0cigpLCBudWxscHRyKTsK
KyAgICBpZiAoIW9yaWdpbmFsVVJJIHx8ICFyZXNvbHZlZFVSSSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZ19zdHJjbXAwKG9yaWdpbmFsVVJJLmdldCgpLCByZXNvbHZlZFVSSS5n
ZXQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgUmVmPFNlY3VyaXR5T3JpZ2luPiBy
ZXNvbHZlZE9yaWdpbihTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhTdHJpbmc6OmZy
b21VVEY4KHJlc29sdmVkVVJJLmdldCgpKSkpOworICAgIFJlZjxTZWN1cml0eU9yaWdpbj4gcmVx
dWVzdGVkT3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKFN0cmluZzo6ZnJv
bVVURjgob3JpZ2luYWxVUkkuZ2V0KCkpKSk7CisgICAgcmV0dXJuIHJlc29sdmVkT3JpZ2luLT5p
c1NhbWVTY2hlbWVIb3N0UG9ydChyZXF1ZXN0ZWRPcmlnaW4uZ2V0KCkpOworfQorCitPcHRpb25h
bDxib29sPiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndvdWxkVGFpbnRPcmlnaW4oY29u
c3QgU2VjdXJpdHlPcmlnaW4mIG9yaWdpbikgY29uc3QKK3sKKyAgICBpZiAod2Via2l0R3N0Q2hl
Y2tWZXJzaW9uKDEsIDEyLCAwKSkgeworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5l
KCksICJDaGVja2luZyAldSBvcmlnaW5zIiwgbV9vcmlnaW5zLnNpemUoKSk7CisgICAgICAgIGZv
ciAoYXV0byYgcmVzcG9uc2VPcmlnaW4gOiBtX29yaWdpbnMpIHsKKyAgICAgICAgICAgIGlmICgh
b3JpZ2luLmNhbkFjY2VzcygqcmVzcG9uc2VPcmlnaW4pKSB7CisgICAgICAgICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRm91bmQgcmVhY2hhYmxlIHJlc3BvbnNlIG9yaWdp
biIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0KLSAgICAgICAgYXV0byB0cmFjayA9IEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZShpLCBwYWQpOwotICAgICAgICBtX3RleHRUcmFja3MuYWRkKHN0cmVhbUlkLCB0
cmFjay5jb3B5UmVmKCkpOwotICAgICAgICBtX3BsYXllci0+YWRkVGV4dFRyYWNrKHRyYWNrLmdl
dCgpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTm8gdmFsaWQgcmVz
cG9uc2Ugb3JpZ2luIGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBwdXJnZUludmFsaWRUZXh0VHJhY2tzKHZhbGlkVGV4dFN0cmVhbXMpOworICAgIC8vIEdTdHJl
YW1lciA8IDEuMTIgaGFzIGFuIGluY29tcGxldGUgdXJpZG93bmxvYWRlciBpbXBsZW1lbnRhdGlv
biBzbyB3ZQorICAgIC8vIGNhbid0IHVzZSBXZWJLaXRXZWJTcmMgZm9yIGFkYXB0aXZlIGZyYWdt
ZW50cyBkb3dubG9hZGluZyBpZiB0aGlzCisgICAgLy8gdmVyc2lvbiBpcyBkZXRlY3RlZC4KKyAg
ICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKKyAgICByZXR1cm4gbV9oYXNUYWludGVkT3JpZ2luOwog
fQogCi1Hc3RGbG93UmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNh
bXBsZUNhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKQog
ewotICAgIHBsYXllci0+bmV3VGV4dFNhbXBsZSgpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsK
KyAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGUo
R1NUX09CSkVDVChtX3BpcGVsaW5lLmdldCgpKSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgZ3N0
X2VsZW1lbnRfcG9zdF9tZXNzYWdlKG1fcGlwZWxpbmUuZ2V0KCksIG1lc3NhZ2UpOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNhbXBsZSgpCisjaWYgRU5B
QkxFKFdFQl9BVURJTykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbnN1cmVB
dWRpb1NvdXJjZVByb3ZpZGVyKCkKIHsKLSAgICBpZiAoIW1fdGV4dEFwcFNpbmspCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoIW1fYXVkaW9Tb3VyY2VQcm92aWRlcikKKyAgICAgICAgbV9hdWRp
b1NvdXJjZVByb3ZpZGVyID0gbWFrZVVuaXF1ZTxBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVy
PigpOworfQogCi0gICAgR1JlZlB0cjxHc3RFdmVudD4gc3RyZWFtU3RhcnRFdmVudCA9IGFkb3B0
R1JlZigKLSAgICAgICAgZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50KG1fdGV4dEFwcFNpbmtQYWQu
Z2V0KCksIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQsIDApKTsKK0F1ZGlvU291cmNlUHJvdmlkZXIq
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9Tb3VyY2VQcm92aWRlcigpCit7Cisg
ICAgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRlcigpOworICAgIHJldHVybiBtX2F1ZGlvU291cmNl
UHJvdmlkZXIuZ2V0KCk7Cit9CisjZW5kaWYKIAotICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1w
bGU7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fdGV4dEFwcFNpbmsuZ2V0KCksICJwdWxs
LXNhbXBsZSIsICZzYW1wbGUub3V0UHRyKCksIG51bGxwdHIpOwotICAgIEFTU0VSVChzYW1wbGUp
Owordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZCgpCit7
CisgICAgTWVkaWFUaW1lIHByZXZpb3VzRHVyYXRpb24gPSBkdXJhdGlvbk1lZGlhVGltZSgpOwor
ICAgIG1fY2FjaGVkRHVyYXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAKLSAgICBp
ZiAoc3RyZWFtU3RhcnRFdmVudCkgewotICAgICAgICBib29sIGZvdW5kID0gRkFMU0U7Ci0gICAg
ICAgIGNvbnN0IGdjaGFyKiBpZDsKLSAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFy
dChzdHJlYW1TdGFydEV2ZW50LmdldCgpLCAmaWQpOwotICAgICAgICBmb3IgKGF1dG8mIHRyYWNr
IDogbV90ZXh0VHJhY2tzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcCh0cmFj
ay0+c3RyZWFtSWQoKS51dGY4KCkuZGF0YSgpLCBpZCkpIHsKLSAgICAgICAgICAgICAgICB0cmFj
ay0+aGFuZGxlU2FtcGxlKHNhbXBsZSk7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGlmICghZm91bmQpCi0gICAgICAgICAgICBHU1RfV0FSTklORygiR290IHNhbXBsZSB3aXRoIHVu
a25vd24gc3RyZWFtIElEICVzLiIsIGlkKTsKLSAgICB9IGVsc2UKLSAgICAgICAgR1NUX1dBUk5J
TkcoIlVuYWJsZSB0byBoYW5kbGUgc2FtcGxlIHdpdGggbm8gc3RyZWFtIHN0YXJ0IGV2ZW50LiIp
OworICAgIC8vIEF2b2lkIGVtaXRpbmcgZHVyYXRpb25jaGFuZ2VkIGluIHRoZSBjYXNlIHdoZXJl
IHRoZSBwcmV2aW91cworICAgIC8vIGR1cmF0aW9uIHdhcyAwIGJlY2F1c2UgdGhhdCBjYXNlIGlz
IGFscmVhZHkgaGFuZGxlZCBieSB0aGUKKyAgICAvLyBIVE1MTWVkaWFFbGVtZW50LgorICAgIGlm
IChwcmV2aW91c0R1cmF0aW9uICYmIGR1cmF0aW9uTWVkaWFUaW1lKCkgIT0gcHJldmlvdXNEdXJh
dGlvbikKKyAgICAgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOwogfQotI2VuZGlmCiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRSYXRlKGZsb2F0IHJhdGUpCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlU2V0dXAoR3N0RWxlbWVudCog
c291cmNlRWxlbWVudCkKIHsKLSAgICAvLyBIaWdoZXIgcmF0ZSBjYXVzZXMgY3Jhc2guCi0gICAg
cmF0ZSA9IGNsYW1wVG8ocmF0ZSwgLTIwLjAsIDIwLjApOworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIlNvdXJjZSBlbGVtZW50IHNldC11cCBmb3IgJXMiLCBHU1RfRUxFTUVOVF9O
QU1FKHNvdXJjZUVsZW1lbnQpKTsKIAotICAgIC8vIEF2b2lkIHVzZWxlc3MgcGxheWJhY2sgcmF0
ZSB1cGRhdGUuCi0gICAgaWYgKG1fcGxheWJhY2tSYXRlID09IHJhdGUpIHsKLSAgICAgICAgLy8g
YW5kIG1ha2Ugc3VyZSB0aGF0IHVwcGVyIGxheWVycyB3ZXJlIG5vdGlmaWVkIGlmIHJhdGUgd2Fz
IHNldAorICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkgJiYgR1NUX09C
SkVDVF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkpKQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2Z1bmMoR1NUX0VMRU1FTlRfUEFSRU5UKG1fc291cmNlLmdldCgpKSwgcmVp
bnRlcnByZXRfY2FzdDxncG9pbnRlcj4odXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2sp
LCB0aGlzKTsKIAotICAgICAgICBpZiAoIW1fY2hhbmdpbmdSYXRlICYmIG1fcGxheWVyLT5yYXRl
KCkgIT0gbV9wbGF5YmFja1JhdGUpCi0gICAgICAgICAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX3NvdXJjZSA9IHNvdXJjZUVsZW1lbnQ7
CiAKLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpIHsKLSAgICAgICAgLy8gbm90aWZ5IHVwcGVyIGxh
eWVycyB0aGF0IHdlIGNhbm5vdCBoYW5kbGUgcGFzc2VkIHJhdGUuCi0gICAgICAgIG1fY2hhbmdp
bmdSYXRlID0gZmFsc2U7Ci0gICAgICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwotICAgICAg
ICByZXR1cm47CisgICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkgewor
ICAgICAgICB3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcihXRUJLSVRfV0VCX1NSQ19DQVNUKG1f
c291cmNlLmdldCgpKSwgbV9wbGF5ZXIpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KEdTVF9F
TEVNRU5UX1BBUkVOVChtX3NvdXJjZS5nZXQoKSksICJlbGVtZW50LWFkZGVkIiwgR19DQUxMQkFD
Syh1cmlEZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayksIHRoaXMpOworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCisgICAgfSBlbHNlIGlmIChXRUJLSVRfSVNfTUVESUFfU1RSRUFNX1NSQyhz
b3VyY2VFbGVtZW50KSkgeworICAgICAgICBhdXRvIHN0cmVhbSA9IG1fc3RyZWFtUHJpdmF0ZS5n
ZXQoKTsKKyAgICAgICAgQVNTRVJUKHN0cmVhbSk7CisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFt
U3JjU2V0U3RyZWFtKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKHNvdXJjZUVsZW1lbnQpLCBzdHJl
YW0pOworI2VuZGlmCiAgICAgfQorfQogCi0gICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgR3N0U3Rh
dGUgcGVuZGluZzsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRBdWRpb1N0
cmVhbVByb3BlcnRpZXNDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXll
ciwgR09iamVjdCogb2JqZWN0KQoreworICAgIHBsYXllci0+c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0
aWVzKG9iamVjdCk7Cit9CiAKLSAgICBtX3BsYXliYWNrUmF0ZSA9IHJhdGU7Ci0gICAgbV9jaGFu
Z2luZ1JhdGUgPSB0cnVlOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldEF1
ZGlvU3RyZWFtUHJvcGVydGllcyhHT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKGdfc3RyY21w
MChHX09CSkVDVF9UWVBFX05BTUUob2JqZWN0KSwgIkdzdFB1bHNlU2luayIpKQorICAgICAgICBy
ZXR1cm47CiAKLSAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0
YXRlLCAmcGVuZGluZywgMCk7CisgICAgY29uc3QgY2hhciogcm9sZSA9IG1fcGxheWVyLT5jbGll
bnQoKS5tZWRpYVBsYXllcklzVmlkZW8oKSA/ICJ2aWRlbyIgOiAibXVzaWMiOworICAgIEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXcoInN0cmVhbS1wcm9wZXJ0aWVz
IiwgIm1lZGlhLnJvbGUiLCBHX1RZUEVfU1RSSU5HLCByb2xlLCBudWxscHRyKTsKKyAgICBnX29i
amVjdF9zZXQob2JqZWN0LCAic3RyZWFtLXByb3BlcnRpZXMiLCBzdHJ1Y3R1cmUsIG51bGxwdHIp
OworICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZShzdHJ1Y3R1cmUpOworICAgIEdVbmlxdWVQdHI8Z2No
YXI+IGVsZW1lbnROYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKEdTVF9FTEVNRU5UKG9iamVjdCkp
KTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXQgbWVkaWEucm9sZSBhcyAl
cyBhdCAlcyIsIHJvbGUsIGVsZW1lbnROYW1lLmdldCgpKTsKK30KIAotICAgIGlmICghcmF0ZSkg
ewotICAgICAgICBtX2NoYW5naW5nUmF0ZSA9IGZhbHNlOwotICAgICAgICBtX3BsYXliYWNrUmF0
ZVBhdXNlID0gdHJ1ZTsKLSAgICAgICAgaWYgKHN0YXRlICE9IEdTVF9TVEFURV9QQVVTRUQgJiYg
cGVuZGluZyAhPSBHU1RfU1RBVEVfUEFVU0VEKQotICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVT
dGF0ZShHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICAgICAgcmV0dXJuOwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyKiBwbGF5ZXIsIEdzdEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQpCit7CisgICAgcGxh
eWVyLT5zb3VyY2VTZXR1cChzb3VyY2VFbGVtZW50KTsKK30KKworYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCit7
CisgICAgQVNTRVJUKG1fcGlwZWxpbmUpOworCisgICAgR3N0U3RhdGUgY3VycmVudFN0YXRlOwor
ICAgIEdzdFN0YXRlIHBlbmRpbmc7CisKKyAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgJmN1cnJlbnRTdGF0ZSwgJnBlbmRpbmcsIDApOworICAgIGlmIChjdXJyZW50
U3RhdGUgPT0gbmV3U3RhdGUgfHwgcGVuZGluZyA9PSBuZXdTdGF0ZSkgeworICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJSZWplY3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgZnJv
bSAlcyB3aXRoICVzIHBlbmRpbmciLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0
ZSksCisgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShjdXJyZW50U3RhdGUp
LCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIGlmICgoc3RhdGUgIT0gR1NUX1NUQVRFX1BMQVlJTkcgJiYgc3Rh
dGUgIT0gR1NUX1NUQVRFX1BBVVNFRCkKLSAgICAgICAgfHwgKHBlbmRpbmcgPT0gR1NUX1NUQVRF
X1BBVVNFRCkpCi0gICAgICAgIHJldHVybjsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJDaGFuZ2luZyBzdGF0ZSBjaGFuZ2UgdG8gJXMgZnJvbSAlcyB3aXRoICVzIHBlbmRpbmci
LCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSksCisgICAgICAgIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9u
YW1lKHBlbmRpbmcpKTsKIAotICAgIHVwZGF0ZVBsYXliYWNrUmF0ZSgpOworI2lmIFVTRShHU1RS
RUFNRVJfR0wpCisgICAgaWYgKGN1cnJlbnRTdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFkgJiYgbmV3
U3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgZW5zdXJlR0xWaWRlb1NpbmtDb250
ZXh0KCk7CisjZW5kaWYKKworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHNldFN0YXRlUmVzdWx0
ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIG5ld1N0YXRlKTsKKyAg
ICBHc3RTdGF0ZSBwYXVzZWRPclBsYXlpbmcgPSBuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlO
RyA/IEdTVF9TVEFURV9QQVVTRUQgOiBHU1RfU1RBVEVfUExBWUlORzsKKyAgICBpZiAoY3VycmVu
dFN0YXRlICE9IHBhdXNlZE9yUGxheWluZyAmJiBzZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVf
Q0hBTkdFX0ZBSUxVUkUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBh
IHRpbWVyIHdoZW4gZW50ZXJpbmcgdGhlIFJFQURZIHN0YXRlIHNvIHRoYXQgd2UgY2FuIGZyZWUg
cmVzb3VyY2VzCisgICAgLy8gaWYgd2Ugc3RheSBmb3IgdG9vIGxvbmcgb24gUkVBRFkuCisgICAg
Ly8gQWxzbyBsZXRzIHJlbW92ZSB0aGUgdGltZXIgaWYgd2UgcmVxdWVzdCBhIHN0YXRlIGNoYW5n
ZSBmb3IgYW55IHN0YXRlIG90aGVyIHRoYW4gUkVBRFkuCisgICAgLy8gU2VlIGFsc28gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzM1NAorICAgIGlmIChuZXdTdGF0
ZSA9PSBHU1RfU1RBVEVfUkVBRFkgJiYgIW1fcmVhZHlUaW1lckhhbmRsZXIuaXNBY3RpdmUoKSkg
eworICAgICAgICAvLyBNYXggaW50ZXJ2YWwgaW4gc2Vjb25kcyB0byBzdGF5IGluIHRoZSBSRUFE
WSBzdGF0ZSBvbiBtYW51YWwKKyAgICAgICAgLy8gc3RhdGUgY2hhbmdlIHJlcXVlc3RzLgorICAg
ICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyByZWFkeVN0YXRlVGltZXJEZWxheSB7IDFfbWluIH07
CisgICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc3RhcnRPbmVTaG90KHJlYWR5U3RhdGVUaW1l
ckRlbGF5KTsKKyAgICB9IGVsc2UgaWYgKG5ld1N0YXRlICE9IEdTVF9TVEFURV9SRUFEWSkKKyAg
ICAgICAgbV9yZWFkeVRpbWVySGFuZGxlci5zdG9wKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotZG91YmxlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmF0ZSgpIGNvbnN0Cit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UGxheWJpblVSTChjb25zdCBVUkwmIHVy
bCkKIHsKLSAgICByZXR1cm4gbV9wbGF5YmFja1JhdGU7CisgICAgLy8gQ2xlYW4gb3V0IGV2ZXJ5
dGhpbmcgYWZ0ZXIgZmlsZTovLyB1cmwgcGF0aC4KKyAgICBTdHJpbmcgY2xlYW5VUkxTdHJpbmco
dXJsLnN0cmluZygpKTsKKyAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCisgICAgICAgIGNsZWFu
VVJMU3RyaW5nID0gY2xlYW5VUkxTdHJpbmcuc3Vic3RyaW5nKDAsIHVybC5wYXRoRW5kKCkpOwor
CisgICAgbV91cmwgPSBVUkwoVVJMKCksIGNsZWFuVVJMU3RyaW5nKTsKKyAgICBjb252ZXJ0VG9J
bnRlcm5hbFByb3RvY29sKG1fdXJsKTsKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
IkxvYWQgJXMiLCBtX3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBnX29iamVjdF9z
ZXQobV9waXBlbGluZS5nZXQoKSwgInVyaSIsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IG51bGxwdHIpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJl
c2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKK3N0YXRpYyB2b2lkIHNldFN5bmNPbkNs
b2NrKEdzdEVsZW1lbnQgKmVsZW1lbnQsIGJvb2wgc3luYykKIHsKLSAgICBtX3ByZXNlcnZlc1Bp
dGNoID0gcHJlc2VydmVzUGl0Y2g7CisgICAgaWYgKCFHU1RfSVNfQklOKGVsZW1lbnQpKSB7Cisg
ICAgICAgIGdfb2JqZWN0X3NldChlbGVtZW50LCAic3luYyIsIHN5bmMsIE5VTEwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgR3N0SXRlcmF0b3IqIGl0ID0gZ3N0X2Jpbl9pdGVyYXRl
X3NpbmtzKEdTVF9CSU4oZWxlbWVudCkpOworICAgIHdoaWxlIChnc3RfaXRlcmF0b3JfZm9yZWFj
aChpdCwgKEdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uKShbXShjb25zdCBHVmFsdWUqIGl0ZW0s
IHZvaWQqIHN5bmNQdHIpIHsKKyAgICAgICAgYm9vbCogc3luYyA9IHN0YXRpY19jYXN0PGJvb2wq
PihzeW5jUHRyKTsKKyAgICAgICAgc2V0U3luY09uQ2xvY2soR1NUX0VMRU1FTlQoZ192YWx1ZV9n
ZXRfb2JqZWN0KGl0ZW0pKSwgKnN5bmMpOworICAgIH0pLCAmc3luYykgPT0gR1NUX0lURVJBVE9S
X1JFU1lOQykKKyAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdCk7CisgICAgZ3N0X2l0ZXJh
dG9yX2ZyZWUoaXQpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKCkgY29uc3QKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzeW5jT25DbG9jayhib29sIHN5bmMpCiB7Ci0gICAgYXV0
byB0aW1lUmFuZ2VzID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybVRpbWVSYW5nZXM+KCk7Ci0gICAgaWYg
KG1fZXJyb3JPY2N1cmVkIHx8IGlzTGl2ZVN0cmVhbSgpKQotICAgICAgICByZXR1cm4gdGltZVJh
bmdlczsKKyAgICBzZXRTeW5jT25DbG9jayh2aWRlb1NpbmsoKSwgc3luYyk7CisgICAgc2V0U3lu
Y09uQ2xvY2soYXVkaW9TaW5rKCksIHN5bmMpOworfQogCi0gICAgTWVkaWFUaW1lIG1lZGlhRHVy
YXRpb24gPSBkdXJhdGlvbk1lZGlhVGltZSgpOwotICAgIGlmICghbWVkaWFEdXJhdGlvbiB8fCBt
ZWRpYUR1cmF0aW9uLmlzUG9zaXRpdmVJbmZpbml0ZSgpKQotICAgICAgICByZXR1cm4gdGltZVJh
bmdlczsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZp
ZGVvKCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgIW1fc291cmNlKSkKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYo
Z3N0X3F1ZXJ5X25ld19idWZmZXJpbmcoR1NUX0ZPUk1BVF9QRVJDRU5UKSk7CisgICAgQVNTRVJU
KG1faXNMZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2UoKSk7CiAKLSAgICBpZiAoIWdzdF9l
bGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKSkKLSAgICAgICAgcmV0
dXJuIHRpbWVSYW5nZXM7CisgICAgZ2ludCBudW1UcmFja3MgPSAwOworICAgIGJvb2wgdXNlTWVk
aWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7CisgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IHVz
ZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOworICAgIGdf
b2JqZWN0X2dldChlbGVtZW50LCAibi12aWRlbyIsICZudW1UcmFja3MsIG51bGxwdHIpOwogCi0g
ICAgZ3VpbnQgbnVtQnVmZmVyaW5nUmFuZ2VzID0gZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19y
YW5nZXMocXVlcnkuZ2V0KCkpOwotICAgIGZvciAoZ3VpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51
bUJ1ZmZlcmluZ1JhbmdlczsgaW5kZXgrKykgewotICAgICAgICBnaW50NjQgcmFuZ2VTdGFydCA9
IDAsIHJhbmdlU3RvcCA9IDA7Ci0gICAgICAgIGlmIChnc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZl
cmluZ19yYW5nZShxdWVyeS5nZXQoKSwgaW5kZXgsICZyYW5nZVN0YXJ0LCAmcmFuZ2VTdG9wKSkg
ewotICAgICAgICAgICAgdWludDY0X3Qgc3RhcnRUaW1lID0gZ3N0X3V0aWxfdWludDY0X3NjYWxl
X2ludF9yb3VuZCh0b0dzdFVuc2lnbmVkNjRUaW1lKG1lZGlhRHVyYXRpb24pLCByYW5nZVN0YXJ0
LCBHU1RfRk9STUFUX1BFUkNFTlRfTUFYKTsKLSAgICAgICAgICAgIHVpbnQ2NF90IHN0b3BUaW1l
ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCh0b0dzdFVuc2lnbmVkNjRUaW1lKG1l
ZGlhRHVyYXRpb24pLCByYW5nZVN0b3AsIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgpOwotICAgICAg
ICAgICAgdGltZVJhbmdlcy0+YWRkKE1lZGlhVGltZShzdGFydFRpbWUsIEdTVF9TRUNPTkQpLCBN
ZWRpYVRpbWUoc3RvcFRpbWUsIEdTVF9TRUNPTkQpKTsKLSAgICAgICAgfQorICAgIEdTVF9JTkZP
X09CSkVDVChwaXBlbGluZSgpLCAiTWVkaWEgaGFzICVkIHZpZGVvIHRyYWNrcyIsIG51bVRyYWNr
cyk7CisKKyAgICBib29sIG9sZEhhc1ZpZGVvID0gbV9oYXNWaWRlbzsKKyAgICBtX2hhc1ZpZGVv
ID0gbnVtVHJhY2tzID4gMDsKKyAgICBpZiAob2xkSGFzVmlkZW8gIT0gbV9oYXNWaWRlbykKKyAg
ICAgICAgbV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOworCisgICAgaWYgKG1faGFz
VmlkZW8pCisgICAgICAgIG1fcGxheWVyLT5zaXplQ2hhbmdlZCgpOworCisgICAgaWYgKHVzZU1l
ZGlhU291cmNlKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRyYWNr
cyBtYW5hZ2VkIGJ5IHNvdXJjZSBlbGVtZW50LiBCYWlsaW5nIG91dCBub3cuIik7CisgICAgICAg
IG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRmFsbGJhY2sgdG8gdGhlIG1vcmUgZ2Vu
ZXJhbCBtYXhUaW1lTG9hZGVkKCkgaWYgbm8gcmFuZ2UgaGFzCi0gICAgLy8gYmVlbiBmb3VuZC4K
LSAgICBpZiAoIXRpbWVSYW5nZXMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIE1lZGlhVGltZSBsb2Fk
ZWQgPSBtYXhUaW1lTG9hZGVkKCk7Ci0gICAgICAgIGlmIChsb2FkZWQuaXNWYWxpZCgpICYmIGxv
YWRlZCkKLSAgICAgICAgICAgIHRpbWVSYW5nZXMtPmFkZChNZWRpYVRpbWU6Onplcm9UaW1lKCks
IGxvYWRlZCk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFZlY3RvcjxTdHJpbmc+IHZh
bGlkVmlkZW9TdHJlYW1zOworICAgIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytp
KSB7CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7CisgICAgICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LXZpZGVvLXBhZCIsIGksICZwYWQub3V0UHRy
KCksIG51bGxwdHIpOworICAgICAgICBBU1NFUlQocGFkKTsKKworICAgICAgICBTdHJpbmcgc3Ry
ZWFtSWQgPSAiViIgKyBTdHJpbmc6Om51bWJlcihpKTsKKyAgICAgICAgdmFsaWRWaWRlb1N0cmVh
bXMuYXBwZW5kKHN0cmVhbUlkKTsKKyAgICAgICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxnaW50Piht
X3ZpZGVvVHJhY2tzLnNpemUoKSkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KHN0cmVhbUlk
KTsKKyAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrKSB7CisgICAgICAgICAgICAgICAgZXhp
c3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7CisgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJh
Y2stPnBhZCgpID09IHBhZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHRyYWNrID0gVmlkZW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0cigqdGhpcyksIGksIHBhZCk7CisgICAgICAg
IEFTU0VSVChzdHJlYW1JZCA9PSB0cmFjay0+aWQoKSk7CisgICAgICAgIG1fdmlkZW9UcmFja3Mu
YWRkKHN0cmVhbUlkLCB0cmFjay5jb3B5UmVmKCkpOworICAgICAgICBtX3BsYXllci0+YWRkVmlk
ZW9UcmFjayh0cmFjay5nZXQoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRpbWVSYW5nZXM7Cisg
ICAgcHVyZ2VJbnZhbGlkVmlkZW9UcmFja3ModmFsaWRWaWRlb1N0cmVhbXMpOworI2VuZGlmCisK
KyAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVy
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2Uo
R3N0TWVzc2FnZSogbWVzc2FnZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciog
cGxheWVyKQogewotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnI7Ci0gICAgR1VuaXF1ZU91
dFB0cjxnY2hhcj4gZGVidWc7Ci0gICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcjsK
LSAgICBib29sIGlzc3VlRXJyb3IgPSB0cnVlOwotICAgIGJvb2wgYXR0ZW1wdE5leHRMb2NhdGlv
biA9IGZhbHNlOwotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3Nh
Z2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKLSAgICBHc3RTdGF0ZSByZXF1ZXN0ZWRTdGF0ZSwg
Y3VycmVudFN0YXRlOworICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWRO
b3RpZmljYXRpb246OlZpZGVvQ2Fwc0NoYW5nZWQsIFtwbGF5ZXJdIHsKKyAgICAgICAgcGxheWVy
LT5ub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpOworICAgIH0pOworfQogCi0gICAgbV9jYW5GYWxs
QmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uID0gZmFsc2U7Cit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMoKQoreworICAgIG1fdmlk
ZW9TaXplID0gSW50U2l6ZSgpOworICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVu
Z2luZVVwZGF0ZWQobV9wbGF5ZXIpOworfQogCi0gICAgaWYgKHN0cnVjdHVyZSkgewotICAgICAg
ICBjb25zdCBnY2hhciogbWVzc2FnZVR5cGVOYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShz
dHJ1Y3R1cmUpOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvQ2hhbmdl
ZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIHBs
YXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OkF1ZGlvQ2hh
bmdlZCwgW3BsYXllcl0geworICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mQXVkaW8oKTsK
KyAgICB9KTsKK30KIAotICAgICAgICAvLyBSZWRpcmVjdCBtZXNzYWdlcyBhcmUgc2VudCBmcm9t
IGVsZW1lbnRzLCBsaWtlIHF0ZGVtdXgsIHRvCi0gICAgICAgIC8vIG5vdGlmeSBvZiB0aGUgbmV3
IGxvY2F0aW9uKHMpIG9mIHRoZSBtZWRpYS4KLSAgICAgICAgaWYgKCFnX3N0cmNtcDAobWVzc2Fn
ZVR5cGVOYW1lLCAicmVkaXJlY3QiKSkgewotICAgICAgICAgICAgbWVkaWFMb2NhdGlvbkNoYW5n
ZWQobWVzc2FnZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Cit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCit7Cisg
ICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8ICFtX3NvdXJjZSkpCisgICAgICAgIHJldHVy
bjsKIAotICAgIC8vIFdlIGlnbm9yZSBzdGF0ZSBjaGFuZ2VzIGZyb20gaW50ZXJuYWwgZWxlbWVu
dHMuIFRoZXkgYXJlIGZvcndhcmRlZCB0byBwbGF5YmluMiBhbnl3YXkuCi0gICAgYm9vbCBtZXNz
YWdlU291cmNlSXNQbGF5YmluID0gR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpID09IHJlaW50ZXJw
cmV0X2Nhc3Q8R3N0T2JqZWN0Kj4obV9waXBlbGluZS5nZXQoKSk7CisgICAgQVNTRVJUKG1faXNM
ZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2UoKSk7CiAKLSAgICBHU1RfTE9HX09CSkVDVChw
aXBlbGluZSgpLCAiTWVzc2FnZSAlcyByZWNlaXZlZCBmcm9tIGVsZW1lbnQgJXMiLCBHU1RfTUVT
U0FHRV9UWVBFX05BTUUobWVzc2FnZSksIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsK
LSAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9N
RVNTQUdFX0VSUk9SOgotICAgICAgICBpZiAobV9yZXNldFBpcGVsaW5lIHx8ICFtX21pc3NpbmdQ
bHVnaW5DYWxsYmFja3MuaXNFbXB0eSgpIHx8IG1fZXJyb3JPY2N1cmVkKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnIub3V0
UHRyKCksICZkZWJ1Zy5vdXRQdHIoKSk7Ci0gICAgICAgIEdTVF9FUlJPUigiRXJyb3IgJWQ6ICVz
ICh1cmw9JXMpIiwgZXJyLT5jb2RlLCBlcnItPm1lc3NhZ2UsIG1fdXJsLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKKyAgICBib29sIHVzZU1lZGlhU291
cmNlID0gaXNNZWRpYVNvdXJjZSgpOworICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRp
YVNvdXJjZSA/IG1fc291cmNlLmdldCgpIDogbV9waXBlbGluZS5nZXQoKTsKKyAgICBnX29iamVj
dF9nZXQoZWxlbWVudCwgIm4tYXVkaW8iLCAmbnVtVHJhY2tzLCBudWxscHRyKTsKIAotICAgICAg
ICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdl
dCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCAid2Via2l0LXZpZGVvLmVycm9yIik7Cisg
ICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJNZWRpYSBoYXMgJWQgYXVkaW8gdHJhY2tz
IiwgbnVtVHJhY2tzKTsKKyAgICBib29sIG9sZEhhc0F1ZGlvID0gbV9oYXNBdWRpbzsKKyAgICBt
X2hhc0F1ZGlvID0gbnVtVHJhY2tzID4gMDsKKyAgICBpZiAob2xkSGFzQXVkaW8gIT0gbV9oYXNB
dWRpbykKKyAgICAgICAgbV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOwogCi0gICAg
ICAgIGVycm9yID0gTWVkaWFQbGF5ZXI6OkVtcHR5OwotICAgICAgICBpZiAoZ19lcnJvcl9tYXRj
aGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19O
T1RfRk9VTkQpCi0gICAgICAgICAgICB8fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1Rf
U1RSRUFNX0VSUk9SLCBHU1RfU1RSRUFNX0VSUk9SX1dST05HX1RZUEUpCi0gICAgICAgICAgICB8
fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfU1RSRUFNX0VSUk9SLCBHU1RfU1RSRUFN
X0VSUk9SX0ZBSUxFRCkKLSAgICAgICAgICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCks
IEdTVF9DT1JFX0VSUk9SLCBHU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTikKLSAgICAgICAg
ICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9SRVNPVVJDRV9FUlJPUiwgR1NU
X1JFU09VUkNFX0VSUk9SX05PVF9GT1VORCkpCi0gICAgICAgICAgICBlcnJvciA9IE1lZGlhUGxh
eWVyOjpGb3JtYXRFcnJvcjsKLSAgICAgICAgZWxzZSBpZiAoZ19lcnJvcl9tYXRjaGVzKGVyci5n
ZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORCkp
IHsKLSAgICAgICAgICAgIC8vIExldCB0aGUgbWVkaWFQbGF5ZXJDbGllbnQgaGFuZGxlIHRoZSBz
dHJlYW0gZXJyb3IsIGluCi0gICAgICAgICAgICAvLyB0aGlzIGNhc2UgdGhlIEhUTUxNZWRpYUVs
ZW1lbnQgd2lsbCBlbWl0IGEgc3RhbGxlZAorICAgIGlmICh1c2VNZWRpYVNvdXJjZSkgeworICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJUcmFja3MgbWFuYWdlZCBieSBzb3Vy
Y2UgZWxlbWVudC4gQmFpbGluZyBvdXQgbm93LiIpOworICAgICAgICBtX3BsYXllci0+Y2xpZW50
KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxp
ZEF1ZGlvU3RyZWFtczsKKyAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkg
eworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUobV9waXBlbGluZS5nZXQoKSwgImdldC1hdWRpby1wYWQiLCBpLCAmcGFkLm91dFB0cigp
LCBudWxscHRyKTsKKyAgICAgICAgQVNTRVJUKHBhZCk7CisKKyAgICAgICAgU3RyaW5nIHN0cmVh
bUlkID0gIkEiICsgU3RyaW5nOjpudW1iZXIoaSk7CisgICAgICAgIHZhbGlkQXVkaW9TdHJlYW1z
LmFwcGVuZChzdHJlYW1JZCk7CisgICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV9h
dWRpb1RyYWNrcy5zaXplKCkpKSB7CisgICAgICAgICAgICBSZWZQdHI8QXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX2F1ZGlvVHJhY2tzLmdldChzdHJlYW1JZCk7
CisgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgeworICAgICAgICAgICAgICAgIGV4aXN0
aW5nVHJhY2stPnNldEluZGV4KGkpOworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNr
LT5wYWQoKSA9PSBwYWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXV0byB0cmFjayA9IEF1ZGlvVHJhY2tQcml2YXRl
R1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCBpLCBwYWQpOworICAgICAgICBB
U1NFUlQoc3RyZWFtSWQgPT0gdHJhY2stPmlkKCkpOworICAgICAgICBtX2F1ZGlvVHJhY2tzLmFk
ZChzdHJlYW1JZCwgdHJhY2spOworICAgICAgICBtX3BsYXllci0+YWRkQXVkaW9UcmFjaygqdHJh
Y2spOworICAgIH0KKworICAgIHB1cmdlSW52YWxpZEF1ZGlvVHJhY2tzKHZhbGlkQXVkaW9TdHJl
YW1zKTsKKyNlbmRpZgorCisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5l
VXBkYXRlZChtX3BsYXllcik7Cit9CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGV4dENoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5v
dGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpUZXh0Q2hhbmdlZCwgW3BsYXllcl0geworICAg
ICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVGV4dCgpOworICAgIH0pOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KCkKK3sKKyAgICBp
ZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgIW1fc291cmNlKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKG1faXNMZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2UoKSk7CisKKyAg
ICBnaW50IG51bVRyYWNrcyA9IDA7CisgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFT
b3VyY2UoKTsKKyAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3Nv
dXJjZS5nZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7CisgICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQs
ICJuLXRleHQiLCAmbnVtVHJhY2tzLCBudWxscHRyKTsKKworICAgIEdTVF9JTkZPX09CSkVDVChw
aXBlbGluZSgpLCAiTWVkaWEgaGFzICVkIHRleHQgdHJhY2tzIiwgbnVtVHJhY2tzKTsKKworICAg
IGlmICh1c2VNZWRpYVNvdXJjZSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJUcmFja3MgbWFuYWdlZCBieSBzb3VyY2UgZWxlbWVudC4gQmFpbGluZyBvdXQgbm93LiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFN0cmluZz4gdmFsaWRUZXh0
U3RyZWFtczsKKyAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgeworICAg
ICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9waXBlbGluZS5nZXQoKSwgImdldC10ZXh0LXBhZCIsIGksICZwYWQub3V0UHRyKCksIG51bGxw
dHIpOworICAgICAgICBBU1NFUlQocGFkKTsKKworICAgICAgICAvLyBXZSBjYW4ndCBhc3N1bWUg
dGhlIHBhZCBoYXMgYSBzdGlja3kgZXZlbnQgaGVyZSBsaWtlIGltcGxlbWVudGVkIGluCisgICAg
ICAgIC8vIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIgYmVjYXVzZSBpdCBtaWdodCBi
ZSBlbWl0dGVkIGFmdGVyIHRoZQorICAgICAgICAvLyB0cmFjayB3YXMgY3JlYXRlZC4gU28gZmFs
bGJhY2sgdG8gYSBkdW1teSBzdHJlYW0gSUQgbGlrZSBpbiB0aGUgQXVkaW8KKyAgICAgICAgLy8g
YW5kIFZpZGVvIHRyYWNrcy4KKyAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIlQiICsgU3RyaW5n
OjpudW1iZXIoaSk7CisKKyAgICAgICAgdmFsaWRUZXh0U3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQp
OworICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fdGV4dFRyYWNrcy5zaXplKCkp
KSB7CisgICAgICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4g
ZXhpc3RpbmdUcmFjayA9IG1fdGV4dFRyYWNrcy5nZXQoc3RyZWFtSWQpOworICAgICAgICAgICAg
aWYgKGV4aXN0aW5nVHJhY2spIHsKKyAgICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJ
bmRleChpKTsKKyAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFk
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8gdHJhY2sgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpjcmVhdGUoaSwgcGFkKTsKKyAgICAgICAgbV90ZXh0VHJhY2tzLmFkZChzdHJlYW1JZCwgdHJh
Y2suY29weVJlZigpKTsKKyAgICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjayh0cmFjay5nZXQo
KSk7CisgICAgfQorCisgICAgcHVyZ2VJbnZhbGlkVGV4dFRyYWNrcyh2YWxpZFRleHRTdHJlYW1z
KTsKK30KKworR3N0Rmxvd1JldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1Rl
eHRTYW1wbGVDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sK
KyAgICBwbGF5ZXItPm5ld1RleHRTYW1wbGUoKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0U2FtcGxlKCkKK3sK
KyAgICBpZiAoIW1fdGV4dEFwcFNpbmspCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8
R3N0RXZlbnQ+IHN0cmVhbVN0YXJ0RXZlbnQgPSBhZG9wdEdSZWYoCisgICAgICAgIGdzdF9wYWRf
Z2V0X3N0aWNreV9ldmVudChtX3RleHRBcHBTaW5rUGFkLmdldCgpLCBHU1RfRVZFTlRfU1RSRUFN
X1NUQVJULCAwKSk7CisKKyAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlOworICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZShtX3RleHRBcHBTaW5rLmdldCgpLCAicHVsbC1zYW1wbGUiLCAmc2Ft
cGxlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBBU1NFUlQoc2FtcGxlKTsKKworICAgIGlmIChz
dHJlYW1TdGFydEV2ZW50KSB7CisgICAgICAgIGJvb2wgZm91bmQgPSBGQUxTRTsKKyAgICAgICAg
Y29uc3QgZ2NoYXIqIGlkOworICAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX3N0YXJ0KHN0
cmVhbVN0YXJ0RXZlbnQuZ2V0KCksICZpZCk7CisgICAgICAgIGZvciAoYXV0byYgdHJhY2sgOiBt
X3RleHRUcmFja3MudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHRyYWNrLT5z
dHJlYW1JZCgpLnV0ZjgoKS5kYXRhKCksIGlkKSkgeworICAgICAgICAgICAgICAgIHRyYWNrLT5o
YW5kbGVTYW1wbGUoc2FtcGxlKTsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFmb3VuZCkKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJHb3Qgc2FtcGxlIHdpdGggdW5rbm93
biBzdHJlYW0gSUQgJXMuIiwgaWQpOworICAgIH0gZWxzZQorICAgICAgICBHU1RfV0FSTklORygi
VW5hYmxlIHRvIGhhbmRsZSBzYW1wbGUgd2l0aCBubyBzdHJlYW0gc3RhcnQgZXZlbnQuIik7Cit9
CisjZW5kaWYKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZpbGxUaW1lckZp
cmVkKCkKK3sKKyAgICBpZiAobV9lcnJvck9jY3VyZWQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gQW4gZXJyb3Igb2NjdXJyZWQsIGRpc2FibGlu
ZyB0aGUgZmlsbCB0aW1lciIpOworICAgICAgICBtX2ZpbGxUaW1lci5zdG9wKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1Jl
Zihnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhHU1RfRk9STUFUX1BFUkNFTlQpKTsKKyAgICBkb3Vi
bGUgZmlsbFN0YXR1cyA9IDEwMC4wOworICAgIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZSA9IEdTVF9C
VUZGRVJJTkdfRE9XTkxPQUQ7CisKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV9zb3VyY2Uu
Z2V0KCksIHF1ZXJ5LmdldCgpKSkgeworICAgICAgICBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5n
X3N0YXRzKHF1ZXJ5LmdldCgpLCAmbW9kZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisK
KyAgICAgICAgaW50IHBlcmNlbnRhZ2U7CisgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJp
bmdfcGVyY2VudChxdWVyeS5nZXQoKSwgbnVsbHB0ciwgJnBlcmNlbnRhZ2UpOworICAgICAgICBm
aWxsU3RhdHVzID0gcGVyY2VudGFnZTsKKyAgICB9IGVsc2UgaWYgKG1faHR0cFJlc3BvbnNlVG90
YWxTaXplKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJp
bmddIFF1ZXJ5IGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIG5ldHdvcmsgcmVhZCBwb3NpdGlvbiBl
c3RpbWF0aW9uIik7CisgICAgICAgIGZpbGxTdGF0dXMgPSAxMDAuMCAqIChzdGF0aWNfY2FzdDxk
b3VibGU+KG1fbmV0d29ya1JlYWRQb3NpdGlvbikgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG1faHR0
cFJlc3BvbnNlVG90YWxTaXplKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gVW5hYmxlIHRvIGRldGVybWluZSBvbi1kaXNr
IGJ1ZmZlcmluZyBzdGF0dXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVwZGF0
ZUJ1ZmZlcmluZ1N0YXR1cyhtb2RlLCBmaWxsU3RhdHVzKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmxvYWRTdGF0ZUNoYW5nZWQoKQoreworICAgIHVwZGF0ZVN0YXRl
cygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGltZUNoYW5nZWQo
KQoreworICAgIHVwZGF0ZVN0YXRlcygpOworICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZChNZWRp
YVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtFcnJvciwgTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgcmVhZHlTdGF0ZSwgYm9vbCBmb3JjZU5vdGlmaWNhdGlvbnMpCit7CisgICAgR1NUX1dBUk5J
TkcoIkxvYWRpbmcgZmFpbGVkLCBlcnJvcjogJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmlu
ZyhuZXR3b3JrRXJyb3IpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgbV9lcnJvck9jY3VyZWQgPSB0
cnVlOworICAgIGlmIChmb3JjZU5vdGlmaWNhdGlvbnMgfHwgbV9uZXR3b3JrU3RhdGUgIT0gbmV0
d29ya0Vycm9yKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gbmV0d29ya0Vycm9yOworICAg
ICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIH0KKyAgICBpZiAoZm9y
Y2VOb3RpZmljYXRpb25zIHx8IG1fcmVhZHlTdGF0ZSAhPSByZWFkeVN0YXRlKSB7CisgICAgICAg
IG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRl
Q2hhbmdlZCgpOworICAgIH0KKworICAgIC8vIExvYWRpbmcgZmFpbGVkLCByZW1vdmUgcmVhZHkg
dGltZXIuCisgICAgbV9yZWFkeVRpbWVySGFuZGxlci5zdG9wKCk7Cit9CisKK0dzdEVsZW1lbnQq
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlQXVkaW9TaW5rKCkKK3sKKyAgICBt
X2F1dG9BdWRpb1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1dG9hdWRpb3Npbmsi
LCBudWxscHRyKTsKKyAgICBpZiAoIW1fYXV0b0F1ZGlvU2luaykgeworICAgICAgICBHU1RfV0FS
TklORygiR1N0cmVhbWVyJ3MgYXV0b2F1ZGlvc2luayBub3QgZm91bmQuIFBsZWFzZSBjaGVjayB5
b3VyIGdzdC1wbHVnaW5zLWdvb2QgaW5zdGFsbGF0aW9uIik7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2F1dG9BdWRpb1Np
bmsuZ2V0KCksICJjaGlsZC1hZGRlZCIsIEdfQ0FMTEJBQ0soc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0
aWVzQ2FsbGJhY2spLCB0aGlzKTsKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgR3N0RWxl
bWVudCogYXVkaW9TaW5rQmluID0gZ3N0X2Jpbl9uZXcoImF1ZGlvLXNpbmsiKTsKKyAgICBlbnN1
cmVBdWRpb1NvdXJjZVByb3ZpZGVyKCk7CisgICAgbV9hdWRpb1NvdXJjZVByb3ZpZGVyLT5jb25m
aWd1cmVBdWRpb0JpbihhdWRpb1NpbmtCaW4sIG51bGxwdHIpOworICAgIHJldHVybiBhdWRpb1Np
bmtCaW47CisjZWxzZQorICAgIHJldHVybiBtX2F1dG9BdWRpb1NpbmsuZ2V0KCk7CisjZW5kaWYK
K30KKworR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb1Npbmso
KSBjb25zdAoreworICAgIEdzdEVsZW1lbnQqIHNpbms7CisgICAgZ19vYmplY3RfZ2V0KG1fcGlw
ZWxpbmUuZ2V0KCksICJhdWRpby1zaW5rIiwgJnNpbmssIG51bGxwdHIpOworICAgIHJldHVybiBz
aW5rOworfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5YmFj
a1Bvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJp
c0VuZFJlYWNoZWQ6ICVzLCBzZWVraW5nOiAlcywgc2Vla1RpbWU6ICVzIiwgYm9vbEZvclByaW50
aW5nKG1faXNFbmRSZWFjaGVkKSwgYm9vbEZvclByaW50aW5nKG1fc2Vla2luZyksIG1fc2Vla1Rp
bWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9pc0VuZFJlYWNoZWQgJiYg
bV9zZWVraW5nKQorICAgICAgICByZXR1cm4gbV9zZWVrVGltZTsKKworICAgIC8vIFRoaXMgY29u
c3RhbnQgc2hvdWxkIHJlbWFpbiBsb3dlciB0aGFuIEhUTUxNZWRpYUVsZW1lbnQncyBtYXhUaW1l
dXBkYXRlRXZlbnRGcmVxdWVuY3kuCisgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgcG9zaXRpb25D
YWNoZVRocmVzaG9sZCA9IDIwMF9tczsKKyAgICBTZWNvbmRzIG5vdyA9IFdURjo6V2FsbFRpbWU6
Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgaWYgKG1fbGFzdFF1ZXJ5VGltZSAmJiAo
bm93IC0gbV9sYXN0UXVlcnlUaW1lLnZhbHVlKCkpIDwgcG9zaXRpb25DYWNoZVRocmVzaG9sZCAm
JiBtX2NhY2hlZFBvc2l0aW9uLmlzVmFsaWQoKSkgeworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNU
KHBpcGVsaW5lKCksICJSZXR1cm5pbmcgY2FjaGVkIHBvc2l0aW9uOiAlcyIsIG1fY2FjaGVkUG9z
aXRpb24udG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVk
UG9zaXRpb247CisgICAgfQorCisgICAgbV9sYXN0UXVlcnlUaW1lID0gbm93OworCisgICAgLy8g
UG9zaXRpb24gaXMgb25seSBhdmFpbGFibGUgaWYgbm8gYXN5bmMgc3RhdGUgY2hhbmdlIGlzIGdv
aW5nIG9uIGFuZCB0aGUgc3RhdGUgaXMgZWl0aGVyIHBhdXNlZCBvciBwbGF5aW5nLgorICAgIGdp
bnQ2NCBwb3NpdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgR3N0UXVlcnkqIHF1ZXJ5
ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX1RJTUUpOworICAgIGlmIChnc3Rf
ZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeSkpCisgICAgICAgIGdzdF9xdWVy
eV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKKyAgICBnc3RfcXVlcnlfdW5y
ZWYocXVlcnkpOworCisgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiUG9zaXRpb24g
JSIgR1NUX1RJTUVfRk9STUFUICIsIGNhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRp
b246ICVzIiwgR1NUX1RJTUVfQVJHUyhwb3NpdGlvbiksIGJvb2xGb3JQcmludGluZyhtX2NhbkZh
bGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24pKTsKKworICAgIE1lZGlhVGltZSBwbGF5
YmFja1Bvc2l0aW9uID0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOworICAgIEdzdENsb2NrVGltZSBn
c3RyZWFtZXJQb3NpdGlvbiA9IHN0YXRpY19jYXN0PEdzdENsb2NrVGltZT4ocG9zaXRpb24pOwor
ICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRChnc3RyZWFtZXJQb3NpdGlvbikpCisgICAg
ICAgIHBsYXliYWNrUG9zaXRpb24gPSBNZWRpYVRpbWUoZ3N0cmVhbWVyUG9zaXRpb24sIEdTVF9T
RUNPTkQpOworICAgIGVsc2UgaWYgKG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3Np
dGlvbikKKyAgICAgICAgcGxheWJhY2tQb3NpdGlvbiA9IG1fc2Vla1RpbWU7CisKKyAgICBtX2Nh
Y2hlZFBvc2l0aW9uID0gcGxheWJhY2tQb3NpdGlvbjsKKyAgICByZXR1cm4gcGxheWJhY2tQb3Np
dGlvbjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmVuYWJsZVRyYWNr
KFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSB0cmFja1R5cGUsIHVuc2lnbmVk
IGluZGV4KQoreworICAgIC8vIEZJWE1FOiBSZW1vdmUgaXNNZWRpYVNvdXJjZSgpIHRlc3QgYmVs
b3cgd2hlbiBmaXhpbmcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
MjUzMS4KKyAgICBpZiAoaXNNZWRpYVNvdXJjZSgpKSB7CisgICAgICAgIEdTVF9GSVhNRV9PQkpF
Q1QobV9waXBlbGluZS5nZXQoKSwgIkF1ZGlvL1ZpZGVvL1RleHQgdHJhY2sgc3dpdGNoaW5nIGlz
IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IHRoZSBNU0UgYmFja2VuZC4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZTsKKyAgICBjb25zdCBjaGFy
KiB0cmFja1R5cGVBc1N0cmluZzsKKyAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RlZFN0cmVhbXM7
CisgICAgU3RyaW5nIHNlbGVjdGVkU3RyZWFtSWQ7CisKKyAgICBHc3RTdHJlYW0qIHN0cmVhbSA9
IG51bGxwdHI7CisKKyAgICBpZiAoIW1faXNMZWdhY3lQbGF5YmluKSB7CisgICAgICAgIHN0cmVh
bSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtKG1fc3RyZWFtQ29sbGVjdGlvbi5n
ZXQoKSwgaW5kZXgpOworICAgICAgICBpZiAoIXN0cmVhbSkgeworICAgICAgICAgICAgR1NUX1dB
Uk5JTkdfT0JKRUNUKHBpcGVsaW5lKCksICJObyBzdHJlYW0gdG8gc2VsZWN0IGF0IGluZGV4ICV1
IiwgaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNlbGVj
dGVkU3RyZWFtSWQgPSBTdHJpbmc6OmZyb21VVEY4KGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChz
dHJlYW0pKTsKKyAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChzZWxlY3RlZFN0cmVhbUlk
KTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRyYWNrVHlwZSkgeworICAgIGNhc2UgVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpBdWRpbzoKKyAgICAgICAgcHJvcGVydHlOYW1l
ID0gImN1cnJlbnQtYXVkaW8iOworICAgICAgICB0cmFja1R5cGVBc1N0cmluZyA9ICJhdWRpbyI7
CisgICAgICAgIGlmICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0ZWRTdHJl
YW1JZCA9PSBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKSB7CisgICAgICAgICAgICBHU1RfSU5GT19P
QkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMgYWxyZWFkeSBzZWxlY3RlZCwgbm90IGRv
aW5nIGFueXRoaW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5nLCBzZWxlY3RlZFN0cmVhbUlkLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFtX2N1cnJlbnRUZXh0U3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2VsZWN0ZWRT
dHJlYW1zLmFwcGVuZChtX2N1cnJlbnRUZXh0U3RyZWFtSWQpOworICAgICAgICBpZiAoIW1fY3Vy
cmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1z
LmFwcGVuZChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlZpZGVvOgorICAgICAgICBw
cm9wZXJ0eU5hbWUgPSAiY3VycmVudC12aWRlbyI7CisgICAgICAgIHRyYWNrVHlwZUFzU3RyaW5n
ID0gInZpZGVvIjsKKyAgICAgICAgaWYgKCFzZWxlY3RlZFN0cmVhbUlkLmlzRW1wdHkoKSAmJiBz
ZWxlY3RlZFN0cmVhbUlkID09IG1fY3VycmVudFZpZGVvU3RyZWFtSWQpIHsKKyAgICAgICAgICAg
IEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5IHNlbGVj
dGVkLCBub3QgZG9pbmcgYW55dGhpbmcuIiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVjdGVkU3Ry
ZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIW1fY3VycmVudEF1ZGlvU3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKTsKKyAgICAg
ICAgaWYgKCFtX2N1cnJlbnRUZXh0U3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2Vs
ZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRUZXh0U3RyZWFtSWQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VGV4dDoK
KyAgICAgICAgcHJvcGVydHlOYW1lID0gImN1cnJlbnQtdGV4dCI7CisgICAgICAgIHRyYWNrVHlw
ZUFzU3RyaW5nID0gInRleHQiOworICAgICAgICBpZiAoIXNlbGVjdGVkU3RyZWFtSWQuaXNFbXB0
eSgpICYmIHNlbGVjdGVkU3RyZWFtSWQgPT0gbV9jdXJyZW50VGV4dFN0cmVhbUlkKSB7CisgICAg
ICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMgYWxyZWFk
eSBzZWxlY3RlZCwgbm90IGRvaW5nIGFueXRoaW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5nLCBzZWxl
Y3RlZFN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRBdWRpb1N0cmVhbUlkLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50QXVkaW9TdHJlYW1JZCk7
CisgICAgICAgIGlmICghbV9jdXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlw
ZTo6VW5rbm93bjoKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkVuYWJsaW5nICVzIHRy
YWNrIHdpdGggaW5kZXg6ICV1IiwgdHJhY2tUeXBlQXNTdHJpbmcsIGluZGV4KTsKKyAgICBpZiAo
bV9pc0xlZ2FjeVBsYXliaW4pCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgp
LCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBudWxscHRyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgR0xp
c3QqIHNlbGVjdGVkU3RyZWFtc0xpc3QgPSBudWxscHRyOworCisgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgc3RyZWFtSWQgOiBzZWxlY3RlZFN0cmVhbXMpCisgICAgICAgICAgICBzZWxlY3RlZFN0
cmVhbXNMaXN0ID0gZ19saXN0X2FwcGVuZChzZWxlY3RlZFN0cmVhbXNMaXN0LCBnX3N0cmR1cChz
dHJlYW1JZC51dGY4KCkuZGF0YSgpKSk7CisKKyAgICAgICAgLy8gVE9ETzogTVNFIEdzdFN0cmVh
bSBBUEkgc3VwcG9ydDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
MjUzMQorICAgICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KG1fcGlwZWxpbmUuZ2V0KCksIGdz
dF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXMoc2VsZWN0ZWRTdHJlYW1zTGlzdCkpOworICAgICAg
ICBnX2xpc3RfZnJlZV9mdWxsKHNlbGVjdGVkU3RyZWFtc0xpc3QsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0Rlc3Ryb3lOb3RpZnk+KGdfZnJlZSkpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcygpCit7CisgICAgQVNTRVJUKCFtX2lzTGVnYWN5
UGxheWJpbik7CisKKyAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOwor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZShtX3N0
cmVhbUNvbGxlY3Rpb24uZ2V0KCkpOworCisgICAgYm9vbCBvbGRIYXNBdWRpbyA9IG1faGFzQXVk
aW87CisgICAgYm9vbCBvbGRIYXNWaWRlbyA9IG1faGFzVmlkZW87CisgICAgLy8gTmV3IHN0cmVh
bSBjb2xsZWN0aW9ucyBvdmVycmlkZSBwcmV2aW91cyBvbmVzLgorICAgIGNsZWFyVHJhY2tzKCk7
CisgICAgdW5zaWduZWQgdGV4dFRyYWNrSW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFt
ID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0obV9zdHJlYW1Db2xsZWN0aW9uLmdl
dCgpLCBpKTsKKyAgICAgICAgU3RyaW5nIHN0cmVhbUlkKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9p
ZChzdHJlYW0uZ2V0KCkpKTsKKyAgICAgICAgR3N0U3RyZWFtVHlwZSB0eXBlID0gZ3N0X3N0cmVh
bV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtLmdldCgpKTsKKworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJJbnNwZWN0aW5nICVzIHRyYWNrIHdpdGggSUQgJXMiLCBnc3Rfc3Ry
ZWFtX3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJTykKKyAgICAgICAgICAgIENSRUFURV9U
UkFDSyhhdWRpbywgQXVkaW8pOworICAgICAgICBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9U
WVBFX1ZJREVPKQorICAgICAgICAgICAgQ1JFQVRFX1RSQUNLKHZpZGVvLCBWaWRlbyk7CisgICAg
ICAgIGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVEVYVCAmJiAhdXNlTWVkaWFTb3Vy
Y2UpIHsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgICAgICAgICBhdXRvIHRyYWNrID0g
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKHRleHRUcmFja0luZGV4Kyss
IHN0cmVhbSk7CisgICAgICAgICAgICBtX3RleHRUcmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjay5j
b3B5UmVmKCkpOworICAgICAgICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjayh0cmFjay5nZXQo
KSk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBHU1RfV0FSTklORygiVW5r
bm93biB0cmFjayB0eXBlIGZvdW5kIGZvciBzdHJlYW0gJXMiLCBzdHJlYW1JZC51dGY4KCkuZGF0
YSgpKTsKKyAgICB9CisKKyAgICBpZiAoKG9sZEhhc1ZpZGVvICE9IG1faGFzVmlkZW8pIHx8IChv
bGRIYXNBdWRpbyAhPSBtX2hhc0F1ZGlvKSkKKyAgICAgICAgbV9wbGF5ZXItPmNoYXJhY3Rlcmlz
dGljQ2hhbmdlZCgpOworCisgICAgaWYgKG1faGFzVmlkZW8pCisgICAgICAgIG1fcGxheWVyLT5z
aXplQ2hhbmdlZCgpOworCisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5l
VXBkYXRlZChtX3BsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpjbGVhclRyYWNrcygpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIENMRUFSX1RS
QUNLUyhtX2F1ZGlvVHJhY2tzLCBtX3BsYXllci0+cmVtb3ZlQXVkaW9UcmFjayk7CisgICAgQ0xF
QVJfVFJBQ0tTKG1fdmlkZW9UcmFja3MsIG1fcGxheWVyLT5yZW1vdmVWaWRlb1RyYWNrKTsKKyAg
ICBDTEVBUl9UUkFDS1MobV90ZXh0VHJhY2tzLCBtX3BsYXllci0+cmVtb3ZlVGV4dFRyYWNrKTsK
KyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqIHBsYXllcikKK3sKKyAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWluVGhy
ZWFkTm90aWZpY2F0aW9uOjpWaWRlb0NoYW5nZWQsIFtwbGF5ZXJdIHsKKyAgICAgICAgcGxheWVy
LT5ub3RpZnlQbGF5ZXJPZlZpZGVvKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRQaXBlbGluZShHc3RFbGVtZW50KiBwaXBlbGluZSkKK3sKKyAg
ICBtX3BpcGVsaW5lID0gcGlwZWxpbmU7CisKKyAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRv
cHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgp
KSkpOworICAgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcihidXMuZ2V0KCksIFtdKEdzdEJ1cyos
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8m
IHBsYXllciA9ICpzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqPih1c2Vy
RGF0YSk7CisKKyAgICAgICAgaWYgKHBsYXllci5oYW5kbGVTeW5jTWVzc2FnZShtZXNzYWdlKSkg
eworICAgICAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgICAgICAgICBy
ZXR1cm4gR1NUX0JVU19EUk9QOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEdTVF9CVVNf
UEFTUzsKKyAgICB9LCB0aGlzLCBudWxscHRyKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7Cisg
ICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX0NP
TExFQ1RJT04gJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7CisgICAgICAgIEdSZWZQdHI8R3N0U3Ry
ZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3Ry
ZWFtX2NvbGxlY3Rpb24obWVzc2FnZSwgJmNvbGxlY3Rpb24ub3V0UHRyKCkpOworCisgICAgICAg
IGlmIChjb2xsZWN0aW9uKSB7CisgICAgICAgICAgICBtX3N0cmVhbUNvbGxlY3Rpb24uc3dhcChj
b2xsZWN0aW9uKTsKKyAgICAgICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90
aWZpY2F0aW9uOjpTdHJlYW1Db2xsZWN0aW9uQ2hhbmdlZCwgW3RoaXNdIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLT51cGRhdGVUcmFja3MoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgIT0gR1NUX01FU1NBR0Vf
TkVFRF9DT05URVhUKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBnY2hhciog
Y29udGV4dFR5cGU7CisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfY29udGV4dF90eXBlKG1lc3NhZ2Us
ICZjb250ZXh0VHlwZSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiSGFuZGxp
bmcgJXMgbmVlZC1jb250ZXh0IG1lc3NhZ2UgZm9yICVzIiwgY29udGV4dFR5cGUsIEdTVF9NRVNT
QUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKKworICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBl
LCBXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05BTUUpKSB7CisgICAgICAgIEdS
ZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoV0VC
S0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQRV9OQU1FLCBGQUxTRSkpOworICAgICAgICBH
c3RTdHJ1Y3R1cmUqIGNvbnRleHRTdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1
Y3R1cmUoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgQVNTRVJUKG1fcGxheWVyKTsKKyAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgInBsYXllciIsIEdfVFlQRV9Q
T0lOVEVSLCBtX3BsYXllciwgbnVsbHB0cik7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250
ZXh0KEdTVF9FTEVNRU5UKEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSksIGNvbnRleHQuZ2V0KCkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQor
ICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gZWxlbWVudENvbnRleHQgPSBhZG9wdEdSZWYocmVxdWVz
dEdMQ29udGV4dChjb250ZXh0VHlwZSkpOworICAgIGlmIChlbGVtZW50Q29udGV4dCkgeworICAg
ICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtZXNzYWdlLT5zcmMpLCBl
bGVtZW50Q29udGV4dC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAg
ICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1z
eXN0ZW0taWQiKSkgeworICAgICAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgICAg
IEdTVF9FUlJPUigiY2FuJ3QgaGFuZGxlIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0t
aWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UgaW4gdGhlIG1haW4gdGhyZWFkIik7CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJoYW5kbGluZyBkcm0t
cHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNzYWdlIik7CisK
KyAgICAgICAgSW5pdERhdGEgaW5pdERhdGE7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tI
b2xkZXIgbG9jayhtX3Byb3RlY3Rpb25NdXRleCk7CisgICAgICAgICAgICBQcm90ZWN0aW9uU3lz
dGVtRXZlbnRzIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2FnZSk7CisgICAgICAgICAgICBH
U1RfVFJBQ0UoImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZh
aWxhYmxlIiwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rp
b25TeXN0ZW1FdmVudHMuYXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7CisKKyAgICAgICAgICAg
IGZvciAoYXV0byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXZlbnRLZXlTeXN0ZW1JZCA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAg
ICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVt
SWQsICZkYXRhLCBudWxscHRyKTsKKworICAgICAgICAgICAgICAgIGluaXREYXRhLmFwcGVuZCh7
ZXZlbnRLZXlTeXN0ZW1JZCwgZGF0YX0pOworICAgICAgICAgICAgICAgIG1faGFuZGxlZFByb3Rl
Y3Rpb25FdmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChX
VEZNb3ZlKGluaXREYXRhKSk7CisKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCks
ICJ3YWl0aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOworICAgICAgICBpZiAobV9jZG1BdHRhY2ht
ZW50U2VtYXBob3JlLndhaXRGb3IoNF9zKQorICAgICAgICAgICAgJiYgbV9ub3RpZmllci0+aXNW
YWxpZCgpIC8vIENoZWNrIHRoZSBwbGF5ZXIgaXMgbm90IGJlaW5nIGRlc3Ryb3llZC4KKyAgICAg
ICAgICAgICYmICFtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHByZWZlcnJlZEtleVN5c3RlbVV1aWQgPSBHU3RyZWFtZXJFTUVV
dGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZChtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKSk7Cisg
ICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndvcmtpbmcgd2l0aCBrZXkg
c3lzdGVtICVzLCBjb250aW51aW5nIHdpdGgga2V5IHN5c3RlbSAlcyBvbiAlcyIsIG1fY2RtSW5z
dGFuY2UtPmtleVN5c3RlbSgpLnV0ZjgoKS5kYXRhKCksIHByZWZlcnJlZEtleVN5c3RlbVV1aWQs
IEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKKworICAgICAgICAgICAgR1JlZlB0cjxH
c3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLXByZWZl
cnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEZBTFNFKSk7CisgICAgICAgICAgICBHc3RTdHJ1
Y3R1cmUqIGNvbnRleHRTdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUo
Y29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3Ry
dWN0dXJlLCAiZGVjcnlwdGlvbi1zeXN0ZW0taWQiLCBHX1RZUEVfU1RSSU5HLCBwcmVmZXJyZWRL
ZXlTeXN0ZW1VdWlkLCBudWxscHRyKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250
ZXh0KEdTVF9FTEVNRU5UKEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSksIGNvbnRleHQuZ2V0KCkp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJDRE0gaW5zdGFuY2Ug
bm90IGluaXRpYWxpemFlZCIpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIHJldHVybiBmYWxzZTsKK30KKworI2lm
IFVTRShHU1RSRUFNRVJfR0wpCitHc3RDb250ZXh0KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnJlcXVlc3RHTENvbnRleHQoY29uc3QgY2hhciogY29udGV4dFR5cGUpCit7CisgICAgaWYg
KCFlbnN1cmVHc3RHTENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBp
ZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFKSkg
eworICAgICAgICBHc3RDb250ZXh0KiBkaXNwbGF5Q29udGV4dCA9IGdzdF9jb250ZXh0X25ldyhH
U1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUsIFRSVUUpOworICAgICAgICBnc3RfY29udGV4dF9z
ZXRfZ2xfZGlzcGxheShkaXNwbGF5Q29udGV4dCwgZ3N0R0xEaXNwbGF5KCkpOworICAgICAgICBy
ZXR1cm4gZGlzcGxheUNvbnRleHQ7CisgICAgfQorCisgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4
dFR5cGUsICJnc3QuZ2wuYXBwX2NvbnRleHQiKSkgeworICAgICAgICBHc3RDb250ZXh0KiBhcHBD
b250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KCJnc3QuZ2wuYXBwX2NvbnRleHQiLCBUUlVFKTsKKyAg
ICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1
Y3R1cmUoYXBwQ29udGV4dCk7CisjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTIsIDApCisgICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfVFlQRV9HTF9D
T05URVhULCBnc3RHTENvbnRleHQoKSwgbnVsbHB0cik7CisjZWxzZQorICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjb250ZXh0IiwgR1NUX0dMX1RZUEVfQ09OVEVYVCwgZ3N0
R0xDb250ZXh0KCksIG51bGxwdHIpOworI2VuZGlmCisgICAgICAgIHJldHVybiBhcHBDb250ZXh0
OworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR3N0R0xDb250ZXh0KCkKK3sKKyAgICBpZiAobV9nbENvbnRl
eHQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byYgc2hhcmVkRGlzcGxheSA9IFBs
YXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCk7CisKKyAgICAvLyBU
aGUgZmxvYXRpbmcgcmVmIHJlbW92YWwgc3VwcG9ydCB3YXMgYWRkZWQgaW4gaHR0cHM6Ly9idWd6
aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzA2Mi4KKyAgICBib29sIHNob3VsZEFk
b3B0UmVmID0gd2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKTsKKyAgICBpZiAoIW1fZ2xE
aXNwbGF5KSB7CisjaWYgUExBVEZPUk0oWDExKQorI2lmIFVTRShHTFgpCisgICAgICAgIGlmIChp
czxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7CisgICAgICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBYMTEgc2hhcmVkIEdMIGRpc3BsYXki
KTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgICAgICAgICBtX2ds
RGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3
X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkp
Lm5hdGl2ZSgpKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZ2xEaXNw
bGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXko
ZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpOwor
ICAgICAgICB9CisjZWxpZiBVU0UoRUdMKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5
WDExPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBFR0wgZGlzcGxheSIpOworICAgICAgICAgICAg
aWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRH
UmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxh
eShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXko
KSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdT
VF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3du
Y2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOwor
ICAgICAgICB9CisjZW5kaWYKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyAgICAg
ICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpKSB7CisgICAg
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBXYXlsYW5kIHNo
YXJlZCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAgICAg
ICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rp
c3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVdh
eWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNw
bGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXls
YW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICAgICAgfQorI2VuZGlmCisK
KyNpZiBVU0UoV1BFX1JFTkRFUkVSKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5TGli
V1BFPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiQ3JlYXRpbmcgV1BFIHNoYXJlZCBFR0wgZGlzcGxheSIpOworICAgICAgICAgICAg
aWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRH
UmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxh
eShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3Bs
YXkoKSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9
IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShk
b3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXko
KSkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBBU1NFUlQobV9nbERpc3BsYXkpOwor
ICAgIH0KKworICAgIEdMQ29udGV4dCogd2Via2l0Q29udGV4dCA9IHNoYXJlZERpc3BsYXkuc2hh
cmluZ0dMQ29udGV4dCgpOworICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1YWxseSBleGNsdXNp
dmUsIG5vIG5lZWQgZm9yIGlmZGVmcyBoZXJlLgorICAgIEdzdEdMUGxhdGZvcm0gZ2xQbGF0Zm9y
bSA9IHdlYmtpdENvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRGT1JNX0VHTCA6
IEdTVF9HTF9QTEFURk9STV9HTFg7CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIEdzdEdMQVBJ
IGdsQVBJID0gR1NUX0dMX0FQSV9HTEVTMjsKKyNlbGlmIFVTRShPUEVOR0wpCisgICAgR3N0R0xB
UEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisjZW5kaWYKKworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgY29udGV4dEhh
bmRsZSA9IHdlYmtpdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmICghY29udGV4
dEhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNob3VsZEFkb3B0UmVm
KQorICAgICAgICBtX2dsQ29udGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29udGV4dF9uZXdfd3Jh
cHBlZChtX2dsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4
dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKSk7CisgICAgZWxzZQorICAgICAgICBtX2dsQ29u
dGV4dCA9IGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1fZ2xEaXNwbGF5LmdldCgpLCByZWlu
dGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkp
OworCisgICAgLy8gQWN0aXZhdGUgYW5kIGZpbGwgdGhlIEdTdHJlYW1lciB3cmFwcGVkIGNvbnRl
eHQgd2l0aCB0aGUgV2Via2l0J3Mgc2hhcmVkIG9uZS4KKyAgICBhdXRvIHByZXZpb3VzQWN0aXZl
Q29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIHdlYmtpdENvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShtX2dsQ29u
dGV4dC5nZXQoKSwgVFJVRSkpIHsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OworICAgICAgICBpZiAoIWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhtX2dsQ29udGV4dC5nZXQo
KSwgJmVycm9yLm91dFB0cigpKSkKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8g
ZmlsbCBpbiBHU3RyZWFtZXIgY29udGV4dDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAg
IGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBGQUxTRSk7CisgICAg
fSBlbHNlCisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZhdGUgR1N0cmVhbWVy
IGNvbnRleHQgJSIgR1NUX1BUUl9GT1JNQVQsIG1fZ2xDb250ZXh0LmdldCgpKTsKKyAgICBpZiAo
cHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUl9HTCkKKworLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8KK0Zsb2F0
U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sK
KyNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKKyAgICAvLyBXaGVuIHVzaW5nIHRoZSBob2xl
cHVjaCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZ2V0IHRoZSB2aWRlbyBmcmFtZXMgc2l6ZSwgc28g
d2UgY2FuJ3QgdXNlCisgICAgLy8gaXQuIEJ1dCB3ZSBuZWVkIHRvIHJlcG9ydCBzb21lIG5vbiBl
bXB0eSBuYXR1cmFsU2l6ZSBmb3IgdGhlIHBsYXllcidzIEdyYXBoaWNzTGF5ZXIKKyAgICAvLyB0
byBiZSBwcm9wZXJseSBjcmVhdGVkLgorICAgIHJldHVybiBzX2hvbGVQdW5jaERlZmF1bHRGcmFt
ZVNpemU7CisjZW5kaWYKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgaWYgKCFtX2lz
TGVnYWN5UGxheWJpbiAmJiAhbV9jdXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB2aWRlb1RyYWNrID0gbV92
aWRlb1RyYWNrcy5nZXQobV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7CisKKyAgICAgICAgaWYgKHZp
ZGVvVHJhY2spIHsKKyAgICAgICAgICAgIGF1dG8gdGFncyA9IGFkb3B0R1JlZihnc3Rfc3RyZWFt
X2dldF90YWdzKHZpZGVvVHJhY2stPnN0cmVhbSgpKSk7CisgICAgICAgICAgICBnaW50IHdpZHRo
LCBoZWlnaHQ7CisKKyAgICAgICAgICAgIGlmICh0YWdzICYmIGdzdF90YWdfbGlzdF9nZXRfaW50
KHRhZ3MuZ2V0KCksIFdFQktJVF9NRURJQV9UUkFDS19UQUdfV0lEVEgsICZ3aWR0aCkgJiYgZ3N0
X3RhZ19saXN0X2dldF9pbnQodGFncy5nZXQoKSwgV0VCS0lUX01FRElBX1RSQUNLX1RBR19IRUlH
SFQsICZoZWlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBGbG9hdFNpemUod2lkdGgsIGhl
aWdodCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
KworICAgIGlmICghaGFzVmlkZW8oKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOworCisg
ICAgaWYgKCFtX3ZpZGVvU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX3ZpZGVvU2l6
ZTsKKworICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7Cisg
ICAgaWYgKCFHU1RfSVNfU0FNUExFKG1fc2FtcGxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEZs
b2F0U2l6ZSgpOworCisgICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9z
YW1wbGUuZ2V0KCkpOworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgp
OworCisgICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNl
ZQorICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1
NzEKKyAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBT
ZWUKKyAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2
MzI2CisKKyAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3JpZ2luYWwgc2l6ZSwgaWYgdGhp
cyBmYWlscyB0aGUKKyAgICAvLyB2aWRlby1zaW5rIGhhcyBsaWtlbHkgbm90IHlldCBuZWdvdGlh
dGVkIGl0cyBjYXBzLgorICAgIGludCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFz
cGVjdFJhdGlvRGVub21pbmF0b3IsIHN0cmlkZTsKKyAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZTsK
KyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7CisgICAgaWYgKCFnZXRWaWRlb1NpemVBbmRGb3Jt
YXRGcm9tQ2FwcyhjYXBzLCBvcmlnaW5hbFNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051
bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpKQorICAgICAgICBy
ZXR1cm4gRmxvYXRTaXplKCk7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgLy8g
V2hlbiB1c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgaWYgdGhlIHZpZGVvIGlzIHRhZ2dl
ZCBhcyByb3RhdGVkIDkwIG9yIDI3MCBkZWdyZWVzLCBzd2FwIHdpZHRoIGFuZCBoZWlnaHQuCisg
ICAgaWYgKG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkgeworICAgICAgICBpZiAobV92aWRl
b1NvdXJjZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCisgICAgICAgICAgICBvcmln
aW5hbFNpemUgPSBvcmlnaW5hbFNpemUudHJhbnNwb3NlZFNpemUoKTsKKyAgICB9CisjZW5kaWYK
KworICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk9yaWdpbmFsIHZpZGVvIHNpemU6
ICVkeCVkIiwgb3JpZ2luYWxTaXplLndpZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7Cisg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUGl4ZWwgYXNwZWN0IHJhdGlvOiAlZC8l
ZCIsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRv
cik7CisKKyAgICAvLyBDYWxjdWxhdGUgREFSIGJhc2VkIG9uIFBBUiBhbmQgdmlkZW8gc2l6ZS4K
KyAgICBpbnQgZGlzcGxheVdpZHRoID0gb3JpZ2luYWxTaXplLndpZHRoKCkgKiBwaXhlbEFzcGVj
dFJhdGlvTnVtZXJhdG9yOworICAgIGludCBkaXNwbGF5SGVpZ2h0ID0gb3JpZ2luYWxTaXplLmhl
aWdodCgpICogcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yOworCisgICAgLy8gRGl2aWRlIGRp
c3BsYXkgd2lkdGggYW5kIGhlaWdodCBieSB0aGVpciBHQ0QgdG8gYXZvaWQgcG9zc2libGUgb3Zl
cmZsb3dzLgorICAgIGludCBkaXNwbGF5QXNwZWN0UmF0aW9HQ0QgPSBncmVhdGVzdENvbW1vbkRp
dmlzb3IoZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKKyAgICBkaXNwbGF5V2lkdGggLz0g
ZGlzcGxheUFzcGVjdFJhdGlvR0NEOworICAgIGRpc3BsYXlIZWlnaHQgLz0gZGlzcGxheUFzcGVj
dFJhdGlvR0NEOworCisgICAgLy8gQXBwbHkgREFSIHRvIG9yaWdpbmFsIHZpZGVvIHNpemUuIFRo
aXMgaXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaW4geHZpbWFnZXNpbmsncyBzZXRjYXBzIGZ1bmN0
aW9uLgorICAgIGd1aW50NjQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOworICAgIGlmICghKG9yaWdp
bmFsU2l6ZS5oZWlnaHQoKSAlIGRpc3BsYXlIZWlnaHQpKSB7CisgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIktlZXBpbmcgdmlkZW8gb3JpZ2luYWwgaGVpZ2h0Iik7CisgICAg
ICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0
KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7CisgICAgICAgIGhlaWdodCA9IHN0YXRp
Y19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgfSBlbHNlIGlmICgh
KG9yaWdpbmFsU2l6ZS53aWR0aCgpICUgZGlzcGxheVdpZHRoKSkgeworICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJLZWVwaW5nIHZpZGVvIG9yaWdpbmFsIHdpZHRoIik7Cisg
ICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLndp
ZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0aCk7CisgICAgICAgIHdpZHRoID0gc3Rh
dGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLndpZHRoKCkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkFwcHJveGltYXRpbmcgd2hpbGUg
a2VlcGluZyBvcmlnaW5hbCB2aWRlbyBoZWlnaHQiKTsKKyAgICAgICAgd2lkdGggPSBnc3RfdXRp
bF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRoLCBk
aXNwbGF5SGVpZ2h0KTsKKyAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3Jp
Z2luYWxTaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJOYXR1cmFsIHNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgInglIiBHX0dVSU5UNjRf
Rk9STUFULCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX3ZpZGVvU2l6ZSA9IEZsb2F0U2l6ZShzdGF0
aWNfY2FzdDxpbnQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKKyAgICByZXR1
cm4gbV92aWRlb1NpemU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
ZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQoreworICAgIGlmICghbV92b2x1bWVFbGVtZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5n
IHZvbHVtZTogJWYiLCB2b2x1bWUpOworICAgIGdzdF9zdHJlYW1fdm9sdW1lX3NldF92b2x1bWUo
bV92b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfTElORUFSLCBz
dGF0aWNfY2FzdDxkb3VibGU+KHZvbHVtZSkpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnZvbHVtZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdzdF9zdHJlYW1fdm9sdW1lX2dldF92
b2x1bWUobV92b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfTElO
RUFSKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXll
ck9mVm9sdW1lQ2hhbmdlKCkKK3sKKyAgICBpZiAoIW1fcGxheWVyIHx8ICFtX3ZvbHVtZUVsZW1l
bnQpCisgICAgICAgIHJldHVybjsKKyAgICBkb3VibGUgdm9sdW1lOworICAgIHZvbHVtZSA9IGdz
dF9zdHJlYW1fdm9sdW1lX2dldF92b2x1bWUobV92b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RS
RUFNX1ZPTFVNRV9GT1JNQVRfTElORUFSKTsKKyAgICAvLyBnZXRfdm9sdW1lKCkgY2FuIHJldHVy
biB2YWx1ZXMgc3VwZXJpb3IgdG8gMS4wIGlmIHRoZSB1c2VyCisgICAgLy8gYXBwbGllcyBzb2Z0
d2FyZSB1c2VyIGdhaW4gdmlhIHRoaXJkIHBhcnR5IGFwcGxpY2F0aW9uIChHTk9NRQorICAgIC8v
IHZvbHVtZSBjb250cm9sIGZvciBpbnN0YW5jZSkuCisgICAgdm9sdW1lID0gQ0xBTVAodm9sdW1l
LCAwLjAsIDEuMCk7CisgICAgbV9wbGF5ZXItPnZvbHVtZUNoYW5nZWQoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHZvbHVtZSkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9s
dW1lQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQor
eworICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbV92b2x1bWVFbGVtZW50IHJlY2VpdmVzIHRo
ZSBub3RpZnk6OnZvbHVtZSBzaWduYWwuCisgICAgR1NUX0RFQlVHX09CSkVDVChwbGF5ZXItPnBp
cGVsaW5lKCksICJWb2x1bWUgY2hhbmdlZCB0bzogJWYiLCBwbGF5ZXItPnZvbHVtZSgpKTsKKwor
ICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlZv
bHVtZUNoYW5nZWQsIFtwbGF5ZXJdIHsKKyAgICAgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZlZv
bHVtZUNoYW5nZSgpOworICAgIH0pOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9uZXR3b3JrU3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcmVhZHlTdGF0ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNp
emVDaGFuZ2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0TXV0ZWQoYm9vbCBtdXRlKQoreworICAgIGlmICghbV92
b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGN1cnJlbnRWYWx1ZSA9
IG11dGVkKCk7CisgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBtdXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldCBtdXRlZCB0byAlcyIsIHRv
U3RyaW5nKG11dGUpLnV0ZjgoKS5kYXRhKCkpOworICAgIGdfb2JqZWN0X3NldChtX3ZvbHVtZUVs
ZW1lbnQuZ2V0KCksICJtdXRlIiwgbXV0ZSwgbnVsbHB0cik7Cit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjptdXRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZvbHVtZUVs
ZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdib29sZWFuIG11dGVkOworICAg
IGdfb2JqZWN0X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgJm11dGVkLCBudWxs
cHRyKTsKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXllciBpcyBtdXRlZDog
JXMiLCB0b1N0cmluZyhzdGF0aWNfY2FzdDxib29sPihtdXRlZCkpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIHJldHVybiBtdXRlZDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5vdGlmeVBsYXllck9mTXV0ZSgpCit7CisgICAgaWYgKCFtX3BsYXllciB8fCAhbV92b2x1bWVF
bGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBnYm9vbGVhbiBtdXRlZDsKKyAgICBnX29i
amVjdF9nZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsICZtdXRlZCwgbnVsbHB0cik7
CisgICAgbV9wbGF5ZXItPm11dGVDaGFuZ2VkKHN0YXRpY19jYXN0PGJvb2w+KG11dGVkKSk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptdXRlQ2hhbmdlZENhbGxiYWNr
KE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIC8vIFRoaXMgaXMg
Y2FsbGVkIHdoZW4gbV92b2x1bWVFbGVtZW50IHJlY2VpdmVzIHRoZSBub3RpZnk6Om11dGUgc2ln
bmFsLgorICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRp
b246Ok11dGVDaGFuZ2VkLCBbcGxheWVyXSB7CisgICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVy
T2ZNdXRlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgR1VuaXF1ZU91dFB0
cjxHRXJyb3I+IGVycjsKKyAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBkZWJ1ZzsKKyAgICBNZWRp
YVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yOworICAgIGJvb2wgaXNzdWVFcnJvciA9IHRydWU7
CisgICAgYm9vbCBhdHRlbXB0TmV4dExvY2F0aW9uID0gZmFsc2U7CisgICAgY29uc3QgR3N0U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlKG1lc3NhZ2UpOwor
ICAgIEdzdFN0YXRlIHJlcXVlc3RlZFN0YXRlLCBjdXJyZW50U3RhdGU7CisKKyAgICBtX2NhbkZh
bGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24gPSBmYWxzZTsKKworICAgIGlmIChzdHJ1
Y3R1cmUpIHsKKyAgICAgICAgY29uc3QgZ2NoYXIqIG1lc3NhZ2VUeXBlTmFtZSA9IGdzdF9zdHJ1
Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKKworICAgICAgICAvLyBSZWRpcmVjdCBtZXNzYWdl
cyBhcmUgc2VudCBmcm9tIGVsZW1lbnRzLCBsaWtlIHF0ZGVtdXgsIHRvCisgICAgICAgIC8vIG5v
dGlmeSBvZiB0aGUgbmV3IGxvY2F0aW9uKHMpIG9mIHRoZSBtZWRpYS4KKyAgICAgICAgaWYgKCFn
X3N0cmNtcDAobWVzc2FnZVR5cGVOYW1lLCAicmVkaXJlY3QiKSkgeworICAgICAgICAgICAgbWVk
aWFMb2NhdGlvbkNoYW5nZWQobWVzc2FnZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBXZSBpZ25vcmUgc3RhdGUgY2hhbmdlcyBmcm9tIGludGVybmFs
IGVsZW1lbnRzLiBUaGV5IGFyZSBmb3J3YXJkZWQgdG8gcGxheWJpbjIgYW55d2F5LgorICAgIGJv
b2wgbWVzc2FnZVNvdXJjZUlzUGxheWJpbiA9IEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSA9PSBy
ZWludGVycHJldF9jYXN0PEdzdE9iamVjdCo+KG1fcGlwZWxpbmUuZ2V0KCkpOworCisgICAgR1NU
X0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIk1lc3NhZ2UgJXMgcmVjZWl2ZWQgZnJvbSBlbGVtZW50
ICVzIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1lc3NhZ2UpLCBHU1RfTUVTU0FHRV9TUkNfTkFN
RShtZXNzYWdlKSk7CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7Cisg
ICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKKyAgICAgICAgaWYgKG1fcmVzZXRQaXBlbGluZSB8
fCAhbV9taXNzaW5nUGx1Z2luQ2FsbGJhY2tzLmlzRW1wdHkoKSB8fCBtX2Vycm9yT2NjdXJlZCkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcihtZXNz
YWdlLCAmZXJyLm91dFB0cigpLCAmZGVidWcub3V0UHRyKCkpOworICAgICAgICBHU1RfRVJST1Io
IkVycm9yICVkOiAlcyAodXJsPSVzKSIsIGVyci0+Y29kZSwgZXJyLT5tZXNzYWdlLCBtX3VybC5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9G
SUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NI
T1dfQUxMLCAid2Via2l0LXZpZGVvLmVycm9yIik7CisKKyAgICAgICAgZXJyb3IgPSBNZWRpYVBs
YXllcjo6RW1wdHk7CisgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1Rf
U1RSRUFNX0VSUk9SLCBHU1RfU1RSRUFNX0VSUk9SX0NPREVDX05PVF9GT1VORCkKKyAgICAgICAg
ICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9TVFJFQU1fRVJST1IsIEdTVF9T
VFJFQU1fRVJST1JfV1JPTkdfVFlQRSkKKyAgICAgICAgICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhl
cnIuZ2V0KCksIEdTVF9TVFJFQU1fRVJST1IsIEdTVF9TVFJFQU1fRVJST1JfRkFJTEVEKQorICAg
ICAgICAgICAgfHwgZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX0NPUkVfRVJST1IsIEdT
VF9DT1JFX0VSUk9SX01JU1NJTkdfUExVR0lOKQorICAgICAgICAgICAgfHwgZ19lcnJvcl9tYXRj
aGVzKGVyci5nZXQoKSwgR1NUX1JFU09VUkNFX0VSUk9SLCBHU1RfUkVTT1VSQ0VfRVJST1JfTk9U
X0ZPVU5EKSkKKyAgICAgICAgICAgIGVycm9yID0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yOwor
ICAgICAgICBlbHNlIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfU1RSRUFNX0VS
Uk9SLCBHU1RfU1RSRUFNX0VSUk9SX1RZUEVfTk9UX0ZPVU5EKSkgeworICAgICAgICAgICAgLy8g
TGV0IHRoZSBtZWRpYVBsYXllckNsaWVudCBoYW5kbGUgdGhlIHN0cmVhbSBlcnJvciwgaW4KKyAg
ICAgICAgICAgIC8vIHRoaXMgY2FzZSB0aGUgSFRNTE1lZGlhRWxlbWVudCB3aWxsIGVtaXQgYSBz
dGFsbGVkCiAgICAgICAgICAgICAvLyBldmVudC4KICAgICAgICAgICAgIEdTVF9FUlJPUigiRGVj
b2RlIGVycm9yLCBsZXQgdGhlIE1lZGlhIGVsZW1lbnQgZW1pdCBhIHN0YWxsZWQgZXZlbnQuIik7
CiAgICAgICAgICAgICBtX2xvYWRpbmdTdGFsbGVkID0gdHJ1ZTsKQEAgLTE0MTgsMTE0MyArMjM4
NCwxNjM4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdl
KEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlv
bj4gY29sbGVjdGlvbjsKICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtc19zZWxlY3Rl
ZChtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7CiAKLSAgICAgICAgaWYgKCFjb2xsZWN0
aW9uKQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghY29sbGVjdGlvbikKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIG1fc3RyZWFtQ29sbGVjdGlvbi5zd2FwKGNvbGxlY3Rp
b24pOworICAgICAgICBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkID0gIiI7CisgICAgICAgIG1fY3Vy
cmVudFZpZGVvU3RyZWFtSWQgPSAiIjsKKyAgICAgICAgbV9jdXJyZW50VGV4dFN0cmVhbUlkID0g
IiI7CisKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxl
Y3RlZF9nZXRfc2l6ZShtZXNzYWdlKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtID0g
Z3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc3RyZWFtKG1lc3NhZ2UsIGkpOworICAg
ICAgICAgICAgaWYgKCFzdHJlYW0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIEdzdFN0cmVhbVR5cGUgdHlwZSA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlKHN0
cmVhbS5nZXQoKSk7CisgICAgICAgICAgICBTdHJpbmcgc3RyZWFtSWQoZ3N0X3N0cmVhbV9nZXRf
c3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOworCisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJTZWxlY3RpbmcgJXMgdHJhY2sgd2l0aCBJRDogJXMiLCBnc3Rfc3RyZWFt
X3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgLy8gUGxheWJpbjMgY2FuIHNlbmQgbW9yZSB0aGFuIG9uZSBzZWxlY3RlZCBzdHJlYW0gb2Yg
dGhlIHNhbWUgdHlwZQorICAgICAgICAgICAgLy8gYnV0IHRoZXJlJ3Mgbm8gcHJpb3JpdHkgb3Ig
b3JkZXJpbmcgc3lzdGVtIGluIHBsYWNlLCBzbyB3ZSBhc3N1bWUKKyAgICAgICAgICAgIC8vIHRo
ZSBzZWxlY3RlZCBzdHJlYW0gaXMgdGhlIGxhc3Qgb25lIGFzIHJlcG9ydGVkIGJ5IHBsYXliaW4z
LgorICAgICAgICAgICAgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfQVVESU8pIHsKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkID0gc3RyZWFtSWQ7CisgICAgICAgICAg
ICAgICAgYXV0byB0cmFjayA9IG1fYXVkaW9UcmFja3MuZ2V0KG1fY3VycmVudEF1ZGlvU3RyZWFt
SWQpOworICAgICAgICAgICAgICAgIEFTU0VSVCh0cmFjayk7CisgICAgICAgICAgICAgICAgdHJh
Y2stPm1hcmtBc0FjdGl2ZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NU
UkVBTV9UWVBFX1ZJREVPKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50VmlkZW9TdHJlYW1J
ZCA9IHN0cmVhbUlkOworICAgICAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBtX3ZpZGVvVHJhY2tz
LmdldChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodHJh
Y2spOworICAgICAgICAgICAgICAgIHRyYWNrLT5tYXJrQXNBY3RpdmUoKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9URVhUKQorICAgICAgICAgICAgICAg
IG1fY3VycmVudFRleHRTdHJlYW1JZCA9IHN0cmVhbUlkOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJVbmtub3duIHN0cmVhbSB0eXBlIHdpdGggc3RyZWFt
LWlkICVzIiwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIlVuaGFuZGxlZCBHU3RyZWFtZXIgbWVzc2FnZSB0eXBlOiAlcyIsIEdTVF9NRVNTQUdF
X1RZUEVfTkFNRShtZXNzYWdlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NCdWZmZXJpbmdTdGF0cyhHc3RNZXNz
YWdlKiBtZXNzYWdlKQoreworICAgIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZTsKKyAgICBnc3RfbWVz
c2FnZV9wYXJzZV9idWZmZXJpbmdfc3RhdHMobWVzc2FnZSwgJm1vZGUsIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIpOworCisgICAgaW50IHBlcmNlbnRhZ2U7CisgICAgZ3N0X21lc3NhZ2VfcGFy
c2VfYnVmZmVyaW5nKG1lc3NhZ2UsICZwZXJjZW50YWdlKTsKKworICAgIHVwZGF0ZUJ1ZmZlcmlu
Z1N0YXR1cyhtb2RlLCBwZXJjZW50YWdlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnVwZGF0ZU1heFRpbWVMb2FkZWQoZG91YmxlIHBlcmNlbnRhZ2UpCit7CisgICAg
TWVkaWFUaW1lIG1lZGlhRHVyYXRpb24gPSBkdXJhdGlvbk1lZGlhVGltZSgpOworICAgIGlmICgh
bWVkaWFEdXJhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tYXhUaW1lTG9hZGVkID0g
TWVkaWFUaW1lKHBlcmNlbnRhZ2UgKiBzdGF0aWNfY2FzdDxkb3VibGU+KHRvR3N0VW5zaWduZWQ2
NFRpbWUobWVkaWFEdXJhdGlvbikpIC8gMTAwLCBHU1RfU0VDT05EKTsKKyAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBVcGRhdGVkIG1heFRpbWVMb2FkZWQ6ICVz
IiwgdG9TdHJpbmcobV9tYXhUaW1lTG9hZGVkKS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhHc3RCdWZm
ZXJpbmdNb2RlIG1vZGUsIGRvdWJsZSBwZXJjZW50YWdlKQoreworICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIG1vZGU6ICVzLCBzdGF0dXM6ICVmJSUiLCBlbnVt
VG9TdHJpbmcoR1NUX1RZUEVfQlVGRkVSSU5HX01PREUsIG1vZGUpLmRhdGEoKSwgcGVyY2VudGFn
ZSk7CisKKyAgICBtX2Rvd25sb2FkRmluaXNoZWQgPSBwZXJjZW50YWdlID09IDEwMDsKKyAgICBt
X2J1ZmZlcmluZyA9ICFtX2Rvd25sb2FkRmluaXNoZWQ7CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICBjYXNlIEdTVF9CVUZGRVJJTkdfU1RSRUFNOiB7CisgICAgICAgIHVwZGF0ZU1heFRpbWVM
b2FkZWQocGVyY2VudGFnZSk7CisKKyAgICAgICAgbV9idWZmZXJpbmdQZXJjZW50YWdlID0gcGVy
Y2VudGFnZTsKKyAgICAgICAgaWYgKG1fZG93bmxvYWRGaW5pc2hlZCkKKyAgICAgICAgICAgIHVw
ZGF0ZVN0YXRlcygpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9CVUZG
RVJJTkdfRE9XTkxPQUQ6IHsKKyAgICAgICAgdXBkYXRlTWF4VGltZUxvYWRlZChwZXJjZW50YWdl
KTsKKworICAgICAgICAvLyBNZWRpYSBpcyBub3cgZnVsbHkgbG9hZGVkLiBJdCB3aWxsIHBsYXkg
ZXZlbiBpZiBuZXR3b3JrIGNvbm5lY3Rpb24gaXMKKyAgICAgICAgLy8gY3V0LiBCdWZmZXJpbmcg
aXMgZG9uZSwgcmVtb3ZlIHRoZSBmaWxsIHNvdXJjZSBmcm9tIHRoZSBtYWluIGxvb3AuCisgICAg
ICAgIGlmIChtX2Rvd25sb2FkRmluaXNoZWQpCisgICAgICAgICAgICBtX2ZpbGxUaW1lci5zdG9w
KCk7CisKKyAgICAgICAgdXBkYXRlU3RhdGVzKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBkZWZhdWx0OgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJVbmhhbmRs
ZWQgYnVmZmVyaW5nIG1vZGU6ICVzIiwgZW51bVRvU3RyaW5nKEdTVF9UWVBFX0JVRkZFUklOR19N
T0RFLCBtb2RlKS5kYXRhKCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NNcGVnVHNTZWN0aW9uKEdzdE1wZWd0c1NlY3Rpb24q
IHNlY3Rpb24pCit7CisgICAgQVNTRVJUKHNlY3Rpb24pOworCisgICAgaWYgKHNlY3Rpb24tPnNl
Y3Rpb25fdHlwZSA9PSBHU1RfTVBFR1RTX1NFQ1RJT05fUE1UKSB7CisgICAgICAgIGNvbnN0IEdz
dE1wZWd0c1BNVCogcG10ID0gZ3N0X21wZWd0c19zZWN0aW9uX2dldF9wbXQoc2VjdGlvbik7Cisg
ICAgICAgIG1fbWV0YWRhdGFUcmFja3MuY2xlYXIoKTsKKyAgICAgICAgZm9yIChndWludCBpID0g
MDsgaSA8IHBtdC0+c3RyZWFtcy0+bGVuOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEdzdE1w
ZWd0c1BNVFN0cmVhbSogc3RyZWFtID0gc3RhdGljX2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzUE1UU3Ry
ZWFtKj4oZ19wdHJfYXJyYXlfaW5kZXgocG10LT5zdHJlYW1zLCBpKSk7CisgICAgICAgICAgICBp
ZiAoc3RyZWFtLT5zdHJlYW1fdHlwZSA9PSAweDA1IHx8IHN0cmVhbS0+c3RyZWFtX3R5cGUgPj0g
MHg4MCkgeworICAgICAgICAgICAgICAgIEF0b21TdHJpbmcgcGlkID0gU3RyaW5nOjpudW1iZXIo
c3RyZWFtLT5waWQpOworICAgICAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBJbmJhbmRNZXRhZGF0
YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAg
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6TWV0YWRhdGEsIEluYmFuZFRleHRUcmFja1ByaXZhdGU6
OkRhdGEsIHBpZCk7CisKKyAgICAgICAgICAgICAgICAvLyA0LjcuMTAuMTIuMiBTb3VyY2luZyBp
bi1iYW5kIHRleHQgdHJhY2tzCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyB0ZXh0IHRy
YWNrJ3Mga2luZCBpcyBtZXRhZGF0YSwgdGhlbiBzZXQgdGhlIHRleHQgdHJhY2sgaW4tYmFuZCBt
ZXRhZGF0YSB0cmFjayBkaXNwYXRjaAorICAgICAgICAgICAgICAgIC8vIHR5cGUgYXMgZm9sbG93
cywgYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIG1lZGlhIHJlc291cmNlOgorICAgICAgICAgICAg
ICAgIC8vIExldCBzdHJlYW0gdHlwZSBiZSB0aGUgdmFsdWUgb2YgdGhlICJzdHJlYW1fdHlwZSIg
ZmllbGQgZGVzY3JpYmluZyB0aGUgdGV4dCB0cmFjaydzIHR5cGUgaW4gdGhlCisgICAgICAgICAg
ICAgICAgLy8gZmlsZSdzIHByb2dyYW0gbWFwIHNlY3Rpb24sIGludGVycHJldGVkIGFzIGFuIDgt
Yml0IHVuc2lnbmVkIGludGVnZXIuIExldCBsZW5ndGggYmUgdGhlIHZhbHVlIG9mCisgICAgICAg
ICAgICAgICAgLy8gdGhlICJFU19pbmZvX2xlbmd0aCIgZmllbGQgZm9yIHRoZSB0cmFjayBpbiB0
aGUgc2FtZSBwYXJ0IG9mIHRoZSBwcm9ncmFtIG1hcCBzZWN0aW9uLCBpbnRlcnByZXRlZAorICAg
ICAgICAgICAgICAgIC8vIGFzIGFuIGludGVnZXIgYXMgZGVmaW5lZCBieSB0aGUgTVBFRy0yIHNw
ZWNpZmljYXRpb24uIExldCBkZXNjcmlwdG9yIGJ5dGVzIGJlIHRoZSBsZW5ndGggYnl0ZXMKKyAg
ICAgICAgICAgICAgICAvLyBmb2xsb3dpbmcgdGhlICJFU19pbmZvX2xlbmd0aCIgZmllbGQuIFRo
ZSB0ZXh0IHRyYWNrIGluLWJhbmQgbWV0YWRhdGEgdHJhY2sgZGlzcGF0Y2ggdHlwZSBtdXN0IGJl
CisgICAgICAgICAgICAgICAgLy8gc2V0IHRvIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJl
YW0gdHlwZSBieXRlIGFuZCB0aGUgemVybyBvciBtb3JlIGRlc2NyaXB0b3IgYnl0ZXMgYnl0ZXMs
CisgICAgICAgICAgICAgICAgLy8gZXhwcmVzc2VkIGluIGhleGFkZWNpbWFsIHVzaW5nIHVwcGVy
Y2FzZSBBU0NJSSBoZXggZGlnaXRzLgorICAgICAgICAgICAgICAgIFN0cmluZyBpbmJhbmRNZXRh
ZGF0YVRyYWNrRGlzcGF0Y2hUeXBlOworICAgICAgICAgICAgICAgIGFwcGVuZFVuc2lnbmVkQXNI
ZXhGaXhlZFNpemUoc3RyZWFtLT5zdHJlYW1fdHlwZSwgaW5iYW5kTWV0YWRhdGFUcmFja0Rpc3Bh
dGNoVHlwZSwgMik7CisgICAgICAgICAgICAgICAgZm9yIChndWludCBqID0gMDsgaiA8IHN0cmVh
bS0+ZGVzY3JpcHRvcnMtPmxlbjsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdz
dE1wZWd0c0Rlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBzdGF0aWNfY2FzdDxjb25zdCBHc3RNcGVn
dHNEZXNjcmlwdG9yKj4oZ19wdHJfYXJyYXlfaW5kZXgoc3RyZWFtLT5kZXNjcmlwdG9ycywgaikp
OworICAgICAgICAgICAgICAgICAgICBmb3IgKGd1aW50IGsgPSAwOyBrIDwgZGVzY3JpcHRvci0+
bGVuZ3RoOyArK2spCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoZGVz
Y3JpcHRvci0+ZGF0YVtrXSwgaW5iYW5kTWV0YWRhdGFUcmFja0Rpc3BhdGNoVHlwZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRyYWNrLT5zZXRJbkJhbmRNZXRhZGF0YVRy
YWNrRGlzcGF0Y2hUeXBlKGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUpOworCisgICAg
ICAgICAgICAgICAgbV9tZXRhZGF0YVRyYWNrcy5hZGQocGlkLCB0cmFjayk7CisgICAgICAgICAg
ICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjaygqdHJhY2spOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQXRvbVN0cmluZyBwaWQgPSBTdHJpbmc6Om51
bWJlcihzZWN0aW9uLT5waWQpOworICAgICAgICBSZWZQdHI8SW5iYW5kTWV0YWRhdGFUZXh0VHJh
Y2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IG1fbWV0YWRhdGFUcmFja3MuZ2V0KHBpZCk7Cisg
ICAgICAgIGlmICghdHJhY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1JlZlB0
cjxHQnl0ZXM+IGRhdGEgPSBnc3RfbXBlZ3RzX3NlY3Rpb25fZ2V0X2RhdGEoc2VjdGlvbik7Cisg
ICAgICAgIGdzaXplIHNpemU7CisgICAgICAgIGNvbnN0IHZvaWQqIGJ5dGVzID0gZ19ieXRlc19n
ZXRfZGF0YShkYXRhLmdldCgpLCAmc2l6ZSk7CisKKyAgICAgICAgdHJhY2stPmFkZERhdGFDdWUo
Y3VycmVudE1lZGlhVGltZSgpLCBjdXJyZW50TWVkaWFUaW1lKCksIGJ5dGVzLCBzaXplKTsKKyAg
ICB9Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNvbnRlbnRzKEdzdE1lc3NhZ2UqIG1l
c3NhZ2UpCit7CisgICAgaWYgKG1fY2hhcHRlcnNUcmFjaykKKyAgICAgICAgbV9wbGF5ZXItPnJl
bW92ZVRleHRUcmFjaygqbV9jaGFwdGVyc1RyYWNrKTsKKworICAgIG1fY2hhcHRlcnNUcmFjayA9
IEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKEluYmFuZFRl
eHRUcmFja1ByaXZhdGU6OkNoYXB0ZXJzLCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpHZW5lcmlj
KTsKKyAgICBtX3BsYXllci0+YWRkVGV4dFRyYWNrKCptX2NoYXB0ZXJzVHJhY2spOworCisgICAg
R1JlZlB0cjxHc3RUb2M+IHRvYzsKKyAgICBnYm9vbGVhbiB1cGRhdGVkOworICAgIGdzdF9tZXNz
YWdlX3BhcnNlX3RvYyhtZXNzYWdlLCAmdG9jLm91dFB0cigpLCAmdXBkYXRlZCk7CisgICAgQVNT
RVJUKHRvYyk7CisKKyAgICBmb3IgKEdMaXN0KiBpID0gZ3N0X3RvY19nZXRfZW50cmllcyh0b2Mu
Z2V0KCkpOyBpOyBpID0gaS0+bmV4dCkKKyAgICAgICAgcHJvY2Vzc1RhYmxlT2ZDb250ZW50c0Vu
dHJ5KHN0YXRpY19jYXN0PEdzdFRvY0VudHJ5Kj4oaS0+ZGF0YSkpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZDb250ZW50c0VudHJ5KEdzdFRv
Y0VudHJ5KiBlbnRyeSkKK3sKKyAgICBBU1NFUlQoZW50cnkpOworCisgICAgYXV0byBjdWUgPSBH
ZW5lcmljQ3VlRGF0YTo6Y3JlYXRlKCk7CisKKyAgICBnaW50NjQgc3RhcnQgPSAtMSwgc3RvcCA9
IC0xOworICAgIGdzdF90b2NfZW50cnlfZ2V0X3N0YXJ0X3N0b3BfdGltZXMoZW50cnksICZzdGFy
dCwgJnN0b3ApOworICAgIGlmIChzdGFydCAhPSAtMSkKKyAgICAgICAgY3VlLT5zZXRTdGFydFRp
bWUoTWVkaWFUaW1lKHN0YXJ0LCBHU1RfU0VDT05EKSk7CisgICAgaWYgKHN0b3AgIT0gLTEpCisg
ICAgICAgIGN1ZS0+c2V0RW5kVGltZShNZWRpYVRpbWUoc3RvcCwgR1NUX1NFQ09ORCkpOworCisg
ICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90b2NfZW50cnlfZ2V0X3RhZ3MoZW50cnkpOworICAg
IGlmICh0YWdzKSB7CisgICAgICAgIGdjaGFyKiB0aXRsZSA9IG51bGxwdHI7CisgICAgICAgIGdz
dF90YWdfbGlzdF9nZXRfc3RyaW5nKHRhZ3MsIEdTVF9UQUdfVElUTEUsICZ0aXRsZSk7CisgICAg
ICAgIGlmICh0aXRsZSkgeworICAgICAgICAgICAgY3VlLT5zZXRDb250ZW50KHRpdGxlKTsKKyAg
ICAgICAgICAgIGdfZnJlZSh0aXRsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NoYXB0
ZXJzVHJhY2stPmFkZEdlbmVyaWNDdWUoY3VlKTsKKworICAgIGZvciAoR0xpc3QqIGkgPSBnc3Rf
dG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyhlbnRyeSk7IGk7IGkgPSBpLT5uZXh0KQorICAgICAg
ICBwcm9jZXNzVGFibGVPZkNvbnRlbnRzRW50cnkoc3RhdGljX2Nhc3Q8R3N0VG9jRW50cnkqPihp
LT5kYXRhKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUlu
dmFsaWRBdWRpb1RyYWNrcyhWZWN0b3I8U3RyaW5nPiB2YWxpZFRyYWNrSWRzKQoreworICAgIG1f
YXVkaW9UcmFja3MucmVtb3ZlSWYoW3ZhbGlkVHJhY2tJZHNdKGF1dG8mIGtleUFuZFZhbHVlKSB7
CisgICAgICAgIHJldHVybiAhdmFsaWRUcmFja0lkcy5jb250YWlucyhrZXlBbmRWYWx1ZS5rZXkp
OworICAgIH0pOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJ
bnZhbGlkVmlkZW9UcmFja3MoVmVjdG9yPFN0cmluZz4gdmFsaWRUcmFja0lkcykKK3sKKyAgICBt
X3ZpZGVvVHJhY2tzLnJlbW92ZUlmKFt2YWxpZFRyYWNrSWRzXShhdXRvJiBrZXlBbmRWYWx1ZSkg
eworICAgICAgICByZXR1cm4gIXZhbGlkVHJhY2tJZHMuY29udGFpbnMoa2V5QW5kVmFsdWUua2V5
KTsKKyAgICB9KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdl
SW52YWxpZFRleHRUcmFja3MoVmVjdG9yPFN0cmluZz4gdmFsaWRUcmFja0lkcykKK3sKKyAgICBt
X3RleHRUcmFja3MucmVtb3ZlSWYoW3ZhbGlkVHJhY2tJZHNdKGF1dG8mIGtleUFuZFZhbHVlKSB7
CisgICAgICAgIHJldHVybiAhdmFsaWRUcmFja0lkcy5jb250YWlucyhrZXlBbmRWYWx1ZS5rZXkp
OworICAgIH0pOworfQorI2VuZGlmCiAKLSAgICAgICAgbV9zdHJlYW1Db2xsZWN0aW9uLnN3YXAo
Y29sbGVjdGlvbik7Ci0gICAgICAgIG1fY3VycmVudEF1ZGlvU3RyZWFtSWQgPSAiIjsKLSAgICAg
ICAgbV9jdXJyZW50VmlkZW9TdHJlYW1JZCA9ICIiOwotICAgICAgICBtX2N1cnJlbnRUZXh0U3Ry
ZWFtSWQgPSAiIjsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cmlEZWNvZGVC
aW5FbGVtZW50QWRkZWRDYWxsYmFjayhHc3RCaW4qIGJpbiwgR3N0RWxlbWVudCogZWxlbWVudCwg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgaWYgKGdfc3RyY21w
MChHX09CSkVDVF9UWVBFX05BTUUoZWxlbWVudCksICJHc3REb3dubG9hZEJ1ZmZlciIpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X21lc3NhZ2Vfc3Ry
ZWFtc19zZWxlY3RlZF9nZXRfc2l6ZShtZXNzYWdlKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4g
c3RyZWFtID0gZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc3RyZWFtKG1lc3NhZ2Us
IGkpOwotICAgICAgICAgICAgaWYgKCFzdHJlYW0pCi0gICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgcGxheWVyLT5tX2Rvd25sb2FkQnVmZmVyID0gZWxlbWVudDsKKyAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoYmluLCByZWludGVycHJldF9jYXN0PGdwb2ludGVy
Pih1cmlEZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayksIHBsYXllcik7CisgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKGVsZW1lbnQsICJub3RpZnk6OnRlbXAtbG9jYXRpb24iLCBHX0NB
TExCQUNLKGRvd25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayksIHBsYXllcik7CiAKLSAg
ICAgICAgICAgIEdzdFN0cmVhbVR5cGUgdHlwZSA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBl
KHN0cmVhbS5nZXQoKSk7Ci0gICAgICAgICAgICBTdHJpbmcgc3RyZWFtSWQoZ3N0X3N0cmVhbV9n
ZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOworICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gb2xk
RG93bmxvYWRUZW1wbGF0ZTsKKyAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgInRlbXAtdGVtcGxh
dGUiLCAmb2xkRG93bmxvYWRUZW1wbGF0ZS5vdXRQdHIoKSwgbnVsbHB0cik7CiAKLSAgICAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNlbGVjdGluZyAlcyB0cmFjayB3aXRo
IElEOiAlcyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3RyZWFtSWQudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICAvLyBQbGF5YmluMyBjYW4gc2VuZCBtb3JlIHRoYW4gb25l
IHNlbGVjdGVkIHN0cmVhbSBvZiB0aGUgc2FtZSB0eXBlCi0gICAgICAgICAgICAvLyBidXQgdGhl
cmUncyBubyBwcmlvcml0eSBvciBvcmRlcmluZyBzeXN0ZW0gaW4gcGxhY2UsIHNvIHdlIGFzc3Vt
ZQotICAgICAgICAgICAgLy8gdGhlIHNlbGVjdGVkIHN0cmVhbSBpcyB0aGUgbGFzdCBvbmUgYXMg
cmVwb3J0ZWQgYnkgcGxheWJpbjMuCi0gICAgICAgICAgICBpZiAodHlwZSAmIEdTVF9TVFJFQU1f
VFlQRV9BVURJTykgewotICAgICAgICAgICAgICAgIG1fY3VycmVudEF1ZGlvU3RyZWFtSWQgPSBz
dHJlYW1JZDsKLSAgICAgICAgICAgICAgICBhdXRvIHRyYWNrID0gbV9hdWRpb1RyYWNrcy5nZXQo
bV9jdXJyZW50QXVkaW9TdHJlYW1JZCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHRyYWNrKTsK
LSAgICAgICAgICAgICAgICB0cmFjay0+bWFya0FzQWN0aXZlKCk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklERU8pIHsKLSAgICAgICAgICAgICAgICBt
X2N1cnJlbnRWaWRlb1N0cmVhbUlkID0gc3RyZWFtSWQ7Ci0gICAgICAgICAgICAgICAgYXV0byB0
cmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVCh0cmFjayk7Ci0gICAgICAgICAgICAgICAgdHJhY2stPm1hcmtBc0Fj
dGl2ZSgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX1RF
WFQpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50VGV4dFN0cmVhbUlkID0gc3RyZWFtSWQ7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25vd24gc3Ry
ZWFtIHR5cGUgd2l0aCBzdHJlYW0taWQgJXMiLCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVW5oYW5kbGVkIEdTdHJlYW1lciBtZXNzYWdlIHR5
cGU6ICVzIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1lc3NhZ2UpKTsKLSAgICAgICAgYnJlYWs7
CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBuZXdEb3dubG9hZFRlbXBsYXRlKGdfYnVpbGRfZmlsZW5h
bWUoR19ESVJfU0VQQVJBVE9SX1MsICJ2YXIiLCAidG1wIiwgIldlYktpdC1NZWRpYS1YWFhYWFgi
LCBudWxscHRyKSk7CisgICAgZ19vYmplY3Rfc2V0KGVsZW1lbnQsICJ0ZW1wLXRlbXBsYXRlIiwg
bmV3RG93bmxvYWRUZW1wbGF0ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgR1NUX0RFQlVHX09CSkVD
VChwbGF5ZXItPnBpcGVsaW5lKCksICJSZWNvbmZpZ3VyZWQgZmlsZSBkb3dubG9hZCB0ZW1wbGF0
ZSBmcm9tICclcycgdG8gJyVzJyIsIG9sZERvd25sb2FkVGVtcGxhdGUuZ2V0KCksIG5ld0Rvd25s
b2FkVGVtcGxhdGUuZ2V0KCkpOworCisgICAgcGxheWVyLT5wdXJnZU9sZERvd25sb2FkRmlsZXMo
b2xkRG93bmxvYWRUZW1wbGF0ZS5nZXQoKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpkb3dubG9hZEJ1ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgQVNTRVJUKHBsYXllci0+bV9kb3dubG9h
ZEJ1ZmZlcik7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMocGxh
eWVyLT5tX2Rvd25sb2FkQnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihk
b3dubG9hZEJ1ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2spLCBwbGF5ZXIpOworCisgICAgR1VuaXF1
ZU91dFB0cjxjaGFyPiBkb3dubG9hZEZpbGU7CisgICAgZ19vYmplY3RfZ2V0KHBsYXllci0+bV9k
b3dubG9hZEJ1ZmZlci5nZXQoKSwgInRlbXAtbG9jYXRpb24iLCAmZG93bmxvYWRGaWxlLm91dFB0
cigpLCBudWxscHRyKTsKKyAgICBwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIgPSBudWxscHRyOwor
CisgICAgaWYgKFVOTElLRUxZKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRvd25sb2FkRmlsZS5n
ZXQoKSkpKSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJDb3VsZG4ndCB1bmxpbmsgbWVkaWEgdGVt
cG9yYXJ5IGZpbGUgJXMgYWZ0ZXIgY3JlYXRpb24iLCBkb3dubG9hZEZpbGUuZ2V0KCkpOworICAg
ICAgICByZXR1cm47CiAgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVChwbGF5ZXItPnBpcGVs
aW5lKCksICJVbmxpbmtlZCBtZWRpYSB0ZW1wb3JhcnkgZmlsZSAlcyBhZnRlciBjcmVhdGlvbiIs
IGRvd25sb2FkRmlsZS5nZXQoKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZU9sZERvd25sb2FkRmlsZXMoY29uc3QgY2hh
ciogZG93bmxvYWRGaWxlVGVtcGxhdGUpCiB7Ci0gICAgR3N0QnVmZmVyaW5nTW9kZSBtb2RlOwot
ICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cyhtZXNzYWdlLCAmbW9kZSwgbnVs
bHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgaWYgKCFkb3dubG9hZEZpbGVUZW1wbGF0ZSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBlcmNlbnRhZ2U7Ci0gICAgZ3N0X21lc3NhZ2Vf
cGFyc2VfYnVmZmVyaW5nKG1lc3NhZ2UsICZwZXJjZW50YWdlKTsKKyAgICBHVW5pcXVlUHRyPGNo
YXI+IHRlbXBsYXRlUGF0aChnX3BhdGhfZ2V0X2Rpcm5hbWUoZG93bmxvYWRGaWxlVGVtcGxhdGUp
KTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHRlbXBsYXRlRmlsZShnX3BhdGhfZ2V0X2Jhc2VuYW1l
KGRvd25sb2FkRmlsZVRlbXBsYXRlKSk7CisgICAgU3RyaW5nIHRlbXBsYXRlUGF0dGVybiA9IFN0
cmluZyh0ZW1wbGF0ZUZpbGUuZ2V0KCkpLnJlcGxhY2UoIlgiLCAiPyIpOwogCi0gICAgdXBkYXRl
QnVmZmVyaW5nU3RhdHVzKG1vZGUsIHBlcmNlbnRhZ2UpOworICAgIGZvciAoYXV0byYgZmlsZVBh
dGggOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHRlbXBsYXRlUGF0aC5nZXQoKSwgdGVtcGxh
dGVQYXR0ZXJuKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIUZpbGVTeXN0ZW06OmRlbGV0ZUZp
bGUoZmlsZVBhdGgpKSkgeworICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNvdWxkbid0IHVubGlu
ayBsZWdhY3kgbWVkaWEgdGVtcG9yYXJ5IGZpbGU6ICVzIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIEdTVF9UUkFD
RSgiVW5saW5rZWQgbGVnYWN5IG1lZGlhIHRlbXBvcmFyeSBmaWxlOiAlcyIsIGZpbGVQYXRoLnV0
ZjgoKS5kYXRhKCkpOworICAgIH0KIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnVwZGF0ZU1heFRpbWVMb2FkZWQoZG91YmxlIHBlcmNlbnRhZ2UpCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXN5bmNTdGF0ZUNoYW5nZURvbmUoKQogewotICAgIE1lZGlh
VGltZSBtZWRpYUR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKLSAgICBpZiAoIW1lZGlh
RHVyYXRpb24pCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX21heFRpbWVMb2FkZWQgPSBNZWRpYVRpbWUocGVyY2VudGFnZSAq
IHN0YXRpY19jYXN0PGRvdWJsZT4odG9Hc3RVbnNpZ25lZDY0VGltZShtZWRpYUR1cmF0aW9uKSkg
LyAxMDAsIEdTVF9TRUNPTkQpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltC
dWZmZXJpbmddIFVwZGF0ZWQgbWF4VGltZUxvYWRlZDogJXMiLCB0b1N0cmluZyhtX21heFRpbWVM
b2FkZWQpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChtX3NlZWtpbmcpIHsKKyAgICAgICAgaWYg
KG1fc2Vla0lzUGVuZGluZykKKyAgICAgICAgICAgIHVwZGF0ZVN0YXRlcygpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBz
ZWVrZWQgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9
IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICAgICAgICAgIGlmIChtX3RpbWVPZk92ZXJs
YXBwaW5nU2VlayAhPSBtX3NlZWtUaW1lICYmIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrLmlzVmFs
aWQoKSkgeworICAgICAgICAgICAgICAgIHNlZWsobV90aW1lT2ZPdmVybGFwcGluZ1NlZWspOwor
ICAgICAgICAgICAgICAgIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrID0gTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
OworCisgICAgICAgICAgICAvLyBUaGUgcGlwZWxpbmUgY2FuIHN0aWxsIGhhdmUgYSBwZW5kaW5n
IHN0YXRlLiBJbiB0aGlzIGNhc2UgYSBwb3NpdGlvbiBxdWVyeSB3aWxsIGZhaWwuCisgICAgICAg
ICAgICAvLyBSaWdodCBub3cgd2UgY2FuIHVzZSBtX3NlZWtUaW1lIGFzIGEgZmFsbGJhY2suCisg
ICAgICAgICAgICBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24gPSB0cnVl
OworICAgICAgICAgICAgdGltZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAg
ICAgICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhHc3RCdWZmZXJpbmdNb2RlIG1vZGUsIGRvdWJsZSBw
ZXJjZW50YWdlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRl
cygpCiB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gbW9k
ZTogJXMsIHN0YXR1czogJWYlJSIsIGVudW1Ub1N0cmluZyhHU1RfVFlQRV9CVUZGRVJJTkdfTU9E
RSwgbW9kZSkuZGF0YSgpLCBwZXJjZW50YWdlKTsKKyAgICBpZiAoIW1fcGlwZWxpbmUpCisgICAg
ICAgIHJldHVybjsKIAotICAgIG1fZG93bmxvYWRGaW5pc2hlZCA9IHBlcmNlbnRhZ2UgPT0gMTAw
OwotICAgIG1fYnVmZmVyaW5nID0gIW1fZG93bmxvYWRGaW5pc2hlZDsKKyAgICBpZiAobV9lcnJv
ck9jY3VyZWQpCisgICAgICAgIHJldHVybjsKIAotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNh
c2UgR1NUX0JVRkZFUklOR19TVFJFQU06IHsKLSAgICAgICAgdXBkYXRlTWF4VGltZUxvYWRlZChw
ZXJjZW50YWdlKTsKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0
ZSA9IG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5
U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisgICAgR3N0U3RhdGUgcGVuZGluZzsKKyAgICBHc3RTdGF0
ZSBzdGF0ZTsKKyAgICBib29sIHN0YXRlUmVhbGx5Q2hhbmdlZCA9IGZhbHNlOwogCi0gICAgICAg
IG1fYnVmZmVyaW5nUGVyY2VudGFnZSA9IHBlcmNlbnRhZ2U7Ci0gICAgICAgIGlmIChtX2Rvd25s
b2FkRmluaXNoZWQpCi0gICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKKyAgICBHc3RTdGF0ZUNo
YW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCAmc3RhdGUsICZwZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7CisgICAgaWYg
KHN0YXRlICE9IG1fY3VycmVudFN0YXRlKSB7CisgICAgICAgIG1fb2xkU3RhdGUgPSBtX2N1cnJl
bnRTdGF0ZTsKKyAgICAgICAgbV9jdXJyZW50U3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgc3RhdGVS
ZWFsbHlDaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHNob3VsZFVwZGF0ZVBsYXli
YWNrU3RhdGUgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKGdldFN0YXRlUmVzdWx0KSB7CisgICAgY2Fz
ZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6IHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGlu
ZykpOworCisgICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBzdGF0ZSBjaGFuZ2Vk
IHRvIFJFQURZIHRvIGF2b2lkIHJlY3JlYXRpbmcgdGhlIHBsYXllcgorICAgICAgICAvLyBvbiBI
VE1MTWVkaWFFbGVtZW50IGFuZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlkZW8gJ2VuZGVkJyBl
dmVudC4KKyAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIG1fY3VycmVudFN0YXRlID09IEdT
VF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG1fcmVzZXRQaXBl
bGluZSA9IG1fY3VycmVudFN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWTsKKworICAgICAgICBib29s
IGRpZEJ1ZmZlcmluZyA9IG1fYnVmZmVyaW5nOworCisgICAgICAgIC8vIFVwZGF0ZSByZWFkeSBh
bmQgbmV0d29yayBzdGF0ZXMuCisgICAgICAgIHN3aXRjaCAobV9jdXJyZW50U3RhdGUpIHsKKyAg
ICAgICAgY2FzZSBHU1RfU1RBVEVfTlVMTDoKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVk
aWFQbGF5ZXI6OkVtcHR5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX1NU
QVRFX1JFQURZOgorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVN
ZXRhZGF0YTsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVtcHR5
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKKyAg
ICAgICAgY2FzZSBHU1RfU1RBVEVfUExBWUlORzoKKyAgICAgICAgICAgIGlmIChtX2J1ZmZlcmlu
ZykgeworICAgICAgICAgICAgICAgIGlmIChtX2J1ZmZlcmluZ1BlcmNlbnRhZ2UgPT0gMTAwKSB7
CisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZm
ZXJpbmddIENvbXBsZXRlLiIpOworICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlcmluZyA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZUVub3VnaERhdGE7CisgICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gbV9kb3du
bG9hZEZpbmlzaGVkID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZzsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAgICAgICAgICAgICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7CisgICAgICAgICAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAg
ICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6
OkhhdmVGdXR1cmVEYXRhOworICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkxvYWRpbmc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN5bmMgc3RhdGVzIHdoZXJlIG5l
ZWRlZC4KKyAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsK
KyAgICAgICAgICAgIGlmICghbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAg
ICAgICAgICBub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOworICAgICAgICAgICAgICAgIG5v
dGlmeVBsYXllck9mTXV0ZSgpOworICAgICAgICAgICAgICAgIG1fdm9sdW1lQW5kTXV0ZUluaXRp
YWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRpZEJ1ZmZl
cmluZyAmJiAhbV9idWZmZXJpbmcgJiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7Cisg
ICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10g
UmVzdGFydGluZyBwbGF5YmFjay4iKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0
YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgeworICAgICAgICAgICAgbV9w
YXVzZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgaWYgKChtX2J1ZmZlcmluZyAmJiAhaXNMaXZl
U3RyZWFtKCkpIHx8ICFtX3BsYXliYWNrUmF0ZSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIFBhdXNpbmcgc3RyZWFtIGZvciBidWZm
ZXJpbmcuIik7CisgICAgICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVf
UEFVU0VEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3Bh
dXNlZCA9IHRydWU7CisKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiT2xk
IHN0YXRlOiAlcywgbmV3IHN0YXRlOiAlcyAocmVxdWVzdGVkOiAlcykiLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShtX29sZFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9j
dXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX3JlcXVlc3RlZFN0YXRl
KSk7CisgICAgICAgIGlmIChtX3JlcXVlc3RlZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYg
bV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAgc2hvdWxk
VXBkYXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7CisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIlJlcXVlc3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgd2FzIGNvbXBsZXRlZCIs
IGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBFbWl0IHBsYXkgc3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiBvbmx5IHdo
ZW4gZ29pbmcgdG8gUExBWUlORyBzbyB0aGF0CisgICAgICAgIC8vIHRoZSBtZWRpYSBlbGVtZW50
IGdldHMgYSBjaGFuY2UgdG8gZW5hYmxlIGl0cyBwYWdlIHNsZWVwIGRpc2FibGVyLgorICAgICAg
ICAvLyBFbWl0dGluZyB0aGlzIG5vdGlmaWNhdGlvbiBpbiBtb3JlIGNhc2VzIHRyaWdnZXJzIHVu
d2FudGVkIGNvZGUgcGF0aHMKKyAgICAgICAgLy8gYW5kIHRlc3QgdGltZW91dHMuCisgICAgICAg
IGlmIChzdGF0ZVJlYWxseUNoYW5nZWQgJiYgKG1fb2xkU3RhdGUgIT0gbV9jdXJyZW50U3RhdGUp
ICYmIChtX29sZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgbV9jdXJyZW50U3RhdGUgPT0g
R1NUX1NUQVRFX1BMQVlJTkcpKSB7CisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxp
bmUoKSwgIlBsYXliYWNrIHN0YXRlIGNoYW5nZWQgZnJvbSAlcyB0byAlcy4gTm90aWZ5aW5nIHRo
ZSBtZWRpYSBwbGF5ZXIgY2xpZW50IiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9vbGRT
dGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSk7CisgICAg
ICAgICAgICBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfQVNZTkM6Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkFzeW5jOiBTdGF0ZTogJXMsIHBl
bmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBp
biBwcm9ncmVzcy4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZB
SUxVUkU6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkZhaWx1cmU6IFN0
YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJl
bnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKKyAgICAgICAg
Ly8gQ2hhbmdlIGZhaWxlZAorICAgICAgICByZXR1cm47CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hB
TkdFX05PX1BSRVJPTEw6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk5v
IHByZXJvbGw6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRf
bmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcp
KTsKKworICAgICAgICAvLyBMaXZlIHBpcGVsaW5lcyBnbyBpbiBQQVVTRUQgd2l0aG91dCBwcmVy
b2xsaW5nLgorICAgICAgICBtX2lzU3RyZWFtaW5nID0gdHJ1ZTsKKyAgICAgICAgdXBkYXRlRG93
bmxvYWRCdWZmZXJpbmdGbGFnKCk7CiAKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
R1NUX0JVRkZFUklOR19ET1dOTE9BRDogewotICAgICAgICB1cGRhdGVNYXhUaW1lTG9hZGVkKHBl
cmNlbnRhZ2UpOworICAgICAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZ
KQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwor
ICAgICAgICBlbHNlIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7Cisg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Cisg
ICAgICAgICAgICBtX3BhdXNlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50
U3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCisgICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNl
OwogCi0gICAgICAgIC8vIE1lZGlhIGlzIG5vdyBmdWxseSBsb2FkZWQuIEl0IHdpbGwgcGxheSBl
dmVuIGlmIG5ldHdvcmsgY29ubmVjdGlvbiBpcwotICAgICAgICAvLyBjdXQuIEJ1ZmZlcmluZyBp
cyBkb25lLCByZW1vdmUgdGhlIGZpbGwgc291cmNlIGZyb20gdGhlIG1haW4gbG9vcC4KLSAgICAg
ICAgaWYgKG1fZG93bmxvYWRGaW5pc2hlZCkKLSAgICAgICAgICAgIG1fZmlsbFRpbWVyLnN0b3Ao
KTsKKyAgICAgICAgaWYgKCFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkKKyAgICAgICAgICAg
IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwogCi0gICAgICAgIHVwZGF0
ZVN0YXRlcygpOworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5n
OwogICAgICAgICBicmVhazsKLSAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiVW5oYW5kbGVkIGJ1ZmZlcmluZyBtb2RlOiAlcyIsIGVudW1U
b1N0cmluZyhHU1RfVFlQRV9CVUZGRVJJTkdfTU9ERSwgbW9kZSkuZGF0YSgpKTsKKyAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRWxzZSA6ICVkIiwgZ2V0U3RhdGVSZXN1bHQp
OwogICAgICAgICBicmVhazsKICAgICB9Ci19CiAKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYm
IFVTRShHU1RSRUFNRVJfTVBFR1RTKQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnByb2Nlc3NNcGVnVHNTZWN0aW9uKEdzdE1wZWd0c1NlY3Rpb24qIHNlY3Rpb24pCi17Ci0gICAg
QVNTRVJUKHNlY3Rpb24pOworICAgIG1fcmVxdWVzdGVkU3RhdGUgPSBHU1RfU1RBVEVfVk9JRF9Q
RU5ESU5HOwogCi0gICAgaWYgKHNlY3Rpb24tPnNlY3Rpb25fdHlwZSA9PSBHU1RfTVBFR1RTX1NF
Q1RJT05fUE1UKSB7Ci0gICAgICAgIGNvbnN0IEdzdE1wZWd0c1BNVCogcG10ID0gZ3N0X21wZWd0
c19zZWN0aW9uX2dldF9wbXQoc2VjdGlvbik7Ci0gICAgICAgIG1fbWV0YWRhdGFUcmFja3MuY2xl
YXIoKTsKLSAgICAgICAgZm9yIChndWludCBpID0gMDsgaSA8IHBtdC0+c3RyZWFtcy0+bGVuOyAr
K2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEdzdE1wZWd0c1BNVFN0cmVhbSogc3RyZWFtID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzUE1UU3RyZWFtKj4oZ19wdHJfYXJyYXlfaW5kZXgocG10
LT5zdHJlYW1zLCBpKSk7Ci0gICAgICAgICAgICBpZiAoc3RyZWFtLT5zdHJlYW1fdHlwZSA9PSAw
eDA1IHx8IHN0cmVhbS0+c3RyZWFtX3R5cGUgPj0gMHg4MCkgewotICAgICAgICAgICAgICAgIEF0
b21TdHJpbmcgcGlkID0gU3RyaW5nOjpudW1iZXIoc3RyZWFtLT5waWQpOwotICAgICAgICAgICAg
ICAgIGF1dG8gdHJhY2sgPSBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6TWV0
YWRhdGEsIEluYmFuZFRleHRUcmFja1ByaXZhdGU6OkRhdGEsIHBpZCk7CisgICAgaWYgKHNob3Vs
ZFVwZGF0ZVBsYXliYWNrU3RhdGUpCisgICAgICAgIG1fcGxheWVyLT5wbGF5YmFja1N0YXRlQ2hh
bmdlZCgpOwogCi0gICAgICAgICAgICAgICAgLy8gNC43LjEwLjEyLjIgU291cmNpbmcgaW4tYmFu
ZCB0ZXh0IHRyYWNrcwotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgdGV4dCB0cmFjaydz
IGtpbmQgaXMgbWV0YWRhdGEsIHRoZW4gc2V0IHRoZSB0ZXh0IHRyYWNrIGluLWJhbmQgbWV0YWRh
dGEgdHJhY2sgZGlzcGF0Y2gKLSAgICAgICAgICAgICAgICAvLyB0eXBlIGFzIGZvbGxvd3MsIGJh
c2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBtZWRpYSByZXNvdXJjZToKLSAgICAgICAgICAgICAgICAv
LyBMZXQgc3RyZWFtIHR5cGUgYmUgdGhlIHZhbHVlIG9mIHRoZSAic3RyZWFtX3R5cGUiIGZpZWxk
IGRlc2NyaWJpbmcgdGhlIHRleHQgdHJhY2sncyB0eXBlIGluIHRoZQotICAgICAgICAgICAgICAg
IC8vIGZpbGUncyBwcm9ncmFtIG1hcCBzZWN0aW9uLCBpbnRlcnByZXRlZCBhcyBhbiA4LWJpdCB1
bnNpZ25lZCBpbnRlZ2VyLiBMZXQgbGVuZ3RoIGJlIHRoZSB2YWx1ZSBvZgotICAgICAgICAgICAg
ICAgIC8vIHRoZSAiRVNfaW5mb19sZW5ndGgiIGZpZWxkIGZvciB0aGUgdHJhY2sgaW4gdGhlIHNh
bWUgcGFydCBvZiB0aGUgcHJvZ3JhbSBtYXAgc2VjdGlvbiwgaW50ZXJwcmV0ZWQKLSAgICAgICAg
ICAgICAgICAvLyBhcyBhbiBpbnRlZ2VyIGFzIGRlZmluZWQgYnkgdGhlIE1QRUctMiBzcGVjaWZp
Y2F0aW9uLiBMZXQgZGVzY3JpcHRvciBieXRlcyBiZSB0aGUgbGVuZ3RoIGJ5dGVzCi0gICAgICAg
ICAgICAgICAgLy8gZm9sbG93aW5nIHRoZSAiRVNfaW5mb19sZW5ndGgiIGZpZWxkLiBUaGUgdGV4
dCB0cmFjayBpbi1iYW5kIG1ldGFkYXRhIHRyYWNrIGRpc3BhdGNoIHR5cGUgbXVzdCBiZQotICAg
ICAgICAgICAgICAgIC8vIHNldCB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyZWFtIHR5
cGUgYnl0ZSBhbmQgdGhlIHplcm8gb3IgbW9yZSBkZXNjcmlwdG9yIGJ5dGVzIGJ5dGVzLAotICAg
ICAgICAgICAgICAgIC8vIGV4cHJlc3NlZCBpbiBoZXhhZGVjaW1hbCB1c2luZyB1cHBlcmNhc2Ug
QVNDSUkgaGV4IGRpZ2l0cy4KLSAgICAgICAgICAgICAgICBTdHJpbmcgaW5iYW5kTWV0YWRhdGFU
cmFja0Rpc3BhdGNoVHlwZTsKLSAgICAgICAgICAgICAgICBhcHBlbmRVbnNpZ25lZEFzSGV4Rml4
ZWRTaXplKHN0cmVhbS0+c3RyZWFtX3R5cGUsIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5
cGUsIDIpOwotICAgICAgICAgICAgICAgIGZvciAoZ3VpbnQgaiA9IDA7IGogPCBzdHJlYW0tPmRl
c2NyaXB0b3JzLT5sZW47ICsraikgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RNcGVn
dHNEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gc3RhdGljX2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzRGVz
Y3JpcHRvcio+KGdfcHRyX2FycmF5X2luZGV4KHN0cmVhbS0+ZGVzY3JpcHRvcnMsIGopKTsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChndWludCBrID0gMDsgayA8IGRlc2NyaXB0b3ItPmxlbmd0
aDsgKytrKQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGRlc2NyaXB0
b3ItPmRhdGFba10sIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB0cmFjay0+c2V0SW5CYW5kTWV0YWRhdGFUcmFja0Rp
c3BhdGNoVHlwZShpbmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKTsKKyAgICBpZiAobV9u
ZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0YXRlKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIk5ldHdvcmsgU3RhdGUgQ2hhbmdlZCBmcm9tICVzIHRvICVzIiwgY29u
dmVydEVudW1lcmF0aW9uVG9TdHJpbmcob2xkTmV0d29ya1N0YXRlKS51dGY4KCkuZGF0YSgpLCBj
b252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhtX25ldHdvcmtTdGF0ZSkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlm
IChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgeworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJSZWFkeSBTdGF0ZSBDaGFuZ2VkIGZyb20gJXMgdG8gJXMiLCBjb252
ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhvbGRSZWFkeVN0YXRlKS51dGY4KCkuZGF0YSgpLCBjb252
ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhtX3JlYWR5U3RhdGUpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CiAKLSAgICAgICAgICAg
ICAgICBtX21ldGFkYXRhVHJhY2tzLmFkZChwaWQsIHRyYWNrKTsKLSAgICAgICAgICAgICAgICBt
X3BsYXllci0+YWRkVGV4dFRyYWNrKCp0cmFjayk7CisgICAgaWYgKGdldFN0YXRlUmVzdWx0ID09
IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAmJiBtX2N1cnJlbnRTdGF0ZSA+PSBHU1RfU1RBVEVf
UEFVU0VEKSB7CisgICAgICAgIHVwZGF0ZVBsYXliYWNrUmF0ZSgpOworICAgICAgICBpZiAobV9z
ZWVrSXNQZW5kaW5nKSB7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJbU2Vla10gY29tbWl0dGluZyBwZW5kaW5nIHNlZWsgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtU
aW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fc2Vla0lzUGVuZGluZyA9IGZhbHNl
OworICAgICAgICAgICAgbV9zZWVraW5nID0gZG9TZWVrKG1fc2Vla1RpbWUsIG1fcGxheWVyLT5y
YXRlKCksIHN0YXRpY19jYXN0PEdzdFNlZWtGbGFncz4oR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdT
VF9TRUVLX0ZMQUdfQUNDVVJBVEUpKTsKKyAgICAgICAgICAgIGlmICghbV9zZWVraW5nKSB7Cisg
ICAgICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KTsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10g
c2Vla2luZyB0byAlcyBmYWlsZWQiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEF0b21T
dHJpbmcgcGlkID0gU3RyaW5nOjpudW1iZXIoc2VjdGlvbi0+cGlkKTsKLSAgICAgICAgUmVmUHRy
PEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBtX21ldGFk
YXRhVHJhY2tzLmdldChwaWQpOwotICAgICAgICBpZiAoIXRyYWNrKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIEdSZWZQdHI8R0J5dGVzPiBkYXRhID0gZ3N0X21wZWd0c19zZWN0aW9u
X2dldF9kYXRhKHNlY3Rpb24pOwotICAgICAgICBnc2l6ZSBzaXplOwotICAgICAgICBjb25zdCB2
b2lkKiBieXRlcyA9IGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgJnNpemUpOwotCi0gICAg
ICAgIHRyYWNrLT5hZGREYXRhQ3VlKGN1cnJlbnRNZWRpYVRpbWUoKSwgY3VycmVudE1lZGlhVGlt
ZSgpLCBieXRlcywgc2l6ZSk7CiAgICAgfQogfQotI2VuZGlmCiAKLSNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZD
b250ZW50cyhHc3RNZXNzYWdlKiBtZXNzYWdlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om1lZGlhTG9jYXRpb25DaGFuZ2VkKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiB7Ci0gICAg
aWYgKG1fY2hhcHRlcnNUcmFjaykKLSAgICAgICAgbV9wbGF5ZXItPnJlbW92ZVRleHRUcmFjaygq
bV9jaGFwdGVyc1RyYWNrKTsKKyAgICBpZiAobV9tZWRpYUxvY2F0aW9ucykKKyAgICAgICAgZ3N0
X3N0cnVjdHVyZV9mcmVlKG1fbWVkaWFMb2NhdGlvbnMpOwogCi0gICAgbV9jaGFwdGVyc1RyYWNr
ID0gSW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZTo6Q2hhcHRlcnMsIEluYmFuZFRleHRUcmFja1ByaXZhdGU6OkdlbmVy
aWMpOwotICAgIG1fcGxheWVyLT5hZGRUZXh0VHJhY2soKm1fY2hhcHRlcnNUcmFjayk7CisgICAg
Y29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJl
KG1lc3NhZ2UpOworICAgIGlmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gVGhpcyBzdHJ1Y3R1
cmUgY2FuIGNvbnRhaW46CisgICAgICAgIC8vIC0gYm90aCBhIG5ldy1sb2NhdGlvbiBzdHJpbmcg
YW5kIGVtYmVkZGVkIGxvY2F0aW9ucyBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gLSBvciBvbmx5IGEg
bmV3LWxvY2F0aW9uIHN0cmluZy4KKyAgICAgICAgbV9tZWRpYUxvY2F0aW9ucyA9IGdzdF9zdHJ1
Y3R1cmVfY29weShzdHJ1Y3R1cmUpOworICAgICAgICBjb25zdCBHVmFsdWUqIGxvY2F0aW9ucyA9
IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKG1fbWVkaWFMb2NhdGlvbnMsICJsb2NhdGlvbnMiKTsK
IAotICAgIEdSZWZQdHI8R3N0VG9jPiB0b2M7Ci0gICAgZ2Jvb2xlYW4gdXBkYXRlZDsKLSAgICBn
c3RfbWVzc2FnZV9wYXJzZV90b2MobWVzc2FnZSwgJnRvYy5vdXRQdHIoKSwgJnVwZGF0ZWQpOwot
ICAgIEFTU0VSVCh0b2MpOworICAgICAgICBpZiAobG9jYXRpb25zKQorICAgICAgICAgICAgbV9t
ZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4ID0gc3RhdGljX2Nhc3Q8aW50Pihnc3RfdmFsdWVfbGlz
dF9nZXRfc2l6ZShsb2NhdGlvbnMpKSAtMTsKIAotICAgIGZvciAoR0xpc3QqIGkgPSBnc3RfdG9j
X2dldF9lbnRyaWVzKHRvYy5nZXQoKSk7IGk7IGkgPSBpLT5uZXh0KQotICAgICAgICBwcm9jZXNz
VGFibGVPZkNvbnRlbnRzRW50cnkoc3RhdGljX2Nhc3Q8R3N0VG9jRW50cnkqPihpLT5kYXRhKSk7
CisgICAgICAgIGxvYWROZXh0TG9jYXRpb24oKTsKKyAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNvbnRlbnRzRW50cnkoR3N0VG9jRW50
cnkqIGVudHJ5KQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9j
YXRpb24oKQogewotICAgIEFTU0VSVChlbnRyeSk7CisgICAgaWYgKCFtX21lZGlhTG9jYXRpb25z
KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGN1ZSA9IEdlbmVyaWNDdWVEYXRh
OjpjcmVhdGUoKTsKKyAgICBjb25zdCBHVmFsdWUqIGxvY2F0aW9ucyA9IGdzdF9zdHJ1Y3R1cmVf
Z2V0X3ZhbHVlKG1fbWVkaWFMb2NhdGlvbnMsICJsb2NhdGlvbnMiKTsKKyAgICBjb25zdCBnY2hh
ciogbmV3TG9jYXRpb24gPSBudWxscHRyOwogCi0gICAgZ2ludDY0IHN0YXJ0ID0gLTEsIHN0b3Ag
PSAtMTsKLSAgICBnc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzKGVudHJ5LCAmc3Rh
cnQsICZzdG9wKTsKLSAgICBpZiAoc3RhcnQgIT0gLTEpCi0gICAgICAgIGN1ZS0+c2V0U3RhcnRU
aW1lKE1lZGlhVGltZShzdGFydCwgR1NUX1NFQ09ORCkpOwotICAgIGlmIChzdG9wICE9IC0xKQot
ICAgICAgICBjdWUtPnNldEVuZFRpbWUoTWVkaWFUaW1lKHN0b3AsIEdTVF9TRUNPTkQpKTsKKyAg
ICBpZiAoIWxvY2F0aW9ucykgeworICAgICAgICAvLyBGYWxsYmFjayBvbiBuZXctbG9jYXRpb24g
c3RyaW5nLgorICAgICAgICBuZXdMb2NhdGlvbiA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyht
X21lZGlhTG9jYXRpb25zLCAibmV3LWxvY2F0aW9uIik7CisgICAgICAgIGlmICghbmV3TG9jYXRp
b24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgR3N0VGFnTGlzdCog
dGFncyA9IGdzdF90b2NfZW50cnlfZ2V0X3RhZ3MoZW50cnkpOwotICAgIGlmICh0YWdzKSB7Ci0g
ICAgICAgIGdjaGFyKiB0aXRsZSA9IG51bGxwdHI7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9nZXRf
c3RyaW5nKHRhZ3MsIEdTVF9UQUdfVElUTEUsICZ0aXRsZSk7Ci0gICAgICAgIGlmICh0aXRsZSkg
ewotICAgICAgICAgICAgY3VlLT5zZXRDb250ZW50KHRpdGxlKTsKLSAgICAgICAgICAgIGdfZnJl
ZSh0aXRsZSk7CisgICAgaWYgKCFuZXdMb2NhdGlvbikgeworICAgICAgICBpZiAobV9tZWRpYUxv
Y2F0aW9uQ3VycmVudEluZGV4IDwgMCkgeworICAgICAgICAgICAgbV9tZWRpYUxvY2F0aW9ucyA9
IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBHVmFsdWUqIGxvY2F0aW9uID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlKGxvY2F0
aW9ucywgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4KTsKKyAgICAgICAgY29uc3QgR3N0U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZShsb2NhdGlvbik7CisK
KyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIG1fbWVkaWFMb2NhdGlvbkN1
cnJlbnRJbmRleC0tOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CisKKyAg
ICAgICAgbmV3TG9jYXRpb24gPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAi
bmV3LWxvY2F0aW9uIik7CiAgICAgfQogCi0gICAgbV9jaGFwdGVyc1RyYWNrLT5hZGRHZW5lcmlj
Q3VlKGN1ZSk7CisgICAgaWYgKG5ld0xvY2F0aW9uKSB7CisgICAgICAgIC8vIEZvdW5kIGEgY2Fu
ZGlkYXRlLiBuZXctbG9jYXRpb24gaXMgbm90IGFsd2F5cyBhbiBhYnNvbHV0ZSB1cmwKKyAgICAg
ICAgLy8gdGhvdWdoLiBXZSBuZWVkIHRvIHRha2UgdGhlIGJhc2Ugb2YgdGhlIGN1cnJlbnQgdXJs
IGFuZAorICAgICAgICAvLyBhcHBlbmQgdGhlIHZhbHVlIG9mIG5ldy1sb2NhdGlvbiB0byBpdC4K
KyAgICAgICAgVVJMIGJhc2VVcmwgPSBnc3RfdXJpX2lzX3ZhbGlkKG5ld0xvY2F0aW9uKSA/IFVS
TCgpIDogbV91cmw7CisgICAgICAgIFVSTCBuZXdVcmwgPSBVUkwoYmFzZVVybCwgbmV3TG9jYXRp
b24pOwogCi0gICAgZm9yIChHTGlzdCogaSA9IGdzdF90b2NfZW50cnlfZ2V0X3N1Yl9lbnRyaWVz
KGVudHJ5KTsgaTsgaSA9IGktPm5leHQpCi0gICAgICAgIHByb2Nlc3NUYWJsZU9mQ29udGVudHNF
bnRyeShzdGF0aWNfY2FzdDxHc3RUb2NFbnRyeSo+KGktPmRhdGEpKTsKLX0KKyAgICAgICAgR1Vu
aXF1ZU91dFB0cjxnY2hhcj4gcGxheWJpblVybFN0cjsKKyAgICAgICAgZ19vYmplY3RfZ2V0KG1f
cGlwZWxpbmUuZ2V0KCksICJjdXJyZW50LXVyaSIsICZwbGF5YmluVXJsU3RyLm91dFB0cigpLCBu
dWxscHRyKTsKKyAgICAgICAgVVJMIHBsYXliaW5VcmwoVVJMKCksIHBsYXliaW5VcmxTdHIuZ2V0
KCkpOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJbnZhbGlkQXVk
aW9UcmFja3MoVmVjdG9yPFN0cmluZz4gdmFsaWRUcmFja0lkcykKLXsKLSAgICBtX2F1ZGlvVHJh
Y2tzLnJlbW92ZUlmKFt2YWxpZFRyYWNrSWRzXShhdXRvJiBrZXlBbmRWYWx1ZSkgewotICAgICAg
ICByZXR1cm4gIXZhbGlkVHJhY2tJZHMuY29udGFpbnMoa2V5QW5kVmFsdWUua2V5KTsKLSAgICB9
KTsKLX0KKyAgICAgICAgaWYgKHBsYXliaW5VcmwgPT0gbmV3VXJsKSB7CisgICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5YmluIGFscmVhZHkgaGFuZGxlZCByZWRp
cmVjdGlvbi4iKTsKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52
YWxpZFZpZGVvVHJhY2tzKFZlY3RvcjxTdHJpbmc+IHZhbGlkVHJhY2tJZHMpCi17Ci0gICAgbV92
aWRlb1RyYWNrcy5yZW1vdmVJZihbdmFsaWRUcmFja0lkc10oYXV0byYga2V5QW5kVmFsdWUpIHsK
LSAgICAgICAgcmV0dXJuICF2YWxpZFRyYWNrSWRzLmNvbnRhaW5zKGtleUFuZFZhbHVlLmtleSk7
Ci0gICAgfSk7Ci19CisgICAgICAgICAgICBtX3VybCA9IHBsYXliaW5Vcmw7CiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRUZXh0VHJhY2tzKFZlY3RvcjxT
dHJpbmc+IHZhbGlkVHJhY2tJZHMpCi17Ci0gICAgbV90ZXh0VHJhY2tzLnJlbW92ZUlmKFt2YWxp
ZFRyYWNrSWRzXShhdXRvJiBrZXlBbmRWYWx1ZSkgewotICAgICAgICByZXR1cm4gIXZhbGlkVHJh
Y2tJZHMuY29udGFpbnMoa2V5QW5kVmFsdWUua2V5KTsKLSAgICB9KTsKLX0KLSNlbmRpZgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAobV9lcnJvck9jY3VyZWQp
IHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gQW4g
ZXJyb3Igb2NjdXJyZWQsIGRpc2FibGluZyB0aGUgZmlsbCB0aW1lciIpOwotICAgICAgICBtX2Zp
bGxUaW1lci5zdG9wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGNoYW5nZVBp
cGVsaW5lU3RhdGUoR1NUX1NUQVRFX1JFQURZKTsKKyAgICAgICAgYXV0byBzZWN1cml0eU9yaWdp
biA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobV91cmwpOworICAgICAgICBpZiAoc2VjdXJpdHlP
cmlnaW4tPmNhblJlcXVlc3QobmV3VXJsKSkgeworICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNU
KHBpcGVsaW5lKCksICJOZXcgbWVkaWEgdXJsOiAlcyIsIG5ld1VybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKIAotICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9x
dWVyeV9uZXdfYnVmZmVyaW5nKEdTVF9GT1JNQVRfUEVSQ0VOVCkpOwotICAgIGRvdWJsZSBmaWxs
U3RhdHVzID0gMTAwLjA7Ci0gICAgR3N0QnVmZmVyaW5nTW9kZSBtb2RlID0gR1NUX0JVRkZFUklO
R19ET1dOTE9BRDsKKyAgICAgICAgICAgIC8vIFJlc2V0IHBsYXllciBzdGF0ZXMuCisgICAgICAg
ICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAg
bV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgICAgIG1fcGxheWVyLT5yZWFk
eVN0YXRlQ2hhbmdlZCgpOwogCi0gICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fc291cmNlLmdl
dCgpLCBxdWVyeS5nZXQoKSkpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19z
dGF0cyhxdWVyeS5nZXQoKSwgJm1vZGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworICAg
ICAgICAgICAgLy8gUmVzZXQgcGlwZWxpbmUgc3RhdGUuCisgICAgICAgICAgICBtX3Jlc2V0UGlw
ZWxpbmUgPSB0cnVlOwogCi0gICAgICAgIGludCBwZXJjZW50YWdlOwotICAgICAgICBnc3RfcXVl
cnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQocXVlcnkuZ2V0KCksIG51bGxwdHIsICZwZXJjZW50
YWdlKTsKLSAgICAgICAgZmlsbFN0YXR1cyA9IHBlcmNlbnRhZ2U7Ci0gICAgfSBlbHNlIGlmICht
X2h0dHBSZXNwb25zZVRvdGFsU2l6ZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJbQnVmZmVyaW5nXSBRdWVyeSBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBuZXR3b3Jr
IHJlYWQgcG9zaXRpb24gZXN0aW1hdGlvbiIpOwotICAgICAgICBmaWxsU3RhdHVzID0gMTAwLjAg
KiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX25ldHdvcmtSZWFkUG9zaXRpb24pIC8gc3RhdGljX2Nh
c3Q8ZG91YmxlPihtX2h0dHBSZXNwb25zZVRvdGFsU2l6ZSkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIFVuYWJsZSB0byBk
ZXRlcm1pbmUgb24tZGlzayBidWZmZXJpbmcgc3RhdHVzIik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIEdzdFN0YXRlIHN0YXRlOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0
YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7CisgICAgICAgICAgICBp
ZiAoc3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZKSB7CisgICAgICAgICAgICAgICAgLy8gU2V0IHRo
ZSBuZXcgdXJpIGFuZCBzdGFydCBwbGF5aW5nLgorICAgICAgICAgICAgICAgIHNldFBsYXliaW5V
UkwobmV3VXJsKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFU
RV9QTEFZSU5HKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
Ik5vdCBhbGxvd2VkIHRvIGxvYWQgbmV3IG1lZGlhIGxvY2F0aW9uOiAlcyIsIG5ld1VybC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisgICAgbV9tZWRpYUxvY2F0aW9uQ3VycmVudElu
ZGV4LS07CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6ZGlkRW5kKCkKK3sKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlBs
YXliYWNrIGVuZGVkIik7CisKKyAgICAvLyBTeW5jaHJvbml6ZSBwb3NpdGlvbiBhbmQgZHVyYXRp
b24gdmFsdWVzIHRvIG5vdCBjb25mdXNlIHRoZQorICAgIC8vIEhUTUxNZWRpYUVsZW1lbnQuIElu
IHNvbWUgY2FzZXMgbGlrZSByZXZlcnNlIHBsYXliYWNrIHRoZQorICAgIC8vIHBvc2l0aW9uIGlz
IG5vdCBhbHdheXMgcmVwb3J0ZWQgYXMgMCBmb3IgaW5zdGFuY2UuCisgICAgbV9jYWNoZWRQb3Np
dGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICBNZWRpYVRpbWUgbm93ID0gY3Vy
cmVudE1lZGlhVGltZSgpOworICAgIGlmIChub3cgPiBNZWRpYVRpbWU6Onplcm9UaW1lKCkgJiYg
IW1fc2Vla2luZykgeworICAgICAgICBtX2NhY2hlZER1cmF0aW9uID0gbm93OworICAgICAgICBt
X3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgfQogCi0gICAgdXBkYXRlQnVmZmVyaW5n
U3RhdHVzKG1vZGUsIGZpbGxTdGF0dXMpOworICAgIG1faXNFbmRSZWFjaGVkID0gdHJ1ZTsKKwor
ICAgIGlmICghbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVySXNMb29waW5nKCkpIHsKKyAg
ICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9T
VEFURV9SRUFEWSk7CisgICAgICAgIG1fZG93bmxvYWRGaW5pc2hlZCA9IGZhbHNlOworICAgIH0K
KyAgICB0aW1lQ2hhbmdlZCgpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjptYXhNZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0Cit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQogewotICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxp
bmUoKSwgImVycm9yT2NjdXJlZDogJXMsIGlzTGl2ZVN0cmVhbTogJXMiLCBib29sRm9yUHJpbnRp
bmcobV9lcnJvck9jY3VyZWQpLCBib29sRm9yUHJpbnRpbmcoaXNMaXZlU3RyZWFtKCkpKTsKLSAg
ICBpZiAobV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1l
KCk7Ci0KLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6
Onplcm9UaW1lKCk7Ci0KLSAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBkdXJhdGlvbk1lZGlhVGlt
ZSgpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIm1heE1lZGlhVGltZVNlZWth
YmxlLCBkdXJhdGlvbjogJXMiLCB0b1N0cmluZyhkdXJhdGlvbikudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVhbnMgbGl2ZSBzdHJlYW0KLSAgICBpZiAoZHVyYXRp
b24uaXNQb3NpdGl2ZUluZmluaXRlKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9U
aW1lKCk7Ci0KLSAgICByZXR1cm4gZHVyYXRpb247CisgICAgYXV0byYgZ3N0UmVnaXN0cnlTY2Fu
bmVyID0gR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyOjpzaW5nbGV0b24oKTsKKyAgICB0eXBlcyA9
IGdzdFJlZ2lzdHJ5U2Nhbm5lci5taW1lVHlwZVNldCgpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKK01lZGlhUGxheWVy
OjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c1R5cGUo
Y29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBp
ZiAobV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7
CisgICAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSByZXN1bHQgPSBNZWRpYVBsYXllcjo6SXNO
b3RTdXBwb3J0ZWQ7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICAvLyBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UgaXMgaW4gY2hhcmdlIG9mIG1lZGlhc291cmNlIHBsYXliYWNr
LCBub3QgdXMuCisgICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVNvdXJjZSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbmRpZgogCi0gICAgTWVkaWFUaW1lIGxvYWRlZCA9IG1fbWF4VGltZUxv
YWRlZDsKLSAgICBpZiAobV9pc0VuZFJlYWNoZWQpCi0gICAgICAgIGxvYWRlZCA9IGR1cmF0aW9u
TWVkaWFUaW1lKCk7Ci0gICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIm1heFRpbWVMb2Fk
ZWQ6ICVzIiwgdG9TdHJpbmcobG9hZGVkKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gbG9h
ZGVkOwotfQorI2lmICFFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIGlmIChwYXJhbWV0ZXJzLmlz
TWVkaWFTdHJlYW0pCisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKIAotYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fZXJyb3JPY2N1cmVkIHx8IG1fbG9hZGluZ1N0YWxsZWQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAocGFyYW1ldGVycy50eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKIAotICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkp
IHsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIkxhc3QgbmV0d29yayByZWFk
IHBvc2l0aW9uOiAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGN1cnJlbnQ6ICUiIEdfR1VJTlQ2NF9G
T1JNQVQsIG1fcmVhZFBvc2l0aW9uQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzLCBtX25ldHdvcmtS
ZWFkUG9zaXRpb24pOwotICAgICAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcyA9IG1fcmVhZFBv
c2l0aW9uQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzIDwgbV9uZXR3b3JrUmVhZFBvc2l0aW9uOwot
ICAgICAgICBtX3JlYWRQb3NpdGlvbkF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyA9IG1fbmV0d29y
a1JlYWRQb3NpdGlvbjsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgImRpZExv
YWRpbmdQcm9ncmVzczogJXMiLCBib29sRm9yUHJpbnRpbmcoZGlkTG9hZGluZ1Byb2dyZXNzKSk7
Ci0gICAgICAgIHJldHVybiBkaWRMb2FkaW5nUHJvZ3Jlc3M7CisgICAgR1NUX0RFQlVHKCJDaGVj
a2luZyBtaW1lLXR5cGUgXCIlc1wiIiwgcGFyYW1ldGVycy50eXBlLnJhdygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGF1dG8gY29udGFpbmVyVHlwZSA9IHBhcmFtZXRlcnMudHlwZS5jb250YWluZXJU
eXBlKCk7CisgICAgYXV0byYgZ3N0UmVnaXN0cnlTY2FubmVyID0gR1N0cmVhbWVyUmVnaXN0cnlT
Y2FubmVyOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoZ3N0UmVnaXN0cnlTY2FubmVyLmlzQ29udGFp
bmVyVHlwZVN1cHBvcnRlZChjb250YWluZXJUeXBlKSkgeworICAgICAgICAvLyBTcGVjIHNheXMg
d2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29kZWNzIHN0cmluZyBpcyBl
bXB0eS4KKyAgICAgICAgVmVjdG9yPFN0cmluZz4gY29kZWNzID0gcGFyYW1ldGVycy50eXBlLmNv
ZGVjcygpOworICAgICAgICByZXN1bHQgPSBjb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6
Ok1heUJlU3VwcG9ydGVkIDogKGdzdFJlZ2lzdHJ5U2Nhbm5lci5hcmVBbGxDb2RlY3NTdXBwb3J0
ZWQoY29kZWNzKSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc05v
dFN1cHBvcnRlZCk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8ICFk
dXJhdGlvbk1lZGlhVGltZSgpIHx8ICghaXNNZWRpYVNvdXJjZSgpICYmICF0b3RhbEJ5dGVzKCkp
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTWVkaWFUaW1lIGN1cnJlbnRNYXhUaW1l
TG9hZGVkID0gbWF4VGltZUxvYWRlZCgpOwotICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzID0g
Y3VycmVudE1heFRpbWVMb2FkZWQgIT0gbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1By
b2dyZXNzOwotICAgIG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyA9IGN1
cnJlbnRNYXhUaW1lTG9hZGVkOwotICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJkaWRM
b2FkaW5nUHJvZ3Jlc3M6ICVzIiwgYm9vbEZvclByaW50aW5nKGRpZExvYWRpbmdQcm9ncmVzcykp
OwotICAgIHJldHVybiBkaWRMb2FkaW5nUHJvZ3Jlc3M7CisgICAgYXV0byBmaW5hbFJlc3VsdCA9
IGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgR1NUX0RFQlVH
KCJTdXBwb3J0ZWQ6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZmluYWxSZXN1bHQp
LnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBmaW5hbFJlc3VsdDsKIH0KIAotdW5zaWduZWQg
bG9uZyBsb25nIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcygpIGNvbnN0
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlRG93bmxvYWRCdWZmZXJp
bmdGbGFnKCkKIHsKLSAgICBpZiAobV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiAwOwor
ICAgIGlmICghbV9waXBlbGluZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fdG90YWxC
eXRlcykKLSAgICAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKKyAgICB1bnNpZ25lZCBmbGFnczsK
KyAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwgJmZsYWdzLCBudWxs
cHRyKTsKIAotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVybiAwOworICAgIHVuc2ln
bmVkIGZsYWdEb3dubG9hZCA9IGdldEdzdFBsYXlGbGFnKCJkb3dubG9hZCIpOwogCi0gICAgaWYg
KGlzTGl2ZVN0cmVhbSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBXZSBkb24ndCB3YW50
IHRvIHN0b3AgZG93bmxvYWRpbmcgaWYgd2UgYWxyZWFkeSBzdGFydGVkIGl0LgorICAgIGlmIChm
bGFncyAmIGZsYWdEb3dubG9hZCAmJiBtX3JlYWR5U3RhdGUgPiBNZWRpYVBsYXllcjo6SGF2ZU5v
dGhpbmcgJiYgIW1fcmVzZXRQaXBlbGluZSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBp
cGVsaW5lKCksICJEb3dubG9hZCBhbHJlYWR5IHN0YXJ0ZWQsIG5vdCBzdGFydGluZyBhZ2FpbiIp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgR3N0Rm9ybWF0IGZtdCA9IEdTVF9GT1JN
QVRfQllURVM7Ci0gICAgZ2ludDY0IGxlbmd0aCA9IDA7Ci0gICAgaWYgKGdzdF9lbGVtZW50X3F1
ZXJ5X2R1cmF0aW9uKG1fc291cmNlLmdldCgpLCBmbXQsICZsZW5ndGgpKSB7Ci0gICAgICAgIEdT
VF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9GT1JNQVQs
IGxlbmd0aCk7Ci0gICAgICAgIG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4obGVuZ3RoKTsKLSAgICAgICAgbV9pc1N0cmVhbWluZyA9ICFsZW5ndGg7Ci0gICAg
ICAgIHJldHVybiBtX3RvdGFsQnl0ZXM7CisgICAgYm9vbCBzaG91bGREb3dubG9hZCA9ICFpc0xp
dmVTdHJlYW0oKSAmJiBtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6OkF1dG87CisgICAgaWYgKHNo
b3VsZERvd25sb2FkKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiRW5h
Ymxpbmcgb24tZGlzayBidWZmZXJpbmciKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxp
bmUuZ2V0KCksICJmbGFncyIsIGZsYWdzIHwgZmxhZ0Rvd25sb2FkLCBudWxscHRyKTsKKyAgICAg
ICAgbV9maWxsVGltZXIuc3RhcnRSZXBlYXRpbmcoMjAwX21zKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkRpc2FibGluZyBvbi1kaXNrIGJ1ZmZl
cmluZyIpOworICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwg
ZmxhZ3MgJiB+ZmxhZ0Rvd25sb2FkLCBudWxscHRyKTsKKyAgICAgICAgbV9maWxsVGltZXIuc3Rv
cCgpOwogICAgIH0KK30KIAotICAgIC8vIEZhbGwgYmFjayB0byBxdWVyeWluZyB0aGUgc291cmNl
IHBhZHMgbWFudWFsbHkuCi0gICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5v
cmcvc2hvd19idWcuY2dpP2lkPTYzODc0OQotICAgIEdzdEl0ZXJhdG9yKiBpdGVyID0gZ3N0X2Vs
ZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyhtX3NvdXJjZS5nZXQoKSk7Ci0gICAgYm9vbCBkb25lID0g
ZmFsc2U7Ci0gICAgd2hpbGUgKCFkb25lKSB7Ci0gICAgICAgIEdWYWx1ZSBpdGVtID0gR19WQUxV
RV9JTklUOwotICAgICAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0KGl0ZXIsICZpdGVtKSkg
ewotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzogewotICAgICAgICAgICAgR3N0UGFkKiBw
YWQgPSBzdGF0aWNfY2FzdDxHc3RQYWQqPihnX3ZhbHVlX2dldF9vYmplY3QoJml0ZW0pKTsKLSAg
ICAgICAgICAgIGdpbnQ2NCBwYWRMZW5ndGggPSAwOwotICAgICAgICAgICAgaWYgKGdzdF9wYWRf
cXVlcnlfZHVyYXRpb24ocGFkLCBmbXQsICZwYWRMZW5ndGgpICYmIHBhZExlbmd0aCA+IGxlbmd0
aCkKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBwYWRMZW5ndGg7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0gICAgICAg
ICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgotICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0g
ICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbihjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBw
aXBlbGluZU5hbWUpCit7CisgICAgY29uc3QgZ2NoYXIqIHBsYXliaW5OYW1lID0gInBsYXliaW4i
OwogCi0gICAgICAgIGdfdmFsdWVfdW5zZXQoJml0ZW0pOwotICAgIH0KKyAgICAvLyBNU0UgZG9l
c24ndCBzdXBwb3J0IHBsYXliaW4zLiBNZWRpYXN0cmVhbSByZXF1aXJlcyBwbGF5YmluMy4gUmVn
dWxhcgorICAgIC8vIHBsYXliYWNrIGNhbiB1c2UgcGxheWJpbjMgb24tZGVtYW5kIHdpdGggdGhl
IFdFQktJVF9HU1RfVVNFX1BMQVlCSU4zCisgICAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGUuCisg
ICAgaWYgKCghaXNNZWRpYVNvdXJjZSgpICYmIGdfZ2V0ZW52KCJXRUJLSVRfR1NUX1VTRV9QTEFZ
QklOMyIpKSB8fCB1cmwucHJvdG9jb2xJcygibWVkaWFzdHJlYW0iKSkKKyAgICAgICAgcGxheWJp
bk5hbWUgPSAicGxheWJpbjMiOwogCi0gICAgZ3N0X2l0ZXJhdG9yX2ZyZWUoaXRlcik7CisgICAg
aWYgKG1fcGlwZWxpbmUpIHsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoR1NUX09CSkVDVF9OQU1F
KGdzdF9lbGVtZW50X2dldF9mYWN0b3J5KG1fcGlwZWxpbmUuZ2V0KCkpKSwgcGxheWJpbk5hbWUp
KSB7CisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkFscmVhZHkgdXNp
bmcgJXMiLCBwbGF5YmluTmFtZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAot
ICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9G
T1JNQVQsIGxlbmd0aCk7Ci0gICAgbV90b3RhbEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihsZW5ndGgpOwotICAgIG1faXNTdHJlYW1pbmcgPSAhbGVuZ3RoOwotICAgIHJl
dHVybiBtX3RvdGFsQnl0ZXM7Ci19CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgp
LCAiVGVhcmluZyBkb3duIGFzIHdlIG5lZWQgdG8gdXNlICVzIG5vdy4iLCBwbGF5YmluTmFtZSk7
CisgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX05VTEwpOworICAgICAgICBt
X3BpcGVsaW5lID0gbnVsbHB0cjsKKyAgICB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzb3VyY2VTZXR1cENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciog
cGxheWVyLCBHc3RFbGVtZW50KiBzb3VyY2VFbGVtZW50KQotewotICAgIHBsYXllci0+c291cmNl
U2V0dXAoc291cmNlRWxlbWVudCk7Ci19CisgICAgQVNTRVJUKCFtX3BpcGVsaW5lKTsKIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENh
bGxiYWNrKEdzdEJpbiogYmluLCBHc3RFbGVtZW50KiBlbGVtZW50LCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIqIHBsYXllcikKLXsKLSAgICBpZiAoZ19zdHJjbXAwKEdfT0JKRUNUX1RZUEVf
TkFNRShlbGVtZW50KSwgIkdzdERvd25sb2FkQnVmZmVyIikpCi0gICAgICAgIHJldHVybjsKKyAg
ICBtX2lzTGVnYWN5UGxheWJpbiA9ICFnX3N0cmNtcDAocGxheWJpbk5hbWUsICJwbGF5YmluIik7
CiAKLSAgICBwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIgPSBlbGVtZW50OwotICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhiaW4sIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50
ZXI+KHVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNrKSwgcGxheWVyKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0X3N3YXBwZWQoZWxlbWVudCwgIm5vdGlmeTo6dGVtcC1sb2NhdGlvbiIsIEdf
Q0FMTEJBQ0soZG93bmxvYWRCdWZmZXJGaWxlQ3JlYXRlZENhbGxiYWNrKSwgcGxheWVyKTsKKyAg
ICAvLyBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSByZXR1cm5zIGEgZmxvYXRpbmcgcmVmZXJl
bmNlIHNvCisgICAgLy8gd2Ugc2hvdWxkIG5vdCBhZG9wdC4KKyAgICBzdGF0aWMgQXRvbWljPHVp
bnQzMl90PiBwaXBlbGluZUlkOworICAgIHNldFBpcGVsaW5lKGdzdF9lbGVtZW50X2ZhY3Rvcnlf
bWFrZShwbGF5YmluTmFtZSwKKyAgICAgICAgKHBpcGVsaW5lTmFtZS5pc0VtcHR5KCkgPyBtYWtl
U3RyaW5nKCJtZWRpYS1wbGF5ZXItIiwgcGlwZWxpbmVJZC5leGNoYW5nZUFkZCgxKSkgOiBwaXBl
bGluZU5hbWUpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KEdT
VF9TVFJFQU1fVk9MVU1FKG1fcGlwZWxpbmUuZ2V0KCkpKTsKIAotICAgIEdVbmlxdWVPdXRQdHI8
Y2hhcj4gb2xkRG93bmxvYWRUZW1wbGF0ZTsKLSAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgInRl
bXAtdGVtcGxhdGUiLCAmb2xkRG93bmxvYWRUZW1wbGF0ZS5vdXRQdHIoKSwgbnVsbHB0cik7Cisg
ICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJVc2luZyBsZWdhY3kgcGxheWJpbiBlbGVt
ZW50OiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2lzTGVnYWN5UGxheWJpbikpOwogCi0gICAgR1Vu
aXF1ZVB0cjxjaGFyPiBuZXdEb3dubG9hZFRlbXBsYXRlKGdfYnVpbGRfZmlsZW5hbWUoR19ESVJf
U0VQQVJBVE9SX1MsICJ2YXIiLCAidG1wIiwgIldlYktpdC1NZWRpYS1YWFhYWFgiLCBudWxscHRy
KSk7Ci0gICAgZ19vYmplY3Rfc2V0KGVsZW1lbnQsICJ0ZW1wLXRlbXBsYXRlIiwgbmV3RG93bmxv
YWRUZW1wbGF0ZS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwbGF5ZXIt
PnBpcGVsaW5lKCksICJSZWNvbmZpZ3VyZWQgZmlsZSBkb3dubG9hZCB0ZW1wbGF0ZSBmcm9tICcl
cycgdG8gJyVzJyIsIG9sZERvd25sb2FkVGVtcGxhdGUuZ2V0KCksIG5ld0Rvd25sb2FkVGVtcGxh
dGUuZ2V0KCkpOworICAgIC8vIExldCBhbHNvIG90aGVyIGxpc3RlbmVycyBzdWJzY3JpYmUgdG8g
KGFwcGxpY2F0aW9uKSBtZXNzYWdlcyBpbiB0aGlzIGJ1cy4KKyAgICBHUmVmUHRyPEdzdEJ1cz4g
YnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVs
aW5lLmdldCgpKSkpOworICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsKGJ1cy5nZXQo
KSwgUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpSdW5Mb29wRGlzcGF0Y2hlcik7CisgICAgZ19zaWdu
YWxfY29ubmVjdChidXMuZ2V0KCksICJtZXNzYWdlIiwgR19DQUxMQkFDSyhidXNNZXNzYWdlQ2Fs
bGJhY2spLCB0aGlzKTsKIAotICAgIHBsYXllci0+cHVyZ2VPbGREb3dubG9hZEZpbGVzKG9sZERv
d25sb2FkVGVtcGxhdGUuZ2V0KCkpOwotfQorICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdl
dCgpLCAibXV0ZSIsIG1fcGxheWVyLT5tdXRlZCgpLCBudWxscHRyKTsKIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmRvd25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKLXsKLSAgICBBU1NFUlQocGxheWVy
LT5tX2Rvd25sb2FkQnVmZmVyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdTVF9CSU5fQ0FTVCht
X3BpcGVsaW5lLmdldCgpKSwgImRlZXAtZWxlbWVudC1hZGRlZCIsIEdfQ0FMTEJBQ0soK1tdKEdz
dEJpbiosIEdzdEJpbiogc3ViQmluLCBHc3RFbGVtZW50KiBlbGVtZW50LCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIqIHBsYXllcikgeworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGJpbk5h
bWUoZ3N0X2VsZW1lbnRfZ2V0X25hbWUoR1NUX0VMRU1FTlRfQ0FTVChzdWJCaW4pKSk7CisgICAg
ICAgIGlmICghZ19zdHJfaGFzX3ByZWZpeChiaW5OYW1lLmdldCgpLCAiZGVjb2RlYmluIikpCisg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2Z1bmMocGxheWVyLT5tX2Rvd25sb2FkQnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGdw
b2ludGVyPihkb3dubG9hZEJ1ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2spLCBwbGF5ZXIpOworICAg
ICAgICBHVW5pcXVlUHRyPGNoYXI+IGVsZW1lbnROYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKGVs
ZW1lbnQpKTsKKyAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgoZWxlbWVudE5hbWUuZ2V0KCks
ICJ2NGwyIikpCisgICAgICAgICAgICBwbGF5ZXItPm1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gPSBH
c3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6VmlkZW80TGludXg7CisgICAgICAgIGVsc2UgaWYgKGdf
c3RyX2hhc19wcmVmaXgoZWxlbWVudE5hbWUuZ2V0KCksICJpbXh2cHVkZWMiKSkKKyAgICAgICAg
ICAgIHBsYXllci0+bV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9IEdzdFZpZGVvRGVjb2RlclBsYXRm
b3JtOjpJbXhWUFU7CiAKLSAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IGRvd25sb2FkRmlsZTsKLSAg
ICBnX29iamVjdF9nZXQocGxheWVyLT5tX2Rvd25sb2FkQnVmZmVyLmdldCgpLCAidGVtcC1sb2Nh
dGlvbiIsICZkb3dubG9hZEZpbGUub3V0UHRyKCksIG51bGxwdHIpOwotICAgIHBsYXllci0+bV9k
b3dubG9hZEJ1ZmZlciA9IG51bGxwdHI7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAg
ICAgICBwbGF5ZXItPnVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpOworI2VuZGlmCisgICAgfSks
IHRoaXMpOwogCi0gICAgaWYgKFVOTElLRUxZKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRvd25s
b2FkRmlsZS5nZXQoKSkpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJDb3VsZG4ndCB1bmxpbmsg
bWVkaWEgdGVtcG9yYXJ5IGZpbGUgJXMgYWZ0ZXIgY3JlYXRpb24iLCBkb3dubG9hZEZpbGUuZ2V0
KCkpOwotICAgICAgICByZXR1cm47CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGlw
ZWxpbmUuZ2V0KCksICJzb3VyY2Utc2V0dXAiLCBHX0NBTExCQUNLKHNvdXJjZVNldHVwQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICBpZiAobV9pc0xlZ2FjeVBsYXliaW4pIHsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJ2aWRlby1jaGFuZ2VkIiwgR19D
QUxMQkFDSyh2aWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWNoYW5nZWQiLCBHX0NBTExC
QUNLKGF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgfQogCi0gICAgR1NUX0RFQlVH
X09CSkVDVChwbGF5ZXItPnBpcGVsaW5lKCksICJVbmxpbmtlZCBtZWRpYSB0ZW1wb3JhcnkgZmls
ZSAlcyBhZnRlciBjcmVhdGlvbiIsIGRvd25sb2FkRmlsZS5nZXQoKSk7Ci19CisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJ0ZXh0LWNoYW5nZWQiLCBHX0NB
TExCQUNLKHRleHRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnB1cmdlT2xkRG93bmxvYWRGaWxlcyhjb25zdCBjaGFyKiBkb3dubG9h
ZEZpbGVUZW1wbGF0ZSkKLXsKLSAgICBpZiAoIWRvd25sb2FkRmlsZVRlbXBsYXRlKQotICAgICAg
ICByZXR1cm47CisgICAgR3N0RWxlbWVudCogdGV4dENvbWJpbmVyID0gd2Via2l0VGV4dENvbWJp
bmVyTmV3KCk7CisgICAgQVNTRVJUKHRleHRDb21iaW5lcik7CisgICAgZ19vYmplY3Rfc2V0KG1f
cGlwZWxpbmUuZ2V0KCksICJ0ZXh0LXN0cmVhbS1jb21iaW5lciIsIHRleHRDb21iaW5lciwgbnVs
bHB0cik7CiAKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHRlbXBsYXRlUGF0aChnX3BhdGhfZ2V0X2Rp
cm5hbWUoZG93bmxvYWRGaWxlVGVtcGxhdGUpKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHRlbXBs
YXRlRmlsZShnX3BhdGhfZ2V0X2Jhc2VuYW1lKGRvd25sb2FkRmlsZVRlbXBsYXRlKSk7Ci0gICAg
U3RyaW5nIHRlbXBsYXRlUGF0dGVybiA9IFN0cmluZyh0ZW1wbGF0ZUZpbGUuZ2V0KCkpLnJlcGxh
Y2UoIlgiLCAiPyIpOworICAgIG1fdGV4dEFwcFNpbmsgPSB3ZWJraXRUZXh0U2lua05ldygpOwor
ICAgIEFTU0VSVChtX3RleHRBcHBTaW5rKTsKIAotICAgIGZvciAoYXV0byYgZmlsZVBhdGggOiBG
aWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHRlbXBsYXRlUGF0aC5nZXQoKSwgdGVtcGxhdGVQYXR0
ZXJuKSkgewotICAgICAgICBpZiAoVU5MSUtFTFkoIUZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZmls
ZVBhdGgpKSkgewotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNvdWxkbid0IHVubGluayBsZWdh
Y3kgbWVkaWEgdGVtcG9yYXJ5IGZpbGU6ICVzIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorICAgIG1fdGV4dEFwcFNpbmtQYWQgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV90ZXh0QXBwU2luay5nZXQoKSwg
InNpbmsiKSk7CisgICAgQVNTRVJUKG1fdGV4dEFwcFNpbmtQYWQpOwogCi0gICAgICAgIEdTVF9U
UkFDRSgiVW5saW5rZWQgbGVnYWN5IG1lZGlhIHRlbXBvcmFyeSBmaWxlOiAlcyIsIGZpbGVQYXRo
LnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLX0KKyAgICBHUmVmUHRyPEdzdENhcHM+IHRleHRDYXBz
OworICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTQsIDApKQorICAgICAgICB0ZXh0
Q2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJhcHBsaWNhdGlvbi94
LXN1YnRpdGxlLXZ0dCIpKTsKKyAgICBlbHNlCisgICAgICAgIHRleHRDYXBzID0gYWRvcHRHUmVm
KGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInRleHQvdnR0IikpOworICAgIGdfb2JqZWN0X3Nl
dChtX3RleHRBcHBTaW5rLmdldCgpLCAiZW1pdC1zaWduYWxzIiwgVFJVRSwgImVuYWJsZS1sYXN0
LXNhbXBsZSIsIEZBTFNFLCAiY2FwcyIsIHRleHRDYXBzLmdldCgpLCBudWxscHRyKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV90ZXh0QXBwU2luay5nZXQoKSwgIm5ldy1zYW1wbGUi
LCBHX0NBTExCQUNLKG5ld1RleHRTYW1wbGVDYWxsYmFjayksIHRoaXMpOworCisgICAgZ19vYmpl
Y3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ0ZXh0LXNpbmsiLCBtX3RleHRBcHBTaW5rLmdldCgp
LCBudWxscHRyKTsKKyNlbmRpZgogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c291cmNlU2V0dXAoR3N0RWxlbWVudCogc291cmNlRWxlbWVudCkKLXsKLSAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJTb3VyY2UgZWxlbWVudCBzZXQtdXAgZm9yICVzIiwgR1NUX0VM
RU1FTlRfTkFNRShzb3VyY2VFbGVtZW50KSk7CisgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUu
Z2V0KCksICJ2aWRlby1zaW5rIiwgY3JlYXRlVmlkZW9TaW5rKCksICJhdWRpby1zaW5rIiwgY3Jl
YXRlQXVkaW9TaW5rKCksIG51bGxwdHIpOwogCi0gICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1f
c291cmNlLmdldCgpKSAmJiBHU1RfT0JKRUNUX1BBUkVOVChtX3NvdXJjZS5nZXQoKSkpCi0gICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHU1RfRUxFTUVOVF9QQVJF
TlQobV9zb3VyY2UuZ2V0KCkpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih1cmlEZWNvZGVC
aW5FbGVtZW50QWRkZWRDYWxsYmFjayksIHRoaXMpOworICAgIGNvbmZpZ3VyZVBsYXlTaW5rKCk7
CiAKLSAgICBtX3NvdXJjZSA9IHNvdXJjZUVsZW1lbnQ7CisgICAgaWYgKG1fcHJlc2VydmVzUGl0
Y2gpIHsKKyAgICAgICAgR3N0RWxlbWVudCogc2NhbGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoInNjYWxldGVtcG8iLCBudWxscHRyKTsKIAotICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyht
X3NvdXJjZS5nZXQoKSkpIHsKLSAgICAgICAgd2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIoV0VC
S0lUX1dFQl9TUkNfQ0FTVChtX3NvdXJjZS5nZXQoKSksIG1fcGxheWVyKTsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChHU1RfRUxFTUVOVF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkpLCAiZWxlbWVu
dC1hZGRlZCIsIEdfQ0FMTEJBQ0sodXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2spLCB0
aGlzKTsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIH0gZWxzZSBpZiAoV0VCS0lUX0lT
X01FRElBX1NUUkVBTV9TUkMoc291cmNlRWxlbWVudCkpIHsKLSAgICAgICAgYXV0byBzdHJlYW0g
PSBtX3N0cmVhbVByaXZhdGUuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChzdHJlYW0pOwotICAgICAg
ICB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldFN0cmVhbShXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhz
b3VyY2VFbGVtZW50KSwgc3RyZWFtKTsKLSNlbmRpZgorICAgICAgICBpZiAoIXNjYWxlKQorICAg
ICAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBjcmVhdGUgc2NhbGV0ZW1wbyIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImF1
ZGlvLWZpbHRlciIsIHNjYWxlLCBudWxscHRyKTsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVuZGVy
aW5nQ2FuQmVBY2NlbGVyYXRlZCkgeworICAgICAgICAvLyBJZiBub3QgdXNpbmcgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcsIGxldCBHU3RyZWFtZXIgaGFuZGxlCisgICAgICAgIC8vIHRoZSBpbWFn
ZS1vcmllbnRhdGlvbiB0YWcuCisgICAgICAgIEdzdEVsZW1lbnQqIHZpZGVvRmxpcCA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9mbGlwIiwgbnVsbHB0cik7CisgICAgICAgIGlmICh2
aWRlb0ZsaXApIHsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldCh2aWRlb0ZsaXAsICJtZXRob2Qi
LCA4LCBudWxscHRyKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgp
LCAidmlkZW8tZmlsdGVyIiwgdmlkZW9GbGlwLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBHU1RfV0FSTklORygiVGhlIHZpZGVvZmxpcCBlbGVtZW50IGlzIG1pc3Npbmcs
IHZpZGVvIHJvdGF0aW9uIHN1cHBvcnQgaXMgbm93IGRpc2FibGVkLiBQbGVhc2UgY2hlY2sgeW91
ciBnc3QtcGx1Z2lucy1nb29kIGluc3RhbGxhdGlvbi4iKTsKICAgICB9CisKKyAgICBHUmVmUHRy
PEdzdFBhZD4gdmlkZW9TaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKG1fdmlkZW9TaW5rLmdldCgpLCAic2luayIpKTsKKyAgICBpZiAodmlkZW9TaW5rUGFkKQor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQodmlkZW9TaW5rUGFkLmdldCgpLCAibm90
aWZ5OjpjYXBzIiwgR19DQUxMQkFDSyh2aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYXNTaW5nbGVTZWN1
cml0eU9yaWdpbigpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlk
UGFzc0NPUlNBY2Nlc3NDaGVjaygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkKKyAgICBp
ZiAoV0VCS0lUX0lTX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpKQorICAgICAgICByZXR1cm4gd2Vi
S2l0U3JjUGFzc2VkQ09SU0FjY2Vzc0NoZWNrKFdFQktJVF9XRUJfU1JDX0NBU1QobV9zb3VyY2Uu
Z2V0KCkpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpjYW5TYXZlTWVkaWFEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoaXNMaXZlU3Ry
ZWFtKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghV0VCS0lUX0lTX1dFQl9T
UkMobV9zb3VyY2UuZ2V0KCkpKQorICAgIGlmIChtX3VybC5pc0xvY2FsRmlsZSgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gb3JpZ2luYWxVUkksIHJl
c29sdmVkVVJJOwotICAgIGdfb2JqZWN0X2dldChtX3NvdXJjZS5nZXQoKSwgImxvY2F0aW9uIiwg
Jm9yaWdpbmFsVVJJLm91dFB0cigpLCAicmVzb2x2ZWQtbG9jYXRpb24iLCAmcmVzb2x2ZWRVUkku
b3V0UHRyKCksIG51bGxwdHIpOwotICAgIGlmICghb3JpZ2luYWxVUkkgfHwgIXJlc29sdmVkVVJJ
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFnX3N0cmNtcDAob3JpZ2luYWxVUkku
Z2V0KCksIHJlc29sdmVkVVJJLmdldCgpKSkKKyAgICBpZiAobV91cmwucHJvdG9jb2xJc0luSFRU
UEZhbWlseSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlZjxTZWN1cml0eU9yaWdp
bj4gcmVzb2x2ZWRPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoU3RyaW5n
Ojpmcm9tVVRGOChyZXNvbHZlZFVSSS5nZXQoKSkpKTsKLSAgICBSZWY8U2VjdXJpdHlPcmlnaW4+
IHJlcXVlc3RlZE9yaWdpbihTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhTdHJpbmc6
OmZyb21VVEY4KG9yaWdpbmFsVVJJLmdldCgpKSkpOwotICAgIHJldHVybiByZXNvbHZlZE9yaWdp
bi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQocmVxdWVzdGVkT3JpZ2luLmdldCgpKTsKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5jZWxM
b2FkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVRpbWVyRmlyZWQo
KQogewotICAgIGlmIChtX25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpMb2FkaW5nIHx8IG1f
bmV0d29ya1N0YXRlID09IE1lZGlhUGxheWVyOjpMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX3BpcGVsaW5lKQotICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFU
RV9SRUFEWSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiSW4gUkVBRFkgZm9y
IHRvbyBsb25nLiBSZWxlYXNpbmcgcGlwZWxpbmUgcmVzb3VyY2VzLiIpOworICAgIGNoYW5nZVBp
cGVsaW5lU3RhdGUoR1NUX1NUQVRFX05VTEwpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6YXN5bmNTdGF0ZUNoYW5nZURvbmUoKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkKIHsKLSAgICBp
ZiAoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybjsKKyAgICBt
X3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQgPSBtX3BsYXllciAmJiBtX3BsYXllci0+Y2xpZW50
KCkubWVkaWFQbGF5ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpOworfQogCi0gICAg
aWYgKG1fc2Vla2luZykgewotICAgICAgICBpZiAobV9zZWVrSXNQZW5kaW5nKQotICAgICAgICAg
ICAgdXBkYXRlU3RhdGVzKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIHNlZWtlZCB0byAlcyIsIHRvU3RyaW5nKG1fc2Vl
a1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7Ci0g
ICAgICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwot
ICAgICAgICAgICAgaWYgKG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrICE9IG1fc2Vla1RpbWUgJiYg
bV90aW1lT2ZPdmVybGFwcGluZ1NlZWsuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgc2Vl
ayhtX3RpbWVPZk92ZXJsYXBwaW5nU2Vlayk7Ci0gICAgICAgICAgICAgICAgbV90aW1lT2ZPdmVy
bGFwcGluZ1NlZWsgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV90aW1lT2ZPdmVybGFwcGluZ1Nl
ZWsgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQorUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5
ZXIucHRyKCk7CisjZWxzZQorICAgIHJldHVybiBjb25zdF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcio+KHRoaXMpOworI2VuZGlmCit9CiAKLSAgICAgICAgICAgIC8vIFRoZSBwaXBl
bGluZSBjYW4gc3RpbGwgaGF2ZSBhIHBlbmRpbmcgc3RhdGUuIEluIHRoaXMgY2FzZSBhIHBvc2l0
aW9uIHF1ZXJ5IHdpbGwgZmFpbC4KLSAgICAgICAgICAgIC8vIFJpZ2h0IG5vdyB3ZSBjYW4gdXNl
IG1fc2Vla1RpbWUgYXMgYSBmYWxsYmFjay4KLSAgICAgICAgICAgIG1fY2FuRmFsbEJhY2tUb0xh
c3RGaW5pc2hlZFNlZWtQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICB0aW1lQ2hhbmdlZCgp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHVwZGF0ZVN0YXRlcygpOworI2lmIFVT
RShOSUNPU0lBKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN3YXBCdWZmZXJz
SWZOZWVkZWQoKQoreworI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQorICAgIHB1c2hOZXh0
SG9sZVB1bmNoQnVmZmVyKCk7CisjZW5kaWYKK30KKyNlbHNlCitSZWZQdHI8VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eT4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm94eSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiB7Ci0g
ICAgaWYgKCFtX3BpcGVsaW5lKQotICAgICAgICByZXR1cm47CisjaWYgVVNFKEdTVFJFQU1FUl9I
T0xFUFVOQ0gpCisgICAgcHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsKKyNlbmRpZgorfQorI2Vu
ZGlmCiAKLSAgICBpZiAobV9lcnJvck9jY3VyZWQpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cHVzaFRleHR1cmVUb0NvbXBvc2l0b3IoKQoreworICAgIGF1dG8gc2FtcGxlTG9j
a2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7CisgICAgaWYgKCFHU1RfSVNfU0FNUExFKG1f
c2FtcGxlLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTWVkaWFQbGF5ZXI6Ok5ldHdv
cmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKLSAgICBNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOwotICAgIEdzdFN0YXRl
IHBlbmRpbmc7Ci0gICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgYm9vbCBzdGF0ZVJlYWxseUNoYW5n
ZWQgPSBmYWxzZTsKLQotICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0g
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJnBlbmRpbmcs
IDI1MCAqIEdTVF9OU0VDT05EKTsKLSAgICBpZiAoc3RhdGUgIT0gbV9jdXJyZW50U3RhdGUpIHsK
LSAgICAgICAgbV9vbGRTdGF0ZSA9IG1fY3VycmVudFN0YXRlOwotICAgICAgICBtX2N1cnJlbnRT
dGF0ZSA9IHN0YXRlOwotICAgICAgICBzdGF0ZVJlYWxseUNoYW5nZWQgPSB0cnVlOwotICAgIH0K
LQotICAgIGJvb2wgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IGZhbHNlOwotICAgIHN3aXRj
aCAoZ2V0U3RhdGVSZXN1bHQpIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzog
ewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTdGF0ZTogJXMsIHBlbmRp
bmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7Ci0KLSAgICAgICAgLy8gRG8gbm90aGlu
ZyBpZiBvbiBFT1MgYW5kIHN0YXRlIGNoYW5nZWQgdG8gUkVBRFkgdG8gYXZvaWQgcmVjcmVhdGlu
ZyB0aGUgcGxheWVyCi0gICAgICAgIC8vIG9uIEhUTUxNZWRpYUVsZW1lbnQgYW5kIHByb3Blcmx5
IGdlbmVyYXRlIHRoZSB2aWRlbyAnZW5kZWQnIGV2ZW50LgotICAgICAgICBpZiAobV9pc0VuZFJl
YWNoZWQgJiYgbV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQotICAgICAgICAgICAg
YnJlYWs7CisgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9CisgICAgICAgIFt0aGlzXShUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgeworICAgICAgICAgICAg
TG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKIAotICAgICAgICBtX3Jlc2V0UGlwZWxp
bmUgPSBtX2N1cnJlbnRTdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFk7CisgICAgICAgICAgICBpZiAo
IXByb3h5LmlzQWN0aXZlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGJv
b2wgZGlkQnVmZmVyaW5nID0gbV9idWZmZXJpbmc7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8R3N0VmlkZW9GcmFtZUhvbGRlcj4gZnJhbWVIb2xkZXIgPSBtYWtlVW5pcXVlPEdzdFZpZGVv
RnJhbWVIb2xkZXI+KG1fc2FtcGxlLmdldCgpLCBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtLCBtX3Rl
eHR1cmVNYXBwZXJGbGFncywgIW1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayk7CiAKLSAgICAgICAg
Ly8gVXBkYXRlIHJlYWR5IGFuZCBuZXR3b3JrIHN0YXRlcy4KLSAgICAgICAgc3dpdGNoIChtX2N1
cnJlbnRTdGF0ZSkgewotICAgICAgICBjYXNlIEdTVF9TVEFURV9OVUxMOgotICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICAgICAgbV9u
ZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RW1wdHk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBHU1RfU1RBVEVfUkVBRFk6Ci0gICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOwotICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6RW1wdHk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1Rf
U1RBVEVfUEFVU0VEOgotICAgICAgICBjYXNlIEdTVF9TVEFURV9QTEFZSU5HOgotICAgICAgICAg
ICAgaWYgKG1fYnVmZmVyaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYnVmZmVyaW5nUGVy
Y2VudGFnZSA9PSAxMDApIHsKLSAgICAgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gQ29tcGxldGUuIik7Ci0gICAgICAgICAgICAgICAgICAg
IG1fYnVmZmVyaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBtX2Rvd25sb2FkRmluaXNoZWQgPyBNZWRpYVBsYXllcjo6SWRsZSA6IE1lZGlh
UGxheWVyOjpMb2FkaW5nOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2Rvd25sb2FkRmluaXNo
ZWQpIHsKLSAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVu
b3VnaERhdGE7Ci0gICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
TG9hZGVkOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlcjsKKyAgICAgICAgICAgIGlmIChmcmFtZUhvbGRlci0+
aGFzTWFwcGVkVGV4dHVyZXMoKSkgeworICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyID0gZnJh
bWVIb2xkZXItPnBsYXRmb3JtTGF5ZXJCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWxh
eWVyQnVmZmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
bGF5ZXJCdWZmZXItPnNldFVubWFuYWdlZEJ1ZmZlckRhdGFIb2xkZXIoV1RGTW92ZShmcmFtZUhv
bGRlcikpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7Ci0gICAgICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3lu
YyBzdGF0ZXMgd2hlcmUgbmVlZGVkLgotICAgICAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NU
X1NUQVRFX1BBVVNFRCkgewotICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFuZE11dGVJbml0aWFs
aXplZCkgewotICAgICAgICAgICAgICAgIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7Ci0g
ICAgICAgICAgICAgICAgbm90aWZ5UGxheWVyT2ZNdXRlKCk7Ci0gICAgICAgICAgICAgICAgbV92
b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoZGlkQnVmZmVyaW5nICYmICFtX2J1ZmZlcmluZyAmJiAhbV9wYXVzZWQgJiYgbV9w
bGF5YmFja1JhdGUpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJbQnVmZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIpOwotICAgICAgICAgICAgICAg
IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7
Ci0gICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoKG1fYnVm
ZmVyaW5nICYmICFpc0xpdmVTdHJlYW0oKSkgfHwgIW1fcGxheWJhY2tSYXRlKSB7Ci0gICAgICAg
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gUGF1c2lu
ZyBzdHJlYW0gZm9yIGJ1ZmZlcmluZy4iKTsKLSAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGlu
ZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyID0g
cHJveHkuZ2V0QXZhaWxhYmxlQnVmZmVyKGZyYW1lSG9sZGVyLT5zaXplKCksIEdMX0RPTlRfQ0FS
RSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFsYXllckJ1ZmZlcikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byB0ZXh0dXJlID0gQml0bWFwVGV4dHVyZUdMOjpjcmVhdGUoVGV4
dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzOjpnZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnJlc2V0KGZyYW1lSG9sZGVyLT5zaXplKCksIGZyYW1lSG9sZGVyLT5oYXNBbHBo
YUNoYW5uZWwoKSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiBCaXRtYXBUZXh0dXJl
OjpOb0ZsYWcpOworICAgICAgICAgICAgICAgICAgICBsYXllckJ1ZmZlciA9IG1ha2VVbmlxdWU8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KFdURk1vdmUodGV4dHVyZSkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcmFtZUhvbGRlci0+dXBkYXRlVGV4dHVy
ZShsYXllckJ1ZmZlci0+dGV4dHVyZUdMKCkpOworICAgICAgICAgICAgICAgIGxheWVyQnVmZmVy
LT5zZXRFeHRyYUZsYWdzKG1fdGV4dHVyZU1hcHBlckZsYWdzIHwgKGZyYW1lSG9sZGVyLT5oYXNB
bHBoYUNoYW5uZWwoKSA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOwot
Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk9sZCBzdGF0ZTogJXMsIG5l
dyBzdGF0ZTogJXMgKHJlcXVlc3RlZDogJXMpIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUo
bV9vbGRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9yZXF1ZXN0ZWRTdGF0ZSkpOwotICAgICAgICBp
ZiAobV9yZXF1ZXN0ZWRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEICYmIG1fY3VycmVudFN0YXRl
ID09IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAgICAgICAgICAgIHNob3VsZFVwZGF0ZVBsYXliYWNr
U3RhdGUgPSB0cnVlOwotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJS
ZXF1ZXN0ZWQgc3RhdGUgY2hhbmdlIHRvICVzIHdhcyBjb21wbGV0ZWQiLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
RW1pdCBwbGF5IHN0YXRlIGNoYW5nZSBub3RpZmljYXRpb24gb25seSB3aGVuIGdvaW5nIHRvIFBM
QVlJTkcgc28gdGhhdAotICAgICAgICAvLyB0aGUgbWVkaWEgZWxlbWVudCBnZXRzIGEgY2hhbmNl
IHRvIGVuYWJsZSBpdHMgcGFnZSBzbGVlcCBkaXNhYmxlci4KLSAgICAgICAgLy8gRW1pdHRpbmcg
dGhpcyBub3RpZmljYXRpb24gaW4gbW9yZSBjYXNlcyB0cmlnZ2VycyB1bndhbnRlZCBjb2RlIHBh
dGhzCi0gICAgICAgIC8vIGFuZCB0ZXN0IHRpbWVvdXRzLgotICAgICAgICBpZiAoc3RhdGVSZWFs
bHlDaGFuZ2VkICYmIChtX29sZFN0YXRlICE9IG1fY3VycmVudFN0YXRlKSAmJiAobV9vbGRTdGF0
ZSA9PSBHU1RfU1RBVEVfUEFVU0VEICYmIG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QTEFZ
SU5HKSkgewotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5YmFj
ayBzdGF0ZSBjaGFuZ2VkIGZyb20gJXMgdG8gJXMuIE5vdGlmeWluZyB0aGUgbWVkaWEgcGxheWVy
IGNsaWVudCIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fb2xkU3RhdGUpLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSkpOwotICAgICAgICAgICAgc2hvdWxk
VXBkYXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgotICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJBc3luYzogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3Rh
dGVfZ2V0X25hbWUocGVuZGluZykpOwotICAgICAgICAvLyBDaGFuZ2UgaW4gcHJvZ3Jlc3MuCi0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgotICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJGYWlsdXJlOiBTdGF0ZTogJXMsIHBlbmRp
bmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7Ci0gICAgICAgIC8vIENoYW5nZSBmYWls
ZWQKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xM
OgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJObyBwcmVyb2xsOiBTdGF0
ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50
U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7Ci0KLSAgICAgICAg
Ly8gTGl2ZSBwaXBlbGluZXMgZ28gaW4gUEFVU0VEIHdpdGhvdXQgcHJlcm9sbGluZy4KLSAgICAg
ICAgbV9pc1N0cmVhbWluZyA9IHRydWU7Ci0gICAgICAgIHVwZGF0ZURvd25sb2FkQnVmZmVyaW5n
RmxhZygpOwotCi0gICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkp
Ci0gICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7Ci0g
ICAgICAgIGVsc2UgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAg
ICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAg
ICAgICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnRT
dGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykKLSAgICAgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7
CisgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVyQnVmZmVyKSk7
CisgICAgICAgIH07CiAKLSAgICAgICAgaWYgKCFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkK
LSAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworI2lm
IFVTRShOSUNPU0lBKQorICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRl
bnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgp
KTsKKyNlbHNlCisgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNl
bmRpZgorfQorI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIAotICAgICAgICBtX25l
dHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJFbHNlIDogJWQi
LCBnZXRTdGF0ZVJlc3VsdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpyZXBhaW50KCkKK3sKKyAgICBBU1NFUlQobV9zYW1wbGUpOwor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBtX3JlcXVlc3RlZFN0YXRlID0gR1NU
X1NUQVRFX1ZPSURfUEVORElORzsKKyAgICBtX3BsYXllci0+cmVwYWludCgpOwogCi0gICAgaWYg
KHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUpCi0gICAgICAgIG1fcGxheWVyLT5wbGF5YmFja1N0
YXRlQ2hhbmdlZCgpOworICAgIExvY2tIb2xkZXIgbG9jayhtX2RyYXdNdXRleCk7CisgICAgbV9k
cmF3Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworfQogCi0gICAgaWYgKG1fbmV0d29ya1N0YXRlICE9
IG9sZE5ldHdvcmtTdGF0ZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJOZXR3b3JrIFN0YXRlIENoYW5nZWQgZnJvbSAlcyB0byAlcyIsIGNvbnZlcnRFbnVtZXJhdGlv
blRvU3RyaW5nKG9sZE5ldHdvcmtTdGF0ZSkudXRmOCgpLmRhdGEoKSwgY29udmVydEVudW1lcmF0
aW9uVG9TdHJpbmcobV9uZXR3b3JrU3RhdGUpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBtX3Bs
YXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSogc2FtcGxlKQoreworICAgIGJvb2wgdHJp
Z2dlclJlc2l6ZTsKKyAgICB7CisgICAgICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2so
bV9zYW1wbGVNdXRleCk7CisgICAgICAgIHRyaWdnZXJSZXNpemUgPSAhbV9zYW1wbGU7CisgICAg
ICAgIG1fc2FtcGxlID0gc2FtcGxlOwogICAgIH0KLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9s
ZFJlYWR5U3RhdGUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUmVh
ZHkgU3RhdGUgQ2hhbmdlZCBmcm9tICVzIHRvICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJp
bmcob2xkUmVhZHlTdGF0ZSkudXRmOCgpLmRhdGEoKSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJp
bmcobV9yZWFkeVN0YXRlKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBpZiAodHJpZ2dlclJlc2l6ZSkgeworICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJGaXJzdCBzYW1wbGUgcmVhY2hlZCB0aGUgc2luaywg
dHJpZ2dlcmluZyB2aWRlbyBkaW1lbnNpb25zIHVwZGF0ZSIpOworICAgICAgICBtX25vdGlmaWVy
LT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6U2l6ZUNoYW5nZWQsIFt0aGlzXSB7Cisg
ICAgICAgICAgICBtX3BsYXllci0+c2l6ZUNoYW5nZWQoKTsKKyAgICAgICAgfSk7CiAgICAgfQog
Ci0gICAgaWYgKGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAmJiBt
X2N1cnJlbnRTdGF0ZSA+PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgIHVwZGF0ZVBsYXli
YWNrUmF0ZSgpOwotICAgICAgICBpZiAobV9zZWVrSXNQZW5kaW5nKSB7Ci0gICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gY29tbWl0dGluZyBwZW5kaW5nIHNl
ZWsgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIG1fc2Vla0lzUGVuZGluZyA9IGZhbHNlOwotICAgICAgICAgICAgbV9zZWVraW5nID0gZG9T
ZWVrKG1fc2Vla1RpbWUsIG1fcGxheWVyLT5yYXRlKCksIHN0YXRpY19jYXN0PEdzdFNlZWtGbGFn
cz4oR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpKTsKLSAgICAg
ICAgICAgIGlmICghbV9zZWVraW5nKSB7Ci0gICAgICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlv
biA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gc2Vla2luZyB0byAlcyBmYWlsZWQiLCB0b1N0cmlu
ZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQor
ICAgIGlmICghbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKSB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fZHJhd011dGV4KTsKKyAgICAgICAgaWYgKG1fZGVzdHJveWluZykKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgbV9kcmF3VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Cisg
ICAgICAgIG1fZHJhd0NvbmRpdGlvbi53YWl0KG1fZHJhd011dGV4KTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KKworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBpZiAobV91c2luZ0Zh
bGxiYWNrVmlkZW9TaW5rKSB7CisgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX2RyYXdNdXRleCk7
CisgICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQorICAgICAgICAgICAgW3RoaXNdKFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBwcm94eS5zY2hlZHVsZVVwZGF0ZU9uQ29tcG9zaXRvclRocmVhZChb
dGhpc10geyB0aGlzLT5wdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpOyB9KTsKKyAgICAgICAgICAg
IH07CisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIGlmICghcHJveHlPcGVyYXRpb24oZG93bmNh
c3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVy
LT5pbXBsKCkpLnByb3h5KCkpKQorICAgICAgICAgICAgcmV0dXJuOworI2Vsc2UKKyAgICAgICAg
aWYgKCFwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpKQorICAgICAgICAgICAg
cmV0dXJuOworI2VuZGlmCisgICAgICAgIG1fZHJhd1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwor
ICAgICAgICBtX2RyYXdDb25kaXRpb24ud2FpdChtX2RyYXdNdXRleCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7CisjZW5kaWYgLy8gVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxl
U3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpyZXBhaW50Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBw
bGF5ZXIsIEdzdFNhbXBsZSogc2FtcGxlKQogewotICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1l
c3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OICYmICFtX2lzTGVnYWN5UGxh
eWJpbikgewotICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247
Ci0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uKG1lc3NhZ2UsICZj
b2xsZWN0aW9uLm91dFB0cigpKTsKKyAgICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZSk7
Cit9CiAKLSAgICAgICAgaWYgKGNvbGxlY3Rpb24pIHsKLSAgICAgICAgICAgIG1fc3RyZWFtQ29s
bGVjdGlvbi5zd2FwKGNvbGxlY3Rpb24pOwotICAgICAgICAgICAgbV9ub3RpZmllci0+bm90aWZ5
KE1haW5UaHJlYWROb3RpZmljYXRpb246OlN0cmVhbUNvbGxlY3Rpb25DaGFuZ2VkLCBbdGhpc10g
ewotICAgICAgICAgICAgICAgIHRoaXMtPnVwZGF0ZVRyYWNrcygpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0KK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5jZWxSZXBh
aW50KGJvb2wgZGVzdHJveWluZykKK3sKKyAgICAvLyBUaGUgZ29hbCBvZiB0aGlzIGZ1bmN0aW9u
IGlzIHRvIHJlbGVhc2UgdGhlIEdTdHJlYW1lciB0aHJlYWQgZnJvbSBtX2RyYXdDb25kaXRpb24g
aW4gdHJpZ2dlclJlcGFpbnQoKSBpbiBub24tQUMgY2FzZSwKKyAgICAvLyB0byBhdm9pZCBhIGRl
YWRsb2NrIGlmIHRoZSBwbGF5ZXIgZ2V0cyBwYXVzZWQgd2hpbGUgd2FpdGluZyBmb3IgZHJhd2lu
ZyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAwMDMpOgor
ICAgIC8vIHRoZSBtYWluIHRocmVhZCBpcyB3YWl0aW5nIGZvciB0aGUgR1N0cmVhbWVyIHRocmVh
ZCB0byBwYXVzZSwgYnV0IHRoZSBHU3RyZWFtZXIgdGhyZWFkIGlzIGxvY2tlZCB3YWl0aW5nIGZv
ciB0aGUKKyAgICAvLyBtYWluIHRocmVhZCB0byBkcmF3LiBUaGlzIGRlYWRsb2NrIGRvZXNuJ3Qg
aGFwcGVuIHdoZW4gdXNpbmcgQUMgYmVjYXVzZSB0aGUgc2FtcGxlIGlzIHByb2Nlc3NlZCAobm90
IHBhaW50ZWQpIGluIHRoZSBjb21wb3NpdG9yCisgICAgLy8gdGhyZWFkLCBzbyB0aGUgbWFpbiB0
aHJlYWQgY2FuIHJlcXVlc3QgdGhlIHBhdXNlIGFuZCB3YWl0IGlmIHRoZSBHU3RyZWFtZXIgdGhy
ZWFkIGlzIHdhaXRpbmcgZm9yIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KKyAgICAvLworICAgIC8v
IFRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIHdoZW4gZGVzdHJveWluZyB0aGUgcGxheWVyIChk
ZXN0cm95aW5nIHBhcmFtZXRlciBpcyB0cnVlKSwgdG8gcmVsZWFzZSB0aGUgZ3N0cmVhbWVyIHRo
cmVhZCBmcm9tCisgICAgLy8gbV9kcmF3Q29uZGl0aW9uIGFuZCB0byBlbnN1cmUgdGhhdCBuZXcg
dHJpZ2dlclJlcGFpbnQgY2FsbHMgd29uJ3Qgd2FpdCBvbiBtX2RyYXdDb25kaXRpb24uCisgICAg
aWYgKCFtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQpIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9kcmF3TXV0ZXgpOworICAgICAgICBtX2RyYXdUaW1lci5zdG9wKCk7CisgICAgICAg
IG1fZGVzdHJveWluZyA9IGRlc3Ryb3lpbmc7CisgICAgICAgIG1fZHJhd0NvbmRpdGlvbi5ub3Rp
ZnlPbmUoKTsKICAgICB9Cit9CiAKLSAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6aGFuZGxlU3luY01lc3NhZ2UobWVzc2FnZSk7Cit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6cmVwYWludENhbmNlbGxlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIHBsYXllci0+Y2FuY2VsUmVwYWludCgpOwogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWVkaWFMb2NhdGlvbkNoYW5nZWQo
R3N0TWVzc2FnZSogbWVzc2FnZSkKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorR3N0Rmxvd1JldHVy
biBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1NhbXBsZUNhbGxiYWNrKEdzdEVsZW1l
bnQqIHNpbmssIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQogewotICAgIGlm
IChtX21lZGlhTG9jYXRpb25zKQotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUobV9tZWRpYUxv
Y2F0aW9ucyk7CisgICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihnc3Rf
YXBwX3NpbmtfcHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5LKHNpbmspKSk7CisgICAgcGxheWVyLT50
cmlnZ2VyUmVwYWludChzYW1wbGUuZ2V0KCkpOworICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30K
IAotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0
cnVjdHVyZShtZXNzYWdlKTsKLSAgICBpZiAoc3RydWN0dXJlKSB7Ci0gICAgICAgIC8vIFRoaXMg
c3RydWN0dXJlIGNhbiBjb250YWluOgotICAgICAgICAvLyAtIGJvdGggYSBuZXctbG9jYXRpb24g
c3RyaW5nIGFuZCBlbWJlZGRlZCBsb2NhdGlvbnMgc3RydWN0dXJlCi0gICAgICAgIC8vIC0gb3Ig
b25seSBhIG5ldy1sb2NhdGlvbiBzdHJpbmcuCi0gICAgICAgIG1fbWVkaWFMb2NhdGlvbnMgPSBn
c3Rfc3RydWN0dXJlX2NvcHkoc3RydWN0dXJlKTsKLSAgICAgICAgY29uc3QgR1ZhbHVlKiBsb2Nh
dGlvbnMgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShtX21lZGlhTG9jYXRpb25zLCAibG9jYXRp
b25zIik7CitHc3RGbG93UmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3UHJl
cm9sbENhbGxiYWNrKEdzdEVsZW1lbnQqIHNpbmssIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ciogcGxheWVyKQoreworICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYo
Z3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1RfQVBQX1NJTksoc2luaykpKTsKKyAgICBwbGF5
ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7CisgICAgcmV0dXJuIEdTVF9GTE9XX09L
OworfQogCi0gICAgICAgIGlmIChsb2NhdGlvbnMpCi0gICAgICAgICAgICBtX21lZGlhTG9jYXRp
b25DdXJyZW50SW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGdzdF92YWx1ZV9saXN0X2dldF9zaXpl
KGxvY2F0aW9ucykpIC0xOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZsdXNo
Q3VycmVudEJ1ZmZlcigpCit7CisgICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3Nh
bXBsZU11dGV4KTsKIAotICAgICAgICBsb2FkTmV4dExvY2F0aW9uKCk7CisgICAgaWYgKG1fc2Ft
cGxlKSB7CisgICAgICAgIC8vIFJlcGxhY2UgYnkgYSBuZXcgc2FtcGxlIGhhdmluZyBvbmx5IHRo
ZSBjYXBzLCBzbyB0aGlzIGR1bW15IHNhbXBsZSBpcyBzdGlsbCB1c2VmdWwgdG8gZ2V0IHRoZSBk
aW1lbnNpb25zLgorICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHJlc2l6aW5nIHByb2JsZW1zIHdo
ZW4gdGhlIHZpZGVvIGNoYW5nZXMgaXRzIHF1YWxpdHkgYW5kIGEgRFJBSU4gaXMgcGVyZm9ybWVk
LgorICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIGluZm8gPSBnc3Rfc2FtcGxlX2dldF9pbmZv
KG1fc2FtcGxlLmdldCgpKTsKKyAgICAgICAgbV9zYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X3NhbXBs
ZV9uZXcobnVsbHB0ciwgZ3N0X3NhbXBsZV9nZXRfY2FwcyhtX3NhbXBsZS5nZXQoKSksCisgICAg
ICAgICAgICBnc3Rfc2FtcGxlX2dldF9zZWdtZW50KG1fc2FtcGxlLmdldCgpKSwgaW5mbyA/IGdz
dF9zdHJ1Y3R1cmVfY29weShpbmZvKSA6IG51bGxwdHIpKTsKICAgICB9CisKKyAgICBib29sIHNo
b3VsZFdhaXQgPSBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtID09IEdzdFZpZGVvRGVjb2RlclBsYXRm
b3JtOjpWaWRlbzRMaW51eDsKKyAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0gW3Nob3VsZFdhaXQs
IHBpcGVsaW5lID0gcGlwZWxpbmUoKV0oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYg
cHJveHkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSwgIkZsdXNoaW5nIHZp
ZGVvIHNhbXBsZSAlcyIsIHNob3VsZFdhaXQgPyAic3luY2hyb25vdXNseSIgOiAiIik7CisgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKCFzaG91bGRXYWl0ID8gJnByb3h5LmxvY2soKSA6IG51bGxw
dHIpOworCisgICAgICAgIGlmIChwcm94eS5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgcHJveHku
ZHJvcEN1cnJlbnRCdWZmZXJXaGlsZVByZXNlcnZpbmdUZXh0dXJlKHNob3VsZFdhaXQpOworICAg
IH07CisKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwo
KSkucHJveHkoKSk7CisjZWxzZQorICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQ
cm94eSk7CisjZW5kaWYKIH0KKyNlbmRpZgogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZE5leHRMb2NhdGlvbigpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmICghbV9tZWRpYUxvY2F0
aW9ucykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fc2l6ZSA9IHNpemU7Cit9CiAKLSAg
ICBjb25zdCBHVmFsdWUqIGxvY2F0aW9ucyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKG1fbWVk
aWFMb2NhdGlvbnMsICJsb2NhdGlvbnMiKTsKLSAgICBjb25zdCBnY2hhciogbmV3TG9jYXRpb24g
PSBudWxscHRyOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChj
b250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFs
b2NhdGlvbnMpIHsKLSAgICAgICAgLy8gRmFsbGJhY2sgb24gbmV3LWxvY2F0aW9uIHN0cmluZy4K
LSAgICAgICAgbmV3TG9jYXRpb24gPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcobV9tZWRpYUxv
Y2F0aW9ucywgIm5ldy1sb2NhdGlvbiIpOwotICAgICAgICBpZiAoIW5ld0xvY2F0aW9uKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoIW1fcGxheWVyLT52aXNpYmxl
KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbmV3TG9jYXRpb24pIHsKLSAgICAgICAg
aWYgKG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCA8IDApIHsKLSAgICAgICAgICAgIG1fbWVk
aWFMb2NhdGlvbnMgPSBudWxscHRyOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9CisgICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKKyAg
ICBpZiAoIUdTVF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQorICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgY29uc3QgR1ZhbHVlKiBsb2NhdGlvbiA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1
ZShsb2NhdGlvbnMsIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCk7Ci0gICAgICAgIGNvbnN0
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUobG9jYXRp
b24pOworI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgLy8gRW5zdXJlIHRoZSBpbnB1dCBpcyBS
R0JBLiBXZSBoYW5kbGUgWVVWIHZpZGVvIG5hdGl2ZWx5LCBzbyB3ZSBuZWVkIHRvIGRvCisgICAg
Ly8gdGhpcyBjb252ZXJzaW9uIG9uLWRlbWFuZCBoZXJlLgorICAgIEdzdEJ1ZmZlciogYnVmZmVy
ID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKG1fc2FtcGxlLmdldCgpKTsKKyAgICBpZiAoVU5MSUtF
TFkoIUdTVF9JU19CVUZGRVIoYnVmZmVyKSkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBp
ZiAoIXN0cnVjdHVyZSkgewotICAgICAgICAgICAgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4
LS07Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9z
YW1wbGVfZ2V0X2NhcHMobV9zYW1wbGUuZ2V0KCkpOworCisgICAgR3N0VmlkZW9JbmZvIHZpZGVv
SW5mbzsKKyAgICBnc3RfdmlkZW9faW5mb19pbml0KCZ2aWRlb0luZm8pOworICAgIGlmICghZ3N0
X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZ2aWRlb0luZm8sIGNhcHMpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIUdTVF9WSURFT19JTkZPX0lTX1JHQigmdmlkZW9JbmZvKSkgeworICAgICAg
ICBpZiAoIW1fY29sb3JDb252ZXJ0KSB7CisgICAgICAgICAgICBHc3RNZW1vcnkqIG1lbSA9IGdz
dF9idWZmZXJfcGVla19tZW1vcnkoYnVmZmVyLCAwKTsKKyAgICAgICAgICAgIEdzdEdMQ29udGV4
dCogY29udGV4dCA9ICgoR3N0R0xCYXNlTWVtb3J5KiltZW0pLT5jb250ZXh0OworICAgICAgICAg
ICAgbV9jb2xvckNvbnZlcnQgPSBhZG9wdEdSZWYoZ3N0X2dsX2NvbG9yX2NvbnZlcnRfbmV3KGNv
bnRleHQpKTsKICAgICAgICAgfQogCi0gICAgICAgIG5ld0xvY2F0aW9uID0gZ3N0X3N0cnVjdHVy
ZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm5ldy1sb2NhdGlvbiIpOworICAgICAgICBpZiAoIW1f
Y29sb3JDb252ZXJ0SW5wdXRDYXBzIHx8ICFnc3RfY2Fwc19pc19lcXVhbChtX2NvbG9yQ29udmVy
dElucHV0Q2Fwcy5nZXQoKSwgY2FwcykpIHsKKyAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0SW5w
dXRDYXBzID0gY2FwczsKKyAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2FwcyA9IGFk
b3B0R1JlZihnc3RfY2Fwc19jb3B5KGNhcHMpKTsKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRU
TEVfRU5ESUFOCisgICAgICAgICAgICBjb25zdCBnY2hhciogZm9ybWF0U3RyaW5nID0gR1NUX1ZJ
REVPX0lORk9fSEFTX0FMUEhBKCZ2aWRlb0luZm8pID8gIlJHQkEiIDogIkJHUngiOworI2Vsc2UK
KyAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBmb3JtYXRTdHJpbmcgPSBHU1RfVklERU9fSU5GT19I
QVNfQUxQSEEoJnZpZGVvSW5mbykgPyAiUkdCQSIgOiAiUkdCeCI7CisjZW5kaWYKKyAgICAgICAg
ICAgIGdzdF9jYXBzX3NldF9zaW1wbGUobV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzLmdldCgpLCAi
Zm9ybWF0IiwgR19UWVBFX1NUUklORywgZm9ybWF0U3RyaW5nLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIGlmICghZ3N0X2dsX2NvbG9yX2NvbnZlcnRfc2V0X2NhcHMobV9jb2xvckNvbnZlcnQuZ2V0
KCksIGNhcHMsIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgR1JlZlB0cjxHc3RCdWZmZXI+IHJnYkJ1
ZmZlciA9IGFkb3B0R1JlZihnc3RfZ2xfY29sb3JfY29udmVydF9wZXJmb3JtKG1fY29sb3JDb252
ZXJ0LmdldCgpLCBidWZmZXIpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFHU1RfSVNfQlVGRkVS
KHJnYkJ1ZmZlci5nZXQoKSkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0
IEdzdFN0cnVjdHVyZSogaW5mbyA9IGdzdF9zYW1wbGVfZ2V0X2luZm8obV9zYW1wbGUuZ2V0KCkp
OworICAgICAgICBtX3NhbXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhyZ2JCdWZmZXIu
Z2V0KCksIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSwKKyAgICAgICAgICAgIGdzdF9z
YW1wbGVfZ2V0X3NlZ21lbnQobV9zYW1wbGUuZ2V0KCkpLCBpbmZvID8gZ3N0X3N0cnVjdHVyZV9j
b3B5KGluZm8pIDogbnVsbHB0cikpOwogICAgIH0KKyNlbmRpZgogCi0gICAgaWYgKG5ld0xvY2F0
aW9uKSB7Ci0gICAgICAgIC8vIEZvdW5kIGEgY2FuZGlkYXRlLiBuZXctbG9jYXRpb24gaXMgbm90
IGFsd2F5cyBhbiBhYnNvbHV0ZSB1cmwKLSAgICAgICAgLy8gdGhvdWdoLiBXZSBuZWVkIHRvIHRh
a2UgdGhlIGJhc2Ugb2YgdGhlIGN1cnJlbnQgdXJsIGFuZAotICAgICAgICAvLyBhcHBlbmQgdGhl
IHZhbHVlIG9mIG5ldy1sb2NhdGlvbiB0byBpdC4KLSAgICAgICAgVVJMIGJhc2VVcmwgPSBnc3Rf
dXJpX2lzX3ZhbGlkKG5ld0xvY2F0aW9uKSA/IFVSTCgpIDogbV91cmw7Ci0gICAgICAgIFVSTCBu
ZXdVcmwgPSBVUkwoYmFzZVVybCwgbmV3TG9jYXRpb24pOworICAgIGF1dG8gZ3N0SW1hZ2UgPSBJ
bWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UobV9zYW1wbGUuZ2V0KCkpOworICAgIGlmICghZ3N0
SW1hZ2UpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBw
bGF5YmluVXJsU3RyOwotICAgICAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgImN1
cnJlbnQtdXJpIiwgJnBsYXliaW5VcmxTdHIub3V0UHRyKCksIG51bGxwdHIpOwotICAgICAgICBV
UkwgcGxheWJpblVybChVUkwoKSwgcGxheWJpblVybFN0ci5nZXQoKSk7CisgICAgY29udGV4dC5k
cmF3SW1hZ2UoZ3N0SW1hZ2UtPmltYWdlKCksIHJlY3QsIGdzdEltYWdlLT5yZWN0KCksIHsgQ29t
cG9zaXRlQ29weSwgbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkID8gbV92aWRlb1NvdXJjZU9y
aWVudGF0aW9uIDogSW1hZ2VPcmllbnRhdGlvbigpIH0pOworfQogCi0gICAgICAgIGlmIChwbGF5
YmluVXJsID09IG5ld1VybCkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiUGxheWJpbiBhbHJlYWR5IGhhbmRsZWQgcmVkaXJlY3Rpb24uIik7CisjaWYgVVNFKEdT
VFJFQU1FUl9HTCkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb3B5VmlkZW9U
ZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBsYXRm
b3JtM0RPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCit7CisgICAgVU5VU0VE
X1BBUkFNKGNvbnRleHQpOwogCi0gICAgICAgICAgICBtX3VybCA9IHBsYXliaW5Vcmw7CisgICAg
aWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgIGlmIChwcmVtdWx0aXBseUFs
cGhhKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0
ZShHU1RfU1RBVEVfUkVBRFkpOwotICAgICAgICBhdXRvIHNlY3VyaXR5T3JpZ2luID0gU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZShtX3VybCk7Ci0gICAgICAgIGlmIChzZWN1cml0eU9yaWdpbi0+Y2Fu
UmVxdWVzdChuZXdVcmwpKSB7Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUo
KSwgIk5ldyBtZWRpYSB1cmw6ICVzIiwgbmV3VXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7CiAKLSAgICAg
ICAgICAgIC8vIFJlc2V0IHBsYXllciBzdGF0ZXMuCi0gICAgICAgICAgICBtX25ldHdvcmtTdGF0
ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwotICAgICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtT
dGF0ZUNoYW5nZWQoKTsKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZzsKLSAgICAgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwor
ICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICAgICAgLy8gUmVzZXQgcGlwZWxpbmUgc3RhdGUuCi0gICAgICAgICAg
ICBtX3Jlc2V0UGlwZWxpbmUgPSB0cnVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0Zy
YW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9IG1ha2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4o
bV9zYW1wbGUuZ2V0KCksIG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1hcHBlckZs
YWdzLCB0cnVlKTsKIAotICAgICAgICAgICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgICAgICAgICBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAw
KTsKLSAgICAgICAgICAgIGlmIChzdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBTZXQgdGhlIG5ldyB1cmkgYW5kIHN0YXJ0IHBsYXlpbmcuCi0gICAgICAgICAg
ICAgICAgc2V0UGxheWJpblVSTChuZXdVcmwpOwotICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVs
aW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEdTVF9JTkZPX09C
SkVDVChwaXBlbGluZSgpLCAiTm90IGFsbG93ZWQgdG8gbG9hZCBuZXcgbWVkaWEgbG9jYXRpb246
ICVzIiwgbmV3VXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLSAgICBtX21lZGlh
TG9jYXRpb25DdXJyZW50SW5kZXgtLTsKLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAgc3RkOjp1
bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9
IGZyYW1lSG9sZGVyLT5wbGF0Zm9ybUxheWVyQnVmZmVyKCk7CisgICAgaWYgKCFsYXllckJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZFN0YXRlQ2hhbmdlZCgpCi17Ci0gICAgdXBkYXRlU3RhdGVzKCk7Ci19CisgICAg
YXV0byBzaXplID0gZnJhbWVIb2xkZXItPnNpemUoKTsKKyAgICBpZiAobV92aWRlb1NvdXJjZU9y
aWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCisgICAgICAgIHNpemUgPSBzaXplLnRyYW5z
cG9zZWRTaXplKCk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0aW1lQ2hh
bmdlZCgpCi17Ci0gICAgdXBkYXRlU3RhdGVzKCk7Ci0gICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2Vk
KCk7CisgICAgaWYgKCFtX3ZpZGVvVGV4dHVyZUNvcGllcikKKyAgICAgICAgbV92aWRlb1RleHR1
cmVDb3BpZXIgPSBtYWtlVW5pcXVlPFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcj4oVEVYVFVS
RV9DT1BJRVJfQ09MT1JfQ09OVkVSVF9GTEFHKTsKKworICAgIGZyYW1lSG9sZGVyLT53YWl0Rm9y
Q1BVU3luYygpOworCisgICAgcmV0dXJuIG1fdmlkZW9UZXh0dXJlQ29waWVyLT5jb3B5VmlkZW9U
ZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoKmxheWVyQnVmZmVyLmdldCgpLCBzaXplLCBvdXRwdXRU
ZXh0dXJlLCBvdXRwdXRUYXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBmbGlwWSwgbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uKTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCitOYXRpdmVJbWFnZVB0ciBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKQogewotICAgIEdTVF9J
TkZPX09CSkVDVChwaXBlbGluZSgpLCAiUGxheWJhY2sgZW5kZWQiKTsKKyNpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisgICAgaWYgKG1fdXNpbmdGYWxsYmFj
a1ZpZGVvU2luaykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBTeW5jaHJvbml6
ZSBwb3NpdGlvbiBhbmQgZHVyYXRpb24gdmFsdWVzIHRvIG5vdCBjb25mdXNlIHRoZQotICAgIC8v
IEhUTUxNZWRpYUVsZW1lbnQuIEluIHNvbWUgY2FzZXMgbGlrZSByZXZlcnNlIHBsYXliYWNrIHRo
ZQotICAgIC8vIHBvc2l0aW9uIGlzIG5vdCBhbHdheXMgcmVwb3J0ZWQgYXMgMCBmb3IgaW5zdGFu
Y2UuCi0gICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAg
ICBNZWRpYVRpbWUgbm93ID0gY3VycmVudE1lZGlhVGltZSgpOwotICAgIGlmIChub3cgPiBNZWRp
YVRpbWU6Onplcm9UaW1lKCkgJiYgIW1fc2Vla2luZykgewotICAgICAgICBtX2NhY2hlZER1cmF0
aW9uID0gbm93OwotICAgICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7Ci0gICAgfQor
ICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7CiAKLSAgICBt
X2lzRW5kUmVhY2hlZCA9IHRydWU7CisgICAgaWYgKCFHU1RfSVNfU0FNUExFKG1fc2FtcGxlLmdl
dCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoIW1fcGxheWVyLT5jbGll
bnQoKS5tZWRpYVBsYXllcklzTG9vcGluZygpKSB7Ci0gICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsK
LSAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOwotICAgICAgICBt
X2Rvd25sb2FkRmluaXNoZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgdGltZUNoYW5nZWQoKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3N0VmlkZW9GcmFtZUhvbGRlcj4gZnJhbWVIb2xkZXIgPSBtYWtl
VW5pcXVlPEdzdFZpZGVvRnJhbWVIb2xkZXI+KG1fc2FtcGxlLmdldCgpLCBtX3ZpZGVvRGVjb2Rl
clBsYXRmb3JtLCBtX3RleHR1cmVNYXBwZXJGbGFncywgdHJ1ZSk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGxheWVyQnVmZmVyID0gZnJh
bWVIb2xkZXItPnBsYXRmb3JtTGF5ZXJCdWZmZXIoKTsKKyAgICBpZiAoIWxheWVyQnVmZmVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc2l6ZSA9IGZyYW1lSG9sZGVyLT5z
aXplKCk7CisgICAgaWYgKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdo
dCgpKQorICAgICAgICBzaXplID0gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOworCisgICAgR0xDb250
ZXh0KiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRp
bmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBpZiAoIW1fdmlkZW9UZXh0dXJlQ29waWVyKQorICAgICAgICBtX3ZpZGVvVGV4
dHVyZUNvcGllciA9IG1ha2VVbmlxdWU8VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyPihURVhU
VVJFX0NPUElFUl9DT0xPUl9DT05WRVJUX0ZMQUcpOworCisgICAgZnJhbWVIb2xkZXItPndhaXRG
b3JDUFVTeW5jKCk7CisKKyAgICBpZiAoIW1fdmlkZW9UZXh0dXJlQ29waWVyLT5jb3B5VmlkZW9U
ZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoKmxheWVyQnVmZmVyLmdldCgpLCBzaXplLCAwLCBHTF9U
RVhUVVJFXzJELCAwLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwg
bV92aWRlb1NvdXJjZU9yaWVudGF0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29u
dGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV92aWRlb1Rl
eHR1cmVDb3BpZXItPnJlc3VsdFRleHR1cmUoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KSk7CisjZWxzZQorICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCiB9CisjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUl9HTCkKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0
aW9uQ2hhbmdlZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0VmlkZW9T
b3VyY2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewotICAgIE1l
ZGlhVGltZSBwcmV2aW91c0R1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKLSAgICBtX2Nh
Y2hlZER1cmF0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgIGlmIChtX3ZpZGVv
U291cmNlT3JpZW50YXRpb24gPT0gb3JpZW50YXRpb24pCisgICAgICAgIHJldHVybjsKIAotICAg
IC8vIEF2b2lkIGVtaXRpbmcgZHVyYXRpb25jaGFuZ2VkIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBw
cmV2aW91cwotICAgIC8vIGR1cmF0aW9uIHdhcyAwIGJlY2F1c2UgdGhhdCBjYXNlIGlzIGFscmVh
ZHkgaGFuZGxlZCBieSB0aGUKLSAgICAvLyBIVE1MTWVkaWFFbGVtZW50LgotICAgIGlmIChwcmV2
aW91c0R1cmF0aW9uICYmIGR1cmF0aW9uTWVkaWFUaW1lKCkgIT0gcHJldmlvdXNEdXJhdGlvbikK
LSAgICAgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOworICAgIG1fdmlkZW9Tb3VyY2VP
cmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAg
ICB1cGRhdGVUZXh0dXJlTWFwcGVyRmxhZ3MoKTsKKyNlbmRpZgogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIG5ldHdvcmtFcnJvciwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSwgYm9v
bCBmb3JjZU5vdGlmaWNhdGlvbnMpCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpCiB7
Ci0gICAgR1NUX1dBUk5JTkcoIkxvYWRpbmcgZmFpbGVkLCBlcnJvcjogJXMiLCBjb252ZXJ0RW51
bWVyYXRpb25Ub1N0cmluZyhuZXR3b3JrRXJyb3IpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgbV9l
cnJvck9jY3VyZWQgPSB0cnVlOwotICAgIGlmIChmb3JjZU5vdGlmaWNhdGlvbnMgfHwgbV9uZXR3
b3JrU3RhdGUgIT0gbmV0d29ya0Vycm9yKSB7Ci0gICAgICAgIG1fbmV0d29ya1N0YXRlID0gbmV0
d29ya0Vycm9yOwotICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwotICAg
IH0KLSAgICBpZiAoZm9yY2VOb3RpZmljYXRpb25zIHx8IG1fcmVhZHlTdGF0ZSAhPSByZWFkeVN0
YXRlKSB7Ci0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7Ci0gICAgICAgIG1fcGxh
eWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIHN3aXRjaCAobV92aWRlb1NvdXJjZU9yaWVu
dGF0aW9uKSB7CisgICAgY2FzZSBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0OgorICAg
ICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luUmlnaHRUb3A6CisgICAgICAgIG1fdGV4dHVyZU1hcHBl
ckZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRSb3RhdGVUZXh0dXJlOTA7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luQm90dG9tUmlnaHQ6Cisg
ICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRSb3Rh
dGVUZXh0dXJlMTgwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEltYWdlT3JpZW50YXRpb246
Ok9yaWdpbkxlZnRCb3R0b206CisgICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gVGV4dHVy
ZU1hcHBlckdMOjpTaG91bGRSb3RhdGVUZXh0dXJlMjcwOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogSGFuZGxlIE9yaWdpblRvcFJpZ2h0LCBPcmlnaW5C
b3R0b21MZWZ0LCBPcmlnaW5MZWZ0VG9wIGFuZCBPcmlnaW5SaWdodEJvdHRvbT8KKyAgICAgICAg
bV90ZXh0dXJlTWFwcGVyRmxhZ3MgPSAwOworICAgICAgICBicmVhazsKICAgICB9Ci0KLSAgICAv
LyBMb2FkaW5nIGZhaWxlZCwgcmVtb3ZlIHJlYWR5IHRpbWVyLgotICAgIG1fcmVhZHlUaW1lckhh
bmRsZXIuc3RvcCgpOwogfQorI2VuZGlmCiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiYgdHlwZXMpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9y
dHNGdWxsc2NyZWVuKCkgY29uc3QKIHsKLSAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBH
U3RyZWFtZXJSZWdpc3RyeVNjYW5uZXI6OnNpbmdsZXRvbigpOwotICAgIHR5cGVzID0gZ3N0UmVn
aXN0cnlTY2FubmVyLm1pbWVUeXBlU2V0KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLU1lZGlh
UGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0
c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK01l
ZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bW92
aWVMb2FkVHlwZSgpIGNvbnN0CiB7Ci0gICAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSByZXN1
bHQgPSBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Ci0jaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKLSAgICAvLyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UgaXMgaW4gY2hhcmdlIG9m
IG1lZGlhc291cmNlIHBsYXliYWNrLCBub3QgdXMuCi0gICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRp
YVNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSNlbmRpZgorICAgIGlmIChtX3JlYWR5
U3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6OlVua25vd247CiAKLSNpZiAhRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBpZiAocGFy
YW1ldGVycy5pc01lZGlhU3RyZWFtKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotI2VuZGlmCisg
ICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkxpdmVT
dHJlYW07CiAKLSAgICBpZiAocGFyYW1ldGVycy50eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkRvd25sb2FkOworfQogCi0gICAg
R1NUX0RFQlVHKCJDaGVja2luZyBtaW1lLXR5cGUgXCIlc1wiIiwgcGFyYW1ldGVycy50eXBlLnJh
dygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGF1dG8gY29udGFpbmVyVHlwZSA9IHBhcmFtZXRlcnMu
dHlwZS5jb250YWluZXJUeXBlKCk7Ci0gICAgYXV0byYgZ3N0UmVnaXN0cnlTY2FubmVyID0gR1N0
cmVhbWVyUmVnaXN0cnlTY2FubmVyOjpzaW5nbGV0b24oKTsKLSAgICBpZiAoZ3N0UmVnaXN0cnlT
Y2FubmVyLmlzQ29udGFpbmVyVHlwZVN1cHBvcnRlZChjb250YWluZXJUeXBlKSkgewotICAgICAg
ICAvLyBTcGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29k
ZWNzIHN0cmluZyBpcyBlbXB0eS4KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gY29kZWNzID0gcGFy
YW1ldGVycy50eXBlLmNvZGVjcygpOwotICAgICAgICByZXN1bHQgPSBjb2RlY3MuaXNFbXB0eSgp
ID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogKGdzdFJlZ2lzdHJ5U2Nhbm5lci5hcmVB
bGxDb2RlY3NTdXBwb3J0ZWQoY29kZWNzKSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1l
ZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZCk7Ci0gICAgfQorI2lmIFVTRShHU1RSRUFNRVJfR0wp
CitHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdMQXBwU2lu
aygpCit7CisgICAgR3N0RWxlbWVudCogYXBwc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFr
ZSgiYXBwc2luayIsICJ3ZWJraXQtZ2wtdmlkZW8tc2luayIpOworICAgIGlmICghYXBwc2luaykK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBnX29iamVjdF9zZXQoYXBwc2luaywgImVu
YWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAiZW1pdC1zaWduYWxzIiwgVFJVRSwgIm1heC1idWZm
ZXJzIiwgMSwgbnVsbHB0cik7CisgICAgZ19zaWduYWxfY29ubmVjdChhcHBzaW5rLCAibmV3LXNh
bXBsZSIsIEdfQ0FMTEJBQ0sobmV3U2FtcGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KGFwcHNpbmssICJuZXctcHJlcm9sbCIsIEdfQ0FMTEJBQ0sobmV3UHJlcm9sbENh
bGxiYWNrKSwgdGhpcyk7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGFwcHNpbmssICJzaW5rIikpOworICAgIGdzdF9wYWRf
YWRkX3Byb2JlKHBhZC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0UGFkUHJvYmVUeXBlPihHU1RfUEFE
X1BST0JFX1RZUEVfUFVTSCB8IEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dOU1RSRUFNIHwg
R1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSwgW10gKEdzdFBhZCosIEdzdFBhZFByb2Jl
SW5mbyogaW5mbywgIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHc3RQYWRQcm9iZVJldHVybiB7Cisg
ICAgICAgIC8vIEluIHNvbWUgcGxhdGZvcm1zIChlLmcuIE9wZW5NQVggb24gdGhlIFJhc3BiZXJy
eSBQaSkgd2hlbiBhIHJlc29sdXRpb24gY2hhbmdlIG9jY3VycyB0aGUKKyAgICAgICAgLy8gcGlw
ZWxpbmUgaGFzIHRvIGJlIGRyYWluZWQgYmVmb3JlIGEgZnJhbWUgd2l0aCB0aGUgbmV3IHJlc29s
dXRpb24gY2FuIGJlIGRlY29kZWQuCisgICAgICAgIC8vIEluIHRoaXMgY29udGV4dCwgaXQncyBp
bXBvcnRhbnQgdGhhdCB3ZSBkb24ndCBob2xkIHJlZmVyZW5jZXMgdG8gYW55IHByZXZpb3VzIGZy
YW1lCisgICAgICAgIC8vIChlLmcuIG1fc2FtcGxlKSBzbyB0aGF0IGRlY29kaW5nIGNhbiBjb250
aW51ZS4KKyAgICAgICAgLy8gV2UgYXJlIGFsc28gbm90IHN1cHBvc2VkIHRvIGtlZXAgdGhlIG9y
aWdpbmFsIGZyYW1lIGFmdGVyIGEgZmx1c2guCisgICAgICAgIGlmIChpbmZvLT50eXBlICYgR1NU
X1BBRF9QUk9CRV9UWVBFX1FVRVJZX0RPV05TVFJFQU0pIHsKKyAgICAgICAgICAgIGlmIChHU1Rf
UVVFUllfVFlQRShHU1RfUEFEX1BST0JFX0lORk9fUVVFUlkoaW5mbykpICE9IEdTVF9RVUVSWV9E
UkFJTikKKyAgICAgICAgICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAgICAgICAg
ICAgIEdTVF9ERUJVRygiQWN0aW5nIHVwb24gRFJBSU4gcXVlcnkiKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCkgewor
ICAgICAgICAgICAgaWYgKEdTVF9FVkVOVF9UWVBFKEdTVF9QQURfUFJPQkVfSU5GT19FVkVOVChp
bmZvKSkgIT0gR1NUX0VWRU5UX0ZMVVNIX1NUQVJUKQorICAgICAgICAgICAgICAgIHJldHVybiBH
U1RfUEFEX1BST0JFX09LOworICAgICAgICAgICAgR1NUX0RFQlVHKCJBY3RpbmcgdXBvbiBmbHVz
aC1zdGFydCBldmVudCIpOworICAgICAgICB9CiAKLSAgICBhdXRvIGZpbmFsUmVzdWx0ID0gZXh0
ZW5kZWRTdXBwb3J0c1R5cGUocGFyYW1ldGVycywgcmVzdWx0KTsKLSAgICBHU1RfREVCVUcoIlN1
cHBvcnRlZDogJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhmaW5hbFJlc3VsdCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGZpbmFsUmVzdWx0OworICAgICAgICBhdXRvKiBwbGF5
ZXIgPSBzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqPih1c2VyRGF0YSk7
CisgICAgICAgIHBsYXllci0+Zmx1c2hDdXJyZW50QnVmZmVyKCk7CisgICAgICAgIHJldHVybiBH
U1RfUEFEX1BST0JFX09LOworICAgIH0sIHRoaXMsIG51bGxwdHIpOworCisgICAgcmV0dXJuIGFw
cHNpbms7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVEb3du
bG9hZEJ1ZmZlcmluZ0ZsYWcoKQorR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGVWaWRlb1NpbmtHTCgpCiB7Ci0gICAgaWYgKCFtX3BpcGVsaW5lKQotICAgICAg
ICByZXR1cm47CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKKyAgICBHc3RFbGVtZW50KiB2
aWRlb1NpbmsgPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBHc3RFbGVtZW50KiB1cGxvYWQg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsdXBsb2FkIiwgbnVsbHB0cik7CisgICAgR3N0
RWxlbWVudCogY29sb3Jjb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJnbGNvbG9y
Y29udmVydCIsIG51bGxwdHIpOworICAgIEdzdEVsZW1lbnQqIGFwcHNpbmsgPSBjcmVhdGVHTEFw
cFNpbmsoKTsKIAotICAgIHVuc2lnbmVkIGZsYWdzOwotICAgIGdfb2JqZWN0X2dldChtX3BpcGVs
aW5lLmdldCgpLCAiZmxhZ3MiLCAmZmxhZ3MsIG51bGxwdHIpOworICAgIC8vIGdsc2lua2JpbiBp
cyBub3QgdXNlZCBiZWNhdXNlIGl0IGluY2x1ZGVzIGdsY29sb3Jjb252ZXJ0IHdoaWNoIG9ubHkg
cHJvY2VzcyBSR0JBLAorICAgIC8vIGJ1dCB3ZSBjYW4gZGlzcGxheSBZVVYgZm9ybWF0cyB0b28u
CiAKLSAgICB1bnNpZ25lZCBmbGFnRG93bmxvYWQgPSBnZXRHc3RQbGF5RmxhZygiZG93bmxvYWQi
KTsKKyAgICBpZiAoIWFwcHNpbmsgfHwgIXVwbG9hZCB8fCAhY29sb3Jjb252ZXJ0KSB7CisgICAg
ICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gY3JlYXRlIEdzdEdMIGVsZW1lbnRzIik7CisgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYodmlkZW9TaW5rKTsKIAotICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8gc3RvcCBkb3dubG9hZGluZyBpZiB3ZSBhbHJlYWR5IHN0YXJ0ZWQgaXQuCi0gICAgaWYgKGZs
YWdzICYgZmxhZ0Rvd25sb2FkICYmIG1fcmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZyAmJiAhbV9yZXNldFBpcGVsaW5lKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIkRvd25sb2FkIGFscmVhZHkgc3RhcnRlZCwgbm90IHN0YXJ0aW5nIGFnYWluIik7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHVwbG9hZCkKKyAgICAgICAgICAgIGdzdF9v
YmplY3RfdW5yZWYodXBsb2FkKTsKKyAgICAgICAgaWYgKGNvbG9yY29udmVydCkKKyAgICAgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYoY29sb3Jjb252ZXJ0KTsKKyAgICAgICAgaWYgKGFwcHNpbmsp
CisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKGFwcHNpbmspOworCisgICAgICAgIGdfd2Fy
bmluZygiV2ViS2l0IHdhc24ndCBhYmxlIHRvIGZpbmQgdGhlIEdTdHJlYW1lciBvcGVuZ2wgcGx1
Z2luLiBIYXJkd2FyZS1hY2NlbGVyYXRlZCB6ZXJvLWNvcHkgdmlkZW8gcmVuZGVyaW5nIGNhbid0
IGJlIGVuYWJsZWQgd2l0aG91dCB0aGlzIHBsdWdpbi4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCi0gICAgYm9vbCBzaG91bGREb3dubG9hZCA9ICFpc0xpdmVTdHJlYW0oKSAm
JiBtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6OkF1dG87Ci0gICAgaWYgKHNob3VsZERvd25sb2Fk
KSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiRW5hYmxpbmcgb24tZGlz
ayBidWZmZXJpbmciKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJm
bGFncyIsIGZsYWdzIHwgZmxhZ0Rvd25sb2FkLCBudWxscHRyKTsKLSAgICAgICAgbV9maWxsVGlt
ZXIuc3RhcnRSZXBlYXRpbmcoMjAwX21zKTsKLSAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5G
T19PQkpFQ1QocGlwZWxpbmUoKSwgIkRpc2FibGluZyBvbi1kaXNrIGJ1ZmZlcmluZyIpOwotICAg
ICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwgZmxhZ3MgJiB+Zmxh
Z0Rvd25sb2FkLCBudWxscHRyKTsKLSAgICAgICAgbV9maWxsVGltZXIuc3RvcCgpOworICAgIGdz
dF9iaW5fYWRkX21hbnkoR1NUX0JJTih2aWRlb1NpbmspLCB1cGxvYWQsIGNvbG9yY29udmVydCwg
YXBwc2luaywgbnVsbHB0cik7CisKKyAgICAvLyBXb3JrYXJvdW5kIHVudGlsIHdlIGNhbiBkZXBl
bmQgb24gR1N0cmVhbWVyIDEuMTYuMi4KKyAgICAvLyBodHRwczovL2dpdGxhYi5mcmVlZGVza3Rv
cC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhc2UvY29tbWl0LzhkMzJkZTA5MDU1NGNmMjlm
ZTM1OWY4M2FhNDYwMDBiYTY1OGE2OTMKKyAgICAvLyBGb3JjaW5nIGEgY29sb3IgY29udmVyc2lv
biB0byBSR0JBIGhlcmUgYWxsb3dzIGdsdXBsb2FkIHRvIGludGVybmFsbHkgdXNlCisgICAgLy8g
YW4gdXBsb2FkZXIgdGhhdCBhZGRzIGEgVmlkZW9NZXRhLCB0aHJvdWdoIHRoZSBUZXh0dXJlVXBs
b2FkTWV0YSBjYXBzCisgICAgLy8gZmVhdHVyZSwgd2l0aG91dCBuZWVkaW5nIHRoZSBwYXRjaCBh
Ym92ZS4gSG93ZXZlciB0aGlzIHNwZWNpZmljIGNhcHMKKyAgICAvLyBmZWF0dXJlIGlzIGdvaW5n
IHRvIGJlIHJlbW92ZWQgZnJvbSBHU3RyZWFtZXIgc28gaXQgaXMgY29uc2lkZXJlZCBhCisgICAg
Ly8gc2hvcnQtdGVybSB3b3JrYXJvdW5kLiBUaGlzIGNvZGUgcGF0aCBtb3N0IGxpa2VseSB3aWxs
IGhhdmUgYSBuZWdhdGl2ZQorICAgIC8vIHBlcmZvcm1hbmNlIGltcGFjdCBvbiBlbWJlZGRlZCBw
bGF0Zm9ybXMgYXMgd2VsbC4gRG93bnN0cmVhbSBlbWJlZGRlcnMKKyAgICAvLyBhcmUgaGlnaGx5
IGVuY291cmFnZWQgdG8gY2hlcnJ5LXBpY2sgdGhlIHBhdGNoIGxpbmtlZCBhYm92ZSBpbiB0aGVp
ciBCU1AKKyAgICAvLyBhbmQgc2V0IHRoZSBXRUJLSVRfR1NUX05PX1JHQkFfQ09OVkVSU0lPTiBl
bnZpcm9ubWVudCB2YXJpYWJsZSB1bnRpbAorICAgIC8vIEdTdHJlYW1lciAxLjE2LjIgaXMgcmVs
ZWFzZWQuCisgICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMTQyMgorICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAgICBpZiAod2Via2l0
R3N0Q2hlY2tWZXJzaW9uKDEsIDE2LCAyKSB8fCBnZXRlbnYoIldFQktJVF9HU1RfTk9fUkdCQV9D
T05WRVJTSU9OIikpCisgICAgICAgIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJp
bmcoInZpZGVvL3gtcmF3LCBmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9HTF9DQVBTX0ZPUk1BVCkp
OworICAgIGVsc2UgeworICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkZvcmNp
bmcgUkdCQSBhcyBHU3RyZWFtZXIgaXMgbm90IG5ldyBlbm91Z2guIik7CisgICAgICAgIGNhcHMg
PSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoInZpZGVvL3gtcmF3LCBmb3JtYXQgPSAo
c3RyaW5nKSBSR0JBIikpOwogICAgIH0KLX0KKyAgICBnc3RfY2Fwc19zZXRfZmVhdHVyZXMoY2Fw
cy5nZXQoKSwgMCwgZ3N0X2NhcHNfZmVhdHVyZXNfbmV3KEdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZ
X0dMX01FTU9SWSwgbnVsbHB0cikpOworICAgIGdfb2JqZWN0X3NldChhcHBzaW5rLCAiY2FwcyIs
IGNhcHMuZ2V0KCksIG51bGxwdHIpOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQotewotICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgcHJlbG9hZCB0byAlcyIsIGNvbnZlcnRF
bnVtZXJhdGlvblRvU3RyaW5nKHByZWxvYWQpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChwcmVs
b2FkID09IE1lZGlhUGxheWVyOjpBdXRvICYmIGlzTGl2ZVN0cmVhbSgpKQotICAgICAgICByZXR1
cm47CisgICAgcmVzdWx0ICY9IGdzdF9lbGVtZW50X2xpbmtfbWFueSh1cGxvYWQsIGNvbG9yY29u
dmVydCwgYXBwc2luaywgbnVsbHB0cik7CiAKLSAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOwotICAg
IHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpOworICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQodXBsb2FkLCAic2luayIpKTsK
KyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKHZpZGVvU2luaywgZ3N0X2dob3N0X3BhZF9uZXcoInNp
bmsiLCBwYWQuZ2V0KCkpKTsKIAotICAgIGlmIChtX2RlbGF5aW5nTG9hZCAmJiBtX3ByZWxvYWQg
IT0gTWVkaWFQbGF5ZXI6Ok5vbmUpIHsKLSAgICAgICAgbV9kZWxheWluZ0xvYWQgPSBmYWxzZTsK
LSAgICAgICAgY29tbWl0TG9hZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEdTVF9X
QVJOSU5HKCJGYWlsZWQgdG8gbGluayBHc3RHTCBlbGVtZW50cyIpOworICAgICAgICBnc3Rfb2Jq
ZWN0X3VucmVmKHZpZGVvU2luayk7CisgICAgICAgIHZpZGVvU2luayA9IG51bGxwdHI7CiAgICAg
fQorICAgIHJldHVybiB2aWRlb1Npbms7CiB9CiAKLUdzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlQXVkaW9TaW5rKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjplbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKQogewotICAgIG1fYXV0b0F1ZGlv
U2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXV0b2F1ZGlvc2luayIsIG51bGxwdHIp
OwotICAgIGlmICghbV9hdXRvQXVkaW9TaW5rKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJHU3Ry
ZWFtZXIncyBhdXRvYXVkaW9zaW5rIG5vdCBmb3VuZC4gUGxlYXNlIGNoZWNrIHlvdXIgZ3N0LXBs
dWdpbnMtZ29vZCBpbnN0YWxsYXRpb24iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQorICAgIGlmICghbV9nbERpc3BsYXlFbGVtZW50Q29udGV4dCkKKyAgICAgICAgbV9nbERpc3Bs
YXlFbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0R0xDb250ZXh0KEdTVF9HTF9ESVNQ
TEFZX0NPTlRFWFRfVFlQRSkpOwogCi0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fYXV0
b0F1ZGlvU2luay5nZXQoKSwgImNoaWxkLWFkZGVkIiwgR19DQUxMQkFDSyhzZXRBdWRpb1N0cmVh
bVByb3BlcnRpZXNDYWxsYmFjayksIHRoaXMpOworICAgIGlmIChtX2dsRGlzcGxheUVsZW1lbnRD
b250ZXh0KQorICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChtX3ZpZGVvU2luay5nZXQo
KSwgbV9nbERpc3BsYXlFbGVtZW50Q29udGV4dC5nZXQoKSk7CiAKLSNpZiBFTkFCTEUoV0VCX0FV
RElPKQotICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2lua0JpbiA9IGdzdF9iaW5fbmV3KCJhdWRpby1z
aW5rIik7Ci0gICAgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRlcigpOwotICAgIG1fYXVkaW9Tb3Vy
Y2VQcm92aWRlci0+Y29uZmlndXJlQXVkaW9CaW4oYXVkaW9TaW5rQmluLCBudWxscHRyKTsKLSAg
ICByZXR1cm4gYXVkaW9TaW5rQmluOwotI2Vsc2UKLSAgICByZXR1cm4gbV9hdXRvQXVkaW9TaW5r
LmdldCgpOwotI2VuZGlmCisgICAgaWYgKCFtX2dsQXBwRWxlbWVudENvbnRleHQpCisgICAgICAg
IG1fZ2xBcHBFbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0R0xDb250ZXh0KCJnc3Qu
Z2wuYXBwX2NvbnRleHQiKSk7CisKKyAgICBpZiAobV9nbEFwcEVsZW1lbnRDb250ZXh0KQorICAg
ICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChtX3ZpZGVvU2luay5nZXQoKSwgbV9nbEFwcEVs
ZW1lbnRDb250ZXh0LmdldCgpKTsKIH0KKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQogCi1H
c3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvU2luaygpIGNvbnN0
CisjaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCitzdGF0aWMgdm9pZCBzZXRSZWN0YW5nbGVU
b1ZpZGVvU2luayhHc3RFbGVtZW50KiB2aWRlb1NpbmssIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgR3N0RWxlbWVudCogc2luazsKLSAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQo
KSwgImF1ZGlvLXNpbmsiLCAmc2luaywgbnVsbHB0cik7Ci0gICAgcmV0dXJuIHNpbms7CisgICAg
Ly8gSGVyZSBnb2VzIHRoZSBwbGF0Zm9ybS1kZXBlbmRhbnQgY29kZSB0byBzZXQgdG8gdGhlIHZp
ZGVvU2luayB0aGUgc2l6ZQorICAgIC8vIGFuZCBwb3NpdGlvbiBvZiB0aGUgdmlkZW8gcmVuZGVy
aW5nIHdpbmRvdy4gTWFyayB0aGVtIHVudXNlZCBhcyBkZWZhdWx0LgorICAgIFVOVVNFRF9QQVJB
TSh2aWRlb1NpbmspOworICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKIH0KIAotI2lmIEVOQUJMRShX
RUJfQVVESU8pCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlQXVkaW9T
b3VyY2VQcm92aWRlcigpCitjbGFzcyBHU3RyZWFtZXJIb2xlUHVuY2hDbGllbnQgOiBwdWJsaWMg
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI6OkhvbGVQdW5jaENsaWVudCB7CitwdWJs
aWM6CisgICAgR1N0cmVhbWVySG9sZVB1bmNoQ2xpZW50KEdSZWZQdHI8R3N0RWxlbWVudD4mJiB2
aWRlb1NpbmspIDogbV92aWRlb1NpbmsoV1RGTW92ZSh2aWRlb1NpbmspKSB7IH07CisgICAgdm9p
ZCBzZXRWaWRlb1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiByZWN0KSBmaW5hbCB7IHNldFJlY3Rh
bmdsZVRvVmlkZW9TaW5rKG1fdmlkZW9TaW5rLmdldCgpLCByZWN0KTsgfQorcHJpdmF0ZToKKyAg
ICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmlkZW9TaW5rOworfTsKKworR3N0RWxlbWVudCogTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVIb2xlUHVuY2hWaWRlb1NpbmsoKQogewot
ICAgIGlmICghbV9hdWRpb1NvdXJjZVByb3ZpZGVyKQotICAgICAgICBtX2F1ZGlvU291cmNlUHJv
dmlkZXIgPSBtYWtlVW5pcXVlPEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI+KCk7CisgICAg
Ly8gSGVyZSBnb2VzIHRoZSBwbGF0Zm9ybS1kZXBlbmRhbnQgY29kZSB0byBjcmVhdGUgdGhlIHZp
ZGVvU2luay4gQXMgYSBkZWZhdWx0CisgICAgLy8gd2UgdXNlIGEgZmFrZVZpZGVvU2luayBzbyBu
b3RoaW5nIGlzIGRyYXduIHRvIHRoZSBwYWdlLgorICAgIEdzdEVsZW1lbnQqIHZpZGVvU2luayA9
ICBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImZha2V2aWRlb3NpbmsiLCBudWxscHRyKTsKKwor
ICAgIHJldHVybiB2aWRlb1Npbms7CiB9CiAKLUF1ZGlvU291cmNlUHJvdmlkZXIqIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9Tb3VyY2VQcm92aWRlcigpCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKQogewotICAgIGVu
c3VyZUF1ZGlvU291cmNlUHJvdmlkZXIoKTsKLSAgICByZXR1cm4gbV9hdWRpb1NvdXJjZVByb3Zp
ZGVyLmdldCgpOworICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQorICAgICAgICBbdGhpc10oVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7CisgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGxheWVyQnVmZmVyID0g
bWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4oMCwgbV9zaXplLCBU
ZXh0dXJlTWFwcGVyR0w6OlNob3VsZE5vdEJsZW5kLCBHTF9ET05UX0NBUkUpOworICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lckhvbGVQdW5jaENsaWVudD4gaG9sZVB1bmNoQ2xp
ZW50ID0gbWFrZVVuaXF1ZTxHU3RyZWFtZXJIb2xlUHVuY2hDbGllbnQ+KG1fdmlkZW9TaW5rLmdl
dCgpKTsKKyAgICAgICAgICAgIGxheWVyQnVmZmVyLT5zZXRIb2xlUHVuY2hDbGllbnQoV1RGTW92
ZShob2xlUHVuY2hDbGllbnQpKTsKKyAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKFdU
Rk1vdmUobGF5ZXJCdWZmZXIpKTsKKyAgICAgICAgfTsKKworI2lmIFVTRShOSUNPU0lBKQorICAg
IHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgcHJv
eHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgogfQogI2VuZGlmCiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBpcGVsaW5lTmFtZSkKK0dzdEVsZW1lbnQqIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5rKCkKIHsKLSAgICBjb25zdCBn
Y2hhciogcGxheWJpbk5hbWUgPSAicGxheWJpbiI7CisgICAgYWNjZWxlcmF0ZWRSZW5kZXJpbmdT
dGF0ZUNoYW5nZWQoKTsKIAotICAgIC8vIE1TRSBkb2Vzbid0IHN1cHBvcnQgcGxheWJpbjMuIE1l
ZGlhc3RyZWFtIHJlcXVpcmVzIHBsYXliaW4zLiBSZWd1bGFyCi0gICAgLy8gcGxheWJhY2sgY2Fu
IHVzZSBwbGF5YmluMyBvbi1kZW1hbmQgd2l0aCB0aGUgV0VCS0lUX0dTVF9VU0VfUExBWUJJTjMK
LSAgICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLSAgICBpZiAoKCFpc01lZGlhU291cmNlKCkg
JiYgZ19nZXRlbnYoIldFQktJVF9HU1RfVVNFX1BMQVlCSU4zIikpIHx8IHVybC5wcm90b2NvbElz
KCJtZWRpYXN0cmVhbSIpKQotICAgICAgICBwbGF5YmluTmFtZSA9ICJwbGF5YmluMyI7CisjaWYg
VVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCisgICAgbV92aWRlb1NpbmsgPSBjcmVhdGVIb2xlUHVu
Y2hWaWRlb1NpbmsoKTsKKyAgICBwdXNoTmV4dEhvbGVQdW5jaEJ1ZmZlcigpOworICAgIHJldHVy
biBtX3ZpZGVvU2luay5nZXQoKTsKKyNlbmRpZgogCi0gICAgaWYgKG1fcGlwZWxpbmUpIHsKLSAg
ICAgICAgaWYgKCFnX3N0cmNtcDAoR1NUX09CSkVDVF9OQU1FKGdzdF9lbGVtZW50X2dldF9mYWN0
b3J5KG1fcGlwZWxpbmUuZ2V0KCkpKSwgcGxheWJpbk5hbWUpKSB7Ci0gICAgICAgICAgICBHU1Rf
SU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkFscmVhZHkgdXNpbmcgJXMiLCBwbGF5YmluTmFtZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQor
ICAgIGlmIChtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQpCisgICAgICAgIG1fdmlkZW9TaW5r
ID0gY3JlYXRlVmlkZW9TaW5rR0woKTsKKyNlbmRpZgogCi0gICAgICAgIEdTVF9JTkZPX09CSkVD
VChwaXBlbGluZSgpLCAiVGVhcmluZyBkb3duIGFzIHdlIG5lZWQgdG8gdXNlICVzIG5vdy4iLCBw
bGF5YmluTmFtZSk7Ci0gICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX05VTEwp
OwotICAgICAgICBtX3BpcGVsaW5lID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fdmlkZW9TaW5rKSB7
CisgICAgICAgIG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayA9IHRydWU7CisgICAgICAgIG1fdmlk
ZW9TaW5rID0gd2Via2l0VmlkZW9TaW5rTmV3KCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZChtX3ZpZGVvU2luay5nZXQoKSwgInJlcGFpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFD
SyhyZXBhaW50Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKG1fdmlkZW9TaW5rLmdldCgpLCAicmVwYWludC1jYW5jZWxsZWQiLCBHX0NBTExCQUNLKHJl
cGFpbnRDYW5jZWxsZWRDYWxsYmFjayksIHRoaXMpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9w
aXBlbGluZSk7CisgICAgR3N0RWxlbWVudCogdmlkZW9TaW5rID0gbnVsbHB0cjsKKyNpZiBFTkFC
TEUoTUVESUFfU1RBVElTVElDUykKKyAgICBtX2Zwc1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5
X21ha2UoImZwc2Rpc3BsYXlzaW5rIiwgInNpbmsiKTsKKyAgICBpZiAobV9mcHNTaW5rKSB7Cisg
ICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmsuZ2V0KCksICJzaWxlbnQiLCBUUlVFICwgbnVs
bHB0cik7CiAKLSAgICBtX2lzTGVnYWN5UGxheWJpbiA9ICFnX3N0cmNtcDAocGxheWJpbk5hbWUs
ICJwbGF5YmluIik7CisgICAgICAgIC8vIFR1cm4gb2ZmIHRleHQgb3ZlcmxheSB1bmxlc3MgdHJh
Y2luZyBpcyBlbmFibGVkLgorICAgICAgICBpZiAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJl
c2hvbGQod2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZykgPCBHU1RfTEVWRUxfVFJBQ0UpCisgICAg
ICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLmdldCgpLCAidGV4dC1vdmVybGF5IiwgRkFM
U0UgLCBudWxscHRyKTsKIAotICAgIC8vIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgpIHJldHVy
bnMgYSBmbG9hdGluZyByZWZlcmVuY2Ugc28KLSAgICAvLyB3ZSBzaG91bGQgbm90IGFkb3B0Lgot
ICAgIHN0YXRpYyBBdG9taWM8dWludDMyX3Q+IHBpcGVsaW5lSWQ7Ci0gICAgc2V0UGlwZWxpbmUo
Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKHBsYXliaW5OYW1lLAotICAgICAgICAocGlwZWxpbmVO
YW1lLmlzRW1wdHkoKSA/IG1ha2VTdHJpbmcoIm1lZGlhLXBsYXllci0iLCBwaXBlbGluZUlkLmV4
Y2hhbmdlQWRkKDEpKSA6IHBpcGVsaW5lTmFtZSkudXRmOCgpLmRhdGEoKSkpOwotICAgIHNldFN0
cmVhbVZvbHVtZUVsZW1lbnQoR1NUX1NUUkVBTV9WT0xVTUUobV9waXBlbGluZS5nZXQoKSkpOwor
ICAgICAgICBpZiAoZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9HRVRfQ0xB
U1MobV9mcHNTaW5rLmdldCgpKSwgInZpZGVvLXNpbmsiKSkgeworICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fZnBzU2luay5nZXQoKSwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2luay5nZXQoKSwg
bnVsbHB0cik7CisgICAgICAgICAgICB2aWRlb1NpbmsgPSBtX2Zwc1NpbmsuZ2V0KCk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9mcHNTaW5rID0gbnVsbHB0cjsKKyAgICB9CisjZW5k
aWYKIAotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiVXNpbmcgbGVnYWN5IHBsYXli
aW4gZWxlbWVudDogJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc0xlZ2FjeVBsYXliaW4pKTsKKyAg
ICBpZiAoIW1fZnBzU2luaykKKyAgICAgICAgdmlkZW9TaW5rID0gbV92aWRlb1NpbmsuZ2V0KCk7
CiAKLSAgICAvLyBMZXQgYWxzbyBvdGhlciBsaXN0ZW5lcnMgc3Vic2NyaWJlIHRvIChhcHBsaWNh
dGlvbikgbWVzc2FnZXMgaW4gdGhpcyBidXMuCi0gICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFk
b3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQo
KSkpKTsKLSAgICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbChidXMuZ2V0KCksIFJ1bkxv
b3BTb3VyY2VQcmlvcml0eTo6UnVuTG9vcERpc3BhdGNoZXIpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoYnVzLmdldCgpLCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0soYnVzTWVzc2FnZUNhbGxiYWNrKSwg
dGhpcyk7CisgICAgQVNTRVJUKHZpZGVvU2luayk7CiAKLSAgICBnX29iamVjdF9zZXQobV9waXBl
bGluZS5nZXQoKSwgIm11dGUiLCBtX3BsYXllci0+bXV0ZWQoKSwgbnVsbHB0cik7CisgICAgcmV0
dXJuIHZpZGVvU2luazsKK30KIAotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1NUX0JJTl9DQVNUKG1f
cGlwZWxpbmUuZ2V0KCkpLCAiZGVlcC1lbGVtZW50LWFkZGVkIiwgR19DQUxMQkFDSygrW10oR3N0
QmluKiwgR3N0QmluKiBzdWJCaW4sIEdzdEVsZW1lbnQqIGVsZW1lbnQsIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciogcGxheWVyKSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmluTmFt
ZShnc3RfZWxlbWVudF9nZXRfbmFtZShHU1RfRUxFTUVOVF9DQVNUKHN1YkJpbikpKTsKLSAgICAg
ICAgaWYgKCFnX3N0cl9oYXNfcHJlZml4KGJpbk5hbWUuZ2V0KCksICJkZWNvZGViaW4iKSkKLSAg
ICAgICAgICAgIHJldHVybjsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRT
dHJlYW1Wb2x1bWVFbGVtZW50KEdzdFN0cmVhbVZvbHVtZSogdm9sdW1lKQoreworICAgIEFTU0VS
VCghbV92b2x1bWVFbGVtZW50KTsKKyAgICBtX3ZvbHVtZUVsZW1lbnQgPSB2b2x1bWU7CiAKLSAg
ICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBlbGVtZW50TmFtZShnc3RfZWxlbWVudF9nZXRfbmFtZShl
bGVtZW50KSk7Ci0gICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KGVsZW1lbnROYW1lLmdldCgp
LCAidjRsMiIpKQotICAgICAgICAgICAgcGxheWVyLT5tX3ZpZGVvRGVjb2RlclBsYXRmb3JtID0g
R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OlZpZGVvNExpbnV4OwotICAgICAgICBlbHNlIGlmIChn
X3N0cl9oYXNfcHJlZml4KGVsZW1lbnROYW1lLmdldCgpLCAiaW14dnB1ZGVjIikpCi0gICAgICAg
ICAgICBwbGF5ZXItPm1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gPSBHc3RWaWRlb0RlY29kZXJQbGF0
Zm9ybTo6SW14VlBVOworICAgIC8vIFdlIGRvbid0IHNldCB0aGUgaW5pdGlhbCB2b2x1bWUgYmVj
YXVzZSB3ZSB0cnVzdCB0aGUgc2luayB0byBrZWVwIGl0IGZvciB1cy4gU2VlCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODk3NCBmb3IgbW9yZSBpbmZv
cm1hdGlvbi4KKyAgICBpZiAoIW1fcGxheWVyLT5wbGF0Zm9ybVZvbHVtZUNvbmZpZ3VyYXRpb25S
ZXF1aXJlZCgpKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRp
bmcgc3RyZWFtIHZvbHVtZSB0byAlZiIsIG1fcGxheWVyLT52b2x1bWUoKSk7CisgICAgICAgIGdz
dF9zdHJlYW1fdm9sdW1lX3NldF92b2x1bWUobV92b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RS
RUFNX1ZPTFVNRV9GT1JNQVRfTElORUFSLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1fcGxheWVyLT52
b2x1bWUoKSkpOworICAgIH0gZWxzZQorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJOb3Qgc2V0dGluZyBzdHJlYW0gdm9sdW1lLCB0cnVzdGluZyBzeXN0ZW0gb25lIik7CiAK
LSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgICAgIHBsYXllci0+dXBkYXRlVGV4dHVy
ZU1hcHBlckZsYWdzKCk7Ci0jZW5kaWYKLSAgICB9KSwgdGhpcyk7CisgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyBzdHJlYW0gbXV0ZWQgJXMiLCB0b1N0cmluZyhtX3Bs
YXllci0+bXV0ZWQoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgZ19vYmplY3Rfc2V0KG1fdm9sdW1l
RWxlbWVudC5nZXQoKSwgIm11dGUiLCBtX3BsYXllci0+bXV0ZWQoKSwgbnVsbHB0cik7CiAKLSAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgInNvdXJjZS1zZXR1
cCIsIEdfQ0FMTEJBQ0soc291cmNlU2V0dXBDYWxsYmFjayksIHRoaXMpOwotICAgIGlmIChtX2lz
TGVnYWN5UGxheWJpbikgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBl
bGluZS5nZXQoKSwgInZpZGVvLWNoYW5nZWQiLCBHX0NBTExCQUNLKHZpZGVvQ2hhbmdlZENhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5l
LmdldCgpLCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0soYXVkaW9DaGFuZ2VkQ2FsbGJhY2sp
LCB0aGlzKTsKLSAgICB9CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdm9sdW1lRWxl
bWVudC5nZXQoKSwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyh2b2x1bWVDaGFuZ2VkQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92b2x1bWVFbGVt
ZW50LmdldCgpLCAibm90aWZ5OjptdXRlIiwgR19DQUxMQkFDSyhtdXRlQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7Cit9CiAKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKG1faXNMZWdh
Y3lQbGF5YmluKQotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5n
ZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkZWNvZGVkRnJhbWVD
b3VudCgpIGNvbnN0Cit7CisgICAgZ3VpbnQ2NCBkZWNvZGVkRnJhbWVzID0gMDsKKyAgICBpZiAo
bV9mcHNTaW5rKQorICAgICAgICBnX29iamVjdF9nZXQobV9mcHNTaW5rLmdldCgpLCAiZnJhbWVz
LXJlbmRlcmVkIiwgJmRlY29kZWRGcmFtZXMsIG51bGxwdHIpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZGVjb2RlZEZyYW1lcyk7Cit9CiAKLSAgICBHc3RFbGVtZW50KiB0ZXh0
Q29tYmluZXIgPSB3ZWJraXRUZXh0Q29tYmluZXJOZXcoKTsKLSAgICBBU1NFUlQodGV4dENvbWJp
bmVyKTsKLSAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInRleHQtc3RyZWFtLWNv
bWJpbmVyIiwgdGV4dENvbWJpbmVyLCBudWxscHRyKTsKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6ZHJvcHBlZEZyYW1lQ291bnQoKSBjb25zdAoreworICAgIGd1aW50NjQg
ZnJhbWVzRHJvcHBlZCA9IDA7CisgICAgaWYgKG1fZnBzU2luaykKKyAgICAgICAgZ19vYmplY3Rf
Z2V0KG1fZnBzU2luay5nZXQoKSwgImZyYW1lcy1kcm9wcGVkIiwgJmZyYW1lc0Ryb3BwZWQsIG51
bGxwdHIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJhbWVzRHJvcHBlZCk7
Cit9CiAKLSAgICBtX3RleHRBcHBTaW5rID0gd2Via2l0VGV4dFNpbmtOZXcoKTsKLSAgICBBU1NF
UlQobV90ZXh0QXBwU2luayk7Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0Cit7CisgICAgR3N0UXVlcnkqIHF1ZXJ5ID0g
Z3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX0JZVEVTKTsKKyAgICBnaW50NjQgcG9z
aXRpb24gPSAwOwogCi0gICAgbV90ZXh0QXBwU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChtX3RleHRBcHBTaW5rLmdldCgpLCAic2luayIpKTsKLSAgICBBU1NF
UlQobV90ZXh0QXBwU2lua1BhZCk7CisgICAgaWYgKGF1ZGlvU2luaygpICYmIGdzdF9lbGVtZW50
X3F1ZXJ5KGF1ZGlvU2luaygpLCBxdWVyeSkpCisgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3Np
dGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKIAotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gdGV4dENh
cHM7Ci0gICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxNCwgMCkpCi0gICAgICAgIHRl
eHRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoImFwcGxpY2F0aW9u
L3gtc3VidGl0bGUtdnR0IikpOwotICAgIGVsc2UKLSAgICAgICAgdGV4dENhcHMgPSBhZG9wdEdS
ZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidGV4dC92dHQiKSk7Ci0gICAgZ19vYmplY3Rf
c2V0KG1fdGV4dEFwcFNpbmsuZ2V0KCksICJlbWl0LXNpZ25hbHMiLCBUUlVFLCAiZW5hYmxlLWxh
c3Qtc2FtcGxlIiwgRkFMU0UsICJjYXBzIiwgdGV4dENhcHMuZ2V0KCksIG51bGxwdHIpOwotICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3RleHRBcHBTaW5rLmdldCgpLCAibmV3LXNhbXBs
ZSIsIEdfQ0FMTEJBQ0sobmV3VGV4dFNhbXBsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ3N0X3F1
ZXJ5X3VucmVmKHF1ZXJ5KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvc2l0
aW9uKTsKK30KIAotICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidGV4dC1zaW5r
IiwgbV90ZXh0QXBwU2luay5nZXQoKSwgbnVsbHB0cik7Ci0jZW5kaWYKK3Vuc2lnbmVkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QKK3sK
KyAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRf
QllURVMpOworICAgIGdpbnQ2NCBwb3NpdGlvbiA9IDA7CiAKLSAgICBnX29iamVjdF9zZXQobV9w
aXBlbGluZS5nZXQoKSwgInZpZGVvLXNpbmsiLCBjcmVhdGVWaWRlb1NpbmsoKSwgImF1ZGlvLXNp
bmsiLCBjcmVhdGVBdWRpb1NpbmsoKSwgbnVsbHB0cik7CisgICAgaWYgKGdzdF9lbGVtZW50X3F1
ZXJ5KG1fdmlkZW9TaW5rLmdldCgpLCBxdWVyeSkpCisgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9w
b3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKIAotICAgIGNvbmZpZ3VyZVBsYXlTaW5rKCk7
CisgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHBvc2l0aW9uKTsKK30KIAotICAgIGlmIChtX3ByZXNlcnZlc1BpdGNoKSB7Ci0gICAg
ICAgIEdzdEVsZW1lbnQqIHNjYWxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJzY2FsZXRl
bXBvIiwgbnVsbHB0cik7CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0
RGF0YSYmIGluaXREYXRhKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAg
ICAgIGlmICghc2NhbGUpCi0gICAgICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNyZWF0
ZSBzY2FsZXRlbXBvIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldCht
X3BpcGVsaW5lLmdldCgpLCAiYXVkaW8tZmlsdGVyIiwgc2NhbGUsIG51bGxwdHIpOwotICAgIH0K
KyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERhdGEpXSB7CisgICAgICAgIGlmICghd2Vha1Ro
aXMpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fcmVuZGVyaW5nQ2FuQmVBY2Nl
bGVyYXRlZCkgewotICAgICAgICAvLyBJZiBub3QgdXNpbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRp
bmcsIGxldCBHU3RyZWFtZXIgaGFuZGxlCi0gICAgICAgIC8vIHRoZSBpbWFnZS1vcmllbnRhdGlv
biB0YWcuCi0gICAgICAgIEdzdEVsZW1lbnQqIHZpZGVvRmxpcCA9IGdzdF9lbGVtZW50X2ZhY3Rv
cnlfbWFrZSgidmlkZW9mbGlwIiwgbnVsbHB0cik7Ci0gICAgICAgIGlmICh2aWRlb0ZsaXApIHsK
LSAgICAgICAgICAgIGdfb2JqZWN0X3NldCh2aWRlb0ZsaXAsICJtZXRob2QiLCA4LCBudWxscHRy
KTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8tZmls
dGVyIiwgdmlkZW9GbGlwLCBudWxscHRyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBH
U1RfV0FSTklORygiVGhlIHZpZGVvZmxpcCBlbGVtZW50IGlzIG1pc3NpbmcsIHZpZGVvIHJvdGF0
aW9uIHN1cHBvcnQgaXMgbm93IGRpc2FibGVkLiBQbGVhc2UgY2hlY2sgeW91ciBnc3QtcGx1Z2lu
cy1nb29kIGluc3RhbGxhdGlvbi4iKTsKKyAgICAgICAgR1NUX0RFQlVHKCJzY2hlZHVsaW5nIGlu
aXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkIGV2ZW50IG9mIHNpemUgJXp1IiwgaW5pdERhdGEu
cGF5bG9hZCgpLT5zaXplKCkpOworICAgICAgICBHU1RfTUVNRFVNUCgiaW5pdCBkYXRhcyIsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGluaXREYXRhLnBheWxvYWQoKS0+ZGF0YSgp
KSwgaW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCkpOworICAgICAgICB3ZWFrVGhpcy0+bV9wbGF5
ZXItPmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKGluaXREYXRhLnBheWxvYWRDb250YWlu
ZXJUeXBlKCksIGluaXREYXRhLnBheWxvYWQoKS0+dHJ5Q3JlYXRlQXJyYXlCdWZmZXIoKSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjZG1JbnN0YW5j
ZUF0dGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5jZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworCisgICAgaWYgKG1fY2RtSW5zdGFuY2UgPT0gJmluc3RhbmNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fcGlwZWxpbmUpIHsKKyAgICAgICAgR1NUX0VSUk9SKCJubyBw
aXBlbGluZSB5ZXQiKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBHUmVmUHRyPEdzdFBhZD4gdmlkZW9TaW5rUGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fdmlkZW9TaW5rLmdldCgpLCAic2luayIp
KTsKLSAgICBpZiAodmlkZW9TaW5rUGFkKQotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBw
ZWQodmlkZW9TaW5rUGFkLmdldCgpLCAibm90aWZ5OjpjYXBzIiwgR19DQUxMQkFDSyh2aWRlb1Np
bmtDYXBzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgbV9jZG1JbnN0YW5jZSA9ICZpbnN0
YW5jZTsKKworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3Rf
Y29udGV4dF9uZXcoImRybS1jZG0taW5zdGFuY2UiLCBGQUxTRSkpOworICAgIEdzdFN0cnVjdHVy
ZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250
ZXh0LmdldCgpKTsKKyAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiY2Rt
LWluc3RhbmNlIiwgR19UWVBFX1BPSU5URVIsIG1fY2RtSW5zdGFuY2UtPnByb3h5Q0RNKCkuZ2V0
KCksIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1f
cGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgpKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIkNETSBwcm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNv
bnRleHQiLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdldCgpKTsKKworICAgIG1fY2RtQXR0
YWNobWVudFNlbWFwaG9yZS5zaWduYWwoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlRGV0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNl
KQogewotICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9z
dGF0ZShHU1RfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAg
ICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UobV9waXBlbGluZS5nZXQoKSwgbWVzc2FnZSk7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChtX2NkbUluc3RhbmNlICE9ICZp
bnN0YW5jZSkgeworICAgICAgICBHU1RfV0FSTklORygicGFzc2VkIENETUluc3RhbmNlICVwIGlz
IGRpZmZlcmVudCBmcm9tIHN0b3JlZCBvbmUgJXAiLCAmaW5zdGFuY2UsIG1fY2RtSW5zdGFuY2Uu
Z2V0KCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVChtX3BpcGVsaW5lKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgImRldGFjaGluZyBDRE0gaW5zdGFuY2UgJXAsIHNldHRpbmcgZW1w
dHkgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UuZ2V0KCkpOworICAgIG1fY2RtSW5zdGFuY2UgPSBu
dWxscHRyOworCisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdz
dF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNFKSk7CisgICAgZ3N0X2VsZW1l
bnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0
KCkpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkUGFzc0NPUlNB
Y2Nlc3NDaGVjaygpIGNvbnN0Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXR0
ZW1wdFRvRGVjcnlwdFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiB7Ci0gICAg
aWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIHdl
YktpdFNyY1Bhc3NlZENPUlNBY2Nlc3NDaGVjayhXRUJLSVRfV0VCX1NSQ19DQVNUKG1fc291cmNl
LmdldCgpKSk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChtX2NkbUluc3RhbmNlLmdl
dCgpID09ICZpbnN0YW5jZSk7CisgICAgR1NUX1RSQUNFKCJpbnN0YW5jZSAlcCwgY3VycmVudCBz
dG9yZWQgJXAiLCAmaW5zdGFuY2UsIG1fY2RtSW5zdGFuY2UuZ2V0KCkpOworICAgIGF0dGVtcHRU
b0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y2FuU2F2ZU1lZGlhRGF0YSgpIGNvbnN0Cit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCkKIHsKLSAg
ICBpZiAoaXNMaXZlU3RyZWFtKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIGV2
ZW50SGFuZGxlZCA9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQocGlwZWxpbmUoKSwgZ3N0X2V2ZW50
X25ld19jdXN0b20oR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwgZ3N0X3N0cnVjdHVy
ZV9uZXdfZW1wdHkoImF0dGVtcHQtdG8tZGVjcnlwdCIpKSk7CisgICAgR1NUX0RFQlVHKCJhdHRl
bXB0aW5nIHRvIGRlY3J5cHQsIGV2ZW50IGhhbmRsZWQgJXMiLCBib29sRm9yUHJpbnRpbmcoZXZl
bnRIYW5kbGVkKSk7Cit9CiAKLSAgICBpZiAobV91cmwuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlUHJv
dGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKK3sKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9jayhtX3Byb3RlY3Rpb25NdXRleCk7CisgICAgICAgIGlmIChtX2hhbmRsZWRQcm90ZWN0
aW9uRXZlbnRzLmNvbnRhaW5zKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQpKSkgeworICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZXZlbnQgJXUgYWxyZWFkeSBoYW5kbGVk
IiwgR1NUX0VWRU5UX1NFUU5VTShldmVudCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGV2
ZW50ICV1IGZyb20gTVNFIiwgR1NUX0VWRU5UX1NFUU5VTShldmVudCkpOworICAgIGNvbnN0IGNo
YXIqIGV2ZW50S2V5U3lzdGVtVVVJRCA9IG51bGxwdHI7CisgICAgR3N0QnVmZmVyKiBpbml0RGF0
YSA9IG51bGxwdHI7CisgICAgZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24oZXZlbnQsICZldmVu
dEtleVN5c3RlbVVVSUQsICZpbml0RGF0YSwgbnVsbHB0cik7CisgICAgaW5pdGlhbGl6YXRpb25E
YXRhRW5jb3VudGVyZWQoe2V2ZW50S2V5U3lzdGVtVVVJRCwgaW5pdERhdGF9KTsKK30KIAotICAg
IGlmIChtX3VybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
Owordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdhaXRpbmdGb3JLZXkoYm9v
bCB3YWl0aW5nRm9yS2V5KQoreworICAgIC8vIFdlIGJhaWwgb3V0IGlmIHZhbHVlcyBkaWQgbm90
IGNoYW5nZSBvciBpZiB3ZSBhcmUgcmVxdWVzdGVkIHRvIG5vdCB3YWl0IGFueW1vcmUgYnV0IHRo
ZXJlIGFyZSBzdGlsbCB3YWl0aW5nIGRlY3J5cHRvcnMuCisgICAgR1NUX1RSQUNFKCJ3YWl0aW5n
Rm9yS2V5ICVzLCBtX3dhaXRpbmdGb3JLZXkgJXMiLCBib29sRm9yUHJpbnRpbmcod2FpdGluZ0Zv
cktleSksIGJvb2xGb3JQcmludGluZyhtX3dhaXRpbmdGb3JLZXkpKTsKKyAgICBpZiAod2FpdGlu
Z0ZvcktleSA9PSBtX3dhaXRpbmdGb3JLZXkgfHwgKCF3YWl0aW5nRm9yS2V5ICYmIHRoaXMtPndh
aXRpbmdGb3JLZXkoKSkpCisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBmYWxzZTsKKyAg
ICBtX3dhaXRpbmdGb3JLZXkgPSB3YWl0aW5nRm9yS2V5OworICAgIEdTVF9ERUJVRygid2FpdGlu
ZyBmb3Iga2V5IGNoYW5nZWQgJXMiLCBib29sRm9yUHJpbnRpbmcobV93YWl0aW5nRm9yS2V5KSk7
CisgICAgbV9wbGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7CiB9CiAKLU9wdGlvbmFsPGJv
b2w+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d291bGRUYWludE9yaWdpbihjb25zdCBT
ZWN1cml0eU9yaWdpbiYgb3JpZ2luKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OndhaXRpbmdGb3JLZXkoKSBjb25zdAogewotICAgIGlmICh3ZWJraXRHc3RDaGVja1Zl
cnNpb24oMSwgMTIsIDApKSB7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwg
IkNoZWNraW5nICV1IG9yaWdpbnMiLCBtX29yaWdpbnMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChh
dXRvJiByZXNwb25zZU9yaWdpbiA6IG1fb3JpZ2lucykgewotICAgICAgICAgICAgaWYgKCFvcmln
aW4uY2FuQWNjZXNzKCpyZXNwb25zZU9yaWdpbikpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJGb3VuZCByZWFjaGFibGUgcmVzcG9uc2Ugb3JpZ2luIik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTm8gdmFsaWQgcmVzcG9uc2Ug
b3JpZ2luIGZvdW5kIik7CisgICAgaWYgKCFtX3BpcGVsaW5lKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQogCi0gICAgLy8gR1N0cmVhbWVyIDwgMS4xMiBoYXMgYW4gaW5jb21wbGV0ZSB1
cmlkb3dubG9hZGVyIGltcGxlbWVudGF0aW9uIHNvIHdlCi0gICAgLy8gY2FuJ3QgdXNlIFdlYktp
dFdlYlNyYyBmb3IgYWRhcHRpdmUgZnJhZ21lbnRzIGRvd25sb2FkaW5nIGlmIHRoaXMKLSAgICAv
LyB2ZXJzaW9uIGlzIGRldGVjdGVkLgotICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOwotICAgIHJl
dHVybiBtX2hhc1RhaW50ZWRPcmlnaW47CisgICAgR3N0U3RhdGUgc3RhdGU7CisgICAgZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7CisK
KyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0g
YWRvcHRHUmVmKGdzdF9xdWVyeV9uZXdfY3VzdG9tKEdTVF9RVUVSWV9DVVNUT00sIGdzdF9zdHJ1
Y3R1cmVfbmV3X2VtcHR5KCJhbnktZGVjcnlwdG9yLXdhaXRpbmctZm9yLWtleSIpKSk7CisgICAg
aWYgKHN0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpIHsKKyAgICAgICAgcmVzdWx0ID0gZ3N0X2Vs
ZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQoKSwgcXVlcnkuZ2V0KCkpOworICAgICAgICBHU1Rf
VFJBQ0UoInF1ZXJ5IHJlc3VsdCAlcywgb24gJXMiLCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSwg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpKTsKKyAgICB9IGVsc2UgaWYgKHN0YXRl
ID49IEdTVF9TVEFURV9SRUFEWSkgeworICAgICAgICAvLyBSdW5uaW5nIGEgcXVlcnkgaW4gdGhl
IHBpcGVsaW5lIGlzIGVhc2llciBidXQgaXQgb25seSB3b3JrcyB3aGVuIHRoZSBwaXBlbGluZSBp
cyBzZXQgdXAgYW5kIHJ1bm5pbmcsIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGluc3BlY3QgaXQgYW5k
IGFzayB0aGUgZGVjcnlwdG9ycyBkaXJlY3RseS4KKyAgICAgICAgR1VuaXF1ZVB0cjxHc3RJdGVy
YXRvcj4gaXRlcmF0b3IoZ3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2UoR1NUX0JJTihtX3BpcGVsaW5l
LmdldCgpKSkpOworICAgICAgICBHc3RJdGVyYXRvclJlc3VsdCBpdGVyYXRvclJlc3VsdDsKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgaXRlcmF0b3JSZXN1bHQgPSBnc3RfaXRlcmF0b3JfZm9s
ZChpdGVyYXRvci5nZXQoKSwgW10oY29uc3QgR1ZhbHVlICppdGVtLCBHVmFsdWUgKiwgZ3BvaW50
ZXIgZGF0YSkgLT4gZ2Jvb2xlYW4geworICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQqIGVsZW1l
bnQgPSBHU1RfRUxFTUVOVChnX3ZhbHVlX2dldF9vYmplY3QoaXRlbSkpOworICAgICAgICAgICAg
ICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IEdTVF9RVUVSWShkYXRhKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIVdFQktJVF9JU19NRURJQV9DRU5DX0RFQ1JZUFQoZWxlbWVudCkgfHwgIWdzdF9lbGVt
ZW50X3F1ZXJ5KGVsZW1lbnQsIHF1ZXJ5KTsKKyAgICAgICAgICAgIH0sIG51bGxwdHIsIHF1ZXJ5
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1Jf
UkVTWU5DKQorICAgICAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMoaXRlcmF0b3IuZ2V0
KCkpOworICAgICAgICB9IHdoaWxlIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfUkVT
WU5DKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9FUlJPUikK
KyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJpdGVyYXRvciByZXR1cm5lZCBhbiBlcnJvciIpOwor
ICAgICAgICByZXN1bHQgPSBpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfT0s7CisgICAg
ICAgIEdTVF9UUkFDRSgiaXRlcmF0b3IgcmVzdWx0ICVkLCB3YWl0aW5nICVzIiwgaXRlcmF0b3JS
ZXN1bHQsIGJvb2xGb3JQcmludGluZyhyZXN1bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorI2VuZGlmCisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBw
b3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKKyAgICByZXN1bHQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmlzQ2xlYXJLZXlL
ZXlTeXN0ZW0oa2V5U3lzdGVtKTsKKyNlbmRpZgorCisgICAgR1NUX0RFQlVHKCJjaGVja2luZyBm
b3IgS2V5U3lzdGVtIHN1cHBvcnQgd2l0aCAlcyBhbmQgdHlwZSAlczogJXMiLCBrZXlTeXN0ZW0u
dXRmOCgpLmRhdGEoKSwgbWltZVR5cGUudXRmOCgpLmRhdGEoKSwgYm9vbEZvclByaW50aW5nKHJl
c3VsdCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5
cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpleHRlbmRlZFN1cHBvcnRzVHlwZShjb25z
dCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBNZWRpYVBsYXllcjo6
U3VwcG9ydHNUeXBlIHJlc3VsdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocGFyYW1ldGVycyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oCmluZGV4IDUxMTMyNWU0OWZlMzM3OTlkZDBmNTUwYWE1NmQ4ZTk4ZDA2
Nzg1YWQuLjkzZDA4MWUwMDJiODk2NTYxYjRkMzBhYmMxZjNmZDNiZGNiMDhkN2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTIsOCArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTUsIDIw
MTYgSWdhbGlhIFMuTAotICogQ29weXJpZ2h0IChDKSAyMDE0IENhYmxlIFRlbGV2aXNpb24gTGFi
b3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTUsIDIwMTYg
SWdhbGlhIFMuTAogICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjcsMjQgKzI2LDc0IEBACiAjaWYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCi0jaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgotCisjaW5jbHVkZSAiR1N0
cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiTWFpblRocmVhZE5vdGlmaWVyLmgiCisj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0
L3BidXRpbHMvaW5zdGFsbC1wbHVnaW5zLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9y
ZS5oPgogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogI2luY2x1ZGUgIlRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogI2Vu
ZGlmCi0KIHR5cGVkZWYgc3RydWN0IF9Hc3RNcGVndHNTZWN0aW9uIEdzdE1wZWd0c1NlY3Rpb247
CiAKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorI2lmIFVTRShMSUJFUE9YWSkKKy8vIEluY2x1ZGUg
dGhlIDxlcG94eS9nbC5oPiBoZWFkZXIgYmVmb3JlIDxnc3QvZ2wvZ2wuaD4uCisjaW5jbHVkZSA8
ZXBveHkvZ2wuaD4KKworLy8gV29ya2Fyb3VuZCBidWlsZCBpc3N1ZSB3aXRoIFJQaSB1c2VybGFu
ZCBHTEVTdjIgaGVhZGVycyBhbmQgbGliZXBveHkgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE4NTYz
OT4KKyNpZiAhR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTQsIDApCisjaW5jbHVkZSA8Z3N0L2dsL2dz
dGdsY29uZmlnLmg+CisjaWYgZGVmaW5lZChHU1RfR0xfSEFWRV9XSU5ET1dfRElTUE1BTlgpICYm
IEdTVF9HTF9IQVZFX1dJTkRPV19ESVNQTUFOWAorI2RlZmluZSBfX2dsMl9oXworI3VuZGVmIEdT
VF9HTF9IQVZFX0dMU1lOQworI2RlZmluZSBHU1RfR0xfSEFWRV9HTFNZTkMgMQorI2VuZGlmCisj
ZW5kaWYgLy8gIUdTVF9DSEVDS19WRVJTSU9OKDEsIDE0LCAwKQorI2VuZGlmIC8vIFVTRShMSUJF
UE9YWSkKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC9nbC9n
bC5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjZW5kaWYKKworI2lmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpZiBVU0UoTklD
T1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIK
KyNlbHNlCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVy
LmgiCisjZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdz
dFN0cmVhbVZvbHVtZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0luZm8gR3N0VmlkZW9JbmZv
OwordHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7Cit0eXBlZGVmIHN0
cnVjdCBfR3N0R0xEaXNwbGF5IEdzdEdMRGlzcGxheTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBCaXRtYXBUZXh0dXJlR0w7CitjbGFzcyBHTENvbnRleHQ7CitjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEludFNpemU7CitjbGFz
cyBJbnRSZWN0OworY2xhc3MgVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyOworCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQorY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKIGNsYXNzIEF1ZGlvU291cmNlUHJv
dmlkZXI7CiBjbGFzcyBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOwpAQCAtNTYsMjAgKzEw
NSwyNyBAQCBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOwogY2xhc3MgTWVk
aWFQbGF5ZXJSZXF1ZXN0SW5zdGFsbE1pc3NpbmdQbHVnaW5zQ2FsbGJhY2s7CiBjbGFzcyBWaWRl
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjsKIAotI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi1jbGFz
cyBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQ7Ci0jZW5kaWYKK3ZvaWQgcmVnaXN0ZXJXZWJLaXRH
U3RyZWFtZXJFbGVtZW50cygpOwogCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIg
OiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSB7CisvLyBVc2UgZWFnZXIg
aW5pdGlhbGl6YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBzaW5jZSB3ZSBjYWxsIG1ha2VX
ZWFrUHRyKCkgZnJvbSBhbm90aGVyIHRocmVhZC4KK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lciA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIsIFdlYWtQdHJGYWN0b3J5SW5p
dGlhbGl6YXRpb246OkVhZ2VyPgorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpZiBVU0Uo
TklDT1NJQSkKKyAgICAsIHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Q2xpZW50CisjZWxzZQorICAgICwgcHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgor
I2VuZGlmCit7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKE1lZGlhUGxheWVyKik7CisgICAgc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKTsKKworICAgIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcihNZWRpYVBsYXllciopOwogICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcigpOwogCi0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShN
ZWRpYUVuZ2luZVJlZ2lzdHJhcik7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKLQot
ICAgIHZvaWQgaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKik7Ci0gICAgdm9pZCBoYW5kbGVQbHVn
aW5JbnN0YWxsZXJSZXN1bHQoR3N0SW5zdGFsbFBsdWdpbnNSZXR1cm4pOworICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwogCiAgICAgYm9v
bCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzVmlkZW87IH0KICAgICBi
b29sIGhhc0F1ZGlvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNBdWRpbzsgfQpAQCAt
ODcsNjMgKzE0MywzMDUgQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRvUGxheSgpIG92ZXJy
aWRlOwogICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGF1c2UoKSBvdmVycmlk
ZTsKLQogICAgIGJvb2wgcGF1c2VkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZWVraW5n
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBzZWVraW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9zZWVraW5nOyB9CisgICAgdm9pZCBzZWVrKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJy
aWRlOwogCiAgICAgTWVkaWFUaW1lIHBsYXRmb3JtRHVyYXRpb24oKSBjb25zdDsKLSAgICBNZWRp
YVRpbWUgZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBNZWRpYVRpbWUg
Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2Vlayhjb25zdCBN
ZWRpYVRpbWUmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0UmF0ZShmbG9hdCkgb3ZlcnJpZGU7
CiAgICAgZG91YmxlIHJhdGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHNldFByZXNlcnZl
c1BpdGNoKGJvb2wpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBzZXRQcmVsb2FkKE1lZGlhUGxheWVy
OjpQcmVsb2FkKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxUaW1lckZpcmVkKCk7CiAKKyAgICBG
bG9hdFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2V0Vm9sdW1l
KGZsb2F0KSBvdmVycmlkZTsKKyAgICBmbG9hdCB2b2x1bWUoKSBjb25zdCBvdmVycmlkZTsKKwor
I2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgYm9vbCBlbnN1cmVHc3RHTENvbnRleHQoKTsKKyAg
ICBHc3RDb250ZXh0KiByZXF1ZXN0R0xDb250ZXh0KGNvbnN0IGNoYXIqIGNvbnRleHRUeXBlKTsK
KyNlbmRpZgorICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgYm9vbCBtdXRl
ZCgpIGNvbnN0OworCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRl
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFZpc2libGUoYm9vbCkgb3ZlcnJpZGUg
eyB9CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNpemVDaGFuZ2VkKCk7CisKKyAgICAvLyBQcmVmZXIgTWVkaWFUaW1lIGJhc2VkIG1ldGhvZHMg
b3ZlciBmbG9hdCBiYXNlZC4KKworICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50b0Zsb2F0KCk7IH0KKyAgICBkb3VibGUgZHVy
YXRpb25Eb3VibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBkdXJhdGlvbk1lZGlhVGltZSgp
LnRvRG91YmxlKCk7IH0KKyAgICBNZWRpYVRpbWUgZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGN1cnJlbnRNZWRpYVRpbWUoKS50b0Zsb2F0KCk7IH0KKyAgICBkb3VibGUgY3VycmVudFRpbWVE
b3VibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjdXJyZW50TWVkaWFUaW1lKCkudG9Eb3Vi
bGUoKTsgfQorICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2b2lkIHNlZWsoZmxvYXQgdGltZSkgb3ZlcnJpZGUgeyBzZWVrKE1l
ZGlhVGltZTo6Y3JlYXRlV2l0aEZsb2F0KHRpbWUpKTsgfQorICAgIHZvaWQgc2Vla0RvdWJsZShk
b3VibGUgdGltZSkgb3ZlcnJpZGUgeyBzZWVrKE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSh0
aW1lKSk7IH0KKworICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1heE1lZGlhVGltZVNlZWthYmxlKCkudG9GbG9hdCgpOyB9CiAgICAgTWVkaWFUaW1l
IG1heE1lZGlhVGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgZG91YmxlIG1pblRp
bWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1pbk1lZGlhVGltZVNlZWthYmxl
KCkudG9GbG9hdCgpOyB9CisgICAgTWVkaWFUaW1lIG1pbk1lZGlhVGltZVNlZWthYmxlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9CisKICAgICBib29s
IGRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbEJ5dGVzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgTWVkaWFUaW1lIG1heFRpbWVM
b2FkZWQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmln
aW4oKSBjb25zdCBvdmVycmlkZTsKICAgICBPcHRpb25hbDxib29sPiB3b3VsZFRhaW50T3JpZ2lu
KGNvbnN0IFNlY3VyaXR5T3JpZ2luJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGxvYWRT
dGF0ZUNoYW5nZWQoKTsKLSAgICB2b2lkIHRpbWVDaGFuZ2VkKCk7Ci0gICAgdm9pZCBkaWRFbmQo
KTsKKyAgICB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKSBvdmVycmlkZTsKKworI2lm
IEVOQUJMRShXRUJfQVVESU8pCisgICAgQXVkaW9Tb3VyY2VQcm92aWRlciogYXVkaW9Tb3VyY2VQ
cm92aWRlcigpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgYm9vbCBzdXBwb3J0c0Z1
bGxzY3JlZW4oKSBjb25zdCBvdmVycmlkZTsKKworICAgIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRU
eXBlIG1vdmllTG9hZFR5cGUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE1lZGlhUGxheWVyKiBt
ZWRpYVBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyOyB9CisKKyAgICB1bnNpZ25lZCBk
ZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGRyb3BwZWRG
cmFtZUNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0
ZUNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgdmlkZW9EZWNvZGVkQnl0ZUNv
dW50KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3Rh
dGVDaGFuZ2VkKCkgb3ZlcnJpZGU7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworI2lmIFBMQVRG
T1JNKFdJTl9DQUlSTykKKyAgICAvLyBGSVhNRTogQWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGhhcyBu
b3QgYmVlbiBpbXBsZW1lbnRlZCBmb3IgV2luQ2Fpcm8geWV0LgorICAgIGJvb2wgc3VwcG9ydHNB
Y2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisj
ZWxzZQorICAgIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKQorICAgIHZvaWQgY2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYpIG92
ZXJyaWRlOworICAgIHZvaWQgY2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYpIG92ZXJy
aWRlOworICAgIHZvaWQgaGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50Kik7CisgICAgdmly
dHVhbCB2b2lkIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOworICAgIHZvaWQg
YXR0ZW1wdFRvRGVjcnlwdFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYpIGZpbmFsOworICAgIHZv
aWQgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7CisgICAgdm9pZCBz
ZXRXYWl0aW5nRm9yS2V5KGJvb2wpOworICAgIGJvb2wgd2FpdGluZ0ZvcktleSgpIGNvbnN0IG92
ZXJyaWRlOworI2VuZGlmCisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0tleVN5c3RlbShjb25z
dCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgc3RhdGlj
IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgZXh0ZW5kZWRTdXBwb3J0c1R5cGUoY29uc3QgTWVk
aWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYsIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUpOwor
CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRm
b3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVt
LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBib29sLCBib29sKSBvdmVy
cmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkgb3Zl
cnJpZGU7CisjZW5kaWYKKworICAgIHZvaWQgc2V0VmlkZW9Tb3VyY2VPcmllbnRhdGlvbihJbWFn
ZU9yaWVudGF0aW9uKTsKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGlwZWxpbmUuZ2V0KCk7IH0KKyAgICB2b2lkIGVuYWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgdW5zaWduZWQgaW5kZXgpOworCisgICAgLy8gQXBwZW5k
IHBpcGVsaW5lIGludGVyZmFjZQorICAgIGJvb2wgaGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2Fn
ZSopOworICAgIHZvaWQgaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKik7CisKK3Byb3RlY3RlZDoK
KyAgICBlbnVtIE1haW5UaHJlYWROb3RpZmljYXRpb24geworICAgICAgICBWaWRlb0NoYW5nZWQg
PSAxIDw8IDAsCisgICAgICAgIFZpZGVvQ2Fwc0NoYW5nZWQgPSAxIDw8IDEsCisgICAgICAgIEF1
ZGlvQ2hhbmdlZCA9IDEgPDwgMiwKKyAgICAgICAgVm9sdW1lQ2hhbmdlZCA9IDEgPDwgMywKKyAg
ICAgICAgTXV0ZUNoYW5nZWQgPSAxIDw8IDQsCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
ICAgICBUZXh0Q2hhbmdlZCA9IDEgPDwgNSwKKyNlbmRpZgorICAgICAgICBTaXplQ2hhbmdlZCA9
IDEgPDwgNiwKKyAgICAgICAgU3RyZWFtQ29sbGVjdGlvbkNoYW5nZWQgPSAxIDw8IDcKKyAgICB9
OworCisgICAgdmlydHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIG1faXNT
dHJlYW1pbmc7IH0KKyAgICBNZWRpYVRpbWUgbWF4VGltZUxvYWRlZCgpIGNvbnN0OworCiAgICAg
dmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VT
ZXR1cChHc3RFbGVtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGNvbmZpZ3VyZVBsYXlTaW5rKCkg
eyB9CisgICAgdmlydHVhbCBib29sIGNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUpOworCisK
KyNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKKyAgICBHc3RFbGVtZW50KiBjcmVhdGVIb2xl
UHVuY2hWaWRlb1NpbmsoKTsKKyAgICB2b2lkIHB1c2hOZXh0SG9sZVB1bmNoQnVmZmVyKCk7Cisg
ICAgYm9vbCBzaG91bGRJZ25vcmVJbnRyaW5zaWNTaXplKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQorI2VuZGlmCisKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIHN0YXRpYyBHc3RGbG93UmV0
dXJuIG5ld1NhbXBsZUNhbGxiYWNrKEdzdEVsZW1lbnQqLCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqKTsKKyAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdQcmVyb2xsQ2FsbGJhY2soR3N0
RWxlbWVudCosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworICAgIHZvaWQgZmx1c2hD
dXJyZW50QnVmZmVyKCk7CisgICAgR3N0RWxlbWVudCogY3JlYXRlR0xBcHBTaW5rKCk7CisgICAg
R3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rR0woKTsKKyAgICBHc3RHTENvbnRleHQqIGdzdEdM
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xDb250ZXh0LmdldCgpOyB9CisgICAgR3N0R0xE
aXNwbGF5KiBnc3RHTERpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX2dsRGlzcGxheS5nZXQoKTsg
fQorICAgIHZvaWQgZW5zdXJlR0xWaWRlb1NpbmtDb250ZXh0KCk7CisjZW5kaWYKKworI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKKyAgICB2b2lkIHB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJp
ZGU7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBw
cm94eSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92
ZXJyaWRlOworI2VuZGlmCisjZW5kaWYKKworICAgIEdzdEVsZW1lbnQqIHZpZGVvU2luaygpIGNv
bnN0IHsgcmV0dXJuIG1fdmlkZW9TaW5rLmdldCgpOyB9CisKKyAgICB2b2lkIHNldFN0cmVhbVZv
bHVtZUVsZW1lbnQoR3N0U3RyZWFtVm9sdW1lKik7CisKKyAgICB2b2lkIHNldFBpcGVsaW5lKEdz
dEVsZW1lbnQqKTsKKworICAgIHZvaWQgdHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxlKik7CisgICAg
dm9pZCByZXBhaW50KCk7CisgICAgdm9pZCBjYW5jZWxSZXBhaW50KGJvb2wgZGVzdHJveWluZyA9
IGZhbHNlKTsKKworICAgIHN0YXRpYyB2b2lkIHJlcGFpbnRDYWxsYmFjayhNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIqLCBHc3RTYW1wbGUqKTsKKyAgICBzdGF0aWMgdm9pZCByZXBhaW50Q2Fu
Y2VsbGVkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisKKyAgICB2b2lk
IG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7CisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZk11
dGUoKTsKKworICAgIHN0YXRpYyB2b2lkIHZvbHVtZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBtdXRlQ2hhbmdlZENhbGxiYWNr
KE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworCisgICAgLy8gRklYTUU6IFdoZXJlIGlz
IHRoaXMgdXNlZD8KKyAgICB2b2lkIGhhbmRsZVBsdWdpbkluc3RhbGxlclJlc3VsdChHc3RJbnN0
YWxsUGx1Z2luc1JldHVybik7CisKKyAgICB2b2lkIHJlYWR5VGltZXJGaXJlZCgpOworCisgICAg
dm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVvKCk7CisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVv
Q2FwcygpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZBdWRpbygpOworCisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZUZXh0KCk7CisgICAgdm9pZCBuZXdU
ZXh0U2FtcGxlKCk7CisjZW5kaWYKKworICAgIHZvaWQgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRl
cigpOworICAgIHZvaWQgc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzKEdPYmplY3QqKTsKKworICAg
IHN0YXRpYyB2b2lkIHNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciosIEdPYmplY3QqKTsKKworICAgIHN0YXRpYyB2b2lkIHNvdXJjZVNl
dHVwQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiwgR3N0RWxlbWVudCopOwor
ICAgIHN0YXRpYyB2b2lkIHZpZGVvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lciopOworICAgIHN0YXRpYyB2b2lkIHZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2so
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisgICAgc3RhdGljIHZvaWQgYXVkaW9DaGFu
Z2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgIHN0YXRpYyB2b2lkIHRleHRDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyKik7CisgICAgc3RhdGljIEdzdEZsb3dSZXR1cm4gbmV3VGV4dFNh
bXBsZUNhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworI2VuZGlmCisKKyAg
ICB2b2lkIHRpbWVDaGFuZ2VkKCk7CiAgICAgdm9pZCBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6Okhh
dmVOb3RoaW5nLCBib29sIGZvcmNlTm90aWZpY2F0aW9ucyA9IGZhbHNlKTsKKyAgICB2b2lkIGxv
YWRTdGF0ZUNoYW5nZWQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VTZXR1cChHc3RFbGVt
ZW50Kik7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHZvaWQgdXBkYXRlVGV4dHVy
ZU1hcHBlckZsYWdzKCk7CisjZW5kaWYKIAotICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2luaygpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb25maWd1cmVQbGF5U2luaygpIHsgfQor
ICAgIFJlZjxNYWluVGhyZWFkTm90aWZpZXI8TWFpblRocmVhZE5vdGlmaWNhdGlvbj4+IG1fbm90
aWZpZXI7CisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIG11dGFibGUgTWVkaWFUaW1l
IG1fY2FjaGVkUG9zaXRpb247CisgICAgbXV0YWJsZSBNZWRpYVRpbWUgbV9jYWNoZWREdXJhdGlv
bjsKKyAgICBib29sIG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbiB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2NoYW5naW5nUmF0ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2Rv
d25sb2FkRmluaXNoZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9lcnJvck9jY3VyZWQgeyBmYWxz
ZSB9OworICAgIG11dGFibGUgYm9vbCBtX2lzRW5kUmVhY2hlZCB7IGZhbHNlIH07CisgICAgbXV0
YWJsZSBib29sIG1faXNTdHJlYW1pbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wYXVzZWQgeyB0
cnVlIH07CisgICAgZmxvYXQgbV9wbGF5YmFja1JhdGUgeyAxIH07CisgICAgR3N0U3RhdGUgbV9j
dXJyZW50U3RhdGU7CisgICAgR3N0U3RhdGUgbV9vbGRTdGF0ZTsKKyAgICBHc3RTdGF0ZSBtX3Jl
cXVlc3RlZFN0YXRlIHsgR1NUX1NUQVRFX1ZPSURfUEVORElORyB9OworICAgIGJvb2wgbV9yZXNl
dFBpcGVsaW5lIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2Vla2luZyB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3NlZWtJc1BlbmRpbmcgeyBmYWxzZSB9OworICAgIE1lZGlhVGltZSBtX3NlZWtUaW1l
OworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zb3VyY2UgeyBudWxscHRyIH07CisgICAgYm9v
bCBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCB7IGZhbHNlIH07CiAKLSAgICB2b2lkIHNpbXVs
YXRlQXVkaW9JbnRlcnJ1cHRpb24oKSBvdmVycmlkZTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpCisgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX3RleHR1cmVNYXBwZXJGbGFnczsKKyNl
bmRpZgogCi0gICAgdmlydHVhbCBib29sIGNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUpOwor
ICAgIEdSZWZQdHI8R3N0U3RyZWFtVm9sdW1lPiBtX3ZvbHVtZUVsZW1lbnQ7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX3ZpZGVvU2luazsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGlw
ZWxpbmU7CisgICAgSW50U2l6ZSBtX3NpemU7CiAKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAg
IEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKSBvdmVycmlkZTsKKyAg
ICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGUgeyBNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmcgfTsKKyAgICBtdXRhYmxlIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3
b3JrU3RhdGUgeyBNZWRpYVBsYXllcjo6RW1wdHkgfTsKKworICAgIG11dGFibGUgTG9jayBtX3Nh
bXBsZU11dGV4OworICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBtX3NhbXBsZTsKKworICAgIG11dGFi
bGUgRmxvYXRTaXplIG1fdmlkZW9TaXplOworICAgIGJvb2wgbV91c2luZ0ZhbGxiYWNrVmlkZW9T
aW5rIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCB7IGZh
bHNlIH07CisKKyAgICBib29sIG1fZGVzdHJveWluZyB7IGZhbHNlIH07CisKKyNpZiBVU0UoR1NU
UkVBTUVSX0dMKQorICAgIEdSZWZQdHI8R3N0R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKKyAgICBH
UmVmUHRyPEdzdEdMRGlzcGxheT4gbV9nbERpc3BsYXk7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0
PiBtX2dsRGlzcGxheUVsZW1lbnRDb250ZXh0OworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gbV9n
bEFwcEVsZW1lbnRDb250ZXh0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxWaWRlb1RleHR1cmVDb3Bp
ZXJHU3RyZWFtZXI+IG1fdmlkZW9UZXh0dXJlQ29waWVyOworCisgICAgR1JlZlB0cjxHc3RHTENv
bG9yQ29udmVydD4gbV9jb2xvckNvbnZlcnQ7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBtX2NvbG9y
Q29udmVydElucHV0Q2FwczsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fY29sb3JDb252ZXJ0T3V0
cHV0Q2FwczsKICNlbmRpZgogCi0gICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2lzU3RyZWFtaW5nOyB9CisgICAgSW1hZ2VPcmllbnRhdGlvbiBtX3ZpZGVv
U291cmNlT3JpZW50YXRpb247CiAKLSAgICB2b2lkIGVuYWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgdW5zaWduZWQgaW5kZXgpOworI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCisgICAgQmluYXJ5U2VtYXBob3JlIG1fY2RtQXR0YWNobWVudFNlbWFwaG9y
ZTsKKyAgICBSZWZQdHI8Y29uc3QgQ0RNSW5zdGFuY2U+IG1fY2RtSW5zdGFuY2U7CisKKyAgICBM
b2NrIG1fcHJvdGVjdGlvbk11dGV4OyAvLyBHdWFyZHMgYWNjZXNzIHRvIG1faGFuZGxlZFByb3Rl
Y3Rpb25FdmVudHMuCisgICAgSGFzaFNldDx1aW50MzJfdD4gbV9oYW5kbGVkUHJvdGVjdGlvbkV2
ZW50czsKKworICAgIGJvb2wgbV93YWl0aW5nRm9yS2V5IHsgZmFsc2UgfTsKKyNlbmRpZgogCi0g
ICAgYm9vbCBoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKikgb3ZlcnJpZGU7CisgICAgT3B0
aW9uYWw8R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm0+IG1fdmlkZW9EZWNvZGVyUGxhdGZvcm07CiAK
IHByaXZhdGU6CisgICAgdm9pZCBmaWxsVGltZXJGaXJlZCgpOworCisgICAgdm9pZCBkaWRFbmQo
KTsKKworCisgICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKCk7CisgICAgR3N0RWxlbWVu
dCogY3JlYXRlQXVkaW9TaW5rKCk7CisgICAgR3N0RWxlbWVudCogYXVkaW9TaW5rKCkgY29uc3Q7
CisKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYpOwogICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9y
dHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7
CiAgICAgdm9pZCBzeW5jT25DbG9jayhib29sIHN5bmMpOwogCi0gICAgR3N0RWxlbWVudCogY3Jl
YXRlQXVkaW9TaW5rKCkgb3ZlcnJpZGU7Ci0KICAgICBNZWRpYVRpbWUgcGxheWJhY2tQb3NpdGlv
bigpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlcygpOwpAQCAtMTg4LDgx
ICs0ODYsNDIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVRyYWNrcygpOwogICAgIHZvaWQg
Y2xlYXJUcmFja3MoKTsKIAotcHJvdGVjdGVkOgotICAgIGJvb2wgbV9idWZmZXJpbmc7Ci0gICAg
aW50IG1fYnVmZmVyaW5nUGVyY2VudGFnZTsKLSAgICBtdXRhYmxlIE1lZGlhVGltZSBtX2NhY2hl
ZFBvc2l0aW9uOwotICAgIG11dGFibGUgTWVkaWFUaW1lIG1fY2FjaGVkRHVyYXRpb247Ci0gICAg
Ym9vbCBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb247Ci0gICAgYm9vbCBt
X2NoYW5naW5nUmF0ZTsKLSAgICBib29sIG1fZG93bmxvYWRGaW5pc2hlZDsKLSAgICBib29sIG1f
ZXJyb3JPY2N1cmVkOwotICAgIG11dGFibGUgYm9vbCBtX2lzRW5kUmVhY2hlZDsKLSAgICBtdXRh
YmxlIGJvb2wgbV9pc1N0cmVhbWluZzsKLSAgICBib29sIG1fcGF1c2VkOwotICAgIGZsb2F0IG1f
cGxheWJhY2tSYXRlOwotICAgIEdzdFN0YXRlIG1fY3VycmVudFN0YXRlOwotICAgIEdzdFN0YXRl
IG1fb2xkU3RhdGU7Ci0gICAgR3N0U3RhdGUgbV9yZXF1ZXN0ZWRTdGF0ZTsKLSAgICBib29sIG1f
cmVzZXRQaXBlbGluZTsKLSAgICBib29sIG1fc2Vla2luZzsKLSAgICBib29sIG1fc2Vla0lzUGVu
ZGluZzsKLSAgICBNZWRpYVRpbWUgbV9zZWVrVGltZTsKLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fc291cmNlOwotICAgIGJvb2wgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQ7Ci0KLSAgICB2
b2lkIHJlYWR5VGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVvKCk7
Ci0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpOwotICAgIHZvaWQgbm90aWZ5UGxh
eWVyT2ZBdWRpbygpOwotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIHZvaWQgbm90aWZ5
UGxheWVyT2ZUZXh0KCk7Ci0gICAgdm9pZCBuZXdUZXh0U2FtcGxlKCk7Ci0jZW5kaWYKLQotICAg
IHZvaWQgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRlcigpOwotICAgIHZvaWQgc2V0QXVkaW9TdHJl
YW1Qcm9wZXJ0aWVzKEdPYmplY3QqKTsKLQotICAgIHN0YXRpYyB2b2lkIHNldEF1ZGlvU3RyZWFt
UHJvcGVydGllc0NhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciosIEdPYmplY3Qq
KTsKLQotICAgIHN0YXRpYyB2b2lkIHNvdXJjZVNldHVwQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKiwgR3N0RWxlbWVudCopOwotICAgIHN0YXRpYyB2b2lkIHZpZGVvQ2hhbmdl
ZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwotICAgIHN0YXRpYyB2b2lk
IHZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Kik7Ci0gICAgc3RhdGljIHZvaWQgYXVkaW9DaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKik7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIHN0YXRpYyB2b2lk
IHRleHRDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7Ci0gICAg
c3RhdGljIEdzdEZsb3dSZXR1cm4gbmV3VGV4dFNhbXBsZUNhbGxiYWNrKE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciopOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0KICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3RleHRBcHBTaW5rOwogICAgIEdSZWZQ
dHI8R3N0UGFkPiBtX3RleHRBcHBTaW5rUGFkOwogI2VuZGlmCi0gICAgR3N0U3RydWN0dXJlKiBt
X21lZGlhTG9jYXRpb25zOwotICAgIGludCBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXg7Ci0g
ICAgYm9vbCBtX3BsYXliYWNrUmF0ZVBhdXNlOworICAgIEdzdFN0cnVjdHVyZSogbV9tZWRpYUxv
Y2F0aW9ucyB7IG51bGxwdHIgfTsKKyAgICBpbnQgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4
IHsgMCB9OworICAgIGJvb2wgbV9wbGF5YmFja1JhdGVQYXVzZSB7IGZhbHNlIH07CiAgICAgTWVk
aWFUaW1lIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrOwotICAgIGZsb2F0IG1fbGFzdFBsYXliYWNr
UmF0ZTsKKyAgICBmbG9hdCBtX2xhc3RQbGF5YmFja1JhdGUgeyAxIH07CiAgICAgVGltZXIgbV9m
aWxsVGltZXI7CiAgICAgTWVkaWFUaW1lIG1fbWF4VGltZUxvYWRlZDsKICAgICBib29sIG1fbG9h
ZGluZ1N0YWxsZWQgeyBmYWxzZSB9OwogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIG1fcHJlbG9h
ZDsKLSAgICBib29sIG1fZGVsYXlpbmdMb2FkOworICAgIGJvb2wgbV9kZWxheWluZ0xvYWQgeyBm
YWxzZSB9OwogICAgIG11dGFibGUgTWVkaWFUaW1lIG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExv
YWRpbmdQcm9ncmVzczsKLSAgICBib29sIG1faGFzVmlkZW87Ci0gICAgYm9vbCBtX2hhc0F1ZGlv
OworICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0F1ZGlvIHsg
ZmFsc2UgfTsKKyAgICBDb25kaXRpb24gbV9kcmF3Q29uZGl0aW9uOworICAgIExvY2sgbV9kcmF3
TXV0ZXg7CisgICAgUnVuTG9vcDo6VGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiBt
X2RyYXdUaW1lcjsKICAgICBSdW5Mb29wOjpUaW1lcjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI+IG1fcmVhZHlUaW1lckhhbmRsZXI7Ci0gICAgbXV0YWJsZSB1bnNpZ25lZCBsb25nIGxvbmcg
bV90b3RhbEJ5dGVzOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpZiBVU0UoTklDT1NJ
QSkKKyAgICBSZWY8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNl
CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1M
YXllclByb3h5OworI2VuZGlmCisjZW5kaWYKKyAgICBib29sIG1fYnVmZmVyaW5nIHsgZmFsc2Ug
fTsKKyAgICBpbnQgbV9idWZmZXJpbmdQZXJjZW50YWdlIHsgMCB9OworICAgIG11dGFibGUgdW5z
aWduZWQgbG9uZyBsb25nIG1fdG90YWxCeXRlcyB7IDAgfTsKICAgICBVUkwgbV91cmw7Ci0gICAg
Ym9vbCBtX3ByZXNlcnZlc1BpdGNoOworICAgIGJvb2wgbV9wcmVzZXJ2ZXNQaXRjaCB7IGZhbHNl
IH07CiAgICAgbXV0YWJsZSBPcHRpb25hbDxTZWNvbmRzPiBtX2xhc3RRdWVyeVRpbWU7CiAgICAg
Ym9vbCBtX2lzTGVnYWN5UGxheWJpbjsKICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+
IG1fc3RyZWFtQ29sbGVjdGlvbjsKLSAgICBGbG9hdFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCBm
aW5hbDsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVBy
aXZhdGU+IG1fc3RyZWFtUHJpdmF0ZTsKICNlbmRpZgpAQCAtMjkyLDggKzU1MSwxMiBAQCBwcml2
YXRlOgogCiAgICAgSGFzaFNldDxSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+PiBtX29y
aWdpbnM7CiAgICAgT3B0aW9uYWw8Ym9vbD4gbV9oYXNUYWludGVkT3JpZ2luIHsgV1RGOjpudWxs
b3B0IH07CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZnBzU2luayB7IG51bGxwdHIgfTsK
KworICAgIC8vIEZJWE1FOiBtb3ZlIG1vcmUgb2YgdGhlIHB1YmxpYyBtZW1iZXJzIHRvIHByb3Rl
Y3RlZC9wcml2YXRlLCBubyB3aGVyZQorICAgIC8vIG5lYXIgdGhhdCBtYW55IG5lZWQgdG8gYmUg
ZXhwb3NlZC4KIH07CiAKIH0KLQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCisjZW5kaWYgLy8g
RU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4OTJkY2Q2ZjYwMWQ2NTQ1ODAwMjVlNzM2MDUzMjA5ZjU4MjY2MTA3Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwLCAyMDE1LCAyMDE2IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAo
QykgMjAxNSwgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgiCi0KLSNpZiBFTkFC
TEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCi0KLSNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24u
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZUdTdHJlYW1l
ci5oIgotI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKLSNpbmNsdWRlICJJbnRSZWN0Lmgi
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKLSNp
bmNsdWRlICJXZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaCIKLSNpbmNsdWRlIDx3dGYvZ2xpYi9H
VW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1
ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVh
bXZvbHVtZS5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KLQotI2lmIEVO
QUJMRShFTkNSWVBURURfTUVESUEpCi0jaW5jbHVkZSAiQ0RNSW5zdGFuY2UuaCIKLSNpbmNsdWRl
ICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNp
bmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCi0jZW5k
aWYKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0jZGVmaW5lIFRFWFRVUkVfQ09QSUVSX0NPTE9S
X0NPTlZFUlRfRkxBRyBWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI6OkNvbG9yQ29udmVyc2lv
bjo6Tm9Db252ZXJ0Ci0jZGVmaW5lIEdTVF9HTF9DQVBTX0ZPUk1BVCAieyBSR0J4LCBSR0JBLCBJ
NDIwLCBZNDQ0LCBZVjEyLCBZNDFCLCBZNDJCLCBOVjEyLCBOVjIxLCBWVVlBIH0iCi0KLSNpbmNs
dWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KLQotI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2lm
IFVTRShHTFgpCi0jaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCi0jaW5jbHVkZSA8Z3N0L2dsL3gx
MS9nc3RnbGRpc3BsYXlfeDExLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShFR0wpCi0jaW5jbHVkZSAi
R0xDb250ZXh0RUdMLmgiCi0jaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmg+
Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFgxMSkKLSNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlY
MTEuaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0FZTEFORCkKLSNpbmNsdWRlICJQbGF0Zm9y
bURpc3BsYXlXYXlsYW5kLmgiCi0jZW5kaWYKLQotI2lmIFVTRShXUEVfUkVOREVSRVIpCi0jaW5j
bHVkZSAiUGxhdGZvcm1EaXNwbGF5TGliV1BFLmgiCi0jZW5kaWYKLQotLy8gZ3N0Z2xhcGkuaCBt
YXkgaW5jbHVkZSBlZ2xwbGF0Zm9ybS5oIGFuZCBpdCBpbmNsdWRlcyBYLmgsIHdoaWNoCi0vLyBk
ZWZpbmVzIE5vbmUsIGJyZWFraW5nIE1lZGlhUGxheWVyOjpOb25lIGVudW0KLSNpZiBQTEFURk9S
TShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAotI3VuZGVmIE5vbmUKLSNlbmRpZiAv
LyBQTEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAotI2luY2x1ZGUgIlZp
ZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5oIgotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wp
Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0jaW5jbHVkZSAiQml0bWFwVGV4dHVyZUdM
LmgiCi0jaW5jbHVkZSAiQml0bWFwVGV4dHVyZVBvb2wuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyQ29udGV4dEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllckJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHku
aCIKLSNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5j
bHVkZSA8Y2Fpcm8tZ2wuaD4KLSNlbmRpZgotI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9H
TCkKLQotR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcpOwotI2Rl
ZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZwotCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLSNpZiBVU0UoR1NUUkVBTUVS
X0hPTEVQVU5DSCkKLXN0YXRpYyBjb25zdCBGbG9hdFNpemUgc19ob2xlUHVuY2hEZWZhdWx0RnJh
bWVTaXplKDEyODAsIDcyMCk7Ci0jZW5kaWYKLQotc3RhdGljIGludCBncmVhdGVzdENvbW1vbkRp
dmlzb3IoaW50IGEsIGludCBiKQotewotICAgIHdoaWxlIChiKSB7Ci0gICAgICAgIGludCB0ZW1w
ID0gYTsKLSAgICAgICAgYSA9IGI7Ci0gICAgICAgIGIgPSB0ZW1wICUgYjsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gQUJTKGEpOwotfQotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotY2xhc3Mg
R3N0VmlkZW9GcmFtZUhvbGRlciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1
ZmZlcjo6VW5tYW5hZ2VkQnVmZmVyRGF0YUhvbGRlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
R3N0VmlkZW9GcmFtZUhvbGRlcihHc3RTYW1wbGUqIHNhbXBsZSwgT3B0aW9uYWw8R3N0VmlkZW9E
ZWNvZGVyUGxhdGZvcm0+IHZpZGVvRGVjb2RlclBsYXRmb3JtLCBUZXh0dXJlTWFwcGVyR0w6OkZs
YWdzIGZsYWdzLCBib29sIGdzdEdMRW5hYmxlZCkKLSAgICAgICAgOiBtX3ZpZGVvRGVjb2RlclBs
YXRmb3JtKHZpZGVvRGVjb2RlclBsYXRmb3JtKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoR1NUX0lTX1NBTVBMRShzYW1wbGUpKTsKLQotICAgICAgICBHc3RWaWRlb0luZm8gdmlkZW9J
bmZvOwotICAgICAgICBpZiAoVU5MSUtFTFkoIWdldFNhbXBsZVZpZGVvSW5mbyhzYW1wbGUsIHZp
ZGVvSW5mbykpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fc2l6ZSA9IEludFNp
emUoR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyksIEdTVF9WSURFT19JTkZPX0hFSUdI
VCgmdmlkZW9JbmZvKSk7Ci0gICAgICAgIG1faGFzQWxwaGFDaGFubmVsID0gR1NUX1ZJREVPX0lO
Rk9fSEFTX0FMUEhBKCZ2aWRlb0luZm8pOwotICAgICAgICBtX2J1ZmZlciA9IGdzdF9zYW1wbGVf
Z2V0X2J1ZmZlcihzYW1wbGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIUdTVF9JU19CVUZGRVIo
bV9idWZmZXIpKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wp
Ci0gICAgICAgIG1fZmxhZ3MgPSBmbGFncyB8IChtX2hhc0FscGhhQ2hhbm5lbCA/IFRleHR1cmVN
YXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwKTsKLQotICAgICAgICBpZiAoZ3N0R0xFbmFibGVkKSB7
Ci0gICAgICAgICAgICBtX2lzTWFwcGVkID0gZ3N0X3ZpZGVvX2ZyYW1lX21hcCgmbV92aWRlb0Zy
YW1lLCAmdmlkZW9JbmZvLCBtX2J1ZmZlciwgc3RhdGljX2Nhc3Q8R3N0TWFwRmxhZ3M+KEdTVF9N
QVBfUkVBRCB8IEdTVF9NQVBfR0wpKTsKLSAgICAgICAgICAgIGlmIChtX2lzTWFwcGVkKSB7Ci0g
ICAgICAgICAgICAgICAgbV90ZXh0dXJlSUQgPSAqcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQqPiht
X3ZpZGVvRnJhbWUuZGF0YVswXSk7Ci0gICAgICAgICAgICAgICAgbV9oYXNNYXBwZWRUZXh0dXJl
cyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotI2Vsc2UKLSAgICAgICAg
VU5VU0VEX1BBUkFNKGZsYWdzKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGdzdEdMRW5hYmxlZCk7
Ci0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKLQotICAgICAgICB7Ci0gICAgICAgICAgICBt
X3RleHR1cmVJRCA9IDA7Ci0gICAgICAgICAgICBtX2lzTWFwcGVkID0gZ3N0X3ZpZGVvX2ZyYW1l
X21hcCgmbV92aWRlb0ZyYW1lLCAmdmlkZW9JbmZvLCBtX2J1ZmZlciwgR1NUX01BUF9SRUFEKTsK
LSAgICAgICAgICAgIGlmIChtX2lzTWFwcGVkKSB7Ci0gICAgICAgICAgICAgICAgLy8gUmlnaHQg
bm93IHRoZSBUZXh0dXJlTWFwcGVyIG9ubHkgc3VwcG9ydHMgY2hyb21hcyB3aXRoIG9uZSBwbGFu
ZQotICAgICAgICAgICAgICAgIEFTU0VSVChHU1RfVklERU9fSU5GT19OX1BMQU5FUygmdmlkZW9J
bmZvKSA9PSAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZpcnR1
YWwgfkdzdFZpZGVvRnJhbWVIb2xkZXIoKQotICAgIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFt
X2lzTWFwcGVkKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBnc3RfdmlkZW9fZnJh
bWVfdW5tYXAoJm1fdmlkZW9GcmFtZSk7Ci0gICAgfQotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkK
LSAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvckNQVVN5bmMoKQotICAgIHsKLSAgICAgICAgR3N0R0xT
eW5jTWV0YSogbWV0YSA9IGdzdF9idWZmZXJfZ2V0X2dsX3N5bmNfbWV0YShtX2J1ZmZlcik7Ci0g
ICAgICAgIGlmIChtZXRhKSB7Ci0gICAgICAgICAgICBHc3RNZW1vcnkqIG1lbSA9IGdzdF9idWZm
ZXJfcGVla19tZW1vcnkobV9idWZmZXIsIDApOwotICAgICAgICAgICAgR3N0R0xDb250ZXh0KiBj
b250ZXh0ID0gKChHc3RHTEJhc2VNZW1vcnkqKW1lbSktPmNvbnRleHQ7Ci0gICAgICAgICAgICBn
c3RfZ2xfc3luY19tZXRhX3dhaXRfY3B1KG1ldGEsIGNvbnRleHQpOwotICAgICAgICB9Ci0gICAg
fQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KLSAgICBjb25zdCBJbnRTaXplJiBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgYm9vbCBoYXNBbHBoYUNoYW5uZWwoKSBj
b25zdCB7IHJldHVybiBtX2hhc0FscGhhQ2hhbm5lbDsgfQotICAgIFRleHR1cmVNYXBwZXJHTDo6
RmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9Ci0gICAgR0x1aW50IHRleHR1
cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlEOyB9Ci0gICAgYm9vbCBoYXNNYXBwZWRU
ZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWFwcGVkVGV4dHVyZXM7IH0KLSAgICBjb25z
dCBHc3RWaWRlb0ZyYW1lJiB2aWRlb0ZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0ZyYW1l
OyB9Ci0KLSAgICB2b2lkIHVwZGF0ZVRleHR1cmUoQml0bWFwVGV4dHVyZUdMJiB0ZXh0dXJlKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3RleHR1cmVJRCk7Ci0gICAgICAgIEdzdFZpZGVvR0xU
ZXh0dXJlVXBsb2FkTWV0YSogbWV0YTsKLSAgICAgICAgaWYgKG1fYnVmZmVyICYmIChtZXRhID0g
Z3N0X2J1ZmZlcl9nZXRfdmlkZW9fZ2xfdGV4dHVyZV91cGxvYWRfbWV0YShtX2J1ZmZlcikpKSB7
Ci0gICAgICAgICAgICBpZiAobWV0YS0+bl90ZXh0dXJlcyA9PSAxKSB7IC8vIEJSR3ggJiBCR1JB
IGZvcm1hdHMgdXNlIG9ubHkgb25lIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgZ3VpbnQgaWRz
WzRdID0geyB0ZXh0dXJlLmlkKCksIDAsIDAsIDAgfTsKLQotICAgICAgICAgICAgICAgIGlmIChn
c3RfdmlkZW9fZ2xfdGV4dHVyZV91cGxvYWRfbWV0YV91cGxvYWQobWV0YSwgaWRzKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFtX2lzTWFwcGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGludCBz
dHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFKCZtX3ZpZGVvRnJhbWUsIDApOwot
ICAgICAgICBjb25zdCB2b2lkKiBzcmNEYXRhID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEo
Jm1fdmlkZW9GcmFtZSwgMCk7Ci0KLSAgICAgICAgaWYgKCFzcmNEYXRhKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIHRleHR1cmUudXBkYXRlQ29udGVudHMoc3JjRGF0YSwgV2ViQ29y
ZTo6SW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSwgV2ViQ29y
ZTo6SW50UG9pbnQoMCwgMCksIHN0cmlkZSk7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBwbGF0Zm9ybUxheWVyQnVmZmVyKCkK
LSAgICB7Ci0gICAgICAgIGlmICghbV9oYXNNYXBwZWRUZXh0dXJlcykKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgICAgIHVzaW5nIEJ1ZmZlciA9IFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyQnVmZmVyOwotCi0gICAgICAgIGlmICgoR1NUX1ZJREVPX0lORk9fSVNfUkdCKCZt
X3ZpZGVvRnJhbWUuaW5mbykgJiYgR1NUX1ZJREVPX0lORk9fTl9QTEFORVMoJm1fdmlkZW9GcmFt
ZS5pbmZvKSA9PSAxKSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEJ1ZmZlcj4oQnVm
ZmVyOjpUZXh0dXJlVmFyaWFudCB7IEJ1ZmZlcjo6UkdCVGV4dHVyZSB7ICpzdGF0aWNfY2FzdDxH
THVpbnQqPihtX3ZpZGVvRnJhbWUuZGF0YVswXSkgfSB9LCBtX3NpemUsIG1fZmxhZ3MsIEdMX1JH
QkEpOwotCi0gICAgICAgIGlmIChHU1RfVklERU9fSU5GT19JU19ZVVYoJm1fdmlkZW9GcmFtZS5p
bmZvKSkgewotICAgICAgICAgICAgaWYgKEdTVF9WSURFT19JTkZPX05fQ09NUE9ORU5UUygmbV92
aWRlb0ZyYW1lLmluZm8pIDwgMyB8fCBHU1RfVklERU9fSU5GT19OX1BMQU5FUygmbV92aWRlb0Zy
YW1lLmluZm8pID4gMykKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAg
ICAgICAgaWYgKG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gJiYgKm1fdmlkZW9EZWNvZGVyUGxhdGZv
cm0gPT0gR3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OklteFZQVSkgewotICAgICAgICAgICAgICAg
IC8vIElNWCBWUFUgZGVjb2RlciBkZWNvZGVzIFlVViBkYXRhIG9ubHkgaW50byB0aGUgWSB0ZXh0
dXJlIGZyb20gd2hpY2ggdGhlIHNhbXBsZXIKLSAgICAgICAgICAgICAgICAvLyB0aGVuIGRpcmVj
dGx5IHByb2R1Y2VzIFJHQkEgZGF0YS4gVGV4dHVyZXMgZm9yIG90aGVyIHBsYW5lcyBhcmVuJ3Qg
dXNlZCwgYnV0Ci0gICAgICAgICAgICAgICAgLy8gdGhhdCdzIGRlY29kZXIncyBwcm9ibGVtLiBX
ZSBoYXZlIHRvIHRyZWF0IHRoYXQgWSB0ZXh0dXJlIGFzIGhhdmluZyBSR0JBIGRhdGEuCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8QnVmZmVyPihCdWZmZXI6OlRleHR1cmVWYXJp
YW50IHsgQnVmZmVyOjpSR0JUZXh0dXJlIHsgKnN0YXRpY19jYXN0PEdMdWludCo+KG1fdmlkZW9G
cmFtZS5kYXRhWzBdKSB9IH0sIG1fc2l6ZSwgbV9mbGFncywgR0xfUkdCQSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGxhbmVzID0gR1NUX1ZJREVPX0lO
Rk9fTl9QTEFORVMoJm1fdmlkZW9GcmFtZS5pbmZvKTsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8
R0x1aW50LCAzPiBwbGFuZXM7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCAzPiB5
dXZQbGFuZTsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIDM+IHl1dlBsYW5lT2Zm
c2V0OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUGxhbmVz
OyArK2kpCi0gICAgICAgICAgICAgICAgcGxhbmVzW2ldID0gKnN0YXRpY19jYXN0PEdMdWludCo+
KG1fdmlkZW9GcmFtZS5kYXRhW2ldKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgICAgICB5dXZQbGFuZVtpXSA9IEdTVF9WSURFT19J
TkZPX0NPTVBfUExBTkUoJm1fdmlkZW9GcmFtZS5pbmZvLCBpKTsKLSAgICAgICAgICAgICAgICB5
dXZQbGFuZU9mZnNldFtpXSA9IEdTVF9WSURFT19JTkZPX0NPTVBfUE9GRlNFVCgmbV92aWRlb0Zy
YW1lLmluZm8sIGkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGQ6OmFycmF5PEdM
ZmxvYXQsIDk+IHl1dlRvUmdiOwotICAgICAgICAgICAgaWYgKGdzdF92aWRlb19jb2xvcmltZXRy
eV9tYXRjaGVzKCZHU1RfVklERU9fSU5GT19DT0xPUklNRVRSWSgmbV92aWRlb0ZyYW1lLmluZm8p
LCBHU1RfVklERU9fQ09MT1JJTUVUUllfQlQ3MDkpKSB7Ci0gICAgICAgICAgICAgICAgeXV2VG9S
Z2IgPSB7Ci0gICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgIDAuMGYsICAgIDEuNzg3ZiwKLSAg
ICAgICAgICAgICAgICAgICAgMS4xNjRmLCAtMC4yMTNmLCAtMC41MzFmLAotICAgICAgICAgICAg
ICAgICAgICAxLjE2NGYsICAyLjExMmYsICAwLjBmCi0gICAgICAgICAgICAgICAgfTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBidDYwMS4gVGhp
cyBpcyB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgR1N0cmVhbWVyJ3MgZ2xjb2xvcmNvbnZlcnQgZWxl
bWVudC4KLSAgICAgICAgICAgICAgICB5dXZUb1JnYiA9IHsKLSAgICAgICAgICAgICAgICAgICAg
MS4xNjRmLCAgMC4wZiwgICAgMS41OTZmLAotICAgICAgICAgICAgICAgICAgICAxLjE2NGYsIC0w
LjM5MWYsIC0wLjgxM2YsCi0gICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgIDIuMDE4ZiwgIDAu
MGYKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxCdWZmZXI+KCBCdWZmZXI6OlRleHR1cmVWYXJpYW50IHsgQnVmZmVyOjpZ
VVZUZXh0dXJlIHsgbnVtYmVyT2ZQbGFuZXMsIHBsYW5lcywgeXV2UGxhbmUsIHl1dlBsYW5lT2Zm
c2V0LCB5dXZUb1JnYiB9IH0sIG1fc2l6ZSwgbV9mbGFncywgR0xfUkdCQSk7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgR3N0QnVm
ZmVyKiBtX2J1ZmZlcjsKLSAgICBHc3RWaWRlb0ZyYW1lIG1fdmlkZW9GcmFtZSB7IH07Ci0gICAg
SW50U2l6ZSBtX3NpemU7Ci0gICAgYm9vbCBtX2hhc0FscGhhQ2hhbm5lbDsKLSAgICBPcHRpb25h
bDxHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybT4gbV92aWRlb0RlY29kZXJQbGF0Zm9ybTsKLSAgICBU
ZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3MgeyB9OwotICAgIEdMdWludCBtX3RleHR1cmVJ
RCB7IDAgfTsKLSAgICBib29sIG1faXNNYXBwZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNN
YXBwZWRUZXh0dXJlcyB7IGZhbHNlIH07Ci19OwotI2VuZGlmCi0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6aW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKQotewotICAgIEdT
VF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcsICJ3ZWJraXRt
ZWRpYXBsYXllciIsIDAsICJXZWJLaXQgbWVkaWEgcGxheWVyIik7Ci19Ci0KLU1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoTWVk
aWFQbGF5ZXIqIHBsYXllcikKLSAgICA6IG1fbm90aWZpZXIoTWFpblRocmVhZE5vdGlmaWVyPE1h
aW5UaHJlYWROb3RpZmljYXRpb24+OjpjcmVhdGUoKSkKLSAgICAsIG1fcGxheWVyKHBsYXllcikK
LSAgICAsIG1fZnBzU2luayhudWxscHRyKQotICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVy
OjpIYXZlTm90aGluZykKLSAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkK
LSAgICAsIG1fZHJhd1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnQpCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQot
I2lmIFVTRShOSUNPU0lBKQotICAgICwgbV9uaWNvc2lhTGF5ZXIoTmljb3NpYTo6Q29udGVudExh
eWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0
ZUZhY3RvcnkoKnRoaXMpKSkKLSNlbHNlCi0gICAgLCBtX3BsYXRmb3JtTGF5ZXJQcm94eShhZG9w
dFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSgpKSkKLSNlbmRpZgotI2Vu
ZGlmCi17Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6On5NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlKCkKLXsKLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGlm
IChtX3ZpZGVvRGVjb2RlclBsYXRmb3JtID09IEdzdFZpZGVvRGVjb2RlclBsYXRmb3JtOjpWaWRl
bzRMaW51eCkKLSAgICAgICAgZmx1c2hDdXJyZW50QnVmZmVyKCk7Ci0jZW5kaWYKLSNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNPU0lBKQotICAgIGRvd25jYXN0PE5pY29zaWE6
OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5p
bnZhbGlkYXRlQ2xpZW50KCk7Ci0jZW5kaWYKLQotICAgIG1fbm90aWZpZXItPmludmFsaWRhdGUo
KTsKLQotICAgIGlmIChtX3ZpZGVvU2luaykgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQobV92aWRlb1NpbmsuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEs
IDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0g
ICAgICAgIGlmIChHU1RfSVNfQklOKG1fdmlkZW9TaW5rLmdldCgpKSkgewotICAgICAgICAgICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBhcHBzaW5rID0gYWRvcHRHUmVmKGdzdF9iaW5fZ2V0X2J5X25h
bWUoR1NUX0JJTl9DQVNUKG1fdmlkZW9TaW5rLmdldCgpKSwgIndlYmtpdC1nbC12aWRlby1zaW5r
IikpOwotICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKGFw
cHNpbmsuZ2V0KCksIHRoaXMpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAo
bV92b2x1bWVFbGVtZW50KQotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21h
dGNoZWQobV92b2x1bWVFbGVtZW50LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBu
dWxscHRyLCBudWxscHRyLCB0aGlzKTsKLQotICAgIC8vIFRoaXMgd2lsbCByZWxlYXNlIHRoZSBH
U3RyZWFtZXIgdGhyZWFkIGZyb20gbV9kcmF3Q29uZGl0aW9uIGluIG5vbiBBQyBtb2RlIGluIGNh
c2UgdGhlcmUncyBhbiBvbmdvaW5nIHRyaWdnZXJSZXBhaW50IGNhbGwKLSAgICAvLyB3YWl0aW5n
IHRoZXJlLCBhbmQgZW5zdXJlIHRoYXQgYW55IHRyaWdnZXJSZXBhaW50IGNhbGwgcmVhY2hpbmcg
dGhlIGxvY2sgd29uJ3Qgd2FpdCBvbiBtX2RyYXdDb25kaXRpb24uCi0gICAgY2FuY2VsUmVwYWlu
dCh0cnVlKTsKLQotI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0gICAgbV9jZG1BdHRhY2ht
ZW50U2VtYXBob3JlLnNpZ25hbCgpOwotI2VuZGlmCi0KLSAgICAvLyBUaGUgY2hhbmdlIHRvIEdT
VF9TVEFURV9OVUxMIHN0YXRlIGlzIGFsd2F5cyBzeW5jaHJvbm91cy4gU28gYWZ0ZXIgdGhpcyBn
ZXRzIGV4ZWN1dGVkIHdlIGRvbid0IG5lZWQgdG8gd29ycnkKLSAgICAvLyBhYm91dCBoYW5kbGVy
cyBydW5uaW5nIGluIHRoZSBHU3RyZWFtZXIgdGhyZWFkLgotICAgIGlmIChtX3BpcGVsaW5lKQot
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRF
X05VTEwpOwotCi0gICAgbV9wbGF5ZXIgPSBudWxscHRyOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNldFBpcGVsaW5lKEdzdEVsZW1lbnQqIHBpcGVsaW5lKQot
ewotICAgIG1fcGlwZWxpbmUgPSBwaXBlbGluZTsKLQotICAgIEdSZWZQdHI8R3N0QnVzPiBidXMg
PSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUu
Z2V0KCkpKSk7Ci0gICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgW10oR3N0
QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAg
YXV0byYgcGxheWVyID0gKnN0YXRpY19jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2UqPih1c2VyRGF0YSk7Ci0KLSAgICAgICAgaWYgKHBsYXllci5oYW5kbGVTeW5jTWVzc2FnZSht
ZXNzYWdlKSkgewotICAgICAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gR1NUX0JVU19EUk9QOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IEdTVF9CVVNfUEFTUzsKLSAgICB9LCB0aGlzLCBudWxscHRyKTsKLX0KLQotYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBt
ZXNzYWdlKQotewotICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKLSAgICBpZiAoR1NUX01FU1NB
R0VfVFlQRShtZXNzYWdlKSAhPSBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGNvbnN0IGdjaGFyKiBjb250ZXh0VHlwZTsKLSAgICBnc3RfbWVz
c2FnZV9wYXJzZV9jb250ZXh0X3R5cGUobWVzc2FnZSwgJmNvbnRleHRUeXBlKTsKLSAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJIYW5kbGluZyAlcyBuZWVkLWNvbnRleHQgbWVzc2Fn
ZSBmb3IgJXMiLCBjb250ZXh0VHlwZSwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwot
Ci0gICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUsIFdFQktJVF9XRUJfU1JDX1BMQVlFUl9D
T05URVhUX1RZUEVfTkFNRSkpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0
ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldyhXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVY
VF9UWVBFX05BTUUsIEZBTFNFKSk7Ci0gICAgICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVj
dHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKLQot
ICAgICAgICBBU1NFUlQobV9wbGF5ZXIpOwotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChjb250
ZXh0U3RydWN0dXJlLCAicGxheWVyIiwgR19UWVBFX1BPSU5URVIsIG1fcGxheWVyLCBudWxscHRy
KTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NB
R0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBl
bGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0R0xDb250ZXh0KGNvbnRleHRUeXBlKSk7
Ci0gICAgaWYgKGVsZW1lbnRDb250ZXh0KSB7Ci0gICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250
ZXh0KEdTVF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyksIGVsZW1lbnRDb250ZXh0LmdldCgpKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0K
LSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRU
eXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCIpKSB7Ci0gICAgICAgIGlm
IChpc01haW5UaHJlYWQoKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SKCJjYW4ndCBoYW5kbGUg
ZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVkIGNvbnRleHQgbWVzc2FnZSBp
biB0aGUgbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0
ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UiKTsKLQotICAgICAgICBJbml0RGF0YSBpbml0RGF0
YTsKLSAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11
dGV4KTsKLSAgICAgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMgcHJvdGVjdGlvblN5c3Rl
bUV2ZW50cyhtZXNzYWdlKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRSgiZm91bmQgJXp1IHByb3Rl
Y3Rpb24gZXZlbnRzLCAlenUgZGVjcnlwdG9ycyBhdmFpbGFibGUiLCBwcm90ZWN0aW9uU3lzdGVt
RXZlbnRzLmV2ZW50cygpLnNpemUoKSwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5hdmFpbGFibGVT
eXN0ZW1zKCkuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IHByb3Rl
Y3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBHc3RCdWZmZXIq
IGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0
aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIpOwotCi0g
ICAgICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7
Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy5hZGQoR1NUX0VWRU5U
X1NFUU5VTShldmVudC5nZXQoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKFdURk1vdmUoaW5pdERhdGEpKTsKLQotICAg
ICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRpbmcgZm9yIGEgQ0RNIGluc3Rh
bmNlIik7Ci0gICAgICAgIGlmIChtX2NkbUF0dGFjaG1lbnRTZW1hcGhvcmUud2FpdEZvcig0X3Mp
Ci0gICAgICAgICAgICAmJiBtX25vdGlmaWVyLT5pc1ZhbGlkKCkgLy8gQ2hlY2sgdGhlIHBsYXll
ciBpcyBub3QgYmVpbmcgZGVzdHJveWVkLgotICAgICAgICAgICAgJiYgIW1fY2RtSW5zdGFuY2Ut
PmtleVN5c3RlbSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY29uc3QgY2hhciogcHJlZmVy
cmVkS2V5U3lzdGVtVXVpZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlk
KG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpKTsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVD
VChwaXBlbGluZSgpLCAid29ya2luZyB3aXRoIGtleSBzeXN0ZW0gJXMsIGNvbnRpbnVpbmcgd2l0
aCBrZXkgc3lzdGVtICVzIG9uICVzIiwgbV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVtKCkudXRmOCgp
LmRhdGEoKSwgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVz
c2FnZSkpOwotCi0gICAgICAgICAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9w
dEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlk
IiwgRkFMU0UpKTsKLSAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9
IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKLSAgICAgICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3Rl
bS1pZCIsIEdfVFlQRV9TVFJJTkcsIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOwot
ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NB
R0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgR1NUX1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6YWVkIik7Ci0KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVE
SUEpCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotR3N0
Q29udGV4dCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVxdWVzdEdMQ29udGV4
dChjb25zdCBjaGFyKiBjb250ZXh0VHlwZSkKLXsKLSAgICBpZiAoIWVuc3VyZUdzdEdMQ29udGV4
dCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghZ19zdHJjbXAwKGNvbnRl
eHRUeXBlLCBHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUpKSB7Ci0gICAgICAgIEdzdENvbnRl
eHQqIGRpc3BsYXlDb250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KEdTVF9HTF9ESVNQTEFZX0NPTlRF
WFRfVFlQRSwgVFJVRSk7Ci0gICAgICAgIGdzdF9jb250ZXh0X3NldF9nbF9kaXNwbGF5KGRpc3Bs
YXlDb250ZXh0LCBnc3RHTERpc3BsYXkoKSk7Ci0gICAgICAgIHJldHVybiBkaXNwbGF5Q29udGV4
dDsKLSAgICB9Ci0KLSAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImdzdC5nbC5hcHBf
Y29udGV4dCIpKSB7Ci0gICAgICAgIEdzdENvbnRleHQqIGFwcENvbnRleHQgPSBnc3RfY29udGV4
dF9uZXcoImdzdC5nbC5hcHBfY29udGV4dCIsIFRSVUUpOwotICAgICAgICBHc3RTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShhcHBDb250ZXh0KTsK
LSNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMiwgMCkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9z
ZXQoc3RydWN0dXJlLCAiY29udGV4dCIsIEdTVF9UWVBFX0dMX0NPTlRFWFQsIGdzdEdMQ29udGV4
dCgpLCBudWxscHRyKTsKLSNlbHNlCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVy
ZSwgImNvbnRleHQiLCBHU1RfR0xfVFlQRV9DT05URVhULCBnc3RHTENvbnRleHQoKSwgbnVsbHB0
cik7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIGFwcENvbnRleHQ7Ci0gICAgfQotCi0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6
ZW5zdXJlR3N0R0xDb250ZXh0KCkKLXsKLSAgICBpZiAobV9nbENvbnRleHQpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgYXV0byYgc2hhcmVkRGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCk7Ci0KLSAgICAvLyBUaGUgZmxvYXRpbmcgcmVm
IHJlbW92YWwgc3VwcG9ydCB3YXMgYWRkZWQgaW4gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcv
c2hvd19idWcuY2dpP2lkPTc0MzA2Mi4KLSAgICBib29sIHNob3VsZEFkb3B0UmVmID0gd2Via2l0
R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKTsKLSAgICBpZiAoIW1fZ2xEaXNwbGF5KSB7Ci0jaWYg
UExBVEZPUk0oWDExKQotI2lmIFVTRShHTFgpCi0gICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3Bs
YXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBp
cGVsaW5lKCksICJDcmVhdGluZyBYMTEgc2hhcmVkIEdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAg
IGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0
R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShk
b3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpKSkpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJ
U1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZv
cm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpOwotICAgICAgICB9Ci0jZWxp
ZiBVU0UoRUdMKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNw
bGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ3JlYXRp
bmcgWDExIHNoYXJlZCBFR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0
UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQ
TEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0
Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdz
dF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURp
c3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOwotICAgICAgICB9Ci0jZW5k
aWYKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0FZTEFORCkKLSAgICAgICAgaWYgKGlzPFBsYXRm
b3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBXYXlsYW5kIHNoYXJlZCBkaXNwbGF5Iik7
Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgICAgICAgICAgbV9nbERp
c3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193
aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERp
c3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0
aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNw
bGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JF
TkRFUkVSKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNw
bGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ3JlYXRp
bmcgV1BFIHNoYXJlZCBFR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0
UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQ
TEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0
Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZ
KGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9y
bURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOwotICAgICAgICB9
Ci0jZW5kaWYKLQotICAgICAgICBBU1NFUlQobV9nbERpc3BsYXkpOwotICAgIH0KLQotICAgIEdM
Q29udGV4dCogd2Via2l0Q29udGV4dCA9IHNoYXJlZERpc3BsYXkuc2hhcmluZ0dMQ29udGV4dCgp
OwotICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIG5vIG5lZWQgZm9y
IGlmZGVmcyBoZXJlLgotICAgIEdzdEdMUGxhdGZvcm0gZ2xQbGF0Zm9ybSA9IHdlYmtpdENvbnRl
eHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRGT1JNX0VHTCA6IEdTVF9HTF9QTEFURk9S
TV9HTFg7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dM
X0FQSV9HTEVTMjsKLSNlbGlmIFVTRShPUEVOR0wpCi0gICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1Rf
R0xfQVBJX09QRU5HTDsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYK
LQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgY29udGV4dEhhbmRsZSA9IHdlYmtpdENv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dEhhbmRsZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICBtX2ds
Q29udGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZChtX2dsRGlzcGxh
eS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxh
dGZvcm0sIGdsQVBJKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2dsQ29udGV4dCA9IGdzdF9nbF9j
b250ZXh0X25ld193cmFwcGVkKG1fZ2xEaXNwbGF5LmdldCgpLCByZWludGVycHJldF9jYXN0PGd1
aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpOwotCi0gICAgLy8gQWN0
aXZhdGUgYW5kIGZpbGwgdGhlIEdTdHJlYW1lciB3cmFwcGVkIGNvbnRleHQgd2l0aCB0aGUgV2Vi
a2l0J3Mgc2hhcmVkIG9uZS4KLSAgICBhdXRvIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29u
dGV4dDo6Y3VycmVudCgpOwotICAgIHdlYmtpdENvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShtX2dsQ29udGV4dC5nZXQoKSwgVFJV
RSkpIHsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICBpZiAo
IWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhtX2dsQ29udGV4dC5nZXQoKSwgJmVycm9yLm91dFB0
cigpKSkKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gZmlsbCBpbiBHU3RyZWFt
ZXIgY29udGV4dDogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIGdzdF9nbF9jb250ZXh0
X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBGQUxTRSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZhdGUgR1N0cmVhbWVyIGNvbnRleHQgJSIgR1NU
X1BUUl9GT1JNQVQsIG1fZ2xDb250ZXh0LmdldCgpKTsKLSAgICBpZiAocHJldmlvdXNBY3RpdmVD
b250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkK
LQotLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8KLUZsb2F0U2l6ZSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Ci17Ci0jaWYgVVNFKEdT
VFJFQU1FUl9IT0xFUFVOQ0gpCi0gICAgLy8gV2hlbiB1c2luZyB0aGUgaG9sZXB1Y2ggd2UgbWF5
IG5vdCBiZSBhYmxlIHRvIGdldCB0aGUgdmlkZW8gZnJhbWVzIHNpemUsIHNvIHdlIGNhbid0IHVz
ZQotICAgIC8vIGl0LiBCdXQgd2UgbmVlZCB0byByZXBvcnQgc29tZSBub24gZW1wdHkgbmF0dXJh
bFNpemUgZm9yIHRoZSBwbGF5ZXIncyBHcmFwaGljc0xheWVyCi0gICAgLy8gdG8gYmUgcHJvcGVy
bHkgY3JlYXRlZC4KLSAgICByZXR1cm4gc19ob2xlUHVuY2hEZWZhdWx0RnJhbWVTaXplOwotI2Vu
ZGlmCi0KLSAgICBpZiAoIWhhc1ZpZGVvKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsK
LQotICAgIGlmICghbV92aWRlb1NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbV92aWRl
b1NpemU7Ci0KLSAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgp
OwotICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBGbG9hdFNpemUoKTsKLQotICAgIEdzdENhcHMqIGNhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBz
KG1fc2FtcGxlLmdldCgpKTsKLSAgICBpZiAoIWNhcHMpCi0gICAgICAgIHJldHVybiBGbG9hdFNp
emUoKTsKLQotCi0gICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRh
dGEuIFNlZQotICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9p
ZD01OTY1NzEKLSAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUgdHJhbnNmb3JtYXRpb24gbWF0
cml4LiBTZWUKLSAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTk2MzI2Ci0KLSAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3JpZ2luYWwgc2l6ZSwg
aWYgdGhpcyBmYWlscyB0aGUKLSAgICAvLyB2aWRlby1zaW5rIGhhcyBsaWtlbHkgbm90IHlldCBu
ZWdvdGlhdGVkIGl0cyBjYXBzLgotICAgIGludCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBw
aXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0cmlkZTsKLSAgICBJbnRTaXplIG9yaWdpbmFs
U2l6ZTsKLSAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYgKCFnZXRWaWRlb1NpemVB
bmRGb3JtYXRGcm9tQ2FwcyhjYXBzLCBvcmlnaW5hbFNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RS
YXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpKQotICAg
ICAgICByZXR1cm4gRmxvYXRTaXplKCk7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0g
ICAgLy8gV2hlbiB1c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgaWYgdGhlIHZpZGVvIGlz
IHRhZ2dlZCBhcyByb3RhdGVkIDkwIG9yIDI3MCBkZWdyZWVzLCBzd2FwIHdpZHRoIGFuZCBoZWln
aHQuCi0gICAgaWYgKG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkgewotICAgICAgICBpZiAo
bV92aWRlb1NvdXJjZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCi0gICAgICAgICAg
ICBvcmlnaW5hbFNpemUgPSBvcmlnaW5hbFNpemUudHJhbnNwb3NlZFNpemUoKTsKLSAgICB9Ci0j
ZW5kaWYKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk9yaWdpbmFsIHZpZGVv
IHNpemU6ICVkeCVkIiwgb3JpZ2luYWxTaXplLndpZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWlnaHQo
KSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUGl4ZWwgYXNwZWN0IHJhdGlv
OiAlZC8lZCIsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5v
bWluYXRvcik7Ci0KLSAgICAvLyBDYWxjdWxhdGUgREFSIGJhc2VkIG9uIFBBUiBhbmQgdmlkZW8g
c2l6ZS4KLSAgICBpbnQgZGlzcGxheVdpZHRoID0gb3JpZ2luYWxTaXplLndpZHRoKCkgKiBwaXhl
bEFzcGVjdFJhdGlvTnVtZXJhdG9yOwotICAgIGludCBkaXNwbGF5SGVpZ2h0ID0gb3JpZ2luYWxT
aXplLmhlaWdodCgpICogcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yOwotCi0gICAgLy8gRGl2
aWRlIGRpc3BsYXkgd2lkdGggYW5kIGhlaWdodCBieSB0aGVpciBHQ0QgdG8gYXZvaWQgcG9zc2li
bGUgb3ZlcmZsb3dzLgotICAgIGludCBkaXNwbGF5QXNwZWN0UmF0aW9HQ0QgPSBncmVhdGVzdENv
bW1vbkRpdmlzb3IoZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICBkaXNwbGF5V2lk
dGggLz0gZGlzcGxheUFzcGVjdFJhdGlvR0NEOwotICAgIGRpc3BsYXlIZWlnaHQgLz0gZGlzcGxh
eUFzcGVjdFJhdGlvR0NEOwotCi0gICAgLy8gQXBwbHkgREFSIHRvIG9yaWdpbmFsIHZpZGVvIHNp
emUuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaW4geHZpbWFnZXNpbmsncyBzZXRjYXBz
IGZ1bmN0aW9uLgotICAgIGd1aW50NjQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAgIGlmICgh
KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAlIGRpc3BsYXlIZWlnaHQpKSB7Ci0gICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIktlZXBpbmcgdmlkZW8gb3JpZ2luYWwgaGVpZ2h0Iik7
Ci0gICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUu
aGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7Ci0gICAgICAgIGhlaWdodCA9
IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfSBlbHNl
IGlmICghKG9yaWdpbmFsU2l6ZS53aWR0aCgpICUgZGlzcGxheVdpZHRoKSkgewotICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJLZWVwaW5nIHZpZGVvIG9yaWdpbmFsIHdpZHRo
Iik7Ci0gICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxT
aXplLndpZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0aCk7Ci0gICAgICAgIHdpZHRo
ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLndpZHRoKCkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkFwcHJveGltYXRpbmcg
d2hpbGUga2VlcGluZyBvcmlnaW5hbCB2aWRlbyBoZWlnaHQiKTsKLSAgICAgICAgd2lkdGggPSBn
c3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdp
ZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2
ND4ob3JpZ2luYWxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJOYXR1cmFsIHNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgInglIiBHX0dV
SU5UNjRfRk9STUFULCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBtX3ZpZGVvU2l6ZSA9IEZsb2F0U2l6
ZShzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKLSAg
ICByZXR1cm4gbV92aWRlb1NpemU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKLXsKLSAgICBpZiAoIW1fdm9sdW1lRWxl
bWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiU2V0dGluZyB2b2x1bWU6ICVmIiwgdm9sdW1lKTsKLSAgICBnc3Rfc3RyZWFtX3ZvbHVtZV9z
ZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFU
X0xJTkVBUiwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2b2x1bWUpKTsKLX0KLQotZmxvYXQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dm9sdW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
dm9sdW1lRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gZ3N0X3N0cmVh
bV92b2x1bWVfZ2V0X3ZvbHVtZShtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksIEdTVF9TVFJFQU1fVk9M
VU1FX0ZPUk1BVF9MSU5FQVIpOwotfQotCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKQotewotICAgIGlmICghbV9wbGF5
ZXIgfHwgIW1fdm9sdW1lRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvdWJsZSB2b2x1
bWU7Ci0gICAgdm9sdW1lID0gZ3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZShtX3ZvbHVtZUVs
ZW1lbnQuZ2V0KCksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9MSU5FQVIpOwotICAgIC8vIGdl
dF92b2x1bWUoKSBjYW4gcmV0dXJuIHZhbHVlcyBzdXBlcmlvciB0byAxLjAgaWYgdGhlIHVzZXIK
LSAgICAvLyBhcHBsaWVzIHNvZnR3YXJlIHVzZXIgZ2FpbiB2aWEgdGhpcmQgcGFydHkgYXBwbGlj
YXRpb24gKEdOT01FCi0gICAgLy8gdm9sdW1lIGNvbnRyb2wgZm9yIGluc3RhbmNlKS4KLSAgICB2
b2x1bWUgPSBDTEFNUCh2b2x1bWUsIDAuMCwgMS4wKTsKLSAgICBtX3BsYXllci0+dm9sdW1lQ2hh
bmdlZChzdGF0aWNfY2FzdDxmbG9hdD4odm9sdW1lKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6dm9sdW1lQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKLXsKLSAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVu
IG1fdm9sdW1lRWxlbWVudCByZWNlaXZlcyB0aGUgbm90aWZ5Ojp2b2x1bWUgc2lnbmFsLgotICAg
IEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBlbGluZSgpLCAiVm9sdW1lIGNoYW5nZWQgdG86
ICVmIiwgcGxheWVyLT52b2x1bWUoKSk7Ci0KLSAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlm
eShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpWb2x1bWVDaGFuZ2VkLCBbcGxheWVyXSB7Ci0gICAg
ICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKLSAgICB9KTsKLX0KLQot
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
OjpuZXR3b3JrU3RhdGUoKSBjb25zdAotewotICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKLX0K
LQotTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6cmVhZHlTdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVhZHlTdGF0ZTsKLX0KLQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzaXplQ2hhbmdlZCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpzZXRNdXRlZChib29sIG11dGUpCi17Ci0gICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgY3VycmVudFZhbHVlID0gbXV0ZWQoKTsKLSAg
ICBpZiAoY3VycmVudFZhbHVlID09IG11dGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdTVF9J
TkZPX09CSkVDVChwaXBlbGluZSgpLCAiU2V0IG11dGVkIHRvICVzIiwgdG9TdHJpbmcobXV0ZSku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgZ19vYmplY3Rfc2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwg
Im11dGUiLCBtdXRlLCBudWxscHRyKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjptdXRlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdib29sZWFuIG11dGVkOwotICAgIGdfb2JqZWN0
X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgJm11dGVkLCBudWxscHRyKTsKLSAg
ICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXllciBpcyBtdXRlZDogJXMiLCB0b1N0
cmluZyhzdGF0aWNfY2FzdDxib29sPihtdXRlZCkpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVy
biBtdXRlZDsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpub3Rp
ZnlQbGF5ZXJPZk11dGUoKQotewotICAgIGlmICghbV9wbGF5ZXIgfHwgIW1fdm9sdW1lRWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2Jvb2xlYW4gbXV0ZWQ7Ci0gICAgZ19vYmplY3Rf
Z2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCAmbXV0ZWQsIG51bGxwdHIpOwotICAg
IG1fcGxheWVyLT5tdXRlQ2hhbmdlZChzdGF0aWNfY2FzdDxib29sPihtdXRlZCkpOwotfQotCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om11dGVDaGFuZ2VkQ2FsbGJhY2so
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQotewotICAgIC8vIFRoaXMg
aXMgY2FsbGVkIHdoZW4gbV92b2x1bWVFbGVtZW50IHJlY2VpdmVzIHRoZSBub3RpZnk6Om11dGUg
c2lnbmFsLgotICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmlj
YXRpb246Ok11dGVDaGFuZ2VkLCBbcGxheWVyXSB7Ci0gICAgICAgIHBsYXllci0+bm90aWZ5UGxh
eWVyT2ZNdXRlKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKQotewotICAgIG1fcmVu
ZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCA9IG1fcGxheWVyICYmIG1fcGxheWVyLT5jbGllbnQoKS5t
ZWRpYVBsYXllckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCk7Ci19Ci0KLSNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpCi1QbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBVU0UoTklDT1NJQSkKLSAg
ICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIucHRyKCk7Ci0jZWxzZQotICAgIHJldHVybiBjb25zdF9j
YXN0PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqPih0aGlzKTsKLSNlbmRpZgotfQot
Ci0jaWYgVVNFKE5JQ09TSUEpCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQot
ICAgIHB1c2hOZXh0SG9sZVB1bmNoQnVmZmVyKCk7Ci0jZW5kaWYKLX0KLSNlbHNlCi1SZWZQdHI8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6cHJveHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94
eS5jb3B5UmVmKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6
c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0jaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCi0g
ICAgcHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cHVzaFRleHR1cmVUb0NvbXBvc2l0b3Io
KQotewotICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7Ci0g
ICAgaWYgKCFHU1RfSVNfU0FNUExFKG1fc2FtcGxlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byBwcm94eU9wZXJhdGlvbiA9Ci0gICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKLSAgICAgICAgewotICAgICAgICAgICAgTG9ja0hv
bGRlciBob2xkZXIocHJveHkubG9jaygpKTsKLQotICAgICAgICAgICAgaWYgKCFwcm94eS5pc0Fj
dGl2ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPEdzdFZpZGVvRnJhbWVIb2xkZXI+IGZyYW1lSG9sZGVyID0gbWFrZVVuaXF1ZTxHc3RW
aWRlb0ZyYW1lSG9sZGVyPihtX3NhbXBsZS5nZXQoKSwgbV92aWRlb0RlY29kZXJQbGF0Zm9ybSwg
bV90ZXh0dXJlTWFwcGVyRmxhZ3MsICFtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmspOwotCi0gICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+
IGxheWVyQnVmZmVyOwotICAgICAgICAgICAgaWYgKGZyYW1lSG9sZGVyLT5oYXNNYXBwZWRUZXh0
dXJlcygpKSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXJCdWZmZXIgPSBmcmFtZUhvbGRlci0+cGxh
dGZvcm1MYXllckJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGlmICghbGF5ZXJCdWZmZXIpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBsYXllckJ1ZmZlci0+
c2V0VW5tYW5hZ2VkQnVmZmVyRGF0YUhvbGRlcihXVEZNb3ZlKGZyYW1lSG9sZGVyKSk7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyID0gcHJveHkuZ2V0
QXZhaWxhYmxlQnVmZmVyKGZyYW1lSG9sZGVyLT5zaXplKCksIEdMX0RPTlRfQ0FSRSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFsYXllckJ1ZmZlcikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byB0ZXh0dXJlID0gQml0bWFwVGV4dHVyZUdMOjpjcmVhdGUoVGV4dHVyZU1hcHBl
ckNvbnRleHRBdHRyaWJ1dGVzOjpnZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUt
PnJlc2V0KGZyYW1lSG9sZGVyLT5zaXplKCksIGZyYW1lSG9sZGVyLT5oYXNBbHBoYUNoYW5uZWwo
KSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiBCaXRtYXBUZXh0dXJlOjpOb0ZsYWcp
OwotICAgICAgICAgICAgICAgICAgICBsYXllckJ1ZmZlciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KFdURk1vdmUodGV4dHVyZSkpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBmcmFtZUhvbGRlci0+dXBkYXRlVGV4dHVyZShsYXllckJ1
ZmZlci0+dGV4dHVyZUdMKCkpOwotICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyLT5zZXRFeHRy
YUZsYWdzKG1fdGV4dHVyZU1hcHBlckZsYWdzIHwgKGZyYW1lSG9sZGVyLT5oYXNBbHBoYUNoYW5u
ZWwoKSA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVyQnVmZmVyKSk7
Ci0gICAgICAgIH07Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAgICBwcm94eU9wZXJhdGlvbihkb3du
Y2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5
ZXItPmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQotICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRm
b3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVwYWludCgpCi17
Ci0gICAgQVNTRVJUKG1fc2FtcGxlKTsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0g
ICAgbV9wbGF5ZXItPnJlcGFpbnQoKTsKLQotICAgIExvY2tIb2xkZXIgbG9jayhtX2RyYXdNdXRl
eCk7Ci0gICAgbV9kcmF3Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwotfQotCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSogc2FtcGxl
KQotewotICAgIGJvb2wgdHJpZ2dlclJlc2l6ZTsKLSAgICB7Ci0gICAgICAgIGF1dG8gc2FtcGxl
TG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7Ci0gICAgICAgIHRyaWdnZXJSZXNpemUg
PSAhbV9zYW1wbGU7Ci0gICAgICAgIG1fc2FtcGxlID0gc2FtcGxlOwotICAgIH0KLQotICAgIGlm
ICh0cmlnZ2VyUmVzaXplKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IkZpcnN0IHNhbXBsZSByZWFjaGVkIHRoZSBzaW5rLCB0cmlnZ2VyaW5nIHZpZGVvIGRpbWVuc2lv
bnMgdXBkYXRlIik7Ci0gICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZp
Y2F0aW9uOjpTaXplQ2hhbmdlZCwgW3RoaXNdIHsKLSAgICAgICAgICAgIG1fcGxheWVyLT5zaXpl
Q2hhbmdlZCgpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVuZGVyaW5nQ2Fu
QmVBY2NlbGVyYXRlZCkgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2RyYXdNdXRleCk7
Ci0gICAgICAgIGlmIChtX2Rlc3Ryb3lpbmcpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG1fZHJhd1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotICAgICAgICBtX2RyYXdDb25kaXRpb24u
d2FpdChtX2RyYXdNdXRleCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCi0gICAgaWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykgewotICAg
ICAgICBMb2NrSG9sZGVyIGxvY2sobV9kcmF3TXV0ZXgpOwotICAgICAgICBhdXRvIHByb3h5T3Bl
cmF0aW9uID0KLSAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5JiBwcm94eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJveHku
c2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQoW3RoaXNdIHsgdGhpcy0+cHVzaFRleHR1
cmVUb0NvbXBvc2l0b3IoKTsgfSk7Ci0gICAgICAgICAgICB9OwotI2lmIFVTRShOSUNPU0lBKQot
ICAgICAgICBpZiAoIXByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgICAgIGlmICghcHJveHlPcGVyYXRpb24oKm1f
cGxhdGZvcm1MYXllclByb3h5KSkKLSAgICAgICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgICAg
ICBtX2RyYXdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICAgICAgbV9kcmF3Q29uZGl0aW9u
LndhaXQobV9kcmF3TXV0ZXgpOwotICAgIH0gZWxzZQotICAgICAgICBwdXNoVGV4dHVyZVRvQ29t
cG9zaXRvcigpOwotI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLX0KLQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpyZXBhaW50Q2FsbGJhY2soTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyLCBHc3RTYW1wbGUqIHNhbXBsZSkKLXsKLSAg
ICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6Y2FuY2VsUmVwYWludChib29sIGRlc3Ryb3lpbmcpCi17Ci0g
ICAgLy8gVGhlIGdvYWwgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byByZWxlYXNlIHRoZSBHU3RyZWFt
ZXIgdGhyZWFkIGZyb20gbV9kcmF3Q29uZGl0aW9uIGluIHRyaWdnZXJSZXBhaW50KCkgaW4gbm9u
LUFDIGNhc2UsCi0gICAgLy8gdG8gYXZvaWQgYSBkZWFkbG9jayBpZiB0aGUgcGxheWVyIGdldHMg
cGF1c2VkIHdoaWxlIHdhaXRpbmcgZm9yIGRyYXdpbmcgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMDAzKToKLSAgICAvLyB0aGUgbWFpbiB0aHJlYWQgaXMg
d2FpdGluZyBmb3IgdGhlIEdTdHJlYW1lciB0aHJlYWQgdG8gcGF1c2UsIGJ1dCB0aGUgR1N0cmVh
bWVyIHRocmVhZCBpcyBsb2NrZWQgd2FpdGluZyBmb3IgdGhlCi0gICAgLy8gbWFpbiB0aHJlYWQg
dG8gZHJhdy4gVGhpcyBkZWFkbG9jayBkb2Vzbid0IGhhcHBlbiB3aGVuIHVzaW5nIEFDIGJlY2F1
c2UgdGhlIHNhbXBsZSBpcyBwcm9jZXNzZWQgKG5vdCBwYWludGVkKSBpbiB0aGUgY29tcG9zaXRv
cgotICAgIC8vIHRocmVhZCwgc28gdGhlIG1haW4gdGhyZWFkIGNhbiByZXF1ZXN0IHRoZSBwYXVz
ZSBhbmQgd2FpdCBpZiB0aGUgR1N0cmVhbWVyIHRocmVhZCBpcyB3YWl0aW5nIGZvciB0aGUgY29t
cG9zaXRvciB0aHJlYWQuCi0gICAgLy8KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNl
ZCB3aGVuIGRlc3Ryb3lpbmcgdGhlIHBsYXllciAoZGVzdHJveWluZyBwYXJhbWV0ZXIgaXMgdHJ1
ZSksIHRvIHJlbGVhc2UgdGhlIGdzdHJlYW1lciB0aHJlYWQgZnJvbQotICAgIC8vIG1fZHJhd0Nv
bmRpdGlvbiBhbmQgdG8gZW5zdXJlIHRoYXQgbmV3IHRyaWdnZXJSZXBhaW50IGNhbGxzIHdvbid0
IHdhaXQgb24gbV9kcmF3Q29uZGl0aW9uLgotICAgIGlmICghbV9yZW5kZXJpbmdDYW5CZUFjY2Vs
ZXJhdGVkKSB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZHJhd011dGV4KTsKLSAgICAg
ICAgbV9kcmF3VGltZXIuc3RvcCgpOwotICAgICAgICBtX2Rlc3Ryb3lpbmcgPSBkZXN0cm95aW5n
OwotICAgICAgICBtX2RyYXdDb25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAgfQotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnRDYW5jZWxsZWRDYWxsYmFj
ayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCi17Ci0gICAgcGxheWVy
LT5jYW5jZWxSZXBhaW50KCk7Ci19Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotR3N0Rmxvd1Jl
dHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuZXdTYW1wbGVDYWxsYmFjayhH
c3RFbGVtZW50KiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIp
Ci17Ci0gICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3Np
bmtfcHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5LKHNpbmspKSk7Ci0gICAgcGxheWVyLT50cmlnZ2Vy
UmVwYWludChzYW1wbGUuZ2V0KCkpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsKLX0KLQotR3N0
Rmxvd1JldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuZXdQcmVyb2xsQ2Fs
bGJhY2soR3N0RWxlbWVudCogc2luaywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSog
cGxheWVyKQotewotICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0
X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1RfQVBQX1NJTksoc2luaykpKTsKLSAgICBwbGF5ZXIt
PnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmZsdXNoQ3VycmVudEJ1
ZmZlcigpCi17Ci0gICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4
KTsKLQotICAgIGlmIChtX3NhbXBsZSkgewotICAgICAgICAvLyBSZXBsYWNlIGJ5IGEgbmV3IHNh
bXBsZSBoYXZpbmcgb25seSB0aGUgY2Fwcywgc28gdGhpcyBkdW1teSBzYW1wbGUgaXMgc3RpbGwg
dXNlZnVsIHRvIGdldCB0aGUgZGltZW5zaW9ucy4KLSAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBy
ZXNpemluZyBwcm9ibGVtcyB3aGVuIHRoZSB2aWRlbyBjaGFuZ2VzIGl0cyBxdWFsaXR5IGFuZCBh
IERSQUlOIGlzIHBlcmZvcm1lZC4KLSAgICAgICAgY29uc3QgR3N0U3RydWN0dXJlKiBpbmZvID0g
Z3N0X3NhbXBsZV9nZXRfaW5mbyhtX3NhbXBsZS5nZXQoKSk7Ci0gICAgICAgIG1fc2FtcGxlID0g
YWRvcHRHUmVmKGdzdF9zYW1wbGVfbmV3KG51bGxwdHIsIGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9z
YW1wbGUuZ2V0KCkpLAotICAgICAgICAgICAgZ3N0X3NhbXBsZV9nZXRfc2VnbWVudChtX3NhbXBs
ZS5nZXQoKSksIGluZm8gPyBnc3Rfc3RydWN0dXJlX2NvcHkoaW5mbykgOiBudWxscHRyKSk7Ci0g
ICAgfQotCi0gICAgYm9vbCBzaG91bGRXYWl0ID0gbV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9PSBH
c3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6VmlkZW80TGludXg7Ci0gICAgYXV0byBwcm94eU9wZXJh
dGlvbiA9IFtzaG91bGRXYWl0LCBwaXBlbGluZSA9IHBpcGVsaW5lKCldKFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUsICJGbHVzaGluZyB2aWRlbyBzYW1wbGUgJXMiLCBzaG91bGRXYWl0ID8gInN5bmNocm9u
b3VzbHkiIDogIiIpOwotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcighc2hvdWxkV2FpdCA/ICZw
cm94eS5sb2NrKCkgOiBudWxscHRyKTsKLQotICAgICAgICBpZiAocHJveHkuaXNBY3RpdmUoKSkK
LSAgICAgICAgICAgIHByb3h5LmRyb3BDdXJyZW50QnVmZmVyV2hpbGVQcmVzZXJ2aW5nVGV4dHVy
ZShzaG91bGRXYWl0KTsKLSAgICB9OwotCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgcHJveHlPcGVy
YXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1f
bmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICBwcm94eU9wZXJhdGlv
bigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUp
Ci17Ci0gICAgbV9zaXplID0gc2l6ZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghbV9wbGF5ZXItPnZpc2libGUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKLSAg
ICBpZiAoIUdTVF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIC8vIEVuc3VyZSB0aGUgaW5wdXQgaXMgUkdCQS4g
V2UgaGFuZGxlIFlVViB2aWRlbyBuYXRpdmVseSwgc28gd2UgbmVlZCB0byBkbwotICAgIC8vIHRo
aXMgY29udmVyc2lvbiBvbi1kZW1hbmQgaGVyZS4KLSAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdz
dF9zYW1wbGVfZ2V0X2J1ZmZlcihtX3NhbXBsZS5nZXQoKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFH
U1RfSVNfQlVGRkVSKGJ1ZmZlcikpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHc3RDYXBzKiBj
YXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyhtX3NhbXBsZS5nZXQoKSk7Ci0KLSAgICBHc3RWaWRl
b0luZm8gdmlkZW9JbmZvOwotICAgIGdzdF92aWRlb19pbmZvX2luaXQoJnZpZGVvSW5mbyk7Ci0g
ICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnZpZGVvSW5mbywgY2FwcykpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghR1NUX1ZJREVPX0lORk9fSVNfUkdCKCZ2aWRlb0luZm8p
KSB7Ci0gICAgICAgIGlmICghbV9jb2xvckNvbnZlcnQpIHsKLSAgICAgICAgICAgIEdzdE1lbW9y
eSogbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeShidWZmZXIsIDApOwotICAgICAgICAgICAg
R3N0R0xDb250ZXh0KiBjb250ZXh0ID0gKChHc3RHTEJhc2VNZW1vcnkqKW1lbSktPmNvbnRleHQ7
Ci0gICAgICAgICAgICBtX2NvbG9yQ29udmVydCA9IGFkb3B0R1JlZihnc3RfZ2xfY29sb3JfY29u
dmVydF9uZXcoY29udGV4dCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2NvbG9yQ29u
dmVydElucHV0Q2FwcyB8fCAhZ3N0X2NhcHNfaXNfZXF1YWwobV9jb2xvckNvbnZlcnRJbnB1dENh
cHMuZ2V0KCksIGNhcHMpKSB7Ci0gICAgICAgICAgICBtX2NvbG9yQ29udmVydElucHV0Q2FwcyA9
IGNhcHM7Ci0gICAgICAgICAgICBtX2NvbG9yQ29udmVydE91dHB1dENhcHMgPSBhZG9wdEdSZWYo
Z3N0X2NhcHNfY29weShjYXBzKSk7Ci0jaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElB
TgotICAgICAgICAgICAgY29uc3QgZ2NoYXIqIGZvcm1hdFN0cmluZyA9IEdTVF9WSURFT19JTkZP
X0hBU19BTFBIQSgmdmlkZW9JbmZvKSA/ICJSR0JBIiA6ICJCR1J4IjsKLSNlbHNlCi0gICAgICAg
ICAgICBjb25zdCBnY2hhciogZm9ybWF0U3RyaW5nID0gR1NUX1ZJREVPX0lORk9fSEFTX0FMUEhB
KCZ2aWRlb0luZm8pID8gIlJHQkEiIDogIlJHQngiOwotI2VuZGlmCi0gICAgICAgICAgICBnc3Rf
Y2Fwc19zZXRfc2ltcGxlKG1fY29sb3JDb252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSwgImZvcm1hdCIs
IEdfVFlQRV9TVFJJTkcsIGZvcm1hdFN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAo
IWdzdF9nbF9jb2xvcl9jb252ZXJ0X3NldF9jYXBzKG1fY29sb3JDb252ZXJ0LmdldCgpLCBjYXBz
LCBtX2NvbG9yQ29udmVydE91dHB1dENhcHMuZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCi0gICAgICAgIEdSZWZQdHI8R3N0QnVmZmVyPiByZ2JCdWZmZXIgPSBh
ZG9wdEdSZWYoZ3N0X2dsX2NvbG9yX2NvbnZlcnRfcGVyZm9ybShtX2NvbG9yQ29udmVydC5nZXQo
KSwgYnVmZmVyKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghR1NUX0lTX0JVRkZFUihyZ2JCdWZm
ZXIuZ2V0KCkpKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjb25zdCBHc3RTdHJ1
Y3R1cmUqIGluZm8gPSBnc3Rfc2FtcGxlX2dldF9pbmZvKG1fc2FtcGxlLmdldCgpKTsKLSAgICAg
ICAgbV9zYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X3NhbXBsZV9uZXcocmdiQnVmZmVyLmdldCgpLCBt
X2NvbG9yQ29udmVydE91dHB1dENhcHMuZ2V0KCksCi0gICAgICAgICAgICBnc3Rfc2FtcGxlX2dl
dF9zZWdtZW50KG1fc2FtcGxlLmdldCgpKSwgaW5mbyA/IGdzdF9zdHJ1Y3R1cmVfY29weShpbmZv
KSA6IG51bGxwdHIpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGF1dG8gZ3N0SW1hZ2UgPSBJbWFn
ZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UobV9zYW1wbGUuZ2V0KCkpOwotICAgIGlmICghZ3N0SW1h
Z2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnRleHQuZHJhd0ltYWdlKGdzdEltYWdlLT5p
bWFnZSgpLCByZWN0LCBnc3RJbWFnZS0+cmVjdCgpLCB7IENvbXBvc2l0ZUNvcHksIG1fcmVuZGVy
aW5nQ2FuQmVBY2NlbGVyYXRlZCA/IG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA6IEltYWdlT3Jp
ZW50YXRpb24oKSB9KTsKLX0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1ib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0
dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0KLSAg
ICBpZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKLQotICAgIGlmICgh
R1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0ZyYW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9IG1h
a2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4obV9zYW1wbGUuZ2V0KCksIG1fdmlkZW9EZWNv
ZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1hcHBlckZsYWdzLCB0cnVlKTsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gbGF5ZXJCdWZmZXIgPSBm
cmFtZUhvbGRlci0+cGxhdGZvcm1MYXllckJ1ZmZlcigpOwotICAgIGlmICghbGF5ZXJCdWZmZXIp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gc2l6ZSA9IGZyYW1lSG9sZGVyLT5z
aXplKCk7Ci0gICAgaWYgKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdo
dCgpKQotICAgICAgICBzaXplID0gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOwotCi0gICAgaWYgKCFt
X3ZpZGVvVGV4dHVyZUNvcGllcikKLSAgICAgICAgbV92aWRlb1RleHR1cmVDb3BpZXIgPSBtYWtl
VW5pcXVlPFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcj4oVEVYVFVSRV9DT1BJRVJfQ09MT1Jf
Q09OVkVSVF9GTEFHKTsKLQotICAgIGZyYW1lSG9sZGVyLT53YWl0Rm9yQ1BVU3luYygpOwotCi0g
ICAgcmV0dXJuIG1fdmlkZW9UZXh0dXJlQ29waWVyLT5jb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9y
bVRleHR1cmUoKmxheWVyQnVmZmVyLmdldCgpLCBzaXplLCBvdXRwdXRUZXh0dXJlLCBvdXRwdXRU
YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgbV92aWRl
b1NvdXJjZU9yaWVudGF0aW9uKTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpCi17Ci0jaWYgVVNF
KENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX3VzaW5n
RmFsbGJhY2tWaWRlb1NpbmspCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBz
YW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKLQotICAgIGlmICghR1NUX0lT
X1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVIb2xkZXI+IGZyYW1lSG9sZGVyID0gbWFrZVVu
aXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPihtX3NhbXBsZS5nZXQoKSwgbV92aWRlb0RlY29kZXJQ
bGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3MsIHRydWUpOwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9IGZyYW1l
SG9sZGVyLT5wbGF0Zm9ybUxheWVyQnVmZmVyKCk7Ci0gICAgaWYgKCFsYXllckJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNpemUgPSBmcmFtZUhvbGRlci0+c2l6
ZSgpOwotICAgIGlmIChtX3ZpZGVvU291cmNlT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQo
KSkKLSAgICAgICAgc2l6ZSA9IHNpemUudHJhbnNwb3NlZFNpemUoKTsKLQotICAgIEdMQ29udGV4
dCogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5n
KCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OwotCi0gICAgaWYgKCFtX3ZpZGVvVGV4dHVyZUNvcGllcikKLSAgICAgICAgbV92aWRlb1RleHR1
cmVDb3BpZXIgPSBtYWtlVW5pcXVlPFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcj4oVEVYVFVS
RV9DT1BJRVJfQ09MT1JfQ09OVkVSVF9GTEFHKTsKLQotICAgIGZyYW1lSG9sZGVyLT53YWl0Rm9y
Q1BVU3luYygpOwotCi0gICAgaWYgKCFtX3ZpZGVvVGV4dHVyZUNvcGllci0+Y29weVZpZGVvVGV4
dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCpsYXllckJ1ZmZlci5nZXQoKSwgc2l6ZSwgMCwgR0xfVEVY
VFVSRV8yRCwgMCwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIG1f
dmlkZW9Tb3VyY2VPcmllbnRhdGlvbikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
cmV0dXJuIGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRl
eHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fdmlkZW9UZXh0
dXJlQ29waWVyLT5yZXN1bHRUZXh0dXJlKCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkp
OwotI2Vsc2UKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgotfQotI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVJfR0wpCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0
VmlkZW9Tb3VyY2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewot
ICAgIGlmIChtX3ZpZGVvU291cmNlT3JpZW50YXRpb24gPT0gb3JpZW50YXRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOwot
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAgICB1cGRhdGVUZXh0dXJlTWFwcGVyRmxhZ3Mo
KTsKLSNlbmRpZgotfQotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp1cGRhdGVUZXh0dXJlTWFwcGVyRmxhZ3MoKQotewot
ICAgIHN3aXRjaCAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uKSB7Ci0gICAgY2FzZSBJbWFnZU9y
aWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0OgotICAgICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9
IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luUmln
aHRUb3A6Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpT
aG91bGRSb3RhdGVUZXh0dXJlOTA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW1hZ2VPcmll
bnRhdGlvbjo6T3JpZ2luQm90dG9tUmlnaHQ6Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdz
ID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRSb3RhdGVUZXh0dXJlMTgwOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEltYWdlT3JpZW50YXRpb246Ok9yaWdpbkxlZnRCb3R0b206Ci0gICAgICAg
IG1fdGV4dHVyZU1hcHBlckZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRSb3RhdGVUZXh0
dXJlMjcwOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBGSVhNRTog
SGFuZGxlIE9yaWdpblRvcFJpZ2h0LCBPcmlnaW5Cb3R0b21MZWZ0LCBPcmlnaW5MZWZ0VG9wIGFu
ZCBPcmlnaW5SaWdodEJvdHRvbT8KLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyRmxhZ3MgPSAwOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0jZW5kaWYKLQotYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAotewotICAgIHJldHVy
biB0cnVlOwotfQotCi1NZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKLXsKLSAgICBpZiAobV9yZWFk
eVN0YXRlID09IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKLSAgICAgICAgcmV0dXJuIE1lZGlh
UGxheWVyOjpVbmtub3duOwotCi0gICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQotICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07Ci0KLSAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkRv
d25sb2FkOwotfQotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLUdzdEVsZW1lbnQqIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZUdMQXBwU2luaygpCi17Ci0gICAgR3N0RWxl
bWVudCogYXBwc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc2luayIsICJ3ZWJr
aXQtZ2wtdmlkZW8tc2luayIpOwotICAgIGlmICghYXBwc2luaykKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBnX29iamVjdF9zZXQoYXBwc2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIs
IEZBTFNFLCAiZW1pdC1zaWduYWxzIiwgVFJVRSwgIm1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7
Ci0gICAgZ19zaWduYWxfY29ubmVjdChhcHBzaW5rLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0so
bmV3U2FtcGxlQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGFwcHNpbmss
ICJuZXctcHJlcm9sbCIsIEdfQ0FMTEJBQ0sobmV3UHJlcm9sbENhbGxiYWNrKSwgdGhpcyk7Ci0K
LSAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKGFwcHNpbmssICJzaW5rIikpOwotICAgIGdzdF9wYWRfYWRkX3Byb2JlKHBhZC5nZXQo
KSwgc3RhdGljX2Nhc3Q8R3N0UGFkUHJvYmVUeXBlPihHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCB8
IEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dOU1RSRUFNIHwgR1NUX1BBRF9QUk9CRV9UWVBF
X0VWRU5UX0ZMVVNIKSwgW10gKEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5mbywgIGdwb2lu
dGVyIHVzZXJEYXRhKSAtPiBHc3RQYWRQcm9iZVJldHVybiB7Ci0gICAgICAgIC8vIEluIHNvbWUg
cGxhdGZvcm1zIChlLmcuIE9wZW5NQVggb24gdGhlIFJhc3BiZXJyeSBQaSkgd2hlbiBhIHJlc29s
dXRpb24gY2hhbmdlIG9jY3VycyB0aGUKLSAgICAgICAgLy8gcGlwZWxpbmUgaGFzIHRvIGJlIGRy
YWluZWQgYmVmb3JlIGEgZnJhbWUgd2l0aCB0aGUgbmV3IHJlc29sdXRpb24gY2FuIGJlIGRlY29k
ZWQuCi0gICAgICAgIC8vIEluIHRoaXMgY29udGV4dCwgaXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBk
b24ndCBob2xkIHJlZmVyZW5jZXMgdG8gYW55IHByZXZpb3VzIGZyYW1lCi0gICAgICAgIC8vIChl
LmcuIG1fc2FtcGxlKSBzbyB0aGF0IGRlY29kaW5nIGNhbiBjb250aW51ZS4KLSAgICAgICAgLy8g
V2UgYXJlIGFsc28gbm90IHN1cHBvc2VkIHRvIGtlZXAgdGhlIG9yaWdpbmFsIGZyYW1lIGFmdGVy
IGEgZmx1c2guCi0gICAgICAgIGlmIChpbmZvLT50eXBlICYgR1NUX1BBRF9QUk9CRV9UWVBFX1FV
RVJZX0RPV05TVFJFQU0pIHsKLSAgICAgICAgICAgIGlmIChHU1RfUVVFUllfVFlQRShHU1RfUEFE
X1BST0JFX0lORk9fUVVFUlkoaW5mbykpICE9IEdTVF9RVUVSWV9EUkFJTikKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLSAgICAgICAgICAgIEdTVF9ERUJVRygiQWN0
aW5nIHVwb24gRFJBSU4gcXVlcnkiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5mby0+dHlw
ZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCkgewotICAgICAgICAgICAgaWYgKEdT
VF9FVkVOVF9UWVBFKEdTVF9QQURfUFJPQkVfSU5GT19FVkVOVChpbmZvKSkgIT0gR1NUX0VWRU5U
X0ZMVVNIX1NUQVJUKQotICAgICAgICAgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOwot
ICAgICAgICAgICAgR1NUX0RFQlVHKCJBY3RpbmcgdXBvbiBmbHVzaC1zdGFydCBldmVudCIpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYXV0byogcGxheWVyID0gc3RhdGljX2Nhc3Q8TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSo+KHVzZXJEYXRhKTsKLSAgICAgICAgcGxheWVyLT5mbHVz
aEN1cnJlbnRCdWZmZXIoKTsKLSAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci0gICAg
fSwgdGhpcywgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gYXBwc2luazsKLX0KLQotR3N0RWxlbWVu
dCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlkZW9TaW5rR0woKQot
ewotICAgIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7Ci0gICAgR3N0RWxlbWVudCogdmlkZW9TaW5r
ID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7Ci0gICAgR3N0RWxlbWVudCogdXBsb2FkID0gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCJnbHVwbG9hZCIsIG51bGxwdHIpOwotICAgIEdzdEVsZW1lbnQq
IGNvbG9yY29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZ2xjb2xvcmNvbnZlcnQi
LCBudWxscHRyKTsKLSAgICBHc3RFbGVtZW50KiBhcHBzaW5rID0gY3JlYXRlR0xBcHBTaW5rKCk7
Ci0KLSAgICAvLyBnbHNpbmtiaW4gaXMgbm90IHVzZWQgYmVjYXVzZSBpdCBpbmNsdWRlcyBnbGNv
bG9yY29udmVydCB3aGljaCBvbmx5IHByb2Nlc3MgUkdCQSwKLSAgICAvLyBidXQgd2UgY2FuIGRp
c3BsYXkgWVVWIGZvcm1hdHMgdG9vLgotCi0gICAgaWYgKCFhcHBzaW5rIHx8ICF1cGxvYWQgfHwg
IWNvbG9yY29udmVydCkgewotICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBH
c3RHTCBlbGVtZW50cyIpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHZpZGVvU2luayk7Ci0K
LSAgICAgICAgaWYgKHVwbG9hZCkKLSAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYodXBsb2Fk
KTsKLSAgICAgICAgaWYgKGNvbG9yY29udmVydCkKLSAgICAgICAgICAgIGdzdF9vYmplY3RfdW5y
ZWYoY29sb3Jjb252ZXJ0KTsKLSAgICAgICAgaWYgKGFwcHNpbmspCi0gICAgICAgICAgICBnc3Rf
b2JqZWN0X3VucmVmKGFwcHNpbmspOwotCi0gICAgICAgIGdfd2FybmluZygiV2ViS2l0IHdhc24n
dCBhYmxlIHRvIGZpbmQgdGhlIEdTdHJlYW1lciBvcGVuZ2wgcGx1Z2luLiBIYXJkd2FyZS1hY2Nl
bGVyYXRlZCB6ZXJvLWNvcHkgdmlkZW8gcmVuZGVyaW5nIGNhbid0IGJlIGVuYWJsZWQgd2l0aG91
dCB0aGlzIHBsdWdpbi4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
Z3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKHZpZGVvU2luayksIHVwbG9hZCwgY29sb3Jjb252ZXJ0
LCBhcHBzaW5rLCBudWxscHRyKTsKLQotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0
R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZygidmlkZW8veC1yYXcsIGZvcm1hdCA9IChzdHJpbmcp
ICIgR1NUX0dMX0NBUFNfRk9STUFUKSk7Ci0gICAgZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzKGNhcHMu
Z2V0KCksIDAsIGdzdF9jYXBzX2ZlYXR1cmVzX25ldyhHU1RfQ0FQU19GRUFUVVJFX01FTU9SWV9H
TF9NRU1PUlksIG51bGxwdHIpKTsKLSAgICBnX29iamVjdF9zZXQoYXBwc2luaywgImNhcHMiLCBj
YXBzLmdldCgpLCBudWxscHRyKTsKLQotICAgIHJlc3VsdCAmPSBnc3RfZWxlbWVudF9saW5rX21h
bnkodXBsb2FkLCBjb2xvcmNvbnZlcnQsIGFwcHNpbmssIG51bGxwdHIpOwotCi0gICAgLy8gV29y
a2Fyb3VuZCB1bnRpbCB3ZSBjYW4gZGVwZW5kIG9uIEdTdHJlYW1lciAxLjE2LjIuCi0gICAgLy8g
aHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYXNl
L2NvbW1pdC84ZDMyZGUwOTA1NTRjZjI5ZmUzNTlmODNhYTQ2MDAwYmE2NThhNjkzCi0gICAgLy8g
Rm9yY2luZyBhIGNvbG9yIGNvbnZlcnNpb24gdG8gUkdCQSBoZXJlIGFsbG93cyBnbHVwbG9hZCB0
byBpbnRlcm5hbGx5IHVzZQotICAgIC8vIGFuIHVwbG9hZGVyIHRoYXQgYWRkcyBhIFZpZGVvTWV0
YSwgdGhyb3VnaCB0aGUgVGV4dHVyZVVwbG9hZE1ldGEgY2FwcwotICAgIC8vIGZlYXR1cmUsIHdp
dGhvdXQgbmVlZGluZyB0aGUgcGF0Y2ggYWJvdmUuIEhvd2V2ZXIgdGhpcyBzcGVjaWZpYyBjYXBz
Ci0gICAgLy8gZmVhdHVyZSBpcyBnb2luZyB0byBiZSByZW1vdmVkIGZyb20gR1N0cmVhbWVyIHNv
IGl0IGlzIGNvbnNpZGVyZWQgYQotICAgIC8vIHNob3J0LXRlcm0gd29ya2Fyb3VuZC4gVGhpcyBj
b2RlIHBhdGggbW9zdCBsaWtlbHkgd2lsbCBoYXZlIGEgbmVnYXRpdmUKLSAgICAvLyBwZXJmb3Jt
YW5jZSBpbXBhY3Qgb24gZW1iZWRkZWQgcGxhdGZvcm1zIGFzIHdlbGwuIERvd25zdHJlYW0gZW1i
ZWRkZXJzCi0gICAgLy8gYXJlIGhpZ2hseSBlbmNvdXJhZ2VkIHRvIGNoZXJyeS1waWNrIHRoZSBw
YXRjaCBsaW5rZWQgYWJvdmUgaW4gdGhlaXIgQlNQCi0gICAgLy8gYW5kIHNldCB0aGUgV0VCS0lU
X0dTVF9OT19SR0JBX0NPTlZFUlNJT04gZW52aXJvbm1lbnQgdmFyaWFibGUgdW50aWwKLSAgICAv
LyBHU3RyZWFtZXIgMS4xNi4yIGlzIHJlbGVhc2VkLgotICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE0MjIKLSAgICBpZiAod2Via2l0R3N0
Q2hlY2tWZXJzaW9uKDEsIDE2LCAyKSB8fCBnZXRlbnYoIldFQktJVF9HU1RfTk9fUkdCQV9DT05W
RVJTSU9OIikpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZCh1cGxvYWQsICJzaW5rIikpOwotICAgICAgICBnc3RfZWxl
bWVudF9hZGRfcGFkKHZpZGVvU2luaywgZ3N0X2dob3N0X3BhZF9uZXcoInNpbmsiLCBwYWQuZ2V0
KCkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBHc3RFbGVtZW50KiBjYXBzRmlsdGVyID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJjYXBzZmlsdGVyIiwgbnVsbHB0cik7Ci0gICAgICAgIEdS
ZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZygidmlk
ZW8veC1yYXcsIGZvcm1hdD1SR0JBIikpOwotICAgICAgICBnX29iamVjdF9zZXQoY2Fwc0ZpbHRl
ciwgImNhcHMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKLQotICAgICAgICBHc3RFbGVtZW50KiB2
aWRlb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInZpZGVvY29udmVydCIsIG51
bGxwdHIpOwotICAgICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVCh2aWRlb1Npbmsp
LCBjYXBzRmlsdGVyLCB2aWRlb2NvbnZlcnQsIG51bGxwdHIpOwotICAgICAgICByZXN1bHQgJj0g
Z3N0X2VsZW1lbnRfbGlua19tYW55KGNhcHNGaWx0ZXIsIHZpZGVvY29udmVydCwgdXBsb2FkLCBu
dWxscHRyKTsKLQotICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9l
bGVtZW50X2dldF9zdGF0aWNfcGFkKGNhcHNGaWx0ZXIsICJzaW5rIikpOwotICAgICAgICBnc3Rf
ZWxlbWVudF9hZGRfcGFkKHZpZGVvU2luaywgZ3N0X2dob3N0X3BhZF9uZXcoInNpbmsiLCBwYWQu
Z2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBHU1RfV0FSTklO
RygiRmFpbGVkIHRvIGxpbmsgR3N0R0wgZWxlbWVudHMiKTsKLSAgICAgICAgZ3N0X29iamVjdF91
bnJlZih2aWRlb1NpbmspOwotICAgICAgICB2aWRlb1NpbmsgPSBudWxscHRyOwotICAgIH0KLSAg
ICByZXR1cm4gdmlkZW9TaW5rOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OmVuc3VyZUdMVmlkZW9TaW5rQ29udGV4dCgpCi17Ci0gICAgaWYgKCFtX2dsRGlzcGxh
eUVsZW1lbnRDb250ZXh0KQotICAgICAgICBtX2dsRGlzcGxheUVsZW1lbnRDb250ZXh0ID0gYWRv
cHRHUmVmKHJlcXVlc3RHTENvbnRleHQoR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFKSk7Ci0K
LSAgICBpZiAobV9nbERpc3BsYXlFbGVtZW50Q29udGV4dCkKLSAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X2NvbnRleHQobV92aWRlb1NpbmsuZ2V0KCksIG1fZ2xEaXNwbGF5RWxlbWVudENvbnRleHQu
Z2V0KCkpOwotCi0gICAgaWYgKCFtX2dsQXBwRWxlbWVudENvbnRleHQpCi0gICAgICAgIG1fZ2xB
cHBFbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0R0xDb250ZXh0KCJnc3QuZ2wuYXBw
X2NvbnRleHQiKSk7Ci0KLSAgICBpZiAobV9nbEFwcEVsZW1lbnRDb250ZXh0KQotICAgICAgICBn
c3RfZWxlbWVudF9zZXRfY29udGV4dChtX3ZpZGVvU2luay5nZXQoKSwgbV9nbEFwcEVsZW1lbnRD
b250ZXh0LmdldCgpKTsKLX0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQotCi0jaWYgVVNF
KEdTVFJFQU1FUl9IT0xFUFVOQ0gpCi1zdGF0aWMgdm9pZCBzZXRSZWN0YW5nbGVUb1ZpZGVvU2lu
ayhHc3RFbGVtZW50KiB2aWRlb1NpbmssIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8g
SGVyZSBnb2VzIHRoZSBwbGF0Zm9ybS1kZXBlbmRhbnQgY29kZSB0byBzZXQgdG8gdGhlIHZpZGVv
U2luayB0aGUgc2l6ZQotICAgIC8vIGFuZCBwb3NpdGlvbiBvZiB0aGUgdmlkZW8gcmVuZGVyaW5n
IHdpbmRvdy4gTWFyayB0aGVtIHVudXNlZCBhcyBkZWZhdWx0LgotICAgIFVOVVNFRF9QQVJBTSh2
aWRlb1NpbmspOwotICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKLX0KLQotY2xhc3MgR1N0cmVhbWVy
SG9sZVB1bmNoQ2xpZW50IDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVy
OjpIb2xlUHVuY2hDbGllbnQgewotcHVibGljOgotICAgIEdTdHJlYW1lckhvbGVQdW5jaENsaWVu
dChHUmVmUHRyPEdzdEVsZW1lbnQ+JiYgdmlkZW9TaW5rKSA6IG1fdmlkZW9TaW5rKFdURk1vdmUo
dmlkZW9TaW5rKSkgeyB9OwotICAgIHZvaWQgc2V0VmlkZW9SZWN0YW5nbGUoY29uc3QgSW50UmVj
dCYgcmVjdCkgZmluYWwgeyBzZXRSZWN0YW5nbGVUb1ZpZGVvU2luayhtX3ZpZGVvU2luay5nZXQo
KSwgcmVjdCk7IH0KLXByaXZhdGU6Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ZpZGVvU2lu
azsKLX07Ci0KLUdzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNy
ZWF0ZUhvbGVQdW5jaFZpZGVvU2luaygpCi17Ci0gICAgLy8gSGVyZSBnb2VzIHRoZSBwbGF0Zm9y
bS1kZXBlbmRhbnQgY29kZSB0byBjcmVhdGUgdGhlIHZpZGVvU2luay4gQXMgYSBkZWZhdWx0Ci0g
ICAgLy8gd2UgdXNlIGEgZmFrZVZpZGVvU2luayBzbyBub3RoaW5nIGlzIGRyYXduIHRvIHRoZSBw
YWdlLgotICAgIEdzdEVsZW1lbnQqIHZpZGVvU2luayA9ICBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoImZha2V2aWRlb3NpbmsiLCBudWxscHRyKTsKLQotICAgIHJldHVybiB2aWRlb1Npbms7Ci19
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cHVzaE5leHRIb2xlUHVu
Y2hCdWZmZXIoKQotewotICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQotICAgICAgICBbdGhpc10o
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7Ci0gICAgICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGxheWVyQnVmZmVy
ID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4oMCwgbV9zaXpl
LCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZE5vdEJsZW5kLCBHTF9ET05UX0NBUkUpOwotICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lckhvbGVQdW5jaENsaWVudD4gaG9sZVB1bmNo
Q2xpZW50ID0gbWFrZVVuaXF1ZTxHU3RyZWFtZXJIb2xlUHVuY2hDbGllbnQ+KG1fdmlkZW9TaW5r
LmdldCgpKTsKLSAgICAgICAgICAgIGxheWVyQnVmZmVyLT5zZXRIb2xlUHVuY2hDbGllbnQoV1RG
TW92ZShob2xlUHVuY2hDbGllbnQpKTsKLSAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVy
KFdURk1vdmUobGF5ZXJCdWZmZXIpKTsKLSAgICAgICAgfTsKLQotI2lmIFVTRShOSUNPU0lBKQot
ICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKLSNlbHNlCi0gICAg
cHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotfQotI2VuZGlm
Ci0KLUdzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZp
ZGVvU2luaygpCi17Ci0gICAgYWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTsKLQot
I2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQotICAgIG1fdmlkZW9TaW5rID0gY3JlYXRlSG9s
ZVB1bmNoVmlkZW9TaW5rKCk7Ci0gICAgcHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsKLSAgICBy
ZXR1cm4gbV92aWRlb1NpbmsuZ2V0KCk7Ci0jZW5kaWYKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wp
Ci0gICAgaWYgKG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkKLSAgICAgICAgbV92aWRlb1Np
bmsgPSBjcmVhdGVWaWRlb1NpbmtHTCgpOwotI2VuZGlmCi0KLSAgICBpZiAoIW1fdmlkZW9TaW5r
KSB7Ci0gICAgICAgIG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayA9IHRydWU7Ci0gICAgICAgIG1f
dmlkZW9TaW5rID0gd2Via2l0VmlkZW9TaW5rTmV3KCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX3ZpZGVvU2luay5nZXQoKSwgInJlcGFpbnQtcmVxdWVzdGVkIiwgR19DQUxM
QkFDSyhyZXBhaW50Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKG1fdmlkZW9TaW5rLmdldCgpLCAicmVwYWludC1jYW5jZWxsZWQiLCBHX0NBTExCQUNL
KHJlcGFpbnRDYW5jZWxsZWRDYWxsYmFjayksIHRoaXMpOwotICAgIH0KLQotICAgIEdzdEVsZW1l
bnQqIHZpZGVvU2luayA9IG51bGxwdHI7Ci0jaWYgRU5BQkxFKE1FRElBX1NUQVRJU1RJQ1MpCi0g
ICAgbV9mcHNTaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJmcHNkaXNwbGF5c2luayIs
ICJzaW5rIik7Ci0gICAgaWYgKG1fZnBzU2luaykgewotICAgICAgICBnX29iamVjdF9zZXQobV9m
cHNTaW5rLmdldCgpLCAic2lsZW50IiwgVFJVRSAsIG51bGxwdHIpOwotCi0gICAgICAgIC8vIFR1
cm4gb2ZmIHRleHQgb3ZlcmxheSB1bmxlc3MgdHJhY2luZyBpcyBlbmFibGVkLgotICAgICAgICBp
ZiAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJlc2hvbGQod2Via2l0X21lZGlhX3BsYXllcl9k
ZWJ1ZykgPCBHU1RfTEVWRUxfVFJBQ0UpCi0gICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNT
aW5rLmdldCgpLCAidGV4dC1vdmVybGF5IiwgRkFMU0UgLCBudWxscHRyKTsKLQotICAgICAgICBp
ZiAoZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1MobV9mcHNT
aW5rLmdldCgpKSwgInZpZGVvLXNpbmsiKSkgewotICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1f
ZnBzU2luay5nZXQoKSwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2luay5nZXQoKSwgbnVsbHB0cik7
Ci0gICAgICAgICAgICB2aWRlb1NpbmsgPSBtX2Zwc1NpbmsuZ2V0KCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgbV9mcHNTaW5rID0gbnVsbHB0cjsKLSAgICB9Ci0jZW5kaWYKLQotICAg
IGlmICghbV9mcHNTaW5rKQotICAgICAgICB2aWRlb1NpbmsgPSBtX3ZpZGVvU2luay5nZXQoKTsK
LQotICAgIEFTU0VSVCh2aWRlb1NpbmspOwotCi0gICAgcmV0dXJuIHZpZGVvU2luazsKLX0KLQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRTdHJlYW1Wb2x1bWVFbGVt
ZW50KEdzdFN0cmVhbVZvbHVtZSogdm9sdW1lKQotewotICAgIEFTU0VSVCghbV92b2x1bWVFbGVt
ZW50KTsKLSAgICBtX3ZvbHVtZUVsZW1lbnQgPSB2b2x1bWU7Ci0KLSAgICAvLyBXZSBkb24ndCBz
ZXQgdGhlIGluaXRpYWwgdm9sdW1lIGJlY2F1c2Ugd2UgdHJ1c3QgdGhlIHNpbmsgdG8ga2VlcCBp
dCBmb3IgdXMuIFNlZQotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTg5NzQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgaWYgKCFtX3BsYXllci0+cGxh
dGZvcm1Wb2x1bWVDb25maWd1cmF0aW9uUmVxdWlyZWQoKSkgewotICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5nIHN0cmVhbSB2b2x1bWUgdG8gJWYiLCBtX3BsYXll
ci0+dm9sdW1lKCkpOwotICAgICAgICBnc3Rfc3RyZWFtX3ZvbHVtZV9zZXRfdm9sdW1lKG1fdm9s
dW1lRWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJTkVBUiwgc3RhdGlj
X2Nhc3Q8ZG91YmxlPihtX3BsYXllci0+dm9sdW1lKCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTm90IHNldHRpbmcgc3RyZWFtIHZvbHVtZSwg
dHJ1c3Rpbmcgc3lzdGVtIG9uZSIpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiU2V0dGluZyBzdHJlYW0gbXV0ZWQgJXMiLCB0b1N0cmluZyhtX3BsYXllci0+bXV0ZWQoKSku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgZ19vYmplY3Rfc2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwg
Im11dGUiLCBtX3BsYXllci0+bXV0ZWQoKSwgbnVsbHB0cik7Ci0KLSAgICBnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibm90aWZ5Ojp2b2x1bWUiLCBHX0NB
TExCQUNLKHZvbHVtZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJub3RpZnk6Om11dGUiLCBHX0NBTExC
QUNLKG11dGVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLX0KLQotdW5zaWduZWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZGVjb2RlZEZyYW1lQ291bnQoKSBjb25zdAotewotICAg
IGd1aW50NjQgZGVjb2RlZEZyYW1lcyA9IDA7Ci0gICAgaWYgKG1fZnBzU2luaykKLSAgICAgICAg
Z19vYmplY3RfZ2V0KG1fZnBzU2luay5nZXQoKSwgImZyYW1lcy1yZW5kZXJlZCIsICZkZWNvZGVk
RnJhbWVzLCBudWxscHRyKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlY29k
ZWRGcmFtZXMpOwotfQotCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
Ojpkcm9wcGVkRnJhbWVDb3VudCgpIGNvbnN0Ci17Ci0gICAgZ3VpbnQ2NCBmcmFtZXNEcm9wcGVk
ID0gMDsKLSAgICBpZiAobV9mcHNTaW5rKQotICAgICAgICBnX29iamVjdF9nZXQobV9mcHNTaW5r
LmdldCgpLCAiZnJhbWVzLWRyb3BwZWQiLCAmZnJhbWVzRHJvcHBlZCwgbnVsbHB0cik7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcmFtZXNEcm9wcGVkKTsKLX0KLQotdW5zaWdu
ZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6YXVkaW9EZWNvZGVkQnl0ZUNvdW50
KCkgY29uc3QKLXsKLSAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9u
KEdTVF9GT1JNQVRfQllURVMpOwotICAgIGdpbnQ2NCBwb3NpdGlvbiA9IDA7Ci0KLSAgICBpZiAo
YXVkaW9TaW5rKCkgJiYgZ3N0X2VsZW1lbnRfcXVlcnkoYXVkaW9TaW5rKCksIHF1ZXJ5KSkKLSAg
ICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwotCi0g
ICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHBvc2l0aW9uKTsKLX0KLQotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6dmlkZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QKLXsKLSAgICBHc3RRdWVyeSogcXVl
cnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfQllURVMpOwotICAgIGdpbnQ2
NCBwb3NpdGlvbiA9IDA7Ci0KLSAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV92aWRlb1Npbmsu
Z2V0KCksIHF1ZXJ5KSkKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAw
LCAmcG9zaXRpb24pOwotCi0gICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvc2l0aW9uKTsKLX0KLQotI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmluaXRpYWxp
emF0aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRhJiYgaW5pdERhdGEpCi17Ci0gICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtU
aGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERhdGEpXSB7
Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
R1NUX0RFQlVHKCJzY2hlZHVsaW5nIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkIGV2ZW50
IG9mIHNpemUgJXp1IiwgaW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCkpOwotICAgICAgICBHU1Rf
TUVNRFVNUCgiaW5pdCBkYXRhcyIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGlu
aXREYXRhLnBheWxvYWQoKS0+ZGF0YSgpKSwgaW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCkpOwot
ICAgICAgICB3ZWFrVGhpcy0+bV9wbGF5ZXItPmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVk
KGluaXREYXRhLnBheWxvYWRDb250YWluZXJUeXBlKCksIGluaXREYXRhLnBheWxvYWQoKS0+dHJ5
Q3JlYXRlQXJyYXlCdWZmZXIoKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6Y2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFu
Y2UpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChtX2NkbUluc3Rh
bmNlID09ICZpbnN0YW5jZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3BpcGVsaW5l
KSB7Ci0gICAgICAgIEdTVF9FUlJPUigibm8gcGlwZWxpbmUgeWV0Iik7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jZG1JbnN0
YW5jZSA9ICZpbnN0YW5jZTsKLQotICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFk
b3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0taW5zdGFuY2UiLCBGQUxTRSkpOwotICAg
IEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0
cnVjdHVyZShjb250ZXh0LmdldCgpKTsKLSAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3Ry
dWN0dXJlLCAiY2RtLWluc3RhbmNlIiwgR19UWVBFX1BPSU5URVIsIG1fY2RtSW5zdGFuY2UtPnBy
b3h5Q0RNKCkuZ2V0KCksIG51bGxwdHIpOwotICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdT
VF9FTEVNRU5UKG1fcGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgpKTsKLQotICAgIEdTVF9E
RUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNETSBwcm94eSBpbnN0YW5jZSAlcCBkaXNw
YXRjaGVkIGFzIGNvbnRleHQiLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdldCgpKTsKLQot
ICAgIG1fY2RtQXR0YWNobWVudFNlbWFwaG9yZS5zaWduYWwoKTsKLX0KLQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjZG1JbnN0YW5jZURldGFjaGVkKENETUluc3RhbmNl
JiBpbnN0YW5jZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1f
Y2RtSW5zdGFuY2UgIT0gJmluc3RhbmNlKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJwYXNzZWQg
Q0RNSW5zdGFuY2UgJXAgaXMgZGlmZmVyZW50IGZyb20gc3RvcmVkIG9uZSAlcCIsICZpbnN0YW5j
ZSwgbV9jZG1JbnN0YW5jZS5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fcGlwZWxpbmUpOwotCi0gICAg
R1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiZGV0YWNoaW5nIENETSBpbnN0YW5j
ZSAlcCwgc2V0dGluZyBlbXB0eSBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS5nZXQoKSk7Ci0gICAg
bV9jZG1JbnN0YW5jZSA9IG51bGxwdHI7Ci0KLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRl
eHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNlIiwgRkFMU0Up
KTsKLSAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdl
dCgpKSwgY29udGV4dC5nZXQoKSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYgaW5zdGFu
Y2UpCi17Ci0gICAgQVNTRVJUKG1fY2RtSW5zdGFuY2UuZ2V0KCkgPT0gJmluc3RhbmNlKTsKLSAg
ICBHU1RfVFJBQ0UoImluc3RhbmNlICVwLCBjdXJyZW50IHN0b3JlZCAlcCIsICZpbnN0YW5jZSwg
bV9jZG1JbnN0YW5jZS5nZXQoKSk7Ci0gICAgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3Rh
bmNlKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6YXR0ZW1w
dFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCkKLXsKLSAgICBib29sIGV2ZW50SGFuZGxlZCA9
IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQocGlwZWxpbmUoKSwgZ3N0X2V2ZW50X25ld19jdXN0b20o
R1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHko
ImF0dGVtcHQtdG8tZGVjcnlwdCIpKSk7Ci0gICAgR1NUX0RFQlVHKCJhdHRlbXB0aW5nIHRvIGRl
Y3J5cHQsIGV2ZW50IGhhbmRsZWQgJXMiLCBib29sRm9yUHJpbnRpbmcoZXZlbnRIYW5kbGVkKSk7
Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6aGFuZGxlUHJvdGVj
dGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKLXsKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIg
bG9jayhtX3Byb3RlY3Rpb25NdXRleCk7Ci0gICAgICAgIGlmIChtX2hhbmRsZWRQcm90ZWN0aW9u
RXZlbnRzLmNvbnRhaW5zKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQpKSkgewotICAgICAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZXZlbnQgJXUgYWxyZWFkeSBoYW5kbGVkIiwg
R1NUX0VWRU5UX1NFUU5VTShldmVudCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGV2ZW50
ICV1IGZyb20gTVNFIiwgR1NUX0VWRU5UX1NFUU5VTShldmVudCkpOwotICAgIGNvbnN0IGNoYXIq
IGV2ZW50S2V5U3lzdGVtVVVJRCA9IG51bGxwdHI7Ci0gICAgR3N0QnVmZmVyKiBpbml0RGF0YSA9
IG51bGxwdHI7Ci0gICAgZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24oZXZlbnQsICZldmVudEtl
eVN5c3RlbVVVSUQsICZpbml0RGF0YSwgbnVsbHB0cik7Ci0gICAgaW5pdGlhbGl6YXRpb25EYXRh
RW5jb3VudGVyZWQoe2V2ZW50S2V5U3lzdGVtVVVJRCwgaW5pdERhdGF9KTsKLX0KLQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRXYWl0aW5nRm9yS2V5KGJvb2wgd2Fp
dGluZ0ZvcktleSkKLXsKLSAgICAvLyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMgZGlkIG5vdCBjaGFu
Z2Ugb3IgaWYgd2UgYXJlIHJlcXVlc3RlZCB0byBub3Qgd2FpdCBhbnltb3JlIGJ1dCB0aGVyZSBh
cmUgc3RpbGwgd2FpdGluZyBkZWNyeXB0b3JzLgotICAgIEdTVF9UUkFDRSgid2FpdGluZ0Zvcktl
eSAlcywgbV93YWl0aW5nRm9yS2V5ICVzIiwgYm9vbEZvclByaW50aW5nKHdhaXRpbmdGb3JLZXkp
LCBib29sRm9yUHJpbnRpbmcobV93YWl0aW5nRm9yS2V5KSk7Ci0gICAgaWYgKHdhaXRpbmdGb3JL
ZXkgPT0gbV93YWl0aW5nRm9yS2V5IHx8ICghd2FpdGluZ0ZvcktleSAmJiB0aGlzLT53YWl0aW5n
Rm9yS2V5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3dhaXRpbmdGb3JLZXkgPSB3YWl0
aW5nRm9yS2V5OwotICAgIEdTVF9ERUJVRygid2FpdGluZyBmb3Iga2V5IGNoYW5nZWQgJXMiLCBi
b29sRm9yUHJpbnRpbmcobV93YWl0aW5nRm9yS2V5KSk7Ci0gICAgbV9wbGF5ZXItPndhaXRpbmdG
b3JLZXlDaGFuZ2VkKCk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6d2FpdGluZ0ZvcktleSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BpcGVsaW5lKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHc3RTdGF0ZSBzdGF0ZTsKLSAgICBnc3RfZWxlbWVudF9n
ZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAwKTsKLQotICAgIGJv
b2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdS
ZWYoZ3N0X3F1ZXJ5X25ld19jdXN0b20oR1NUX1FVRVJZX0NVU1RPTSwgZ3N0X3N0cnVjdHVyZV9u
ZXdfZW1wdHkoImFueS1kZWNyeXB0b3Itd2FpdGluZy1mb3Ita2V5IikpKTsKLSAgICBpZiAoc3Rh
dGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICByZXN1bHQgPSBnc3RfZWxlbWVudF9x
dWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeS5nZXQoKSk7Ci0gICAgICAgIEdTVF9UUkFDRSgi
cXVlcnkgcmVzdWx0ICVzLCBvbiAlcyIsIGJvb2xGb3JQcmludGluZyhyZXN1bHQpLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSkpOwotICAgIH0gZWxzZSBpZiAoc3RhdGUgPj0gR1NU
X1NUQVRFX1JFQURZKSB7Ci0gICAgICAgIC8vIFJ1bm5pbmcgYSBxdWVyeSBpbiB0aGUgcGlwZWxp
bmUgaXMgZWFzaWVyIGJ1dCBpdCBvbmx5IHdvcmtzIHdoZW4gdGhlIHBpcGVsaW5lIGlzIHNldCB1
cCBhbmQgcnVubmluZywgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gaW5zcGVjdCBpdCBhbmQgYXNrIHRo
ZSBkZWNyeXB0b3JzIGRpcmVjdGx5LgotICAgICAgICBHVW5pcXVlUHRyPEdzdEl0ZXJhdG9yPiBp
dGVyYXRvcihnc3RfYmluX2l0ZXJhdGVfcmVjdXJzZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkp
KSk7Ci0gICAgICAgIEdzdEl0ZXJhdG9yUmVzdWx0IGl0ZXJhdG9yUmVzdWx0OwotICAgICAgICBk
byB7Ci0gICAgICAgICAgICBpdGVyYXRvclJlc3VsdCA9IGdzdF9pdGVyYXRvcl9mb2xkKGl0ZXJh
dG9yLmdldCgpLCBbXShjb25zdCBHVmFsdWUgKml0ZW0sIEdWYWx1ZSAqLCBncG9pbnRlciBkYXRh
KSAtPiBnYm9vbGVhbiB7Ci0gICAgICAgICAgICAgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IEdT
VF9FTEVNRU5UKGdfdmFsdWVfZ2V0X29iamVjdChpdGVtKSk7Ci0gICAgICAgICAgICAgICAgR3N0
UXVlcnkqIHF1ZXJ5ID0gR1NUX1FVRVJZKGRhdGEpOwotICAgICAgICAgICAgICAgIHJldHVybiAh
V0VCS0lUX0lTX01FRElBX0NFTkNfREVDUllQVChlbGVtZW50KSB8fCAhZ3N0X2VsZW1lbnRfcXVl
cnkoZWxlbWVudCwgcXVlcnkpOwotICAgICAgICAgICAgfSwgbnVsbHB0ciwgcXVlcnkuZ2V0KCkp
OwotICAgICAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9SRVNZTkMp
Ci0gICAgICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdGVyYXRvci5nZXQoKSk7Ci0g
ICAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpOwot
ICAgICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX0VSUk9SKQotICAgICAg
ICAgICAgR1NUX1dBUk5JTkcoIml0ZXJhdG9yIHJldHVybmVkIGFuIGVycm9yIik7Ci0gICAgICAg
IHJlc3VsdCA9IGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9PSzsKLSAgICAgICAgR1NU
X1RSQUNFKCJpdGVyYXRvciByZXN1bHQgJWQsIHdhaXRpbmcgJXMiLCBpdGVyYXRvclJlc3VsdCwg
Ym9vbEZvclByaW50aW5nKHJlc3VsdCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0jZW5kaWYKLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0
c0tleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotCi0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9N
RURJQSkKLSAgICByZXN1bHQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmlzQ2xlYXJLZXlLZXlT
eXN0ZW0oa2V5U3lzdGVtKTsKLSNlbmRpZgotCi0gICAgR1NUX0RFQlVHKCJjaGVja2luZyBmb3Ig
S2V5U3lzdGVtIHN1cHBvcnQgd2l0aCAlcyBhbmQgdHlwZSAlczogJXMiLCBrZXlTeXN0ZW0udXRm
OCgpLmRhdGEoKSwgbWltZVR5cGUudXRmOCgpLmRhdGEoKSwgYm9vbEZvclByaW50aW5nKHJlc3Vs
dCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZXh0ZW5kZWRTdXBwb3J0c1R5cGUoY29u
c3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycywgTWVkaWFQbGF5ZXI6
OlN1cHBvcnRzVHlwZSByZXN1bHQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBhcmFtZXRlcnMpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1YTkzZGY1NmM5MTQ1MzUyNThkMzE0ZTdjMmU3
NDZhNTk2Y2ZhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzI0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTUsIDIwMTYgSWdhbGlhIFMuTAotICog
Q29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhaW50IHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lmbmRlZiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlX2gKLSNkZWZpbmUgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZV9oCi0jaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQot
Ci0jaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCi0jaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiTWFpblRocmVhZE5vdGlmaWVyLmgiCi0jaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUg
PGdsaWIuaD4KLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5o
PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KLSNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFw
aG9yZS5oPgotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSNpZiBVU0UoTElCRVBPWFkpCi0vLyBJ
bmNsdWRlIHRoZSA8ZXBveHkvZ2wuaD4gaGVhZGVyIGJlZm9yZSA8Z3N0L2dsL2dsLmg+LgotI2lu
Y2x1ZGUgPGVwb3h5L2dsLmg+Ci0KLS8vIFdvcmthcm91bmQgYnVpbGQgaXNzdWUgd2l0aCBSUGkg
dXNlcmxhbmQgR0xFU3YyIGhlYWRlcnMgYW5kIGxpYmVwb3h5IDxodHRwczovL3dlYmtpdC5vcmcv
Yi8xODU2Mzk+Ci0jaWYgIUdTVF9DSEVDS19WRVJTSU9OKDEsIDE0LCAwKQotI2luY2x1ZGUgPGdz
dC9nbC9nc3RnbGNvbmZpZy5oPgotI2lmIGRlZmluZWQoR1NUX0dMX0hBVkVfV0lORE9XX0RJU1BN
QU5YKSAmJiBHU1RfR0xfSEFWRV9XSU5ET1dfRElTUE1BTlgKLSNkZWZpbmUgX19nbDJfaF8KLSN1
bmRlZiBHU1RfR0xfSEFWRV9HTFNZTkMKLSNkZWZpbmUgR1NUX0dMX0hBVkVfR0xTWU5DIDEKLSNl
bmRpZgotI2VuZGlmIC8vICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNCwgMCkKLSNlbmRpZiAvLyBV
U0UoTElCRVBPWFkpCi0KLSNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKLSNpbmNsdWRlIDxn
c3QvZ2wvZ2wuaD4KLSN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQotI2VuZGlmCi0KLSNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0jaWYg
VVNFKE5JQ09TSUEpCi0jaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsLmgiCi0jZWxzZQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQ
cm92aWRlci5oIgotI2VuZGlmCi0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbVZv
bHVtZSBHc3RTdHJlYW1Wb2x1bWU7Ci10eXBlZGVmIHN0cnVjdCBfR3N0VmlkZW9JbmZvIEdzdFZp
ZGVvSW5mbzsKLXR5cGVkZWYgc3RydWN0IF9Hc3RHTENvbnRleHQgR3N0R0xDb250ZXh0OwotdHlw
ZWRlZiBzdHJ1Y3QgX0dzdEdMRGlzcGxheSBHc3RHTERpc3BsYXk7Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQml0bWFwVGV4dHVyZUdMOwotY2xhc3MgR0xDb250ZXh0OwotY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci1jbGFzcyBJbnRTaXpl
OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcjsKLQot
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLWNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHk7Ci0jZW5kaWYKLQotdm9pZCByZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1lbnRz
KCk7Ci0KLS8vIFVzZSBlYWdlciBpbml0aWFsaXphdGlvbiBmb3IgdGhlIFdlYWtQdHJGYWN0b3J5
IHNpbmNlIHdlIGNhbGwgbWFrZVdlYWtQdHIoKSBmcm9tIGFub3RoZXIgdGhyZWFkLgotY2xhc3Mg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZh
dGVJbnRlcmZhY2UsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4KLSNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgLCBwdWJsaWMgTmljb3Np
YTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAotI2Vsc2UKLSAgICAsIHB1
YmxpYyBQbGF0Zm9ybUxheWVyCi0jZW5kaWYKLSNlbmRpZgotewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVEZWJ1Z0NhdGVn
b3J5KCk7Ci0KLSAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKCk7
Ci0KLSAgICBGbG9hdFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZv
aWQgc2V0Vm9sdW1lKGZsb2F0KSBvdmVycmlkZTsKLSAgICBmbG9hdCB2b2x1bWUoKSBjb25zdCBv
dmVycmlkZTsKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgYm9vbCBlbnN1cmVHc3RHTENv
bnRleHQoKTsKLSAgICBHc3RDb250ZXh0KiByZXF1ZXN0R0xDb250ZXh0KGNvbnN0IGNoYXIqIGNv
bnRleHRUeXBlKTsKLSNlbmRpZgotICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBtdXRlZCgpIGNvbnN0OwotCi0gICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBu
ZXR3b3JrU3RhdGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldFZpc2libGUoYm9v
bCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNpemVDaGFuZ2VkKCk7Ci0KLSAgICAvLyBQcmVmZXIgTWVkaWFUaW1lIGJh
c2VkIG1ldGhvZHMgb3ZlciBmbG9hdCBiYXNlZC4KLSAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGR1cmF0aW9uTWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9Ci0gICAg
ZG91YmxlIGR1cmF0aW9uRG91YmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZHVyYXRpb25N
ZWRpYVRpbWUoKS50b0RvdWJsZSgpOyB9Ci0gICAgTWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1l
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9Ci0gICAg
ZmxvYXQgY3VycmVudFRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjdXJyZW50TWVkaWFU
aW1lKCkudG9GbG9hdCgpOyB9Ci0gICAgZG91YmxlIGN1cnJlbnRUaW1lRG91YmxlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gY3VycmVudE1lZGlhVGltZSgpLnRvRG91YmxlKCk7IH0KLSAgICBN
ZWRpYVRpbWUgY3VycmVudE1lZGlhVGltZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIE1lZGlh
VGltZTo6emVyb1RpbWUoKTsgfQotICAgIHZvaWQgc2VlayhmbG9hdCB0aW1lKSBvdmVycmlkZSB7
IHNlZWsoTWVkaWFUaW1lOjpjcmVhdGVXaXRoRmxvYXQodGltZSkpOyB9Ci0gICAgdm9pZCBzZWVr
RG91YmxlKGRvdWJsZSB0aW1lKSBvdmVycmlkZSB7IHNlZWsoTWVkaWFUaW1lOjpjcmVhdGVXaXRo
RG91YmxlKHRpbWUpKTsgfQotICAgIHZvaWQgc2Vlayhjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlk
ZSB7IH0KLSAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpLnRvRmxvYXQoKTsgfQotICAgIE1lZGlhVGltZSBtYXhN
ZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIE1lZGlhVGltZTo6emVy
b1RpbWUoKTsgfQotICAgIGRvdWJsZSBtaW5UaW1lU2Vla2FibGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtaW5NZWRpYVRpbWVTZWVrYWJsZSgpLnRvRmxvYXQoKTsgfQotICAgIE1lZGlhVGlt
ZSBtaW5NZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIE1lZGlhVGlt
ZTo6emVyb1RpbWUoKTsgfQotCi0gICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmln
aW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBNZWRpYVRp
bWUgbWF4VGltZUxvYWRlZCgpIGNvbnN0IHsgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsg
fQotCi0gICAgYm9vbCBzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIG1vdmllTG9hZFR5cGUoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNMaXZlU3RyZWFtKCkgY29uc3QgPSAwOwotCi0gICAgTWVk
aWFQbGF5ZXIqIG1lZGlhUGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXI7IH0KLQotICAg
IHVuc2lnbmVkIGRlY29kZWRGcmFtZUNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdW5zaWdu
ZWQgZHJvcHBlZEZyYW1lQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB1bnNpZ25lZCBhdWRp
b0RlY29kZWRCeXRlQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB1bnNpZ25lZCB2aWRlb0Rl
Y29kZWRCeXRlQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgYWNjZWxlcmF0ZWRS
ZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSBvdmVycmlkZTsKLQotI2lmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0jaWYgUExBVEZPUk0oV0lOX0NBSVJPKQotICAgIC8vIEZJWE1FOiBBY2NlbGVyYXRlZCByZW5k
ZXJpbmcgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIGZvciBXaW5DYWlybyB5ZXQuCi0gICAgYm9v
bCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KLSNlbHNlCi0gICAgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIEVO
QUJMRShFTkNSWVBURURfTUVESUEpCi0gICAgdm9pZCBjZG1JbnN0YW5jZUF0dGFjaGVkKENETUlu
c3RhbmNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjZG1JbnN0YW5jZURldGFjaGVkKENETUluc3Rh
bmNlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoYW5kbGVQcm90ZWN0aW9uRXZlbnQoR3N0RXZlbnQq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCk7
Ci0gICAgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKENETUluc3RhbmNlJikgZmlu
YWw7Ci0gICAgdm9pZCBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0YSYmKTsK
LSAgICB2b2lkIHNldFdhaXRpbmdGb3JLZXkoYm9vbCk7Ci0gICAgYm9vbCB3YWl0aW5nRm9yS2V5
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzS2V5
U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsK
LSAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBleHRlbmRlZFN1cHBvcnRzVHlw
ZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiwgTWVkaWFQbGF5ZXI6OlN1cHBv
cnRzVHlwZSk7Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGJvb2wgY29weVZpZGVvVGV4
dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVj
dCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0sIGJvb2ws
IGJvb2wpIG92ZXJyaWRlOwotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVu
dFRpbWUoKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAgdm9pZCBzZXRWaWRlb1NvdXJjZU9yaWVu
dGF0aW9uKEltYWdlT3JpZW50YXRpb24pOwotICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lKCkgY29u
c3QgeyByZXR1cm4gbV9waXBlbGluZS5nZXQoKTsgfQotCi0gICAgdmlydHVhbCBib29sIGhhbmRs
ZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKLQotcHJvdGVjdGVkOgotICAgIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UoTWVkaWFQbGF5ZXIqKTsKLSAgICB2aXJ0dWFsIEdzdEVsZW1l
bnQqIGNyZWF0ZVZpZGVvU2luaygpOwotCi0jaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCi0g
ICAgR3N0RWxlbWVudCogY3JlYXRlSG9sZVB1bmNoVmlkZW9TaW5rKCk7Ci0gICAgdm9pZCBwdXNo
TmV4dEhvbGVQdW5jaEJ1ZmZlcigpOwotICAgIGJvb2wgc2hvdWxkSWdub3JlSW50cmluc2ljU2l6
ZSgpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi0jaWYgVVNFKEdTVFJFQU1FUl9H
TCkKLSAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50
KiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOwotICAgIHN0YXRpYyBHc3RGbG93
UmV0dXJuIG5ld1ByZXJvbGxDYWxsYmFjayhHc3RFbGVtZW50KiwgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZSopOwotICAgIHZvaWQgZmx1c2hDdXJyZW50QnVmZmVyKCk7Ci0gICAgR3N0
RWxlbWVudCogY3JlYXRlR0xBcHBTaW5rKCk7Ci0gICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9T
aW5rR0woKTsKLSAgICBHc3RHTENvbnRleHQqIGdzdEdMQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fZ2xDb250ZXh0LmdldCgpOyB9Ci0gICAgR3N0R0xEaXNwbGF5KiBnc3RHTERpc3BsYXkoKSBj
b25zdCB7IHJldHVybiBtX2dsRGlzcGxheS5nZXQoKTsgfQotICAgIHZvaWQgZW5zdXJlR0xWaWRl
b1NpbmtDb250ZXh0KCk7Ci0jZW5kaWYKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAg
ICB2b2lkIHB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAg
dm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZWxzZQotICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2VuZGlmCi0jZW5kaWYK
LQotICAgIEdzdEVsZW1lbnQqIHZpZGVvU2luaygpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9TaW5r
LmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR3N0U3RyZWFtVm9s
dW1lKik7Ci0gICAgdmlydHVhbCBHc3RFbGVtZW50KiBjcmVhdGVBdWRpb1NpbmsoKSB7IHJldHVy
biAwOyB9Ci0gICAgdmlydHVhbCBHc3RFbGVtZW50KiBhdWRpb1NpbmsoKSBjb25zdCB7IHJldHVy
biAwOyB9Ci0KLSAgICB2b2lkIHNldFBpcGVsaW5lKEdzdEVsZW1lbnQqKTsKLQotICAgIHZvaWQg
dHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxlKik7Ci0gICAgdm9pZCByZXBhaW50KCk7Ci0gICAgdm9p
ZCBjYW5jZWxSZXBhaW50KGJvb2wgZGVzdHJveWluZyA9IGZhbHNlKTsKLQotICAgIHN0YXRpYyB2
b2lkIHJlcGFpbnRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiwgR3N0
U2FtcGxlKik7Ci0gICAgc3RhdGljIHZvaWQgcmVwYWludENhbmNlbGxlZENhbGxiYWNrKE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqKTsKLQotICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZW
b2x1bWVDaGFuZ2UoKTsKLSAgICB2b2lkIG5vdGlmeVBsYXllck9mTXV0ZSgpOwotCi0gICAgc3Rh
dGljIHZvaWQgdm9sdW1lQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UqKTsKLSAgICBzdGF0aWMgdm9pZCBtdXRlQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UqKTsKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAg
ICB2b2lkIHVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpOwotICAgIFRleHR1cmVNYXBwZXJHTDo6
RmxhZ3MgbV90ZXh0dXJlTWFwcGVyRmxhZ3M7Ci0jZW5kaWYKLQotICAgIGVudW0gTWFpblRocmVh
ZE5vdGlmaWNhdGlvbiB7Ci0gICAgICAgIFZpZGVvQ2hhbmdlZCA9IDEgPDwgMCwKLSAgICAgICAg
VmlkZW9DYXBzQ2hhbmdlZCA9IDEgPDwgMSwKLSAgICAgICAgQXVkaW9DaGFuZ2VkID0gMSA8PCAy
LAotICAgICAgICBWb2x1bWVDaGFuZ2VkID0gMSA8PCAzLAotICAgICAgICBNdXRlQ2hhbmdlZCA9
IDEgPDwgNCwKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgICAgIFRleHRDaGFuZ2VkID0g
MSA8PCA1LAotI2VuZGlmCi0gICAgICAgIFNpemVDaGFuZ2VkID0gMSA8PCA2LAotICAgICAgICBT
dHJlYW1Db2xsZWN0aW9uQ2hhbmdlZCA9IDEgPDwgNwotICAgIH07Ci0KLSAgICBSZWY8TWFpblRo
cmVhZE5vdGlmaWVyPE1haW5UaHJlYWROb3RpZmljYXRpb24+PiBtX25vdGlmaWVyOwotICAgIE1l
ZGlhUGxheWVyKiBtX3BsYXllcjsKLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGlwZWxpbmU7
Ci0gICAgR1JlZlB0cjxHc3RTdHJlYW1Wb2x1bWU+IG1fdm9sdW1lRWxlbWVudDsKLSAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IG1fdmlkZW9TaW5rOwotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9m
cHNTaW5rOwotICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKLSAgICBt
dXRhYmxlIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7Ci0gICAgSW50
U2l6ZSBtX3NpemU7Ci0gICAgbXV0YWJsZSBMb2NrIG1fc2FtcGxlTXV0ZXg7Ci0gICAgR1JlZlB0
cjxHc3RTYW1wbGU+IG1fc2FtcGxlOwotCi0gICAgbXV0YWJsZSBGbG9hdFNpemUgbV92aWRlb1Np
emU7Ci0gICAgYm9vbCBtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmsgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkIHsgZmFsc2UgfTsKLQotICAgIENvbmRpdGlv
biBtX2RyYXdDb25kaXRpb247Ci0gICAgTG9jayBtX2RyYXdNdXRleDsKLSAgICBib29sIG1fZGVz
dHJveWluZyB7IGZhbHNlIH07Ci0gICAgUnVuTG9vcDo6VGltZXI8TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZT4gbV9kcmF3VGltZXI7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgUmVmPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNv
c2lhTGF5ZXI7Ci0jZWxzZQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBVU0UoR1NU
UkVBTUVSX0dMKQotICAgIEdSZWZQdHI8R3N0R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKLSAgICBH
UmVmUHRyPEdzdEdMRGlzcGxheT4gbV9nbERpc3BsYXk7Ci0gICAgR1JlZlB0cjxHc3RDb250ZXh0
PiBtX2dsRGlzcGxheUVsZW1lbnRDb250ZXh0OwotICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gbV9n
bEFwcEVsZW1lbnRDb250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxWaWRlb1RleHR1cmVDb3Bp
ZXJHU3RyZWFtZXI+IG1fdmlkZW9UZXh0dXJlQ29waWVyOwotCi0gICAgR1JlZlB0cjxHc3RHTENv
bG9yQ29udmVydD4gbV9jb2xvckNvbnZlcnQ7Ci0gICAgR1JlZlB0cjxHc3RDYXBzPiBtX2NvbG9y
Q29udmVydElucHV0Q2FwczsKLSAgICBHUmVmUHRyPEdzdENhcHM+IG1fY29sb3JDb252ZXJ0T3V0
cHV0Q2FwczsKLSNlbmRpZgotCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBtX3ZpZGVvU291cmNlT3Jp
ZW50YXRpb247Ci0KLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgIEJpbmFyeVNlbWFw
aG9yZSBtX2NkbUF0dGFjaG1lbnRTZW1hcGhvcmU7Ci0gICAgUmVmUHRyPGNvbnN0IENETUluc3Rh
bmNlPiBtX2NkbUluc3RhbmNlOwotCi0gICAgTG9jayBtX3Byb3RlY3Rpb25NdXRleDsgLy8gR3Vh
cmRzIGFjY2VzcyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgotICAgIEhhc2hTZXQ8dWlu
dDMyX3Q+IG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHM7Ci0KLSAgICBib29sIG1fd2FpdGluZ0Zv
cktleSB7IGZhbHNlIH07Ci0jZW5kaWYKLQotICAgIE9wdGlvbmFsPEdzdFZpZGVvRGVjb2RlclBs
YXRmb3JtPiBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtOwotfTsKLQotfQotCi0jZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUikKLSNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383868</attachid>
            <date>2019-11-19 07:54:42 -0800</date>
            <delta_ts>2019-11-19 08:34:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204352-20191119155441.patch</filename>
            <type>text/plain</type>
            <size>324055</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNjIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRmZjgxNTg5YTkwNmFm
MGY4ZTIzYTAwNzAzODlkMzUxNzYyZDViMC4uN2VlYTVhMGU5NGIzMmNlYmY2ZGJjYWQyNzMzYTcz
NTMwOTVlYWU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NiBAQAorMjAxOS0xMS0xOSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0g
RmxhdHRlbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgaW50byBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDQzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGUgaW5oZXJpdGFuY2UgbGluayBiZXR3ZWVuIHRoZSBiYXNlIHBsYXllciBhbmQg
dGhlIHByaXZhdGUgcGxheWVyIG5vCisgICAgICAgIGxvbmdlciBzZXJ2ZXMgYSBwdXJwb3NlLiBU
aGUgb25seSB1c2VyIG9mIHRoZSBiYXNlIGNsYXNzIGlzIHRoZSBwcml2YXRlCisgICAgICAgIHBs
YXllci4KKworICAgICAgICBTcXVhc2hpbmcgdGhlc2UgdG9naGV0aGVyIG1ha2VzIGl0IGVhc3kg
dG8gZG8gZnVydGhlciByZWZhY3RvcmluZ3MsCisgICAgICAgIHNpbmNlIGV2ZXJ5dGhpbmcgY2Fu
IGJlIHNlZW4gaW4gb25lIHBsYWNlIHJhdGhlciB0aGFuIGJlaW5nIGFyYml0cmFyaWx5CisgICAg
ICAgIHNwbGl0IGludG8gdHdvIGNsYXNzZXMgYW5kIGhhdmluZyB0byBkbyBkZXJpdmVkLXRvLWJh
c2UgY29udmVyc2lvbnMgaW4KKyAgICAgICAgeW91ciBoZWFkIGZvciBubyBnYWluIGluIGNsYXJp
dHkgZWxzZXdoZXJlLgorCisgICAgICAgIEFzaWRlIGZyb20gbWVyZ2luZyB0aGUgY2xhc3Nlcywg
dGhlIG9ubHkgb3RoZXIgY2hhbmdlIGhlcmUgaXMgc3dpdGNoaW5nCisgICAgICAgIHRvIGluLWNs
YXNzIGluaXRpYWxpemF0aW9uIG9mIG1hbnkgbWVtYmVyIHZhcmlhYmxlcywgcmF0aGVyIHRoYW4g
YSBsb25nCisgICAgICAgIGxpc3Qgb2YgaW5pdGlhbGl6YXRpb25zIGluIHRoZSBjb25zdHJ1Y3Rv
ciB0aGF0IGdldHMgZmlkZGx5IHdpdGgKKyAgICAgICAgLVdyZW9yZGVyLgorCisgICAgICAgIFRo
ZXNlIGNsYXNzZXMgYXJlIG11Y2ggdG9vIGxhcmdlIGFuZCBjb3VsZCB1c2Ugc29tZSByZWRlc2ln
biwgdGhpcyBpcworICAgICAgICBvbmx5IGEgZmlyc3Qgc3RlcCB0b3dhcmQgdGhhdCBnb2FsLgor
CisgICAgICAgIFRoaXMgaXMgYSByZWZhY3RvcmluZywgaG9wZWZ1bGx5IHdlbGwgY292ZXJlZCBi
eSBvdXIgZXhpc3RpbmcgdGVzdHMhCisKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpncmVhdGVzdENvbW1vbkRpdmlz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6YnVzTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnRUb0ludGVybmFsUHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6R3N0
VmlkZW9GcmFtZUhvbGRlcjo6R3N0VmlkZW9GcmFtZUhvbGRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp+R3N0VmlkZW9GcmFtZUhvbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp3YWl0Rm9yQ1BVU3luYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6Omhhc0FscGhhQ2hhbm5lbCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjpmbGFncyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp0ZXh0dXJlSUQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3N0VmlkZW9GcmFtZUhvbGRlcjo6aGFzTWFwcGVkVGV4dHVyZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3N0VmlkZW9GcmFtZUhvbGRlcjo6dmlkZW9GcmFtZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp1cGRhdGVUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6OnBsYXRmb3JtTGF5ZXJCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppbml0
aWFsaXplRGVidWdDYXRlZ29yeSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpp
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnJlZ2lzdGVyTWVkaWFFbmdpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBhdXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtRHVyYXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbk1lZGlhVGlt
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmN1cnJlbnRNZWRpYVRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlbG9hZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1l
U2Vla2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjptYXhUaW1lTG9hZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Omhhc1Npbmds
ZVNlY3VyaXR5T3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6d291bGRUYWludE9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbnN1cmVB
dWRpb1NvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6YXVkaW9Tb3VyY2VQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9TdHJlYW1Qcm9w
ZXJ0aWVzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBs
YXliaW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U3luY09uQ2xvY2spOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzeW5jT25DbG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9m
VmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlm
eVBsYXllck9mQXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp0ZXh0Q2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNhbXBsZUNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNh
bXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZp
bGxUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUF1ZGlvU2luayk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvU2luayBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9z
aXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjplbmFibGVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnVwZGF0ZVRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNsZWFyVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQaXBlbGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVxdWVz
dEdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmVuc3VyZUdzdEdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9sdW1lIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWb2x1bWVD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
b2x1bWVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpuZXR3b3JrU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om11dGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxh
eWVyT2ZNdXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bXV0ZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVNYXhUaW1lTG9hZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRl
QnVmZmVyaW5nU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cHJvY2Vzc01wZWdUc1NlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZDb250
ZW50c0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6cHVyZ2VJbnZhbGlkQXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRWaWRlb1RyYWNrcyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFRleHRUcmFj
a3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cmlE
ZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmRvd25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlT2xk
RG93bmxvYWRGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWVkaWFMb2NhdGlvbkNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3Vw
cG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkUGFzc0NPUlNBY2Nl
c3NDaGVjayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNhblNhdmVNZWRpYURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJveHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2Vy
UmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnJlcGFpbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNhbmNlbFJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpyZXBhaW50Q2FuY2VsbGVkQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdTYW1wbGVDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1ByZXJvbGxD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmZsdXNoQ3VycmVudEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdGl2ZUltYWdlRm9yQ3Vy
cmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRWaWRlb1NvdXJjZU9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlVGV4dHVyZU1hcHBlckZsYWdzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNGdWxsc2NyZWVu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bW92aWVMb2FkVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZUdMQXBwU2luayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2lua0dMKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR0xWaWRlb1NpbmtDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFJlY3RhbmdsZVRvVmlkZW9TaW5rKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckhvbGVQdW5jaENsaWVudDo6R1N0cmVhbWVySG9sZVB1bmNoQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3Jl
YXRlSG9sZVB1bmNoVmlkZW9TaW5rKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6cHVzaE5leHRIb2xlUHVuY2hCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVWaWRlb1NpbmspOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRTdHJlYW1Wb2x1bWVF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZGVjb2RlZEZyYW1lQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpkcm9wcGVkRnJhbWVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZp
ZGVvRGVjb2RlZEJ5dGVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRh
Y2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNk
bUluc3RhbmNlRGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjphdHRlbXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2Nh
bEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlUHJvdGVjdGlvbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c0tleVN5c3Rl
bSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmV4dGVu
ZGVkU3VwcG9ydHNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6Om1lZGlhUGxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGlwZWxpbmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppc0xpdmVTdHJlYW0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb25m
aWd1cmVQbGF5U2luayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmdzdEdMQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmdzdEdMRGlzcGxheSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvU2luayBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmg6IFJlbW92ZWQuCisKIDIwMTktMTEt
MTggIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hlY2sg
aWYgSVRQIGlzIG9uIGJlZm9yZSBhcHBseWluZyB0aGlyZC1wYXJ0eSBjb29raWUgYmxvY2tpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCBmMjQwZWM3YWYxMDNi
ZWNhYjNlNzc0NjlhZTMwMjZhNjk1MTY5MDhkLi4yYzk0MWYwY2I0YWU4YWE4NjBkNWU1NzE2NWJh
MmI1NjM4YjAyMWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFt
ZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBA
IC0xNCw3ICsxNCw2IEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0luYmFuZFRleHRUcmFja1ByaXZhdGVH
U3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYUVu
Z2luZUNvbmZpZ3VyYXRpb25GYWN0b3J5R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZS5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxl
R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVGV4dENv
bWJpbmVyR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
VGV4dFNpbmtHU3RyZWFtZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwCmluZGV4IGQyMmE0ZmUyYjExMmIzOTQ4ZTVkNjVlNjgyNDIxODNkMjZh
ZTk2YWEuLjg2ZTFjYWIzMDRlM2E5MGRjZjNkY2M2YTVlM2M1Nzg4MzYzODVlNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0zLDkgKzMs
OSBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUu
b3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE1
LCAyMDE2IElnYWxpYSBTLkwKICAqIENvcHlyaWdodCAoQykgMjAxNCBDYWJsZSBUZWxldmlzaW9u
IExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTkgSWdhbGlhIFMuTAor
ICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE5IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI4LDE0NCArMjgsMzcwIEBACiAKICNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShHU1RSRUFNRVIpCiAKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJHU3RyZWFtZXJDb21tb24uaCIKICNpbmNsdWRlICJHU3RyZWFtZXJSZWdpc3RyeVNjYW5u
ZXIuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJJbWFnZU9y
aWVudGF0aW9uLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUmVxdWVzdElu
c3RhbGxNaXNzaW5nUGx1Z2luc0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVh
bWVyLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCisjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVGV4
dENvbWJpbmVyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVGV4dFNpbmtHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2VuZGlmIC8vIEVOQUJMRShW
SURFT19UUkFDSykKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAiR1N0cmVh
bWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKKyNpbmNsdWRlICJNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisjaW5j
bHVkZSAiQ0RNSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0
aW9uRGVjcnlwdG9yR1N0cmVhbWVyLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShXRUJfQVVESU8p
CisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5oIgorI2VuZGlmCisKICNp
bmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgogI2lu
Y2x1ZGUgPGdzdC9nc3QuaD4KICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9taXNzaW5nLXBsdWdpbnMu
aD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CiAjaW5jbHVkZSA8bGltaXRz
PgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR0xpYlV0
aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLSNpbmNsdWRlIDx3
dGYvVVJMLmg+Ci0jaW5jbHVkZSA8d3RmL1dhbGxUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIv
R0xpYlV0aWxpdGllcy5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL1J1bkxvb3BTb3VyY2VQcmlvcml0
eS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJz
Lmg+Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlh
U3RyZWFtU291cmNlLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSNpbmNs
dWRlICJBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIkluYmFuZE1ldGFk
YXRhVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIkluYmFuZFRleHRUcmFj
a1ByaXZhdGVHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJUZXh0Q29tYmluZXJHU3RyZWFtZXIuaCIK
LSNpbmNsdWRlICJUZXh0U2lua0dTdHJlYW1lci5oIgotI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2
YXRlR1N0cmVhbWVyLmgiCi0jZW5kaWYKKyNpbmNsdWRlIDx3dGYvVVJMLmg+CisjaW5jbHVkZSA8
d3RmL1dhbGxUaW1lLmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFN
RVJfTVBFR1RTKQogI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQogI2luY2x1ZGUgPGdzdC9t
cGVndHMvbXBlZ3RzLmg+CiAjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNlbmRpZiAvLyBF
TkFCTEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQorCisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorI2RlZmluZSBDUkVBVEVfVFJBQ0sodHlwZSwgVHlwZSkgR19TVE1UX1NU
QVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtX2hhcyMjVHlwZSA9IHRy
dWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBpZiAoIXVzZU1lZGlhU291cmNlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgUmVmUHRyPFR5cGUjI1RyYWNrUHJpdmF0ZUdTdHJlYW1l
cj4gdHJhY2sgPSBUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0
cigqdGhpcyksIGksIHN0cmVhbSk7IFwKKyAgICAgICAgICAgIG1fIyN0eXBlIyNUcmFja3MuYWRk
KHRyYWNrLT5pZCgpLCB0cmFjayk7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG1f
cGxheWVyLT5hZGQjI1R5cGUjI1RyYWNrKCp0cmFjayk7ICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGlmIChnc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3Moc3RyZWFtLmdl
dCgpKSAmIEdTVF9TVFJFQU1fRkxBR19TRUxFQ1QpIFwKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnQjI1R5cGUjI1N0cmVhbUlkID0gU3RyaW5nKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJl
YW0uZ2V0KCkpKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gR19TVE1UX0VORAorCisjZGVm
aW5lIENMRUFSX1RSQUNLUyh0cmFja3MsIG1ldGhvZCkgXAorICAgIGZvciAoYXV0byYgdHJhY2sg
OiB0cmFja3MudmFsdWVzKCkpXAorICAgICAgICBtZXRob2QoKnRyYWNrKTtcCisgICAgdHJhY2tz
LmNsZWFyKCk7CisjZWxzZQorI2RlZmluZSBDUkVBVEVfVFJBQ0sodHlwZSwgVHlwZSkgR19TVE1U
X1NUQVJUIHsgXAorICAgICAgICBtX2hhcyMjVHlwZSMjID0gdHJ1ZTsgICAgICAgICAgICAgICAg
ICAgXAorICAgIH0gR19TVE1UX0VORAorI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKwor
I2lmIFVTRShHU1RSRUFNRVJfR0wpCisjZGVmaW5lIFRFWFRVUkVfQ09QSUVSX0NPTE9SX0NPTlZF
UlRfRkxBRyBWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI6OkNvbG9yQ29udmVyc2lvbjo6Tm9D
b252ZXJ0CisjZGVmaW5lIEdTVF9HTF9DQVBTX0ZPUk1BVCAieyBSR0J4LCBSR0JBLCBJNDIwLCBZ
NDQ0LCBZVjEyLCBZNDFCLCBZNDJCLCBOVjEyLCBOVjIxLCBWVVlBIH0iCisKKyNpbmNsdWRlIDxn
c3QvYXBwL2dzdGFwcHNpbmsuaD4KKworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2lmIFVTRShH
TFgpCisjaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSA8Z3N0L2dsL3gxMS9nc3Rn
bGRpc3BsYXlfeDExLmg+CiAjZW5kaWYKLSNpbmNsdWRlIDxnc3QvYXVkaW8vc3RyZWFtdm9sdW1l
Lmg+CiAKLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotI2luY2x1ZGUgIk1lZGlhU291cmNlLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKyNpZiBVU0UoRUdMKQor
I2luY2x1ZGUgIkdMQ29udGV4dEVHTC5oIgorI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNw
bGF5X2VnbC5oPgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotI2luY2x1ZGUgIkF1
ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIuaCIKKyNpZiBQTEFURk9STShYMTEpCisjaW5jbHVk
ZSAiUGxhdGZvcm1EaXNwbGF5WDExLmgiCiAjZW5kaWYKIAotR1NUX0RFQlVHX0NBVEVHT1JZX0VY
VEVSTih3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxU
IHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcKKyNpZiBQTEFURk9STShXQVlMQU5EKQorI2luY2x1
ZGUgIlBsYXRmb3JtRGlzcGxheVdheWxhbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKFdQRV9SRU5E
RVJFUikKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlMaWJXUEUuaCIKKyNlbmRpZgorCisvLyBn
c3RnbGFwaS5oIG1heSBpbmNsdWRlIGVnbHBsYXRmb3JtLmggYW5kIGl0IGluY2x1ZGVzIFguaCwg
d2hpY2gKKy8vIGRlZmluZXMgTm9uZSwgYnJlYWtpbmcgTWVkaWFQbGF5ZXI6Ok5vbmUgZW51bQor
I2lmIFBMQVRGT1JNKFgxMSkgJiYgR1NUX0dMX0hBVkVfUExBVEZPUk1fRUdMCisjdW5kZWYgTm9u
ZQorI2VuZGlmIC8vIFBMQVRGT1JNKFgxMSkgJiYgR1NUX0dMX0hBVkVfUExBVEZPUk1fRUdMCisj
aW5jbHVkZSAiVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyLmgiCisjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9HTCkKKworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpbmNsdWRlICJCaXRt
YXBUZXh0dXJlR0wuaCIKKyNpbmNsdWRlICJCaXRtYXBUZXh0dXJlUG9vbC5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eS5oIgorI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKKyNpbmNsdWRlIDxjYWlyby1nbC5oPgorI2VuZGlmCisjZW5kaWYgLy8gVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQogCitHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X21lZGlhX3BsYXllcl9k
ZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVn
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLXN0YXRpYyB2
b2lkIGJ1c01lc3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKKyNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQ
VU5DSCkKK3N0YXRpYyBjb25zdCBGbG9hdFNpemUgc19ob2xlUHVuY2hEZWZhdWx0RnJhbWVTaXpl
KDEyODAsIDcyMCk7CisjZW5kaWYKKworc3RhdGljIGludCBncmVhdGVzdENvbW1vbkRpdmlzb3Io
aW50IGEsIGludCBiKQogewotICAgIHBsYXllci0+aGFuZGxlTWVzc2FnZShtZXNzYWdlKTsKKyAg
ICB3aGlsZSAoYikgeworICAgICAgICBpbnQgdGVtcCA9IGE7CisgICAgICAgIGEgPSBiOworICAg
ICAgICBiID0gdGVtcCAlIGI7CisgICAgfQorCisgICAgcmV0dXJuIEFCUyhhKTsKIH0KIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0Nh
bGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyLCBHT2JqZWN0KiBvYmpl
Y3QpCitzdGF0aWMgdm9pZCBidXNNZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSog
bWVzc2FnZSwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCiB7Ci0gICAgcGxh
eWVyLT5zZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMob2JqZWN0KTsKKyAgICBwbGF5ZXItPmhhbmRs
ZU1lc3NhZ2UobWVzc2FnZSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMoR09iamVjdCogb2JqZWN0KQorc3RhdGljIHZvaWQg
Y29udmVydFRvSW50ZXJuYWxQcm90b2NvbChVUkwmIHVybCkKIHsKLSAgICBpZiAoZ19zdHJjbXAw
KEdfT0JKRUNUX1RZUEVfTkFNRShvYmplY3QpLCAiR3N0UHVsc2VTaW5rIikpCisgICAgaWYgKHdl
YmtpdEdzdENoZWNrVmVyc2lvbigxLCAxMiwgMCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIGNv
bnN0IGNoYXIqIHJvbGUgPSBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJJc1ZpZGVvKCkg
PyAidmlkZW8iIDogIm11c2ljIjsKLSAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9z
dHJ1Y3R1cmVfbmV3KCJzdHJlYW0tcHJvcGVydGllcyIsICJtZWRpYS5yb2xlIiwgR19UWVBFX1NU
UklORywgcm9sZSwgbnVsbHB0cik7Ci0gICAgZ19vYmplY3Rfc2V0KG9iamVjdCwgInN0cmVhbS1w
cm9wZXJ0aWVzIiwgc3RydWN0dXJlLCBudWxscHRyKTsKLSAgICBnc3Rfc3RydWN0dXJlX2ZyZWUo
c3RydWN0dXJlKTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBlbGVtZW50TmFtZShnc3RfZWxlbWVu
dF9nZXRfbmFtZShHU1RfRUxFTUVOVChvYmplY3QpKSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiU2V0IG1lZGlhLnJvbGUgYXMgJXMgYXQgJXMiLCByb2xlLCBlbGVtZW50TmFt
ZS5nZXQoKSk7CisgICAgaWYgKHVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkgfHwgdXJsLnBy
b3RvY29sSXNCbG9iKCkpCisgICAgICAgIHVybC5zZXRQcm90b2NvbCgid2Via2l0KyIgKyB1cmwu
cHJvdG9jb2woKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWdp
c3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKLXsKLSAgICBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSgp
OwotICAgIGlmIChpc0F2YWlsYWJsZSgpKSB7Ci0gICAgICAgIHJlZ2lzdHJhcihbXShNZWRpYVBs
YXllciogcGxheWVyKSB7IHJldHVybiBtYWtlVW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcj4ocGxheWVyKTsgfSwKLSAgICAgICAgICAgIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0
c1R5cGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIHN1cHBvcnRzS2V5U3lzdGVtKTsKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCitjbGFzcyBHc3RWaWRlb0ZyYW1lSG9sZGVyIDogcHVi
bGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyOjpVbm1hbmFnZWRCdWZmZXJEYXRh
SG9sZGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHc3RWaWRlb0ZyYW1lSG9sZGVyKEdzdFNh
bXBsZSogc2FtcGxlLCBPcHRpb25hbDxHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybT4gdmlkZW9EZWNv
ZGVyUGxhdGZvcm0sIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MsIGJvb2wgZ3N0R0xFbmFi
bGVkKQorICAgICAgICA6IG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0odmlkZW9EZWNvZGVyUGxhdGZv
cm0pCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChHU1RfSVNfU0FNUExFKHNhbXBsZSkp
OworCisgICAgICAgIEdzdFZpZGVvSW5mbyB2aWRlb0luZm87CisgICAgICAgIGlmIChVTkxJS0VM
WSghZ2V0U2FtcGxlVmlkZW9JbmZvKHNhbXBsZSwgdmlkZW9JbmZvKSkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgbV9zaXplID0gSW50U2l6ZShHU1RfVklERU9fSU5GT19XSURUSCgm
dmlkZW9JbmZvKSwgR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0luZm8pKTsKKyAgICAgICAg
bV9oYXNBbHBoYUNoYW5uZWwgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbyk7
CisgICAgICAgIG1fYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZSk7CisgICAg
ICAgIGlmIChVTkxJS0VMWSghR1NUX0lTX0JVRkZFUihtX2J1ZmZlcikpKQorICAgICAgICAgICAg
cmV0dXJuOworCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICAgICAgbV9mbGFncyA9IGZsYWdz
IHwgKG1faGFzQWxwaGFDaGFubmVsID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6IDAp
OworCisgICAgICAgIGlmIChnc3RHTEVuYWJsZWQpIHsKKyAgICAgICAgICAgIG1faXNNYXBwZWQg
PSBnc3RfdmlkZW9fZnJhbWVfbWFwKCZtX3ZpZGVvRnJhbWUsICZ2aWRlb0luZm8sIG1fYnVmZmVy
LCBzdGF0aWNfY2FzdDxHc3RNYXBGbGFncz4oR1NUX01BUF9SRUFEIHwgR1NUX01BUF9HTCkpOwor
ICAgICAgICAgICAgaWYgKG1faXNNYXBwZWQpIHsKKyAgICAgICAgICAgICAgICBtX3RleHR1cmVJ
RCA9ICpyZWludGVycHJldF9jYXN0PEdMdWludCo+KG1fdmlkZW9GcmFtZS5kYXRhWzBdKTsKKyAg
ICAgICAgICAgICAgICBtX2hhc01hcHBlZFRleHR1cmVzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlCisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oZmxhZ3MpOworICAg
ICAgICBVTlVTRURfUEFSQU0oZ3N0R0xFbmFibGVkKTsKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
X0dMKQorCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdGV4dHVyZUlEID0gMDsKKyAgICAgICAg
ICAgIG1faXNNYXBwZWQgPSBnc3RfdmlkZW9fZnJhbWVfbWFwKCZtX3ZpZGVvRnJhbWUsICZ2aWRl
b0luZm8sIG1fYnVmZmVyLCBHU1RfTUFQX1JFQUQpOworICAgICAgICAgICAgaWYgKG1faXNNYXBw
ZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBSaWdodCBub3cgdGhlIFRleHR1cmVNYXBwZXIgb25s
eSBzdXBwb3J0cyBjaHJvbWFzIHdpdGggb25lIHBsYW5lCisgICAgICAgICAgICAgICAgQVNTRVJU
KEdTVF9WSURFT19JTkZPX05fUExBTkVTKCZ2aWRlb0luZm8pID09IDEpOworICAgICAgICAgICAg
fQorICAgICAgICB9CiAgICAgfQotfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aXNBdmFpbGFibGUoKQotewotICAgIGlmICghaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lz
dGVyV2ViS2l0RWxlbWVudHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHZpcnR1YWwg
fkdzdFZpZGVvRnJhbWVIb2xkZXIoKQorICAgIHsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFtX2lz
TWFwcGVkKSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgIEdSZWZQdHI8R3N0RWxlbWVudEZh
Y3Rvcnk+IGZhY3RvcnkgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kKCJwbGF5
YmluIikpOwotICAgIHJldHVybiBmYWN0b3J5OworICAgICAgICBnc3RfdmlkZW9fZnJhbWVfdW5t
YXAoJm1fdmlkZW9GcmFtZSk7CisgICAgfQorCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICB2
aXJ0dWFsIHZvaWQgd2FpdEZvckNQVVN5bmMoKQorICAgIHsKKyAgICAgICAgR3N0R0xTeW5jTWV0
YSogbWV0YSA9IGdzdF9idWZmZXJfZ2V0X2dsX3N5bmNfbWV0YShtX2J1ZmZlcik7CisgICAgICAg
IGlmIChtZXRhKSB7CisgICAgICAgICAgICBHc3RNZW1vcnkqIG1lbSA9IGdzdF9idWZmZXJfcGVl
a19tZW1vcnkobV9idWZmZXIsIDApOworICAgICAgICAgICAgR3N0R0xDb250ZXh0KiBjb250ZXh0
ID0gKChHc3RHTEJhc2VNZW1vcnkqKW1lbSktPmNvbnRleHQ7CisgICAgICAgICAgICBnc3RfZ2xf
c3luY19tZXRhX3dhaXRfY3B1KG1ldGEsIGNvbnRleHQpOworICAgICAgICB9CisgICAgfQorI2Vu
ZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCisKKyAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgYm9vbCBoYXNBbHBoYUNoYW5uZWwoKSBjb25zdCB7
IHJldHVybiBtX2hhc0FscGhhQ2hhbm5lbDsgfQorICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3Mg
ZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9CisgICAgR0x1aW50IHRleHR1cmVJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlEOyB9CisgICAgYm9vbCBoYXNNYXBwZWRUZXh0dXJl
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWFwcGVkVGV4dHVyZXM7IH0KKyAgICBjb25zdCBHc3RW
aWRlb0ZyYW1lJiB2aWRlb0ZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0ZyYW1lOyB9CisK
KyAgICB2b2lkIHVwZGF0ZVRleHR1cmUoQml0bWFwVGV4dHVyZUdMJiB0ZXh0dXJlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFtX3RleHR1cmVJRCk7CisgICAgICAgIEdzdFZpZGVvR0xUZXh0dXJl
VXBsb2FkTWV0YSogbWV0YTsKKyAgICAgICAgaWYgKG1fYnVmZmVyICYmIChtZXRhID0gZ3N0X2J1
ZmZlcl9nZXRfdmlkZW9fZ2xfdGV4dHVyZV91cGxvYWRfbWV0YShtX2J1ZmZlcikpKSB7CisgICAg
ICAgICAgICBpZiAobWV0YS0+bl90ZXh0dXJlcyA9PSAxKSB7IC8vIEJSR3ggJiBCR1JBIGZvcm1h
dHMgdXNlIG9ubHkgb25lIHRleHR1cmUuCisgICAgICAgICAgICAgICAgZ3VpbnQgaWRzWzRdID0g
eyB0ZXh0dXJlLmlkKCksIDAsIDAsIDAgfTsKKworICAgICAgICAgICAgICAgIGlmIChnc3Rfdmlk
ZW9fZ2xfdGV4dHVyZV91cGxvYWRfbWV0YV91cGxvYWQobWV0YSwgaWRzKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFtX2lzTWFwcGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGludCBzdHJpZGUg
PSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFKCZtX3ZpZGVvRnJhbWUsIDApOworICAgICAg
ICBjb25zdCB2b2lkKiBzcmNEYXRhID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEoJm1fdmlk
ZW9GcmFtZSwgMCk7CisKKyAgICAgICAgaWYgKCFzcmNEYXRhKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHRleHR1cmUudXBkYXRlQ29udGVudHMoc3JjRGF0YSwgV2ViQ29yZTo6SW50
UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSwgV2ViQ29yZTo6SW50
UG9pbnQoMCwgMCksIHN0cmlkZSk7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBwbGF0Zm9ybUxheWVyQnVmZmVyKCkKKyAgICB7
CisgICAgICAgIGlmICghbV9oYXNNYXBwZWRUZXh0dXJlcykKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIHVzaW5nIEJ1ZmZlciA9IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyQnVmZmVyOworCisgICAgICAgIGlmICgoR1NUX1ZJREVPX0lORk9fSVNfUkdCKCZtX3ZpZGVv
RnJhbWUuaW5mbykgJiYgR1NUX1ZJREVPX0lORk9fTl9QTEFORVMoJm1fdmlkZW9GcmFtZS5pbmZv
KSA9PSAxKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEJ1ZmZlcj4oQnVmZmVyOjpU
ZXh0dXJlVmFyaWFudCB7IEJ1ZmZlcjo6UkdCVGV4dHVyZSB7ICpzdGF0aWNfY2FzdDxHTHVpbnQq
PihtX3ZpZGVvRnJhbWUuZGF0YVswXSkgfSB9LCBtX3NpemUsIG1fZmxhZ3MsIEdMX1JHQkEpOwor
CisgICAgICAgIGlmIChHU1RfVklERU9fSU5GT19JU19ZVVYoJm1fdmlkZW9GcmFtZS5pbmZvKSkg
eworICAgICAgICAgICAgaWYgKEdTVF9WSURFT19JTkZPX05fQ09NUE9ORU5UUygmbV92aWRlb0Zy
YW1lLmluZm8pIDwgMyB8fCBHU1RfVklERU9fSU5GT19OX1BMQU5FUygmbV92aWRlb0ZyYW1lLmlu
Zm8pID4gMykKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAg
aWYgKG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gJiYgKm1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gPT0g
R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OklteFZQVSkgeworICAgICAgICAgICAgICAgIC8vIElN
WCBWUFUgZGVjb2RlciBkZWNvZGVzIFlVViBkYXRhIG9ubHkgaW50byB0aGUgWSB0ZXh0dXJlIGZy
b20gd2hpY2ggdGhlIHNhbXBsZXIKKyAgICAgICAgICAgICAgICAvLyB0aGVuIGRpcmVjdGx5IHBy
b2R1Y2VzIFJHQkEgZGF0YS4gVGV4dHVyZXMgZm9yIG90aGVyIHBsYW5lcyBhcmVuJ3QgdXNlZCwg
YnV0CisgICAgICAgICAgICAgICAgLy8gdGhhdCdzIGRlY29kZXIncyBwcm9ibGVtLiBXZSBoYXZl
IHRvIHRyZWF0IHRoYXQgWSB0ZXh0dXJlIGFzIGhhdmluZyBSR0JBIGRhdGEuCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8QnVmZmVyPihCdWZmZXI6OlRleHR1cmVWYXJpYW50IHsg
QnVmZmVyOjpSR0JUZXh0dXJlIHsgKnN0YXRpY19jYXN0PEdMdWludCo+KG1fdmlkZW9GcmFtZS5k
YXRhWzBdKSB9IH0sIG1fc2l6ZSwgbV9mbGFncywgR0xfUkdCQSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGxhbmVzID0gR1NUX1ZJREVPX0lORk9fTl9Q
TEFORVMoJm1fdmlkZW9GcmFtZS5pbmZvKTsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8R0x1aW50
LCAzPiBwbGFuZXM7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCAzPiB5dXZQbGFu
ZTsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIDM+IHl1dlBsYW5lT2Zmc2V0Owor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUGxhbmVzOyArK2kp
CisgICAgICAgICAgICAgICAgcGxhbmVzW2ldID0gKnN0YXRpY19jYXN0PEdMdWludCo+KG1fdmlk
ZW9GcmFtZS5kYXRhW2ldKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICB5dXZQbGFuZVtpXSA9IEdTVF9WSURFT19JTkZPX0NP
TVBfUExBTkUoJm1fdmlkZW9GcmFtZS5pbmZvLCBpKTsKKyAgICAgICAgICAgICAgICB5dXZQbGFu
ZU9mZnNldFtpXSA9IEdTVF9WSURFT19JTkZPX0NPTVBfUE9GRlNFVCgmbV92aWRlb0ZyYW1lLmlu
Zm8sIGkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGQ6OmFycmF5PEdMZmxvYXQs
IDk+IHl1dlRvUmdiOworICAgICAgICAgICAgaWYgKGdzdF92aWRlb19jb2xvcmltZXRyeV9tYXRj
aGVzKCZHU1RfVklERU9fSU5GT19DT0xPUklNRVRSWSgmbV92aWRlb0ZyYW1lLmluZm8pLCBHU1Rf
VklERU9fQ09MT1JJTUVUUllfQlQ3MDkpKSB7CisgICAgICAgICAgICAgICAgeXV2VG9SZ2IgPSB7
CisgICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgIDAuMGYsICAgIDEuNzg3ZiwKKyAgICAgICAg
ICAgICAgICAgICAgMS4xNjRmLCAtMC4yMTNmLCAtMC41MzFmLAorICAgICAgICAgICAgICAgICAg
ICAxLjE2NGYsICAyLjExMmYsICAwLjBmCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBidDYwMS4gVGhpcyBpcyB0
aGUgc2FtZSBiZWhhdmlvdXIgYXMgR1N0cmVhbWVyJ3MgZ2xjb2xvcmNvbnZlcnQgZWxlbWVudC4K
KyAgICAgICAgICAgICAgICB5dXZUb1JnYiA9IHsKKyAgICAgICAgICAgICAgICAgICAgMS4xNjRm
LCAgMC4wZiwgICAgMS41OTZmLAorICAgICAgICAgICAgICAgICAgICAxLjE2NGYsIC0wLjM5MWYs
IC0wLjgxM2YsCisgICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgIDIuMDE4ZiwgIDAuMGYKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxCdWZmZXI+KCBCdWZmZXI6OlRleHR1cmVWYXJpYW50IHsgQnVmZmVyOjpZVVZUZXh0
dXJlIHsgbnVtYmVyT2ZQbGFuZXMsIHBsYW5lcywgeXV2UGxhbmUsIHl1dlBsYW5lT2Zmc2V0LCB5
dXZUb1JnYiB9IH0sIG1fc2l6ZSwgbV9mbGFncywgR0xfUkdCQSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3N0QnVmZmVyKiBt
X2J1ZmZlcjsKKyAgICBHc3RWaWRlb0ZyYW1lIG1fdmlkZW9GcmFtZSB7IH07CisgICAgSW50U2l6
ZSBtX3NpemU7CisgICAgYm9vbCBtX2hhc0FscGhhQ2hhbm5lbDsKKyAgICBPcHRpb25hbDxHc3RW
aWRlb0RlY29kZXJQbGF0Zm9ybT4gbV92aWRlb0RlY29kZXJQbGF0Zm9ybTsKKyAgICBUZXh0dXJl
TWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3MgeyB9OworICAgIEdMdWludCBtX3RleHR1cmVJRCB7IDAg
fTsKKyAgICBib29sIG1faXNNYXBwZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNNYXBwZWRU
ZXh0dXJlcyB7IGZhbHNlIH07Cit9OworI2VuZGlmCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSgpCit7CisgICAgR1NUX0RFQlVHX0NB
VEVHT1JZX0lOSVQod2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVy
IiwgMCwgIldlYktpdCBtZWRpYSBwbGF5ZXIiKTsKIH0KIAogTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqIHBsYXllcikK
LSAgICA6IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UocGxheWVyKQotICAgICwgbV9i
dWZmZXJpbmcoZmFsc2UpCi0gICAgLCBtX2J1ZmZlcmluZ1BlcmNlbnRhZ2UoMCkKKyAgICA6IG1f
bm90aWZpZXIoTWFpblRocmVhZE5vdGlmaWVyPE1haW5UaHJlYWROb3RpZmljYXRpb24+OjpjcmVh
dGUoKSkKKyAgICAsIG1fcGxheWVyKHBsYXllcikKICAgICAsIG1fY2FjaGVkUG9zaXRpb24oTWVk
aWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAgICwgbV9jYWNoZWREdXJhdGlvbihNZWRpYVRpbWU6
OmludmFsaWRUaW1lKCkpCi0gICAgLCBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9z
aXRpb24oZmFsc2UpCi0gICAgLCBtX2NoYW5naW5nUmF0ZShmYWxzZSkKLSAgICAsIG1fZG93bmxv
YWRGaW5pc2hlZChmYWxzZSkKLSAgICAsIG1fZXJyb3JPY2N1cmVkKGZhbHNlKQotICAgICwgbV9p
c0VuZFJlYWNoZWQoZmFsc2UpCi0gICAgLCBtX2lzU3RyZWFtaW5nKGZhbHNlKQotICAgICwgbV9w
YXVzZWQodHJ1ZSkKLSAgICAsIG1fcGxheWJhY2tSYXRlKDEpCi0gICAgLCBtX3JlcXVlc3RlZFN0
YXRlKEdTVF9TVEFURV9WT0lEX1BFTkRJTkcpCi0gICAgLCBtX3Jlc2V0UGlwZWxpbmUoZmFsc2Up
Ci0gICAgLCBtX3NlZWtpbmcoZmFsc2UpCi0gICAgLCBtX3NlZWtJc1BlbmRpbmcoZmFsc2UpCiAg
ICAgLCBtX3NlZWtUaW1lKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKLSAgICAsIG1fc291cmNl
KG51bGxwdHIpCi0gICAgLCBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZChmYWxzZSkKLSAgICAs
IG1fbWVkaWFMb2NhdGlvbnMobnVsbHB0cikKLSAgICAsIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJ
bmRleCgwKQotICAgICwgbV9wbGF5YmFja1JhdGVQYXVzZShmYWxzZSkKICAgICAsIG1fdGltZU9m
T3ZlcmxhcHBpbmdTZWVrKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKLSAgICAsIG1fbGFzdFBs
YXliYWNrUmF0ZSgxKQogICAgICwgbV9maWxsVGltZXIoKnRoaXMsICZNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKQogICAgICwgbV9tYXhUaW1lTG9hZGVkKE1lZGlh
VGltZTo6emVyb1RpbWUoKSkKICAgICAsIG1fcHJlbG9hZChwbGF5ZXItPnByZWxvYWQoKSkKLSAg
ICAsIG1fZGVsYXlpbmdMb2FkKGZhbHNlKQogICAgICwgbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlk
TG9hZGluZ1Byb2dyZXNzKE1lZGlhVGltZTo6emVyb1RpbWUoKSkKLSAgICAsIG1faGFzVmlkZW8o
ZmFsc2UpCi0gICAgLCBtX2hhc0F1ZGlvKGZhbHNlKQotICAgICwgbV9yZWFkeVRpbWVySGFuZGxl
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJl
YWR5VGltZXJGaXJlZCkKLSAgICAsIG1fdG90YWxCeXRlcygwKQotICAgICwgbV9wcmVzZXJ2ZXNQ
aXRjaChmYWxzZSkKKyAgICAsIG1fZHJhd1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVwYWludCkKKyAgICAsIG1fcmVhZHlUaW1lckhh
bmRsZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpyZWFkeVRpbWVyRmlyZWQKKykKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaWYgVVNF
KE5JQ09TSUEpCisgICAgLCBtX25pY29zaWFMYXllcihOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNy
ZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9y
eSgqdGhpcykpKQorI2Vsc2UKKyAgICAsIG1fcGxhdGZvcm1MYXllclByb3h5KGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KCkpKQorI2VuZGlmCisjZW5kaWYgICAg
ICAKIHsKICNpZiBVU0UoR0xJQikKICAgICBtX3JlYWR5VGltZXJIYW5kbGVyLnNldFByaW9yaXR5
KEdfUFJJT1JJVFlfREVGQVVMVF9JRExFKTsKQEAgLTIyMiw1NCArNDQ4LDY0IEBAIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpCiAgICAg
ICAgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcihidXMuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIpOwogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQo
bV9waXBlbGluZS5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVs
bHB0ciwgdGhpcyk7CiAgICAgfQotfQogCi1zdGF0aWMgdm9pZCBjb252ZXJ0VG9JbnRlcm5hbFBy
b3RvY29sKFVSTCYgdXJsKQotewotICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTIs
IDApKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHVybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5
KCkgfHwgdXJsLnByb3RvY29sSXNCbG9iKCkpCi0gICAgICAgIHVybC5zZXRQcm90b2NvbCgid2Vi
a2l0KyIgKyB1cmwucHJvdG9jb2woKSk7Ci19CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBp
ZiAobV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9PSBHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6Vmlk
ZW80TGludXgpCisgICAgICAgIGZsdXNoQ3VycmVudEJ1ZmZlcigpOworI2VuZGlmCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBVU0UoTklDT1NJQSkKKyAgICBkb3duY2FzdDxOaWNvc2lh
OjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSku
aW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRQbGF5YmluVVJMKGNvbnN0IFVSTCYgdXJsKQotewotICAgIC8vIENsZWFuIG91
dCBldmVyeXRoaW5nIGFmdGVyIGZpbGU6Ly8gdXJsIHBhdGguCi0gICAgU3RyaW5nIGNsZWFuVVJM
U3RyaW5nKHVybC5zdHJpbmcoKSk7Ci0gICAgaWYgKHVybC5pc0xvY2FsRmlsZSgpKQotICAgICAg
ICBjbGVhblVSTFN0cmluZyA9IGNsZWFuVVJMU3RyaW5nLnN1YnN0cmluZygwLCB1cmwucGF0aEVu
ZCgpKTsKKyAgICBtX25vdGlmaWVyLT5pbnZhbGlkYXRlKCk7CiAKLSAgICBtX3VybCA9IFVSTChV
UkwoKSwgY2xlYW5VUkxTdHJpbmcpOwotICAgIGNvbnZlcnRUb0ludGVybmFsUHJvdG9jb2wobV91
cmwpOwotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiTG9hZCAlcyIsIG1fdXJsLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgp
LCAidXJpIiwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7Ci19CisgICAg
aWYgKG1fdmlkZW9TaW5rKSB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
bWF0Y2hlZChtX3ZpZGVvU2luay5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVs
bHB0ciwgbnVsbHB0ciwgdGhpcyk7CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICAgICAgaWYg
KEdTVF9JU19CSU4obV92aWRlb1NpbmsuZ2V0KCkpKSB7CisgICAgICAgICAgICBHUmVmUHRyPEdz
dEVsZW1lbnQ+IGFwcHNpbmsgPSBhZG9wdEdSZWYoZ3N0X2Jpbl9nZXRfYnlfbmFtZShHU1RfQklO
X0NBU1QobV92aWRlb1NpbmsuZ2V0KCkpLCAid2Via2l0LWdsLXZpZGVvLXNpbmsiKSk7CisgICAg
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEoYXBwc2luay5nZXQo
KSwgdGhpcyk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCi17Ci0gICAgbG9h
ZEZ1bGwodXJsU3RyaW5nLCBTdHJpbmcoKSk7CisgICAgaWYgKG1fdm9sdW1lRWxlbWVudCkKKyAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fdm9sdW1lRWxlbWVu
dC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhp
cyk7CisKKyAgICAvLyBUaGlzIHdpbGwgcmVsZWFzZSB0aGUgR1N0cmVhbWVyIHRocmVhZCBmcm9t
IG1fZHJhd0NvbmRpdGlvbiBpbiBub24gQUMgbW9kZSBpbiBjYXNlIHRoZXJlJ3MgYW4gb25nb2lu
ZyB0cmlnZ2VyUmVwYWludCBjYWxsCisgICAgLy8gd2FpdGluZyB0aGVyZSwgYW5kIGVuc3VyZSB0
aGF0IGFueSB0cmlnZ2VyUmVwYWludCBjYWxsIHJlYWNoaW5nIHRoZSBsb2NrIHdvbid0IHdhaXQg
b24gbV9kcmF3Q29uZGl0aW9uLgorICAgIGNhbmNlbFJlcGFpbnQodHJ1ZSk7CisKKyNpZiBFTkFC
TEUoRU5DUllQVEVEX01FRElBKQorICAgIG1fY2RtQXR0YWNobWVudFNlbWFwaG9yZS5zaWduYWwo
KTsKKyNlbmRpZgorCisgICAgLy8gVGhlIGNoYW5nZSB0byBHU1RfU1RBVEVfTlVMTCBzdGF0ZSBp
cyBhbHdheXMgc3luY2hyb25vdXMuIFNvIGFmdGVyIHRoaXMgZ2V0cyBleGVjdXRlZCB3ZSBkb24n
dCBuZWVkIHRvIHdvcnJ5CisgICAgLy8gYWJvdXQgaGFuZGxlcnMgcnVubmluZyBpbiB0aGUgR1N0
cmVhbWVyIHRocmVhZC4KKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKworICAgIG1fcGxh
eWVyID0gbnVsbHB0cjsKIH0KIAotc3RhdGljIHZvaWQgc2V0U3luY09uQ2xvY2soR3N0RWxlbWVu
dCAqZWxlbWVudCwgYm9vbCBzeW5jKQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmlzQXZhaWxhYmxlKCkKIHsKLSAgICBpZiAoIUdTVF9JU19CSU4oZWxlbWVudCkpIHsKLSAgICAg
ICAgZ19vYmplY3Rfc2V0KGVsZW1lbnQsICJzeW5jIiwgc3luYywgTlVMTCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKCFpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJL
aXRFbGVtZW50cygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBHc3RJdGVyYXRvciog
aXQgPSBnc3RfYmluX2l0ZXJhdGVfc2lua3MoR1NUX0JJTihlbGVtZW50KSk7Ci0gICAgd2hpbGUg
KGdzdF9pdGVyYXRvcl9mb3JlYWNoKGl0LCAoR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rpb24pKFtd
KGNvbnN0IEdWYWx1ZSogaXRlbSwgdm9pZCogc3luY1B0cikgewotICAgICAgICBib29sKiBzeW5j
ID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHN5bmNQdHIpOwotICAgICAgICBzZXRTeW5jT25DbG9jayhH
U1RfRUxFTUVOVChnX3ZhbHVlX2dldF9vYmplY3QoaXRlbSkpLCAqc3luYyk7Ci0gICAgfSksICZz
eW5jKSA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5j
KGl0KTsKLSAgICBnc3RfaXRlcmF0b3JfZnJlZShpdCk7CisgICAgLy8gRklYTUU6IFRoaXMgaGFz
IG5vdCBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBwbGF5YmluMyBzd2l0Y2guCisgICAgR1JlZlB0cjxH
c3RFbGVtZW50RmFjdG9yeT4gZmFjdG9yeSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5
X2ZpbmQoInBsYXliaW4iKSk7CisgICAgcmV0dXJuIGZhY3Rvcnk7CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzeW5jT25DbG9jayhib29sIHN5bmMpCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJl
Z2lzdHJhciByZWdpc3RyYXIpCiB7Ci0gICAgc2V0U3luY09uQ2xvY2sodmlkZW9TaW5rKCksIHN5
bmMpOwotICAgIHNldFN5bmNPbkNsb2NrKGF1ZGlvU2luaygpLCBzeW5jKTsKKyAgICBpbml0aWFs
aXplRGVidWdDYXRlZ29yeSgpOworCisgICAgaWYgKGlzQXZhaWxhYmxlKCkpIHsKKyAgICAgICAg
cmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsgcmV0dXJuIG1ha2VVbmlxdWU8TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPihwbGF5ZXIpOyB9LAorICAgICAgICAgICAgZ2V0U3Vw
cG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgc3Vw
cG9ydHNLZXlTeXN0ZW0pOworICAgIH0KIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmxvYWRGdWxsKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBp
cGVsaW5lTmFtZSkKQEAgLTMxNCw2ICs1NTAsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmxvYWRGdWxsKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcK
ICAgICAgICAgY29tbWl0TG9hZCgpOwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKK3sKKyAgICBsb2FkRnVsbCh1cmxT
dHJpbmcsIFN0cmluZygpKTsKK30KKwogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJj
ZVByaXZhdGVDbGllbnQqKQogewpAQCAtMzUzLDg4ICs1OTQsMTMgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmNvbW1pdExvYWQoKQogICAgIHVwZGF0ZVN0YXRlcygpOwogfQog
Ci1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5YmFja1Bvc2l0aW9u
KCkgY29uc3QKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5jZWxMb2FkKCkK
IHsKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJpc0VuZFJlYWNoZWQ6ICVzLCBz
ZWVraW5nOiAlcywgc2Vla1RpbWU6ICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNFbmRSZWFjaGVk
KSwgYm9vbEZvclByaW50aW5nKG1fc2Vla2luZyksIG1fc2Vla1RpbWUudG9TdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKLSAgICBpZiAobV9pc0VuZFJlYWNoZWQgJiYgbV9zZWVraW5nKQotICAgICAg
ICByZXR1cm4gbV9zZWVrVGltZTsKKyAgICBpZiAobV9uZXR3b3JrU3RhdGUgPCBNZWRpYVBsYXll
cjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9PSBNZWRpYVBsYXllcjo6TG9hZGVkKQorICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBUaGlzIGNvbnN0YW50IHNob3VsZCByZW1haW4gbG93ZXIg
dGhhbiBIVE1MTWVkaWFFbGVtZW50J3MgbWF4VGltZXVwZGF0ZUV2ZW50RnJlcXVlbmN5LgotICAg
IHN0YXRpYyBjb25zdCBTZWNvbmRzIHBvc2l0aW9uQ2FjaGVUaHJlc2hvbGQgPSAyMDBfbXM7Ci0g
ICAgU2Vjb25kcyBub3cgPSBXVEY6OldhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgp
OwotICAgIGlmIChtX2xhc3RRdWVyeVRpbWUgJiYgKG5vdyAtIG1fbGFzdFF1ZXJ5VGltZS52YWx1
ZSgpKSA8IHBvc2l0aW9uQ2FjaGVUaHJlc2hvbGQgJiYgbV9jYWNoZWRQb3NpdGlvbi5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiUmV0dXJuaW5nIGNh
Y2hlZCBwb3NpdGlvbjogJXMiLCBtX2NhY2hlZFBvc2l0aW9uLnRvU3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgIHJldHVybiBtX2NhY2hlZFBvc2l0aW9uOwotICAgIH0KLQotICAgIG1f
bGFzdFF1ZXJ5VGltZSA9IG5vdzsKLQotICAgIC8vIFBvc2l0aW9uIGlzIG9ubHkgYXZhaWxhYmxl
IGlmIG5vIGFzeW5jIHN0YXRlIGNoYW5nZSBpcyBnb2luZyBvbiBhbmQgdGhlIHN0YXRlIGlzIGVp
dGhlciBwYXVzZWQgb3IgcGxheWluZy4KLSAgICBnaW50NjQgcG9zaXRpb24gPSBHU1RfQ0xPQ0tf
VElNRV9OT05FOwotICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24o
R1NUX0ZPUk1BVF9USU1FKTsKLSAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5n
ZXQoKSwgcXVlcnkpKQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAs
ICZwb3NpdGlvbik7Ci0gICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKLQotICAgIEdTVF9UUkFD
RV9PQkpFQ1QocGlwZWxpbmUoKSwgIlBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBjYW5G
YWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uOiAlcyIsIEdTVF9USU1FX0FSR1MocG9z
aXRpb24pLCBib29sRm9yUHJpbnRpbmcobV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bv
c2l0aW9uKSk7Ci0KLSAgICBNZWRpYVRpbWUgcGxheWJhY2tQb3NpdGlvbiA9IE1lZGlhVGltZTo6
emVyb1RpbWUoKTsKLSAgICBHc3RDbG9ja1RpbWUgZ3N0cmVhbWVyUG9zaXRpb24gPSBzdGF0aWNf
Y2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKTsKLSAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNf
VkFMSUQoZ3N0cmVhbWVyUG9zaXRpb24pKQotICAgICAgICBwbGF5YmFja1Bvc2l0aW9uID0gTWVk
aWFUaW1lKGdzdHJlYW1lclBvc2l0aW9uLCBHU1RfU0VDT05EKTsKLSAgICBlbHNlIGlmIChtX2Nh
bkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24pCi0gICAgICAgIHBsYXliYWNrUG9z
aXRpb24gPSBtX3NlZWtUaW1lOwotCi0gICAgbV9jYWNoZWRQb3NpdGlvbiA9IHBsYXliYWNrUG9z
aXRpb247Ci0gICAgcmV0dXJuIHBsYXliYWNrUG9zaXRpb247Ci19Ci0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVRpbWVyRmlyZWQoKQotewotICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIkluIFJFQURZIGZvciB0b28gbG9uZy4gUmVsZWFzaW5nIHBpcGVs
aW5lIHJlc291cmNlcy4iKTsKLSAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9OVUxM
KTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5l
U3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCi17Ci0gICAgQVNTRVJUKG1fcGlwZWxpbmUpOwotCi0g
ICAgR3N0U3RhdGUgY3VycmVudFN0YXRlOwotICAgIEdzdFN0YXRlIHBlbmRpbmc7Ci0KLSAgICBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJmN1cnJlbnRTdGF0ZSwgJnBl
bmRpbmcsIDApOwotICAgIGlmIChjdXJyZW50U3RhdGUgPT0gbmV3U3RhdGUgfHwgcGVuZGluZyA9
PSBuZXdTdGF0ZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJSZWpl
Y3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgZnJvbSAlcyB3aXRoICVzIHBlbmRpbmciLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSksCi0gICAgICAgICAgICBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShjdXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShw
ZW5kaW5nKSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIkNoYW5naW5nIHN0YXRlIGNoYW5nZSB0byAlcyBmcm9tICVzIHdp
dGggJXMgcGVuZGluZyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSwKLSAg
ICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1l
bnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAg
ICBpZiAoY3VycmVudFN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWSAmJiBuZXdTdGF0ZSA+PSBHU1Rf
U1RBVEVfUEFVU0VEKQotICAgICAgICBlbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKTsKLSNlbmRp
ZgotCi0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgbmV3U3RhdGUpOwotICAgIEdzdFN0YXRlIHBh
dXNlZE9yUGxheWluZyA9IG5ld1N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HID8gR1NUX1NUQVRF
X1BBVVNFRCA6IEdTVF9TVEFURV9QTEFZSU5HOwotICAgIGlmIChjdXJyZW50U3RhdGUgIT0gcGF1
c2VkT3JQbGF5aW5nICYmIHNldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVS
RSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ3JlYXRlIGEgdGltZXIgd2hlbiBl
bnRlcmluZyB0aGUgUkVBRFkgc3RhdGUgc28gdGhhdCB3ZSBjYW4gZnJlZSByZXNvdXJjZXMKLSAg
ICAvLyBpZiB3ZSBzdGF5IGZvciB0b28gbG9uZyBvbiBSRUFEWS4KLSAgICAvLyBBbHNvIGxldHMg
cmVtb3ZlIHRoZSB0aW1lciBpZiB3ZSByZXF1ZXN0IGEgc3RhdGUgY2hhbmdlIGZvciBhbnkgc3Rh
dGUgb3RoZXIgdGhhbiBSRUFEWS4KLSAgICAvLyBTZWUgYWxzbyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3MzU0Ci0gICAgaWYgKG5ld1N0YXRlID09IEdTVF9TVEFU
RV9SRUFEWSAmJiAhbV9yZWFkeVRpbWVySGFuZGxlci5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIC8v
IE1heCBpbnRlcnZhbCBpbiBzZWNvbmRzIHRvIHN0YXkgaW4gdGhlIFJFQURZIHN0YXRlIG9uIG1h
bnVhbAotICAgICAgICAvLyBzdGF0ZSBjaGFuZ2UgcmVxdWVzdHMuCi0gICAgICAgIHN0YXRpYyBj
b25zdCBTZWNvbmRzIHJlYWR5U3RhdGVUaW1lckRlbGF5IHsgMV9taW4gfTsKLSAgICAgICAgbV9y
ZWFkeVRpbWVySGFuZGxlci5zdGFydE9uZVNob3QocmVhZHlTdGF0ZVRpbWVyRGVsYXkpOwotICAg
IH0gZWxzZSBpZiAobmV3U3RhdGUgIT0gR1NUX1NUQVRFX1JFQURZKQotICAgICAgICBtX3JlYWR5
VGltZXJIYW5kbGVyLnN0b3AoKTsKLQotICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX3BpcGVs
aW5lKQorICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9SRUFEWSk7CiB9CiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcmVwYXJlVG9QbGF5KCkKQEAgLTQ3
OCw1NCArNjQ0LDQ4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZSgp
CiAgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKIH0KIAotTWVkaWFU
aW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxhdGZvcm1EdXJhdGlvbigpIGNvbnN0
Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1l
KCk7Ci0KLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVz
LCBwaXBlbGluZSBzdGF0ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9lcnJvck9jY3VyZWQpLCBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShHU1RfU1RBVEUobV9waXBlbGluZS5nZXQoKSkpKTsK
LSAgICBpZiAobV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCk7CisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgLy8gVGhlIGR1cmF0aW9uIHF1
ZXJ5IHdvdWxkIGZhaWwgb24gYSBub3QtcHJlcm9sbGVkIHBpcGVsaW5lLgotICAgIGlmIChHU1Rf
U1RBVEUobV9waXBlbGluZS5nZXQoKSkgPCBHU1RfU1RBVEVfUEFVU0VEKQotICAgICAgICByZXR1
cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgIGlmIChtX2lzRW5kUmVhY2hlZCkgewor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJJZ25vcmluZyBwYXVzZSBhdCBF
T1MiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAgaW50NjRfdCBkdXJhdGlv
biA9IDA7Ci0gICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbihtX3BpcGVsaW5lLmdl
dCgpLCBHU1RfRk9STUFUX1RJTUUsICZkdXJhdGlvbikgfHwgIUdTVF9DTE9DS19USU1FX0lTX1ZB
TElEKGR1cmF0aW9uKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJU
aW1lIGR1cmF0aW9uIHF1ZXJ5IGZhaWxlZCBmb3IgJXMiLCBtX3VybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUo
KTsKKyAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgeworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJQbGF5YmFjayByYXRlIGlzIDAsIHNpbXVsYXRpbmcgUEFVU0VEIHN0
YXRlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBHU1RfTE9HX09CSkVD
VChwaXBlbGluZSgpLCAiRHVyYXRpb246ICUiIEdTVF9USU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJH
UyhkdXJhdGlvbikpOwotICAgIHJldHVybiBNZWRpYVRpbWUoZHVyYXRpb24sIEdTVF9TRUNPTkQp
OworICAgIEdzdFN0YXRlIHN0YXRlOworICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOworICAgIGJvb2wgcGF1c2VkID0gc3RhdGUg
PD0gR1NUX1NUQVRFX1BBVVNFRDsKKyAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiUGF1
c2VkOiAlcyIsIHRvU3RyaW5nKHBhdXNlZCkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHBh
dXNlZDsKIH0KIAotTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVyYXRp
b25NZWRpYVRpbWUoKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRv
U2Vlayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBmbG9hdCByYXRlLCBHc3RTZWVrRmxhZ3Mg
c2Vla1R5cGUpCiB7Ci0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiQ2FjaGVkIGR1
cmF0aW9uOiAlcyIsIG1fY2FjaGVkRHVyYXRpb24udG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
LSAgICBpZiAobV9jYWNoZWREdXJhdGlvbi5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBtX2Nh
Y2hlZER1cmF0aW9uOwotCi0gICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gcGxhdGZvcm1EdXJhdGlv
bigpOwotICAgIGlmICghZHVyYXRpb24gfHwgZHVyYXRpb24uaXNJbnZhbGlkKCkpCi0gICAgICAg
IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0KLSAgICBtX2NhY2hlZER1cmF0aW9uID0g
ZHVyYXRpb247Ci0KLSAgICByZXR1cm4gbV9jYWNoZWREdXJhdGlvbjsKLX0KKyAgICAvLyBEZWZh
dWx0IHZhbHVlcyBmb3IgcmF0ZSA+PSAwLgorICAgIE1lZGlhVGltZSBzdGFydFRpbWUgPSBwb3Np
dGlvbiwgZW5kVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKIAotTWVkaWFUaW1lIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKQotICAgICAgICByZXR1cm4gTWVk
aWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgIGlmIChyYXRlIDwgMCkgeworICAgICAgICBzdGFy
dFRpbWUgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CisgICAgICAgIC8vIElmIHdlIGFyZSBhdCBi
ZWdpbm5pbmcgb2YgbWVkaWEsIHN0YXJ0IGZyb20gdGhlIGVuZCB0bworICAgICAgICAvLyBhdm9p
ZCBpbW1lZGlhdGUgRU9TLgorICAgICAgICBpZiAocG9zaXRpb24gPCBNZWRpYVRpbWU6Onplcm9U
aW1lKCkpCisgICAgICAgICAgICBlbmRUaW1lID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZW5kVGltZSA9IHBvc2l0aW9uOworICAgIH0KIAotICAgIEdT
VF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgInNlZWtpbmc6ICVzLCBzZWVrVGltZTogJXMiLCBi
b29sRm9yUHJpbnRpbmcobV9zZWVraW5nKSwgbV9zZWVrVGltZS50b1N0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotICAgIGlmIChtX3NlZWtpbmcpCi0gICAgICAgIHJldHVybiBtX3NlZWtUaW1lOwor
ICAgIGlmICghcmF0ZSkKKyAgICAgICAgcmF0ZSA9IDEuMDsKIAotICAgIHJldHVybiBwbGF5YmFj
a1Bvc2l0aW9uKCk7CisgICAgcmV0dXJuIGdzdF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5nZXQo
KSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrVHlwZSwKKyAgICAgICAgR1NUX1NFRUtfVFlQ
RV9TRVQsIHRvR3N0Q2xvY2tUaW1lKHN0YXJ0VGltZSksIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dz
dENsb2NrVGltZShlbmRUaW1lKSk7CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZWVrKGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1lKQpAQCAtNTg4LDI4ICs3NDgsNiBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayhjb25zdCBNZWRpYVRpbWUm
IG1lZGlhVGltZSkKICAgICBtX2lzRW5kUmVhY2hlZCA9IGZhbHNlOwogfQogCi1ib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24s
IGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFncyBzZWVrVHlwZSkKLXsKLSAgICAvLyBEZWZhdWx0IHZh
bHVlcyBmb3IgcmF0ZSA+PSAwLgotICAgIE1lZGlhVGltZSBzdGFydFRpbWUgPSBwb3NpdGlvbiwg
ZW5kVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLQotICAgIGlmIChyYXRlIDwgMCkg
ewotICAgICAgICBzdGFydFRpbWUgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0gICAgICAgIC8v
IElmIHdlIGFyZSBhdCBiZWdpbm5pbmcgb2YgbWVkaWEsIHN0YXJ0IGZyb20gdGhlIGVuZCB0bwot
ICAgICAgICAvLyBhdm9pZCBpbW1lZGlhdGUgRU9TLgotICAgICAgICBpZiAocG9zaXRpb24gPCBN
ZWRpYVRpbWU6Onplcm9UaW1lKCkpCi0gICAgICAgICAgICBlbmRUaW1lID0gZHVyYXRpb25NZWRp
YVRpbWUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZW5kVGltZSA9IHBvc2l0aW9uOwot
ICAgIH0KLQotICAgIGlmICghcmF0ZSkKLSAgICAgICAgcmF0ZSA9IDEuMDsKLQotICAgIHJldHVy
biBnc3RfZWxlbWVudF9zZWVrKG1fcGlwZWxpbmUuZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRfVElN
RSwgc2Vla1R5cGUsCi0gICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShz
dGFydFRpbWUpLCBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoZW5kVGltZSkpOwot
fQotCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlUGxheWJhY2tSYXRl
KCkKIHsKICAgICBpZiAoIW1fY2hhbmdpbmdSYXRlKQpAQCAtNjQ0LDU4MCArNzgyLDE0MDggQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCiAg
ICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpwYXVzZWQoKSBjb25zdAorTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cGxhdGZvcm1EdXJhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BpcGVsaW5l
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxp
ZFRpbWUoKTsKIAotICAgIGlmIChtX2lzRW5kUmVhY2hlZCkgewotICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJJZ25vcmluZyBwYXVzZSBhdCBFT1MiKTsKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQorICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgImVycm9y
T2NjdXJlZDogJXMsIHBpcGVsaW5lIHN0YXRlOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2Vycm9y
T2NjdXJlZCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKEdTVF9TVEFURShtX3BpcGVsaW5l
LmdldCgpKSkpOworICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICAgICAgcmV0dXJuIE1lZGlh
VGltZTo6aW52YWxpZFRpbWUoKTsKIAotICAgIGlmIChtX3BsYXliYWNrUmF0ZVBhdXNlKSB7Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXliYWNrIHJhdGUgaXMgMCwg
c2ltdWxhdGluZyBQQVVTRUQgc3RhdGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8v
IFRoZSBkdXJhdGlvbiBxdWVyeSB3b3VsZCBmYWlsIG9uIGEgbm90LXByZXJvbGxlZCBwaXBlbGlu
ZS4KKyAgICBpZiAoR1NUX1NUQVRFKG1fcGlwZWxpbmUuZ2V0KCkpIDwgR1NUX1NUQVRFX1BBVVNF
RCkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIGludDY0
X3QgZHVyYXRpb24gPSAwOworICAgIGlmICghZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9w
aXBlbGluZS5nZXQoKSwgR1NUX0ZPUk1BVF9USU1FLCAmZHVyYXRpb24pIHx8ICFHU1RfQ0xPQ0tf
VElNRV9JU19WQUxJRChkdXJhdGlvbikpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiVGltZSBkdXJhdGlvbiBxdWVyeSBmYWlsZWQgZm9yICVzIiwgbV91cmwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5m
aW5pdGVUaW1lKCk7CiAgICAgfQogCi0gICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7Ci0gICAg
Ym9vbCBwYXVzZWQgPSBzdGF0ZSA8PSBHU1RfU1RBVEVfUEFVU0VEOwotICAgIEdTVF9MT0dfT0JK
RUNUKHBpcGVsaW5lKCksICJQYXVzZWQ6ICVzIiwgdG9TdHJpbmcocGF1c2VkKS51dGY4KCkuZGF0
YSgpKTsKLSAgICByZXR1cm4gcGF1c2VkOworICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCks
ICJEdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTKGR1cmF0aW9uKSk7
CisgICAgcmV0dXJuIE1lZGlhVGltZShkdXJhdGlvbiwgR1NUX1NFQ09ORCk7CiB9CiAKLWJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZWVraW5nKCkgY29uc3QKK01lZGlhVGltZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9zZWVraW5nOwotfQorICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUo
KSwgIkNhY2hlZCBkdXJhdGlvbjogJXMiLCBtX2NhY2hlZER1cmF0aW9uLnRvU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgaWYgKG1fY2FjaGVkRHVyYXRpb24uaXNWYWxpZCgpKQorICAgICAg
ICByZXR1cm4gbV9jYWNoZWREdXJhdGlvbjsKIAotI2RlZmluZSBDTEVBUl9UUkFDS1ModHJhY2tz
LCBtZXRob2QpIFwKLSAgICBmb3IgKGF1dG8mIHRyYWNrIDogdHJhY2tzLnZhbHVlcygpKVwKLSAg
ICAgICAgbWV0aG9kKCp0cmFjayk7XAotICAgIHRyYWNrcy5jbGVhcigpOworICAgIE1lZGlhVGlt
ZSBkdXJhdGlvbiA9IHBsYXRmb3JtRHVyYXRpb24oKTsKKyAgICBpZiAoIWR1cmF0aW9uIHx8IGR1
cmF0aW9uLmlzSW52YWxpZCgpKQorICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgp
OwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2xlYXJUcmFja3MoKQotewot
I2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBDTEVBUl9UUkFDS1MobV9hdWRpb1RyYWNrcywg
bV9wbGF5ZXItPnJlbW92ZUF1ZGlvVHJhY2spOwotICAgIENMRUFSX1RSQUNLUyhtX3ZpZGVvVHJh
Y2tzLCBtX3BsYXllci0+cmVtb3ZlVmlkZW9UcmFjayk7Ci0gICAgQ0xFQVJfVFJBQ0tTKG1fdGV4
dFRyYWNrcywgbV9wbGF5ZXItPnJlbW92ZVRleHRUcmFjayk7Ci0jZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgIG1fY2FjaGVkRHVyYXRpb24gPSBkdXJhdGlvbjsKKworICAgIHJldHVy
biBtX2NhY2hlZER1cmF0aW9uOwogfQotI3VuZGVmIENMRUFSX1RSQUNLUwogCi1GbG9hdFNpemUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CitNZWRpYVRp
bWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjdXJyZW50TWVkaWFUaW1lKCkgY29uc3QK
IHsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGlmICghbV9pc0xlZ2FjeVBsYXliaW4g
JiYgIW1fY3VycmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxW
aWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdmlkZW9UcmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0
KG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOwotCi0gICAgICAgIGlmICh2aWRlb1RyYWNrKSB7Ci0g
ICAgICAgICAgICBhdXRvIHRhZ3MgPSBhZG9wdEdSZWYoZ3N0X3N0cmVhbV9nZXRfdGFncyh2aWRl
b1RyYWNrLT5zdHJlYW0oKSkpOwotICAgICAgICAgICAgZ2ludCB3aWR0aCwgaGVpZ2h0OworICAg
IGlmICghbV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkKKyAgICAgICAgcmV0dXJuIE1lZGlh
VGltZTo6aW52YWxpZFRpbWUoKTsKIAotICAgICAgICAgICAgaWYgKHRhZ3MgJiYgZ3N0X3RhZ19s
aXN0X2dldF9pbnQodGFncy5nZXQoKSwgV0VCS0lUX01FRElBX1RSQUNLX1RBR19XSURUSCwgJndp
ZHRoKSAmJiBnc3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLmdldCgpLCBXRUJLSVRfTUVESUFfVFJB
Q0tfVEFHX0hFSUdIVCwgJmhlaWdodCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgInNlZWtpbmc6ICVz
LCBzZWVrVGltZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9zZWVraW5nKSwgbV9zZWVrVGltZS50
b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChtX3NlZWtpbmcpCisgICAgICAgIHJl
dHVybiBtX3NlZWtUaW1lOwogCi0gICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6Om5hdHVyYWxTaXplKCk7CisgICAgcmV0dXJuIHBsYXliYWNrUG9zaXRpb24oKTsKIH0K
IAotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSNkZWZpbmUgQ1JFQVRFX1RSQUNLKHR5cGUsIFR5
cGUpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbV9o
YXMjI1R5cGUgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgaWYgKCF1c2VNZWRpYVNvdXJjZSkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFJlZlB0cjxUeXBlIyNUcmFja1By
aXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVh
dGUobWFrZVdlYWtQdHIoKnRoaXMpLCBpLCBzdHJlYW0pOyBcCi0gICAgICAgICAgICBtXyMjdHlw
ZSMjVHJhY2tzLmFkZCh0cmFjay0+aWQoKSwgdHJhY2spOyAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2Zs
YWdzKHN0cmVhbS5nZXQoKSkgJiBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUKSBcCi0gICAgICAgICAg
ICAgICAgbV9jdXJyZW50IyNUeXBlIyNTdHJlYW1JZCA9IFN0cmluZyhnc3Rfc3RyZWFtX2dldF9z
dHJlYW1faWQoc3RyZWFtLmdldCgpKSk7IFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IEdfU1RN
VF9FTkQKLSNlbHNlCi0jZGVmaW5lIENSRUFURV9UUkFDSyh0eXBlLCBUeXBlKSBHX1NUTVRfU1RB
UlQgeyBcCi0gICAgICAgIG1faGFzIyNUeXBlIyMgPSB0cnVlOyAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSBHX1NUTVRfRU5ECi0jZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlVHJhY2tzKCkKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRSYXRlKGZsb2F0IHJhdGUpCiB7Ci0gICAgQVNTRVJU
KCFtX2lzTGVnYWN5UGxheWJpbik7CisgICAgLy8gSGlnaGVyIHJhdGUgY2F1c2VzIGNyYXNoLgor
ICAgIHJhdGUgPSBjbGFtcFRvKHJhdGUsIC0yMC4wLCAyMC4wKTsKIAotICAgIGJvb2wgdXNlTWVk
aWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X3N0
cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQoKSk7Ci0KLSAg
ICBib29sIG9sZEhhc0F1ZGlvID0gbV9oYXNBdWRpbzsKLSAgICBib29sIG9sZEhhc1ZpZGVvID0g
bV9oYXNWaWRlbzsKLSAgICAvLyBOZXcgc3RyZWFtIGNvbGxlY3Rpb25zIG92ZXJyaWRlIHByZXZp
b3VzIG9uZXMuCi0gICAgY2xlYXJUcmFja3MoKTsKLSAgICB1bnNpZ25lZCB0ZXh0VHJhY2tJbmRl
eCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0
X3N0cmVhbShtX3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCksIGkpOwotICAgICAgICBTdHJpbmcgc3Ry
ZWFtSWQoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOwotICAgICAgICBH
c3RTdHJlYW1UeXBlIHR5cGUgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0uZ2V0
KCkpOwotCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkluc3BlY3Rpbmcg
JXMgdHJhY2sgd2l0aCBJRCAlcyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3Ry
ZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBF
X0FVRElPKQotICAgICAgICAgICAgQ1JFQVRFX1RSQUNLKGF1ZGlvLCBBdWRpbyk7Ci0gICAgICAg
IGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklERU8pCi0gICAgICAgICAgICBDUkVB
VEVfVFJBQ0sodmlkZW8sIFZpZGVvKTsKLSAgICAgICAgZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJF
QU1fVFlQRV9URVhUICYmICF1c2VNZWRpYVNvdXJjZSkgewotI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGUodGV4dFRyYWNrSW5kZXgrKywgc3RyZWFtKTsKLSAgICAgICAgICAgIG1fdGV4
dFRyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICBtX3Bs
YXllci0+YWRkVGV4dFRyYWNrKHRyYWNrLmdldCgpKTsKLSNlbmRpZgotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJVbmtub3duIHRyYWNrIHR5cGUgZm91bmQgZm9yIHN0
cmVhbSAlcyIsIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLQotICAgIGlmICgob2xk
SGFzVmlkZW8gIT0gbV9oYXNWaWRlbykgfHwgKG9sZEhhc0F1ZGlvICE9IG1faGFzQXVkaW8pKQot
ICAgICAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCk7Ci0KLSAgICBpZiAobV9o
YXNWaWRlbykKLSAgICAgICAgbV9wbGF5ZXItPnNpemVDaGFuZ2VkKCk7Ci0KLSAgICBtX3BsYXll
ci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKLX0KLQotI3Vu
ZGVmIENSRUFURV9UUkFDSworICAgIC8vIEF2b2lkIHVzZWxlc3MgcGxheWJhY2sgcmF0ZSB1cGRh
dGUuCisgICAgaWYgKG1fcGxheWJhY2tSYXRlID09IHJhdGUpIHsKKyAgICAgICAgLy8gYW5kIG1h
a2Ugc3VyZSB0aGF0IHVwcGVyIGxheWVycyB3ZXJlIG5vdGlmaWVkIGlmIHJhdGUgd2FzIHNldAog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5hYmxlVHJhY2soVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlIHRyYWNrVHlwZSwgdW5zaWduZWQgaW5kZXgpCi17
Ci0gICAgLy8gRklYTUU6IFJlbW92ZSBpc01lZGlhU291cmNlKCkgdGVzdCBiZWxvdyB3aGVuIGZp
eGluZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNTMxLgotICAg
IGlmIChpc01lZGlhU291cmNlKCkpIHsKLSAgICAgICAgR1NUX0ZJWE1FX09CSkVDVChtX3BpcGVs
aW5lLmdldCgpLCAiQXVkaW8vVmlkZW8vVGV4dCB0cmFjayBzd2l0Y2hpbmcgaXMgbm90IHlldCBz
dXBwb3J0ZWQgYnkgdGhlIE1TRSBiYWNrZW5kLiIpOworICAgICAgICBpZiAoIW1fY2hhbmdpbmdS
YXRlICYmIG1fcGxheWVyLT5yYXRlKCkgIT0gbV9wbGF5YmFja1JhdGUpCisgICAgICAgICAgICBt
X3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNv
bnN0IGNoYXIqIHByb3BlcnR5TmFtZTsKLSAgICBjb25zdCBjaGFyKiB0cmFja1R5cGVBc1N0cmlu
ZzsKLSAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RlZFN0cmVhbXM7Ci0gICAgU3RyaW5nIHNlbGVj
dGVkU3RyZWFtSWQ7Ci0KLSAgICBHc3RTdHJlYW0qIHN0cmVhbSA9IG51bGxwdHI7Ci0KLSAgICBp
ZiAoIW1faXNMZWdhY3lQbGF5YmluKSB7Ci0gICAgICAgIHN0cmVhbSA9IGdzdF9zdHJlYW1fY29s
bGVjdGlvbl9nZXRfc3RyZWFtKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQoKSwgaW5kZXgpOwotICAg
ICAgICBpZiAoIXN0cmVhbSkgewotICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKHBpcGVs
aW5lKCksICJObyBzdHJlYW0gdG8gc2VsZWN0IGF0IGluZGV4ICV1IiwgaW5kZXgpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNlbGVjdGVkU3RyZWFtSWQgPSBTdHJp
bmc6OmZyb21VVEY4KGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pKTsKLSAgICAgICAg
c2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChzZWxlY3RlZFN0cmVhbUlkKTsKKyAgICBpZiAoaXNMaXZl
U3RyZWFtKCkpIHsKKyAgICAgICAgLy8gbm90aWZ5IHVwcGVyIGxheWVycyB0aGF0IHdlIGNhbm5v
dCBoYW5kbGUgcGFzc2VkIHJhdGUuCisgICAgICAgIG1fY2hhbmdpbmdSYXRlID0gZmFsc2U7Cisg
ICAgICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOworICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgc3dpdGNoICh0cmFja1R5cGUpIHsKLSAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3Ry
ZWFtZXI6OlRyYWNrVHlwZTo6QXVkaW86Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJjdXJyZW50
LWF1ZGlvIjsKLSAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAiYXVkaW8iOwotICAgICAgICBp
ZiAoIXNlbGVjdGVkU3RyZWFtSWQuaXNFbXB0eSgpICYmIHNlbGVjdGVkU3RyZWFtSWQgPT0gbV9j
dXJyZW50QXVkaW9TdHJlYW1JZCkgewotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICIlcyBzdHJlYW06ICVzIGFscmVhZHkgc2VsZWN0ZWQsIG5vdCBkb2luZyBhbnl0aGlu
Zy4iLCB0cmFja1R5cGVBc1N0cmluZywgc2VsZWN0ZWRTdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIEdzdFN0YXRlIHN0YXRlOworICAg
IEdzdFN0YXRlIHBlbmRpbmc7CiAKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRUZXh0U3RyZWFtSWQu
aXNFbXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRU
ZXh0U3RyZWFtSWQpOwotICAgICAgICBpZiAoIW1fY3VycmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRWaWRlb1N0
cmVhbUlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyOjpUcmFja1R5cGU6OlZpZGVvOgotICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiY3VycmVudC12
aWRlbyI7Ci0gICAgICAgIHRyYWNrVHlwZUFzU3RyaW5nID0gInZpZGVvIjsKLSAgICAgICAgaWYg
KCFzZWxlY3RlZFN0cmVhbUlkLmlzRW1wdHkoKSAmJiBzZWxlY3RlZFN0cmVhbUlkID09IG1fY3Vy
cmVudFZpZGVvU3RyZWFtSWQpIHsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGlu
ZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5IHNlbGVjdGVkLCBub3QgZG9pbmcgYW55dGhpbmcu
IiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVjdGVkU3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBtX3BsYXliYWNrUmF0ZSA9IHJhdGU7
CisgICAgbV9jaGFuZ2luZ1JhdGUgPSB0cnVlOwogCi0gICAgICAgIGlmICghbV9jdXJyZW50QXVk
aW9TdHJlYW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5k
KG1fY3VycmVudEF1ZGlvU3RyZWFtSWQpOwotICAgICAgICBpZiAoIW1fY3VycmVudFRleHRTdHJl
YW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3Vy
cmVudFRleHRTdHJlYW1JZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJhY2tQcml2YXRl
QmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpUZXh0OgotICAgICAgICBwcm9wZXJ0eU5hbWUgPSAi
Y3VycmVudC10ZXh0IjsKLSAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAidGV4dCI7Ci0gICAg
ICAgIGlmICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0ZWRTdHJlYW1JZCA9
PSBtX2N1cnJlbnRUZXh0U3RyZWFtSWQpIHsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChw
aXBlbGluZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5IHNlbGVjdGVkLCBub3QgZG9pbmcgYW55
dGhpbmcuIiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVjdGVkU3RyZWFtSWQudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBnc3RfZWxlbWVudF9nZXRf
c3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGluZywgMCk7CiAKLSAgICAgICAg
aWYgKCFtX2N1cnJlbnRBdWRpb1N0cmVhbUlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNlbGVj
dGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50QXVkaW9TdHJlYW1JZCk7Ci0gICAgICAgIGlmICgh
bV9jdXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0
cmVhbXMuYXBwZW5kKG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VW5rbm93bjoKLSAg
ICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBpZiAoIXJhdGUp
IHsKKyAgICAgICAgbV9jaGFuZ2luZ1JhdGUgPSBmYWxzZTsKKyAgICAgICAgbV9wbGF5YmFja1Jh
dGVQYXVzZSA9IHRydWU7CisgICAgICAgIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUEFVU0VEICYm
IHBlbmRpbmcgIT0gR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5l
U3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBH
U1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkVuYWJsaW5nICVzIHRyYWNrIHdpdGggaW5kZXg6
ICV1IiwgdHJhY2tUeXBlQXNTdHJpbmcsIGluZGV4KTsKLSAgICBpZiAobV9pc0xlZ2FjeVBsYXli
aW4pCi0gICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCBwcm9wZXJ0eU5hbWUs
IGluZGV4LCBudWxscHRyKTsKLSAgICBlbHNlIHsKLSAgICAgICAgR0xpc3QqIHNlbGVjdGVkU3Ry
ZWFtc0xpc3QgPSBudWxscHRyOworICAgIGlmICgoc3RhdGUgIT0gR1NUX1NUQVRFX1BMQVlJTkcg
JiYgc3RhdGUgIT0gR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgfHwgKHBlbmRpbmcgPT0gR1NU
X1NUQVRFX1BBVVNFRCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBmb3IgKGNvbnN0IGF1
dG8mIHN0cmVhbUlkIDogc2VsZWN0ZWRTdHJlYW1zKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJl
YW1zTGlzdCA9IGdfbGlzdF9hcHBlbmQoc2VsZWN0ZWRTdHJlYW1zTGlzdCwgZ19zdHJkdXAoc3Ry
ZWFtSWQudXRmOCgpLmRhdGEoKSkpOworICAgIHVwZGF0ZVBsYXliYWNrUmF0ZSgpOworfQogCi0g
ICAgICAgIC8vIFRPRE86IE1TRSBHc3RTdHJlYW0gQVBJIHN1cHBvcnQ6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI1MzEKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2Vu
ZF9ldmVudChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zKHNl
bGVjdGVkU3RyZWFtc0xpc3QpKTsKLSAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChzZWxlY3RlZFN0
cmVhbXNMaXN0LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihnX2ZyZWUpKTsKLSAg
ICB9Citkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyYXRlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wbGF5YmFja1JhdGU7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp2aWRlb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIqIHBsYXllcikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQcmVzZXJ2
ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNoKQogewotICAgIHBsYXllci0+bV9ub3RpZmllci0+
bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlZpZGVvQ2hhbmdlZCwgW3BsYXllcl0gewot
ICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVmlkZW8oKTsKLSAgICB9KTsKKyAgICBtX3By
ZXNlcnZlc1BpdGNoID0gcHJlc2VydmVzUGl0Y2g7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkIHByZWxvYWQpCiB7
Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8ICFtX3NvdXJjZSkpCisgICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyBwcmVsb2FkIHRvICVzIiwgY29udmVydEVu
dW1lcmF0aW9uVG9TdHJpbmcocHJlbG9hZCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKHByZWxv
YWQgPT0gTWVkaWFQbGF5ZXI6OkF1dG8gJiYgaXNMaXZlU3RyZWFtKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOwot
Ci0gICAgZ2ludCBudW1UcmFja3MgPSAwOwotICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01l
ZGlhU291cmNlKCk7Ci0gICAgR3N0RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8g
bV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOwotICAgIGdfb2JqZWN0X2dldChlbGVt
ZW50LCAibi12aWRlbyIsICZudW1UcmFja3MsIG51bGxwdHIpOworICAgIG1fcHJlbG9hZCA9IHBy
ZWxvYWQ7CisgICAgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdGbGFnKCk7CiAKLSAgICBHU1RfSU5G
T19PQkpFQ1QocGlwZWxpbmUoKSwgIk1lZGlhIGhhcyAlZCB2aWRlbyB0cmFja3MiLCBudW1UcmFj
a3MpOworICAgIGlmIChtX2RlbGF5aW5nTG9hZCAmJiBtX3ByZWxvYWQgIT0gTWVkaWFQbGF5ZXI6
Ok5vbmUpIHsKKyAgICAgICAgbV9kZWxheWluZ0xvYWQgPSBmYWxzZTsKKyAgICAgICAgY29tbWl0
TG9hZCgpOworICAgIH0KK30KIAotICAgIGJvb2wgb2xkSGFzVmlkZW8gPSBtX2hhc1ZpZGVvOwot
ICAgIG1faGFzVmlkZW8gPSBudW1UcmFja3MgPiAwOwotICAgIGlmIChvbGRIYXNWaWRlbyAhPSBt
X2hhc1ZpZGVvKQotICAgICAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCk7Citz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmJ1ZmZlcmVkKCkgY29uc3QKK3sKKyAgICBhdXRvIHRpbWVSYW5nZXMgPSBtYWtlVW5p
cXVlPFBsYXRmb3JtVGltZVJhbmdlcz4oKTsKKyAgICBpZiAobV9lcnJvck9jY3VyZWQgfHwgaXNM
aXZlU3RyZWFtKCkpCisgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOwogCi0gICAgaWYgKG1faGFz
VmlkZW8pCi0gICAgICAgIG1fcGxheWVyLT5zaXplQ2hhbmdlZCgpOworICAgIE1lZGlhVGltZSBt
ZWRpYUR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKKyAgICBpZiAoIW1lZGlhRHVyYXRp
b24gfHwgbWVkaWFEdXJhdGlvbi5pc1Bvc2l0aXZlSW5maW5pdGUoKSkKKyAgICAgICAgcmV0dXJu
IHRpbWVSYW5nZXM7CiAKLSAgICBpZiAodXNlTWVkaWFTb3VyY2UpIHsKLSAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiVHJhY2tzIG1hbmFnZWQgYnkgc291cmNlIGVsZW1lbnQu
IEJhaWxpbmcgb3V0IG5vdy4iKTsKLSAgICAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxh
eWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
R1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19idWZmZXJp
bmcoR1NUX0ZPUk1BVF9QRVJDRU5UKSk7CiAKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAg
VmVjdG9yPFN0cmluZz4gdmFsaWRWaWRlb1N0cmVhbXM7Ci0gICAgZm9yIChnaW50IGkgPSAwOyBp
IDwgbnVtVHJhY2tzOyArK2kpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZDsKLSAgICAg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCksICJnZXQtdmlkZW8tcGFk
IiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7Ci0gICAgICAgIEFTU0VSVChwYWQpOworICAg
IGlmICghZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQoKSwgcXVlcnkuZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gdGltZVJhbmdlczsKIAotICAgICAgICBTdHJpbmcgc3RyZWFtSWQgPSAi
ViIgKyBTdHJpbmc6Om51bWJlcihpKTsKLSAgICAgICAgdmFsaWRWaWRlb1N0cmVhbXMuYXBwZW5k
KHN0cmVhbUlkKTsKLSAgICAgICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxnaW50PihtX3ZpZGVvVHJh
Y2tzLnNpemUoKSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lcj4gZXhpc3RpbmdUcmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KHN0cmVhbUlkKTsKLSAgICAg
ICAgICAgIGlmIChleGlzdGluZ1RyYWNrKSB7Ci0gICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFj
ay0+c2V0SW5kZXgoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2stPnBhZCgp
ID09IHBhZCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Cisg
ICAgZ3VpbnQgbnVtQnVmZmVyaW5nUmFuZ2VzID0gZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19y
YW5nZXMocXVlcnkuZ2V0KCkpOworICAgIGZvciAoZ3VpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51
bUJ1ZmZlcmluZ1JhbmdlczsgaW5kZXgrKykgeworICAgICAgICBnaW50NjQgcmFuZ2VTdGFydCA9
IDAsIHJhbmdlU3RvcCA9IDA7CisgICAgICAgIGlmIChnc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZl
cmluZ19yYW5nZShxdWVyeS5nZXQoKSwgaW5kZXgsICZyYW5nZVN0YXJ0LCAmcmFuZ2VTdG9wKSkg
eworICAgICAgICAgICAgdWludDY0X3Qgc3RhcnRUaW1lID0gZ3N0X3V0aWxfdWludDY0X3NjYWxl
X2ludF9yb3VuZCh0b0dzdFVuc2lnbmVkNjRUaW1lKG1lZGlhRHVyYXRpb24pLCByYW5nZVN0YXJ0
LCBHU1RfRk9STUFUX1BFUkNFTlRfTUFYKTsKKyAgICAgICAgICAgIHVpbnQ2NF90IHN0b3BUaW1l
ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCh0b0dzdFVuc2lnbmVkNjRUaW1lKG1l
ZGlhRHVyYXRpb24pLCByYW5nZVN0b3AsIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgpOworICAgICAg
ICAgICAgdGltZVJhbmdlcy0+YWRkKE1lZGlhVGltZShzdGFydFRpbWUsIEdTVF9TRUNPTkQpLCBN
ZWRpYVRpbWUoc3RvcFRpbWUsIEdTVF9TRUNPTkQpKTsKICAgICAgICAgfQotCi0gICAgICAgIGF1
dG8gdHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRy
KCp0aGlzKSwgaSwgcGFkKTsKLSAgICAgICAgQVNTRVJUKHN0cmVhbUlkID09IHRyYWNrLT5pZCgp
KTsKLSAgICAgICAgbV92aWRlb1RyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrLmNvcHlSZWYoKSk7
Ci0gICAgICAgIG1fcGxheWVyLT5hZGRWaWRlb1RyYWNrKHRyYWNrLmdldCgpKTsKICAgICB9CiAK
LSAgICBwdXJnZUludmFsaWRWaWRlb1RyYWNrcyh2YWxpZFZpZGVvU3RyZWFtcyk7Ci0jZW5kaWYK
KyAgICAvLyBGYWxsYmFjayB0byB0aGUgbW9yZSBnZW5lcmFsIG1heFRpbWVMb2FkZWQoKSBpZiBu
byByYW5nZSBoYXMKKyAgICAvLyBiZWVuIGZvdW5kLgorICAgIGlmICghdGltZVJhbmdlcy0+bGVu
Z3RoKCkpIHsKKyAgICAgICAgTWVkaWFUaW1lIGxvYWRlZCA9IG1heFRpbWVMb2FkZWQoKTsKKyAg
ICAgICAgaWYgKGxvYWRlZC5pc1ZhbGlkKCkgJiYgbG9hZGVkKQorICAgICAgICAgICAgdGltZVJh
bmdlcy0+YWRkKE1lZGlhVGltZTo6emVyb1RpbWUoKSwgbG9hZGVkKTsKKyAgICB9CiAKLSAgICBt
X3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKKyAg
ICByZXR1cm4gdGltZVJhbmdlczsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKiBwbGF5ZXIpCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhN
ZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0CiB7Ci0gICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3Rp
ZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6VmlkZW9DYXBzQ2hhbmdlZCwgW3BsYXllcl0gewot
ICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVmlkZW9DYXBzKCk7Ci0gICAgfSk7Ci19Cisg
ICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiZXJyb3JPY2N1cmVkOiAlcywgaXNMaXZl
U3RyZWFtOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2Vycm9yT2NjdXJlZCksIGJvb2xGb3JQcmlu
dGluZyhpc0xpdmVTdHJlYW0oKSkpOworICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICAgICAg
cmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW9DYXBzKCkKLXsKLSAgICBtX3ZpZGVvU2l6ZSA9
IEludFNpemUoKTsKLSAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRh
dGVkKG1fcGxheWVyKTsKLX0KKyAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCisgICAgICAgIHJldHVy
biBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjphdWRpb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBs
YXllcikKLXsKLSAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZp
Y2F0aW9uOjpBdWRpb0NoYW5nZWQsIFtwbGF5ZXJdIHsKLSAgICAgICAgcGxheWVyLT5ub3RpZnlQ
bGF5ZXJPZkF1ZGlvKCk7Ci0gICAgfSk7CisgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gZHVyYXRp
b25NZWRpYVRpbWUoKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJtYXhNZWRp
YVRpbWVTZWVrYWJsZSwgZHVyYXRpb246ICVzIiwgdG9TdHJpbmcoZHVyYXRpb24pLnV0ZjgoKS5k
YXRhKCkpOworICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1lYW5zIGxpdmUgc3RyZWFtCisgICAg
aWYgKGR1cmF0aW9uLmlzUG9zaXRpdmVJbmZpbml0ZSgpKQorICAgICAgICByZXR1cm4gTWVkaWFU
aW1lOjp6ZXJvVGltZSgpOworCisgICAgcmV0dXJuIGR1cmF0aW9uOwogfQogCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCitNZWRpYVRpbWUg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKIHsKLSAg
ICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgIW1fc291cmNlKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKG1faXNMZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2UoKSk7Cisg
ICAgaWYgKG1fZXJyb3JPY2N1cmVkKQorICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGlt
ZSgpOwogCi0gICAgZ2ludCBudW1UcmFja3MgPSAwOwotICAgIGJvb2wgdXNlTWVkaWFTb3VyY2Ug
PSBpc01lZGlhU291cmNlKCk7Ci0gICAgR3N0RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291
cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOwotICAgIGdfb2JqZWN0X2dl
dChlbGVtZW50LCAibi1hdWRpbyIsICZudW1UcmFja3MsIG51bGxwdHIpOwotCi0gICAgR1NUX0lO
Rk9fT0JKRUNUKHBpcGVsaW5lKCksICJNZWRpYSBoYXMgJWQgYXVkaW8gdHJhY2tzIiwgbnVtVHJh
Y2tzKTsKLSAgICBib29sIG9sZEhhc0F1ZGlvID0gbV9oYXNBdWRpbzsKLSAgICBtX2hhc0F1ZGlv
ID0gbnVtVHJhY2tzID4gMDsKLSAgICBpZiAob2xkSGFzQXVkaW8gIT0gbV9oYXNBdWRpbykKLSAg
ICAgICAgbV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOwotCi0gICAgaWYgKHVzZU1l
ZGlhU291cmNlKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRyYWNr
cyBtYW5hZ2VkIGJ5IHNvdXJjZSBlbGVtZW50LiBCYWlsaW5nIG91dCBub3cuIik7Ci0gICAgICAg
IG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIFZl
Y3RvcjxTdHJpbmc+IHZhbGlkQXVkaW9TdHJlYW1zOwotICAgIGZvciAoZ2ludCBpID0gMDsgaSA8
IG51bVRyYWNrczsgKytpKSB7Ci0gICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7Ci0gICAgICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LWF1ZGlvLXBhZCIs
IGksICZwYWQub3V0UHRyKCksIG51bGxwdHIpOwotICAgICAgICBBU1NFUlQocGFkKTsKKyAgICBN
ZWRpYVRpbWUgbG9hZGVkID0gbV9tYXhUaW1lTG9hZGVkOworICAgIGlmIChtX2lzRW5kUmVhY2hl
ZCkKKyAgICAgICAgbG9hZGVkID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKKyAgICBHU1RfTE9HX09C
SkVDVChwaXBlbGluZSgpLCAibWF4VGltZUxvYWRlZDogJXMiLCB0b1N0cmluZyhsb2FkZWQpLnV0
ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBsb2FkZWQ7Cit9CiAKLSAgICAgICAgU3RyaW5nIHN0
cmVhbUlkID0gIkEiICsgU3RyaW5nOjpudW1iZXIoaSk7Ci0gICAgICAgIHZhbGlkQXVkaW9TdHJl
YW1zLmFwcGVuZChzdHJlYW1JZCk7Ci0gICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4o
bV9hdWRpb1RyYWNrcy5zaXplKCkpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8QXVkaW9UcmFja1By
aXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX2F1ZGlvVHJhY2tzLmdldChzdHJlYW1J
ZCk7Ci0gICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgewotICAgICAgICAgICAgICAgIGV4
aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOwotICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1Ry
YWNrLT5wYWQoKSA9PSBwYWQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlk
TG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKK3sKKyAgICBpZiAobV9lcnJvck9jY3VyZWQgfHwgbV9s
b2FkaW5nU3RhbGxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGF1dG8gdHJh
Y2sgPSBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCp0aGlz
KSwgaSwgcGFkKTsKLSAgICAgICAgQVNTRVJUKHN0cmVhbUlkID09IHRyYWNrLT5pZCgpKTsKLSAg
ICAgICAgbV9hdWRpb1RyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrKTsKLSAgICAgICAgbV9wbGF5
ZXItPmFkZEF1ZGlvVHJhY2soKnRyYWNrKTsKKyAgICBpZiAoV0VCS0lUX0lTX1dFQl9TUkMobV9z
b3VyY2UuZ2V0KCkpKSB7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJMYXN0
IG5ldHdvcmsgcmVhZCBwb3NpdGlvbjogJSIgR19HVUlOVDY0X0ZPUk1BVCAiLCBjdXJyZW50OiAl
IiBHX0dVSU5UNjRfRk9STUFULCBtX3JlYWRQb3NpdGlvbkF0TGFzdERpZExvYWRpbmdQcm9ncmVz
cywgbV9uZXR3b3JrUmVhZFBvc2l0aW9uKTsKKyAgICAgICAgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jl
c3MgPSBtX3JlYWRQb3NpdGlvbkF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyA8IG1fbmV0d29ya1Jl
YWRQb3NpdGlvbjsKKyAgICAgICAgbV9yZWFkUG9zaXRpb25BdExhc3REaWRMb2FkaW5nUHJvZ3Jl
c3MgPSBtX25ldHdvcmtSZWFkUG9zaXRpb247CisgICAgICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVs
aW5lKCksICJkaWRMb2FkaW5nUHJvZ3Jlc3M6ICVzIiwgYm9vbEZvclByaW50aW5nKGRpZExvYWRp
bmdQcm9ncmVzcykpOworICAgICAgICByZXR1cm4gZGlkTG9hZGluZ1Byb2dyZXNzOwogICAgIH0K
IAotICAgIHB1cmdlSW52YWxpZEF1ZGlvVHJhY2tzKHZhbGlkQXVkaW9TdHJlYW1zKTsKLSNlbmRp
ZgorICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCAhZHVyYXRpb25NZWRpYVRpbWUoKSB8
fCAoIWlzTWVkaWFTb3VyY2UoKSAmJiAhdG90YWxCeXRlcygpKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQo
bV9wbGF5ZXIpOworICAgIE1lZGlhVGltZSBjdXJyZW50TWF4VGltZUxvYWRlZCA9IG1heFRpbWVM
b2FkZWQoKTsKKyAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcyA9IGN1cnJlbnRNYXhUaW1lTG9h
ZGVkICE9IG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzczsKKyAgICBtX21h
eFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MgPSBjdXJyZW50TWF4VGltZUxvYWRl
ZDsKKyAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiZGlkTG9hZGluZ1Byb2dyZXNzOiAl
cyIsIGJvb2xGb3JQcmludGluZyhkaWRMb2FkaW5nUHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gZGlk
TG9hZGluZ1Byb2dyZXNzOwogfQogCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRleHRDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit1bnNpZ25lZCBsb25nIGxvbmcgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp0b3RhbEJ5dGVzKCkgY29uc3QKIHsKLSAgICBwbGF5ZXItPm1fbm90
aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpUZXh0Q2hhbmdlZCwgW3BsYXll
cl0gewotICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVGV4dCgpOwotICAgIH0pOwotfQor
ICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICAgICAgcmV0dXJuIDA7CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRleHQoKQotewotICAgIGlmIChV
TkxJS0VMWSghbV9waXBlbGluZSB8fCAhbV9zb3VyY2UpKQotICAgICAgICByZXR1cm47CisgICAg
aWYgKG1fdG90YWxCeXRlcykKKyAgICAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKIAotICAgIEFT
U0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOworICAgIGlmICghbV9z
b3VyY2UpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgZ2ludCBudW1UcmFja3MgPSAwOwotICAg
IGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7Ci0gICAgR3N0RWxlbWVudCog
ZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdl
dCgpOwotICAgIGdfb2JqZWN0X2dldChlbGVtZW50LCAibi10ZXh0IiwgJm51bVRyYWNrcywgbnVs
bHB0cik7CisgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgICAgICByZXR1cm4gMDsKIAotICAg
IEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiTWVkaWEgaGFzICVkIHRleHQgdHJhY2tzIiwg
bnVtVHJhY2tzKTsKKyAgICBHc3RGb3JtYXQgZm10ID0gR1NUX0ZPUk1BVF9CWVRFUzsKKyAgICBn
aW50NjQgbGVuZ3RoID0gMDsKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9z
b3VyY2UuZ2V0KCksIGZtdCwgJmxlbmd0aCkpIHsKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBp
cGVsaW5lKCksICJ0b3RhbEJ5dGVzICUiIEdfR0lOVDY0X0ZPUk1BVCwgbGVuZ3RoKTsKKyAgICAg
ICAgbV90b3RhbEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihsZW5ndGgp
OworICAgICAgICBtX2lzU3RyZWFtaW5nID0gIWxlbmd0aDsKKyAgICAgICAgcmV0dXJuIG1fdG90
YWxCeXRlczsKKyAgICB9CiAKLSAgICBpZiAodXNlTWVkaWFTb3VyY2UpIHsKLSAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVHJhY2tzIG1hbmFnZWQgYnkgc291cmNlIGVsZW1l
bnQuIEJhaWxpbmcgb3V0IG5vdy4iKTsKLSAgICAgICAgcmV0dXJuOworICAgIC8vIEZhbGwgYmFj
ayB0byBxdWVyeWluZyB0aGUgc291cmNlIHBhZHMgbWFudWFsbHkuCisgICAgLy8gU2VlIGFsc28g
aHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYzODc0OQorICAgIEdz
dEl0ZXJhdG9yKiBpdGVyID0gZ3N0X2VsZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyhtX3NvdXJjZS5n
ZXQoKSk7CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgd2hpbGUgKCFkb25lKSB7CisgICAg
ICAgIEdWYWx1ZSBpdGVtID0gR19WQUxVRV9JTklUOworICAgICAgICBzd2l0Y2ggKGdzdF9pdGVy
YXRvcl9uZXh0KGl0ZXIsICZpdGVtKSkgeworICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzog
eworICAgICAgICAgICAgR3N0UGFkKiBwYWQgPSBzdGF0aWNfY2FzdDxHc3RQYWQqPihnX3ZhbHVl
X2dldF9vYmplY3QoJml0ZW0pKTsKKyAgICAgICAgICAgIGdpbnQ2NCBwYWRMZW5ndGggPSAwOwor
ICAgICAgICAgICAgaWYgKGdzdF9wYWRfcXVlcnlfZHVyYXRpb24ocGFkLCBmbXQsICZwYWRMZW5n
dGgpICYmIHBhZExlbmd0aCA+IGxlbmd0aCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBwYWRM
ZW5ndGg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdTVF9J
VEVSQVRPUl9SRVNZTkM6CisgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgorICAg
ICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6Cisg
ICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgZ192YWx1ZV91bnNldCgmaXRlbSk7CiAgICAgfQogCi0gICAgVmVjdG9yPFN0cmlu
Zz4gdmFsaWRUZXh0U3RyZWFtczsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7
ICsraSkgewotICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOwotICAgICAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUobV9waXBlbGluZS5nZXQoKSwgImdldC10ZXh0LXBhZCIsIGksICZwYWQub3V0
UHRyKCksIG51bGxwdHIpOwotICAgICAgICBBU1NFUlQocGFkKTsKKyAgICBnc3RfaXRlcmF0b3Jf
ZnJlZShpdGVyKTsKIAotICAgICAgICAvLyBXZSBjYW4ndCBhc3N1bWUgdGhlIHBhZCBoYXMgYSBz
dGlja3kgZXZlbnQgaGVyZSBsaWtlIGltcGxlbWVudGVkIGluCi0gICAgICAgIC8vIEluYmFuZFRl
eHRUcmFja1ByaXZhdGVHU3RyZWFtZXIgYmVjYXVzZSBpdCBtaWdodCBiZSBlbWl0dGVkIGFmdGVy
IHRoZQotICAgICAgICAvLyB0cmFjayB3YXMgY3JlYXRlZC4gU28gZmFsbGJhY2sgdG8gYSBkdW1t
eSBzdHJlYW0gSUQgbGlrZSBpbiB0aGUgQXVkaW8KLSAgICAgICAgLy8gYW5kIFZpZGVvIHRyYWNr
cy4KLSAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIlQiICsgU3RyaW5nOjpudW1iZXIoaSk7Cisg
ICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ0b3RhbEJ5dGVzICUiIEdfR0lOVDY0X0ZP
Uk1BVCwgbGVuZ3RoKTsKKyAgICBtX3RvdGFsQnl0ZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nIGxvbmc+KGxlbmd0aCk7CisgICAgbV9pc1N0cmVhbWluZyA9ICFsZW5ndGg7CisgICAgcmV0
dXJuIG1fdG90YWxCeXRlczsKK30KIAotICAgICAgICB2YWxpZFRleHRTdHJlYW1zLmFwcGVuZChz
dHJlYW1JZCk7Ci0gICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV90ZXh0VHJhY2tz
LnNpemUoKSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0
cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV90ZXh0VHJhY2tzLmdldChzdHJlYW1JZCk7Ci0gICAg
ICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgewotICAgICAgICAgICAgICAgIGV4aXN0aW5nVHJh
Y2stPnNldEluZGV4KGkpOwotICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrLT5wYWQo
KSA9PSBwYWQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworYm9vbCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIVdFQktJ
VF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBHVW5pcXVlT3V0UHRyPGNoYXI+IG9yaWdpbmFsVVJJLCByZXNvbHZlZFVSSTsKKyAgICBnX29i
amVjdF9nZXQobV9zb3VyY2UuZ2V0KCksICJsb2NhdGlvbiIsICZvcmlnaW5hbFVSSS5vdXRQdHIo
KSwgInJlc29sdmVkLWxvY2F0aW9uIiwgJnJlc29sdmVkVVJJLm91dFB0cigpLCBudWxscHRyKTsK
KyAgICBpZiAoIW9yaWdpbmFsVVJJIHx8ICFyZXNvbHZlZFVSSSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghZ19zdHJjbXAwKG9yaWdpbmFsVVJJLmdldCgpLCByZXNvbHZlZFVSSS5n
ZXQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgUmVmPFNlY3VyaXR5T3JpZ2luPiBy
ZXNvbHZlZE9yaWdpbihTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhTdHJpbmc6OmZy
b21VVEY4KHJlc29sdmVkVVJJLmdldCgpKSkpOworICAgIFJlZjxTZWN1cml0eU9yaWdpbj4gcmVx
dWVzdGVkT3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKFN0cmluZzo6ZnJv
bVVURjgob3JpZ2luYWxVUkkuZ2V0KCkpKSk7CisgICAgcmV0dXJuIHJlc29sdmVkT3JpZ2luLT5p
c1NhbWVTY2hlbWVIb3N0UG9ydChyZXF1ZXN0ZWRPcmlnaW4uZ2V0KCkpOworfQorCitPcHRpb25h
bDxib29sPiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndvdWxkVGFpbnRPcmlnaW4oY29u
c3QgU2VjdXJpdHlPcmlnaW4mIG9yaWdpbikgY29uc3QKK3sKKyAgICBpZiAod2Via2l0R3N0Q2hl
Y2tWZXJzaW9uKDEsIDEyLCAwKSkgeworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5l
KCksICJDaGVja2luZyAldSBvcmlnaW5zIiwgbV9vcmlnaW5zLnNpemUoKSk7CisgICAgICAgIGZv
ciAoYXV0byYgcmVzcG9uc2VPcmlnaW4gOiBtX29yaWdpbnMpIHsKKyAgICAgICAgICAgIGlmICgh
b3JpZ2luLmNhbkFjY2VzcygqcmVzcG9uc2VPcmlnaW4pKSB7CisgICAgICAgICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRm91bmQgcmVhY2hhYmxlIHJlc3BvbnNlIG9yaWdp
biIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0KLSAgICAgICAgYXV0byB0cmFjayA9IEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZShpLCBwYWQpOwotICAgICAgICBtX3RleHRUcmFja3MuYWRkKHN0cmVhbUlkLCB0
cmFjay5jb3B5UmVmKCkpOwotICAgICAgICBtX3BsYXllci0+YWRkVGV4dFRyYWNrKHRyYWNrLmdl
dCgpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTm8gdmFsaWQgcmVz
cG9uc2Ugb3JpZ2luIGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICBwdXJnZUludmFsaWRUZXh0VHJhY2tzKHZhbGlkVGV4dFN0cmVhbXMpOworICAgIC8vIEdTdHJl
YW1lciA8IDEuMTIgaGFzIGFuIGluY29tcGxldGUgdXJpZG93bmxvYWRlciBpbXBsZW1lbnRhdGlv
biBzbyB3ZQorICAgIC8vIGNhbid0IHVzZSBXZWJLaXRXZWJTcmMgZm9yIGFkYXB0aXZlIGZyYWdt
ZW50cyBkb3dubG9hZGluZyBpZiB0aGlzCisgICAgLy8gdmVyc2lvbiBpcyBkZXRlY3RlZC4KKyAg
ICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKKyAgICByZXR1cm4gbV9oYXNUYWludGVkT3JpZ2luOwog
fQogCi1Hc3RGbG93UmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNh
bXBsZUNhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKQog
ewotICAgIHBsYXllci0+bmV3VGV4dFNhbXBsZSgpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsK
KyAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGUo
R1NUX09CSkVDVChtX3BpcGVsaW5lLmdldCgpKSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgZ3N0
X2VsZW1lbnRfcG9zdF9tZXNzYWdlKG1fcGlwZWxpbmUuZ2V0KCksIG1lc3NhZ2UpOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNhbXBsZSgpCisjaWYgRU5B
QkxFKFdFQl9BVURJTykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbnN1cmVB
dWRpb1NvdXJjZVByb3ZpZGVyKCkKIHsKLSAgICBpZiAoIW1fdGV4dEFwcFNpbmspCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoIW1fYXVkaW9Tb3VyY2VQcm92aWRlcikKKyAgICAgICAgbV9hdWRp
b1NvdXJjZVByb3ZpZGVyID0gbWFrZVVuaXF1ZTxBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVy
PigpOworfQogCi0gICAgR1JlZlB0cjxHc3RFdmVudD4gc3RyZWFtU3RhcnRFdmVudCA9IGFkb3B0
R1JlZigKLSAgICAgICAgZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50KG1fdGV4dEFwcFNpbmtQYWQu
Z2V0KCksIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQsIDApKTsKK0F1ZGlvU291cmNlUHJvdmlkZXIq
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9Tb3VyY2VQcm92aWRlcigpCit7Cisg
ICAgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRlcigpOworICAgIHJldHVybiBtX2F1ZGlvU291cmNl
UHJvdmlkZXIuZ2V0KCk7Cit9CisjZW5kaWYKIAotICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1w
bGU7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fdGV4dEFwcFNpbmsuZ2V0KCksICJwdWxs
LXNhbXBsZSIsICZzYW1wbGUub3V0UHRyKCksIG51bGxwdHIpOwotICAgIEFTU0VSVChzYW1wbGUp
Owordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZCgpCit7
CisgICAgTWVkaWFUaW1lIHByZXZpb3VzRHVyYXRpb24gPSBkdXJhdGlvbk1lZGlhVGltZSgpOwor
ICAgIG1fY2FjaGVkRHVyYXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAKLSAgICBp
ZiAoc3RyZWFtU3RhcnRFdmVudCkgewotICAgICAgICBib29sIGZvdW5kID0gRkFMU0U7Ci0gICAg
ICAgIGNvbnN0IGdjaGFyKiBpZDsKLSAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFy
dChzdHJlYW1TdGFydEV2ZW50LmdldCgpLCAmaWQpOwotICAgICAgICBmb3IgKGF1dG8mIHRyYWNr
IDogbV90ZXh0VHJhY2tzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcCh0cmFj
ay0+c3RyZWFtSWQoKS51dGY4KCkuZGF0YSgpLCBpZCkpIHsKLSAgICAgICAgICAgICAgICB0cmFj
ay0+aGFuZGxlU2FtcGxlKHNhbXBsZSk7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGlmICghZm91bmQpCi0gICAgICAgICAgICBHU1RfV0FSTklORygiR290IHNhbXBsZSB3aXRoIHVu
a25vd24gc3RyZWFtIElEICVzLiIsIGlkKTsKLSAgICB9IGVsc2UKLSAgICAgICAgR1NUX1dBUk5J
TkcoIlVuYWJsZSB0byBoYW5kbGUgc2FtcGxlIHdpdGggbm8gc3RyZWFtIHN0YXJ0IGV2ZW50LiIp
OworICAgIC8vIEF2b2lkIGVtaXRpbmcgZHVyYXRpb25jaGFuZ2VkIGluIHRoZSBjYXNlIHdoZXJl
IHRoZSBwcmV2aW91cworICAgIC8vIGR1cmF0aW9uIHdhcyAwIGJlY2F1c2UgdGhhdCBjYXNlIGlz
IGFscmVhZHkgaGFuZGxlZCBieSB0aGUKKyAgICAvLyBIVE1MTWVkaWFFbGVtZW50LgorICAgIGlm
IChwcmV2aW91c0R1cmF0aW9uICYmIGR1cmF0aW9uTWVkaWFUaW1lKCkgIT0gcHJldmlvdXNEdXJh
dGlvbikKKyAgICAgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOwogfQotI2VuZGlmCiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRSYXRlKGZsb2F0IHJhdGUpCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlU2V0dXAoR3N0RWxlbWVudCog
c291cmNlRWxlbWVudCkKIHsKLSAgICAvLyBIaWdoZXIgcmF0ZSBjYXVzZXMgY3Jhc2guCi0gICAg
cmF0ZSA9IGNsYW1wVG8ocmF0ZSwgLTIwLjAsIDIwLjApOworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIlNvdXJjZSBlbGVtZW50IHNldC11cCBmb3IgJXMiLCBHU1RfRUxFTUVOVF9O
QU1FKHNvdXJjZUVsZW1lbnQpKTsKIAotICAgIC8vIEF2b2lkIHVzZWxlc3MgcGxheWJhY2sgcmF0
ZSB1cGRhdGUuCi0gICAgaWYgKG1fcGxheWJhY2tSYXRlID09IHJhdGUpIHsKLSAgICAgICAgLy8g
YW5kIG1ha2Ugc3VyZSB0aGF0IHVwcGVyIGxheWVycyB3ZXJlIG5vdGlmaWVkIGlmIHJhdGUgd2Fz
IHNldAorICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkgJiYgR1NUX09C
SkVDVF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkpKQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2Z1bmMoR1NUX0VMRU1FTlRfUEFSRU5UKG1fc291cmNlLmdldCgpKSwgcmVp
bnRlcnByZXRfY2FzdDxncG9pbnRlcj4odXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2sp
LCB0aGlzKTsKIAotICAgICAgICBpZiAoIW1fY2hhbmdpbmdSYXRlICYmIG1fcGxheWVyLT5yYXRl
KCkgIT0gbV9wbGF5YmFja1JhdGUpCi0gICAgICAgICAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX3NvdXJjZSA9IHNvdXJjZUVsZW1lbnQ7
CiAKLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpIHsKLSAgICAgICAgLy8gbm90aWZ5IHVwcGVyIGxh
eWVycyB0aGF0IHdlIGNhbm5vdCBoYW5kbGUgcGFzc2VkIHJhdGUuCi0gICAgICAgIG1fY2hhbmdp
bmdSYXRlID0gZmFsc2U7Ci0gICAgICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwotICAgICAg
ICByZXR1cm47CisgICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkgewor
ICAgICAgICB3ZWJLaXRXZWJTcmNTZXRNZWRpYVBsYXllcihXRUJLSVRfV0VCX1NSQ19DQVNUKG1f
c291cmNlLmdldCgpKSwgbV9wbGF5ZXIpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KEdTVF9F
TEVNRU5UX1BBUkVOVChtX3NvdXJjZS5nZXQoKSksICJlbGVtZW50LWFkZGVkIiwgR19DQUxMQkFD
Syh1cmlEZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayksIHRoaXMpOworI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCisgICAgfSBlbHNlIGlmIChXRUJLSVRfSVNfTUVESUFfU1RSRUFNX1NSQyhz
b3VyY2VFbGVtZW50KSkgeworICAgICAgICBhdXRvIHN0cmVhbSA9IG1fc3RyZWFtUHJpdmF0ZS5n
ZXQoKTsKKyAgICAgICAgQVNTRVJUKHN0cmVhbSk7CisgICAgICAgIHdlYmtpdE1lZGlhU3RyZWFt
U3JjU2V0U3RyZWFtKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKHNvdXJjZUVsZW1lbnQpLCBzdHJl
YW0pOworI2VuZGlmCiAgICAgfQorfQogCi0gICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgR3N0U3Rh
dGUgcGVuZGluZzsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRBdWRpb1N0
cmVhbVByb3BlcnRpZXNDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXll
ciwgR09iamVjdCogb2JqZWN0KQoreworICAgIHBsYXllci0+c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0
aWVzKG9iamVjdCk7Cit9CiAKLSAgICBtX3BsYXliYWNrUmF0ZSA9IHJhdGU7Ci0gICAgbV9jaGFu
Z2luZ1JhdGUgPSB0cnVlOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldEF1
ZGlvU3RyZWFtUHJvcGVydGllcyhHT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKGdfc3RyY21w
MChHX09CSkVDVF9UWVBFX05BTUUob2JqZWN0KSwgIkdzdFB1bHNlU2luayIpKQorICAgICAgICBy
ZXR1cm47CiAKLSAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0
YXRlLCAmcGVuZGluZywgMCk7CisgICAgY29uc3QgY2hhciogcm9sZSA9IG1fcGxheWVyLT5jbGll
bnQoKS5tZWRpYVBsYXllcklzVmlkZW8oKSA/ICJ2aWRlbyIgOiAibXVzaWMiOworICAgIEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXcoInN0cmVhbS1wcm9wZXJ0aWVz
IiwgIm1lZGlhLnJvbGUiLCBHX1RZUEVfU1RSSU5HLCByb2xlLCBudWxscHRyKTsKKyAgICBnX29i
amVjdF9zZXQob2JqZWN0LCAic3RyZWFtLXByb3BlcnRpZXMiLCBzdHJ1Y3R1cmUsIG51bGxwdHIp
OworICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZShzdHJ1Y3R1cmUpOworICAgIEdVbmlxdWVQdHI8Z2No
YXI+IGVsZW1lbnROYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKEdTVF9FTEVNRU5UKG9iamVjdCkp
KTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXQgbWVkaWEucm9sZSBhcyAl
cyBhdCAlcyIsIHJvbGUsIGVsZW1lbnROYW1lLmdldCgpKTsKK30KIAotICAgIGlmICghcmF0ZSkg
ewotICAgICAgICBtX2NoYW5naW5nUmF0ZSA9IGZhbHNlOwotICAgICAgICBtX3BsYXliYWNrUmF0
ZVBhdXNlID0gdHJ1ZTsKLSAgICAgICAgaWYgKHN0YXRlICE9IEdTVF9TVEFURV9QQVVTRUQgJiYg
cGVuZGluZyAhPSBHU1RfU1RBVEVfUEFVU0VEKQotICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVT
dGF0ZShHU1RfU1RBVEVfUEFVU0VEKTsKLSAgICAgICAgcmV0dXJuOwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyKiBwbGF5ZXIsIEdzdEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQpCit7CisgICAgcGxh
eWVyLT5zb3VyY2VTZXR1cChzb3VyY2VFbGVtZW50KTsKK30KKworYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCit7
CisgICAgQVNTRVJUKG1fcGlwZWxpbmUpOworCisgICAgR3N0U3RhdGUgY3VycmVudFN0YXRlOwor
ICAgIEdzdFN0YXRlIHBlbmRpbmc7CisKKyAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgJmN1cnJlbnRTdGF0ZSwgJnBlbmRpbmcsIDApOworICAgIGlmIChjdXJyZW50
U3RhdGUgPT0gbmV3U3RhdGUgfHwgcGVuZGluZyA9PSBuZXdTdGF0ZSkgeworICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJSZWplY3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgZnJv
bSAlcyB3aXRoICVzIHBlbmRpbmciLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0
ZSksCisgICAgICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShjdXJyZW50U3RhdGUp
LCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIGlmICgoc3RhdGUgIT0gR1NUX1NUQVRFX1BMQVlJTkcgJiYgc3Rh
dGUgIT0gR1NUX1NUQVRFX1BBVVNFRCkKLSAgICAgICAgfHwgKHBlbmRpbmcgPT0gR1NUX1NUQVRF
X1BBVVNFRCkpCi0gICAgICAgIHJldHVybjsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJDaGFuZ2luZyBzdGF0ZSBjaGFuZ2UgdG8gJXMgZnJvbSAlcyB3aXRoICVzIHBlbmRpbmci
LCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSksCisgICAgICAgIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9u
YW1lKHBlbmRpbmcpKTsKIAotICAgIHVwZGF0ZVBsYXliYWNrUmF0ZSgpOworI2lmIFVTRShHU1RS
RUFNRVJfR0wpCisgICAgaWYgKGN1cnJlbnRTdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFkgJiYgbmV3
U3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkKKyAgICAgICAgZW5zdXJlR0xWaWRlb1NpbmtDb250
ZXh0KCk7CisjZW5kaWYKKworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHNldFN0YXRlUmVzdWx0
ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIG5ld1N0YXRlKTsKKyAg
ICBHc3RTdGF0ZSBwYXVzZWRPclBsYXlpbmcgPSBuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlO
RyA/IEdTVF9TVEFURV9QQVVTRUQgOiBHU1RfU1RBVEVfUExBWUlORzsKKyAgICBpZiAoY3VycmVu
dFN0YXRlICE9IHBhdXNlZE9yUGxheWluZyAmJiBzZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVf
Q0hBTkdFX0ZBSUxVUkUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENyZWF0ZSBh
IHRpbWVyIHdoZW4gZW50ZXJpbmcgdGhlIFJFQURZIHN0YXRlIHNvIHRoYXQgd2UgY2FuIGZyZWUg
cmVzb3VyY2VzCisgICAgLy8gaWYgd2Ugc3RheSBmb3IgdG9vIGxvbmcgb24gUkVBRFkuCisgICAg
Ly8gQWxzbyBsZXRzIHJlbW92ZSB0aGUgdGltZXIgaWYgd2UgcmVxdWVzdCBhIHN0YXRlIGNoYW5n
ZSBmb3IgYW55IHN0YXRlIG90aGVyIHRoYW4gUkVBRFkuCisgICAgLy8gU2VlIGFsc28gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzM1NAorICAgIGlmIChuZXdTdGF0
ZSA9PSBHU1RfU1RBVEVfUkVBRFkgJiYgIW1fcmVhZHlUaW1lckhhbmRsZXIuaXNBY3RpdmUoKSkg
eworICAgICAgICAvLyBNYXggaW50ZXJ2YWwgaW4gc2Vjb25kcyB0byBzdGF5IGluIHRoZSBSRUFE
WSBzdGF0ZSBvbiBtYW51YWwKKyAgICAgICAgLy8gc3RhdGUgY2hhbmdlIHJlcXVlc3RzLgorICAg
ICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyByZWFkeVN0YXRlVGltZXJEZWxheSB7IDFfbWluIH07
CisgICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc3RhcnRPbmVTaG90KHJlYWR5U3RhdGVUaW1l
ckRlbGF5KTsKKyAgICB9IGVsc2UgaWYgKG5ld1N0YXRlICE9IEdTVF9TVEFURV9SRUFEWSkKKyAg
ICAgICAgbV9yZWFkeVRpbWVySGFuZGxlci5zdG9wKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotZG91YmxlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmF0ZSgpIGNvbnN0Cit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UGxheWJpblVSTChjb25zdCBVUkwmIHVy
bCkKIHsKLSAgICByZXR1cm4gbV9wbGF5YmFja1JhdGU7CisgICAgLy8gQ2xlYW4gb3V0IGV2ZXJ5
dGhpbmcgYWZ0ZXIgZmlsZTovLyB1cmwgcGF0aC4KKyAgICBTdHJpbmcgY2xlYW5VUkxTdHJpbmco
dXJsLnN0cmluZygpKTsKKyAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCisgICAgICAgIGNsZWFu
VVJMU3RyaW5nID0gY2xlYW5VUkxTdHJpbmcuc3Vic3RyaW5nKDAsIHVybC5wYXRoRW5kKCkpOwor
CisgICAgbV91cmwgPSBVUkwoVVJMKCksIGNsZWFuVVJMU3RyaW5nKTsKKyAgICBjb252ZXJ0VG9J
bnRlcm5hbFByb3RvY29sKG1fdXJsKTsKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
IkxvYWQgJXMiLCBtX3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBnX29iamVjdF9z
ZXQobV9waXBlbGluZS5nZXQoKSwgInVyaSIsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IG51bGxwdHIpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJl
c2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkKK3N0YXRpYyB2b2lkIHNldFN5bmNPbkNs
b2NrKEdzdEVsZW1lbnQgKmVsZW1lbnQsIGJvb2wgc3luYykKIHsKLSAgICBtX3ByZXNlcnZlc1Bp
dGNoID0gcHJlc2VydmVzUGl0Y2g7CisgICAgaWYgKCFHU1RfSVNfQklOKGVsZW1lbnQpKSB7Cisg
ICAgICAgIGdfb2JqZWN0X3NldChlbGVtZW50LCAic3luYyIsIHN5bmMsIE5VTEwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgR3N0SXRlcmF0b3IqIGl0ID0gZ3N0X2Jpbl9pdGVyYXRl
X3NpbmtzKEdTVF9CSU4oZWxlbWVudCkpOworICAgIHdoaWxlIChnc3RfaXRlcmF0b3JfZm9yZWFj
aChpdCwgKEdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uKShbXShjb25zdCBHVmFsdWUqIGl0ZW0s
IHZvaWQqIHN5bmNQdHIpIHsKKyAgICAgICAgYm9vbCogc3luYyA9IHN0YXRpY19jYXN0PGJvb2wq
PihzeW5jUHRyKTsKKyAgICAgICAgc2V0U3luY09uQ2xvY2soR1NUX0VMRU1FTlQoZ192YWx1ZV9n
ZXRfb2JqZWN0KGl0ZW0pKSwgKnN5bmMpOworICAgIH0pLCAmc3luYykgPT0gR1NUX0lURVJBVE9S
X1JFU1lOQykKKyAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdCk7CisgICAgZ3N0X2l0ZXJh
dG9yX2ZyZWUoaXQpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKCkgY29uc3QKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzeW5jT25DbG9jayhib29sIHN5bmMpCiB7Ci0gICAgYXV0
byB0aW1lUmFuZ2VzID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybVRpbWVSYW5nZXM+KCk7Ci0gICAgaWYg
KG1fZXJyb3JPY2N1cmVkIHx8IGlzTGl2ZVN0cmVhbSgpKQotICAgICAgICByZXR1cm4gdGltZVJh
bmdlczsKKyAgICBzZXRTeW5jT25DbG9jayh2aWRlb1NpbmsoKSwgc3luYyk7CisgICAgc2V0U3lu
Y09uQ2xvY2soYXVkaW9TaW5rKCksIHN5bmMpOworfQogCi0gICAgTWVkaWFUaW1lIG1lZGlhRHVy
YXRpb24gPSBkdXJhdGlvbk1lZGlhVGltZSgpOwotICAgIGlmICghbWVkaWFEdXJhdGlvbiB8fCBt
ZWRpYUR1cmF0aW9uLmlzUG9zaXRpdmVJbmZpbml0ZSgpKQotICAgICAgICByZXR1cm4gdGltZVJh
bmdlczsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZp
ZGVvKCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgIW1fc291cmNlKSkKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYo
Z3N0X3F1ZXJ5X25ld19idWZmZXJpbmcoR1NUX0ZPUk1BVF9QRVJDRU5UKSk7CisgICAgQVNTRVJU
KG1faXNMZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2UoKSk7CiAKLSAgICBpZiAoIWdzdF9l
bGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKSkKLSAgICAgICAgcmV0
dXJuIHRpbWVSYW5nZXM7CisgICAgZ2ludCBudW1UcmFja3MgPSAwOworICAgIGJvb2wgdXNlTWVk
aWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7CisgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IHVz
ZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdldCgpOworICAgIGdf
b2JqZWN0X2dldChlbGVtZW50LCAibi12aWRlbyIsICZudW1UcmFja3MsIG51bGxwdHIpOwogCi0g
ICAgZ3VpbnQgbnVtQnVmZmVyaW5nUmFuZ2VzID0gZ3N0X3F1ZXJ5X2dldF9uX2J1ZmZlcmluZ19y
YW5nZXMocXVlcnkuZ2V0KCkpOwotICAgIGZvciAoZ3VpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51
bUJ1ZmZlcmluZ1JhbmdlczsgaW5kZXgrKykgewotICAgICAgICBnaW50NjQgcmFuZ2VTdGFydCA9
IDAsIHJhbmdlU3RvcCA9IDA7Ci0gICAgICAgIGlmIChnc3RfcXVlcnlfcGFyc2VfbnRoX2J1ZmZl
cmluZ19yYW5nZShxdWVyeS5nZXQoKSwgaW5kZXgsICZyYW5nZVN0YXJ0LCAmcmFuZ2VTdG9wKSkg
ewotICAgICAgICAgICAgdWludDY0X3Qgc3RhcnRUaW1lID0gZ3N0X3V0aWxfdWludDY0X3NjYWxl
X2ludF9yb3VuZCh0b0dzdFVuc2lnbmVkNjRUaW1lKG1lZGlhRHVyYXRpb24pLCByYW5nZVN0YXJ0
LCBHU1RfRk9STUFUX1BFUkNFTlRfTUFYKTsKLSAgICAgICAgICAgIHVpbnQ2NF90IHN0b3BUaW1l
ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludF9yb3VuZCh0b0dzdFVuc2lnbmVkNjRUaW1lKG1l
ZGlhRHVyYXRpb24pLCByYW5nZVN0b3AsIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgpOwotICAgICAg
ICAgICAgdGltZVJhbmdlcy0+YWRkKE1lZGlhVGltZShzdGFydFRpbWUsIEdTVF9TRUNPTkQpLCBN
ZWRpYVRpbWUoc3RvcFRpbWUsIEdTVF9TRUNPTkQpKTsKLSAgICAgICAgfQorICAgIEdTVF9JTkZP
X09CSkVDVChwaXBlbGluZSgpLCAiTWVkaWEgaGFzICVkIHZpZGVvIHRyYWNrcyIsIG51bVRyYWNr
cyk7CisKKyAgICBib29sIG9sZEhhc1ZpZGVvID0gbV9oYXNWaWRlbzsKKyAgICBtX2hhc1ZpZGVv
ID0gbnVtVHJhY2tzID4gMDsKKyAgICBpZiAob2xkSGFzVmlkZW8gIT0gbV9oYXNWaWRlbykKKyAg
ICAgICAgbV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOworCisgICAgaWYgKG1faGFz
VmlkZW8pCisgICAgICAgIG1fcGxheWVyLT5zaXplQ2hhbmdlZCgpOworCisgICAgaWYgKHVzZU1l
ZGlhU291cmNlKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRyYWNr
cyBtYW5hZ2VkIGJ5IHNvdXJjZSBlbGVtZW50LiBCYWlsaW5nIG91dCBub3cuIik7CisgICAgICAg
IG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRmFsbGJhY2sgdG8gdGhlIG1vcmUgZ2Vu
ZXJhbCBtYXhUaW1lTG9hZGVkKCkgaWYgbm8gcmFuZ2UgaGFzCi0gICAgLy8gYmVlbiBmb3VuZC4K
LSAgICBpZiAoIXRpbWVSYW5nZXMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIE1lZGlhVGltZSBsb2Fk
ZWQgPSBtYXhUaW1lTG9hZGVkKCk7Ci0gICAgICAgIGlmIChsb2FkZWQuaXNWYWxpZCgpICYmIGxv
YWRlZCkKLSAgICAgICAgICAgIHRpbWVSYW5nZXMtPmFkZChNZWRpYVRpbWU6Onplcm9UaW1lKCks
IGxvYWRlZCk7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIFZlY3RvcjxTdHJpbmc+IHZh
bGlkVmlkZW9TdHJlYW1zOworICAgIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytp
KSB7CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7CisgICAgICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LXZpZGVvLXBhZCIsIGksICZwYWQub3V0UHRy
KCksIG51bGxwdHIpOworICAgICAgICBBU1NFUlQocGFkKTsKKworICAgICAgICBTdHJpbmcgc3Ry
ZWFtSWQgPSAiViIgKyBTdHJpbmc6Om51bWJlcihpKTsKKyAgICAgICAgdmFsaWRWaWRlb1N0cmVh
bXMuYXBwZW5kKHN0cmVhbUlkKTsKKyAgICAgICAgaWYgKGkgPCBzdGF0aWNfY2FzdDxnaW50Piht
X3ZpZGVvVHJhY2tzLnNpemUoKSkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KHN0cmVhbUlk
KTsKKyAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrKSB7CisgICAgICAgICAgICAgICAgZXhp
c3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7CisgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJh
Y2stPnBhZCgpID09IHBhZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHRyYWNrID0gVmlkZW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0cigqdGhpcyksIGksIHBhZCk7CisgICAgICAg
IEFTU0VSVChzdHJlYW1JZCA9PSB0cmFjay0+aWQoKSk7CisgICAgICAgIG1fdmlkZW9UcmFja3Mu
YWRkKHN0cmVhbUlkLCB0cmFjay5jb3B5UmVmKCkpOworICAgICAgICBtX3BsYXllci0+YWRkVmlk
ZW9UcmFjayh0cmFjay5nZXQoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRpbWVSYW5nZXM7Cisg
ICAgcHVyZ2VJbnZhbGlkVmlkZW9UcmFja3ModmFsaWRWaWRlb1N0cmVhbXMpOworI2VuZGlmCisK
KyAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVy
KTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2Uo
R3N0TWVzc2FnZSogbWVzc2FnZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciog
cGxheWVyKQogewotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnI7Ci0gICAgR1VuaXF1ZU91
dFB0cjxnY2hhcj4gZGVidWc7Ci0gICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcjsK
LSAgICBib29sIGlzc3VlRXJyb3IgPSB0cnVlOwotICAgIGJvb2wgYXR0ZW1wdE5leHRMb2NhdGlv
biA9IGZhbHNlOwotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3Nh
Z2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKLSAgICBHc3RTdGF0ZSByZXF1ZXN0ZWRTdGF0ZSwg
Y3VycmVudFN0YXRlOworICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWRO
b3RpZmljYXRpb246OlZpZGVvQ2Fwc0NoYW5nZWQsIFtwbGF5ZXJdIHsKKyAgICAgICAgcGxheWVy
LT5ub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpOworICAgIH0pOworfQogCi0gICAgbV9jYW5GYWxs
QmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uID0gZmFsc2U7Cit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMoKQoreworICAgIG1fdmlk
ZW9TaXplID0gSW50U2l6ZSgpOworICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVu
Z2luZVVwZGF0ZWQobV9wbGF5ZXIpOworfQogCi0gICAgaWYgKHN0cnVjdHVyZSkgewotICAgICAg
ICBjb25zdCBnY2hhciogbWVzc2FnZVR5cGVOYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShz
dHJ1Y3R1cmUpOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvQ2hhbmdl
ZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIHBs
YXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OkF1ZGlvQ2hh
bmdlZCwgW3BsYXllcl0geworICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mQXVkaW8oKTsK
KyAgICB9KTsKK30KIAotICAgICAgICAvLyBSZWRpcmVjdCBtZXNzYWdlcyBhcmUgc2VudCBmcm9t
IGVsZW1lbnRzLCBsaWtlIHF0ZGVtdXgsIHRvCi0gICAgICAgIC8vIG5vdGlmeSBvZiB0aGUgbmV3
IGxvY2F0aW9uKHMpIG9mIHRoZSBtZWRpYS4KLSAgICAgICAgaWYgKCFnX3N0cmNtcDAobWVzc2Fn
ZVR5cGVOYW1lLCAicmVkaXJlY3QiKSkgewotICAgICAgICAgICAgbWVkaWFMb2NhdGlvbkNoYW5n
ZWQobWVzc2FnZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Cit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZBdWRpbygpCit7Cisg
ICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8ICFtX3NvdXJjZSkpCisgICAgICAgIHJldHVy
bjsKIAotICAgIC8vIFdlIGlnbm9yZSBzdGF0ZSBjaGFuZ2VzIGZyb20gaW50ZXJuYWwgZWxlbWVu
dHMuIFRoZXkgYXJlIGZvcndhcmRlZCB0byBwbGF5YmluMiBhbnl3YXkuCi0gICAgYm9vbCBtZXNz
YWdlU291cmNlSXNQbGF5YmluID0gR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpID09IHJlaW50ZXJw
cmV0X2Nhc3Q8R3N0T2JqZWN0Kj4obV9waXBlbGluZS5nZXQoKSk7CisgICAgQVNTRVJUKG1faXNM
ZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2UoKSk7CiAKLSAgICBHU1RfTE9HX09CSkVDVChw
aXBlbGluZSgpLCAiTWVzc2FnZSAlcyByZWNlaXZlZCBmcm9tIGVsZW1lbnQgJXMiLCBHU1RfTUVT
U0FHRV9UWVBFX05BTUUobWVzc2FnZSksIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsK
LSAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpIHsKLSAgICBjYXNlIEdTVF9N
RVNTQUdFX0VSUk9SOgotICAgICAgICBpZiAobV9yZXNldFBpcGVsaW5lIHx8ICFtX21pc3NpbmdQ
bHVnaW5DYWxsYmFja3MuaXNFbXB0eSgpIHx8IG1fZXJyb3JPY2N1cmVkKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnIub3V0
UHRyKCksICZkZWJ1Zy5vdXRQdHIoKSk7Ci0gICAgICAgIEdTVF9FUlJPUigiRXJyb3IgJWQ6ICVz
ICh1cmw9JXMpIiwgZXJyLT5jb2RlLCBlcnItPm1lc3NhZ2UsIG1fdXJsLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKKyAgICBib29sIHVzZU1lZGlhU291
cmNlID0gaXNNZWRpYVNvdXJjZSgpOworICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRp
YVNvdXJjZSA/IG1fc291cmNlLmdldCgpIDogbV9waXBlbGluZS5nZXQoKTsKKyAgICBnX29iamVj
dF9nZXQoZWxlbWVudCwgIm4tYXVkaW8iLCAmbnVtVHJhY2tzLCBudWxscHRyKTsKIAotICAgICAg
ICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdl
dCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCAid2Via2l0LXZpZGVvLmVycm9yIik7Cisg
ICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJNZWRpYSBoYXMgJWQgYXVkaW8gdHJhY2tz
IiwgbnVtVHJhY2tzKTsKKyAgICBib29sIG9sZEhhc0F1ZGlvID0gbV9oYXNBdWRpbzsKKyAgICBt
X2hhc0F1ZGlvID0gbnVtVHJhY2tzID4gMDsKKyAgICBpZiAob2xkSGFzQXVkaW8gIT0gbV9oYXNB
dWRpbykKKyAgICAgICAgbV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOwogCi0gICAg
ICAgIGVycm9yID0gTWVkaWFQbGF5ZXI6OkVtcHR5OwotICAgICAgICBpZiAoZ19lcnJvcl9tYXRj
aGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9DT0RFQ19O
T1RfRk9VTkQpCi0gICAgICAgICAgICB8fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1Rf
U1RSRUFNX0VSUk9SLCBHU1RfU1RSRUFNX0VSUk9SX1dST05HX1RZUEUpCi0gICAgICAgICAgICB8
fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfU1RSRUFNX0VSUk9SLCBHU1RfU1RSRUFN
X0VSUk9SX0ZBSUxFRCkKLSAgICAgICAgICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCks
IEdTVF9DT1JFX0VSUk9SLCBHU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTikKLSAgICAgICAg
ICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9SRVNPVVJDRV9FUlJPUiwgR1NU
X1JFU09VUkNFX0VSUk9SX05PVF9GT1VORCkpCi0gICAgICAgICAgICBlcnJvciA9IE1lZGlhUGxh
eWVyOjpGb3JtYXRFcnJvcjsKLSAgICAgICAgZWxzZSBpZiAoZ19lcnJvcl9tYXRjaGVzKGVyci5n
ZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9UWVBFX05PVF9GT1VORCkp
IHsKLSAgICAgICAgICAgIC8vIExldCB0aGUgbWVkaWFQbGF5ZXJDbGllbnQgaGFuZGxlIHRoZSBz
dHJlYW0gZXJyb3IsIGluCi0gICAgICAgICAgICAvLyB0aGlzIGNhc2UgdGhlIEhUTUxNZWRpYUVs
ZW1lbnQgd2lsbCBlbWl0IGEgc3RhbGxlZAorICAgIGlmICh1c2VNZWRpYVNvdXJjZSkgeworICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJUcmFja3MgbWFuYWdlZCBieSBzb3Vy
Y2UgZWxlbWVudC4gQmFpbGluZyBvdXQgbm93LiIpOworICAgICAgICBtX3BsYXllci0+Y2xpZW50
KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxp
ZEF1ZGlvU3RyZWFtczsKKyAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkg
eworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUobV9waXBlbGluZS5nZXQoKSwgImdldC1hdWRpby1wYWQiLCBpLCAmcGFkLm91dFB0cigp
LCBudWxscHRyKTsKKyAgICAgICAgQVNTRVJUKHBhZCk7CisKKyAgICAgICAgU3RyaW5nIHN0cmVh
bUlkID0gIkEiICsgU3RyaW5nOjpudW1iZXIoaSk7CisgICAgICAgIHZhbGlkQXVkaW9TdHJlYW1z
LmFwcGVuZChzdHJlYW1JZCk7CisgICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV9h
dWRpb1RyYWNrcy5zaXplKCkpKSB7CisgICAgICAgICAgICBSZWZQdHI8QXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX2F1ZGlvVHJhY2tzLmdldChzdHJlYW1JZCk7
CisgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgeworICAgICAgICAgICAgICAgIGV4aXN0
aW5nVHJhY2stPnNldEluZGV4KGkpOworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNr
LT5wYWQoKSA9PSBwYWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXV0byB0cmFjayA9IEF1ZGlvVHJhY2tQcml2YXRl
R1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCBpLCBwYWQpOworICAgICAgICBB
U1NFUlQoc3RyZWFtSWQgPT0gdHJhY2stPmlkKCkpOworICAgICAgICBtX2F1ZGlvVHJhY2tzLmFk
ZChzdHJlYW1JZCwgdHJhY2spOworICAgICAgICBtX3BsYXllci0+YWRkQXVkaW9UcmFjaygqdHJh
Y2spOworICAgIH0KKworICAgIHB1cmdlSW52YWxpZEF1ZGlvVHJhY2tzKHZhbGlkQXVkaW9TdHJl
YW1zKTsKKyNlbmRpZgorCisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5l
VXBkYXRlZChtX3BsYXllcik7Cit9CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGV4dENoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5v
dGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpUZXh0Q2hhbmdlZCwgW3BsYXllcl0geworICAg
ICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVGV4dCgpOworICAgIH0pOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KCkKK3sKKyAgICBp
ZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgIW1fc291cmNlKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKG1faXNMZWdhY3lQbGF5YmluIHx8IGlzTWVkaWFTb3VyY2UoKSk7CisKKyAg
ICBnaW50IG51bVRyYWNrcyA9IDA7CisgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFT
b3VyY2UoKTsKKyAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3Nv
dXJjZS5nZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7CisgICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQs
ICJuLXRleHQiLCAmbnVtVHJhY2tzLCBudWxscHRyKTsKKworICAgIEdTVF9JTkZPX09CSkVDVChw
aXBlbGluZSgpLCAiTWVkaWEgaGFzICVkIHRleHQgdHJhY2tzIiwgbnVtVHJhY2tzKTsKKworICAg
IGlmICh1c2VNZWRpYVNvdXJjZSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJUcmFja3MgbWFuYWdlZCBieSBzb3VyY2UgZWxlbWVudC4gQmFpbGluZyBvdXQgbm93LiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPFN0cmluZz4gdmFsaWRUZXh0
U3RyZWFtczsKKyAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgeworICAg
ICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9waXBlbGluZS5nZXQoKSwgImdldC10ZXh0LXBhZCIsIGksICZwYWQub3V0UHRyKCksIG51bGxw
dHIpOworICAgICAgICBBU1NFUlQocGFkKTsKKworICAgICAgICAvLyBXZSBjYW4ndCBhc3N1bWUg
dGhlIHBhZCBoYXMgYSBzdGlja3kgZXZlbnQgaGVyZSBsaWtlIGltcGxlbWVudGVkIGluCisgICAg
ICAgIC8vIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIgYmVjYXVzZSBpdCBtaWdodCBi
ZSBlbWl0dGVkIGFmdGVyIHRoZQorICAgICAgICAvLyB0cmFjayB3YXMgY3JlYXRlZC4gU28gZmFs
bGJhY2sgdG8gYSBkdW1teSBzdHJlYW0gSUQgbGlrZSBpbiB0aGUgQXVkaW8KKyAgICAgICAgLy8g
YW5kIFZpZGVvIHRyYWNrcy4KKyAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIlQiICsgU3RyaW5n
OjpudW1iZXIoaSk7CisKKyAgICAgICAgdmFsaWRUZXh0U3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQp
OworICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fdGV4dFRyYWNrcy5zaXplKCkp
KSB7CisgICAgICAgICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4g
ZXhpc3RpbmdUcmFjayA9IG1fdGV4dFRyYWNrcy5nZXQoc3RyZWFtSWQpOworICAgICAgICAgICAg
aWYgKGV4aXN0aW5nVHJhY2spIHsKKyAgICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJ
bmRleChpKTsKKyAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFk
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8gdHJhY2sgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpjcmVhdGUoaSwgcGFkKTsKKyAgICAgICAgbV90ZXh0VHJhY2tzLmFkZChzdHJlYW1JZCwgdHJh
Y2suY29weVJlZigpKTsKKyAgICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjayh0cmFjay5nZXQo
KSk7CisgICAgfQorCisgICAgcHVyZ2VJbnZhbGlkVGV4dFRyYWNrcyh2YWxpZFRleHRTdHJlYW1z
KTsKK30KKworR3N0Rmxvd1JldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1Rl
eHRTYW1wbGVDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sK
KyAgICBwbGF5ZXItPm5ld1RleHRTYW1wbGUoKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0U2FtcGxlKCkKK3sK
KyAgICBpZiAoIW1fdGV4dEFwcFNpbmspCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8
R3N0RXZlbnQ+IHN0cmVhbVN0YXJ0RXZlbnQgPSBhZG9wdEdSZWYoCisgICAgICAgIGdzdF9wYWRf
Z2V0X3N0aWNreV9ldmVudChtX3RleHRBcHBTaW5rUGFkLmdldCgpLCBHU1RfRVZFTlRfU1RSRUFN
X1NUQVJULCAwKSk7CisKKyAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlOworICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZShtX3RleHRBcHBTaW5rLmdldCgpLCAicHVsbC1zYW1wbGUiLCAmc2Ft
cGxlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBBU1NFUlQoc2FtcGxlKTsKKworICAgIGlmIChz
dHJlYW1TdGFydEV2ZW50KSB7CisgICAgICAgIGJvb2wgZm91bmQgPSBGQUxTRTsKKyAgICAgICAg
Y29uc3QgZ2NoYXIqIGlkOworICAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc3RyZWFtX3N0YXJ0KHN0
cmVhbVN0YXJ0RXZlbnQuZ2V0KCksICZpZCk7CisgICAgICAgIGZvciAoYXV0byYgdHJhY2sgOiBt
X3RleHRUcmFja3MudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHRyYWNrLT5z
dHJlYW1JZCgpLnV0ZjgoKS5kYXRhKCksIGlkKSkgeworICAgICAgICAgICAgICAgIHRyYWNrLT5o
YW5kbGVTYW1wbGUoc2FtcGxlKTsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFmb3VuZCkKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJHb3Qgc2FtcGxlIHdpdGggdW5rbm93
biBzdHJlYW0gSUQgJXMuIiwgaWQpOworICAgIH0gZWxzZQorICAgICAgICBHU1RfV0FSTklORygi
VW5hYmxlIHRvIGhhbmRsZSBzYW1wbGUgd2l0aCBubyBzdHJlYW0gc3RhcnQgZXZlbnQuIik7Cit9
CisjZW5kaWYKKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZpbGxUaW1lckZp
cmVkKCkKK3sKKyAgICBpZiAobV9lcnJvck9jY3VyZWQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gQW4gZXJyb3Igb2NjdXJyZWQsIGRpc2FibGlu
ZyB0aGUgZmlsbCB0aW1lciIpOworICAgICAgICBtX2ZpbGxUaW1lci5zdG9wKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1Jl
Zihnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhHU1RfRk9STUFUX1BFUkNFTlQpKTsKKyAgICBkb3Vi
bGUgZmlsbFN0YXR1cyA9IDEwMC4wOworICAgIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZSA9IEdTVF9C
VUZGRVJJTkdfRE9XTkxPQUQ7CisKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV9zb3VyY2Uu
Z2V0KCksIHF1ZXJ5LmdldCgpKSkgeworICAgICAgICBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5n
X3N0YXRzKHF1ZXJ5LmdldCgpLCAmbW9kZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisK
KyAgICAgICAgaW50IHBlcmNlbnRhZ2U7CisgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJp
bmdfcGVyY2VudChxdWVyeS5nZXQoKSwgbnVsbHB0ciwgJnBlcmNlbnRhZ2UpOworICAgICAgICBm
aWxsU3RhdHVzID0gcGVyY2VudGFnZTsKKyAgICB9IGVsc2UgaWYgKG1faHR0cFJlc3BvbnNlVG90
YWxTaXplKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJp
bmddIFF1ZXJ5IGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIG5ldHdvcmsgcmVhZCBwb3NpdGlvbiBl
c3RpbWF0aW9uIik7CisgICAgICAgIGZpbGxTdGF0dXMgPSAxMDAuMCAqIChzdGF0aWNfY2FzdDxk
b3VibGU+KG1fbmV0d29ya1JlYWRQb3NpdGlvbikgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG1faHR0
cFJlc3BvbnNlVG90YWxTaXplKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gVW5hYmxlIHRvIGRldGVybWluZSBvbi1kaXNr
IGJ1ZmZlcmluZyBzdGF0dXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVwZGF0
ZUJ1ZmZlcmluZ1N0YXR1cyhtb2RlLCBmaWxsU3RhdHVzKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmxvYWRTdGF0ZUNoYW5nZWQoKQoreworICAgIHVwZGF0ZVN0YXRl
cygpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGltZUNoYW5nZWQo
KQoreworICAgIHVwZGF0ZVN0YXRlcygpOworICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZChNZWRp
YVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtFcnJvciwgTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgcmVhZHlTdGF0ZSwgYm9vbCBmb3JjZU5vdGlmaWNhdGlvbnMpCit7CisgICAgR1NUX1dBUk5J
TkcoIkxvYWRpbmcgZmFpbGVkLCBlcnJvcjogJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmlu
ZyhuZXR3b3JrRXJyb3IpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgbV9lcnJvck9jY3VyZWQgPSB0
cnVlOworICAgIGlmIChmb3JjZU5vdGlmaWNhdGlvbnMgfHwgbV9uZXR3b3JrU3RhdGUgIT0gbmV0
d29ya0Vycm9yKSB7CisgICAgICAgIG1fbmV0d29ya1N0YXRlID0gbmV0d29ya0Vycm9yOworICAg
ICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIH0KKyAgICBpZiAoZm9y
Y2VOb3RpZmljYXRpb25zIHx8IG1fcmVhZHlTdGF0ZSAhPSByZWFkeVN0YXRlKSB7CisgICAgICAg
IG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRl
Q2hhbmdlZCgpOworICAgIH0KKworICAgIC8vIExvYWRpbmcgZmFpbGVkLCByZW1vdmUgcmVhZHkg
dGltZXIuCisgICAgbV9yZWFkeVRpbWVySGFuZGxlci5zdG9wKCk7Cit9CisKK0dzdEVsZW1lbnQq
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlQXVkaW9TaW5rKCkKK3sKKyAgICBt
X2F1dG9BdWRpb1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1dG9hdWRpb3Npbmsi
LCBudWxscHRyKTsKKyAgICBpZiAoIW1fYXV0b0F1ZGlvU2luaykgeworICAgICAgICBHU1RfV0FS
TklORygiR1N0cmVhbWVyJ3MgYXV0b2F1ZGlvc2luayBub3QgZm91bmQuIFBsZWFzZSBjaGVjayB5
b3VyIGdzdC1wbHVnaW5zLWdvb2QgaW5zdGFsbGF0aW9uIik7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2F1dG9BdWRpb1Np
bmsuZ2V0KCksICJjaGlsZC1hZGRlZCIsIEdfQ0FMTEJBQ0soc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0
aWVzQ2FsbGJhY2spLCB0aGlzKTsKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgR3N0RWxl
bWVudCogYXVkaW9TaW5rQmluID0gZ3N0X2Jpbl9uZXcoImF1ZGlvLXNpbmsiKTsKKyAgICBlbnN1
cmVBdWRpb1NvdXJjZVByb3ZpZGVyKCk7CisgICAgbV9hdWRpb1NvdXJjZVByb3ZpZGVyLT5jb25m
aWd1cmVBdWRpb0JpbihhdWRpb1NpbmtCaW4sIG51bGxwdHIpOworICAgIHJldHVybiBhdWRpb1Np
bmtCaW47CisjZWxzZQorICAgIHJldHVybiBtX2F1dG9BdWRpb1NpbmsuZ2V0KCk7CisjZW5kaWYK
K30KKworR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb1Npbmso
KSBjb25zdAoreworICAgIEdzdEVsZW1lbnQqIHNpbms7CisgICAgZ19vYmplY3RfZ2V0KG1fcGlw
ZWxpbmUuZ2V0KCksICJhdWRpby1zaW5rIiwgJnNpbmssIG51bGxwdHIpOworICAgIHJldHVybiBz
aW5rOworfQorCitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5YmFj
a1Bvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJp
c0VuZFJlYWNoZWQ6ICVzLCBzZWVraW5nOiAlcywgc2Vla1RpbWU6ICVzIiwgYm9vbEZvclByaW50
aW5nKG1faXNFbmRSZWFjaGVkKSwgYm9vbEZvclByaW50aW5nKG1fc2Vla2luZyksIG1fc2Vla1Rp
bWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9pc0VuZFJlYWNoZWQgJiYg
bV9zZWVraW5nKQorICAgICAgICByZXR1cm4gbV9zZWVrVGltZTsKKworICAgIC8vIFRoaXMgY29u
c3RhbnQgc2hvdWxkIHJlbWFpbiBsb3dlciB0aGFuIEhUTUxNZWRpYUVsZW1lbnQncyBtYXhUaW1l
dXBkYXRlRXZlbnRGcmVxdWVuY3kuCisgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgcG9zaXRpb25D
YWNoZVRocmVzaG9sZCA9IDIwMF9tczsKKyAgICBTZWNvbmRzIG5vdyA9IFdURjo6V2FsbFRpbWU6
Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgaWYgKG1fbGFzdFF1ZXJ5VGltZSAmJiAo
bm93IC0gbV9sYXN0UXVlcnlUaW1lLnZhbHVlKCkpIDwgcG9zaXRpb25DYWNoZVRocmVzaG9sZCAm
JiBtX2NhY2hlZFBvc2l0aW9uLmlzVmFsaWQoKSkgeworICAgICAgICBHU1RfVFJBQ0VfT0JKRUNU
KHBpcGVsaW5lKCksICJSZXR1cm5pbmcgY2FjaGVkIHBvc2l0aW9uOiAlcyIsIG1fY2FjaGVkUG9z
aXRpb24udG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVk
UG9zaXRpb247CisgICAgfQorCisgICAgbV9sYXN0UXVlcnlUaW1lID0gbm93OworCisgICAgLy8g
UG9zaXRpb24gaXMgb25seSBhdmFpbGFibGUgaWYgbm8gYXN5bmMgc3RhdGUgY2hhbmdlIGlzIGdv
aW5nIG9uIGFuZCB0aGUgc3RhdGUgaXMgZWl0aGVyIHBhdXNlZCBvciBwbGF5aW5nLgorICAgIGdp
bnQ2NCBwb3NpdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgR3N0UXVlcnkqIHF1ZXJ5
ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX1RJTUUpOworICAgIGlmIChnc3Rf
ZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeSkpCisgICAgICAgIGdzdF9xdWVy
eV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKKyAgICBnc3RfcXVlcnlfdW5y
ZWYocXVlcnkpOworCisgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiUG9zaXRpb24g
JSIgR1NUX1RJTUVfRk9STUFUICIsIGNhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRp
b246ICVzIiwgR1NUX1RJTUVfQVJHUyhwb3NpdGlvbiksIGJvb2xGb3JQcmludGluZyhtX2NhbkZh
bGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24pKTsKKworICAgIE1lZGlhVGltZSBwbGF5
YmFja1Bvc2l0aW9uID0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOworICAgIEdzdENsb2NrVGltZSBn
c3RyZWFtZXJQb3NpdGlvbiA9IHN0YXRpY19jYXN0PEdzdENsb2NrVGltZT4ocG9zaXRpb24pOwor
ICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRChnc3RyZWFtZXJQb3NpdGlvbikpCisgICAg
ICAgIHBsYXliYWNrUG9zaXRpb24gPSBNZWRpYVRpbWUoZ3N0cmVhbWVyUG9zaXRpb24sIEdTVF9T
RUNPTkQpOworICAgIGVsc2UgaWYgKG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3Np
dGlvbikKKyAgICAgICAgcGxheWJhY2tQb3NpdGlvbiA9IG1fc2Vla1RpbWU7CisKKyAgICBtX2Nh
Y2hlZFBvc2l0aW9uID0gcGxheWJhY2tQb3NpdGlvbjsKKyAgICByZXR1cm4gcGxheWJhY2tQb3Np
dGlvbjsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmVuYWJsZVRyYWNr
KFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSB0cmFja1R5cGUsIHVuc2lnbmVk
IGluZGV4KQoreworICAgIC8vIEZJWE1FOiBSZW1vdmUgaXNNZWRpYVNvdXJjZSgpIHRlc3QgYmVs
b3cgd2hlbiBmaXhpbmcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
MjUzMS4KKyAgICBpZiAoaXNNZWRpYVNvdXJjZSgpKSB7CisgICAgICAgIEdTVF9GSVhNRV9PQkpF
Q1QobV9waXBlbGluZS5nZXQoKSwgIkF1ZGlvL1ZpZGVvL1RleHQgdHJhY2sgc3dpdGNoaW5nIGlz
IG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IHRoZSBNU0UgYmFja2VuZC4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZTsKKyAgICBjb25zdCBjaGFy
KiB0cmFja1R5cGVBc1N0cmluZzsKKyAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RlZFN0cmVhbXM7
CisgICAgU3RyaW5nIHNlbGVjdGVkU3RyZWFtSWQ7CisKKyAgICBHc3RTdHJlYW0qIHN0cmVhbSA9
IG51bGxwdHI7CisKKyAgICBpZiAoIW1faXNMZWdhY3lQbGF5YmluKSB7CisgICAgICAgIHN0cmVh
bSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtKG1fc3RyZWFtQ29sbGVjdGlvbi5n
ZXQoKSwgaW5kZXgpOworICAgICAgICBpZiAoIXN0cmVhbSkgeworICAgICAgICAgICAgR1NUX1dB
Uk5JTkdfT0JKRUNUKHBpcGVsaW5lKCksICJObyBzdHJlYW0gdG8gc2VsZWN0IGF0IGluZGV4ICV1
IiwgaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNlbGVj
dGVkU3RyZWFtSWQgPSBTdHJpbmc6OmZyb21VVEY4KGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChz
dHJlYW0pKTsKKyAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChzZWxlY3RlZFN0cmVhbUlk
KTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRyYWNrVHlwZSkgeworICAgIGNhc2UgVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpBdWRpbzoKKyAgICAgICAgcHJvcGVydHlOYW1l
ID0gImN1cnJlbnQtYXVkaW8iOworICAgICAgICB0cmFja1R5cGVBc1N0cmluZyA9ICJhdWRpbyI7
CisgICAgICAgIGlmICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0ZWRTdHJl
YW1JZCA9PSBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKSB7CisgICAgICAgICAgICBHU1RfSU5GT19P
QkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMgYWxyZWFkeSBzZWxlY3RlZCwgbm90IGRv
aW5nIGFueXRoaW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5nLCBzZWxlY3RlZFN0cmVhbUlkLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KCFtX2N1cnJlbnRUZXh0U3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2VsZWN0ZWRT
dHJlYW1zLmFwcGVuZChtX2N1cnJlbnRUZXh0U3RyZWFtSWQpOworICAgICAgICBpZiAoIW1fY3Vy
cmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1z
LmFwcGVuZChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlZpZGVvOgorICAgICAgICBw
cm9wZXJ0eU5hbWUgPSAiY3VycmVudC12aWRlbyI7CisgICAgICAgIHRyYWNrVHlwZUFzU3RyaW5n
ID0gInZpZGVvIjsKKyAgICAgICAgaWYgKCFzZWxlY3RlZFN0cmVhbUlkLmlzRW1wdHkoKSAmJiBz
ZWxlY3RlZFN0cmVhbUlkID09IG1fY3VycmVudFZpZGVvU3RyZWFtSWQpIHsKKyAgICAgICAgICAg
IEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5IHNlbGVj
dGVkLCBub3QgZG9pbmcgYW55dGhpbmcuIiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVjdGVkU3Ry
ZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIW1fY3VycmVudEF1ZGlvU3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKTsKKyAgICAg
ICAgaWYgKCFtX2N1cnJlbnRUZXh0U3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2Vs
ZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRUZXh0U3RyZWFtSWQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VGV4dDoK
KyAgICAgICAgcHJvcGVydHlOYW1lID0gImN1cnJlbnQtdGV4dCI7CisgICAgICAgIHRyYWNrVHlw
ZUFzU3RyaW5nID0gInRleHQiOworICAgICAgICBpZiAoIXNlbGVjdGVkU3RyZWFtSWQuaXNFbXB0
eSgpICYmIHNlbGVjdGVkU3RyZWFtSWQgPT0gbV9jdXJyZW50VGV4dFN0cmVhbUlkKSB7CisgICAg
ICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMgYWxyZWFk
eSBzZWxlY3RlZCwgbm90IGRvaW5nIGFueXRoaW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5nLCBzZWxl
Y3RlZFN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRBdWRpb1N0cmVhbUlkLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50QXVkaW9TdHJlYW1JZCk7
CisgICAgICAgIGlmICghbV9jdXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlw
ZTo6VW5rbm93bjoKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkVuYWJsaW5nICVzIHRy
YWNrIHdpdGggaW5kZXg6ICV1IiwgdHJhY2tUeXBlQXNTdHJpbmcsIGluZGV4KTsKKyAgICBpZiAo
bV9pc0xlZ2FjeVBsYXliaW4pCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgp
LCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBudWxscHRyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgR0xp
c3QqIHNlbGVjdGVkU3RyZWFtc0xpc3QgPSBudWxscHRyOworCisgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgc3RyZWFtSWQgOiBzZWxlY3RlZFN0cmVhbXMpCisgICAgICAgICAgICBzZWxlY3RlZFN0
cmVhbXNMaXN0ID0gZ19saXN0X2FwcGVuZChzZWxlY3RlZFN0cmVhbXNMaXN0LCBnX3N0cmR1cChz
dHJlYW1JZC51dGY4KCkuZGF0YSgpKSk7CisKKyAgICAgICAgLy8gVE9ETzogTVNFIEdzdFN0cmVh
bSBBUEkgc3VwcG9ydDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4
MjUzMQorICAgICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KG1fcGlwZWxpbmUuZ2V0KCksIGdz
dF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXMoc2VsZWN0ZWRTdHJlYW1zTGlzdCkpOworICAgICAg
ICBnX2xpc3RfZnJlZV9mdWxsKHNlbGVjdGVkU3RyZWFtc0xpc3QsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0Rlc3Ryb3lOb3RpZnk+KGdfZnJlZSkpOworICAgIH0KK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRyYWNrcygpCit7CisgICAgQVNTRVJUKCFtX2lzTGVnYWN5
UGxheWJpbik7CisKKyAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOwor
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZShtX3N0
cmVhbUNvbGxlY3Rpb24uZ2V0KCkpOworCisgICAgYm9vbCBvbGRIYXNBdWRpbyA9IG1faGFzQXVk
aW87CisgICAgYm9vbCBvbGRIYXNWaWRlbyA9IG1faGFzVmlkZW87CisgICAgLy8gTmV3IHN0cmVh
bSBjb2xsZWN0aW9ucyBvdmVycmlkZSBwcmV2aW91cyBvbmVzLgorICAgIGNsZWFyVHJhY2tzKCk7
CisgICAgdW5zaWduZWQgdGV4dFRyYWNrSW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFt
ID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0obV9zdHJlYW1Db2xsZWN0aW9uLmdl
dCgpLCBpKTsKKyAgICAgICAgU3RyaW5nIHN0cmVhbUlkKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9p
ZChzdHJlYW0uZ2V0KCkpKTsKKyAgICAgICAgR3N0U3RyZWFtVHlwZSB0eXBlID0gZ3N0X3N0cmVh
bV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtLmdldCgpKTsKKworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJJbnNwZWN0aW5nICVzIHRyYWNrIHdpdGggSUQgJXMiLCBnc3Rfc3Ry
ZWFtX3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJTykKKyAgICAgICAgICAgIENSRUFURV9U
UkFDSyhhdWRpbywgQXVkaW8pOworICAgICAgICBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9U
WVBFX1ZJREVPKQorICAgICAgICAgICAgQ1JFQVRFX1RSQUNLKHZpZGVvLCBWaWRlbyk7CisgICAg
ICAgIGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVEVYVCAmJiAhdXNlTWVkaWFTb3Vy
Y2UpIHsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgICAgICAgICBhdXRvIHRyYWNrID0g
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKHRleHRUcmFja0luZGV4Kyss
IHN0cmVhbSk7CisgICAgICAgICAgICBtX3RleHRUcmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjay5j
b3B5UmVmKCkpOworICAgICAgICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjayh0cmFjay5nZXQo
KSk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBHU1RfV0FSTklORygiVW5r
bm93biB0cmFjayB0eXBlIGZvdW5kIGZvciBzdHJlYW0gJXMiLCBzdHJlYW1JZC51dGY4KCkuZGF0
YSgpKTsKKyAgICB9CisKKyAgICBpZiAoKG9sZEhhc1ZpZGVvICE9IG1faGFzVmlkZW8pIHx8IChv
bGRIYXNBdWRpbyAhPSBtX2hhc0F1ZGlvKSkKKyAgICAgICAgbV9wbGF5ZXItPmNoYXJhY3Rlcmlz
dGljQ2hhbmdlZCgpOworCisgICAgaWYgKG1faGFzVmlkZW8pCisgICAgICAgIG1fcGxheWVyLT5z
aXplQ2hhbmdlZCgpOworCisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5l
VXBkYXRlZChtX3BsYXllcik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpjbGVhclRyYWNrcygpCit7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIENMRUFSX1RS
QUNLUyhtX2F1ZGlvVHJhY2tzLCBtX3BsYXllci0+cmVtb3ZlQXVkaW9UcmFjayk7CisgICAgQ0xF
QVJfVFJBQ0tTKG1fdmlkZW9UcmFja3MsIG1fcGxheWVyLT5yZW1vdmVWaWRlb1RyYWNrKTsKKyAg
ICBDTEVBUl9UUkFDS1MobV90ZXh0VHJhY2tzLCBtX3BsYXllci0+cmVtb3ZlVGV4dFRyYWNrKTsK
KyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqIHBsYXllcikKK3sKKyAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWluVGhy
ZWFkTm90aWZpY2F0aW9uOjpWaWRlb0NoYW5nZWQsIFtwbGF5ZXJdIHsKKyAgICAgICAgcGxheWVy
LT5ub3RpZnlQbGF5ZXJPZlZpZGVvKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRQaXBlbGluZShHc3RFbGVtZW50KiBwaXBlbGluZSkKK3sKKyAg
ICBtX3BpcGVsaW5lID0gcGlwZWxpbmU7CisKKyAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRv
cHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgp
KSkpOworICAgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcihidXMuZ2V0KCksIFtdKEdzdEJ1cyos
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8m
IHBsYXllciA9ICpzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqPih1c2Vy
RGF0YSk7CisKKyAgICAgICAgaWYgKHBsYXllci5oYW5kbGVTeW5jTWVzc2FnZShtZXNzYWdlKSkg
eworICAgICAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgICAgICAgICBy
ZXR1cm4gR1NUX0JVU19EUk9QOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEdTVF9CVVNf
UEFTUzsKKyAgICB9LCB0aGlzLCBudWxscHRyKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7Cisg
ICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX0NP
TExFQ1RJT04gJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7CisgICAgICAgIEdSZWZQdHI8R3N0U3Ry
ZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKKyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3Ry
ZWFtX2NvbGxlY3Rpb24obWVzc2FnZSwgJmNvbGxlY3Rpb24ub3V0UHRyKCkpOworCisgICAgICAg
IGlmIChjb2xsZWN0aW9uKSB7CisgICAgICAgICAgICBtX3N0cmVhbUNvbGxlY3Rpb24uc3dhcChj
b2xsZWN0aW9uKTsKKyAgICAgICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90
aWZpY2F0aW9uOjpTdHJlYW1Db2xsZWN0aW9uQ2hhbmdlZCwgW3RoaXNdIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLT51cGRhdGVUcmFja3MoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgIT0gR1NUX01FU1NBR0Vf
TkVFRF9DT05URVhUKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBnY2hhciog
Y29udGV4dFR5cGU7CisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfY29udGV4dF90eXBlKG1lc3NhZ2Us
ICZjb250ZXh0VHlwZSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiSGFuZGxp
bmcgJXMgbmVlZC1jb250ZXh0IG1lc3NhZ2UgZm9yICVzIiwgY29udGV4dFR5cGUsIEdTVF9NRVNT
QUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKKworICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBl
LCBXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05BTUUpKSB7CisgICAgICAgIEdS
ZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoV0VC
S0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQRV9OQU1FLCBGQUxTRSkpOworICAgICAgICBH
c3RTdHJ1Y3R1cmUqIGNvbnRleHRTdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1
Y3R1cmUoY29udGV4dC5nZXQoKSk7CisKKyAgICAgICAgQVNTRVJUKG1fcGxheWVyKTsKKyAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgInBsYXllciIsIEdfVFlQRV9Q
T0lOVEVSLCBtX3BsYXllciwgbnVsbHB0cik7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250
ZXh0KEdTVF9FTEVNRU5UKEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSksIGNvbnRleHQuZ2V0KCkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQor
ICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gZWxlbWVudENvbnRleHQgPSBhZG9wdEdSZWYocmVxdWVz
dEdMQ29udGV4dChjb250ZXh0VHlwZSkpOworICAgIGlmIChlbGVtZW50Q29udGV4dCkgeworICAg
ICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtZXNzYWdlLT5zcmMpLCBl
bGVtZW50Q29udGV4dC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAg
ICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1z
eXN0ZW0taWQiKSkgeworICAgICAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKKyAgICAgICAgICAg
IEdTVF9FUlJPUigiY2FuJ3QgaGFuZGxlIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0t
aWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UgaW4gdGhlIG1haW4gdGhyZWFkIik7CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJoYW5kbGluZyBkcm0t
cHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNzYWdlIik7CisK
KyAgICAgICAgSW5pdERhdGEgaW5pdERhdGE7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tI
b2xkZXIgbG9jayhtX3Byb3RlY3Rpb25NdXRleCk7CisgICAgICAgICAgICBQcm90ZWN0aW9uU3lz
dGVtRXZlbnRzIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMobWVzc2FnZSk7CisgICAgICAgICAgICBH
U1RfVFJBQ0UoImZvdW5kICV6dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZh
aWxhYmxlIiwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rp
b25TeXN0ZW1FdmVudHMuYXZhaWxhYmxlU3lzdGVtcygpLnNpemUoKSk7CisKKyAgICAgICAgICAg
IGZvciAoYXV0byYgZXZlbnQgOiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXZlbnRLZXlTeXN0ZW1JZCA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgR3N0QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAg
ICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVt
SWQsICZkYXRhLCBudWxscHRyKTsKKworICAgICAgICAgICAgICAgIGluaXREYXRhLmFwcGVuZCh7
ZXZlbnRLZXlTeXN0ZW1JZCwgZGF0YX0pOworICAgICAgICAgICAgICAgIG1faGFuZGxlZFByb3Rl
Y3Rpb25FdmVudHMuYWRkKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChX
VEZNb3ZlKGluaXREYXRhKSk7CisKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCks
ICJ3YWl0aW5nIGZvciBhIENETSBpbnN0YW5jZSIpOworICAgICAgICBpZiAobV9jZG1BdHRhY2ht
ZW50U2VtYXBob3JlLndhaXRGb3IoNF9zKQorICAgICAgICAgICAgJiYgbV9ub3RpZmllci0+aXNW
YWxpZCgpIC8vIENoZWNrIHRoZSBwbGF5ZXIgaXMgbm90IGJlaW5nIGRlc3Ryb3llZC4KKyAgICAg
ICAgICAgICYmICFtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHByZWZlcnJlZEtleVN5c3RlbVV1aWQgPSBHU3RyZWFtZXJFTUVV
dGlsaXRpZXM6OmtleVN5c3RlbVRvVXVpZChtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKSk7Cisg
ICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndvcmtpbmcgd2l0aCBrZXkg
c3lzdGVtICVzLCBjb250aW51aW5nIHdpdGgga2V5IHN5c3RlbSAlcyBvbiAlcyIsIG1fY2RtSW5z
dGFuY2UtPmtleVN5c3RlbSgpLnV0ZjgoKS5kYXRhKCksIHByZWZlcnJlZEtleVN5c3RlbVV1aWQs
IEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKKworICAgICAgICAgICAgR1JlZlB0cjxH
c3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLXByZWZl
cnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEZBTFNFKSk7CisgICAgICAgICAgICBHc3RTdHJ1
Y3R1cmUqIGNvbnRleHRTdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUo
Y29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3Ry
dWN0dXJlLCAiZGVjcnlwdGlvbi1zeXN0ZW0taWQiLCBHX1RZUEVfU1RSSU5HLCBwcmVmZXJyZWRL
ZXlTeXN0ZW1VdWlkLCBudWxscHRyKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250
ZXh0KEdTVF9FTEVNRU5UKEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSksIGNvbnRleHQuZ2V0KCkp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJDRE0gaW5zdGFuY2Ug
bm90IGluaXRpYWxpemFlZCIpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIHJldHVybiBmYWxzZTsKK30KKworI2lm
IFVTRShHU1RSRUFNRVJfR0wpCitHc3RDb250ZXh0KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnJlcXVlc3RHTENvbnRleHQoY29uc3QgY2hhciogY29udGV4dFR5cGUpCit7CisgICAgaWYg
KCFlbnN1cmVHc3RHTENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBp
ZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFKSkg
eworICAgICAgICBHc3RDb250ZXh0KiBkaXNwbGF5Q29udGV4dCA9IGdzdF9jb250ZXh0X25ldyhH
U1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUsIFRSVUUpOworICAgICAgICBnc3RfY29udGV4dF9z
ZXRfZ2xfZGlzcGxheShkaXNwbGF5Q29udGV4dCwgZ3N0R0xEaXNwbGF5KCkpOworICAgICAgICBy
ZXR1cm4gZGlzcGxheUNvbnRleHQ7CisgICAgfQorCisgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4
dFR5cGUsICJnc3QuZ2wuYXBwX2NvbnRleHQiKSkgeworICAgICAgICBHc3RDb250ZXh0KiBhcHBD
b250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KCJnc3QuZ2wuYXBwX2NvbnRleHQiLCBUUlVFKTsKKyAg
ICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1
Y3R1cmUoYXBwQ29udGV4dCk7CisjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTIsIDApCisgICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfVFlQRV9HTF9D
T05URVhULCBnc3RHTENvbnRleHQoKSwgbnVsbHB0cik7CisjZWxzZQorICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjb250ZXh0IiwgR1NUX0dMX1RZUEVfQ09OVEVYVCwgZ3N0
R0xDb250ZXh0KCksIG51bGxwdHIpOworI2VuZGlmCisgICAgICAgIHJldHVybiBhcHBDb250ZXh0
OworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR3N0R0xDb250ZXh0KCkKK3sKKyAgICBpZiAobV9nbENvbnRl
eHQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byYgc2hhcmVkRGlzcGxheSA9IFBs
YXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCk7CisKKyAgICAvLyBU
aGUgZmxvYXRpbmcgcmVmIHJlbW92YWwgc3VwcG9ydCB3YXMgYWRkZWQgaW4gaHR0cHM6Ly9idWd6
aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzA2Mi4KKyAgICBib29sIHNob3VsZEFk
b3B0UmVmID0gd2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKTsKKyAgICBpZiAoIW1fZ2xE
aXNwbGF5KSB7CisjaWYgUExBVEZPUk0oWDExKQorI2lmIFVTRShHTFgpCisgICAgICAgIGlmIChp
czxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7CisgICAgICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBYMTEgc2hhcmVkIEdMIGRpc3BsYXki
KTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgICAgICAgICBtX2ds
RGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3
X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkp
Lm5hdGl2ZSgpKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZ2xEaXNw
bGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXko
ZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpOwor
ICAgICAgICB9CisjZWxpZiBVU0UoRUdMKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5
WDExPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBFR0wgZGlzcGxheSIpOworICAgICAgICAgICAg
aWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRH
UmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxh
eShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXko
KSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdT
VF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3du
Y2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOwor
ICAgICAgICB9CisjZW5kaWYKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyAgICAg
ICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpKSB7CisgICAg
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBXYXlsYW5kIHNo
YXJlZCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAgICAg
ICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rp
c3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVdh
eWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNw
bGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXls
YW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICAgICAgfQorI2VuZGlmCisK
KyNpZiBVU0UoV1BFX1JFTkRFUkVSKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5TGli
V1BFPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiQ3JlYXRpbmcgV1BFIHNoYXJlZCBFR0wgZGlzcGxheSIpOworICAgICAgICAgICAg
aWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRH
UmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxh
eShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3Bs
YXkoKSkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9
IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShk
b3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXko
KSkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBBU1NFUlQobV9nbERpc3BsYXkpOwor
ICAgIH0KKworICAgIEdMQ29udGV4dCogd2Via2l0Q29udGV4dCA9IHNoYXJlZERpc3BsYXkuc2hh
cmluZ0dMQ29udGV4dCgpOworICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1YWxseSBleGNsdXNp
dmUsIG5vIG5lZWQgZm9yIGlmZGVmcyBoZXJlLgorICAgIEdzdEdMUGxhdGZvcm0gZ2xQbGF0Zm9y
bSA9IHdlYmtpdENvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRGT1JNX0VHTCA6
IEdTVF9HTF9QTEFURk9STV9HTFg7CisKKyNpZiBVU0UoT1BFTkdMX0VTKQorICAgIEdzdEdMQVBJ
IGdsQVBJID0gR1NUX0dMX0FQSV9HTEVTMjsKKyNlbGlmIFVTRShPUEVOR0wpCisgICAgR3N0R0xB
UEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisjZW5kaWYKKworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgY29udGV4dEhh
bmRsZSA9IHdlYmtpdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmICghY29udGV4
dEhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHNob3VsZEFkb3B0UmVm
KQorICAgICAgICBtX2dsQ29udGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29udGV4dF9uZXdfd3Jh
cHBlZChtX2dsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4
dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKSk7CisgICAgZWxzZQorICAgICAgICBtX2dsQ29u
dGV4dCA9IGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1fZ2xEaXNwbGF5LmdldCgpLCByZWlu
dGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkp
OworCisgICAgLy8gQWN0aXZhdGUgYW5kIGZpbGwgdGhlIEdTdHJlYW1lciB3cmFwcGVkIGNvbnRl
eHQgd2l0aCB0aGUgV2Via2l0J3Mgc2hhcmVkIG9uZS4KKyAgICBhdXRvIHByZXZpb3VzQWN0aXZl
Q29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIHdlYmtpdENvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShtX2dsQ29u
dGV4dC5nZXQoKSwgVFJVRSkpIHsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OworICAgICAgICBpZiAoIWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhtX2dsQ29udGV4dC5nZXQo
KSwgJmVycm9yLm91dFB0cigpKSkKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8g
ZmlsbCBpbiBHU3RyZWFtZXIgY29udGV4dDogJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAg
IGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBGQUxTRSk7CisgICAg
fSBlbHNlCisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZhdGUgR1N0cmVhbWVy
IGNvbnRleHQgJSIgR1NUX1BUUl9GT1JNQVQsIG1fZ2xDb250ZXh0LmdldCgpKTsKKyAgICBpZiAo
cHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUl9HTCkKKworLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8KK0Zsb2F0
U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKK3sK
KyNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKKyAgICAvLyBXaGVuIHVzaW5nIHRoZSBob2xl
cHVjaCB3ZSBtYXkgbm90IGJlIGFibGUgdG8gZ2V0IHRoZSB2aWRlbyBmcmFtZXMgc2l6ZSwgc28g
d2UgY2FuJ3QgdXNlCisgICAgLy8gaXQuIEJ1dCB3ZSBuZWVkIHRvIHJlcG9ydCBzb21lIG5vbiBl
bXB0eSBuYXR1cmFsU2l6ZSBmb3IgdGhlIHBsYXllcidzIEdyYXBoaWNzTGF5ZXIKKyAgICAvLyB0
byBiZSBwcm9wZXJseSBjcmVhdGVkLgorICAgIHJldHVybiBzX2hvbGVQdW5jaERlZmF1bHRGcmFt
ZVNpemU7CisjZW5kaWYKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgaWYgKCFtX2lz
TGVnYWN5UGxheWJpbiAmJiAhbV9jdXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB2aWRlb1RyYWNrID0gbV92
aWRlb1RyYWNrcy5nZXQobV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7CisKKyAgICAgICAgaWYgKHZp
ZGVvVHJhY2spIHsKKyAgICAgICAgICAgIGF1dG8gdGFncyA9IGFkb3B0R1JlZihnc3Rfc3RyZWFt
X2dldF90YWdzKHZpZGVvVHJhY2stPnN0cmVhbSgpKSk7CisgICAgICAgICAgICBnaW50IHdpZHRo
LCBoZWlnaHQ7CisKKyAgICAgICAgICAgIGlmICh0YWdzICYmIGdzdF90YWdfbGlzdF9nZXRfaW50
KHRhZ3MuZ2V0KCksIFdFQktJVF9NRURJQV9UUkFDS19UQUdfV0lEVEgsICZ3aWR0aCkgJiYgZ3N0
X3RhZ19saXN0X2dldF9pbnQodGFncy5nZXQoKSwgV0VCS0lUX01FRElBX1RSQUNLX1RBR19IRUlH
SFQsICZoZWlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBGbG9hdFNpemUod2lkdGgsIGhl
aWdodCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
KworICAgIGlmICghaGFzVmlkZW8oKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOworCisg
ICAgaWYgKCFtX3ZpZGVvU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX3ZpZGVvU2l6
ZTsKKworICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7Cisg
ICAgaWYgKCFHU1RfSVNfU0FNUExFKG1fc2FtcGxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIEZs
b2F0U2l6ZSgpOworCisgICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9z
YW1wbGUuZ2V0KCkpOworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgp
OworCisgICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNl
ZQorICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1
NzEKKyAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBT
ZWUKKyAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2
MzI2CisKKyAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3JpZ2luYWwgc2l6ZSwgaWYgdGhp
cyBmYWlscyB0aGUKKyAgICAvLyB2aWRlby1zaW5rIGhhcyBsaWtlbHkgbm90IHlldCBuZWdvdGlh
dGVkIGl0cyBjYXBzLgorICAgIGludCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFz
cGVjdFJhdGlvRGVub21pbmF0b3IsIHN0cmlkZTsKKyAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZTsK
KyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7CisgICAgaWYgKCFnZXRWaWRlb1NpemVBbmRGb3Jt
YXRGcm9tQ2FwcyhjYXBzLCBvcmlnaW5hbFNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051
bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpKQorICAgICAgICBy
ZXR1cm4gRmxvYXRTaXplKCk7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgLy8g
V2hlbiB1c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgaWYgdGhlIHZpZGVvIGlzIHRhZ2dl
ZCBhcyByb3RhdGVkIDkwIG9yIDI3MCBkZWdyZWVzLCBzd2FwIHdpZHRoIGFuZCBoZWlnaHQuCisg
ICAgaWYgKG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkgeworICAgICAgICBpZiAobV92aWRl
b1NvdXJjZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCisgICAgICAgICAgICBvcmln
aW5hbFNpemUgPSBvcmlnaW5hbFNpemUudHJhbnNwb3NlZFNpemUoKTsKKyAgICB9CisjZW5kaWYK
KworICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk9yaWdpbmFsIHZpZGVvIHNpemU6
ICVkeCVkIiwgb3JpZ2luYWxTaXplLndpZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7Cisg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUGl4ZWwgYXNwZWN0IHJhdGlvOiAlZC8l
ZCIsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRv
cik7CisKKyAgICAvLyBDYWxjdWxhdGUgREFSIGJhc2VkIG9uIFBBUiBhbmQgdmlkZW8gc2l6ZS4K
KyAgICBpbnQgZGlzcGxheVdpZHRoID0gb3JpZ2luYWxTaXplLndpZHRoKCkgKiBwaXhlbEFzcGVj
dFJhdGlvTnVtZXJhdG9yOworICAgIGludCBkaXNwbGF5SGVpZ2h0ID0gb3JpZ2luYWxTaXplLmhl
aWdodCgpICogcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yOworCisgICAgLy8gRGl2aWRlIGRp
c3BsYXkgd2lkdGggYW5kIGhlaWdodCBieSB0aGVpciBHQ0QgdG8gYXZvaWQgcG9zc2libGUgb3Zl
cmZsb3dzLgorICAgIGludCBkaXNwbGF5QXNwZWN0UmF0aW9HQ0QgPSBncmVhdGVzdENvbW1vbkRp
dmlzb3IoZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKKyAgICBkaXNwbGF5V2lkdGggLz0g
ZGlzcGxheUFzcGVjdFJhdGlvR0NEOworICAgIGRpc3BsYXlIZWlnaHQgLz0gZGlzcGxheUFzcGVj
dFJhdGlvR0NEOworCisgICAgLy8gQXBwbHkgREFSIHRvIG9yaWdpbmFsIHZpZGVvIHNpemUuIFRo
aXMgaXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaW4geHZpbWFnZXNpbmsncyBzZXRjYXBzIGZ1bmN0
aW9uLgorICAgIGd1aW50NjQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOworICAgIGlmICghKG9yaWdp
bmFsU2l6ZS5oZWlnaHQoKSAlIGRpc3BsYXlIZWlnaHQpKSB7CisgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIktlZXBpbmcgdmlkZW8gb3JpZ2luYWwgaGVpZ2h0Iik7CisgICAg
ICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0
KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7CisgICAgICAgIGhlaWdodCA9IHN0YXRp
Y19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgfSBlbHNlIGlmICgh
KG9yaWdpbmFsU2l6ZS53aWR0aCgpICUgZGlzcGxheVdpZHRoKSkgeworICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJLZWVwaW5nIHZpZGVvIG9yaWdpbmFsIHdpZHRoIik7Cisg
ICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLndp
ZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0aCk7CisgICAgICAgIHdpZHRoID0gc3Rh
dGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLndpZHRoKCkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkFwcHJveGltYXRpbmcgd2hpbGUg
a2VlcGluZyBvcmlnaW5hbCB2aWRlbyBoZWlnaHQiKTsKKyAgICAgICAgd2lkdGggPSBnc3RfdXRp
bF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRoLCBk
aXNwbGF5SGVpZ2h0KTsKKyAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3Jp
Z2luYWxTaXplLmhlaWdodCgpKTsKKyAgICB9CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJOYXR1cmFsIHNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgInglIiBHX0dVSU5UNjRf
Rk9STUFULCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX3ZpZGVvU2l6ZSA9IEZsb2F0U2l6ZShzdGF0
aWNfY2FzdDxpbnQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKKyAgICByZXR1
cm4gbV92aWRlb1NpemU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
ZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQoreworICAgIGlmICghbV92b2x1bWVFbGVtZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5n
IHZvbHVtZTogJWYiLCB2b2x1bWUpOworICAgIGdzdF9zdHJlYW1fdm9sdW1lX3NldF92b2x1bWUo
bV92b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfTElORUFSLCBz
dGF0aWNfY2FzdDxkb3VibGU+KHZvbHVtZSkpOworfQorCitmbG9hdCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnZvbHVtZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGdzdF9zdHJlYW1fdm9sdW1lX2dldF92
b2x1bWUobV92b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfTElO
RUFSKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXll
ck9mVm9sdW1lQ2hhbmdlKCkKK3sKKyAgICBpZiAoIW1fcGxheWVyIHx8ICFtX3ZvbHVtZUVsZW1l
bnQpCisgICAgICAgIHJldHVybjsKKyAgICBkb3VibGUgdm9sdW1lOworICAgIHZvbHVtZSA9IGdz
dF9zdHJlYW1fdm9sdW1lX2dldF92b2x1bWUobV92b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RS
RUFNX1ZPTFVNRV9GT1JNQVRfTElORUFSKTsKKyAgICAvLyBnZXRfdm9sdW1lKCkgY2FuIHJldHVy
biB2YWx1ZXMgc3VwZXJpb3IgdG8gMS4wIGlmIHRoZSB1c2VyCisgICAgLy8gYXBwbGllcyBzb2Z0
d2FyZSB1c2VyIGdhaW4gdmlhIHRoaXJkIHBhcnR5IGFwcGxpY2F0aW9uIChHTk9NRQorICAgIC8v
IHZvbHVtZSBjb250cm9sIGZvciBpbnN0YW5jZSkuCisgICAgdm9sdW1lID0gQ0xBTVAodm9sdW1l
LCAwLjAsIDEuMCk7CisgICAgbV9wbGF5ZXItPnZvbHVtZUNoYW5nZWQoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHZvbHVtZSkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9s
dW1lQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQor
eworICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbV92b2x1bWVFbGVtZW50IHJlY2VpdmVzIHRo
ZSBub3RpZnk6OnZvbHVtZSBzaWduYWwuCisgICAgR1NUX0RFQlVHX09CSkVDVChwbGF5ZXItPnBp
cGVsaW5lKCksICJWb2x1bWUgY2hhbmdlZCB0bzogJWYiLCBwbGF5ZXItPnZvbHVtZSgpKTsKKwor
ICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlZv
bHVtZUNoYW5nZWQsIFtwbGF5ZXJdIHsKKyAgICAgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZlZv
bHVtZUNoYW5nZSgpOworICAgIH0pOworfQorCitNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV0d29ya1N0YXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9uZXR3b3JrU3RhdGU7Cit9CisKK01lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcmVhZHlTdGF0ZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNp
emVDaGFuZ2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0TXV0ZWQoYm9vbCBtdXRlKQoreworICAgIGlmICghbV92
b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGN1cnJlbnRWYWx1ZSA9
IG11dGVkKCk7CisgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBtdXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldCBtdXRlZCB0byAlcyIsIHRv
U3RyaW5nKG11dGUpLnV0ZjgoKS5kYXRhKCkpOworICAgIGdfb2JqZWN0X3NldChtX3ZvbHVtZUVs
ZW1lbnQuZ2V0KCksICJtdXRlIiwgbXV0ZSwgbnVsbHB0cik7Cit9CisKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjptdXRlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3ZvbHVtZUVs
ZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdib29sZWFuIG11dGVkOworICAg
IGdfb2JqZWN0X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgJm11dGVkLCBudWxs
cHRyKTsKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXllciBpcyBtdXRlZDog
JXMiLCB0b1N0cmluZyhzdGF0aWNfY2FzdDxib29sPihtdXRlZCkpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIHJldHVybiBtdXRlZDsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5vdGlmeVBsYXllck9mTXV0ZSgpCit7CisgICAgaWYgKCFtX3BsYXllciB8fCAhbV92b2x1bWVF
bGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBnYm9vbGVhbiBtdXRlZDsKKyAgICBnX29i
amVjdF9nZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsICZtdXRlZCwgbnVsbHB0cik7
CisgICAgbV9wbGF5ZXItPm11dGVDaGFuZ2VkKHN0YXRpY19jYXN0PGJvb2w+KG11dGVkKSk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptdXRlQ2hhbmdlZENhbGxiYWNr
KE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIC8vIFRoaXMgaXMg
Y2FsbGVkIHdoZW4gbV92b2x1bWVFbGVtZW50IHJlY2VpdmVzIHRoZSBub3RpZnk6Om11dGUgc2ln
bmFsLgorICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRp
b246Ok11dGVDaGFuZ2VkLCBbcGxheWVyXSB7CisgICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVy
T2ZNdXRlKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgR1VuaXF1ZU91dFB0
cjxHRXJyb3I+IGVycjsKKyAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBkZWJ1ZzsKKyAgICBNZWRp
YVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yOworICAgIGJvb2wgaXNzdWVFcnJvciA9IHRydWU7
CisgICAgYm9vbCBhdHRlbXB0TmV4dExvY2F0aW9uID0gZmFsc2U7CisgICAgY29uc3QgR3N0U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlKG1lc3NhZ2UpOwor
ICAgIEdzdFN0YXRlIHJlcXVlc3RlZFN0YXRlLCBjdXJyZW50U3RhdGU7CisKKyAgICBtX2NhbkZh
bGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24gPSBmYWxzZTsKKworICAgIGlmIChzdHJ1
Y3R1cmUpIHsKKyAgICAgICAgY29uc3QgZ2NoYXIqIG1lc3NhZ2VUeXBlTmFtZSA9IGdzdF9zdHJ1
Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKKworICAgICAgICAvLyBSZWRpcmVjdCBtZXNzYWdl
cyBhcmUgc2VudCBmcm9tIGVsZW1lbnRzLCBsaWtlIHF0ZGVtdXgsIHRvCisgICAgICAgIC8vIG5v
dGlmeSBvZiB0aGUgbmV3IGxvY2F0aW9uKHMpIG9mIHRoZSBtZWRpYS4KKyAgICAgICAgaWYgKCFn
X3N0cmNtcDAobWVzc2FnZVR5cGVOYW1lLCAicmVkaXJlY3QiKSkgeworICAgICAgICAgICAgbWVk
aWFMb2NhdGlvbkNoYW5nZWQobWVzc2FnZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBXZSBpZ25vcmUgc3RhdGUgY2hhbmdlcyBmcm9tIGludGVybmFs
IGVsZW1lbnRzLiBUaGV5IGFyZSBmb3J3YXJkZWQgdG8gcGxheWJpbjIgYW55d2F5LgorICAgIGJv
b2wgbWVzc2FnZVNvdXJjZUlzUGxheWJpbiA9IEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSA9PSBy
ZWludGVycHJldF9jYXN0PEdzdE9iamVjdCo+KG1fcGlwZWxpbmUuZ2V0KCkpOworCisgICAgR1NU
X0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIk1lc3NhZ2UgJXMgcmVjZWl2ZWQgZnJvbSBlbGVtZW50
ICVzIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1lc3NhZ2UpLCBHU1RfTUVTU0FHRV9TUkNfTkFN
RShtZXNzYWdlKSk7CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7Cisg
ICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKKyAgICAgICAgaWYgKG1fcmVzZXRQaXBlbGluZSB8
fCAhbV9taXNzaW5nUGx1Z2luQ2FsbGJhY2tzLmlzRW1wdHkoKSB8fCBtX2Vycm9yT2NjdXJlZCkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9lcnJvcihtZXNz
YWdlLCAmZXJyLm91dFB0cigpLCAmZGVidWcub3V0UHRyKCkpOworICAgICAgICBHU1RfRVJST1Io
IkVycm9yICVkOiAlcyAodXJsPSVzKSIsIGVyci0+Y29kZSwgZXJyLT5tZXNzYWdlLCBtX3VybC5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9G
SUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NI
T1dfQUxMLCAid2Via2l0LXZpZGVvLmVycm9yIik7CisKKyAgICAgICAgZXJyb3IgPSBNZWRpYVBs
YXllcjo6RW1wdHk7CisgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1Rf
U1RSRUFNX0VSUk9SLCBHU1RfU1RSRUFNX0VSUk9SX0NPREVDX05PVF9GT1VORCkKKyAgICAgICAg
ICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9TVFJFQU1fRVJST1IsIEdTVF9T
VFJFQU1fRVJST1JfV1JPTkdfVFlQRSkKKyAgICAgICAgICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhl
cnIuZ2V0KCksIEdTVF9TVFJFQU1fRVJST1IsIEdTVF9TVFJFQU1fRVJST1JfRkFJTEVEKQorICAg
ICAgICAgICAgfHwgZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX0NPUkVfRVJST1IsIEdT
VF9DT1JFX0VSUk9SX01JU1NJTkdfUExVR0lOKQorICAgICAgICAgICAgfHwgZ19lcnJvcl9tYXRj
aGVzKGVyci5nZXQoKSwgR1NUX1JFU09VUkNFX0VSUk9SLCBHU1RfUkVTT1VSQ0VfRVJST1JfTk9U
X0ZPVU5EKSkKKyAgICAgICAgICAgIGVycm9yID0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yOwor
ICAgICAgICBlbHNlIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfU1RSRUFNX0VS
Uk9SLCBHU1RfU1RSRUFNX0VSUk9SX1RZUEVfTk9UX0ZPVU5EKSkgeworICAgICAgICAgICAgLy8g
TGV0IHRoZSBtZWRpYVBsYXllckNsaWVudCBoYW5kbGUgdGhlIHN0cmVhbSBlcnJvciwgaW4KKyAg
ICAgICAgICAgIC8vIHRoaXMgY2FzZSB0aGUgSFRNTE1lZGlhRWxlbWVudCB3aWxsIGVtaXQgYSBz
dGFsbGVkCiAgICAgICAgICAgICAvLyBldmVudC4KICAgICAgICAgICAgIEdTVF9FUlJPUigiRGVj
b2RlIGVycm9yLCBsZXQgdGhlIE1lZGlhIGVsZW1lbnQgZW1pdCBhIHN0YWxsZWQgZXZlbnQuIik7
CiAgICAgICAgICAgICBtX2xvYWRpbmdTdGFsbGVkID0gdHJ1ZTsKQEAgLTE0MTgsMTE0MyArMjM4
NCwxNjM4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdl
KEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlv
bj4gY29sbGVjdGlvbjsKICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtc19zZWxlY3Rl
ZChtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7CiAKLSAgICAgICAgaWYgKCFjb2xsZWN0
aW9uKQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghY29sbGVjdGlvbikKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIG1fc3RyZWFtQ29sbGVjdGlvbi5zd2FwKGNvbGxlY3Rp
b24pOworICAgICAgICBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkID0gIiI7CisgICAgICAgIG1fY3Vy
cmVudFZpZGVvU3RyZWFtSWQgPSAiIjsKKyAgICAgICAgbV9jdXJyZW50VGV4dFN0cmVhbUlkID0g
IiI7CisKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxl
Y3RlZF9nZXRfc2l6ZShtZXNzYWdlKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFtID0g
Z3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc3RyZWFtKG1lc3NhZ2UsIGkpOworICAg
ICAgICAgICAgaWYgKCFzdHJlYW0pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgIEdzdFN0cmVhbVR5cGUgdHlwZSA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlKHN0
cmVhbS5nZXQoKSk7CisgICAgICAgICAgICBTdHJpbmcgc3RyZWFtSWQoZ3N0X3N0cmVhbV9nZXRf
c3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOworCisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJTZWxlY3RpbmcgJXMgdHJhY2sgd2l0aCBJRDogJXMiLCBnc3Rfc3RyZWFt
X3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgLy8gUGxheWJpbjMgY2FuIHNlbmQgbW9yZSB0aGFuIG9uZSBzZWxlY3RlZCBzdHJlYW0gb2Yg
dGhlIHNhbWUgdHlwZQorICAgICAgICAgICAgLy8gYnV0IHRoZXJlJ3Mgbm8gcHJpb3JpdHkgb3Ig
b3JkZXJpbmcgc3lzdGVtIGluIHBsYWNlLCBzbyB3ZSBhc3N1bWUKKyAgICAgICAgICAgIC8vIHRo
ZSBzZWxlY3RlZCBzdHJlYW0gaXMgdGhlIGxhc3Qgb25lIGFzIHJlcG9ydGVkIGJ5IHBsYXliaW4z
LgorICAgICAgICAgICAgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfQVVESU8pIHsKKyAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkID0gc3RyZWFtSWQ7CisgICAgICAgICAg
ICAgICAgYXV0byB0cmFjayA9IG1fYXVkaW9UcmFja3MuZ2V0KG1fY3VycmVudEF1ZGlvU3RyZWFt
SWQpOworICAgICAgICAgICAgICAgIEFTU0VSVCh0cmFjayk7CisgICAgICAgICAgICAgICAgdHJh
Y2stPm1hcmtBc0FjdGl2ZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NU
UkVBTV9UWVBFX1ZJREVPKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50VmlkZW9TdHJlYW1J
ZCA9IHN0cmVhbUlkOworICAgICAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBtX3ZpZGVvVHJhY2tz
LmdldChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodHJh
Y2spOworICAgICAgICAgICAgICAgIHRyYWNrLT5tYXJrQXNBY3RpdmUoKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9URVhUKQorICAgICAgICAgICAgICAg
IG1fY3VycmVudFRleHRTdHJlYW1JZCA9IHN0cmVhbUlkOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJVbmtub3duIHN0cmVhbSB0eXBlIHdpdGggc3RyZWFt
LWlkICVzIiwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIlVuaGFuZGxlZCBHU3RyZWFtZXIgbWVzc2FnZSB0eXBlOiAlcyIsIEdTVF9NRVNTQUdF
X1RZUEVfTkFNRShtZXNzYWdlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NCdWZmZXJpbmdTdGF0cyhHc3RNZXNz
YWdlKiBtZXNzYWdlKQoreworICAgIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZTsKKyAgICBnc3RfbWVz
c2FnZV9wYXJzZV9idWZmZXJpbmdfc3RhdHMobWVzc2FnZSwgJm1vZGUsIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIpOworCisgICAgaW50IHBlcmNlbnRhZ2U7CisgICAgZ3N0X21lc3NhZ2VfcGFy
c2VfYnVmZmVyaW5nKG1lc3NhZ2UsICZwZXJjZW50YWdlKTsKKworICAgIHVwZGF0ZUJ1ZmZlcmlu
Z1N0YXR1cyhtb2RlLCBwZXJjZW50YWdlKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnVwZGF0ZU1heFRpbWVMb2FkZWQoZG91YmxlIHBlcmNlbnRhZ2UpCit7CisgICAg
TWVkaWFUaW1lIG1lZGlhRHVyYXRpb24gPSBkdXJhdGlvbk1lZGlhVGltZSgpOworICAgIGlmICgh
bWVkaWFEdXJhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9tYXhUaW1lTG9hZGVkID0g
TWVkaWFUaW1lKHBlcmNlbnRhZ2UgKiBzdGF0aWNfY2FzdDxkb3VibGU+KHRvR3N0VW5zaWduZWQ2
NFRpbWUobWVkaWFEdXJhdGlvbikpIC8gMTAwLCBHU1RfU0VDT05EKTsKKyAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBVcGRhdGVkIG1heFRpbWVMb2FkZWQ6ICVz
IiwgdG9TdHJpbmcobV9tYXhUaW1lTG9hZGVkKS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhHc3RCdWZm
ZXJpbmdNb2RlIG1vZGUsIGRvdWJsZSBwZXJjZW50YWdlKQoreworICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIG1vZGU6ICVzLCBzdGF0dXM6ICVmJSUiLCBlbnVt
VG9TdHJpbmcoR1NUX1RZUEVfQlVGRkVSSU5HX01PREUsIG1vZGUpLmRhdGEoKSwgcGVyY2VudGFn
ZSk7CisKKyAgICBtX2Rvd25sb2FkRmluaXNoZWQgPSBwZXJjZW50YWdlID09IDEwMDsKKyAgICBt
X2J1ZmZlcmluZyA9ICFtX2Rvd25sb2FkRmluaXNoZWQ7CisKKyAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICBjYXNlIEdTVF9CVUZGRVJJTkdfU1RSRUFNOiB7CisgICAgICAgIHVwZGF0ZU1heFRpbWVM
b2FkZWQocGVyY2VudGFnZSk7CisKKyAgICAgICAgbV9idWZmZXJpbmdQZXJjZW50YWdlID0gcGVy
Y2VudGFnZTsKKyAgICAgICAgaWYgKG1fZG93bmxvYWRGaW5pc2hlZCkKKyAgICAgICAgICAgIHVw
ZGF0ZVN0YXRlcygpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9CVUZG
RVJJTkdfRE9XTkxPQUQ6IHsKKyAgICAgICAgdXBkYXRlTWF4VGltZUxvYWRlZChwZXJjZW50YWdl
KTsKKworICAgICAgICAvLyBNZWRpYSBpcyBub3cgZnVsbHkgbG9hZGVkLiBJdCB3aWxsIHBsYXkg
ZXZlbiBpZiBuZXR3b3JrIGNvbm5lY3Rpb24gaXMKKyAgICAgICAgLy8gY3V0LiBCdWZmZXJpbmcg
aXMgZG9uZSwgcmVtb3ZlIHRoZSBmaWxsIHNvdXJjZSBmcm9tIHRoZSBtYWluIGxvb3AuCisgICAg
ICAgIGlmIChtX2Rvd25sb2FkRmluaXNoZWQpCisgICAgICAgICAgICBtX2ZpbGxUaW1lci5zdG9w
KCk7CisKKyAgICAgICAgdXBkYXRlU3RhdGVzKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBkZWZhdWx0OgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJVbmhhbmRs
ZWQgYnVmZmVyaW5nIG1vZGU6ICVzIiwgZW51bVRvU3RyaW5nKEdTVF9UWVBFX0JVRkZFUklOR19N
T0RFLCBtb2RlKS5kYXRhKCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZiBFTkFC
TEUoVklERU9fVFJBQ0spICYmIFVTRShHU1RSRUFNRVJfTVBFR1RTKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NNcGVnVHNTZWN0aW9uKEdzdE1wZWd0c1NlY3Rpb24q
IHNlY3Rpb24pCit7CisgICAgQVNTRVJUKHNlY3Rpb24pOworCisgICAgaWYgKHNlY3Rpb24tPnNl
Y3Rpb25fdHlwZSA9PSBHU1RfTVBFR1RTX1NFQ1RJT05fUE1UKSB7CisgICAgICAgIGNvbnN0IEdz
dE1wZWd0c1BNVCogcG10ID0gZ3N0X21wZWd0c19zZWN0aW9uX2dldF9wbXQoc2VjdGlvbik7Cisg
ICAgICAgIG1fbWV0YWRhdGFUcmFja3MuY2xlYXIoKTsKKyAgICAgICAgZm9yIChndWludCBpID0g
MDsgaSA8IHBtdC0+c3RyZWFtcy0+bGVuOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IEdzdE1w
ZWd0c1BNVFN0cmVhbSogc3RyZWFtID0gc3RhdGljX2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzUE1UU3Ry
ZWFtKj4oZ19wdHJfYXJyYXlfaW5kZXgocG10LT5zdHJlYW1zLCBpKSk7CisgICAgICAgICAgICBp
ZiAoc3RyZWFtLT5zdHJlYW1fdHlwZSA9PSAweDA1IHx8IHN0cmVhbS0+c3RyZWFtX3R5cGUgPj0g
MHg4MCkgeworICAgICAgICAgICAgICAgIEF0b21TdHJpbmcgcGlkID0gU3RyaW5nOjpudW1iZXIo
c3RyZWFtLT5waWQpOworICAgICAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBJbmJhbmRNZXRhZGF0
YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAg
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6TWV0YWRhdGEsIEluYmFuZFRleHRUcmFja1ByaXZhdGU6
OkRhdGEsIHBpZCk7CisKKyAgICAgICAgICAgICAgICAvLyA0LjcuMTAuMTIuMiBTb3VyY2luZyBp
bi1iYW5kIHRleHQgdHJhY2tzCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyB0ZXh0IHRy
YWNrJ3Mga2luZCBpcyBtZXRhZGF0YSwgdGhlbiBzZXQgdGhlIHRleHQgdHJhY2sgaW4tYmFuZCBt
ZXRhZGF0YSB0cmFjayBkaXNwYXRjaAorICAgICAgICAgICAgICAgIC8vIHR5cGUgYXMgZm9sbG93
cywgYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIG1lZGlhIHJlc291cmNlOgorICAgICAgICAgICAg
ICAgIC8vIExldCBzdHJlYW0gdHlwZSBiZSB0aGUgdmFsdWUgb2YgdGhlICJzdHJlYW1fdHlwZSIg
ZmllbGQgZGVzY3JpYmluZyB0aGUgdGV4dCB0cmFjaydzIHR5cGUgaW4gdGhlCisgICAgICAgICAg
ICAgICAgLy8gZmlsZSdzIHByb2dyYW0gbWFwIHNlY3Rpb24sIGludGVycHJldGVkIGFzIGFuIDgt
Yml0IHVuc2lnbmVkIGludGVnZXIuIExldCBsZW5ndGggYmUgdGhlIHZhbHVlIG9mCisgICAgICAg
ICAgICAgICAgLy8gdGhlICJFU19pbmZvX2xlbmd0aCIgZmllbGQgZm9yIHRoZSB0cmFjayBpbiB0
aGUgc2FtZSBwYXJ0IG9mIHRoZSBwcm9ncmFtIG1hcCBzZWN0aW9uLCBpbnRlcnByZXRlZAorICAg
ICAgICAgICAgICAgIC8vIGFzIGFuIGludGVnZXIgYXMgZGVmaW5lZCBieSB0aGUgTVBFRy0yIHNw
ZWNpZmljYXRpb24uIExldCBkZXNjcmlwdG9yIGJ5dGVzIGJlIHRoZSBsZW5ndGggYnl0ZXMKKyAg
ICAgICAgICAgICAgICAvLyBmb2xsb3dpbmcgdGhlICJFU19pbmZvX2xlbmd0aCIgZmllbGQuIFRo
ZSB0ZXh0IHRyYWNrIGluLWJhbmQgbWV0YWRhdGEgdHJhY2sgZGlzcGF0Y2ggdHlwZSBtdXN0IGJl
CisgICAgICAgICAgICAgICAgLy8gc2V0IHRvIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJl
YW0gdHlwZSBieXRlIGFuZCB0aGUgemVybyBvciBtb3JlIGRlc2NyaXB0b3IgYnl0ZXMgYnl0ZXMs
CisgICAgICAgICAgICAgICAgLy8gZXhwcmVzc2VkIGluIGhleGFkZWNpbWFsIHVzaW5nIHVwcGVy
Y2FzZSBBU0NJSSBoZXggZGlnaXRzLgorICAgICAgICAgICAgICAgIFN0cmluZyBpbmJhbmRNZXRh
ZGF0YVRyYWNrRGlzcGF0Y2hUeXBlOworICAgICAgICAgICAgICAgIGFwcGVuZFVuc2lnbmVkQXNI
ZXhGaXhlZFNpemUoc3RyZWFtLT5zdHJlYW1fdHlwZSwgaW5iYW5kTWV0YWRhdGFUcmFja0Rpc3Bh
dGNoVHlwZSwgMik7CisgICAgICAgICAgICAgICAgZm9yIChndWludCBqID0gMDsgaiA8IHN0cmVh
bS0+ZGVzY3JpcHRvcnMtPmxlbjsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdz
dE1wZWd0c0Rlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBzdGF0aWNfY2FzdDxjb25zdCBHc3RNcGVn
dHNEZXNjcmlwdG9yKj4oZ19wdHJfYXJyYXlfaW5kZXgoc3RyZWFtLT5kZXNjcmlwdG9ycywgaikp
OworICAgICAgICAgICAgICAgICAgICBmb3IgKGd1aW50IGsgPSAwOyBrIDwgZGVzY3JpcHRvci0+
bGVuZ3RoOyArK2spCisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRCeXRlQXNIZXgoZGVz
Y3JpcHRvci0+ZGF0YVtrXSwgaW5iYW5kTWV0YWRhdGFUcmFja0Rpc3BhdGNoVHlwZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRyYWNrLT5zZXRJbkJhbmRNZXRhZGF0YVRy
YWNrRGlzcGF0Y2hUeXBlKGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUpOworCisgICAg
ICAgICAgICAgICAgbV9tZXRhZGF0YVRyYWNrcy5hZGQocGlkLCB0cmFjayk7CisgICAgICAgICAg
ICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjaygqdHJhY2spOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQXRvbVN0cmluZyBwaWQgPSBTdHJpbmc6Om51
bWJlcihzZWN0aW9uLT5waWQpOworICAgICAgICBSZWZQdHI8SW5iYW5kTWV0YWRhdGFUZXh0VHJh
Y2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IG1fbWV0YWRhdGFUcmFja3MuZ2V0KHBpZCk7Cisg
ICAgICAgIGlmICghdHJhY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1JlZlB0
cjxHQnl0ZXM+IGRhdGEgPSBnc3RfbXBlZ3RzX3NlY3Rpb25fZ2V0X2RhdGEoc2VjdGlvbik7Cisg
ICAgICAgIGdzaXplIHNpemU7CisgICAgICAgIGNvbnN0IHZvaWQqIGJ5dGVzID0gZ19ieXRlc19n
ZXRfZGF0YShkYXRhLmdldCgpLCAmc2l6ZSk7CisKKyAgICAgICAgdHJhY2stPmFkZERhdGFDdWUo
Y3VycmVudE1lZGlhVGltZSgpLCBjdXJyZW50TWVkaWFUaW1lKCksIGJ5dGVzLCBzaXplKTsKKyAg
ICB9Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNvbnRlbnRzKEdzdE1lc3NhZ2UqIG1l
c3NhZ2UpCit7CisgICAgaWYgKG1fY2hhcHRlcnNUcmFjaykKKyAgICAgICAgbV9wbGF5ZXItPnJl
bW92ZVRleHRUcmFjaygqbV9jaGFwdGVyc1RyYWNrKTsKKworICAgIG1fY2hhcHRlcnNUcmFjayA9
IEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKEluYmFuZFRl
eHRUcmFja1ByaXZhdGU6OkNoYXB0ZXJzLCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpHZW5lcmlj
KTsKKyAgICBtX3BsYXllci0+YWRkVGV4dFRyYWNrKCptX2NoYXB0ZXJzVHJhY2spOworCisgICAg
R1JlZlB0cjxHc3RUb2M+IHRvYzsKKyAgICBnYm9vbGVhbiB1cGRhdGVkOworICAgIGdzdF9tZXNz
YWdlX3BhcnNlX3RvYyhtZXNzYWdlLCAmdG9jLm91dFB0cigpLCAmdXBkYXRlZCk7CisgICAgQVNT
RVJUKHRvYyk7CisKKyAgICBmb3IgKEdMaXN0KiBpID0gZ3N0X3RvY19nZXRfZW50cmllcyh0b2Mu
Z2V0KCkpOyBpOyBpID0gaS0+bmV4dCkKKyAgICAgICAgcHJvY2Vzc1RhYmxlT2ZDb250ZW50c0Vu
dHJ5KHN0YXRpY19jYXN0PEdzdFRvY0VudHJ5Kj4oaS0+ZGF0YSkpOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZDb250ZW50c0VudHJ5KEdzdFRv
Y0VudHJ5KiBlbnRyeSkKK3sKKyAgICBBU1NFUlQoZW50cnkpOworCisgICAgYXV0byBjdWUgPSBH
ZW5lcmljQ3VlRGF0YTo6Y3JlYXRlKCk7CisKKyAgICBnaW50NjQgc3RhcnQgPSAtMSwgc3RvcCA9
IC0xOworICAgIGdzdF90b2NfZW50cnlfZ2V0X3N0YXJ0X3N0b3BfdGltZXMoZW50cnksICZzdGFy
dCwgJnN0b3ApOworICAgIGlmIChzdGFydCAhPSAtMSkKKyAgICAgICAgY3VlLT5zZXRTdGFydFRp
bWUoTWVkaWFUaW1lKHN0YXJ0LCBHU1RfU0VDT05EKSk7CisgICAgaWYgKHN0b3AgIT0gLTEpCisg
ICAgICAgIGN1ZS0+c2V0RW5kVGltZShNZWRpYVRpbWUoc3RvcCwgR1NUX1NFQ09ORCkpOworCisg
ICAgR3N0VGFnTGlzdCogdGFncyA9IGdzdF90b2NfZW50cnlfZ2V0X3RhZ3MoZW50cnkpOworICAg
IGlmICh0YWdzKSB7CisgICAgICAgIGdjaGFyKiB0aXRsZSA9IG51bGxwdHI7CisgICAgICAgIGdz
dF90YWdfbGlzdF9nZXRfc3RyaW5nKHRhZ3MsIEdTVF9UQUdfVElUTEUsICZ0aXRsZSk7CisgICAg
ICAgIGlmICh0aXRsZSkgeworICAgICAgICAgICAgY3VlLT5zZXRDb250ZW50KHRpdGxlKTsKKyAg
ICAgICAgICAgIGdfZnJlZSh0aXRsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NoYXB0
ZXJzVHJhY2stPmFkZEdlbmVyaWNDdWUoY3VlKTsKKworICAgIGZvciAoR0xpc3QqIGkgPSBnc3Rf
dG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyhlbnRyeSk7IGk7IGkgPSBpLT5uZXh0KQorICAgICAg
ICBwcm9jZXNzVGFibGVPZkNvbnRlbnRzRW50cnkoc3RhdGljX2Nhc3Q8R3N0VG9jRW50cnkqPihp
LT5kYXRhKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUlu
dmFsaWRBdWRpb1RyYWNrcyhWZWN0b3I8U3RyaW5nPiB2YWxpZFRyYWNrSWRzKQoreworICAgIG1f
YXVkaW9UcmFja3MucmVtb3ZlSWYoW3ZhbGlkVHJhY2tJZHNdKGF1dG8mIGtleUFuZFZhbHVlKSB7
CisgICAgICAgIHJldHVybiAhdmFsaWRUcmFja0lkcy5jb250YWlucyhrZXlBbmRWYWx1ZS5rZXkp
OworICAgIH0pOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJ
bnZhbGlkVmlkZW9UcmFja3MoVmVjdG9yPFN0cmluZz4gdmFsaWRUcmFja0lkcykKK3sKKyAgICBt
X3ZpZGVvVHJhY2tzLnJlbW92ZUlmKFt2YWxpZFRyYWNrSWRzXShhdXRvJiBrZXlBbmRWYWx1ZSkg
eworICAgICAgICByZXR1cm4gIXZhbGlkVHJhY2tJZHMuY29udGFpbnMoa2V5QW5kVmFsdWUua2V5
KTsKKyAgICB9KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdl
SW52YWxpZFRleHRUcmFja3MoVmVjdG9yPFN0cmluZz4gdmFsaWRUcmFja0lkcykKK3sKKyAgICBt
X3RleHRUcmFja3MucmVtb3ZlSWYoW3ZhbGlkVHJhY2tJZHNdKGF1dG8mIGtleUFuZFZhbHVlKSB7
CisgICAgICAgIHJldHVybiAhdmFsaWRUcmFja0lkcy5jb250YWlucyhrZXlBbmRWYWx1ZS5rZXkp
OworICAgIH0pOworfQorI2VuZGlmCiAKLSAgICAgICAgbV9zdHJlYW1Db2xsZWN0aW9uLnN3YXAo
Y29sbGVjdGlvbik7Ci0gICAgICAgIG1fY3VycmVudEF1ZGlvU3RyZWFtSWQgPSAiIjsKLSAgICAg
ICAgbV9jdXJyZW50VmlkZW9TdHJlYW1JZCA9ICIiOwotICAgICAgICBtX2N1cnJlbnRUZXh0U3Ry
ZWFtSWQgPSAiIjsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cmlEZWNvZGVC
aW5FbGVtZW50QWRkZWRDYWxsYmFjayhHc3RCaW4qIGJpbiwgR3N0RWxlbWVudCogZWxlbWVudCwg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgaWYgKGdfc3RyY21w
MChHX09CSkVDVF9UWVBFX05BTUUoZWxlbWVudCksICJHc3REb3dubG9hZEJ1ZmZlciIpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X21lc3NhZ2Vfc3Ry
ZWFtc19zZWxlY3RlZF9nZXRfc2l6ZShtZXNzYWdlKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4g
c3RyZWFtID0gZ3N0X21lc3NhZ2Vfc3RyZWFtc19zZWxlY3RlZF9nZXRfc3RyZWFtKG1lc3NhZ2Us
IGkpOwotICAgICAgICAgICAgaWYgKCFzdHJlYW0pCi0gICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgcGxheWVyLT5tX2Rvd25sb2FkQnVmZmVyID0gZWxlbWVudDsKKyAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoYmluLCByZWludGVycHJldF9jYXN0PGdwb2ludGVy
Pih1cmlEZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayksIHBsYXllcik7CisgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKGVsZW1lbnQsICJub3RpZnk6OnRlbXAtbG9jYXRpb24iLCBHX0NB
TExCQUNLKGRvd25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayksIHBsYXllcik7CiAKLSAg
ICAgICAgICAgIEdzdFN0cmVhbVR5cGUgdHlwZSA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBl
KHN0cmVhbS5nZXQoKSk7Ci0gICAgICAgICAgICBTdHJpbmcgc3RyZWFtSWQoZ3N0X3N0cmVhbV9n
ZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOworICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gb2xk
RG93bmxvYWRUZW1wbGF0ZTsKKyAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgInRlbXAtdGVtcGxh
dGUiLCAmb2xkRG93bmxvYWRUZW1wbGF0ZS5vdXRQdHIoKSwgbnVsbHB0cik7CiAKLSAgICAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNlbGVjdGluZyAlcyB0cmFjayB3aXRo
IElEOiAlcyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3RyZWFtSWQudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICAvLyBQbGF5YmluMyBjYW4gc2VuZCBtb3JlIHRoYW4gb25l
IHNlbGVjdGVkIHN0cmVhbSBvZiB0aGUgc2FtZSB0eXBlCi0gICAgICAgICAgICAvLyBidXQgdGhl
cmUncyBubyBwcmlvcml0eSBvciBvcmRlcmluZyBzeXN0ZW0gaW4gcGxhY2UsIHNvIHdlIGFzc3Vt
ZQotICAgICAgICAgICAgLy8gdGhlIHNlbGVjdGVkIHN0cmVhbSBpcyB0aGUgbGFzdCBvbmUgYXMg
cmVwb3J0ZWQgYnkgcGxheWJpbjMuCi0gICAgICAgICAgICBpZiAodHlwZSAmIEdTVF9TVFJFQU1f
VFlQRV9BVURJTykgewotICAgICAgICAgICAgICAgIG1fY3VycmVudEF1ZGlvU3RyZWFtSWQgPSBz
dHJlYW1JZDsKLSAgICAgICAgICAgICAgICBhdXRvIHRyYWNrID0gbV9hdWRpb1RyYWNrcy5nZXQo
bV9jdXJyZW50QXVkaW9TdHJlYW1JZCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHRyYWNrKTsK
LSAgICAgICAgICAgICAgICB0cmFjay0+bWFya0FzQWN0aXZlKCk7Ci0gICAgICAgICAgICB9IGVs
c2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklERU8pIHsKLSAgICAgICAgICAgICAgICBt
X2N1cnJlbnRWaWRlb1N0cmVhbUlkID0gc3RyZWFtSWQ7Ci0gICAgICAgICAgICAgICAgYXV0byB0
cmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOwotICAgICAg
ICAgICAgICAgIEFTU0VSVCh0cmFjayk7Ci0gICAgICAgICAgICAgICAgdHJhY2stPm1hcmtBc0Fj
dGl2ZSgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX1RF
WFQpCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50VGV4dFN0cmVhbUlkID0gc3RyZWFtSWQ7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25vd24gc3Ry
ZWFtIHR5cGUgd2l0aCBzdHJlYW0taWQgJXMiLCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVW5oYW5kbGVkIEdTdHJlYW1lciBtZXNzYWdlIHR5
cGU6ICVzIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1lc3NhZ2UpKTsKLSAgICAgICAgYnJlYWs7
CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBuZXdEb3dubG9hZFRlbXBsYXRlKGdfYnVpbGRfZmlsZW5h
bWUoR19ESVJfU0VQQVJBVE9SX1MsICJ2YXIiLCAidG1wIiwgIldlYktpdC1NZWRpYS1YWFhYWFgi
LCBudWxscHRyKSk7CisgICAgZ19vYmplY3Rfc2V0KGVsZW1lbnQsICJ0ZW1wLXRlbXBsYXRlIiwg
bmV3RG93bmxvYWRUZW1wbGF0ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgR1NUX0RFQlVHX09CSkVD
VChwbGF5ZXItPnBpcGVsaW5lKCksICJSZWNvbmZpZ3VyZWQgZmlsZSBkb3dubG9hZCB0ZW1wbGF0
ZSBmcm9tICclcycgdG8gJyVzJyIsIG9sZERvd25sb2FkVGVtcGxhdGUuZ2V0KCksIG5ld0Rvd25s
b2FkVGVtcGxhdGUuZ2V0KCkpOworCisgICAgcGxheWVyLT5wdXJnZU9sZERvd25sb2FkRmlsZXMo
b2xkRG93bmxvYWRUZW1wbGF0ZS5nZXQoKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpkb3dubG9hZEJ1ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgQVNTRVJUKHBsYXllci0+bV9kb3dubG9h
ZEJ1ZmZlcik7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMocGxh
eWVyLT5tX2Rvd25sb2FkQnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihk
b3dubG9hZEJ1ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2spLCBwbGF5ZXIpOworCisgICAgR1VuaXF1
ZU91dFB0cjxjaGFyPiBkb3dubG9hZEZpbGU7CisgICAgZ19vYmplY3RfZ2V0KHBsYXllci0+bV9k
b3dubG9hZEJ1ZmZlci5nZXQoKSwgInRlbXAtbG9jYXRpb24iLCAmZG93bmxvYWRGaWxlLm91dFB0
cigpLCBudWxscHRyKTsKKyAgICBwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIgPSBudWxscHRyOwor
CisgICAgaWYgKFVOTElLRUxZKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRvd25sb2FkRmlsZS5n
ZXQoKSkpKSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJDb3VsZG4ndCB1bmxpbmsgbWVkaWEgdGVt
cG9yYXJ5IGZpbGUgJXMgYWZ0ZXIgY3JlYXRpb24iLCBkb3dubG9hZEZpbGUuZ2V0KCkpOworICAg
ICAgICByZXR1cm47CiAgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVChwbGF5ZXItPnBpcGVs
aW5lKCksICJVbmxpbmtlZCBtZWRpYSB0ZW1wb3JhcnkgZmlsZSAlcyBhZnRlciBjcmVhdGlvbiIs
IGRvd25sb2FkRmlsZS5nZXQoKSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZU9sZERvd25sb2FkRmlsZXMoY29uc3QgY2hh
ciogZG93bmxvYWRGaWxlVGVtcGxhdGUpCiB7Ci0gICAgR3N0QnVmZmVyaW5nTW9kZSBtb2RlOwot
ICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cyhtZXNzYWdlLCAmbW9kZSwgbnVs
bHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgaWYgKCFkb3dubG9hZEZpbGVUZW1wbGF0ZSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBlcmNlbnRhZ2U7Ci0gICAgZ3N0X21lc3NhZ2Vf
cGFyc2VfYnVmZmVyaW5nKG1lc3NhZ2UsICZwZXJjZW50YWdlKTsKKyAgICBHVW5pcXVlUHRyPGNo
YXI+IHRlbXBsYXRlUGF0aChnX3BhdGhfZ2V0X2Rpcm5hbWUoZG93bmxvYWRGaWxlVGVtcGxhdGUp
KTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHRlbXBsYXRlRmlsZShnX3BhdGhfZ2V0X2Jhc2VuYW1l
KGRvd25sb2FkRmlsZVRlbXBsYXRlKSk7CisgICAgU3RyaW5nIHRlbXBsYXRlUGF0dGVybiA9IFN0
cmluZyh0ZW1wbGF0ZUZpbGUuZ2V0KCkpLnJlcGxhY2UoIlgiLCAiPyIpOwogCi0gICAgdXBkYXRl
QnVmZmVyaW5nU3RhdHVzKG1vZGUsIHBlcmNlbnRhZ2UpOworICAgIGZvciAoYXV0byYgZmlsZVBh
dGggOiBGaWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHRlbXBsYXRlUGF0aC5nZXQoKSwgdGVtcGxh
dGVQYXR0ZXJuKSkgeworICAgICAgICBpZiAoVU5MSUtFTFkoIUZpbGVTeXN0ZW06OmRlbGV0ZUZp
bGUoZmlsZVBhdGgpKSkgeworICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNvdWxkbid0IHVubGlu
ayBsZWdhY3kgbWVkaWEgdGVtcG9yYXJ5IGZpbGU6ICVzIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIEdTVF9UUkFD
RSgiVW5saW5rZWQgbGVnYWN5IG1lZGlhIHRlbXBvcmFyeSBmaWxlOiAlcyIsIGZpbGVQYXRoLnV0
ZjgoKS5kYXRhKCkpOworICAgIH0KIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnVwZGF0ZU1heFRpbWVMb2FkZWQoZG91YmxlIHBlcmNlbnRhZ2UpCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXN5bmNTdGF0ZUNoYW5nZURvbmUoKQogewotICAgIE1lZGlh
VGltZSBtZWRpYUR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKLSAgICBpZiAoIW1lZGlh
RHVyYXRpb24pCisgICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1cmVkKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX21heFRpbWVMb2FkZWQgPSBNZWRpYVRpbWUocGVyY2VudGFnZSAq
IHN0YXRpY19jYXN0PGRvdWJsZT4odG9Hc3RVbnNpZ25lZDY0VGltZShtZWRpYUR1cmF0aW9uKSkg
LyAxMDAsIEdTVF9TRUNPTkQpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltC
dWZmZXJpbmddIFVwZGF0ZWQgbWF4VGltZUxvYWRlZDogJXMiLCB0b1N0cmluZyhtX21heFRpbWVM
b2FkZWQpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChtX3NlZWtpbmcpIHsKKyAgICAgICAgaWYg
KG1fc2Vla0lzUGVuZGluZykKKyAgICAgICAgICAgIHVwZGF0ZVN0YXRlcygpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBz
ZWVrZWQgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9
IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICAgICAgICAgIGlmIChtX3RpbWVPZk92ZXJs
YXBwaW5nU2VlayAhPSBtX3NlZWtUaW1lICYmIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrLmlzVmFs
aWQoKSkgeworICAgICAgICAgICAgICAgIHNlZWsobV90aW1lT2ZPdmVybGFwcGluZ1NlZWspOwor
ICAgICAgICAgICAgICAgIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrID0gTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
OworCisgICAgICAgICAgICAvLyBUaGUgcGlwZWxpbmUgY2FuIHN0aWxsIGhhdmUgYSBwZW5kaW5n
IHN0YXRlLiBJbiB0aGlzIGNhc2UgYSBwb3NpdGlvbiBxdWVyeSB3aWxsIGZhaWwuCisgICAgICAg
ICAgICAvLyBSaWdodCBub3cgd2UgY2FuIHVzZSBtX3NlZWtUaW1lIGFzIGEgZmFsbGJhY2suCisg
ICAgICAgICAgICBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24gPSB0cnVl
OworICAgICAgICAgICAgdGltZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAg
ICAgICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhHc3RCdWZmZXJpbmdNb2RlIG1vZGUsIGRvdWJsZSBw
ZXJjZW50YWdlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRl
cygpCiB7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gbW9k
ZTogJXMsIHN0YXR1czogJWYlJSIsIGVudW1Ub1N0cmluZyhHU1RfVFlQRV9CVUZGRVJJTkdfTU9E
RSwgbW9kZSkuZGF0YSgpLCBwZXJjZW50YWdlKTsKKyAgICBpZiAoIW1fcGlwZWxpbmUpCisgICAg
ICAgIHJldHVybjsKIAotICAgIG1fZG93bmxvYWRGaW5pc2hlZCA9IHBlcmNlbnRhZ2UgPT0gMTAw
OwotICAgIG1fYnVmZmVyaW5nID0gIW1fZG93bmxvYWRGaW5pc2hlZDsKKyAgICBpZiAobV9lcnJv
ck9jY3VyZWQpCisgICAgICAgIHJldHVybjsKIAotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNh
c2UgR1NUX0JVRkZFUklOR19TVFJFQU06IHsKLSAgICAgICAgdXBkYXRlTWF4VGltZUxvYWRlZChw
ZXJjZW50YWdlKTsKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0
ZSA9IG1fbmV0d29ya1N0YXRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5
U3RhdGUgPSBtX3JlYWR5U3RhdGU7CisgICAgR3N0U3RhdGUgcGVuZGluZzsKKyAgICBHc3RTdGF0
ZSBzdGF0ZTsKKyAgICBib29sIHN0YXRlUmVhbGx5Q2hhbmdlZCA9IGZhbHNlOwogCi0gICAgICAg
IG1fYnVmZmVyaW5nUGVyY2VudGFnZSA9IHBlcmNlbnRhZ2U7Ci0gICAgICAgIGlmIChtX2Rvd25s
b2FkRmluaXNoZWQpCi0gICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKKyAgICBHc3RTdGF0ZUNo
YW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCAmc3RhdGUsICZwZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7CisgICAgaWYg
KHN0YXRlICE9IG1fY3VycmVudFN0YXRlKSB7CisgICAgICAgIG1fb2xkU3RhdGUgPSBtX2N1cnJl
bnRTdGF0ZTsKKyAgICAgICAgbV9jdXJyZW50U3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgc3RhdGVS
ZWFsbHlDaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHNob3VsZFVwZGF0ZVBsYXli
YWNrU3RhdGUgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKGdldFN0YXRlUmVzdWx0KSB7CisgICAgY2Fz
ZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6IHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGlu
ZykpOworCisgICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBzdGF0ZSBjaGFuZ2Vk
IHRvIFJFQURZIHRvIGF2b2lkIHJlY3JlYXRpbmcgdGhlIHBsYXllcgorICAgICAgICAvLyBvbiBI
VE1MTWVkaWFFbGVtZW50IGFuZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlkZW8gJ2VuZGVkJyBl
dmVudC4KKyAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIG1fY3VycmVudFN0YXRlID09IEdT
VF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIG1fcmVzZXRQaXBl
bGluZSA9IG1fY3VycmVudFN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWTsKKworICAgICAgICBib29s
IGRpZEJ1ZmZlcmluZyA9IG1fYnVmZmVyaW5nOworCisgICAgICAgIC8vIFVwZGF0ZSByZWFkeSBh
bmQgbmV0d29yayBzdGF0ZXMuCisgICAgICAgIHN3aXRjaCAobV9jdXJyZW50U3RhdGUpIHsKKyAg
ICAgICAgY2FzZSBHU1RfU1RBVEVfTlVMTDoKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVk
aWFQbGF5ZXI6OkVtcHR5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX1NU
QVRFX1JFQURZOgorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVN
ZXRhZGF0YTsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVtcHR5
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKKyAg
ICAgICAgY2FzZSBHU1RfU1RBVEVfUExBWUlORzoKKyAgICAgICAgICAgIGlmIChtX2J1ZmZlcmlu
ZykgeworICAgICAgICAgICAgICAgIGlmIChtX2J1ZmZlcmluZ1BlcmNlbnRhZ2UgPT0gMTAwKSB7
CisgICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZm
ZXJpbmddIENvbXBsZXRlLiIpOworICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlcmluZyA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZUVub3VnaERhdGE7CisgICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gbV9kb3du
bG9hZEZpbmlzaGVkID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZzsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOworICAgICAgICAgICAgICAgICAgICBt
X25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7CisgICAgICAgICAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAg
ICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6
OkhhdmVGdXR1cmVEYXRhOworICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkxvYWRpbmc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFN5bmMgc3RhdGVzIHdoZXJlIG5l
ZWRlZC4KKyAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsK
KyAgICAgICAgICAgIGlmICghbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQpIHsKKyAgICAgICAg
ICAgICAgICBub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOworICAgICAgICAgICAgICAgIG5v
dGlmeVBsYXllck9mTXV0ZSgpOworICAgICAgICAgICAgICAgIG1fdm9sdW1lQW5kTXV0ZUluaXRp
YWxpemVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRpZEJ1ZmZl
cmluZyAmJiAhbV9idWZmZXJpbmcgJiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7Cisg
ICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10g
UmVzdGFydGluZyBwbGF5YmFjay4iKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0
YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgeworICAgICAgICAgICAgbV9w
YXVzZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgaWYgKChtX2J1ZmZlcmluZyAmJiAhaXNMaXZl
U3RyZWFtKCkpIHx8ICFtX3BsYXliYWNrUmF0ZSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIFBhdXNpbmcgc3RyZWFtIGZvciBidWZm
ZXJpbmcuIik7CisgICAgICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVf
UEFVU0VEKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3Bh
dXNlZCA9IHRydWU7CisKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiT2xk
IHN0YXRlOiAlcywgbmV3IHN0YXRlOiAlcyAocmVxdWVzdGVkOiAlcykiLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShtX29sZFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9j
dXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX3JlcXVlc3RlZFN0YXRl
KSk7CisgICAgICAgIGlmIChtX3JlcXVlc3RlZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYg
bV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAgc2hvdWxk
VXBkYXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7CisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIlJlcXVlc3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgd2FzIGNvbXBsZXRlZCIs
IGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBFbWl0IHBsYXkgc3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiBvbmx5IHdo
ZW4gZ29pbmcgdG8gUExBWUlORyBzbyB0aGF0CisgICAgICAgIC8vIHRoZSBtZWRpYSBlbGVtZW50
IGdldHMgYSBjaGFuY2UgdG8gZW5hYmxlIGl0cyBwYWdlIHNsZWVwIGRpc2FibGVyLgorICAgICAg
ICAvLyBFbWl0dGluZyB0aGlzIG5vdGlmaWNhdGlvbiBpbiBtb3JlIGNhc2VzIHRyaWdnZXJzIHVu
d2FudGVkIGNvZGUgcGF0aHMKKyAgICAgICAgLy8gYW5kIHRlc3QgdGltZW91dHMuCisgICAgICAg
IGlmIChzdGF0ZVJlYWxseUNoYW5nZWQgJiYgKG1fb2xkU3RhdGUgIT0gbV9jdXJyZW50U3RhdGUp
ICYmIChtX29sZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgbV9jdXJyZW50U3RhdGUgPT0g
R1NUX1NUQVRFX1BMQVlJTkcpKSB7CisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxp
bmUoKSwgIlBsYXliYWNrIHN0YXRlIGNoYW5nZWQgZnJvbSAlcyB0byAlcy4gTm90aWZ5aW5nIHRo
ZSBtZWRpYSBwbGF5ZXIgY2xpZW50IiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9vbGRT
dGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSk7CisgICAg
ICAgICAgICBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfQVNZTkM6Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkFzeW5jOiBTdGF0ZTogJXMsIHBl
bmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBp
biBwcm9ncmVzcy4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0ZB
SUxVUkU6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkZhaWx1cmU6IFN0
YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJl
bnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKKyAgICAgICAg
Ly8gQ2hhbmdlIGZhaWxlZAorICAgICAgICByZXR1cm47CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hB
TkdFX05PX1BSRVJPTEw6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk5v
IHByZXJvbGw6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRf
bmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcp
KTsKKworICAgICAgICAvLyBMaXZlIHBpcGVsaW5lcyBnbyBpbiBQQVVTRUQgd2l0aG91dCBwcmVy
b2xsaW5nLgorICAgICAgICBtX2lzU3RyZWFtaW5nID0gdHJ1ZTsKKyAgICAgICAgdXBkYXRlRG93
bmxvYWRCdWZmZXJpbmdGbGFnKCk7CiAKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
R1NUX0JVRkZFUklOR19ET1dOTE9BRDogewotICAgICAgICB1cGRhdGVNYXhUaW1lTG9hZGVkKHBl
cmNlbnRhZ2UpOworICAgICAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZ
KQorICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwor
ICAgICAgICBlbHNlIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7Cisg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Cisg
ICAgICAgICAgICBtX3BhdXNlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50
U3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCisgICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNl
OwogCi0gICAgICAgIC8vIE1lZGlhIGlzIG5vdyBmdWxseSBsb2FkZWQuIEl0IHdpbGwgcGxheSBl
dmVuIGlmIG5ldHdvcmsgY29ubmVjdGlvbiBpcwotICAgICAgICAvLyBjdXQuIEJ1ZmZlcmluZyBp
cyBkb25lLCByZW1vdmUgdGhlIGZpbGwgc291cmNlIGZyb20gdGhlIG1haW4gbG9vcC4KLSAgICAg
ICAgaWYgKG1fZG93bmxvYWRGaW5pc2hlZCkKLSAgICAgICAgICAgIG1fZmlsbFRpbWVyLnN0b3Ao
KTsKKyAgICAgICAgaWYgKCFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkKKyAgICAgICAgICAg
IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwogCi0gICAgICAgIHVwZGF0
ZVN0YXRlcygpOworICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5n
OwogICAgICAgICBicmVhazsKLSAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiVW5oYW5kbGVkIGJ1ZmZlcmluZyBtb2RlOiAlcyIsIGVudW1U
b1N0cmluZyhHU1RfVFlQRV9CVUZGRVJJTkdfTU9ERSwgbW9kZSkuZGF0YSgpKTsKKyAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRWxzZSA6ICVkIiwgZ2V0U3RhdGVSZXN1bHQp
OwogICAgICAgICBicmVhazsKICAgICB9Ci19CiAKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spICYm
IFVTRShHU1RSRUFNRVJfTVBFR1RTKQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnByb2Nlc3NNcGVnVHNTZWN0aW9uKEdzdE1wZWd0c1NlY3Rpb24qIHNlY3Rpb24pCi17Ci0gICAg
QVNTRVJUKHNlY3Rpb24pOworICAgIG1fcmVxdWVzdGVkU3RhdGUgPSBHU1RfU1RBVEVfVk9JRF9Q
RU5ESU5HOwogCi0gICAgaWYgKHNlY3Rpb24tPnNlY3Rpb25fdHlwZSA9PSBHU1RfTVBFR1RTX1NF
Q1RJT05fUE1UKSB7Ci0gICAgICAgIGNvbnN0IEdzdE1wZWd0c1BNVCogcG10ID0gZ3N0X21wZWd0
c19zZWN0aW9uX2dldF9wbXQoc2VjdGlvbik7Ci0gICAgICAgIG1fbWV0YWRhdGFUcmFja3MuY2xl
YXIoKTsKLSAgICAgICAgZm9yIChndWludCBpID0gMDsgaSA8IHBtdC0+c3RyZWFtcy0+bGVuOyAr
K2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEdzdE1wZWd0c1BNVFN0cmVhbSogc3RyZWFtID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzUE1UU3RyZWFtKj4oZ19wdHJfYXJyYXlfaW5kZXgocG10
LT5zdHJlYW1zLCBpKSk7Ci0gICAgICAgICAgICBpZiAoc3RyZWFtLT5zdHJlYW1fdHlwZSA9PSAw
eDA1IHx8IHN0cmVhbS0+c3RyZWFtX3R5cGUgPj0gMHg4MCkgewotICAgICAgICAgICAgICAgIEF0
b21TdHJpbmcgcGlkID0gU3RyaW5nOjpudW1iZXIoc3RyZWFtLT5waWQpOwotICAgICAgICAgICAg
ICAgIGF1dG8gdHJhY2sgPSBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6TWV0
YWRhdGEsIEluYmFuZFRleHRUcmFja1ByaXZhdGU6OkRhdGEsIHBpZCk7CisgICAgaWYgKHNob3Vs
ZFVwZGF0ZVBsYXliYWNrU3RhdGUpCisgICAgICAgIG1fcGxheWVyLT5wbGF5YmFja1N0YXRlQ2hh
bmdlZCgpOwogCi0gICAgICAgICAgICAgICAgLy8gNC43LjEwLjEyLjIgU291cmNpbmcgaW4tYmFu
ZCB0ZXh0IHRyYWNrcwotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgdGV4dCB0cmFjaydz
IGtpbmQgaXMgbWV0YWRhdGEsIHRoZW4gc2V0IHRoZSB0ZXh0IHRyYWNrIGluLWJhbmQgbWV0YWRh
dGEgdHJhY2sgZGlzcGF0Y2gKLSAgICAgICAgICAgICAgICAvLyB0eXBlIGFzIGZvbGxvd3MsIGJh
c2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBtZWRpYSByZXNvdXJjZToKLSAgICAgICAgICAgICAgICAv
LyBMZXQgc3RyZWFtIHR5cGUgYmUgdGhlIHZhbHVlIG9mIHRoZSAic3RyZWFtX3R5cGUiIGZpZWxk
IGRlc2NyaWJpbmcgdGhlIHRleHQgdHJhY2sncyB0eXBlIGluIHRoZQotICAgICAgICAgICAgICAg
IC8vIGZpbGUncyBwcm9ncmFtIG1hcCBzZWN0aW9uLCBpbnRlcnByZXRlZCBhcyBhbiA4LWJpdCB1
bnNpZ25lZCBpbnRlZ2VyLiBMZXQgbGVuZ3RoIGJlIHRoZSB2YWx1ZSBvZgotICAgICAgICAgICAg
ICAgIC8vIHRoZSAiRVNfaW5mb19sZW5ndGgiIGZpZWxkIGZvciB0aGUgdHJhY2sgaW4gdGhlIHNh
bWUgcGFydCBvZiB0aGUgcHJvZ3JhbSBtYXAgc2VjdGlvbiwgaW50ZXJwcmV0ZWQKLSAgICAgICAg
ICAgICAgICAvLyBhcyBhbiBpbnRlZ2VyIGFzIGRlZmluZWQgYnkgdGhlIE1QRUctMiBzcGVjaWZp
Y2F0aW9uLiBMZXQgZGVzY3JpcHRvciBieXRlcyBiZSB0aGUgbGVuZ3RoIGJ5dGVzCi0gICAgICAg
ICAgICAgICAgLy8gZm9sbG93aW5nIHRoZSAiRVNfaW5mb19sZW5ndGgiIGZpZWxkLiBUaGUgdGV4
dCB0cmFjayBpbi1iYW5kIG1ldGFkYXRhIHRyYWNrIGRpc3BhdGNoIHR5cGUgbXVzdCBiZQotICAg
ICAgICAgICAgICAgIC8vIHNldCB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyZWFtIHR5
cGUgYnl0ZSBhbmQgdGhlIHplcm8gb3IgbW9yZSBkZXNjcmlwdG9yIGJ5dGVzIGJ5dGVzLAotICAg
ICAgICAgICAgICAgIC8vIGV4cHJlc3NlZCBpbiBoZXhhZGVjaW1hbCB1c2luZyB1cHBlcmNhc2Ug
QVNDSUkgaGV4IGRpZ2l0cy4KLSAgICAgICAgICAgICAgICBTdHJpbmcgaW5iYW5kTWV0YWRhdGFU
cmFja0Rpc3BhdGNoVHlwZTsKLSAgICAgICAgICAgICAgICBhcHBlbmRVbnNpZ25lZEFzSGV4Rml4
ZWRTaXplKHN0cmVhbS0+c3RyZWFtX3R5cGUsIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5
cGUsIDIpOwotICAgICAgICAgICAgICAgIGZvciAoZ3VpbnQgaiA9IDA7IGogPCBzdHJlYW0tPmRl
c2NyaXB0b3JzLT5sZW47ICsraikgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RNcGVn
dHNEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gc3RhdGljX2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzRGVz
Y3JpcHRvcio+KGdfcHRyX2FycmF5X2luZGV4KHN0cmVhbS0+ZGVzY3JpcHRvcnMsIGopKTsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChndWludCBrID0gMDsgayA8IGRlc2NyaXB0b3ItPmxlbmd0
aDsgKytrKQotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGRlc2NyaXB0
b3ItPmRhdGFba10sIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB0cmFjay0+c2V0SW5CYW5kTWV0YWRhdGFUcmFja0Rp
c3BhdGNoVHlwZShpbmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKTsKKyAgICBpZiAobV9u
ZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0YXRlKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIk5ldHdvcmsgU3RhdGUgQ2hhbmdlZCBmcm9tICVzIHRvICVzIiwgY29u
dmVydEVudW1lcmF0aW9uVG9TdHJpbmcob2xkTmV0d29ya1N0YXRlKS51dGY4KCkuZGF0YSgpLCBj
b252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhtX25ldHdvcmtTdGF0ZSkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlm
IChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgeworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJSZWFkeSBTdGF0ZSBDaGFuZ2VkIGZyb20gJXMgdG8gJXMiLCBjb252
ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhvbGRSZWFkeVN0YXRlKS51dGY4KCkuZGF0YSgpLCBjb252
ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhtX3JlYWR5U3RhdGUpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CiAKLSAgICAgICAgICAg
ICAgICBtX21ldGFkYXRhVHJhY2tzLmFkZChwaWQsIHRyYWNrKTsKLSAgICAgICAgICAgICAgICBt
X3BsYXllci0+YWRkVGV4dFRyYWNrKCp0cmFjayk7CisgICAgaWYgKGdldFN0YXRlUmVzdWx0ID09
IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAmJiBtX2N1cnJlbnRTdGF0ZSA+PSBHU1RfU1RBVEVf
UEFVU0VEKSB7CisgICAgICAgIHVwZGF0ZVBsYXliYWNrUmF0ZSgpOworICAgICAgICBpZiAobV9z
ZWVrSXNQZW5kaW5nKSB7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJbU2Vla10gY29tbWl0dGluZyBwZW5kaW5nIHNlZWsgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtU
aW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fc2Vla0lzUGVuZGluZyA9IGZhbHNl
OworICAgICAgICAgICAgbV9zZWVraW5nID0gZG9TZWVrKG1fc2Vla1RpbWUsIG1fcGxheWVyLT5y
YXRlKCksIHN0YXRpY19jYXN0PEdzdFNlZWtGbGFncz4oR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdT
VF9TRUVLX0ZMQUdfQUNDVVJBVEUpKTsKKyAgICAgICAgICAgIGlmICghbV9zZWVraW5nKSB7Cisg
ICAgICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KTsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10g
c2Vla2luZyB0byAlcyBmYWlsZWQiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEF0b21T
dHJpbmcgcGlkID0gU3RyaW5nOjpudW1iZXIoc2VjdGlvbi0+cGlkKTsKLSAgICAgICAgUmVmUHRy
PEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBtX21ldGFk
YXRhVHJhY2tzLmdldChwaWQpOwotICAgICAgICBpZiAoIXRyYWNrKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIEdSZWZQdHI8R0J5dGVzPiBkYXRhID0gZ3N0X21wZWd0c19zZWN0aW9u
X2dldF9kYXRhKHNlY3Rpb24pOwotICAgICAgICBnc2l6ZSBzaXplOwotICAgICAgICBjb25zdCB2
b2lkKiBieXRlcyA9IGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgJnNpemUpOwotCi0gICAg
ICAgIHRyYWNrLT5hZGREYXRhQ3VlKGN1cnJlbnRNZWRpYVRpbWUoKSwgY3VycmVudE1lZGlhVGlt
ZSgpLCBieXRlcywgc2l6ZSk7CiAgICAgfQogfQotI2VuZGlmCiAKLSNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZD
b250ZW50cyhHc3RNZXNzYWdlKiBtZXNzYWdlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om1lZGlhTG9jYXRpb25DaGFuZ2VkKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiB7Ci0gICAg
aWYgKG1fY2hhcHRlcnNUcmFjaykKLSAgICAgICAgbV9wbGF5ZXItPnJlbW92ZVRleHRUcmFjaygq
bV9jaGFwdGVyc1RyYWNrKTsKKyAgICBpZiAobV9tZWRpYUxvY2F0aW9ucykKKyAgICAgICAgZ3N0
X3N0cnVjdHVyZV9mcmVlKG1fbWVkaWFMb2NhdGlvbnMpOwogCi0gICAgbV9jaGFwdGVyc1RyYWNr
ID0gSW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZTo6Q2hhcHRlcnMsIEluYmFuZFRleHRUcmFja1ByaXZhdGU6OkdlbmVy
aWMpOwotICAgIG1fcGxheWVyLT5hZGRUZXh0VHJhY2soKm1fY2hhcHRlcnNUcmFjayk7CisgICAg
Y29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJl
KG1lc3NhZ2UpOworICAgIGlmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gVGhpcyBzdHJ1Y3R1
cmUgY2FuIGNvbnRhaW46CisgICAgICAgIC8vIC0gYm90aCBhIG5ldy1sb2NhdGlvbiBzdHJpbmcg
YW5kIGVtYmVkZGVkIGxvY2F0aW9ucyBzdHJ1Y3R1cmUKKyAgICAgICAgLy8gLSBvciBvbmx5IGEg
bmV3LWxvY2F0aW9uIHN0cmluZy4KKyAgICAgICAgbV9tZWRpYUxvY2F0aW9ucyA9IGdzdF9zdHJ1
Y3R1cmVfY29weShzdHJ1Y3R1cmUpOworICAgICAgICBjb25zdCBHVmFsdWUqIGxvY2F0aW9ucyA9
IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKG1fbWVkaWFMb2NhdGlvbnMsICJsb2NhdGlvbnMiKTsK
IAotICAgIEdSZWZQdHI8R3N0VG9jPiB0b2M7Ci0gICAgZ2Jvb2xlYW4gdXBkYXRlZDsKLSAgICBn
c3RfbWVzc2FnZV9wYXJzZV90b2MobWVzc2FnZSwgJnRvYy5vdXRQdHIoKSwgJnVwZGF0ZWQpOwot
ICAgIEFTU0VSVCh0b2MpOworICAgICAgICBpZiAobG9jYXRpb25zKQorICAgICAgICAgICAgbV9t
ZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4ID0gc3RhdGljX2Nhc3Q8aW50Pihnc3RfdmFsdWVfbGlz
dF9nZXRfc2l6ZShsb2NhdGlvbnMpKSAtMTsKIAotICAgIGZvciAoR0xpc3QqIGkgPSBnc3RfdG9j
X2dldF9lbnRyaWVzKHRvYy5nZXQoKSk7IGk7IGkgPSBpLT5uZXh0KQotICAgICAgICBwcm9jZXNz
VGFibGVPZkNvbnRlbnRzRW50cnkoc3RhdGljX2Nhc3Q8R3N0VG9jRW50cnkqPihpLT5kYXRhKSk7
CisgICAgICAgIGxvYWROZXh0TG9jYXRpb24oKTsKKyAgICB9CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNvbnRlbnRzRW50cnkoR3N0VG9jRW50
cnkqIGVudHJ5KQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9j
YXRpb24oKQogewotICAgIEFTU0VSVChlbnRyeSk7CisgICAgaWYgKCFtX21lZGlhTG9jYXRpb25z
KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGN1ZSA9IEdlbmVyaWNDdWVEYXRh
OjpjcmVhdGUoKTsKKyAgICBjb25zdCBHVmFsdWUqIGxvY2F0aW9ucyA9IGdzdF9zdHJ1Y3R1cmVf
Z2V0X3ZhbHVlKG1fbWVkaWFMb2NhdGlvbnMsICJsb2NhdGlvbnMiKTsKKyAgICBjb25zdCBnY2hh
ciogbmV3TG9jYXRpb24gPSBudWxscHRyOwogCi0gICAgZ2ludDY0IHN0YXJ0ID0gLTEsIHN0b3Ag
PSAtMTsKLSAgICBnc3RfdG9jX2VudHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzKGVudHJ5LCAmc3Rh
cnQsICZzdG9wKTsKLSAgICBpZiAoc3RhcnQgIT0gLTEpCi0gICAgICAgIGN1ZS0+c2V0U3RhcnRU
aW1lKE1lZGlhVGltZShzdGFydCwgR1NUX1NFQ09ORCkpOwotICAgIGlmIChzdG9wICE9IC0xKQot
ICAgICAgICBjdWUtPnNldEVuZFRpbWUoTWVkaWFUaW1lKHN0b3AsIEdTVF9TRUNPTkQpKTsKKyAg
ICBpZiAoIWxvY2F0aW9ucykgeworICAgICAgICAvLyBGYWxsYmFjayBvbiBuZXctbG9jYXRpb24g
c3RyaW5nLgorICAgICAgICBuZXdMb2NhdGlvbiA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyht
X21lZGlhTG9jYXRpb25zLCAibmV3LWxvY2F0aW9uIik7CisgICAgICAgIGlmICghbmV3TG9jYXRp
b24pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgR3N0VGFnTGlzdCog
dGFncyA9IGdzdF90b2NfZW50cnlfZ2V0X3RhZ3MoZW50cnkpOwotICAgIGlmICh0YWdzKSB7Ci0g
ICAgICAgIGdjaGFyKiB0aXRsZSA9IG51bGxwdHI7Ci0gICAgICAgIGdzdF90YWdfbGlzdF9nZXRf
c3RyaW5nKHRhZ3MsIEdTVF9UQUdfVElUTEUsICZ0aXRsZSk7Ci0gICAgICAgIGlmICh0aXRsZSkg
ewotICAgICAgICAgICAgY3VlLT5zZXRDb250ZW50KHRpdGxlKTsKLSAgICAgICAgICAgIGdfZnJl
ZSh0aXRsZSk7CisgICAgaWYgKCFuZXdMb2NhdGlvbikgeworICAgICAgICBpZiAobV9tZWRpYUxv
Y2F0aW9uQ3VycmVudEluZGV4IDwgMCkgeworICAgICAgICAgICAgbV9tZWRpYUxvY2F0aW9ucyA9
IG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBHVmFsdWUqIGxvY2F0aW9uID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlKGxvY2F0
aW9ucywgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4KTsKKyAgICAgICAgY29uc3QgR3N0U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZShsb2NhdGlvbik7CisK
KyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIG1fbWVkaWFMb2NhdGlvbkN1
cnJlbnRJbmRleC0tOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CisKKyAg
ICAgICAgbmV3TG9jYXRpb24gPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAi
bmV3LWxvY2F0aW9uIik7CiAgICAgfQogCi0gICAgbV9jaGFwdGVyc1RyYWNrLT5hZGRHZW5lcmlj
Q3VlKGN1ZSk7CisgICAgaWYgKG5ld0xvY2F0aW9uKSB7CisgICAgICAgIC8vIEZvdW5kIGEgY2Fu
ZGlkYXRlLiBuZXctbG9jYXRpb24gaXMgbm90IGFsd2F5cyBhbiBhYnNvbHV0ZSB1cmwKKyAgICAg
ICAgLy8gdGhvdWdoLiBXZSBuZWVkIHRvIHRha2UgdGhlIGJhc2Ugb2YgdGhlIGN1cnJlbnQgdXJs
IGFuZAorICAgICAgICAvLyBhcHBlbmQgdGhlIHZhbHVlIG9mIG5ldy1sb2NhdGlvbiB0byBpdC4K
KyAgICAgICAgVVJMIGJhc2VVcmwgPSBnc3RfdXJpX2lzX3ZhbGlkKG5ld0xvY2F0aW9uKSA/IFVS
TCgpIDogbV91cmw7CisgICAgICAgIFVSTCBuZXdVcmwgPSBVUkwoYmFzZVVybCwgbmV3TG9jYXRp
b24pOwogCi0gICAgZm9yIChHTGlzdCogaSA9IGdzdF90b2NfZW50cnlfZ2V0X3N1Yl9lbnRyaWVz
KGVudHJ5KTsgaTsgaSA9IGktPm5leHQpCi0gICAgICAgIHByb2Nlc3NUYWJsZU9mQ29udGVudHNF
bnRyeShzdGF0aWNfY2FzdDxHc3RUb2NFbnRyeSo+KGktPmRhdGEpKTsKLX0KKyAgICAgICAgR1Vu
aXF1ZU91dFB0cjxnY2hhcj4gcGxheWJpblVybFN0cjsKKyAgICAgICAgZ19vYmplY3RfZ2V0KG1f
cGlwZWxpbmUuZ2V0KCksICJjdXJyZW50LXVyaSIsICZwbGF5YmluVXJsU3RyLm91dFB0cigpLCBu
dWxscHRyKTsKKyAgICAgICAgVVJMIHBsYXliaW5VcmwoVVJMKCksIHBsYXliaW5VcmxTdHIuZ2V0
KCkpOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJbnZhbGlkQXVk
aW9UcmFja3MoVmVjdG9yPFN0cmluZz4gdmFsaWRUcmFja0lkcykKLXsKLSAgICBtX2F1ZGlvVHJh
Y2tzLnJlbW92ZUlmKFt2YWxpZFRyYWNrSWRzXShhdXRvJiBrZXlBbmRWYWx1ZSkgewotICAgICAg
ICByZXR1cm4gIXZhbGlkVHJhY2tJZHMuY29udGFpbnMoa2V5QW5kVmFsdWUua2V5KTsKLSAgICB9
KTsKLX0KKyAgICAgICAgaWYgKHBsYXliaW5VcmwgPT0gbmV3VXJsKSB7CisgICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5YmluIGFscmVhZHkgaGFuZGxlZCByZWRp
cmVjdGlvbi4iKTsKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52
YWxpZFZpZGVvVHJhY2tzKFZlY3RvcjxTdHJpbmc+IHZhbGlkVHJhY2tJZHMpCi17Ci0gICAgbV92
aWRlb1RyYWNrcy5yZW1vdmVJZihbdmFsaWRUcmFja0lkc10oYXV0byYga2V5QW5kVmFsdWUpIHsK
LSAgICAgICAgcmV0dXJuICF2YWxpZFRyYWNrSWRzLmNvbnRhaW5zKGtleUFuZFZhbHVlLmtleSk7
Ci0gICAgfSk7Ci19CisgICAgICAgICAgICBtX3VybCA9IHBsYXliaW5Vcmw7CiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRUZXh0VHJhY2tzKFZlY3RvcjxT
dHJpbmc+IHZhbGlkVHJhY2tJZHMpCi17Ci0gICAgbV90ZXh0VHJhY2tzLnJlbW92ZUlmKFt2YWxp
ZFRyYWNrSWRzXShhdXRvJiBrZXlBbmRWYWx1ZSkgewotICAgICAgICByZXR1cm4gIXZhbGlkVHJh
Y2tJZHMuY29udGFpbnMoa2V5QW5kVmFsdWUua2V5KTsKLSAgICB9KTsKLX0KLSNlbmRpZgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKCkKLXsKLSAgICBpZiAobV9lcnJvck9jY3VyZWQp
IHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gQW4g
ZXJyb3Igb2NjdXJyZWQsIGRpc2FibGluZyB0aGUgZmlsbCB0aW1lciIpOwotICAgICAgICBtX2Zp
bGxUaW1lci5zdG9wKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIGNoYW5nZVBp
cGVsaW5lU3RhdGUoR1NUX1NUQVRFX1JFQURZKTsKKyAgICAgICAgYXV0byBzZWN1cml0eU9yaWdp
biA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobV91cmwpOworICAgICAgICBpZiAoc2VjdXJpdHlP
cmlnaW4tPmNhblJlcXVlc3QobmV3VXJsKSkgeworICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNU
KHBpcGVsaW5lKCksICJOZXcgbWVkaWEgdXJsOiAlcyIsIG5ld1VybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKIAotICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9x
dWVyeV9uZXdfYnVmZmVyaW5nKEdTVF9GT1JNQVRfUEVSQ0VOVCkpOwotICAgIGRvdWJsZSBmaWxs
U3RhdHVzID0gMTAwLjA7Ci0gICAgR3N0QnVmZmVyaW5nTW9kZSBtb2RlID0gR1NUX0JVRkZFUklO
R19ET1dOTE9BRDsKKyAgICAgICAgICAgIC8vIFJlc2V0IHBsYXllciBzdGF0ZXMuCisgICAgICAg
ICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAg
bV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgICAgIG1fcGxheWVyLT5yZWFk
eVN0YXRlQ2hhbmdlZCgpOwogCi0gICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fc291cmNlLmdl
dCgpLCBxdWVyeS5nZXQoKSkpIHsKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19z
dGF0cyhxdWVyeS5nZXQoKSwgJm1vZGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworICAg
ICAgICAgICAgLy8gUmVzZXQgcGlwZWxpbmUgc3RhdGUuCisgICAgICAgICAgICBtX3Jlc2V0UGlw
ZWxpbmUgPSB0cnVlOwogCi0gICAgICAgIGludCBwZXJjZW50YWdlOwotICAgICAgICBnc3RfcXVl
cnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQocXVlcnkuZ2V0KCksIG51bGxwdHIsICZwZXJjZW50
YWdlKTsKLSAgICAgICAgZmlsbFN0YXR1cyA9IHBlcmNlbnRhZ2U7Ci0gICAgfSBlbHNlIGlmICht
X2h0dHBSZXNwb25zZVRvdGFsU2l6ZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJbQnVmZmVyaW5nXSBRdWVyeSBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBuZXR3b3Jr
IHJlYWQgcG9zaXRpb24gZXN0aW1hdGlvbiIpOwotICAgICAgICBmaWxsU3RhdHVzID0gMTAwLjAg
KiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX25ldHdvcmtSZWFkUG9zaXRpb24pIC8gc3RhdGljX2Nh
c3Q8ZG91YmxlPihtX2h0dHBSZXNwb25zZVRvdGFsU2l6ZSkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIFVuYWJsZSB0byBk
ZXRlcm1pbmUgb24tZGlzayBidWZmZXJpbmcgc3RhdHVzIik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIEdzdFN0YXRlIHN0YXRlOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0
YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7CisgICAgICAgICAgICBp
ZiAoc3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZKSB7CisgICAgICAgICAgICAgICAgLy8gU2V0IHRo
ZSBuZXcgdXJpIGFuZCBzdGFydCBwbGF5aW5nLgorICAgICAgICAgICAgICAgIHNldFBsYXliaW5V
UkwobmV3VXJsKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFU
RV9QTEFZSU5HKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
Ik5vdCBhbGxvd2VkIHRvIGxvYWQgbmV3IG1lZGlhIGxvY2F0aW9uOiAlcyIsIG5ld1VybC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisgICAgbV9tZWRpYUxvY2F0aW9uQ3VycmVudElu
ZGV4LS07CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6ZGlkRW5kKCkKK3sKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlBs
YXliYWNrIGVuZGVkIik7CisKKyAgICAvLyBTeW5jaHJvbml6ZSBwb3NpdGlvbiBhbmQgZHVyYXRp
b24gdmFsdWVzIHRvIG5vdCBjb25mdXNlIHRoZQorICAgIC8vIEhUTUxNZWRpYUVsZW1lbnQuIElu
IHNvbWUgY2FzZXMgbGlrZSByZXZlcnNlIHBsYXliYWNrIHRoZQorICAgIC8vIHBvc2l0aW9uIGlz
IG5vdCBhbHdheXMgcmVwb3J0ZWQgYXMgMCBmb3IgaW5zdGFuY2UuCisgICAgbV9jYWNoZWRQb3Np
dGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICBNZWRpYVRpbWUgbm93ID0gY3Vy
cmVudE1lZGlhVGltZSgpOworICAgIGlmIChub3cgPiBNZWRpYVRpbWU6Onplcm9UaW1lKCkgJiYg
IW1fc2Vla2luZykgeworICAgICAgICBtX2NhY2hlZER1cmF0aW9uID0gbm93OworICAgICAgICBt
X3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7CiAgICAgfQogCi0gICAgdXBkYXRlQnVmZmVyaW5n
U3RhdHVzKG1vZGUsIGZpbGxTdGF0dXMpOworICAgIG1faXNFbmRSZWFjaGVkID0gdHJ1ZTsKKwor
ICAgIGlmICghbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVySXNMb29waW5nKCkpIHsKKyAg
ICAgICAgbV9wYXVzZWQgPSB0cnVlOworICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9T
VEFURV9SRUFEWSk7CisgICAgICAgIG1fZG93bmxvYWRGaW5pc2hlZCA9IGZhbHNlOworICAgIH0K
KyAgICB0aW1lQ2hhbmdlZCgpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjptYXhNZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0Cit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2Fz
ZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQogewotICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxp
bmUoKSwgImVycm9yT2NjdXJlZDogJXMsIGlzTGl2ZVN0cmVhbTogJXMiLCBib29sRm9yUHJpbnRp
bmcobV9lcnJvck9jY3VyZWQpLCBib29sRm9yUHJpbnRpbmcoaXNMaXZlU3RyZWFtKCkpKTsKLSAg
ICBpZiAobV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1l
KCk7Ci0KLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6
Onplcm9UaW1lKCk7Ci0KLSAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBkdXJhdGlvbk1lZGlhVGlt
ZSgpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIm1heE1lZGlhVGltZVNlZWth
YmxlLCBkdXJhdGlvbjogJXMiLCB0b1N0cmluZyhkdXJhdGlvbikudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgLy8gaW5maW5pdGUgZHVyYXRpb24gbWVhbnMgbGl2ZSBzdHJlYW0KLSAgICBpZiAoZHVyYXRp
b24uaXNQb3NpdGl2ZUluZmluaXRlKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9U
aW1lKCk7Ci0KLSAgICByZXR1cm4gZHVyYXRpb247CisgICAgYXV0byYgZ3N0UmVnaXN0cnlTY2Fu
bmVyID0gR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyOjpzaW5nbGV0b24oKTsKKyAgICB0eXBlcyA9
IGdzdFJlZ2lzdHJ5U2Nhbm5lci5taW1lVHlwZVNldCgpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhUaW1lTG9hZGVkKCkgY29uc3QKK01lZGlhUGxheWVy
OjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c1R5cGUo
Y29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKLSAgICBp
ZiAobV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7
CisgICAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSByZXN1bHQgPSBNZWRpYVBsYXllcjo6SXNO
b3RTdXBwb3J0ZWQ7CisjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKyAgICAvLyBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UgaXMgaW4gY2hhcmdlIG9mIG1lZGlhc291cmNlIHBsYXliYWNr
LCBub3QgdXMuCisgICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVNvdXJjZSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyNlbmRpZgogCi0gICAgTWVkaWFUaW1lIGxvYWRlZCA9IG1fbWF4VGltZUxv
YWRlZDsKLSAgICBpZiAobV9pc0VuZFJlYWNoZWQpCi0gICAgICAgIGxvYWRlZCA9IGR1cmF0aW9u
TWVkaWFUaW1lKCk7Ci0gICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIm1heFRpbWVMb2Fk
ZWQ6ICVzIiwgdG9TdHJpbmcobG9hZGVkKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gbG9h
ZGVkOwotfQorI2lmICFFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIGlmIChwYXJhbWV0ZXJzLmlz
TWVkaWFTdHJlYW0pCisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKIAotYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fZXJyb3JPY2N1cmVkIHx8IG1fbG9hZGluZ1N0YWxsZWQpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAocGFyYW1ldGVycy50eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKIAotICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkp
IHsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIkxhc3QgbmV0d29yayByZWFk
IHBvc2l0aW9uOiAlIiBHX0dVSU5UNjRfRk9STUFUICIsIGN1cnJlbnQ6ICUiIEdfR1VJTlQ2NF9G
T1JNQVQsIG1fcmVhZFBvc2l0aW9uQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzLCBtX25ldHdvcmtS
ZWFkUG9zaXRpb24pOwotICAgICAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcyA9IG1fcmVhZFBv
c2l0aW9uQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzIDwgbV9uZXR3b3JrUmVhZFBvc2l0aW9uOwot
ICAgICAgICBtX3JlYWRQb3NpdGlvbkF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyA9IG1fbmV0d29y
a1JlYWRQb3NpdGlvbjsKLSAgICAgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgImRpZExv
YWRpbmdQcm9ncmVzczogJXMiLCBib29sRm9yUHJpbnRpbmcoZGlkTG9hZGluZ1Byb2dyZXNzKSk7
Ci0gICAgICAgIHJldHVybiBkaWRMb2FkaW5nUHJvZ3Jlc3M7CisgICAgR1NUX0RFQlVHKCJDaGVj
a2luZyBtaW1lLXR5cGUgXCIlc1wiIiwgcGFyYW1ldGVycy50eXBlLnJhdygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGF1dG8gY29udGFpbmVyVHlwZSA9IHBhcmFtZXRlcnMudHlwZS5jb250YWluZXJU
eXBlKCk7CisgICAgYXV0byYgZ3N0UmVnaXN0cnlTY2FubmVyID0gR1N0cmVhbWVyUmVnaXN0cnlT
Y2FubmVyOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoZ3N0UmVnaXN0cnlTY2FubmVyLmlzQ29udGFp
bmVyVHlwZVN1cHBvcnRlZChjb250YWluZXJUeXBlKSkgeworICAgICAgICAvLyBTcGVjIHNheXMg
d2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29kZWNzIHN0cmluZyBpcyBl
bXB0eS4KKyAgICAgICAgVmVjdG9yPFN0cmluZz4gY29kZWNzID0gcGFyYW1ldGVycy50eXBlLmNv
ZGVjcygpOworICAgICAgICByZXN1bHQgPSBjb2RlY3MuaXNFbXB0eSgpID8gTWVkaWFQbGF5ZXI6
Ok1heUJlU3VwcG9ydGVkIDogKGdzdFJlZ2lzdHJ5U2Nhbm5lci5hcmVBbGxDb2RlY3NTdXBwb3J0
ZWQoY29kZWNzKSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1lZGlhUGxheWVyOjpJc05v
dFN1cHBvcnRlZCk7CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8ICFk
dXJhdGlvbk1lZGlhVGltZSgpIHx8ICghaXNNZWRpYVNvdXJjZSgpICYmICF0b3RhbEJ5dGVzKCkp
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTWVkaWFUaW1lIGN1cnJlbnRNYXhUaW1l
TG9hZGVkID0gbWF4VGltZUxvYWRlZCgpOwotICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzID0g
Y3VycmVudE1heFRpbWVMb2FkZWQgIT0gbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1By
b2dyZXNzOwotICAgIG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyA9IGN1
cnJlbnRNYXhUaW1lTG9hZGVkOwotICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJkaWRM
b2FkaW5nUHJvZ3Jlc3M6ICVzIiwgYm9vbEZvclByaW50aW5nKGRpZExvYWRpbmdQcm9ncmVzcykp
OwotICAgIHJldHVybiBkaWRMb2FkaW5nUHJvZ3Jlc3M7CisgICAgYXV0byBmaW5hbFJlc3VsdCA9
IGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMsIHJlc3VsdCk7CisgICAgR1NUX0RFQlVH
KCJTdXBwb3J0ZWQ6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcoZmluYWxSZXN1bHQp
LnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBmaW5hbFJlc3VsdDsKIH0KIAotdW5zaWduZWQg
bG9uZyBsb25nIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcygpIGNvbnN0
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlRG93bmxvYWRCdWZmZXJp
bmdGbGFnKCkKIHsKLSAgICBpZiAobV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybiAwOwor
ICAgIGlmICghbV9waXBlbGluZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fdG90YWxC
eXRlcykKLSAgICAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKKyAgICB1bnNpZ25lZCBmbGFnczsK
KyAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwgJmZsYWdzLCBudWxs
cHRyKTsKIAotICAgIGlmICghbV9zb3VyY2UpCi0gICAgICAgIHJldHVybiAwOworICAgIHVuc2ln
bmVkIGZsYWdEb3dubG9hZCA9IGdldEdzdFBsYXlGbGFnKCJkb3dubG9hZCIpOwogCi0gICAgaWYg
KGlzTGl2ZVN0cmVhbSgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBXZSBkb24ndCB3YW50
IHRvIHN0b3AgZG93bmxvYWRpbmcgaWYgd2UgYWxyZWFkeSBzdGFydGVkIGl0LgorICAgIGlmIChm
bGFncyAmIGZsYWdEb3dubG9hZCAmJiBtX3JlYWR5U3RhdGUgPiBNZWRpYVBsYXllcjo6SGF2ZU5v
dGhpbmcgJiYgIW1fcmVzZXRQaXBlbGluZSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBp
cGVsaW5lKCksICJEb3dubG9hZCBhbHJlYWR5IHN0YXJ0ZWQsIG5vdCBzdGFydGluZyBhZ2FpbiIp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgR3N0Rm9ybWF0IGZtdCA9IEdTVF9GT1JN
QVRfQllURVM7Ci0gICAgZ2ludDY0IGxlbmd0aCA9IDA7Ci0gICAgaWYgKGdzdF9lbGVtZW50X3F1
ZXJ5X2R1cmF0aW9uKG1fc291cmNlLmdldCgpLCBmbXQsICZsZW5ndGgpKSB7Ci0gICAgICAgIEdT
VF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9GT1JNQVQs
IGxlbmd0aCk7Ci0gICAgICAgIG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4obGVuZ3RoKTsKLSAgICAgICAgbV9pc1N0cmVhbWluZyA9ICFsZW5ndGg7Ci0gICAg
ICAgIHJldHVybiBtX3RvdGFsQnl0ZXM7CisgICAgYm9vbCBzaG91bGREb3dubG9hZCA9ICFpc0xp
dmVTdHJlYW0oKSAmJiBtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6OkF1dG87CisgICAgaWYgKHNo
b3VsZERvd25sb2FkKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiRW5h
Ymxpbmcgb24tZGlzayBidWZmZXJpbmciKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxp
bmUuZ2V0KCksICJmbGFncyIsIGZsYWdzIHwgZmxhZ0Rvd25sb2FkLCBudWxscHRyKTsKKyAgICAg
ICAgbV9maWxsVGltZXIuc3RhcnRSZXBlYXRpbmcoMjAwX21zKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkRpc2FibGluZyBvbi1kaXNrIGJ1ZmZl
cmluZyIpOworICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwg
ZmxhZ3MgJiB+ZmxhZ0Rvd25sb2FkLCBudWxscHRyKTsKKyAgICAgICAgbV9maWxsVGltZXIuc3Rv
cCgpOwogICAgIH0KK30KIAotICAgIC8vIEZhbGwgYmFjayB0byBxdWVyeWluZyB0aGUgc291cmNl
IHBhZHMgbWFudWFsbHkuCi0gICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5v
cmcvc2hvd19idWcuY2dpP2lkPTYzODc0OQotICAgIEdzdEl0ZXJhdG9yKiBpdGVyID0gZ3N0X2Vs
ZW1lbnRfaXRlcmF0ZV9zcmNfcGFkcyhtX3NvdXJjZS5nZXQoKSk7Ci0gICAgYm9vbCBkb25lID0g
ZmFsc2U7Ci0gICAgd2hpbGUgKCFkb25lKSB7Ci0gICAgICAgIEdWYWx1ZSBpdGVtID0gR19WQUxV
RV9JTklUOwotICAgICAgICBzd2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0KGl0ZXIsICZpdGVtKSkg
ewotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9PSzogewotICAgICAgICAgICAgR3N0UGFkKiBw
YWQgPSBzdGF0aWNfY2FzdDxHc3RQYWQqPihnX3ZhbHVlX2dldF9vYmplY3QoJml0ZW0pKTsKLSAg
ICAgICAgICAgIGdpbnQ2NCBwYWRMZW5ndGggPSAwOwotICAgICAgICAgICAgaWYgKGdzdF9wYWRf
cXVlcnlfZHVyYXRpb24ocGFkLCBmbXQsICZwYWRMZW5ndGgpICYmIHBhZExlbmd0aCA+IGxlbmd0
aCkKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBwYWRMZW5ndGg7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6Ci0gICAgICAg
ICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR1NUX0lURVJBVE9SX0VSUk9SOgotICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0g
ICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX0RPTkU6Ci0gICAgICAgICAgICBkb25lID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbihjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBw
aXBlbGluZU5hbWUpCit7CisgICAgY29uc3QgZ2NoYXIqIHBsYXliaW5OYW1lID0gInBsYXliaW4i
OwogCi0gICAgICAgIGdfdmFsdWVfdW5zZXQoJml0ZW0pOwotICAgIH0KKyAgICAvLyBNU0UgZG9l
c24ndCBzdXBwb3J0IHBsYXliaW4zLiBNZWRpYXN0cmVhbSByZXF1aXJlcyBwbGF5YmluMy4gUmVn
dWxhcgorICAgIC8vIHBsYXliYWNrIGNhbiB1c2UgcGxheWJpbjMgb24tZGVtYW5kIHdpdGggdGhl
IFdFQktJVF9HU1RfVVNFX1BMQVlCSU4zCisgICAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGUuCisg
ICAgaWYgKCghaXNNZWRpYVNvdXJjZSgpICYmIGdfZ2V0ZW52KCJXRUJLSVRfR1NUX1VTRV9QTEFZ
QklOMyIpKSB8fCB1cmwucHJvdG9jb2xJcygibWVkaWFzdHJlYW0iKSkKKyAgICAgICAgcGxheWJp
bk5hbWUgPSAicGxheWJpbjMiOwogCi0gICAgZ3N0X2l0ZXJhdG9yX2ZyZWUoaXRlcik7CisgICAg
aWYgKG1fcGlwZWxpbmUpIHsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoR1NUX09CSkVDVF9OQU1F
KGdzdF9lbGVtZW50X2dldF9mYWN0b3J5KG1fcGlwZWxpbmUuZ2V0KCkpKSwgcGxheWJpbk5hbWUp
KSB7CisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkFscmVhZHkgdXNp
bmcgJXMiLCBwbGF5YmluTmFtZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAot
ICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9G
T1JNQVQsIGxlbmd0aCk7Ci0gICAgbV90b3RhbEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihsZW5ndGgpOwotICAgIG1faXNTdHJlYW1pbmcgPSAhbGVuZ3RoOwotICAgIHJl
dHVybiBtX3RvdGFsQnl0ZXM7Ci19CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgp
LCAiVGVhcmluZyBkb3duIGFzIHdlIG5lZWQgdG8gdXNlICVzIG5vdy4iLCBwbGF5YmluTmFtZSk7
CisgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX05VTEwpOworICAgICAgICBt
X3BpcGVsaW5lID0gbnVsbHB0cjsKKyAgICB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzb3VyY2VTZXR1cENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciog
cGxheWVyLCBHc3RFbGVtZW50KiBzb3VyY2VFbGVtZW50KQotewotICAgIHBsYXllci0+c291cmNl
U2V0dXAoc291cmNlRWxlbWVudCk7Ci19CisgICAgQVNTRVJUKCFtX3BpcGVsaW5lKTsKIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENh
bGxiYWNrKEdzdEJpbiogYmluLCBHc3RFbGVtZW50KiBlbGVtZW50LCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIqIHBsYXllcikKLXsKLSAgICBpZiAoZ19zdHJjbXAwKEdfT0JKRUNUX1RZUEVf
TkFNRShlbGVtZW50KSwgIkdzdERvd25sb2FkQnVmZmVyIikpCi0gICAgICAgIHJldHVybjsKKyAg
ICBtX2lzTGVnYWN5UGxheWJpbiA9ICFnX3N0cmNtcDAocGxheWJpbk5hbWUsICJwbGF5YmluIik7
CiAKLSAgICBwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIgPSBlbGVtZW50OwotICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhiaW4sIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50
ZXI+KHVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNrKSwgcGxheWVyKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0X3N3YXBwZWQoZWxlbWVudCwgIm5vdGlmeTo6dGVtcC1sb2NhdGlvbiIsIEdf
Q0FMTEJBQ0soZG93bmxvYWRCdWZmZXJGaWxlQ3JlYXRlZENhbGxiYWNrKSwgcGxheWVyKTsKKyAg
ICAvLyBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSByZXR1cm5zIGEgZmxvYXRpbmcgcmVmZXJl
bmNlIHNvCisgICAgLy8gd2Ugc2hvdWxkIG5vdCBhZG9wdC4KKyAgICBzdGF0aWMgQXRvbWljPHVp
bnQzMl90PiBwaXBlbGluZUlkOworICAgIHNldFBpcGVsaW5lKGdzdF9lbGVtZW50X2ZhY3Rvcnlf
bWFrZShwbGF5YmluTmFtZSwKKyAgICAgICAgKHBpcGVsaW5lTmFtZS5pc0VtcHR5KCkgPyBtYWtl
U3RyaW5nKCJtZWRpYS1wbGF5ZXItIiwgcGlwZWxpbmVJZC5leGNoYW5nZUFkZCgxKSkgOiBwaXBl
bGluZU5hbWUpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KEdT
VF9TVFJFQU1fVk9MVU1FKG1fcGlwZWxpbmUuZ2V0KCkpKTsKIAotICAgIEdVbmlxdWVPdXRQdHI8
Y2hhcj4gb2xkRG93bmxvYWRUZW1wbGF0ZTsKLSAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgInRl
bXAtdGVtcGxhdGUiLCAmb2xkRG93bmxvYWRUZW1wbGF0ZS5vdXRQdHIoKSwgbnVsbHB0cik7Cisg
ICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJVc2luZyBsZWdhY3kgcGxheWJpbiBlbGVt
ZW50OiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2lzTGVnYWN5UGxheWJpbikpOwogCi0gICAgR1Vu
aXF1ZVB0cjxjaGFyPiBuZXdEb3dubG9hZFRlbXBsYXRlKGdfYnVpbGRfZmlsZW5hbWUoR19ESVJf
U0VQQVJBVE9SX1MsICJ2YXIiLCAidG1wIiwgIldlYktpdC1NZWRpYS1YWFhYWFgiLCBudWxscHRy
KSk7Ci0gICAgZ19vYmplY3Rfc2V0KGVsZW1lbnQsICJ0ZW1wLXRlbXBsYXRlIiwgbmV3RG93bmxv
YWRUZW1wbGF0ZS5nZXQoKSwgbnVsbHB0cik7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwbGF5ZXIt
PnBpcGVsaW5lKCksICJSZWNvbmZpZ3VyZWQgZmlsZSBkb3dubG9hZCB0ZW1wbGF0ZSBmcm9tICcl
cycgdG8gJyVzJyIsIG9sZERvd25sb2FkVGVtcGxhdGUuZ2V0KCksIG5ld0Rvd25sb2FkVGVtcGxh
dGUuZ2V0KCkpOworICAgIC8vIExldCBhbHNvIG90aGVyIGxpc3RlbmVycyBzdWJzY3JpYmUgdG8g
KGFwcGxpY2F0aW9uKSBtZXNzYWdlcyBpbiB0aGlzIGJ1cy4KKyAgICBHUmVmUHRyPEdzdEJ1cz4g
YnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVs
aW5lLmdldCgpKSkpOworICAgIGdzdF9idXNfYWRkX3NpZ25hbF93YXRjaF9mdWxsKGJ1cy5nZXQo
KSwgUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpSdW5Mb29wRGlzcGF0Y2hlcik7CisgICAgZ19zaWdu
YWxfY29ubmVjdChidXMuZ2V0KCksICJtZXNzYWdlIiwgR19DQUxMQkFDSyhidXNNZXNzYWdlQ2Fs
bGJhY2spLCB0aGlzKTsKIAotICAgIHBsYXllci0+cHVyZ2VPbGREb3dubG9hZEZpbGVzKG9sZERv
d25sb2FkVGVtcGxhdGUuZ2V0KCkpOwotfQorICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdl
dCgpLCAibXV0ZSIsIG1fcGxheWVyLT5tdXRlZCgpLCBudWxscHRyKTsKIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmRvd25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKLXsKLSAgICBBU1NFUlQocGxheWVy
LT5tX2Rvd25sb2FkQnVmZmVyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KEdTVF9CSU5fQ0FTVCht
X3BpcGVsaW5lLmdldCgpKSwgImRlZXAtZWxlbWVudC1hZGRlZCIsIEdfQ0FMTEJBQ0soK1tdKEdz
dEJpbiosIEdzdEJpbiogc3ViQmluLCBHc3RFbGVtZW50KiBlbGVtZW50LCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIqIHBsYXllcikgeworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGJpbk5h
bWUoZ3N0X2VsZW1lbnRfZ2V0X25hbWUoR1NUX0VMRU1FTlRfQ0FTVChzdWJCaW4pKSk7CisgICAg
ICAgIGlmICghZ19zdHJfaGFzX3ByZWZpeChiaW5OYW1lLmdldCgpLCAiZGVjb2RlYmluIikpCisg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2Z1bmMocGxheWVyLT5tX2Rvd25sb2FkQnVmZmVyLmdldCgpLCByZWludGVycHJldF9jYXN0PGdw
b2ludGVyPihkb3dubG9hZEJ1ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2spLCBwbGF5ZXIpOworICAg
ICAgICBHVW5pcXVlUHRyPGNoYXI+IGVsZW1lbnROYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKGVs
ZW1lbnQpKTsKKyAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgoZWxlbWVudE5hbWUuZ2V0KCks
ICJ2NGwyIikpCisgICAgICAgICAgICBwbGF5ZXItPm1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gPSBH
c3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6VmlkZW80TGludXg7CisgICAgICAgIGVsc2UgaWYgKGdf
c3RyX2hhc19wcmVmaXgoZWxlbWVudE5hbWUuZ2V0KCksICJpbXh2cHVkZWMiKSkKKyAgICAgICAg
ICAgIHBsYXllci0+bV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9IEdzdFZpZGVvRGVjb2RlclBsYXRm
b3JtOjpJbXhWUFU7CiAKLSAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IGRvd25sb2FkRmlsZTsKLSAg
ICBnX29iamVjdF9nZXQocGxheWVyLT5tX2Rvd25sb2FkQnVmZmVyLmdldCgpLCAidGVtcC1sb2Nh
dGlvbiIsICZkb3dubG9hZEZpbGUub3V0UHRyKCksIG51bGxwdHIpOwotICAgIHBsYXllci0+bV9k
b3dubG9hZEJ1ZmZlciA9IG51bGxwdHI7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAg
ICAgICBwbGF5ZXItPnVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpOworI2VuZGlmCisgICAgfSks
IHRoaXMpOwogCi0gICAgaWYgKFVOTElLRUxZKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRvd25s
b2FkRmlsZS5nZXQoKSkpKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJDb3VsZG4ndCB1bmxpbmsg
bWVkaWEgdGVtcG9yYXJ5IGZpbGUgJXMgYWZ0ZXIgY3JlYXRpb24iLCBkb3dubG9hZEZpbGUuZ2V0
KCkpOwotICAgICAgICByZXR1cm47CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGlw
ZWxpbmUuZ2V0KCksICJzb3VyY2Utc2V0dXAiLCBHX0NBTExCQUNLKHNvdXJjZVNldHVwQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICBpZiAobV9pc0xlZ2FjeVBsYXliaW4pIHsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJ2aWRlby1jaGFuZ2VkIiwgR19D
QUxMQkFDSyh2aWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWNoYW5nZWQiLCBHX0NBTExC
QUNLKGF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgfQogCi0gICAgR1NUX0RFQlVH
X09CSkVDVChwbGF5ZXItPnBpcGVsaW5lKCksICJVbmxpbmtlZCBtZWRpYSB0ZW1wb3JhcnkgZmls
ZSAlcyBhZnRlciBjcmVhdGlvbiIsIGRvd25sb2FkRmlsZS5nZXQoKSk7Ci19CisjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKQorICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJ0ZXh0LWNoYW5nZWQiLCBHX0NB
TExCQUNLKHRleHRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnB1cmdlT2xkRG93bmxvYWRGaWxlcyhjb25zdCBjaGFyKiBkb3dubG9h
ZEZpbGVUZW1wbGF0ZSkKLXsKLSAgICBpZiAoIWRvd25sb2FkRmlsZVRlbXBsYXRlKQotICAgICAg
ICByZXR1cm47CisgICAgR3N0RWxlbWVudCogdGV4dENvbWJpbmVyID0gd2Via2l0VGV4dENvbWJp
bmVyTmV3KCk7CisgICAgQVNTRVJUKHRleHRDb21iaW5lcik7CisgICAgZ19vYmplY3Rfc2V0KG1f
cGlwZWxpbmUuZ2V0KCksICJ0ZXh0LXN0cmVhbS1jb21iaW5lciIsIHRleHRDb21iaW5lciwgbnVs
bHB0cik7CiAKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHRlbXBsYXRlUGF0aChnX3BhdGhfZ2V0X2Rp
cm5hbWUoZG93bmxvYWRGaWxlVGVtcGxhdGUpKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHRlbXBs
YXRlRmlsZShnX3BhdGhfZ2V0X2Jhc2VuYW1lKGRvd25sb2FkRmlsZVRlbXBsYXRlKSk7Ci0gICAg
U3RyaW5nIHRlbXBsYXRlUGF0dGVybiA9IFN0cmluZyh0ZW1wbGF0ZUZpbGUuZ2V0KCkpLnJlcGxh
Y2UoIlgiLCAiPyIpOworICAgIG1fdGV4dEFwcFNpbmsgPSB3ZWJraXRUZXh0U2lua05ldygpOwor
ICAgIEFTU0VSVChtX3RleHRBcHBTaW5rKTsKIAotICAgIGZvciAoYXV0byYgZmlsZVBhdGggOiBG
aWxlU3lzdGVtOjpsaXN0RGlyZWN0b3J5KHRlbXBsYXRlUGF0aC5nZXQoKSwgdGVtcGxhdGVQYXR0
ZXJuKSkgewotICAgICAgICBpZiAoVU5MSUtFTFkoIUZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZmls
ZVBhdGgpKSkgewotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNvdWxkbid0IHVubGluayBsZWdh
Y3kgbWVkaWEgdGVtcG9yYXJ5IGZpbGU6ICVzIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorICAgIG1fdGV4dEFwcFNpbmtQYWQgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV90ZXh0QXBwU2luay5nZXQoKSwg
InNpbmsiKSk7CisgICAgQVNTRVJUKG1fdGV4dEFwcFNpbmtQYWQpOwogCi0gICAgICAgIEdTVF9U
UkFDRSgiVW5saW5rZWQgbGVnYWN5IG1lZGlhIHRlbXBvcmFyeSBmaWxlOiAlcyIsIGZpbGVQYXRo
LnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLX0KKyAgICBHUmVmUHRyPEdzdENhcHM+IHRleHRDYXBz
OworICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTQsIDApKQorICAgICAgICB0ZXh0
Q2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJhcHBsaWNhdGlvbi94
LXN1YnRpdGxlLXZ0dCIpKTsKKyAgICBlbHNlCisgICAgICAgIHRleHRDYXBzID0gYWRvcHRHUmVm
KGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInRleHQvdnR0IikpOworICAgIGdfb2JqZWN0X3Nl
dChtX3RleHRBcHBTaW5rLmdldCgpLCAiZW1pdC1zaWduYWxzIiwgVFJVRSwgImVuYWJsZS1sYXN0
LXNhbXBsZSIsIEZBTFNFLCAiY2FwcyIsIHRleHRDYXBzLmdldCgpLCBudWxscHRyKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV90ZXh0QXBwU2luay5nZXQoKSwgIm5ldy1zYW1wbGUi
LCBHX0NBTExCQUNLKG5ld1RleHRTYW1wbGVDYWxsYmFjayksIHRoaXMpOworCisgICAgZ19vYmpl
Y3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ0ZXh0LXNpbmsiLCBtX3RleHRBcHBTaW5rLmdldCgp
LCBudWxscHRyKTsKKyNlbmRpZgogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c291cmNlU2V0dXAoR3N0RWxlbWVudCogc291cmNlRWxlbWVudCkKLXsKLSAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJTb3VyY2UgZWxlbWVudCBzZXQtdXAgZm9yICVzIiwgR1NUX0VM
RU1FTlRfTkFNRShzb3VyY2VFbGVtZW50KSk7CisgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUu
Z2V0KCksICJ2aWRlby1zaW5rIiwgY3JlYXRlVmlkZW9TaW5rKCksICJhdWRpby1zaW5rIiwgY3Jl
YXRlQXVkaW9TaW5rKCksIG51bGxwdHIpOwogCi0gICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1f
c291cmNlLmdldCgpKSAmJiBHU1RfT0JKRUNUX1BBUkVOVChtX3NvdXJjZS5nZXQoKSkpCi0gICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHU1RfRUxFTUVOVF9QQVJF
TlQobV9zb3VyY2UuZ2V0KCkpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih1cmlEZWNvZGVC
aW5FbGVtZW50QWRkZWRDYWxsYmFjayksIHRoaXMpOworICAgIGNvbmZpZ3VyZVBsYXlTaW5rKCk7
CiAKLSAgICBtX3NvdXJjZSA9IHNvdXJjZUVsZW1lbnQ7CisgICAgaWYgKG1fcHJlc2VydmVzUGl0
Y2gpIHsKKyAgICAgICAgR3N0RWxlbWVudCogc2NhbGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoInNjYWxldGVtcG8iLCBudWxscHRyKTsKIAotICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyht
X3NvdXJjZS5nZXQoKSkpIHsKLSAgICAgICAgd2ViS2l0V2ViU3JjU2V0TWVkaWFQbGF5ZXIoV0VC
S0lUX1dFQl9TUkNfQ0FTVChtX3NvdXJjZS5nZXQoKSksIG1fcGxheWVyKTsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdChHU1RfRUxFTUVOVF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkpLCAiZWxlbWVu
dC1hZGRlZCIsIEdfQ0FMTEJBQ0sodXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2spLCB0
aGlzKTsKLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIH0gZWxzZSBpZiAoV0VCS0lUX0lT
X01FRElBX1NUUkVBTV9TUkMoc291cmNlRWxlbWVudCkpIHsKLSAgICAgICAgYXV0byBzdHJlYW0g
PSBtX3N0cmVhbVByaXZhdGUuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChzdHJlYW0pOwotICAgICAg
ICB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldFN0cmVhbShXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhz
b3VyY2VFbGVtZW50KSwgc3RyZWFtKTsKLSNlbmRpZgorICAgICAgICBpZiAoIXNjYWxlKQorICAg
ICAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBjcmVhdGUgc2NhbGV0ZW1wbyIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImF1
ZGlvLWZpbHRlciIsIHNjYWxlLCBudWxscHRyKTsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVuZGVy
aW5nQ2FuQmVBY2NlbGVyYXRlZCkgeworICAgICAgICAvLyBJZiBub3QgdXNpbmcgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcsIGxldCBHU3RyZWFtZXIgaGFuZGxlCisgICAgICAgIC8vIHRoZSBpbWFn
ZS1vcmllbnRhdGlvbiB0YWcuCisgICAgICAgIEdzdEVsZW1lbnQqIHZpZGVvRmxpcCA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9mbGlwIiwgbnVsbHB0cik7CisgICAgICAgIGlmICh2
aWRlb0ZsaXApIHsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldCh2aWRlb0ZsaXAsICJtZXRob2Qi
LCA4LCBudWxscHRyKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgp
LCAidmlkZW8tZmlsdGVyIiwgdmlkZW9GbGlwLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBHU1RfV0FSTklORygiVGhlIHZpZGVvZmxpcCBlbGVtZW50IGlzIG1pc3Npbmcs
IHZpZGVvIHJvdGF0aW9uIHN1cHBvcnQgaXMgbm93IGRpc2FibGVkLiBQbGVhc2UgY2hlY2sgeW91
ciBnc3QtcGx1Z2lucy1nb29kIGluc3RhbGxhdGlvbi4iKTsKICAgICB9CisKKyAgICBHUmVmUHRy
PEdzdFBhZD4gdmlkZW9TaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKG1fdmlkZW9TaW5rLmdldCgpLCAic2luayIpKTsKKyAgICBpZiAodmlkZW9TaW5rUGFkKQor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQodmlkZW9TaW5rUGFkLmdldCgpLCAibm90
aWZ5OjpjYXBzIiwgR19DQUxMQkFDSyh2aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYXNTaW5nbGVTZWN1
cml0eU9yaWdpbigpIGNvbnN0Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlk
UGFzc0NPUlNBY2Nlc3NDaGVjaygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3NvdXJjZSkKKyAgICBp
ZiAoV0VCS0lUX0lTX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpKQorICAgICAgICByZXR1cm4gd2Vi
S2l0U3JjUGFzc2VkQ09SU0FjY2Vzc0NoZWNrKFdFQktJVF9XRUJfU1JDX0NBU1QobV9zb3VyY2Uu
Z2V0KCkpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpjYW5TYXZlTWVkaWFEYXRhKCkgY29uc3QKK3sKKyAgICBpZiAoaXNMaXZlU3Ry
ZWFtKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghV0VCS0lUX0lTX1dFQl9T
UkMobV9zb3VyY2UuZ2V0KCkpKQorICAgIGlmIChtX3VybC5pc0xvY2FsRmlsZSgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAotICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gb3JpZ2luYWxVUkksIHJl
c29sdmVkVVJJOwotICAgIGdfb2JqZWN0X2dldChtX3NvdXJjZS5nZXQoKSwgImxvY2F0aW9uIiwg
Jm9yaWdpbmFsVVJJLm91dFB0cigpLCAicmVzb2x2ZWQtbG9jYXRpb24iLCAmcmVzb2x2ZWRVUkku
b3V0UHRyKCksIG51bGxwdHIpOwotICAgIGlmICghb3JpZ2luYWxVUkkgfHwgIXJlc29sdmVkVVJJ
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFnX3N0cmNtcDAob3JpZ2luYWxVUkku
Z2V0KCksIHJlc29sdmVkVVJJLmdldCgpKSkKKyAgICBpZiAobV91cmwucHJvdG9jb2xJc0luSFRU
UEZhbWlseSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlZjxTZWN1cml0eU9yaWdp
bj4gcmVzb2x2ZWRPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoU3RyaW5n
Ojpmcm9tVVRGOChyZXNvbHZlZFVSSS5nZXQoKSkpKTsKLSAgICBSZWY8U2VjdXJpdHlPcmlnaW4+
IHJlcXVlc3RlZE9yaWdpbihTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhTdHJpbmc6
OmZyb21VVEY4KG9yaWdpbmFsVVJJLmdldCgpKSkpOwotICAgIHJldHVybiByZXNvbHZlZE9yaWdp
bi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQocmVxdWVzdGVkT3JpZ2luLmdldCgpKTsKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5jZWxM
b2FkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVRpbWVyRmlyZWQo
KQogewotICAgIGlmIChtX25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpMb2FkaW5nIHx8IG1f
bmV0d29ya1N0YXRlID09IE1lZGlhUGxheWVyOjpMb2FkZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX3BpcGVsaW5lKQotICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFU
RV9SRUFEWSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiSW4gUkVBRFkgZm9y
IHRvbyBsb25nLiBSZWxlYXNpbmcgcGlwZWxpbmUgcmVzb3VyY2VzLiIpOworICAgIGNoYW5nZVBp
cGVsaW5lU3RhdGUoR1NUX1NUQVRFX05VTEwpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6YXN5bmNTdGF0ZUNoYW5nZURvbmUoKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkKIHsKLSAgICBp
ZiAoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpCi0gICAgICAgIHJldHVybjsKKyAgICBt
X3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQgPSBtX3BsYXllciAmJiBtX3BsYXllci0+Y2xpZW50
KCkubWVkaWFQbGF5ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpOworfQogCi0gICAg
aWYgKG1fc2Vla2luZykgewotICAgICAgICBpZiAobV9zZWVrSXNQZW5kaW5nKQotICAgICAgICAg
ICAgdXBkYXRlU3RhdGVzKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIHNlZWtlZCB0byAlcyIsIHRvU3RyaW5nKG1fc2Vl
a1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7Ci0g
ICAgICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwot
ICAgICAgICAgICAgaWYgKG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrICE9IG1fc2Vla1RpbWUgJiYg
bV90aW1lT2ZPdmVybGFwcGluZ1NlZWsuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgc2Vl
ayhtX3RpbWVPZk92ZXJsYXBwaW5nU2Vlayk7Ci0gICAgICAgICAgICAgICAgbV90aW1lT2ZPdmVy
bGFwcGluZ1NlZWsgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV90aW1lT2ZPdmVybGFwcGluZ1Nl
ZWsgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQorUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5
ZXIucHRyKCk7CisjZWxzZQorICAgIHJldHVybiBjb25zdF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcio+KHRoaXMpOworI2VuZGlmCit9CiAKLSAgICAgICAgICAgIC8vIFRoZSBwaXBl
bGluZSBjYW4gc3RpbGwgaGF2ZSBhIHBlbmRpbmcgc3RhdGUuIEluIHRoaXMgY2FzZSBhIHBvc2l0
aW9uIHF1ZXJ5IHdpbGwgZmFpbC4KLSAgICAgICAgICAgIC8vIFJpZ2h0IG5vdyB3ZSBjYW4gdXNl
IG1fc2Vla1RpbWUgYXMgYSBmYWxsYmFjay4KLSAgICAgICAgICAgIG1fY2FuRmFsbEJhY2tUb0xh
c3RGaW5pc2hlZFNlZWtQb3NpdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICB0aW1lQ2hhbmdlZCgp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHVwZGF0ZVN0YXRlcygpOworI2lmIFVT
RShOSUNPU0lBKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN3YXBCdWZmZXJz
SWZOZWVkZWQoKQoreworI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQorICAgIHB1c2hOZXh0
SG9sZVB1bmNoQnVmZmVyKCk7CisjZW5kaWYKK30KKyNlbHNlCitSZWZQdHI8VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eT4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm94eSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiB7Ci0g
ICAgaWYgKCFtX3BpcGVsaW5lKQotICAgICAgICByZXR1cm47CisjaWYgVVNFKEdTVFJFQU1FUl9I
T0xFUFVOQ0gpCisgICAgcHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsKKyNlbmRpZgorfQorI2Vu
ZGlmCiAKLSAgICBpZiAobV9lcnJvck9jY3VyZWQpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cHVzaFRleHR1cmVUb0NvbXBvc2l0b3IoKQoreworICAgIGF1dG8gc2FtcGxlTG9j
a2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7CisgICAgaWYgKCFHU1RfSVNfU0FNUExFKG1f
c2FtcGxlLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTWVkaWFQbGF5ZXI6Ok5ldHdv
cmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKLSAgICBNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOwotICAgIEdzdFN0YXRl
IHBlbmRpbmc7Ci0gICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgYm9vbCBzdGF0ZVJlYWxseUNoYW5n
ZWQgPSBmYWxzZTsKLQotICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0g
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJnBlbmRpbmcs
IDI1MCAqIEdTVF9OU0VDT05EKTsKLSAgICBpZiAoc3RhdGUgIT0gbV9jdXJyZW50U3RhdGUpIHsK
LSAgICAgICAgbV9vbGRTdGF0ZSA9IG1fY3VycmVudFN0YXRlOwotICAgICAgICBtX2N1cnJlbnRT
dGF0ZSA9IHN0YXRlOwotICAgICAgICBzdGF0ZVJlYWxseUNoYW5nZWQgPSB0cnVlOwotICAgIH0K
LQotICAgIGJvb2wgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IGZhbHNlOwotICAgIHN3aXRj
aCAoZ2V0U3RhdGVSZXN1bHQpIHsKLSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzog
ewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTdGF0ZTogJXMsIHBlbmRp
bmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7Ci0KLSAgICAgICAgLy8gRG8gbm90aGlu
ZyBpZiBvbiBFT1MgYW5kIHN0YXRlIGNoYW5nZWQgdG8gUkVBRFkgdG8gYXZvaWQgcmVjcmVhdGlu
ZyB0aGUgcGxheWVyCi0gICAgICAgIC8vIG9uIEhUTUxNZWRpYUVsZW1lbnQgYW5kIHByb3Blcmx5
IGdlbmVyYXRlIHRoZSB2aWRlbyAnZW5kZWQnIGV2ZW50LgotICAgICAgICBpZiAobV9pc0VuZFJl
YWNoZWQgJiYgbV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQotICAgICAgICAgICAg
YnJlYWs7CisgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9CisgICAgICAgIFt0aGlzXShUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgeworICAgICAgICAgICAg
TG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKIAotICAgICAgICBtX3Jlc2V0UGlwZWxp
bmUgPSBtX2N1cnJlbnRTdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFk7CisgICAgICAgICAgICBpZiAo
IXByb3h5LmlzQWN0aXZlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGJv
b2wgZGlkQnVmZmVyaW5nID0gbV9idWZmZXJpbmc7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8R3N0VmlkZW9GcmFtZUhvbGRlcj4gZnJhbWVIb2xkZXIgPSBtYWtlVW5pcXVlPEdzdFZpZGVv
RnJhbWVIb2xkZXI+KG1fc2FtcGxlLmdldCgpLCBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtLCBtX3Rl
eHR1cmVNYXBwZXJGbGFncywgIW1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayk7CiAKLSAgICAgICAg
Ly8gVXBkYXRlIHJlYWR5IGFuZCBuZXR3b3JrIHN0YXRlcy4KLSAgICAgICAgc3dpdGNoIChtX2N1
cnJlbnRTdGF0ZSkgewotICAgICAgICBjYXNlIEdTVF9TVEFURV9OVUxMOgotICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICAgICAgbV9u
ZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RW1wdHk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBHU1RfU1RBVEVfUkVBRFk6Ci0gICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOwotICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBN
ZWRpYVBsYXllcjo6RW1wdHk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1Rf
U1RBVEVfUEFVU0VEOgotICAgICAgICBjYXNlIEdTVF9TVEFURV9QTEFZSU5HOgotICAgICAgICAg
ICAgaWYgKG1fYnVmZmVyaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYnVmZmVyaW5nUGVy
Y2VudGFnZSA9PSAxMDApIHsKLSAgICAgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gQ29tcGxldGUuIik7Ci0gICAgICAgICAgICAgICAgICAg
IG1fYnVmZmVyaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAgICAgICAgICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBtX2Rvd25sb2FkRmluaXNoZWQgPyBNZWRpYVBsYXllcjo6SWRsZSA6IE1lZGlh
UGxheWVyOjpMb2FkaW5nOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2Rvd25sb2FkRmluaXNo
ZWQpIHsKLSAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVu
b3VnaERhdGE7Ci0gICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
TG9hZGVkOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlcjsKKyAgICAgICAgICAgIGlmIChmcmFtZUhvbGRlci0+
aGFzTWFwcGVkVGV4dHVyZXMoKSkgeworICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyID0gZnJh
bWVIb2xkZXItPnBsYXRmb3JtTGF5ZXJCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWxh
eWVyQnVmZmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
bGF5ZXJCdWZmZXItPnNldFVubWFuYWdlZEJ1ZmZlckRhdGFIb2xkZXIoV1RGTW92ZShmcmFtZUhv
bGRlcikpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7Ci0gICAgICAgICAgICAgICAgbV9uZXR3
b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3lu
YyBzdGF0ZXMgd2hlcmUgbmVlZGVkLgotICAgICAgICBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NU
X1NUQVRFX1BBVVNFRCkgewotICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFuZE11dGVJbml0aWFs
aXplZCkgewotICAgICAgICAgICAgICAgIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7Ci0g
ICAgICAgICAgICAgICAgbm90aWZ5UGxheWVyT2ZNdXRlKCk7Ci0gICAgICAgICAgICAgICAgbV92
b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoZGlkQnVmZmVyaW5nICYmICFtX2J1ZmZlcmluZyAmJiAhbV9wYXVzZWQgJiYgbV9w
bGF5YmFja1JhdGUpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJbQnVmZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIpOwotICAgICAgICAgICAgICAg
IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSB7
Ci0gICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoKG1fYnVm
ZmVyaW5nICYmICFpc0xpdmVTdHJlYW0oKSkgfHwgIW1fcGxheWJhY2tSYXRlKSB7Ci0gICAgICAg
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gUGF1c2lu
ZyBzdHJlYW0gZm9yIGJ1ZmZlcmluZy4iKTsKLSAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGlu
ZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyID0g
cHJveHkuZ2V0QXZhaWxhYmxlQnVmZmVyKGZyYW1lSG9sZGVyLT5zaXplKCksIEdMX0RPTlRfQ0FS
RSk7CisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFsYXllckJ1ZmZlcikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byB0ZXh0dXJlID0gQml0bWFwVGV4dHVyZUdMOjpjcmVhdGUoVGV4
dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzOjpnZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnJlc2V0KGZyYW1lSG9sZGVyLT5zaXplKCksIGZyYW1lSG9sZGVyLT5oYXNBbHBo
YUNoYW5uZWwoKSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiBCaXRtYXBUZXh0dXJl
OjpOb0ZsYWcpOworICAgICAgICAgICAgICAgICAgICBsYXllckJ1ZmZlciA9IG1ha2VVbmlxdWU8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KFdURk1vdmUodGV4dHVyZSkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcmFtZUhvbGRlci0+dXBkYXRlVGV4dHVy
ZShsYXllckJ1ZmZlci0+dGV4dHVyZUdMKCkpOworICAgICAgICAgICAgICAgIGxheWVyQnVmZmVy
LT5zZXRFeHRyYUZsYWdzKG1fdGV4dHVyZU1hcHBlckZsYWdzIHwgKGZyYW1lSG9sZGVyLT5oYXNB
bHBoYUNoYW5uZWwoKSA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOwot
Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk9sZCBzdGF0ZTogJXMsIG5l
dyBzdGF0ZTogJXMgKHJlcXVlc3RlZDogJXMpIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUo
bV9vbGRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9yZXF1ZXN0ZWRTdGF0ZSkpOwotICAgICAgICBp
ZiAobV9yZXF1ZXN0ZWRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEICYmIG1fY3VycmVudFN0YXRl
ID09IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAgICAgICAgICAgIHNob3VsZFVwZGF0ZVBsYXliYWNr
U3RhdGUgPSB0cnVlOwotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJS
ZXF1ZXN0ZWQgc3RhdGUgY2hhbmdlIHRvICVzIHdhcyBjb21wbGV0ZWQiLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
RW1pdCBwbGF5IHN0YXRlIGNoYW5nZSBub3RpZmljYXRpb24gb25seSB3aGVuIGdvaW5nIHRvIFBM
QVlJTkcgc28gdGhhdAotICAgICAgICAvLyB0aGUgbWVkaWEgZWxlbWVudCBnZXRzIGEgY2hhbmNl
IHRvIGVuYWJsZSBpdHMgcGFnZSBzbGVlcCBkaXNhYmxlci4KLSAgICAgICAgLy8gRW1pdHRpbmcg
dGhpcyBub3RpZmljYXRpb24gaW4gbW9yZSBjYXNlcyB0cmlnZ2VycyB1bndhbnRlZCBjb2RlIHBh
dGhzCi0gICAgICAgIC8vIGFuZCB0ZXN0IHRpbWVvdXRzLgotICAgICAgICBpZiAoc3RhdGVSZWFs
bHlDaGFuZ2VkICYmIChtX29sZFN0YXRlICE9IG1fY3VycmVudFN0YXRlKSAmJiAobV9vbGRTdGF0
ZSA9PSBHU1RfU1RBVEVfUEFVU0VEICYmIG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QTEFZ
SU5HKSkgewotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5YmFj
ayBzdGF0ZSBjaGFuZ2VkIGZyb20gJXMgdG8gJXMuIE5vdGlmeWluZyB0aGUgbWVkaWEgcGxheWVy
IGNsaWVudCIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fb2xkU3RhdGUpLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSkpOwotICAgICAgICAgICAgc2hvdWxk
VXBkYXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgotICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJBc3luYzogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3Rh
dGVfZ2V0X25hbWUocGVuZGluZykpOwotICAgICAgICAvLyBDaGFuZ2UgaW4gcHJvZ3Jlc3MuCi0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgotICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJGYWlsdXJlOiBTdGF0ZTogJXMsIHBlbmRp
bmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7Ci0gICAgICAgIC8vIENoYW5nZSBmYWls
ZWQKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xM
OgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJObyBwcmVyb2xsOiBTdGF0
ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50
U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7Ci0KLSAgICAgICAg
Ly8gTGl2ZSBwaXBlbGluZXMgZ28gaW4gUEFVU0VEIHdpdGhvdXQgcHJlcm9sbGluZy4KLSAgICAg
ICAgbV9pc1N0cmVhbWluZyA9IHRydWU7Ci0gICAgICAgIHVwZGF0ZURvd25sb2FkQnVmZmVyaW5n
RmxhZygpOwotCi0gICAgICAgIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkp
Ci0gICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7Ci0g
ICAgICAgIGVsc2UgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAg
ICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAg
ICAgICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnRT
dGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykKLSAgICAgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7
CisgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVyQnVmZmVyKSk7
CisgICAgICAgIH07CiAKLSAgICAgICAgaWYgKCFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkK
LSAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworI2lm
IFVTRShOSUNPU0lBKQorICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRl
bnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgp
KTsKKyNlbHNlCisgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNl
bmRpZgorfQorI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIAotICAgICAgICBtX25l
dHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJFbHNlIDogJWQi
LCBnZXRTdGF0ZVJlc3VsdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpyZXBhaW50KCkKK3sKKyAgICBBU1NFUlQobV9zYW1wbGUpOwor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBtX3JlcXVlc3RlZFN0YXRlID0gR1NU
X1NUQVRFX1ZPSURfUEVORElORzsKKyAgICBtX3BsYXllci0+cmVwYWludCgpOwogCi0gICAgaWYg
KHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUpCi0gICAgICAgIG1fcGxheWVyLT5wbGF5YmFja1N0
YXRlQ2hhbmdlZCgpOworICAgIExvY2tIb2xkZXIgbG9jayhtX2RyYXdNdXRleCk7CisgICAgbV9k
cmF3Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworfQogCi0gICAgaWYgKG1fbmV0d29ya1N0YXRlICE9
IG9sZE5ldHdvcmtTdGF0ZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJOZXR3b3JrIFN0YXRlIENoYW5nZWQgZnJvbSAlcyB0byAlcyIsIGNvbnZlcnRFbnVtZXJhdGlv
blRvU3RyaW5nKG9sZE5ldHdvcmtTdGF0ZSkudXRmOCgpLmRhdGEoKSwgY29udmVydEVudW1lcmF0
aW9uVG9TdHJpbmcobV9uZXR3b3JrU3RhdGUpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBtX3Bs
YXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSogc2FtcGxlKQoreworICAgIGJvb2wgdHJp
Z2dlclJlc2l6ZTsKKyAgICB7CisgICAgICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2so
bV9zYW1wbGVNdXRleCk7CisgICAgICAgIHRyaWdnZXJSZXNpemUgPSAhbV9zYW1wbGU7CisgICAg
ICAgIG1fc2FtcGxlID0gc2FtcGxlOwogICAgIH0KLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9s
ZFJlYWR5U3RhdGUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUmVh
ZHkgU3RhdGUgQ2hhbmdlZCBmcm9tICVzIHRvICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJp
bmcob2xkUmVhZHlTdGF0ZSkudXRmOCgpLmRhdGEoKSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJp
bmcobV9yZWFkeVN0YXRlKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisKKyAgICBpZiAodHJpZ2dlclJlc2l6ZSkgeworICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJGaXJzdCBzYW1wbGUgcmVhY2hlZCB0aGUgc2luaywg
dHJpZ2dlcmluZyB2aWRlbyBkaW1lbnNpb25zIHVwZGF0ZSIpOworICAgICAgICBtX25vdGlmaWVy
LT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6U2l6ZUNoYW5nZWQsIFt0aGlzXSB7Cisg
ICAgICAgICAgICBtX3BsYXllci0+c2l6ZUNoYW5nZWQoKTsKKyAgICAgICAgfSk7CiAgICAgfQog
Ci0gICAgaWYgKGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUyAmJiBt
X2N1cnJlbnRTdGF0ZSA+PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgIHVwZGF0ZVBsYXli
YWNrUmF0ZSgpOwotICAgICAgICBpZiAobV9zZWVrSXNQZW5kaW5nKSB7Ci0gICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gY29tbWl0dGluZyBwZW5kaW5nIHNl
ZWsgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIG1fc2Vla0lzUGVuZGluZyA9IGZhbHNlOwotICAgICAgICAgICAgbV9zZWVraW5nID0gZG9T
ZWVrKG1fc2Vla1RpbWUsIG1fcGxheWVyLT5yYXRlKCksIHN0YXRpY19jYXN0PEdzdFNlZWtGbGFn
cz4oR1NUX1NFRUtfRkxBR19GTFVTSCB8IEdTVF9TRUVLX0ZMQUdfQUNDVVJBVEUpKTsKLSAgICAg
ICAgICAgIGlmICghbV9zZWVraW5nKSB7Ci0gICAgICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlv
biA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gc2Vla2luZyB0byAlcyBmYWlsZWQiLCB0b1N0cmlu
ZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQor
ICAgIGlmICghbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKSB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fZHJhd011dGV4KTsKKyAgICAgICAgaWYgKG1fZGVzdHJveWluZykKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgbV9kcmF3VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Cisg
ICAgICAgIG1fZHJhd0NvbmRpdGlvbi53YWl0KG1fZHJhd011dGV4KTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KKworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBpZiAobV91c2luZ0Zh
bGxiYWNrVmlkZW9TaW5rKSB7CisgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX2RyYXdNdXRleCk7
CisgICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQorICAgICAgICAgICAgW3RoaXNdKFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBwcm94eS5zY2hlZHVsZVVwZGF0ZU9uQ29tcG9zaXRvclRocmVhZChb
dGhpc10geyB0aGlzLT5wdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpOyB9KTsKKyAgICAgICAgICAg
IH07CisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIGlmICghcHJveHlPcGVyYXRpb24oZG93bmNh
c3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVy
LT5pbXBsKCkpLnByb3h5KCkpKQorICAgICAgICAgICAgcmV0dXJuOworI2Vsc2UKKyAgICAgICAg
aWYgKCFwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpKQorICAgICAgICAgICAg
cmV0dXJuOworI2VuZGlmCisgICAgICAgIG1fZHJhd1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwor
ICAgICAgICBtX2RyYXdDb25kaXRpb24ud2FpdChtX2RyYXdNdXRleCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7CisjZW5kaWYgLy8gVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxl
U3luY01lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpyZXBhaW50Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBw
bGF5ZXIsIEdzdFNhbXBsZSogc2FtcGxlKQogewotICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1l
c3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OICYmICFtX2lzTGVnYWN5UGxh
eWJpbikgewotICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247
Ci0gICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uKG1lc3NhZ2UsICZj
b2xsZWN0aW9uLm91dFB0cigpKTsKKyAgICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZSk7
Cit9CiAKLSAgICAgICAgaWYgKGNvbGxlY3Rpb24pIHsKLSAgICAgICAgICAgIG1fc3RyZWFtQ29s
bGVjdGlvbi5zd2FwKGNvbGxlY3Rpb24pOwotICAgICAgICAgICAgbV9ub3RpZmllci0+bm90aWZ5
KE1haW5UaHJlYWROb3RpZmljYXRpb246OlN0cmVhbUNvbGxlY3Rpb25DaGFuZ2VkLCBbdGhpc10g
ewotICAgICAgICAgICAgICAgIHRoaXMtPnVwZGF0ZVRyYWNrcygpOwotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0KK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5jZWxSZXBh
aW50KGJvb2wgZGVzdHJveWluZykKK3sKKyAgICAvLyBUaGUgZ29hbCBvZiB0aGlzIGZ1bmN0aW9u
IGlzIHRvIHJlbGVhc2UgdGhlIEdTdHJlYW1lciB0aHJlYWQgZnJvbSBtX2RyYXdDb25kaXRpb24g
aW4gdHJpZ2dlclJlcGFpbnQoKSBpbiBub24tQUMgY2FzZSwKKyAgICAvLyB0byBhdm9pZCBhIGRl
YWRsb2NrIGlmIHRoZSBwbGF5ZXIgZ2V0cyBwYXVzZWQgd2hpbGUgd2FpdGluZyBmb3IgZHJhd2lu
ZyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAwMDMpOgor
ICAgIC8vIHRoZSBtYWluIHRocmVhZCBpcyB3YWl0aW5nIGZvciB0aGUgR1N0cmVhbWVyIHRocmVh
ZCB0byBwYXVzZSwgYnV0IHRoZSBHU3RyZWFtZXIgdGhyZWFkIGlzIGxvY2tlZCB3YWl0aW5nIGZv
ciB0aGUKKyAgICAvLyBtYWluIHRocmVhZCB0byBkcmF3LiBUaGlzIGRlYWRsb2NrIGRvZXNuJ3Qg
aGFwcGVuIHdoZW4gdXNpbmcgQUMgYmVjYXVzZSB0aGUgc2FtcGxlIGlzIHByb2Nlc3NlZCAobm90
IHBhaW50ZWQpIGluIHRoZSBjb21wb3NpdG9yCisgICAgLy8gdGhyZWFkLCBzbyB0aGUgbWFpbiB0
aHJlYWQgY2FuIHJlcXVlc3QgdGhlIHBhdXNlIGFuZCB3YWl0IGlmIHRoZSBHU3RyZWFtZXIgdGhy
ZWFkIGlzIHdhaXRpbmcgZm9yIHRoZSBjb21wb3NpdG9yIHRocmVhZC4KKyAgICAvLworICAgIC8v
IFRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIHdoZW4gZGVzdHJveWluZyB0aGUgcGxheWVyIChk
ZXN0cm95aW5nIHBhcmFtZXRlciBpcyB0cnVlKSwgdG8gcmVsZWFzZSB0aGUgZ3N0cmVhbWVyIHRo
cmVhZCBmcm9tCisgICAgLy8gbV9kcmF3Q29uZGl0aW9uIGFuZCB0byBlbnN1cmUgdGhhdCBuZXcg
dHJpZ2dlclJlcGFpbnQgY2FsbHMgd29uJ3Qgd2FpdCBvbiBtX2RyYXdDb25kaXRpb24uCisgICAg
aWYgKCFtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQpIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9kcmF3TXV0ZXgpOworICAgICAgICBtX2RyYXdUaW1lci5zdG9wKCk7CisgICAgICAg
IG1fZGVzdHJveWluZyA9IGRlc3Ryb3lpbmc7CisgICAgICAgIG1fZHJhd0NvbmRpdGlvbi5ub3Rp
ZnlPbmUoKTsKICAgICB9Cit9CiAKLSAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6aGFuZGxlU3luY01lc3NhZ2UobWVzc2FnZSk7Cit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6cmVwYWludENhbmNlbGxlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIHBsYXllci0+Y2FuY2VsUmVwYWludCgpOwogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWVkaWFMb2NhdGlvbkNoYW5nZWQo
R3N0TWVzc2FnZSogbWVzc2FnZSkKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorR3N0Rmxvd1JldHVy
biBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1NhbXBsZUNhbGxiYWNrKEdzdEVsZW1l
bnQqIHNpbmssIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQogewotICAgIGlm
IChtX21lZGlhTG9jYXRpb25zKQotICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUobV9tZWRpYUxv
Y2F0aW9ucyk7CisgICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihnc3Rf
YXBwX3NpbmtfcHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5LKHNpbmspKSk7CisgICAgcGxheWVyLT50
cmlnZ2VyUmVwYWludChzYW1wbGUuZ2V0KCkpOworICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30K
IAotICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0
cnVjdHVyZShtZXNzYWdlKTsKLSAgICBpZiAoc3RydWN0dXJlKSB7Ci0gICAgICAgIC8vIFRoaXMg
c3RydWN0dXJlIGNhbiBjb250YWluOgotICAgICAgICAvLyAtIGJvdGggYSBuZXctbG9jYXRpb24g
c3RyaW5nIGFuZCBlbWJlZGRlZCBsb2NhdGlvbnMgc3RydWN0dXJlCi0gICAgICAgIC8vIC0gb3Ig
b25seSBhIG5ldy1sb2NhdGlvbiBzdHJpbmcuCi0gICAgICAgIG1fbWVkaWFMb2NhdGlvbnMgPSBn
c3Rfc3RydWN0dXJlX2NvcHkoc3RydWN0dXJlKTsKLSAgICAgICAgY29uc3QgR1ZhbHVlKiBsb2Nh
dGlvbnMgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShtX21lZGlhTG9jYXRpb25zLCAibG9jYXRp
b25zIik7CitHc3RGbG93UmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3UHJl
cm9sbENhbGxiYWNrKEdzdEVsZW1lbnQqIHNpbmssIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ciogcGxheWVyKQoreworICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYo
Z3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1RfQVBQX1NJTksoc2luaykpKTsKKyAgICBwbGF5
ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7CisgICAgcmV0dXJuIEdTVF9GTE9XX09L
OworfQogCi0gICAgICAgIGlmIChsb2NhdGlvbnMpCi0gICAgICAgICAgICBtX21lZGlhTG9jYXRp
b25DdXJyZW50SW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KGdzdF92YWx1ZV9saXN0X2dldF9zaXpl
KGxvY2F0aW9ucykpIC0xOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZsdXNo
Q3VycmVudEJ1ZmZlcigpCit7CisgICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3Nh
bXBsZU11dGV4KTsKIAotICAgICAgICBsb2FkTmV4dExvY2F0aW9uKCk7CisgICAgaWYgKG1fc2Ft
cGxlKSB7CisgICAgICAgIC8vIFJlcGxhY2UgYnkgYSBuZXcgc2FtcGxlIGhhdmluZyBvbmx5IHRo
ZSBjYXBzLCBzbyB0aGlzIGR1bW15IHNhbXBsZSBpcyBzdGlsbCB1c2VmdWwgdG8gZ2V0IHRoZSBk
aW1lbnNpb25zLgorICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHJlc2l6aW5nIHByb2JsZW1zIHdo
ZW4gdGhlIHZpZGVvIGNoYW5nZXMgaXRzIHF1YWxpdHkgYW5kIGEgRFJBSU4gaXMgcGVyZm9ybWVk
LgorICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIGluZm8gPSBnc3Rfc2FtcGxlX2dldF9pbmZv
KG1fc2FtcGxlLmdldCgpKTsKKyAgICAgICAgbV9zYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X3NhbXBs
ZV9uZXcobnVsbHB0ciwgZ3N0X3NhbXBsZV9nZXRfY2FwcyhtX3NhbXBsZS5nZXQoKSksCisgICAg
ICAgICAgICBnc3Rfc2FtcGxlX2dldF9zZWdtZW50KG1fc2FtcGxlLmdldCgpKSwgaW5mbyA/IGdz
dF9zdHJ1Y3R1cmVfY29weShpbmZvKSA6IG51bGxwdHIpKTsKICAgICB9CisKKyAgICBib29sIHNo
b3VsZFdhaXQgPSBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtID09IEdzdFZpZGVvRGVjb2RlclBsYXRm
b3JtOjpWaWRlbzRMaW51eDsKKyAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0gW3Nob3VsZFdhaXQs
IHBpcGVsaW5lID0gcGlwZWxpbmUoKV0oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYg
cHJveHkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSwgIkZsdXNoaW5nIHZp
ZGVvIHNhbXBsZSAlcyIsIHNob3VsZFdhaXQgPyAic3luY2hyb25vdXNseSIgOiAiIik7CisgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKCFzaG91bGRXYWl0ID8gJnByb3h5LmxvY2soKSA6IG51bGxw
dHIpOworCisgICAgICAgIGlmIChwcm94eS5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgcHJveHku
ZHJvcEN1cnJlbnRCdWZmZXJXaGlsZVByZXNlcnZpbmdUZXh0dXJlKHNob3VsZFdhaXQpOworICAg
IH07CisKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwo
KSkucHJveHkoKSk7CisjZWxzZQorICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQ
cm94eSk7CisjZW5kaWYKIH0KKyNlbmRpZgogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZE5leHRMb2NhdGlvbigpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmICghbV9tZWRpYUxvY2F0
aW9ucykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fc2l6ZSA9IHNpemU7Cit9CiAKLSAg
ICBjb25zdCBHVmFsdWUqIGxvY2F0aW9ucyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKG1fbWVk
aWFMb2NhdGlvbnMsICJsb2NhdGlvbnMiKTsKLSAgICBjb25zdCBnY2hhciogbmV3TG9jYXRpb24g
PSBudWxscHRyOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChj
b250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFs
b2NhdGlvbnMpIHsKLSAgICAgICAgLy8gRmFsbGJhY2sgb24gbmV3LWxvY2F0aW9uIHN0cmluZy4K
LSAgICAgICAgbmV3TG9jYXRpb24gPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcobV9tZWRpYUxv
Y2F0aW9ucywgIm5ldy1sb2NhdGlvbiIpOwotICAgICAgICBpZiAoIW5ld0xvY2F0aW9uKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBpZiAoIW1fcGxheWVyLT52aXNpYmxl
KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbmV3TG9jYXRpb24pIHsKLSAgICAgICAg
aWYgKG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCA8IDApIHsKLSAgICAgICAgICAgIG1fbWVk
aWFMb2NhdGlvbnMgPSBudWxscHRyOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9CisgICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKKyAg
ICBpZiAoIUdTVF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQorICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgY29uc3QgR1ZhbHVlKiBsb2NhdGlvbiA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1
ZShsb2NhdGlvbnMsIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCk7Ci0gICAgICAgIGNvbnN0
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUobG9jYXRp
b24pOworI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgLy8gRW5zdXJlIHRoZSBpbnB1dCBpcyBS
R0JBLiBXZSBoYW5kbGUgWVVWIHZpZGVvIG5hdGl2ZWx5LCBzbyB3ZSBuZWVkIHRvIGRvCisgICAg
Ly8gdGhpcyBjb252ZXJzaW9uIG9uLWRlbWFuZCBoZXJlLgorICAgIEdzdEJ1ZmZlciogYnVmZmVy
ID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKG1fc2FtcGxlLmdldCgpKTsKKyAgICBpZiAoVU5MSUtF
TFkoIUdTVF9JU19CVUZGRVIoYnVmZmVyKSkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBp
ZiAoIXN0cnVjdHVyZSkgewotICAgICAgICAgICAgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4
LS07Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9z
YW1wbGVfZ2V0X2NhcHMobV9zYW1wbGUuZ2V0KCkpOworCisgICAgR3N0VmlkZW9JbmZvIHZpZGVv
SW5mbzsKKyAgICBnc3RfdmlkZW9faW5mb19pbml0KCZ2aWRlb0luZm8pOworICAgIGlmICghZ3N0
X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZ2aWRlb0luZm8sIGNhcHMpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIUdTVF9WSURFT19JTkZPX0lTX1JHQigmdmlkZW9JbmZvKSkgeworICAgICAg
ICBpZiAoIW1fY29sb3JDb252ZXJ0KSB7CisgICAgICAgICAgICBHc3RNZW1vcnkqIG1lbSA9IGdz
dF9idWZmZXJfcGVla19tZW1vcnkoYnVmZmVyLCAwKTsKKyAgICAgICAgICAgIEdzdEdMQ29udGV4
dCogY29udGV4dCA9ICgoR3N0R0xCYXNlTWVtb3J5KiltZW0pLT5jb250ZXh0OworICAgICAgICAg
ICAgbV9jb2xvckNvbnZlcnQgPSBhZG9wdEdSZWYoZ3N0X2dsX2NvbG9yX2NvbnZlcnRfbmV3KGNv
bnRleHQpKTsKICAgICAgICAgfQogCi0gICAgICAgIG5ld0xvY2F0aW9uID0gZ3N0X3N0cnVjdHVy
ZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm5ldy1sb2NhdGlvbiIpOworICAgICAgICBpZiAoIW1f
Y29sb3JDb252ZXJ0SW5wdXRDYXBzIHx8ICFnc3RfY2Fwc19pc19lcXVhbChtX2NvbG9yQ29udmVy
dElucHV0Q2Fwcy5nZXQoKSwgY2FwcykpIHsKKyAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0SW5w
dXRDYXBzID0gY2FwczsKKyAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2FwcyA9IGFk
b3B0R1JlZihnc3RfY2Fwc19jb3B5KGNhcHMpKTsKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRU
TEVfRU5ESUFOCisgICAgICAgICAgICBjb25zdCBnY2hhciogZm9ybWF0U3RyaW5nID0gR1NUX1ZJ
REVPX0lORk9fSEFTX0FMUEhBKCZ2aWRlb0luZm8pID8gIlJHQkEiIDogIkJHUngiOworI2Vsc2UK
KyAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBmb3JtYXRTdHJpbmcgPSBHU1RfVklERU9fSU5GT19I
QVNfQUxQSEEoJnZpZGVvSW5mbykgPyAiUkdCQSIgOiAiUkdCeCI7CisjZW5kaWYKKyAgICAgICAg
ICAgIGdzdF9jYXBzX3NldF9zaW1wbGUobV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzLmdldCgpLCAi
Zm9ybWF0IiwgR19UWVBFX1NUUklORywgZm9ybWF0U3RyaW5nLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIGlmICghZ3N0X2dsX2NvbG9yX2NvbnZlcnRfc2V0X2NhcHMobV9jb2xvckNvbnZlcnQuZ2V0
KCksIGNhcHMsIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgR1JlZlB0cjxHc3RCdWZmZXI+IHJnYkJ1
ZmZlciA9IGFkb3B0R1JlZihnc3RfZ2xfY29sb3JfY29udmVydF9wZXJmb3JtKG1fY29sb3JDb252
ZXJ0LmdldCgpLCBidWZmZXIpKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFHU1RfSVNfQlVGRkVS
KHJnYkJ1ZmZlci5nZXQoKSkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0
IEdzdFN0cnVjdHVyZSogaW5mbyA9IGdzdF9zYW1wbGVfZ2V0X2luZm8obV9zYW1wbGUuZ2V0KCkp
OworICAgICAgICBtX3NhbXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhyZ2JCdWZmZXIu
Z2V0KCksIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSwKKyAgICAgICAgICAgIGdzdF9z
YW1wbGVfZ2V0X3NlZ21lbnQobV9zYW1wbGUuZ2V0KCkpLCBpbmZvID8gZ3N0X3N0cnVjdHVyZV9j
b3B5KGluZm8pIDogbnVsbHB0cikpOwogICAgIH0KKyNlbmRpZgogCi0gICAgaWYgKG5ld0xvY2F0
aW9uKSB7Ci0gICAgICAgIC8vIEZvdW5kIGEgY2FuZGlkYXRlLiBuZXctbG9jYXRpb24gaXMgbm90
IGFsd2F5cyBhbiBhYnNvbHV0ZSB1cmwKLSAgICAgICAgLy8gdGhvdWdoLiBXZSBuZWVkIHRvIHRh
a2UgdGhlIGJhc2Ugb2YgdGhlIGN1cnJlbnQgdXJsIGFuZAotICAgICAgICAvLyBhcHBlbmQgdGhl
IHZhbHVlIG9mIG5ldy1sb2NhdGlvbiB0byBpdC4KLSAgICAgICAgVVJMIGJhc2VVcmwgPSBnc3Rf
dXJpX2lzX3ZhbGlkKG5ld0xvY2F0aW9uKSA/IFVSTCgpIDogbV91cmw7Ci0gICAgICAgIFVSTCBu
ZXdVcmwgPSBVUkwoYmFzZVVybCwgbmV3TG9jYXRpb24pOworICAgIGF1dG8gZ3N0SW1hZ2UgPSBJ
bWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UobV9zYW1wbGUuZ2V0KCkpOworICAgIGlmICghZ3N0
SW1hZ2UpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBw
bGF5YmluVXJsU3RyOwotICAgICAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgImN1
cnJlbnQtdXJpIiwgJnBsYXliaW5VcmxTdHIub3V0UHRyKCksIG51bGxwdHIpOwotICAgICAgICBV
UkwgcGxheWJpblVybChVUkwoKSwgcGxheWJpblVybFN0ci5nZXQoKSk7CisgICAgY29udGV4dC5k
cmF3SW1hZ2UoZ3N0SW1hZ2UtPmltYWdlKCksIHJlY3QsIGdzdEltYWdlLT5yZWN0KCksIHsgQ29t
cG9zaXRlQ29weSwgbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkID8gbV92aWRlb1NvdXJjZU9y
aWVudGF0aW9uIDogSW1hZ2VPcmllbnRhdGlvbigpIH0pOworfQogCi0gICAgICAgIGlmIChwbGF5
YmluVXJsID09IG5ld1VybCkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiUGxheWJpbiBhbHJlYWR5IGhhbmRsZWQgcmVkaXJlY3Rpb24uIik7CisjaWYgVVNFKEdT
VFJFQU1FUl9HTCkKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb3B5VmlkZW9U
ZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBsYXRm
b3JtM0RPYmplY3Qgb3V0cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCit7CisgICAgVU5VU0VE
X1BBUkFNKGNvbnRleHQpOwogCi0gICAgICAgICAgICBtX3VybCA9IHBsYXliaW5Vcmw7CisgICAg
aWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgIGlmIChwcmVtdWx0aXBseUFs
cGhhKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0
ZShHU1RfU1RBVEVfUkVBRFkpOwotICAgICAgICBhdXRvIHNlY3VyaXR5T3JpZ2luID0gU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZShtX3VybCk7Ci0gICAgICAgIGlmIChzZWN1cml0eU9yaWdpbi0+Y2Fu
UmVxdWVzdChuZXdVcmwpKSB7Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUo
KSwgIk5ldyBtZWRpYSB1cmw6ICVzIiwgbmV3VXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7CiAKLSAgICAg
ICAgICAgIC8vIFJlc2V0IHBsYXllciBzdGF0ZXMuCi0gICAgICAgICAgICBtX25ldHdvcmtTdGF0
ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwotICAgICAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtT
dGF0ZUNoYW5nZWQoKTsKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZzsKLSAgICAgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOwor
ICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICAgICAgLy8gUmVzZXQgcGlwZWxpbmUgc3RhdGUuCi0gICAgICAgICAg
ICBtX3Jlc2V0UGlwZWxpbmUgPSB0cnVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0Zy
YW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9IG1ha2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4o
bV9zYW1wbGUuZ2V0KCksIG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1hcHBlckZs
YWdzLCB0cnVlKTsKIAotICAgICAgICAgICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgICAgICAgICBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAw
KTsKLSAgICAgICAgICAgIGlmIChzdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBTZXQgdGhlIG5ldyB1cmkgYW5kIHN0YXJ0IHBsYXlpbmcuCi0gICAgICAgICAg
ICAgICAgc2V0UGxheWJpblVSTChuZXdVcmwpOwotICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVs
aW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIEdTVF9JTkZPX09C
SkVDVChwaXBlbGluZSgpLCAiTm90IGFsbG93ZWQgdG8gbG9hZCBuZXcgbWVkaWEgbG9jYXRpb246
ICVzIiwgbmV3VXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLSAgICBtX21lZGlh
TG9jYXRpb25DdXJyZW50SW5kZXgtLTsKLSAgICByZXR1cm4gZmFsc2U7Ci19CisgICAgc3RkOjp1
bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9
IGZyYW1lSG9sZGVyLT5wbGF0Zm9ybUxheWVyQnVmZmVyKCk7CisgICAgaWYgKCFsYXllckJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZFN0YXRlQ2hhbmdlZCgpCi17Ci0gICAgdXBkYXRlU3RhdGVzKCk7Ci19CisgICAg
YXV0byBzaXplID0gZnJhbWVIb2xkZXItPnNpemUoKTsKKyAgICBpZiAobV92aWRlb1NvdXJjZU9y
aWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCisgICAgICAgIHNpemUgPSBzaXplLnRyYW5z
cG9zZWRTaXplKCk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0aW1lQ2hh
bmdlZCgpCi17Ci0gICAgdXBkYXRlU3RhdGVzKCk7Ci0gICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2Vk
KCk7CisgICAgaWYgKCFtX3ZpZGVvVGV4dHVyZUNvcGllcikKKyAgICAgICAgbV92aWRlb1RleHR1
cmVDb3BpZXIgPSBtYWtlVW5pcXVlPFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcj4oVEVYVFVS
RV9DT1BJRVJfQ09MT1JfQ09OVkVSVF9GTEFHKTsKKworICAgIGZyYW1lSG9sZGVyLT53YWl0Rm9y
Q1BVU3luYygpOworCisgICAgcmV0dXJuIG1fdmlkZW9UZXh0dXJlQ29waWVyLT5jb3B5VmlkZW9U
ZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoKmxheWVyQnVmZmVyLmdldCgpLCBzaXplLCBvdXRwdXRU
ZXh0dXJlLCBvdXRwdXRUYXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBmbGlwWSwgbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uKTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCitOYXRpdmVJbWFnZVB0ciBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKQogewotICAgIEdTVF9J
TkZPX09CSkVDVChwaXBlbGluZSgpLCAiUGxheWJhY2sgZW5kZWQiKTsKKyNpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisgICAgaWYgKG1fdXNpbmdGYWxsYmFj
a1ZpZGVvU2luaykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBTeW5jaHJvbml6
ZSBwb3NpdGlvbiBhbmQgZHVyYXRpb24gdmFsdWVzIHRvIG5vdCBjb25mdXNlIHRoZQotICAgIC8v
IEhUTUxNZWRpYUVsZW1lbnQuIEluIHNvbWUgY2FzZXMgbGlrZSByZXZlcnNlIHBsYXliYWNrIHRo
ZQotICAgIC8vIHBvc2l0aW9uIGlzIG5vdCBhbHdheXMgcmVwb3J0ZWQgYXMgMCBmb3IgaW5zdGFu
Y2UuCi0gICAgbV9jYWNoZWRQb3NpdGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAg
ICBNZWRpYVRpbWUgbm93ID0gY3VycmVudE1lZGlhVGltZSgpOwotICAgIGlmIChub3cgPiBNZWRp
YVRpbWU6Onplcm9UaW1lKCkgJiYgIW1fc2Vla2luZykgewotICAgICAgICBtX2NhY2hlZER1cmF0
aW9uID0gbm93OwotICAgICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2VkKCk7Ci0gICAgfQor
ICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7CiAKLSAgICBt
X2lzRW5kUmVhY2hlZCA9IHRydWU7CisgICAgaWYgKCFHU1RfSVNfU0FNUExFKG1fc2FtcGxlLmdl
dCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoIW1fcGxheWVyLT5jbGll
bnQoKS5tZWRpYVBsYXllcklzTG9vcGluZygpKSB7Ci0gICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsK
LSAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOwotICAgICAgICBt
X2Rvd25sb2FkRmluaXNoZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgdGltZUNoYW5nZWQoKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3N0VmlkZW9GcmFtZUhvbGRlcj4gZnJhbWVIb2xkZXIgPSBtYWtl
VW5pcXVlPEdzdFZpZGVvRnJhbWVIb2xkZXI+KG1fc2FtcGxlLmdldCgpLCBtX3ZpZGVvRGVjb2Rl
clBsYXRmb3JtLCBtX3RleHR1cmVNYXBwZXJGbGFncywgdHJ1ZSk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGxheWVyQnVmZmVyID0gZnJh
bWVIb2xkZXItPnBsYXRmb3JtTGF5ZXJCdWZmZXIoKTsKKyAgICBpZiAoIWxheWVyQnVmZmVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc2l6ZSA9IGZyYW1lSG9sZGVyLT5z
aXplKCk7CisgICAgaWYgKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdo
dCgpKQorICAgICAgICBzaXplID0gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOworCisgICAgR0xDb250
ZXh0KiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRp
bmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBpZiAoIW1fdmlkZW9UZXh0dXJlQ29waWVyKQorICAgICAgICBtX3ZpZGVvVGV4
dHVyZUNvcGllciA9IG1ha2VVbmlxdWU8VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyPihURVhU
VVJFX0NPUElFUl9DT0xPUl9DT05WRVJUX0ZMQUcpOworCisgICAgZnJhbWVIb2xkZXItPndhaXRG
b3JDUFVTeW5jKCk7CisKKyAgICBpZiAoIW1fdmlkZW9UZXh0dXJlQ29waWVyLT5jb3B5VmlkZW9U
ZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoKmxheWVyQnVmZmVyLmdldCgpLCBzaXplLCAwLCBHTF9U
RVhUVVJFXzJELCAwLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwg
bV92aWRlb1NvdXJjZU9yaWVudGF0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29u
dGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV92aWRlb1Rl
eHR1cmVDb3BpZXItPnJlc3VsdFRleHR1cmUoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KSk7CisjZWxzZQorICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCiB9CisjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUl9HTCkKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0
aW9uQ2hhbmdlZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0VmlkZW9T
b3VyY2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogewotICAgIE1l
ZGlhVGltZSBwcmV2aW91c0R1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKLSAgICBtX2Nh
Y2hlZER1cmF0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgIGlmIChtX3ZpZGVv
U291cmNlT3JpZW50YXRpb24gPT0gb3JpZW50YXRpb24pCisgICAgICAgIHJldHVybjsKIAotICAg
IC8vIEF2b2lkIGVtaXRpbmcgZHVyYXRpb25jaGFuZ2VkIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBw
cmV2aW91cwotICAgIC8vIGR1cmF0aW9uIHdhcyAwIGJlY2F1c2UgdGhhdCBjYXNlIGlzIGFscmVh
ZHkgaGFuZGxlZCBieSB0aGUKLSAgICAvLyBIVE1MTWVkaWFFbGVtZW50LgotICAgIGlmIChwcmV2
aW91c0R1cmF0aW9uICYmIGR1cmF0aW9uTWVkaWFUaW1lKCkgIT0gcHJldmlvdXNEdXJhdGlvbikK
LSAgICAgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOworICAgIG1fdmlkZW9Tb3VyY2VP
cmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAg
ICB1cGRhdGVUZXh0dXJlTWFwcGVyRmxhZ3MoKTsKKyNlbmRpZgogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIG5ldHdvcmtFcnJvciwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSwgYm9v
bCBmb3JjZU5vdGlmaWNhdGlvbnMpCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpCiB7
Ci0gICAgR1NUX1dBUk5JTkcoIkxvYWRpbmcgZmFpbGVkLCBlcnJvcjogJXMiLCBjb252ZXJ0RW51
bWVyYXRpb25Ub1N0cmluZyhuZXR3b3JrRXJyb3IpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgbV9l
cnJvck9jY3VyZWQgPSB0cnVlOwotICAgIGlmIChmb3JjZU5vdGlmaWNhdGlvbnMgfHwgbV9uZXR3
b3JrU3RhdGUgIT0gbmV0d29ya0Vycm9yKSB7Ci0gICAgICAgIG1fbmV0d29ya1N0YXRlID0gbmV0
d29ya0Vycm9yOwotICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwotICAg
IH0KLSAgICBpZiAoZm9yY2VOb3RpZmljYXRpb25zIHx8IG1fcmVhZHlTdGF0ZSAhPSByZWFkeVN0
YXRlKSB7Ci0gICAgICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7Ci0gICAgICAgIG1fcGxh
eWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIHN3aXRjaCAobV92aWRlb1NvdXJjZU9yaWVu
dGF0aW9uKSB7CisgICAgY2FzZSBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0OgorICAg
ICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luUmlnaHRUb3A6CisgICAgICAgIG1fdGV4dHVyZU1hcHBl
ckZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRSb3RhdGVUZXh0dXJlOTA7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luQm90dG9tUmlnaHQ6Cisg
ICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRSb3Rh
dGVUZXh0dXJlMTgwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEltYWdlT3JpZW50YXRpb246
Ok9yaWdpbkxlZnRCb3R0b206CisgICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gVGV4dHVy
ZU1hcHBlckdMOjpTaG91bGRSb3RhdGVUZXh0dXJlMjcwOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICAvLyBGSVhNRTogSGFuZGxlIE9yaWdpblRvcFJpZ2h0LCBPcmlnaW5C
b3R0b21MZWZ0LCBPcmlnaW5MZWZ0VG9wIGFuZCBPcmlnaW5SaWdodEJvdHRvbT8KKyAgICAgICAg
bV90ZXh0dXJlTWFwcGVyRmxhZ3MgPSAwOworICAgICAgICBicmVhazsKICAgICB9Ci0KLSAgICAv
LyBMb2FkaW5nIGZhaWxlZCwgcmVtb3ZlIHJlYWR5IHRpbWVyLgotICAgIG1fcmVhZHlUaW1lckhh
bmRsZXIuc3RvcCgpOwogfQorI2VuZGlmCiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiYgdHlwZXMpCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9y
dHNGdWxsc2NyZWVuKCkgY29uc3QKIHsKLSAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBH
U3RyZWFtZXJSZWdpc3RyeVNjYW5uZXI6OnNpbmdsZXRvbigpOwotICAgIHR5cGVzID0gZ3N0UmVn
aXN0cnlTY2FubmVyLm1pbWVUeXBlU2V0KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLU1lZGlh
UGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0
c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYgcGFyYW1ldGVycykKK01l
ZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bW92
aWVMb2FkVHlwZSgpIGNvbnN0CiB7Ci0gICAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSByZXN1
bHQgPSBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQ7Ci0jaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKLSAgICAvLyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UgaXMgaW4gY2hhcmdlIG9m
IG1lZGlhc291cmNlIHBsYXliYWNrLCBub3QgdXMuCi0gICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRp
YVNvdXJjZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSNlbmRpZgorICAgIGlmIChtX3JlYWR5
U3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQorICAgICAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6OlVua25vd247CiAKLSNpZiAhRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBpZiAocGFy
YW1ldGVycy5pc01lZGlhU3RyZWFtKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotI2VuZGlmCisg
ICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkxpdmVT
dHJlYW07CiAKLSAgICBpZiAocGFyYW1ldGVycy50eXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkRvd25sb2FkOworfQogCi0gICAg
R1NUX0RFQlVHKCJDaGVja2luZyBtaW1lLXR5cGUgXCIlc1wiIiwgcGFyYW1ldGVycy50eXBlLnJh
dygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGF1dG8gY29udGFpbmVyVHlwZSA9IHBhcmFtZXRlcnMu
dHlwZS5jb250YWluZXJUeXBlKCk7Ci0gICAgYXV0byYgZ3N0UmVnaXN0cnlTY2FubmVyID0gR1N0
cmVhbWVyUmVnaXN0cnlTY2FubmVyOjpzaW5nbGV0b24oKTsKLSAgICBpZiAoZ3N0UmVnaXN0cnlT
Y2FubmVyLmlzQ29udGFpbmVyVHlwZVN1cHBvcnRlZChjb250YWluZXJUeXBlKSkgewotICAgICAg
ICAvLyBTcGVjIHNheXMgd2Ugc2hvdWxkIG5vdCByZXR1cm4gInByb2JhYmx5IiBpZiB0aGUgY29k
ZWNzIHN0cmluZyBpcyBlbXB0eS4KLSAgICAgICAgVmVjdG9yPFN0cmluZz4gY29kZWNzID0gcGFy
YW1ldGVycy50eXBlLmNvZGVjcygpOwotICAgICAgICByZXN1bHQgPSBjb2RlY3MuaXNFbXB0eSgp
ID8gTWVkaWFQbGF5ZXI6Ok1heUJlU3VwcG9ydGVkIDogKGdzdFJlZ2lzdHJ5U2Nhbm5lci5hcmVB
bGxDb2RlY3NTdXBwb3J0ZWQoY29kZWNzKSA/IE1lZGlhUGxheWVyOjpJc1N1cHBvcnRlZCA6IE1l
ZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZCk7Ci0gICAgfQorI2lmIFVTRShHU1RSRUFNRVJfR0wp
CitHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdMQXBwU2lu
aygpCit7CisgICAgR3N0RWxlbWVudCogYXBwc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFr
ZSgiYXBwc2luayIsICJ3ZWJraXQtZ2wtdmlkZW8tc2luayIpOworICAgIGlmICghYXBwc2luaykK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBnX29iamVjdF9zZXQoYXBwc2luaywgImVu
YWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAiZW1pdC1zaWduYWxzIiwgVFJVRSwgIm1heC1idWZm
ZXJzIiwgMSwgbnVsbHB0cik7CisgICAgZ19zaWduYWxfY29ubmVjdChhcHBzaW5rLCAibmV3LXNh
bXBsZSIsIEdfQ0FMTEJBQ0sobmV3U2FtcGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KGFwcHNpbmssICJuZXctcHJlcm9sbCIsIEdfQ0FMTEJBQ0sobmV3UHJlcm9sbENh
bGxiYWNrKSwgdGhpcyk7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGFwcHNpbmssICJzaW5rIikpOworICAgIGdzdF9wYWRf
YWRkX3Byb2JlKHBhZC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0UGFkUHJvYmVUeXBlPihHU1RfUEFE
X1BST0JFX1RZUEVfUFVTSCB8IEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dOU1RSRUFNIHwg
R1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSwgW10gKEdzdFBhZCosIEdzdFBhZFByb2Jl
SW5mbyogaW5mbywgIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHc3RQYWRQcm9iZVJldHVybiB7Cisg
ICAgICAgIC8vIEluIHNvbWUgcGxhdGZvcm1zIChlLmcuIE9wZW5NQVggb24gdGhlIFJhc3BiZXJy
eSBQaSkgd2hlbiBhIHJlc29sdXRpb24gY2hhbmdlIG9jY3VycyB0aGUKKyAgICAgICAgLy8gcGlw
ZWxpbmUgaGFzIHRvIGJlIGRyYWluZWQgYmVmb3JlIGEgZnJhbWUgd2l0aCB0aGUgbmV3IHJlc29s
dXRpb24gY2FuIGJlIGRlY29kZWQuCisgICAgICAgIC8vIEluIHRoaXMgY29udGV4dCwgaXQncyBp
bXBvcnRhbnQgdGhhdCB3ZSBkb24ndCBob2xkIHJlZmVyZW5jZXMgdG8gYW55IHByZXZpb3VzIGZy
YW1lCisgICAgICAgIC8vIChlLmcuIG1fc2FtcGxlKSBzbyB0aGF0IGRlY29kaW5nIGNhbiBjb250
aW51ZS4KKyAgICAgICAgLy8gV2UgYXJlIGFsc28gbm90IHN1cHBvc2VkIHRvIGtlZXAgdGhlIG9y
aWdpbmFsIGZyYW1lIGFmdGVyIGEgZmx1c2guCisgICAgICAgIGlmIChpbmZvLT50eXBlICYgR1NU
X1BBRF9QUk9CRV9UWVBFX1FVRVJZX0RPV05TVFJFQU0pIHsKKyAgICAgICAgICAgIGlmIChHU1Rf
UVVFUllfVFlQRShHU1RfUEFEX1BST0JFX0lORk9fUVVFUlkoaW5mbykpICE9IEdTVF9RVUVSWV9E
UkFJTikKKyAgICAgICAgICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAgICAgICAg
ICAgIEdTVF9ERUJVRygiQWN0aW5nIHVwb24gRFJBSU4gcXVlcnkiKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCkgewor
ICAgICAgICAgICAgaWYgKEdTVF9FVkVOVF9UWVBFKEdTVF9QQURfUFJPQkVfSU5GT19FVkVOVChp
bmZvKSkgIT0gR1NUX0VWRU5UX0ZMVVNIX1NUQVJUKQorICAgICAgICAgICAgICAgIHJldHVybiBH
U1RfUEFEX1BST0JFX09LOworICAgICAgICAgICAgR1NUX0RFQlVHKCJBY3RpbmcgdXBvbiBmbHVz
aC1zdGFydCBldmVudCIpOworICAgICAgICB9CiAKLSAgICBhdXRvIGZpbmFsUmVzdWx0ID0gZXh0
ZW5kZWRTdXBwb3J0c1R5cGUocGFyYW1ldGVycywgcmVzdWx0KTsKLSAgICBHU1RfREVCVUcoIlN1
cHBvcnRlZDogJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhmaW5hbFJlc3VsdCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGZpbmFsUmVzdWx0OworICAgICAgICBhdXRvKiBwbGF5
ZXIgPSBzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqPih1c2VyRGF0YSk7
CisgICAgICAgIHBsYXllci0+Zmx1c2hDdXJyZW50QnVmZmVyKCk7CisgICAgICAgIHJldHVybiBH
U1RfUEFEX1BST0JFX09LOworICAgIH0sIHRoaXMsIG51bGxwdHIpOworCisgICAgcmV0dXJuIGFw
cHNpbms7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVEb3du
bG9hZEJ1ZmZlcmluZ0ZsYWcoKQorR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGVWaWRlb1NpbmtHTCgpCiB7Ci0gICAgaWYgKCFtX3BpcGVsaW5lKQotICAgICAg
ICByZXR1cm47CisgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gVFJVRTsKKyAgICBHc3RFbGVtZW50KiB2
aWRlb1NpbmsgPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBHc3RFbGVtZW50KiB1cGxvYWQg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsdXBsb2FkIiwgbnVsbHB0cik7CisgICAgR3N0
RWxlbWVudCogY29sb3Jjb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJnbGNvbG9y
Y29udmVydCIsIG51bGxwdHIpOworICAgIEdzdEVsZW1lbnQqIGFwcHNpbmsgPSBjcmVhdGVHTEFw
cFNpbmsoKTsKIAotICAgIHVuc2lnbmVkIGZsYWdzOwotICAgIGdfb2JqZWN0X2dldChtX3BpcGVs
aW5lLmdldCgpLCAiZmxhZ3MiLCAmZmxhZ3MsIG51bGxwdHIpOworICAgIC8vIGdsc2lua2JpbiBp
cyBub3QgdXNlZCBiZWNhdXNlIGl0IGluY2x1ZGVzIGdsY29sb3Jjb252ZXJ0IHdoaWNoIG9ubHkg
cHJvY2VzcyBSR0JBLAorICAgIC8vIGJ1dCB3ZSBjYW4gZGlzcGxheSBZVVYgZm9ybWF0cyB0b28u
CiAKLSAgICB1bnNpZ25lZCBmbGFnRG93bmxvYWQgPSBnZXRHc3RQbGF5RmxhZygiZG93bmxvYWQi
KTsKKyAgICBpZiAoIWFwcHNpbmsgfHwgIXVwbG9hZCB8fCAhY29sb3Jjb252ZXJ0KSB7CisgICAg
ICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gY3JlYXRlIEdzdEdMIGVsZW1lbnRzIik7CisgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYodmlkZW9TaW5rKTsKIAotICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8gc3RvcCBkb3dubG9hZGluZyBpZiB3ZSBhbHJlYWR5IHN0YXJ0ZWQgaXQuCi0gICAgaWYgKGZs
YWdzICYgZmxhZ0Rvd25sb2FkICYmIG1fcmVhZHlTdGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZyAmJiAhbV9yZXNldFBpcGVsaW5lKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIkRvd25sb2FkIGFscmVhZHkgc3RhcnRlZCwgbm90IHN0YXJ0aW5nIGFnYWluIik7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHVwbG9hZCkKKyAgICAgICAgICAgIGdzdF9v
YmplY3RfdW5yZWYodXBsb2FkKTsKKyAgICAgICAgaWYgKGNvbG9yY29udmVydCkKKyAgICAgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYoY29sb3Jjb252ZXJ0KTsKKyAgICAgICAgaWYgKGFwcHNpbmsp
CisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKGFwcHNpbmspOworCisgICAgICAgIGdfd2Fy
bmluZygiV2ViS2l0IHdhc24ndCBhYmxlIHRvIGZpbmQgdGhlIEdTdHJlYW1lciBvcGVuZ2wgcGx1
Z2luLiBIYXJkd2FyZS1hY2NlbGVyYXRlZCB6ZXJvLWNvcHkgdmlkZW8gcmVuZGVyaW5nIGNhbid0
IGJlIGVuYWJsZWQgd2l0aG91dCB0aGlzIHBsdWdpbi4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCi0gICAgYm9vbCBzaG91bGREb3dubG9hZCA9ICFpc0xpdmVTdHJlYW0oKSAm
JiBtX3ByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6OkF1dG87Ci0gICAgaWYgKHNob3VsZERvd25sb2Fk
KSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiRW5hYmxpbmcgb24tZGlz
ayBidWZmZXJpbmciKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJm
bGFncyIsIGZsYWdzIHwgZmxhZ0Rvd25sb2FkLCBudWxscHRyKTsKLSAgICAgICAgbV9maWxsVGlt
ZXIuc3RhcnRSZXBlYXRpbmcoMjAwX21zKTsKLSAgICB9IGVsc2UgewotICAgICAgICBHU1RfSU5G
T19PQkpFQ1QocGlwZWxpbmUoKSwgIkRpc2FibGluZyBvbi1kaXNrIGJ1ZmZlcmluZyIpOwotICAg
ICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwgZmxhZ3MgJiB+Zmxh
Z0Rvd25sb2FkLCBudWxscHRyKTsKLSAgICAgICAgbV9maWxsVGltZXIuc3RvcCgpOworICAgIGdz
dF9iaW5fYWRkX21hbnkoR1NUX0JJTih2aWRlb1NpbmspLCB1cGxvYWQsIGNvbG9yY29udmVydCwg
YXBwc2luaywgbnVsbHB0cik7CisKKyAgICAvLyBXb3JrYXJvdW5kIHVudGlsIHdlIGNhbiBkZXBl
bmQgb24gR1N0cmVhbWVyIDEuMTYuMi4KKyAgICAvLyBodHRwczovL2dpdGxhYi5mcmVlZGVza3Rv
cC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhc2UvY29tbWl0LzhkMzJkZTA5MDU1NGNmMjlm
ZTM1OWY4M2FhNDYwMDBiYTY1OGE2OTMKKyAgICAvLyBGb3JjaW5nIGEgY29sb3IgY29udmVyc2lv
biB0byBSR0JBIGhlcmUgYWxsb3dzIGdsdXBsb2FkIHRvIGludGVybmFsbHkgdXNlCisgICAgLy8g
YW4gdXBsb2FkZXIgdGhhdCBhZGRzIGEgVmlkZW9NZXRhLCB0aHJvdWdoIHRoZSBUZXh0dXJlVXBs
b2FkTWV0YSBjYXBzCisgICAgLy8gZmVhdHVyZSwgd2l0aG91dCBuZWVkaW5nIHRoZSBwYXRjaCBh
Ym92ZS4gSG93ZXZlciB0aGlzIHNwZWNpZmljIGNhcHMKKyAgICAvLyBmZWF0dXJlIGlzIGdvaW5n
IHRvIGJlIHJlbW92ZWQgZnJvbSBHU3RyZWFtZXIgc28gaXQgaXMgY29uc2lkZXJlZCBhCisgICAg
Ly8gc2hvcnQtdGVybSB3b3JrYXJvdW5kLiBUaGlzIGNvZGUgcGF0aCBtb3N0IGxpa2VseSB3aWxs
IGhhdmUgYSBuZWdhdGl2ZQorICAgIC8vIHBlcmZvcm1hbmNlIGltcGFjdCBvbiBlbWJlZGRlZCBw
bGF0Zm9ybXMgYXMgd2VsbC4gRG93bnN0cmVhbSBlbWJlZGRlcnMKKyAgICAvLyBhcmUgaGlnaGx5
IGVuY291cmFnZWQgdG8gY2hlcnJ5LXBpY2sgdGhlIHBhdGNoIGxpbmtlZCBhYm92ZSBpbiB0aGVp
ciBCU1AKKyAgICAvLyBhbmQgc2V0IHRoZSBXRUJLSVRfR1NUX05PX1JHQkFfQ09OVkVSU0lPTiBl
bnZpcm9ubWVudCB2YXJpYWJsZSB1bnRpbAorICAgIC8vIEdTdHJlYW1lciAxLjE2LjIgaXMgcmVs
ZWFzZWQuCisgICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMTQyMgorICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAgICBpZiAod2Via2l0
R3N0Q2hlY2tWZXJzaW9uKDEsIDE2LCAyKSB8fCBnZXRlbnYoIldFQktJVF9HU1RfTk9fUkdCQV9D
T05WRVJTSU9OIikpCisgICAgICAgIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJp
bmcoInZpZGVvL3gtcmF3LCBmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9HTF9DQVBTX0ZPUk1BVCkp
OworICAgIGVsc2UgeworICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkZvcmNp
bmcgUkdCQSBhcyBHU3RyZWFtZXIgaXMgbm90IG5ldyBlbm91Z2guIik7CisgICAgICAgIGNhcHMg
PSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoInZpZGVvL3gtcmF3LCBmb3JtYXQgPSAo
c3RyaW5nKSBSR0JBIikpOwogICAgIH0KLX0KKyAgICBnc3RfY2Fwc19zZXRfZmVhdHVyZXMoY2Fw
cy5nZXQoKSwgMCwgZ3N0X2NhcHNfZmVhdHVyZXNfbmV3KEdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZ
X0dMX01FTU9SWSwgbnVsbHB0cikpOworICAgIGdfb2JqZWN0X3NldChhcHBzaW5rLCAiY2FwcyIs
IGNhcHMuZ2V0KCksIG51bGxwdHIpOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQotewotICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgcHJlbG9hZCB0byAlcyIsIGNvbnZlcnRF
bnVtZXJhdGlvblRvU3RyaW5nKHByZWxvYWQpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChwcmVs
b2FkID09IE1lZGlhUGxheWVyOjpBdXRvICYmIGlzTGl2ZVN0cmVhbSgpKQotICAgICAgICByZXR1
cm47CisgICAgcmVzdWx0ICY9IGdzdF9lbGVtZW50X2xpbmtfbWFueSh1cGxvYWQsIGNvbG9yY29u
dmVydCwgYXBwc2luaywgbnVsbHB0cik7CiAKLSAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOwotICAg
IHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpOworICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQodXBsb2FkLCAic2luayIpKTsK
KyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKHZpZGVvU2luaywgZ3N0X2dob3N0X3BhZF9uZXcoInNp
bmsiLCBwYWQuZ2V0KCkpKTsKIAotICAgIGlmIChtX2RlbGF5aW5nTG9hZCAmJiBtX3ByZWxvYWQg
IT0gTWVkaWFQbGF5ZXI6Ok5vbmUpIHsKLSAgICAgICAgbV9kZWxheWluZ0xvYWQgPSBmYWxzZTsK
LSAgICAgICAgY29tbWl0TG9hZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEdTVF9X
QVJOSU5HKCJGYWlsZWQgdG8gbGluayBHc3RHTCBlbGVtZW50cyIpOworICAgICAgICBnc3Rfb2Jq
ZWN0X3VucmVmKHZpZGVvU2luayk7CisgICAgICAgIHZpZGVvU2luayA9IG51bGxwdHI7CiAgICAg
fQorICAgIHJldHVybiB2aWRlb1Npbms7CiB9CiAKLUdzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlQXVkaW9TaW5rKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjplbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKQogewotICAgIG1fYXV0b0F1ZGlv
U2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXV0b2F1ZGlvc2luayIsIG51bGxwdHIp
OwotICAgIGlmICghbV9hdXRvQXVkaW9TaW5rKSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJHU3Ry
ZWFtZXIncyBhdXRvYXVkaW9zaW5rIG5vdCBmb3VuZC4gUGxlYXNlIGNoZWNrIHlvdXIgZ3N0LXBs
dWdpbnMtZ29vZCBpbnN0YWxsYXRpb24iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQorICAgIGlmICghbV9nbERpc3BsYXlFbGVtZW50Q29udGV4dCkKKyAgICAgICAgbV9nbERpc3Bs
YXlFbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0R0xDb250ZXh0KEdTVF9HTF9ESVNQ
TEFZX0NPTlRFWFRfVFlQRSkpOwogCi0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fYXV0
b0F1ZGlvU2luay5nZXQoKSwgImNoaWxkLWFkZGVkIiwgR19DQUxMQkFDSyhzZXRBdWRpb1N0cmVh
bVByb3BlcnRpZXNDYWxsYmFjayksIHRoaXMpOworICAgIGlmIChtX2dsRGlzcGxheUVsZW1lbnRD
b250ZXh0KQorICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChtX3ZpZGVvU2luay5nZXQo
KSwgbV9nbERpc3BsYXlFbGVtZW50Q29udGV4dC5nZXQoKSk7CiAKLSNpZiBFTkFCTEUoV0VCX0FV
RElPKQotICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2lua0JpbiA9IGdzdF9iaW5fbmV3KCJhdWRpby1z
aW5rIik7Ci0gICAgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRlcigpOwotICAgIG1fYXVkaW9Tb3Vy
Y2VQcm92aWRlci0+Y29uZmlndXJlQXVkaW9CaW4oYXVkaW9TaW5rQmluLCBudWxscHRyKTsKLSAg
ICByZXR1cm4gYXVkaW9TaW5rQmluOwotI2Vsc2UKLSAgICByZXR1cm4gbV9hdXRvQXVkaW9TaW5r
LmdldCgpOwotI2VuZGlmCisgICAgaWYgKCFtX2dsQXBwRWxlbWVudENvbnRleHQpCisgICAgICAg
IG1fZ2xBcHBFbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0R0xDb250ZXh0KCJnc3Qu
Z2wuYXBwX2NvbnRleHQiKSk7CisKKyAgICBpZiAobV9nbEFwcEVsZW1lbnRDb250ZXh0KQorICAg
ICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChtX3ZpZGVvU2luay5nZXQoKSwgbV9nbEFwcEVs
ZW1lbnRDb250ZXh0LmdldCgpKTsKIH0KKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQogCi1H
c3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvU2luaygpIGNvbnN0
CisjaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCitzdGF0aWMgdm9pZCBzZXRSZWN0YW5nbGVU
b1ZpZGVvU2luayhHc3RFbGVtZW50KiB2aWRlb1NpbmssIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgR3N0RWxlbWVudCogc2luazsKLSAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQo
KSwgImF1ZGlvLXNpbmsiLCAmc2luaywgbnVsbHB0cik7Ci0gICAgcmV0dXJuIHNpbms7CisgICAg
Ly8gSGVyZSBnb2VzIHRoZSBwbGF0Zm9ybS1kZXBlbmRhbnQgY29kZSB0byBzZXQgdG8gdGhlIHZp
ZGVvU2luayB0aGUgc2l6ZQorICAgIC8vIGFuZCBwb3NpdGlvbiBvZiB0aGUgdmlkZW8gcmVuZGVy
aW5nIHdpbmRvdy4gTWFyayB0aGVtIHVudXNlZCBhcyBkZWZhdWx0LgorICAgIFVOVVNFRF9QQVJB
TSh2aWRlb1NpbmspOworICAgIFVOVVNFRF9QQVJBTShyZWN0KTsKIH0KIAotI2lmIEVOQUJMRShX
RUJfQVVESU8pCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlQXVkaW9T
b3VyY2VQcm92aWRlcigpCitjbGFzcyBHU3RyZWFtZXJIb2xlUHVuY2hDbGllbnQgOiBwdWJsaWMg
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI6OkhvbGVQdW5jaENsaWVudCB7CitwdWJs
aWM6CisgICAgR1N0cmVhbWVySG9sZVB1bmNoQ2xpZW50KEdSZWZQdHI8R3N0RWxlbWVudD4mJiB2
aWRlb1NpbmspIDogbV92aWRlb1NpbmsoV1RGTW92ZSh2aWRlb1NpbmspKSB7IH07CisgICAgdm9p
ZCBzZXRWaWRlb1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiByZWN0KSBmaW5hbCB7IHNldFJlY3Rh
bmdsZVRvVmlkZW9TaW5rKG1fdmlkZW9TaW5rLmdldCgpLCByZWN0KTsgfQorcHJpdmF0ZToKKyAg
ICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmlkZW9TaW5rOworfTsKKworR3N0RWxlbWVudCogTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVIb2xlUHVuY2hWaWRlb1NpbmsoKQogewot
ICAgIGlmICghbV9hdWRpb1NvdXJjZVByb3ZpZGVyKQotICAgICAgICBtX2F1ZGlvU291cmNlUHJv
dmlkZXIgPSBtYWtlVW5pcXVlPEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI+KCk7CisgICAg
Ly8gSGVyZSBnb2VzIHRoZSBwbGF0Zm9ybS1kZXBlbmRhbnQgY29kZSB0byBjcmVhdGUgdGhlIHZp
ZGVvU2luay4gQXMgYSBkZWZhdWx0CisgICAgLy8gd2UgdXNlIGEgZmFrZVZpZGVvU2luayBzbyBu
b3RoaW5nIGlzIGRyYXduIHRvIHRoZSBwYWdlLgorICAgIEdzdEVsZW1lbnQqIHZpZGVvU2luayA9
ICBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImZha2V2aWRlb3NpbmsiLCBudWxscHRyKTsKKwor
ICAgIHJldHVybiB2aWRlb1Npbms7CiB9CiAKLUF1ZGlvU291cmNlUHJvdmlkZXIqIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9Tb3VyY2VQcm92aWRlcigpCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKQogewotICAgIGVu
c3VyZUF1ZGlvU291cmNlUHJvdmlkZXIoKTsKLSAgICByZXR1cm4gbV9hdWRpb1NvdXJjZVByb3Zp
ZGVyLmdldCgpOworICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQorICAgICAgICBbdGhpc10oVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7CisgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGxheWVyQnVmZmVyID0g
bWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4oMCwgbV9zaXplLCBU
ZXh0dXJlTWFwcGVyR0w6OlNob3VsZE5vdEJsZW5kLCBHTF9ET05UX0NBUkUpOworICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lckhvbGVQdW5jaENsaWVudD4gaG9sZVB1bmNoQ2xp
ZW50ID0gbWFrZVVuaXF1ZTxHU3RyZWFtZXJIb2xlUHVuY2hDbGllbnQ+KG1fdmlkZW9TaW5rLmdl
dCgpKTsKKyAgICAgICAgICAgIGxheWVyQnVmZmVyLT5zZXRIb2xlUHVuY2hDbGllbnQoV1RGTW92
ZShob2xlUHVuY2hDbGllbnQpKTsKKyAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKFdU
Rk1vdmUobGF5ZXJCdWZmZXIpKTsKKyAgICAgICAgfTsKKworI2lmIFVTRShOSUNPU0lBKQorICAg
IHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgcHJv
eHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgogfQogI2VuZGlmCiAK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBpcGVsaW5lTmFtZSkKK0dzdEVsZW1lbnQqIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5rKCkKIHsKLSAgICBjb25zdCBn
Y2hhciogcGxheWJpbk5hbWUgPSAicGxheWJpbiI7CisgICAgYWNjZWxlcmF0ZWRSZW5kZXJpbmdT
dGF0ZUNoYW5nZWQoKTsKIAotICAgIC8vIE1TRSBkb2Vzbid0IHN1cHBvcnQgcGxheWJpbjMuIE1l
ZGlhc3RyZWFtIHJlcXVpcmVzIHBsYXliaW4zLiBSZWd1bGFyCi0gICAgLy8gcGxheWJhY2sgY2Fu
IHVzZSBwbGF5YmluMyBvbi1kZW1hbmQgd2l0aCB0aGUgV0VCS0lUX0dTVF9VU0VfUExBWUJJTjMK
LSAgICAvLyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLSAgICBpZiAoKCFpc01lZGlhU291cmNlKCkg
JiYgZ19nZXRlbnYoIldFQktJVF9HU1RfVVNFX1BMQVlCSU4zIikpIHx8IHVybC5wcm90b2NvbElz
KCJtZWRpYXN0cmVhbSIpKQotICAgICAgICBwbGF5YmluTmFtZSA9ICJwbGF5YmluMyI7CisjaWYg
VVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCisgICAgbV92aWRlb1NpbmsgPSBjcmVhdGVIb2xlUHVu
Y2hWaWRlb1NpbmsoKTsKKyAgICBwdXNoTmV4dEhvbGVQdW5jaEJ1ZmZlcigpOworICAgIHJldHVy
biBtX3ZpZGVvU2luay5nZXQoKTsKKyNlbmRpZgogCi0gICAgaWYgKG1fcGlwZWxpbmUpIHsKLSAg
ICAgICAgaWYgKCFnX3N0cmNtcDAoR1NUX09CSkVDVF9OQU1FKGdzdF9lbGVtZW50X2dldF9mYWN0
b3J5KG1fcGlwZWxpbmUuZ2V0KCkpKSwgcGxheWJpbk5hbWUpKSB7Ci0gICAgICAgICAgICBHU1Rf
SU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkFscmVhZHkgdXNpbmcgJXMiLCBwbGF5YmluTmFtZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQor
ICAgIGlmIChtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQpCisgICAgICAgIG1fdmlkZW9TaW5r
ID0gY3JlYXRlVmlkZW9TaW5rR0woKTsKKyNlbmRpZgogCi0gICAgICAgIEdTVF9JTkZPX09CSkVD
VChwaXBlbGluZSgpLCAiVGVhcmluZyBkb3duIGFzIHdlIG5lZWQgdG8gdXNlICVzIG5vdy4iLCBw
bGF5YmluTmFtZSk7Ci0gICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX05VTEwp
OwotICAgICAgICBtX3BpcGVsaW5lID0gbnVsbHB0cjsKKyAgICBpZiAoIW1fdmlkZW9TaW5rKSB7
CisgICAgICAgIG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayA9IHRydWU7CisgICAgICAgIG1fdmlk
ZW9TaW5rID0gd2Via2l0VmlkZW9TaW5rTmV3KCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZChtX3ZpZGVvU2luay5nZXQoKSwgInJlcGFpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFD
SyhyZXBhaW50Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKG1fdmlkZW9TaW5rLmdldCgpLCAicmVwYWludC1jYW5jZWxsZWQiLCBHX0NBTExCQUNLKHJl
cGFpbnRDYW5jZWxsZWRDYWxsYmFjayksIHRoaXMpOwogICAgIH0KIAotICAgIEFTU0VSVCghbV9w
aXBlbGluZSk7CisgICAgR3N0RWxlbWVudCogdmlkZW9TaW5rID0gbnVsbHB0cjsKKyNpZiBFTkFC
TEUoTUVESUFfU1RBVElTVElDUykKKyAgICBtX2Zwc1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5
X21ha2UoImZwc2Rpc3BsYXlzaW5rIiwgInNpbmsiKTsKKyAgICBpZiAobV9mcHNTaW5rKSB7Cisg
ICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmsuZ2V0KCksICJzaWxlbnQiLCBUUlVFICwgbnVs
bHB0cik7CiAKLSAgICBtX2lzTGVnYWN5UGxheWJpbiA9ICFnX3N0cmNtcDAocGxheWJpbk5hbWUs
ICJwbGF5YmluIik7CisgICAgICAgIC8vIFR1cm4gb2ZmIHRleHQgb3ZlcmxheSB1bmxlc3MgdHJh
Y2luZyBpcyBlbmFibGVkLgorICAgICAgICBpZiAoZ3N0X2RlYnVnX2NhdGVnb3J5X2dldF90aHJl
c2hvbGQod2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZykgPCBHU1RfTEVWRUxfVFJBQ0UpCisgICAg
ICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLmdldCgpLCAidGV4dC1vdmVybGF5IiwgRkFM
U0UgLCBudWxscHRyKTsKIAotICAgIC8vIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgpIHJldHVy
bnMgYSBmbG9hdGluZyByZWZlcmVuY2Ugc28KLSAgICAvLyB3ZSBzaG91bGQgbm90IGFkb3B0Lgot
ICAgIHN0YXRpYyBBdG9taWM8dWludDMyX3Q+IHBpcGVsaW5lSWQ7Ci0gICAgc2V0UGlwZWxpbmUo
Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKHBsYXliaW5OYW1lLAotICAgICAgICAocGlwZWxpbmVO
YW1lLmlzRW1wdHkoKSA/IG1ha2VTdHJpbmcoIm1lZGlhLXBsYXllci0iLCBwaXBlbGluZUlkLmV4
Y2hhbmdlQWRkKDEpKSA6IHBpcGVsaW5lTmFtZSkudXRmOCgpLmRhdGEoKSkpOwotICAgIHNldFN0
cmVhbVZvbHVtZUVsZW1lbnQoR1NUX1NUUkVBTV9WT0xVTUUobV9waXBlbGluZS5nZXQoKSkpOwor
ICAgICAgICBpZiAoZ19vYmplY3RfY2xhc3NfZmluZF9wcm9wZXJ0eShHX09CSkVDVF9HRVRfQ0xB
U1MobV9mcHNTaW5rLmdldCgpKSwgInZpZGVvLXNpbmsiKSkgeworICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fZnBzU2luay5nZXQoKSwgInZpZGVvLXNpbmsiLCBtX3ZpZGVvU2luay5nZXQoKSwg
bnVsbHB0cik7CisgICAgICAgICAgICB2aWRlb1NpbmsgPSBtX2Zwc1NpbmsuZ2V0KCk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9mcHNTaW5rID0gbnVsbHB0cjsKKyAgICB9CisjZW5k
aWYKIAotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiVXNpbmcgbGVnYWN5IHBsYXli
aW4gZWxlbWVudDogJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc0xlZ2FjeVBsYXliaW4pKTsKKyAg
ICBpZiAoIW1fZnBzU2luaykKKyAgICAgICAgdmlkZW9TaW5rID0gbV92aWRlb1NpbmsuZ2V0KCk7
CiAKLSAgICAvLyBMZXQgYWxzbyBvdGhlciBsaXN0ZW5lcnMgc3Vic2NyaWJlIHRvIChhcHBsaWNh
dGlvbikgbWVzc2FnZXMgaW4gdGhpcyBidXMuCi0gICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFk
b3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQo
KSkpKTsKLSAgICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbChidXMuZ2V0KCksIFJ1bkxv
b3BTb3VyY2VQcmlvcml0eTo6UnVuTG9vcERpc3BhdGNoZXIpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoYnVzLmdldCgpLCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0soYnVzTWVzc2FnZUNhbGxiYWNrKSwg
dGhpcyk7CisgICAgQVNTRVJUKHZpZGVvU2luayk7CiAKLSAgICBnX29iamVjdF9zZXQobV9waXBl
bGluZS5nZXQoKSwgIm11dGUiLCBtX3BsYXllci0+bXV0ZWQoKSwgbnVsbHB0cik7CisgICAgcmV0
dXJuIHZpZGVvU2luazsKK30KIAotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1NUX0JJTl9DQVNUKG1f
cGlwZWxpbmUuZ2V0KCkpLCAiZGVlcC1lbGVtZW50LWFkZGVkIiwgR19DQUxMQkFDSygrW10oR3N0
QmluKiwgR3N0QmluKiBzdWJCaW4sIEdzdEVsZW1lbnQqIGVsZW1lbnQsIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciogcGxheWVyKSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmluTmFt
ZShnc3RfZWxlbWVudF9nZXRfbmFtZShHU1RfRUxFTUVOVF9DQVNUKHN1YkJpbikpKTsKLSAgICAg
ICAgaWYgKCFnX3N0cl9oYXNfcHJlZml4KGJpbk5hbWUuZ2V0KCksICJkZWNvZGViaW4iKSkKLSAg
ICAgICAgICAgIHJldHVybjsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRT
dHJlYW1Wb2x1bWVFbGVtZW50KEdzdFN0cmVhbVZvbHVtZSogdm9sdW1lKQoreworICAgIEFTU0VS
VCghbV92b2x1bWVFbGVtZW50KTsKKyAgICBtX3ZvbHVtZUVsZW1lbnQgPSB2b2x1bWU7CiAKLSAg
ICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBlbGVtZW50TmFtZShnc3RfZWxlbWVudF9nZXRfbmFtZShl
bGVtZW50KSk7Ci0gICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KGVsZW1lbnROYW1lLmdldCgp
LCAidjRsMiIpKQotICAgICAgICAgICAgcGxheWVyLT5tX3ZpZGVvRGVjb2RlclBsYXRmb3JtID0g
R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OlZpZGVvNExpbnV4OwotICAgICAgICBlbHNlIGlmIChn
X3N0cl9oYXNfcHJlZml4KGVsZW1lbnROYW1lLmdldCgpLCAiaW14dnB1ZGVjIikpCi0gICAgICAg
ICAgICBwbGF5ZXItPm1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gPSBHc3RWaWRlb0RlY29kZXJQbGF0
Zm9ybTo6SW14VlBVOworICAgIC8vIFdlIGRvbid0IHNldCB0aGUgaW5pdGlhbCB2b2x1bWUgYmVj
YXVzZSB3ZSB0cnVzdCB0aGUgc2luayB0byBrZWVwIGl0IGZvciB1cy4gU2VlCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODk3NCBmb3IgbW9yZSBpbmZv
cm1hdGlvbi4KKyAgICBpZiAoIW1fcGxheWVyLT5wbGF0Zm9ybVZvbHVtZUNvbmZpZ3VyYXRpb25S
ZXF1aXJlZCgpKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRp
bmcgc3RyZWFtIHZvbHVtZSB0byAlZiIsIG1fcGxheWVyLT52b2x1bWUoKSk7CisgICAgICAgIGdz
dF9zdHJlYW1fdm9sdW1lX3NldF92b2x1bWUobV92b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RS
RUFNX1ZPTFVNRV9GT1JNQVRfTElORUFSLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1fcGxheWVyLT52
b2x1bWUoKSkpOworICAgIH0gZWxzZQorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJOb3Qgc2V0dGluZyBzdHJlYW0gdm9sdW1lLCB0cnVzdGluZyBzeXN0ZW0gb25lIik7CiAK
LSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgICAgIHBsYXllci0+dXBkYXRlVGV4dHVy
ZU1hcHBlckZsYWdzKCk7Ci0jZW5kaWYKLSAgICB9KSwgdGhpcyk7CisgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyBzdHJlYW0gbXV0ZWQgJXMiLCB0b1N0cmluZyhtX3Bs
YXllci0+bXV0ZWQoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgZ19vYmplY3Rfc2V0KG1fdm9sdW1l
RWxlbWVudC5nZXQoKSwgIm11dGUiLCBtX3BsYXllci0+bXV0ZWQoKSwgbnVsbHB0cik7CiAKLSAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgInNvdXJjZS1zZXR1
cCIsIEdfQ0FMTEJBQ0soc291cmNlU2V0dXBDYWxsYmFjayksIHRoaXMpOwotICAgIGlmIChtX2lz
TGVnYWN5UGxheWJpbikgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBl
bGluZS5nZXQoKSwgInZpZGVvLWNoYW5nZWQiLCBHX0NBTExCQUNLKHZpZGVvQ2hhbmdlZENhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5l
LmdldCgpLCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0soYXVkaW9DaGFuZ2VkQ2FsbGJhY2sp
LCB0aGlzKTsKLSAgICB9CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdm9sdW1lRWxl
bWVudC5nZXQoKSwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyh2b2x1bWVDaGFuZ2VkQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92b2x1bWVFbGVt
ZW50LmdldCgpLCAibm90aWZ5OjptdXRlIiwgR19DQUxMQkFDSyhtdXRlQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7Cit9CiAKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgaWYgKG1faXNMZWdh
Y3lQbGF5YmluKQotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5n
ZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkZWNvZGVkRnJhbWVD
b3VudCgpIGNvbnN0Cit7CisgICAgZ3VpbnQ2NCBkZWNvZGVkRnJhbWVzID0gMDsKKyAgICBpZiAo
bV9mcHNTaW5rKQorICAgICAgICBnX29iamVjdF9nZXQobV9mcHNTaW5rLmdldCgpLCAiZnJhbWVz
LXJlbmRlcmVkIiwgJmRlY29kZWRGcmFtZXMsIG51bGxwdHIpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZGVjb2RlZEZyYW1lcyk7Cit9CiAKLSAgICBHc3RFbGVtZW50KiB0ZXh0
Q29tYmluZXIgPSB3ZWJraXRUZXh0Q29tYmluZXJOZXcoKTsKLSAgICBBU1NFUlQodGV4dENvbWJp
bmVyKTsKLSAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInRleHQtc3RyZWFtLWNv
bWJpbmVyIiwgdGV4dENvbWJpbmVyLCBudWxscHRyKTsKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6ZHJvcHBlZEZyYW1lQ291bnQoKSBjb25zdAoreworICAgIGd1aW50NjQg
ZnJhbWVzRHJvcHBlZCA9IDA7CisgICAgaWYgKG1fZnBzU2luaykKKyAgICAgICAgZ19vYmplY3Rf
Z2V0KG1fZnBzU2luay5nZXQoKSwgImZyYW1lcy1kcm9wcGVkIiwgJmZyYW1lc0Ryb3BwZWQsIG51
bGxwdHIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJhbWVzRHJvcHBlZCk7
Cit9CiAKLSAgICBtX3RleHRBcHBTaW5rID0gd2Via2l0VGV4dFNpbmtOZXcoKTsKLSAgICBBU1NF
UlQobV90ZXh0QXBwU2luayk7Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0Cit7CisgICAgR3N0UXVlcnkqIHF1ZXJ5ID0g
Z3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX0JZVEVTKTsKKyAgICBnaW50NjQgcG9z
aXRpb24gPSAwOwogCi0gICAgbV90ZXh0QXBwU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChtX3RleHRBcHBTaW5rLmdldCgpLCAic2luayIpKTsKLSAgICBBU1NF
UlQobV90ZXh0QXBwU2lua1BhZCk7CisgICAgaWYgKGF1ZGlvU2luaygpICYmIGdzdF9lbGVtZW50
X3F1ZXJ5KGF1ZGlvU2luaygpLCBxdWVyeSkpCisgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3Np
dGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKIAotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gdGV4dENh
cHM7Ci0gICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxNCwgMCkpCi0gICAgICAgIHRl
eHRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoImFwcGxpY2F0aW9u
L3gtc3VidGl0bGUtdnR0IikpOwotICAgIGVsc2UKLSAgICAgICAgdGV4dENhcHMgPSBhZG9wdEdS
ZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidGV4dC92dHQiKSk7Ci0gICAgZ19vYmplY3Rf
c2V0KG1fdGV4dEFwcFNpbmsuZ2V0KCksICJlbWl0LXNpZ25hbHMiLCBUUlVFLCAiZW5hYmxlLWxh
c3Qtc2FtcGxlIiwgRkFMU0UsICJjYXBzIiwgdGV4dENhcHMuZ2V0KCksIG51bGxwdHIpOwotICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3RleHRBcHBTaW5rLmdldCgpLCAibmV3LXNhbXBs
ZSIsIEdfQ0FMTEJBQ0sobmV3VGV4dFNhbXBsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ3N0X3F1
ZXJ5X3VucmVmKHF1ZXJ5KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvc2l0
aW9uKTsKK30KIAotICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidGV4dC1zaW5r
IiwgbV90ZXh0QXBwU2luay5nZXQoKSwgbnVsbHB0cik7Ci0jZW5kaWYKK3Vuc2lnbmVkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QKK3sK
KyAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRf
QllURVMpOworICAgIGdpbnQ2NCBwb3NpdGlvbiA9IDA7CiAKLSAgICBnX29iamVjdF9zZXQobV9w
aXBlbGluZS5nZXQoKSwgInZpZGVvLXNpbmsiLCBjcmVhdGVWaWRlb1NpbmsoKSwgImF1ZGlvLXNp
bmsiLCBjcmVhdGVBdWRpb1NpbmsoKSwgbnVsbHB0cik7CisgICAgaWYgKGdzdF9lbGVtZW50X3F1
ZXJ5KG1fdmlkZW9TaW5rLmdldCgpLCBxdWVyeSkpCisgICAgICAgIGdzdF9xdWVyeV9wYXJzZV9w
b3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKIAotICAgIGNvbmZpZ3VyZVBsYXlTaW5rKCk7
CisgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHBvc2l0aW9uKTsKK30KIAotICAgIGlmIChtX3ByZXNlcnZlc1BpdGNoKSB7Ci0gICAg
ICAgIEdzdEVsZW1lbnQqIHNjYWxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJzY2FsZXRl
bXBvIiwgbnVsbHB0cik7CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0
RGF0YSYmIGluaXREYXRhKQoreworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogCi0gICAg
ICAgIGlmICghc2NhbGUpCi0gICAgICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNyZWF0
ZSBzY2FsZXRlbXBvIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldCht
X3BpcGVsaW5lLmdldCgpLCAiYXVkaW8tZmlsdGVyIiwgc2NhbGUsIG51bGxwdHIpOwotICAgIH0K
KyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpLCBpbml0RGF0YSA9IFdURk1vdmUoaW5pdERhdGEpXSB7CisgICAgICAgIGlmICghd2Vha1Ro
aXMpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fcmVuZGVyaW5nQ2FuQmVBY2Nl
bGVyYXRlZCkgewotICAgICAgICAvLyBJZiBub3QgdXNpbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRp
bmcsIGxldCBHU3RyZWFtZXIgaGFuZGxlCi0gICAgICAgIC8vIHRoZSBpbWFnZS1vcmllbnRhdGlv
biB0YWcuCi0gICAgICAgIEdzdEVsZW1lbnQqIHZpZGVvRmxpcCA9IGdzdF9lbGVtZW50X2ZhY3Rv
cnlfbWFrZSgidmlkZW9mbGlwIiwgbnVsbHB0cik7Ci0gICAgICAgIGlmICh2aWRlb0ZsaXApIHsK
LSAgICAgICAgICAgIGdfb2JqZWN0X3NldCh2aWRlb0ZsaXAsICJtZXRob2QiLCA4LCBudWxscHRy
KTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8tZmls
dGVyIiwgdmlkZW9GbGlwLCBudWxscHRyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBH
U1RfV0FSTklORygiVGhlIHZpZGVvZmxpcCBlbGVtZW50IGlzIG1pc3NpbmcsIHZpZGVvIHJvdGF0
aW9uIHN1cHBvcnQgaXMgbm93IGRpc2FibGVkLiBQbGVhc2UgY2hlY2sgeW91ciBnc3QtcGx1Z2lu
cy1nb29kIGluc3RhbGxhdGlvbi4iKTsKKyAgICAgICAgR1NUX0RFQlVHKCJzY2hlZHVsaW5nIGlu
aXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkIGV2ZW50IG9mIHNpemUgJXp1IiwgaW5pdERhdGEu
cGF5bG9hZCgpLT5zaXplKCkpOworICAgICAgICBHU1RfTUVNRFVNUCgiaW5pdCBkYXRhcyIsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGluaXREYXRhLnBheWxvYWQoKS0+ZGF0YSgp
KSwgaW5pdERhdGEucGF5bG9hZCgpLT5zaXplKCkpOworICAgICAgICB3ZWFrVGhpcy0+bV9wbGF5
ZXItPmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKGluaXREYXRhLnBheWxvYWRDb250YWlu
ZXJUeXBlKCksIGluaXREYXRhLnBheWxvYWQoKS0+dHJ5Q3JlYXRlQXJyYXlCdWZmZXIoKSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjZG1JbnN0YW5j
ZUF0dGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5jZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworCisgICAgaWYgKG1fY2RtSW5zdGFuY2UgPT0gJmluc3RhbmNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fcGlwZWxpbmUpIHsKKyAgICAgICAgR1NUX0VSUk9SKCJubyBw
aXBlbGluZSB5ZXQiKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBHUmVmUHRyPEdzdFBhZD4gdmlkZW9TaW5rUGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fdmlkZW9TaW5rLmdldCgpLCAic2luayIp
KTsKLSAgICBpZiAodmlkZW9TaW5rUGFkKQotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBw
ZWQodmlkZW9TaW5rUGFkLmdldCgpLCAibm90aWZ5OjpjYXBzIiwgR19DQUxMQkFDSyh2aWRlb1Np
bmtDYXBzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgbV9jZG1JbnN0YW5jZSA9ICZpbnN0
YW5jZTsKKworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3Rf
Y29udGV4dF9uZXcoImRybS1jZG0taW5zdGFuY2UiLCBGQUxTRSkpOworICAgIEdzdFN0cnVjdHVy
ZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250
ZXh0LmdldCgpKTsKKyAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiY2Rt
LWluc3RhbmNlIiwgR19UWVBFX1BPSU5URVIsIG1fY2RtSW5zdGFuY2UtPnByb3h5Q0RNKCkuZ2V0
KCksIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1f
cGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgpKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIkNETSBwcm94eSBpbnN0YW5jZSAlcCBkaXNwYXRjaGVkIGFzIGNv
bnRleHQiLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdldCgpKTsKKworICAgIG1fY2RtQXR0
YWNobWVudFNlbWFwaG9yZS5zaWduYWwoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlRGV0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNl
KQogewotICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9z
dGF0ZShHU1RfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfU1RBVEVfUEFVU0VEKTsKLSAg
ICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UobV9waXBlbGluZS5nZXQoKSwgbWVzc2FnZSk7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChtX2NkbUluc3RhbmNlICE9ICZp
bnN0YW5jZSkgeworICAgICAgICBHU1RfV0FSTklORygicGFzc2VkIENETUluc3RhbmNlICVwIGlz
IGRpZmZlcmVudCBmcm9tIHN0b3JlZCBvbmUgJXAiLCAmaW5zdGFuY2UsIG1fY2RtSW5zdGFuY2Uu
Z2V0KCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEFTU0VSVChtX3BpcGVsaW5lKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgImRldGFjaGluZyBDRE0gaW5zdGFuY2UgJXAsIHNldHRpbmcgZW1w
dHkgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UuZ2V0KCkpOworICAgIG1fY2RtSW5zdGFuY2UgPSBu
dWxscHRyOworCisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdz
dF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNFKSk7CisgICAgZ3N0X2VsZW1l
bnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0
KCkpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkUGFzc0NPUlNB
Y2Nlc3NDaGVjaygpIGNvbnN0Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXR0
ZW1wdFRvRGVjcnlwdFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiB7Ci0gICAg
aWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIHdl
YktpdFNyY1Bhc3NlZENPUlNBY2Nlc3NDaGVjayhXRUJLSVRfV0VCX1NSQ19DQVNUKG1fc291cmNl
LmdldCgpKSk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChtX2NkbUluc3RhbmNlLmdl
dCgpID09ICZpbnN0YW5jZSk7CisgICAgR1NUX1RSQUNFKCJpbnN0YW5jZSAlcCwgY3VycmVudCBz
dG9yZWQgJXAiLCAmaW5zdGFuY2UsIG1fY2RtSW5zdGFuY2UuZ2V0KCkpOworICAgIGF0dGVtcHRU
b0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y2FuU2F2ZU1lZGlhRGF0YSgpIGNvbnN0Cit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCkKIHsKLSAg
ICBpZiAoaXNMaXZlU3RyZWFtKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIGV2
ZW50SGFuZGxlZCA9IGdzdF9lbGVtZW50X3NlbmRfZXZlbnQocGlwZWxpbmUoKSwgZ3N0X2V2ZW50
X25ld19jdXN0b20oR1NUX0VWRU5UX0NVU1RPTV9ET1dOU1RSRUFNX09PQiwgZ3N0X3N0cnVjdHVy
ZV9uZXdfZW1wdHkoImF0dGVtcHQtdG8tZGVjcnlwdCIpKSk7CisgICAgR1NUX0RFQlVHKCJhdHRl
bXB0aW5nIHRvIGRlY3J5cHQsIGV2ZW50IGhhbmRsZWQgJXMiLCBib29sRm9yUHJpbnRpbmcoZXZl
bnRIYW5kbGVkKSk7Cit9CiAKLSAgICBpZiAobV91cmwuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlUHJv
dGVjdGlvbkV2ZW50KEdzdEV2ZW50KiBldmVudCkKK3sKKyAgICB7CisgICAgICAgIExvY2tIb2xk
ZXIgbG9jayhtX3Byb3RlY3Rpb25NdXRleCk7CisgICAgICAgIGlmIChtX2hhbmRsZWRQcm90ZWN0
aW9uRXZlbnRzLmNvbnRhaW5zKEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQpKSkgeworICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiZXZlbnQgJXUgYWxyZWFkeSBoYW5kbGVk
IiwgR1NUX0VWRU5UX1NFUU5VTShldmVudCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGV2
ZW50ICV1IGZyb20gTVNFIiwgR1NUX0VWRU5UX1NFUU5VTShldmVudCkpOworICAgIGNvbnN0IGNo
YXIqIGV2ZW50S2V5U3lzdGVtVVVJRCA9IG51bGxwdHI7CisgICAgR3N0QnVmZmVyKiBpbml0RGF0
YSA9IG51bGxwdHI7CisgICAgZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24oZXZlbnQsICZldmVu
dEtleVN5c3RlbVVVSUQsICZpbml0RGF0YSwgbnVsbHB0cik7CisgICAgaW5pdGlhbGl6YXRpb25E
YXRhRW5jb3VudGVyZWQoe2V2ZW50S2V5U3lzdGVtVVVJRCwgaW5pdERhdGF9KTsKK30KIAotICAg
IGlmIChtX3VybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
Owordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFdhaXRpbmdGb3JLZXkoYm9v
bCB3YWl0aW5nRm9yS2V5KQoreworICAgIC8vIFdlIGJhaWwgb3V0IGlmIHZhbHVlcyBkaWQgbm90
IGNoYW5nZSBvciBpZiB3ZSBhcmUgcmVxdWVzdGVkIHRvIG5vdCB3YWl0IGFueW1vcmUgYnV0IHRo
ZXJlIGFyZSBzdGlsbCB3YWl0aW5nIGRlY3J5cHRvcnMuCisgICAgR1NUX1RSQUNFKCJ3YWl0aW5n
Rm9yS2V5ICVzLCBtX3dhaXRpbmdGb3JLZXkgJXMiLCBib29sRm9yUHJpbnRpbmcod2FpdGluZ0Zv
cktleSksIGJvb2xGb3JQcmludGluZyhtX3dhaXRpbmdGb3JLZXkpKTsKKyAgICBpZiAod2FpdGlu
Z0ZvcktleSA9PSBtX3dhaXRpbmdGb3JLZXkgfHwgKCF3YWl0aW5nRm9yS2V5ICYmIHRoaXMtPndh
aXRpbmdGb3JLZXkoKSkpCisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBmYWxzZTsKKyAg
ICBtX3dhaXRpbmdGb3JLZXkgPSB3YWl0aW5nRm9yS2V5OworICAgIEdTVF9ERUJVRygid2FpdGlu
ZyBmb3Iga2V5IGNoYW5nZWQgJXMiLCBib29sRm9yUHJpbnRpbmcobV93YWl0aW5nRm9yS2V5KSk7
CisgICAgbV9wbGF5ZXItPndhaXRpbmdGb3JLZXlDaGFuZ2VkKCk7CiB9CiAKLU9wdGlvbmFsPGJv
b2w+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d291bGRUYWludE9yaWdpbihjb25zdCBT
ZWN1cml0eU9yaWdpbiYgb3JpZ2luKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OndhaXRpbmdGb3JLZXkoKSBjb25zdAogewotICAgIGlmICh3ZWJraXRHc3RDaGVja1Zl
cnNpb24oMSwgMTIsIDApKSB7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwg
IkNoZWNraW5nICV1IG9yaWdpbnMiLCBtX29yaWdpbnMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChh
dXRvJiByZXNwb25zZU9yaWdpbiA6IG1fb3JpZ2lucykgewotICAgICAgICAgICAgaWYgKCFvcmln
aW4uY2FuQWNjZXNzKCpyZXNwb25zZU9yaWdpbikpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJGb3VuZCByZWFjaGFibGUgcmVzcG9uc2Ugb3JpZ2luIik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTm8gdmFsaWQgcmVzcG9uc2Ug
b3JpZ2luIGZvdW5kIik7CisgICAgaWYgKCFtX3BpcGVsaW5lKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQogCi0gICAgLy8gR1N0cmVhbWVyIDwgMS4xMiBoYXMgYW4gaW5jb21wbGV0ZSB1
cmlkb3dubG9hZGVyIGltcGxlbWVudGF0aW9uIHNvIHdlCi0gICAgLy8gY2FuJ3QgdXNlIFdlYktp
dFdlYlNyYyBmb3IgYWRhcHRpdmUgZnJhZ21lbnRzIGRvd25sb2FkaW5nIGlmIHRoaXMKLSAgICAv
LyB2ZXJzaW9uIGlzIGRldGVjdGVkLgotICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOwotICAgIHJl
dHVybiBtX2hhc1RhaW50ZWRPcmlnaW47CisgICAgR3N0U3RhdGUgc3RhdGU7CisgICAgZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7CisK
KyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0g
YWRvcHRHUmVmKGdzdF9xdWVyeV9uZXdfY3VzdG9tKEdTVF9RVUVSWV9DVVNUT00sIGdzdF9zdHJ1
Y3R1cmVfbmV3X2VtcHR5KCJhbnktZGVjcnlwdG9yLXdhaXRpbmctZm9yLWtleSIpKSk7CisgICAg
aWYgKHN0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpIHsKKyAgICAgICAgcmVzdWx0ID0gZ3N0X2Vs
ZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQoKSwgcXVlcnkuZ2V0KCkpOworICAgICAgICBHU1Rf
VFJBQ0UoInF1ZXJ5IHJlc3VsdCAlcywgb24gJXMiLCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSwg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpKTsKKyAgICB9IGVsc2UgaWYgKHN0YXRl
ID49IEdTVF9TVEFURV9SRUFEWSkgeworICAgICAgICAvLyBSdW5uaW5nIGEgcXVlcnkgaW4gdGhl
IHBpcGVsaW5lIGlzIGVhc2llciBidXQgaXQgb25seSB3b3JrcyB3aGVuIHRoZSBwaXBlbGluZSBp
cyBzZXQgdXAgYW5kIHJ1bm5pbmcsIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGluc3BlY3QgaXQgYW5k
IGFzayB0aGUgZGVjcnlwdG9ycyBkaXJlY3RseS4KKyAgICAgICAgR1VuaXF1ZVB0cjxHc3RJdGVy
YXRvcj4gaXRlcmF0b3IoZ3N0X2Jpbl9pdGVyYXRlX3JlY3Vyc2UoR1NUX0JJTihtX3BpcGVsaW5l
LmdldCgpKSkpOworICAgICAgICBHc3RJdGVyYXRvclJlc3VsdCBpdGVyYXRvclJlc3VsdDsKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgaXRlcmF0b3JSZXN1bHQgPSBnc3RfaXRlcmF0b3JfZm9s
ZChpdGVyYXRvci5nZXQoKSwgW10oY29uc3QgR1ZhbHVlICppdGVtLCBHVmFsdWUgKiwgZ3BvaW50
ZXIgZGF0YSkgLT4gZ2Jvb2xlYW4geworICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQqIGVsZW1l
bnQgPSBHU1RfRUxFTUVOVChnX3ZhbHVlX2dldF9vYmplY3QoaXRlbSkpOworICAgICAgICAgICAg
ICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IEdTVF9RVUVSWShkYXRhKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIVdFQktJVF9JU19NRURJQV9DRU5DX0RFQ1JZUFQoZWxlbWVudCkgfHwgIWdzdF9lbGVt
ZW50X3F1ZXJ5KGVsZW1lbnQsIHF1ZXJ5KTsKKyAgICAgICAgICAgIH0sIG51bGxwdHIsIHF1ZXJ5
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1Jf
UkVTWU5DKQorICAgICAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMoaXRlcmF0b3IuZ2V0
KCkpOworICAgICAgICB9IHdoaWxlIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfUkVT
WU5DKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9FUlJPUikK
KyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJpdGVyYXRvciByZXR1cm5lZCBhbiBlcnJvciIpOwor
ICAgICAgICByZXN1bHQgPSBpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfT0s7CisgICAg
ICAgIEdTVF9UUkFDRSgiaXRlcmF0b3IgcmVzdWx0ICVkLCB3YWl0aW5nICVzIiwgaXRlcmF0b3JS
ZXN1bHQsIGJvb2xGb3JQcmludGluZyhyZXN1bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorI2VuZGlmCisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBw
b3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworCisjaWYgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKKyAgICByZXN1bHQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmlzQ2xlYXJLZXlL
ZXlTeXN0ZW0oa2V5U3lzdGVtKTsKKyNlbmRpZgorCisgICAgR1NUX0RFQlVHKCJjaGVja2luZyBm
b3IgS2V5U3lzdGVtIHN1cHBvcnQgd2l0aCAlcyBhbmQgdHlwZSAlczogJXMiLCBrZXlTeXN0ZW0u
dXRmOCgpLmRhdGEoKSwgbWltZVR5cGUudXRmOCgpLmRhdGEoKSwgYm9vbEZvclByaW50aW5nKHJl
c3VsdCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK01lZGlhUGxheWVyOjpTdXBwb3J0c1R5
cGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpleHRlbmRlZFN1cHBvcnRzVHlwZShjb25z
dCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBNZWRpYVBsYXllcjo6
U3VwcG9ydHNUeXBlIHJlc3VsdCkKK3sKKyAgICBVTlVTRURfUEFSQU0ocGFyYW1ldGVycyk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5oCmluZGV4IDUxMTMyNWU0OWZlMzM3OTlkZDBmNTUwYWE1NmQ4ZTk4ZDA2
Nzg1YWQuLjljMzY4NDFlMGY0ZDMwODA4ZDQxYjk2ZmM3N2FkMjVhMzYwYzlmODEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKQEAgLTIsOCArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTUsIDIw
MTYgSWdhbGlhIFMuTAotICogQ29weXJpZ2h0IChDKSAyMDE0IENhYmxlIFRlbGV2aXNpb24gTGFi
b3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTUsIDIwMTYg
SWdhbGlhIFMuTAogICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjcsMjQgKzI2LDc0IEBACiAjaWYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCi0jaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgotCisjaW5jbHVkZSAiR1N0
cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiTWFpblRocmVhZE5vdGlmaWVyLmgiCisj
aW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8Z3N0
L3BidXRpbHMvaW5zdGFsbC1wbHVnaW5zLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9y
ZS5oPgogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogI2luY2x1ZGUgIlRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogI2Vu
ZGlmCi0KIHR5cGVkZWYgc3RydWN0IF9Hc3RNcGVndHNTZWN0aW9uIEdzdE1wZWd0c1NlY3Rpb247
CiAKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorI2lmIFVTRShMSUJFUE9YWSkKKy8vIEluY2x1ZGUg
dGhlIDxlcG94eS9nbC5oPiBoZWFkZXIgYmVmb3JlIDxnc3QvZ2wvZ2wuaD4uCisjaW5jbHVkZSA8
ZXBveHkvZ2wuaD4KKworLy8gV29ya2Fyb3VuZCBidWlsZCBpc3N1ZSB3aXRoIFJQaSB1c2VybGFu
ZCBHTEVTdjIgaGVhZGVycyBhbmQgbGliZXBveHkgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE4NTYz
OT4KKyNpZiAhR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTQsIDApCisjaW5jbHVkZSA8Z3N0L2dsL2dz
dGdsY29uZmlnLmg+CisjaWYgZGVmaW5lZChHU1RfR0xfSEFWRV9XSU5ET1dfRElTUE1BTlgpICYm
IEdTVF9HTF9IQVZFX1dJTkRPV19ESVNQTUFOWAorI2RlZmluZSBfX2dsMl9oXworI3VuZGVmIEdT
VF9HTF9IQVZFX0dMU1lOQworI2RlZmluZSBHU1RfR0xfSEFWRV9HTFNZTkMgMQorI2VuZGlmCisj
ZW5kaWYgLy8gIUdTVF9DSEVDS19WRVJTSU9OKDEsIDE0LCAwKQorI2VuZGlmIC8vIFVTRShMSUJF
UE9YWSkKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC9nbC9n
bC5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjZW5kaWYKKworI2lmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpZiBVU0UoTklD
T1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIK
KyNlbHNlCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVy
LmgiCisjZW5kaWYKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdz
dFN0cmVhbVZvbHVtZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0luZm8gR3N0VmlkZW9JbmZv
OwordHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7Cit0eXBlZGVmIHN0
cnVjdCBfR3N0R0xEaXNwbGF5IEdzdEdMRGlzcGxheTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBCaXRtYXBUZXh0dXJlR0w7CitjbGFzcyBHTENvbnRleHQ7CitjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEludFNpemU7CitjbGFz
cyBJbnRSZWN0OworY2xhc3MgVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyOworCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQorY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKIGNsYXNzIEF1ZGlvU291cmNlUHJv
dmlkZXI7CiBjbGFzcyBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOwpAQCAtNTYsMjAgKzEw
NSwyNyBAQCBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOwogY2xhc3MgTWVk
aWFQbGF5ZXJSZXF1ZXN0SW5zdGFsbE1pc3NpbmdQbHVnaW5zQ2FsbGJhY2s7CiBjbGFzcyBWaWRl
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjsKIAotI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi1jbGFz
cyBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQ7Ci0jZW5kaWYKK3ZvaWQgcmVnaXN0ZXJXZWJLaXRH
U3RyZWFtZXJFbGVtZW50cygpOwogCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIg
OiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSB7CisvLyBVc2UgZWFnZXIg
aW5pdGlhbGl6YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBzaW5jZSB3ZSBjYWxsIG1ha2VX
ZWFrUHRyKCkgZnJvbSBhbm90aGVyIHRocmVhZC4KK2NsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lciA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UsIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIsIFdlYWtQdHJGYWN0b3J5SW5p
dGlhbGl6YXRpb246OkVhZ2VyPgorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpZiBVU0Uo
TklDT1NJQSkKKyAgICAsIHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Q2xpZW50CisjZWxzZQorICAgICwgcHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgor
I2VuZGlmCit7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKE1lZGlhUGxheWVyKik7CisgICAgc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKTsKKworICAgIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcihNZWRpYVBsYXllciopOwogICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcigpOwogCi0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShN
ZWRpYUVuZ2luZVJlZ2lzdHJhcik7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKLQot
ICAgIHZvaWQgaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKik7Ci0gICAgdm9pZCBoYW5kbGVQbHVn
aW5JbnN0YWxsZXJSZXN1bHQoR3N0SW5zdGFsbFBsdWdpbnNSZXR1cm4pOworICAgIHN0YXRpYyB2
b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwogCiAgICAgYm9v
bCBoYXNWaWRlbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzVmlkZW87IH0KICAgICBi
b29sIGhhc0F1ZGlvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNBdWRpbzsgfQpAQCAt
ODcsNjMgKzE0MywzMDUgQEAgcHVibGljOgogICAgIHZvaWQgcHJlcGFyZVRvUGxheSgpIG92ZXJy
aWRlOwogICAgIHZvaWQgcGxheSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcGF1c2UoKSBvdmVycmlk
ZTsKLQogICAgIGJvb2wgcGF1c2VkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzZWVraW5n
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBzZWVraW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9zZWVraW5nOyB9CisgICAgdm9pZCBzZWVrKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJy
aWRlOwogCiAgICAgTWVkaWFUaW1lIHBsYXRmb3JtRHVyYXRpb24oKSBjb25zdDsKLSAgICBNZWRp
YVRpbWUgZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBNZWRpYVRpbWUg
Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc2Vlayhjb25zdCBN
ZWRpYVRpbWUmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0UmF0ZShmbG9hdCkgb3ZlcnJpZGU7
CiAgICAgZG91YmxlIHJhdGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHNldFByZXNlcnZl
c1BpdGNoKGJvb2wpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBzZXRQcmVsb2FkKE1lZGlhUGxheWVy
OjpQcmVsb2FkKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxUaW1lckZpcmVkKCk7CiAKKyAgICBG
bG9hdFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2V0Vm9sdW1l
KGZsb2F0KSBvdmVycmlkZTsKKyAgICBmbG9hdCB2b2x1bWUoKSBjb25zdCBvdmVycmlkZTsKKwor
I2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgYm9vbCBlbnN1cmVHc3RHTENvbnRleHQoKTsKKyAg
ICBHc3RDb250ZXh0KiByZXF1ZXN0R0xDb250ZXh0KGNvbnN0IGNoYXIqIGNvbnRleHRUeXBlKTsK
KyNlbmRpZgorICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCkgb3ZlcnJpZGU7CisgICAgYm9vbCBtdXRl
ZCgpIGNvbnN0OworCisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRl
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFZpc2libGUoYm9vbCkgb3ZlcnJpZGUg
eyB9CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNpemVDaGFuZ2VkKCk7CisKKyAgICAvLyBQcmVmZXIgTWVkaWFUaW1lIGJhc2VkIG1ldGhvZHMg
b3ZlciBmbG9hdCBiYXNlZC4KKworICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50b0Zsb2F0KCk7IH0KKyAgICBkb3VibGUgZHVy
YXRpb25Eb3VibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBkdXJhdGlvbk1lZGlhVGltZSgp
LnRvRG91YmxlKCk7IH0KKyAgICBNZWRpYVRpbWUgZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGN1cnJlbnRNZWRpYVRpbWUoKS50b0Zsb2F0KCk7IH0KKyAgICBkb3VibGUgY3VycmVudFRpbWVE
b3VibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjdXJyZW50TWVkaWFUaW1lKCkudG9Eb3Vi
bGUoKTsgfQorICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2b2lkIHNlZWsoZmxvYXQgdGltZSkgb3ZlcnJpZGUgeyBzZWVrKE1l
ZGlhVGltZTo6Y3JlYXRlV2l0aEZsb2F0KHRpbWUpKTsgfQorICAgIHZvaWQgc2Vla0RvdWJsZShk
b3VibGUgdGltZSkgb3ZlcnJpZGUgeyBzZWVrKE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSh0
aW1lKSk7IH0KKworICAgIGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1heE1lZGlhVGltZVNlZWthYmxlKCkudG9GbG9hdCgpOyB9CiAgICAgTWVkaWFUaW1l
IG1heE1lZGlhVGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgZG91YmxlIG1pblRp
bWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1pbk1lZGlhVGltZVNlZWthYmxl
KCkudG9GbG9hdCgpOyB9CisgICAgTWVkaWFUaW1lIG1pbk1lZGlhVGltZVNlZWthYmxlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9CisKICAgICBib29s
IGRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbEJ5dGVzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgTWVkaWFUaW1lIG1heFRpbWVM
b2FkZWQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wgaGFzU2luZ2xlU2VjdXJpdHlPcmln
aW4oKSBjb25zdCBvdmVycmlkZTsKICAgICBPcHRpb25hbDxib29sPiB3b3VsZFRhaW50T3JpZ2lu
KGNvbnN0IFNlY3VyaXR5T3JpZ2luJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGxvYWRT
dGF0ZUNoYW5nZWQoKTsKLSAgICB2b2lkIHRpbWVDaGFuZ2VkKCk7Ci0gICAgdm9pZCBkaWRFbmQo
KTsKKyAgICB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKSBvdmVycmlkZTsKKworI2lm
IEVOQUJMRShXRUJfQVVESU8pCisgICAgQXVkaW9Tb3VyY2VQcm92aWRlciogYXVkaW9Tb3VyY2VQ
cm92aWRlcigpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgYm9vbCBzdXBwb3J0c0Z1
bGxzY3JlZW4oKSBjb25zdCBvdmVycmlkZTsKKworICAgIE1lZGlhUGxheWVyOjpNb3ZpZUxvYWRU
eXBlIG1vdmllTG9hZFR5cGUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE1lZGlhUGxheWVyKiBt
ZWRpYVBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyOyB9CisKKyAgICB1bnNpZ25lZCBk
ZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGRyb3BwZWRG
cmFtZUNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0
ZUNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgdmlkZW9EZWNvZGVkQnl0ZUNv
dW50KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3Rh
dGVDaGFuZ2VkKCkgb3ZlcnJpZGU7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworI2lmIFBMQVRG
T1JNKFdJTl9DQUlSTykKKyAgICAvLyBGSVhNRTogQWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGhhcyBu
b3QgYmVlbiBpbXBsZW1lbnRlZCBmb3IgV2luQ2Fpcm8geWV0LgorICAgIGJvb2wgc3VwcG9ydHNB
Y2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Cisj
ZWxzZQorICAgIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKQorICAgIHZvaWQgY2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYpIG92
ZXJyaWRlOworICAgIHZvaWQgY2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYpIG92ZXJy
aWRlOworICAgIHZvaWQgaGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50Kik7CisgICAgdmly
dHVhbCB2b2lkIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOworICAgIHZvaWQg
YXR0ZW1wdFRvRGVjcnlwdFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYpIGZpbmFsOworICAgIHZv
aWQgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7CisgICAgdm9pZCBz
ZXRXYWl0aW5nRm9yS2V5KGJvb2wpOworICAgIGJvb2wgd2FpdGluZ0ZvcktleSgpIGNvbnN0IG92
ZXJyaWRlOworI2VuZGlmCisKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0tleVN5c3RlbShjb25z
dCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgc3RhdGlj
IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgZXh0ZW5kZWRTdXBwb3J0c1R5cGUoY29uc3QgTWVk
aWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYsIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUpOwor
CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRm
b3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVt
LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBib29sLCBib29sKSBvdmVy
cmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkgb3Zl
cnJpZGU7CisjZW5kaWYKKworICAgIHZvaWQgc2V0VmlkZW9Tb3VyY2VPcmllbnRhdGlvbihJbWFn
ZU9yaWVudGF0aW9uKTsKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGlwZWxpbmUuZ2V0KCk7IH0KKyAgICB2b2lkIGVuYWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgdW5zaWduZWQgaW5kZXgpOworCisgICAgLy8gQXBwZW5k
IHBpcGVsaW5lIGludGVyZmFjZQorICAgIGJvb2wgaGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2Fn
ZSopOworICAgIHZvaWQgaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKik7CisKK3Byb3RlY3RlZDoK
KyAgICBlbnVtIE1haW5UaHJlYWROb3RpZmljYXRpb24geworICAgICAgICBWaWRlb0NoYW5nZWQg
PSAxIDw8IDAsCisgICAgICAgIFZpZGVvQ2Fwc0NoYW5nZWQgPSAxIDw8IDEsCisgICAgICAgIEF1
ZGlvQ2hhbmdlZCA9IDEgPDwgMiwKKyAgICAgICAgVm9sdW1lQ2hhbmdlZCA9IDEgPDwgMywKKyAg
ICAgICAgTXV0ZUNoYW5nZWQgPSAxIDw8IDQsCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAg
ICAgICBUZXh0Q2hhbmdlZCA9IDEgPDwgNSwKKyNlbmRpZgorICAgICAgICBTaXplQ2hhbmdlZCA9
IDEgPDwgNiwKKyAgICAgICAgU3RyZWFtQ29sbGVjdGlvbkNoYW5nZWQgPSAxIDw8IDcKKyAgICB9
OworCisgICAgdmlydHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0IHsgcmV0dXJuIG1faXNT
dHJlYW1pbmc7IH0KKyAgICBNZWRpYVRpbWUgbWF4VGltZUxvYWRlZCgpIGNvbnN0OworCiAgICAg
dmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VT
ZXR1cChHc3RFbGVtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGNvbmZpZ3VyZVBsYXlTaW5rKCkg
eyB9CisgICAgdmlydHVhbCBib29sIGNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUpOworCisK
KyNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKKyAgICBHc3RFbGVtZW50KiBjcmVhdGVIb2xl
UHVuY2hWaWRlb1NpbmsoKTsKKyAgICB2b2lkIHB1c2hOZXh0SG9sZVB1bmNoQnVmZmVyKCk7Cisg
ICAgYm9vbCBzaG91bGRJZ25vcmVJbnRyaW5zaWNTaXplKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQorI2VuZGlmCisKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIHN0YXRpYyBHc3RGbG93UmV0
dXJuIG5ld1NhbXBsZUNhbGxiYWNrKEdzdEVsZW1lbnQqLCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqKTsKKyAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdQcmVyb2xsQ2FsbGJhY2soR3N0
RWxlbWVudCosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworICAgIHZvaWQgZmx1c2hD
dXJyZW50QnVmZmVyKCk7CisgICAgR3N0RWxlbWVudCogY3JlYXRlR0xBcHBTaW5rKCk7CisgICAg
R3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rR0woKTsKKyAgICBHc3RHTENvbnRleHQqIGdzdEdM
Q29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xDb250ZXh0LmdldCgpOyB9CisgICAgR3N0R0xE
aXNwbGF5KiBnc3RHTERpc3BsYXkoKSBjb25zdCB7IHJldHVybiBtX2dsRGlzcGxheS5nZXQoKTsg
fQorICAgIHZvaWQgZW5zdXJlR0xWaWRlb1NpbmtDb250ZXh0KCk7CisjZW5kaWYKKworI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKKyAgICB2b2lkIHB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJp
ZGU7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBw
cm94eSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92
ZXJyaWRlOworI2VuZGlmCisjZW5kaWYKKworICAgIEdzdEVsZW1lbnQqIHZpZGVvU2luaygpIGNv
bnN0IHsgcmV0dXJuIG1fdmlkZW9TaW5rLmdldCgpOyB9CisKKyAgICB2b2lkIHNldFN0cmVhbVZv
bHVtZUVsZW1lbnQoR3N0U3RyZWFtVm9sdW1lKik7CisKKyAgICB2b2lkIHNldFBpcGVsaW5lKEdz
dEVsZW1lbnQqKTsKKworICAgIHZvaWQgdHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxlKik7CisgICAg
dm9pZCByZXBhaW50KCk7CisgICAgdm9pZCBjYW5jZWxSZXBhaW50KGJvb2wgZGVzdHJveWluZyA9
IGZhbHNlKTsKKworICAgIHN0YXRpYyB2b2lkIHJlcGFpbnRDYWxsYmFjayhNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIqLCBHc3RTYW1wbGUqKTsKKyAgICBzdGF0aWMgdm9pZCByZXBhaW50Q2Fu
Y2VsbGVkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisKKyAgICB2b2lk
IG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7CisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZk11
dGUoKTsKKworICAgIHN0YXRpYyB2b2lkIHZvbHVtZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBtdXRlQ2hhbmdlZENhbGxiYWNr
KE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworCisgICAgLy8gRklYTUU6IFdoZXJlIGlz
IHRoaXMgdXNlZD8KKyAgICB2b2lkIGhhbmRsZVBsdWdpbkluc3RhbGxlclJlc3VsdChHc3RJbnN0
YWxsUGx1Z2luc1JldHVybik7CisKKyAgICB2b2lkIHJlYWR5VGltZXJGaXJlZCgpOworCisgICAg
dm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVvKCk7CisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVv
Q2FwcygpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZBdWRpbygpOworCisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZUZXh0KCk7CisgICAgdm9pZCBuZXdU
ZXh0U2FtcGxlKCk7CisjZW5kaWYKKworICAgIHZvaWQgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRl
cigpOworICAgIHZvaWQgc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzKEdPYmplY3QqKTsKKworICAg
IHN0YXRpYyB2b2lkIHNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciosIEdPYmplY3QqKTsKKworICAgIHN0YXRpYyB2b2lkIHNvdXJjZVNl
dHVwQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiwgR3N0RWxlbWVudCopOwor
ICAgIHN0YXRpYyB2b2lkIHZpZGVvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lciopOworICAgIHN0YXRpYyB2b2lkIHZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2so
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisgICAgc3RhdGljIHZvaWQgYXVkaW9DaGFu
Z2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgIHN0YXRpYyB2b2lkIHRleHRDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyKik7CisgICAgc3RhdGljIEdzdEZsb3dSZXR1cm4gbmV3VGV4dFNh
bXBsZUNhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworI2VuZGlmCisKKyAg
ICB2b2lkIHRpbWVDaGFuZ2VkKCk7CiAgICAgdm9pZCBsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6Okhh
dmVOb3RoaW5nLCBib29sIGZvcmNlTm90aWZpY2F0aW9ucyA9IGZhbHNlKTsKKyAgICB2b2lkIGxv
YWRTdGF0ZUNoYW5nZWQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VTZXR1cChHc3RFbGVt
ZW50Kik7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHZvaWQgdXBkYXRlVGV4dHVy
ZU1hcHBlckZsYWdzKCk7CisjZW5kaWYKIAotICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2luaygpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjb25maWd1cmVQbGF5U2luaygpIHsgfQor
ICAgIFJlZjxNYWluVGhyZWFkTm90aWZpZXI8TWFpblRocmVhZE5vdGlmaWNhdGlvbj4+IG1fbm90
aWZpZXI7CisgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIG11dGFibGUgTWVkaWFUaW1l
IG1fY2FjaGVkUG9zaXRpb247CisgICAgbXV0YWJsZSBNZWRpYVRpbWUgbV9jYWNoZWREdXJhdGlv
bjsKKyAgICBib29sIG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbiB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2NoYW5naW5nUmF0ZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2Rv
d25sb2FkRmluaXNoZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9lcnJvck9jY3VyZWQgeyBmYWxz
ZSB9OworICAgIG11dGFibGUgYm9vbCBtX2lzRW5kUmVhY2hlZCB7IGZhbHNlIH07CisgICAgbXV0
YWJsZSBib29sIG1faXNTdHJlYW1pbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wYXVzZWQgeyB0
cnVlIH07CisgICAgZmxvYXQgbV9wbGF5YmFja1JhdGUgeyAxIH07CisgICAgR3N0U3RhdGUgbV9j
dXJyZW50U3RhdGU7CisgICAgR3N0U3RhdGUgbV9vbGRTdGF0ZTsKKyAgICBHc3RTdGF0ZSBtX3Jl
cXVlc3RlZFN0YXRlIHsgR1NUX1NUQVRFX1ZPSURfUEVORElORyB9OworICAgIGJvb2wgbV9yZXNl
dFBpcGVsaW5lIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2Vla2luZyB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3NlZWtJc1BlbmRpbmcgeyBmYWxzZSB9OworICAgIE1lZGlhVGltZSBtX3NlZWtUaW1l
OworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zb3VyY2UgeyBudWxscHRyIH07CisgICAgYm9v
bCBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCB7IGZhbHNlIH07CiAKLSAgICB2b2lkIHNpbXVs
YXRlQXVkaW9JbnRlcnJ1cHRpb24oKSBvdmVycmlkZTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpCisgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX3RleHR1cmVNYXBwZXJGbGFnczsKKyNl
bmRpZgogCi0gICAgdmlydHVhbCBib29sIGNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0U3RhdGUpOwor
ICAgIEdSZWZQdHI8R3N0U3RyZWFtVm9sdW1lPiBtX3ZvbHVtZUVsZW1lbnQ7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX3ZpZGVvU2luazsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGlw
ZWxpbmU7CisgICAgSW50U2l6ZSBtX3NpemU7CiAKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAg
IEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKSBvdmVycmlkZTsKKyAg
ICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGUgeyBNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmcgfTsKKyAgICBtdXRhYmxlIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3
b3JrU3RhdGUgeyBNZWRpYVBsYXllcjo6RW1wdHkgfTsKKworICAgIG11dGFibGUgTG9jayBtX3Nh
bXBsZU11dGV4OworICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBtX3NhbXBsZTsKKworICAgIG11dGFi
bGUgRmxvYXRTaXplIG1fdmlkZW9TaXplOworICAgIGJvb2wgbV91c2luZ0ZhbGxiYWNrVmlkZW9T
aW5rIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCB7IGZh
bHNlIH07CisKKyAgICBib29sIG1fZGVzdHJveWluZyB7IGZhbHNlIH07CisKKyNpZiBVU0UoR1NU
UkVBTUVSX0dMKQorICAgIEdSZWZQdHI8R3N0R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKKyAgICBH
UmVmUHRyPEdzdEdMRGlzcGxheT4gbV9nbERpc3BsYXk7CisgICAgR1JlZlB0cjxHc3RDb250ZXh0
PiBtX2dsRGlzcGxheUVsZW1lbnRDb250ZXh0OworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gbV9n
bEFwcEVsZW1lbnRDb250ZXh0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxWaWRlb1RleHR1cmVDb3Bp
ZXJHU3RyZWFtZXI+IG1fdmlkZW9UZXh0dXJlQ29waWVyOworCisgICAgR1JlZlB0cjxHc3RHTENv
bG9yQ29udmVydD4gbV9jb2xvckNvbnZlcnQ7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBtX2NvbG9y
Q29udmVydElucHV0Q2FwczsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fY29sb3JDb252ZXJ0T3V0
cHV0Q2FwczsKICNlbmRpZgogCi0gICAgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2lzU3RyZWFtaW5nOyB9CisgICAgSW1hZ2VPcmllbnRhdGlvbiBtX3ZpZGVv
U291cmNlT3JpZW50YXRpb247CiAKLSAgICB2b2lkIGVuYWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJh
c2VHU3RyZWFtZXI6OlRyYWNrVHlwZSwgdW5zaWduZWQgaW5kZXgpOworI2lmIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCisgICAgQmluYXJ5U2VtYXBob3JlIG1fY2RtQXR0YWNobWVudFNlbWFwaG9y
ZTsKKyAgICBSZWZQdHI8Y29uc3QgQ0RNSW5zdGFuY2U+IG1fY2RtSW5zdGFuY2U7CisKKyAgICBM
b2NrIG1fcHJvdGVjdGlvbk11dGV4OyAvLyBHdWFyZHMgYWNjZXNzIHRvIG1faGFuZGxlZFByb3Rl
Y3Rpb25FdmVudHMuCisgICAgSGFzaFNldDx1aW50MzJfdD4gbV9oYW5kbGVkUHJvdGVjdGlvbkV2
ZW50czsKIAotICAgIGJvb2wgaGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSopIG92ZXJyaWRl
OworICAgIGJvb2wgbV93YWl0aW5nRm9yS2V5IHsgZmFsc2UgfTsKKyNlbmRpZgorCisgICAgT3B0
aW9uYWw8R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm0+IG1fdmlkZW9EZWNvZGVyUGxhdGZvcm07CiAK
IHByaXZhdGU6CisgICAgdm9pZCBmaWxsVGltZXJGaXJlZCgpOworCisgICAgdm9pZCBkaWRFbmQo
KTsKKworCisgICAgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKCk7CisgICAgR3N0RWxlbWVu
dCogY3JlYXRlQXVkaW9TaW5rKCk7CisgICAgR3N0RWxlbWVudCogYXVkaW9TaW5rKCkgY29uc3Q7
CisKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRUeXBlcyhIYXNoU2V0PFN0cmluZywgQVND
SUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYpOwogICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9y
dHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7
CiAgICAgdm9pZCBzeW5jT25DbG9jayhib29sIHN5bmMpOwogCi0gICAgR3N0RWxlbWVudCogY3Jl
YXRlQXVkaW9TaW5rKCkgb3ZlcnJpZGU7Ci0KICAgICBNZWRpYVRpbWUgcGxheWJhY2tQb3NpdGlv
bigpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlcygpOwpAQCAtMTg4LDgx
ICs0ODYsNDIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZVRyYWNrcygpOwogICAgIHZvaWQg
Y2xlYXJUcmFja3MoKTsKIAotcHJvdGVjdGVkOgotICAgIGJvb2wgbV9idWZmZXJpbmc7Ci0gICAg
aW50IG1fYnVmZmVyaW5nUGVyY2VudGFnZTsKLSAgICBtdXRhYmxlIE1lZGlhVGltZSBtX2NhY2hl
ZFBvc2l0aW9uOwotICAgIG11dGFibGUgTWVkaWFUaW1lIG1fY2FjaGVkRHVyYXRpb247Ci0gICAg
Ym9vbCBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb247Ci0gICAgYm9vbCBt
X2NoYW5naW5nUmF0ZTsKLSAgICBib29sIG1fZG93bmxvYWRGaW5pc2hlZDsKLSAgICBib29sIG1f
ZXJyb3JPY2N1cmVkOwotICAgIG11dGFibGUgYm9vbCBtX2lzRW5kUmVhY2hlZDsKLSAgICBtdXRh
YmxlIGJvb2wgbV9pc1N0cmVhbWluZzsKLSAgICBib29sIG1fcGF1c2VkOwotICAgIGZsb2F0IG1f
cGxheWJhY2tSYXRlOwotICAgIEdzdFN0YXRlIG1fY3VycmVudFN0YXRlOwotICAgIEdzdFN0YXRl
IG1fb2xkU3RhdGU7Ci0gICAgR3N0U3RhdGUgbV9yZXF1ZXN0ZWRTdGF0ZTsKLSAgICBib29sIG1f
cmVzZXRQaXBlbGluZTsKLSAgICBib29sIG1fc2Vla2luZzsKLSAgICBib29sIG1fc2Vla0lzUGVu
ZGluZzsKLSAgICBNZWRpYVRpbWUgbV9zZWVrVGltZTsKLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fc291cmNlOwotICAgIGJvb2wgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQ7Ci0KLSAgICB2
b2lkIHJlYWR5VGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVvKCk7
Ci0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZpZGVvQ2FwcygpOwotICAgIHZvaWQgbm90aWZ5UGxh
eWVyT2ZBdWRpbygpOwotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIHZvaWQgbm90aWZ5
UGxheWVyT2ZUZXh0KCk7Ci0gICAgdm9pZCBuZXdUZXh0U2FtcGxlKCk7Ci0jZW5kaWYKLQotICAg
IHZvaWQgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRlcigpOwotICAgIHZvaWQgc2V0QXVkaW9TdHJl
YW1Qcm9wZXJ0aWVzKEdPYmplY3QqKTsKLQotICAgIHN0YXRpYyB2b2lkIHNldEF1ZGlvU3RyZWFt
UHJvcGVydGllc0NhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciosIEdPYmplY3Qq
KTsKLQotICAgIHN0YXRpYyB2b2lkIHNvdXJjZVNldHVwQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKiwgR3N0RWxlbWVudCopOwotICAgIHN0YXRpYyB2b2lkIHZpZGVvQ2hhbmdl
ZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwotICAgIHN0YXRpYyB2b2lk
IHZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Kik7Ci0gICAgc3RhdGljIHZvaWQgYXVkaW9DaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKik7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIHN0YXRpYyB2b2lk
IHRleHRDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7Ci0gICAg
c3RhdGljIEdzdEZsb3dSZXR1cm4gbmV3VGV4dFNhbXBsZUNhbGxiYWNrKE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciopOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0KICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3RleHRBcHBTaW5rOwogICAgIEdSZWZQ
dHI8R3N0UGFkPiBtX3RleHRBcHBTaW5rUGFkOwogI2VuZGlmCi0gICAgR3N0U3RydWN0dXJlKiBt
X21lZGlhTG9jYXRpb25zOwotICAgIGludCBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXg7Ci0g
ICAgYm9vbCBtX3BsYXliYWNrUmF0ZVBhdXNlOworICAgIEdzdFN0cnVjdHVyZSogbV9tZWRpYUxv
Y2F0aW9ucyB7IG51bGxwdHIgfTsKKyAgICBpbnQgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4
IHsgMCB9OworICAgIGJvb2wgbV9wbGF5YmFja1JhdGVQYXVzZSB7IGZhbHNlIH07CiAgICAgTWVk
aWFUaW1lIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrOwotICAgIGZsb2F0IG1fbGFzdFBsYXliYWNr
UmF0ZTsKKyAgICBmbG9hdCBtX2xhc3RQbGF5YmFja1JhdGUgeyAxIH07CiAgICAgVGltZXIgbV9m
aWxsVGltZXI7CiAgICAgTWVkaWFUaW1lIG1fbWF4VGltZUxvYWRlZDsKICAgICBib29sIG1fbG9h
ZGluZ1N0YWxsZWQgeyBmYWxzZSB9OwogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIG1fcHJlbG9h
ZDsKLSAgICBib29sIG1fZGVsYXlpbmdMb2FkOworICAgIGJvb2wgbV9kZWxheWluZ0xvYWQgeyBm
YWxzZSB9OwogICAgIG11dGFibGUgTWVkaWFUaW1lIG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExv
YWRpbmdQcm9ncmVzczsKLSAgICBib29sIG1faGFzVmlkZW87Ci0gICAgYm9vbCBtX2hhc0F1ZGlv
OworICAgIGJvb2wgbV9oYXNWaWRlbyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0F1ZGlvIHsg
ZmFsc2UgfTsKKyAgICBDb25kaXRpb24gbV9kcmF3Q29uZGl0aW9uOworICAgIExvY2sgbV9kcmF3
TXV0ZXg7CisgICAgUnVuTG9vcDo6VGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiBt
X2RyYXdUaW1lcjsKICAgICBSdW5Mb29wOjpUaW1lcjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI+IG1fcmVhZHlUaW1lckhhbmRsZXI7Ci0gICAgbXV0YWJsZSB1bnNpZ25lZCBsb25nIGxvbmcg
bV90b3RhbEJ5dGVzOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyNpZiBVU0UoTklDT1NJ
QSkKKyAgICBSZWY8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNl
CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1M
YXllclByb3h5OworI2VuZGlmCisjZW5kaWYKKyAgICBib29sIG1fYnVmZmVyaW5nIHsgZmFsc2Ug
fTsKKyAgICBpbnQgbV9idWZmZXJpbmdQZXJjZW50YWdlIHsgMCB9OworICAgIG11dGFibGUgdW5z
aWduZWQgbG9uZyBsb25nIG1fdG90YWxCeXRlcyB7IDAgfTsKICAgICBVUkwgbV91cmw7Ci0gICAg
Ym9vbCBtX3ByZXNlcnZlc1BpdGNoOworICAgIGJvb2wgbV9wcmVzZXJ2ZXNQaXRjaCB7IGZhbHNl
IH07CiAgICAgbXV0YWJsZSBPcHRpb25hbDxTZWNvbmRzPiBtX2xhc3RRdWVyeVRpbWU7CiAgICAg
Ym9vbCBtX2lzTGVnYWN5UGxheWJpbjsKICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+
IG1fc3RyZWFtQ29sbGVjdGlvbjsKLSAgICBGbG9hdFNpemUgbmF0dXJhbFNpemUoKSBjb25zdCBm
aW5hbDsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVBy
aXZhdGU+IG1fc3RyZWFtUHJpdmF0ZTsKICNlbmRpZgpAQCAtMjkyLDggKzU1MSw5IEBAIHByaXZh
dGU6CiAKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+IG1fb3Jp
Z2luczsKICAgICBPcHRpb25hbDxib29sPiBtX2hhc1RhaW50ZWRPcmlnaW4geyBXVEY6Om51bGxv
cHQgfTsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9mcHNTaW5rIHsgbnVsbHB0ciB9Owog
fTsKIAogfQotCi0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKKyNlbmRpZiAvLyBFTkFCTEUoVklE
RU8pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5
MmRjZDZmNjAxZDY1NDU4MDAyNWU3MzYwNTMyMDlmNTgyNjYxMDcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTU3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBH
dXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAsIDIwMTUsIDIwMTYgSWdhbGlhIFMuTAotICogQ29weXJpZ2h0IChDKSAyMDE1LCAy
MDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Ik1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCIKLQotI2lmIEVOQUJMRShWSURFTykg
JiYgVVNFKEdTVFJFQU1FUikKLQotI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlR1N0cmVhbWVyLmgiCi0jaW5j
bHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1lci5oIgotI2luY2x1ZGUgIldl
YktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0
cmluZ1ByaW50U3RyZWFtLmg+Ci0KLSNpbmNsdWRlIDxnc3QvYXVkaW8vc3RyZWFtdm9sdW1lLmg+
Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgotCi0jaWYgRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKLSNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgotI2luY2x1ZGUgIkdTdHJlYW1l
ckVNRVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotI2luY2x1ZGUgIldl
YktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCIKLSNlbmRpZgotCi0jaWYg
VVNFKEdTVFJFQU1FUl9HTCkKLSNkZWZpbmUgVEVYVFVSRV9DT1BJRVJfQ09MT1JfQ09OVkVSVF9G
TEFHIFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcjo6Q29sb3JDb252ZXJzaW9uOjpOb0NvbnZl
cnQKLSNkZWZpbmUgR1NUX0dMX0NBUFNfRk9STUFUICJ7IFJHQngsIFJHQkEsIEk0MjAsIFk0NDQs
IFlWMTIsIFk0MUIsIFk0MkIsIE5WMTIsIE5WMjEsIFZVWUEgfSIKLQotI2luY2x1ZGUgPGdzdC9h
cHAvZ3N0YXBwc2luay5oPgotCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaWYgVVNFKEdMWCkK
LSNpbmNsdWRlICJHTENvbnRleHRHTFguaCIKLSNpbmNsdWRlIDxnc3QvZ2wveDExL2dzdGdsZGlz
cGxheV94MTEuaD4KLSNlbmRpZgotCi0jaWYgVVNFKEVHTCkKLSNpbmNsdWRlICJHTENvbnRleHRF
R0wuaCIKLSNpbmNsdWRlIDxnc3QvZ2wvZWdsL2dzdGdsZGlzcGxheV9lZ2wuaD4KLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oWDExKQotI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheVgxMS5oIgotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShXQVlMQU5EKQotI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheVdh
eWxhbmQuaCIKLSNlbmRpZgotCi0jaWYgVVNFKFdQRV9SRU5ERVJFUikKLSNpbmNsdWRlICJQbGF0
Zm9ybURpc3BsYXlMaWJXUEUuaCIKLSNlbmRpZgotCi0vLyBnc3RnbGFwaS5oIG1heSBpbmNsdWRl
IGVnbHBsYXRmb3JtLmggYW5kIGl0IGluY2x1ZGVzIFguaCwgd2hpY2gKLS8vIGRlZmluZXMgTm9u
ZSwgYnJlYWtpbmcgTWVkaWFQbGF5ZXI6Ok5vbmUgZW51bQotI2lmIFBMQVRGT1JNKFgxMSkgJiYg
R1NUX0dMX0hBVkVfUExBVEZPUk1fRUdMCi0jdW5kZWYgTm9uZQotI2VuZGlmIC8vIFBMQVRGT1JN
KFgxMSkgJiYgR1NUX0dMX0hBVkVfUExBVEZPUk1fRUdMCi0jaW5jbHVkZSAiVmlkZW9UZXh0dXJl
Q29waWVyR1N0cmVhbWVyLmgiCi0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKLQotI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKLSNpbmNsdWRlICJCaXRtYXBUZXh0dXJlR0wuaCIKLSNpbmNs
dWRlICJCaXRtYXBUZXh0dXJlUG9vbC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJDb250ZXh0
QXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVy
LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgotI2lmIFVT
RShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlIDxjYWly
by1nbC5oPgotI2VuZGlmCi0jZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotCi1HU1Rf
REVCVUdfQ0FURUdPUlkod2Via2l0X21lZGlhX3BsYXllcl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9D
QVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVnCi0KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNI
KQotc3RhdGljIGNvbnN0IEZsb2F0U2l6ZSBzX2hvbGVQdW5jaERlZmF1bHRGcmFtZVNpemUoMTI4
MCwgNzIwKTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IGdyZWF0ZXN0Q29tbW9uRGl2aXNvcihpbnQg
YSwgaW50IGIpCi17Ci0gICAgd2hpbGUgKGIpIHsKLSAgICAgICAgaW50IHRlbXAgPSBhOwotICAg
ICAgICBhID0gYjsKLSAgICAgICAgYiA9IHRlbXAgJSBiOwotICAgIH0KLQotICAgIHJldHVybiBB
QlMoYSk7Ci19Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi1jbGFzcyBHc3RWaWRlb0Zy
YW1lSG9sZGVyIDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyOjpVbm1h
bmFnZWRCdWZmZXJEYXRhSG9sZGVyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBHc3RWaWRlb0Zy
YW1lSG9sZGVyKEdzdFNhbXBsZSogc2FtcGxlLCBPcHRpb25hbDxHc3RWaWRlb0RlY29kZXJQbGF0
Zm9ybT4gdmlkZW9EZWNvZGVyUGxhdGZvcm0sIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3Ms
IGJvb2wgZ3N0R0xFbmFibGVkKQotICAgICAgICA6IG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0odmlk
ZW9EZWNvZGVyUGxhdGZvcm0pCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChHU1RfSVNf
U0FNUExFKHNhbXBsZSkpOwotCi0gICAgICAgIEdzdFZpZGVvSW5mbyB2aWRlb0luZm87Ci0gICAg
ICAgIGlmIChVTkxJS0VMWSghZ2V0U2FtcGxlVmlkZW9JbmZvKHNhbXBsZSwgdmlkZW9JbmZvKSkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9zaXplID0gSW50U2l6ZShHU1RfVklE
RU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKSwgR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0lu
Zm8pKTsKLSAgICAgICAgbV9oYXNBbHBoYUNoYW5uZWwgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQ
SEEoJnZpZGVvSW5mbyk7Ci0gICAgICAgIG1fYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVy
KHNhbXBsZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghR1NUX0lTX0JVRkZFUihtX2J1ZmZlcikp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICAgICAg
bV9mbGFncyA9IGZsYWdzIHwgKG1faGFzQWxwaGFDaGFubmVsID8gVGV4dHVyZU1hcHBlckdMOjpT
aG91bGRCbGVuZCA6IDApOwotCi0gICAgICAgIGlmIChnc3RHTEVuYWJsZWQpIHsKLSAgICAgICAg
ICAgIG1faXNNYXBwZWQgPSBnc3RfdmlkZW9fZnJhbWVfbWFwKCZtX3ZpZGVvRnJhbWUsICZ2aWRl
b0luZm8sIG1fYnVmZmVyLCBzdGF0aWNfY2FzdDxHc3RNYXBGbGFncz4oR1NUX01BUF9SRUFEIHwg
R1NUX01BUF9HTCkpOwotICAgICAgICAgICAgaWYgKG1faXNNYXBwZWQpIHsKLSAgICAgICAgICAg
ICAgICBtX3RleHR1cmVJRCA9ICpyZWludGVycHJldF9jYXN0PEdMdWludCo+KG1fdmlkZW9GcmFt
ZS5kYXRhWzBdKTsKLSAgICAgICAgICAgICAgICBtX2hhc01hcHBlZFRleHR1cmVzID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0jZWxzZQotICAgICAgICBVTlVTRURfUEFS
QU0oZmxhZ3MpOwotICAgICAgICBVTlVTRURfUEFSQU0oZ3N0R0xFbmFibGVkKTsKLSNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSX0dMKQotCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fdGV4dHVyZUlE
ID0gMDsKLSAgICAgICAgICAgIG1faXNNYXBwZWQgPSBnc3RfdmlkZW9fZnJhbWVfbWFwKCZtX3Zp
ZGVvRnJhbWUsICZ2aWRlb0luZm8sIG1fYnVmZmVyLCBHU1RfTUFQX1JFQUQpOwotICAgICAgICAg
ICAgaWYgKG1faXNNYXBwZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBSaWdodCBub3cgdGhlIFRl
eHR1cmVNYXBwZXIgb25seSBzdXBwb3J0cyBjaHJvbWFzIHdpdGggb25lIHBsYW5lCi0gICAgICAg
ICAgICAgICAgQVNTRVJUKEdTVF9WSURFT19JTkZPX05fUExBTkVTKCZ2aWRlb0luZm8pID09IDEp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmlydHVhbCB+R3N0Vmlk
ZW9GcmFtZUhvbGRlcigpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtFTFkoIW1faXNNYXBwZWQp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCgm
bV92aWRlb0ZyYW1lKTsKLSAgICB9Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIHZpcnR1
YWwgdm9pZCB3YWl0Rm9yQ1BVU3luYygpCi0gICAgewotICAgICAgICBHc3RHTFN5bmNNZXRhKiBt
ZXRhID0gZ3N0X2J1ZmZlcl9nZXRfZ2xfc3luY19tZXRhKG1fYnVmZmVyKTsKLSAgICAgICAgaWYg
KG1ldGEpIHsKLSAgICAgICAgICAgIEdzdE1lbW9yeSogbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21l
bW9yeShtX2J1ZmZlciwgMCk7Ci0gICAgICAgICAgICBHc3RHTENvbnRleHQqIGNvbnRleHQgPSAo
KEdzdEdMQmFzZU1lbW9yeSopbWVtKS0+Y29udGV4dDsKLSAgICAgICAgICAgIGdzdF9nbF9zeW5j
X21ldGFfd2FpdF9jcHUobWV0YSwgY29udGV4dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYg
Ly8gVVNFKEdTVFJFQU1FUl9HTCkKLQotICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KLSAgICBib29sIGhhc0FscGhhQ2hhbm5lbCgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQWxwaGFDaGFubmVsOyB9Ci0gICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFn
cygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KLSAgICBHTHVpbnQgdGV4dHVyZUlEKCkgY29u
c3QgeyByZXR1cm4gbV90ZXh0dXJlSUQ7IH0KLSAgICBib29sIGhhc01hcHBlZFRleHR1cmVzKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNNYXBwZWRUZXh0dXJlczsgfQotICAgIGNvbnN0IEdzdFZpZGVv
RnJhbWUmIHZpZGVvRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvRnJhbWU7IH0KLQotICAg
IHZvaWQgdXBkYXRlVGV4dHVyZShCaXRtYXBUZXh0dXJlR0wmIHRleHR1cmUpCi0gICAgewotICAg
ICAgICBBU1NFUlQoIW1fdGV4dHVyZUlEKTsKLSAgICAgICAgR3N0VmlkZW9HTFRleHR1cmVVcGxv
YWRNZXRhKiBtZXRhOwotICAgICAgICBpZiAobV9idWZmZXIgJiYgKG1ldGEgPSBnc3RfYnVmZmVy
X2dldF92aWRlb19nbF90ZXh0dXJlX3VwbG9hZF9tZXRhKG1fYnVmZmVyKSkpIHsKLSAgICAgICAg
ICAgIGlmIChtZXRhLT5uX3RleHR1cmVzID09IDEpIHsgLy8gQlJHeCAmIEJHUkEgZm9ybWF0cyB1
c2Ugb25seSBvbmUgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICBndWludCBpZHNbNF0gPSB7IHRl
eHR1cmUuaWQoKSwgMCwgMCwgMCB9OwotCi0gICAgICAgICAgICAgICAgaWYgKGdzdF92aWRlb19n
bF90ZXh0dXJlX3VwbG9hZF9tZXRhX3VwbG9hZChtZXRhLCBpZHMpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1f
aXNNYXBwZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaW50IHN0cmlkZSA9IEdT
VF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUoJm1fdmlkZW9GcmFtZSwgMCk7Ci0gICAgICAgIGNv
bnN0IHZvaWQqIHNyY0RhdGEgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfREFUQSgmbV92aWRlb0Zy
YW1lLCAwKTsKLQotICAgICAgICBpZiAoIXNyY0RhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgdGV4dHVyZS51cGRhdGVDb250ZW50cyhzcmNEYXRhLCBXZWJDb3JlOjpJbnRSZWN0
KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpLCBXZWJDb3JlOjpJbnRQb2lu
dCgwLCAwKSwgc3RyaWRlKTsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IHBsYXRmb3JtTGF5ZXJCdWZmZXIoKQotICAgIHsKLSAg
ICAgICAgaWYgKCFtX2hhc01hcHBlZFRleHR1cmVzKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAgICAgdXNpbmcgQnVmZmVyID0gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJC
dWZmZXI7Ci0KLSAgICAgICAgaWYgKChHU1RfVklERU9fSU5GT19JU19SR0IoJm1fdmlkZW9GcmFt
ZS5pbmZvKSAmJiBHU1RfVklERU9fSU5GT19OX1BMQU5FUygmbV92aWRlb0ZyYW1lLmluZm8pID09
IDEpKQotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8QnVmZmVyPihCdWZmZXI6OlRleHR1
cmVWYXJpYW50IHsgQnVmZmVyOjpSR0JUZXh0dXJlIHsgKnN0YXRpY19jYXN0PEdMdWludCo+KG1f
dmlkZW9GcmFtZS5kYXRhWzBdKSB9IH0sIG1fc2l6ZSwgbV9mbGFncywgR0xfUkdCQSk7Ci0KLSAg
ICAgICAgaWYgKEdTVF9WSURFT19JTkZPX0lTX1lVVigmbV92aWRlb0ZyYW1lLmluZm8pKSB7Ci0g
ICAgICAgICAgICBpZiAoR1NUX1ZJREVPX0lORk9fTl9DT01QT05FTlRTKCZtX3ZpZGVvRnJhbWUu
aW5mbykgPCAzIHx8IEdTVF9WSURFT19JTkZPX05fUExBTkVTKCZtX3ZpZGVvRnJhbWUuaW5mbykg
PiAzKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgICAgICBpZiAo
bV92aWRlb0RlY29kZXJQbGF0Zm9ybSAmJiAqbV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9PSBHc3RW
aWRlb0RlY29kZXJQbGF0Zm9ybTo6SW14VlBVKSB7Ci0gICAgICAgICAgICAgICAgLy8gSU1YIFZQ
VSBkZWNvZGVyIGRlY29kZXMgWVVWIGRhdGEgb25seSBpbnRvIHRoZSBZIHRleHR1cmUgZnJvbSB3
aGljaCB0aGUgc2FtcGxlcgotICAgICAgICAgICAgICAgIC8vIHRoZW4gZGlyZWN0bHkgcHJvZHVj
ZXMgUkdCQSBkYXRhLiBUZXh0dXJlcyBmb3Igb3RoZXIgcGxhbmVzIGFyZW4ndCB1c2VkLCBidXQK
LSAgICAgICAgICAgICAgICAvLyB0aGF0J3MgZGVjb2RlcidzIHByb2JsZW0uIFdlIGhhdmUgdG8g
dHJlYXQgdGhhdCBZIHRleHR1cmUgYXMgaGF2aW5nIFJHQkEgZGF0YS4KLSAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxCdWZmZXI+KEJ1ZmZlcjo6VGV4dHVyZVZhcmlhbnQgeyBCdWZm
ZXI6OlJHQlRleHR1cmUgeyAqc3RhdGljX2Nhc3Q8R0x1aW50Kj4obV92aWRlb0ZyYW1lLmRhdGFb
MF0pIH0gfSwgbV9zaXplLCBtX2ZsYWdzLCBHTF9SR0JBKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQbGFuZXMgPSBHU1RfVklERU9fSU5GT19OX1BMQU5F
UygmbV92aWRlb0ZyYW1lLmluZm8pOwotICAgICAgICAgICAgc3RkOjphcnJheTxHTHVpbnQsIDM+
IHBsYW5lczsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIDM+IHl1dlBsYW5lOwot
ICAgICAgICAgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgMz4geXV2UGxhbmVPZmZzZXQ7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZQbGFuZXM7ICsraSkKLSAg
ICAgICAgICAgICAgICBwbGFuZXNbaV0gPSAqc3RhdGljX2Nhc3Q8R0x1aW50Kj4obV92aWRlb0Zy
YW1lLmRhdGFbaV0pOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsr
aSkgewotICAgICAgICAgICAgICAgIHl1dlBsYW5lW2ldID0gR1NUX1ZJREVPX0lORk9fQ09NUF9Q
TEFORSgmbV92aWRlb0ZyYW1lLmluZm8sIGkpOwotICAgICAgICAgICAgICAgIHl1dlBsYW5lT2Zm
c2V0W2ldID0gR1NUX1ZJREVPX0lORk9fQ09NUF9QT0ZGU0VUKCZtX3ZpZGVvRnJhbWUuaW5mbywg
aSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8R0xmbG9hdCwgOT4g
eXV2VG9SZ2I7Ci0gICAgICAgICAgICBpZiAoZ3N0X3ZpZGVvX2NvbG9yaW1ldHJ5X21hdGNoZXMo
JkdTVF9WSURFT19JTkZPX0NPTE9SSU1FVFJZKCZtX3ZpZGVvRnJhbWUuaW5mbyksIEdTVF9WSURF
T19DT0xPUklNRVRSWV9CVDcwOSkpIHsKLSAgICAgICAgICAgICAgICB5dXZUb1JnYiA9IHsKLSAg
ICAgICAgICAgICAgICAgICAgMS4xNjRmLCAgMC4wZiwgICAgMS43ODdmLAotICAgICAgICAgICAg
ICAgICAgICAxLjE2NGYsIC0wLjIxM2YsIC0wLjUzMWYsCi0gICAgICAgICAgICAgICAgICAgIDEu
MTY0ZiwgIDIuMTEyZiwgIDAuMGYKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGJ0NjAxLiBUaGlzIGlzIHRoZSBz
YW1lIGJlaGF2aW91ciBhcyBHU3RyZWFtZXIncyBnbGNvbG9yY29udmVydCBlbGVtZW50LgotICAg
ICAgICAgICAgICAgIHl1dlRvUmdiID0gewotICAgICAgICAgICAgICAgICAgICAxLjE2NGYsICAw
LjBmLCAgICAxLjU5NmYsCi0gICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgLTAuMzkxZiwgLTAu
ODEzZiwKLSAgICAgICAgICAgICAgICAgICAgMS4xNjRmLCAgMi4wMThmLCAgMC4wZgotICAgICAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPEJ1ZmZlcj4oIEJ1ZmZlcjo6VGV4dHVyZVZhcmlhbnQgeyBCdWZmZXI6OllVVlRleHR1cmUg
eyBudW1iZXJPZlBsYW5lcywgcGxhbmVzLCB5dXZQbGFuZSwgeXV2UGxhbmVPZmZzZXQsIHl1dlRv
UmdiIH0gfSwgbV9zaXplLCBtX2ZsYWdzLCBHTF9SR0JBKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBHc3RCdWZmZXIqIG1fYnVm
ZmVyOwotICAgIEdzdFZpZGVvRnJhbWUgbV92aWRlb0ZyYW1lIHsgfTsKLSAgICBJbnRTaXplIG1f
c2l6ZTsKLSAgICBib29sIG1faGFzQWxwaGFDaGFubmVsOwotICAgIE9wdGlvbmFsPEdzdFZpZGVv
RGVjb2RlclBsYXRmb3JtPiBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtOwotICAgIFRleHR1cmVNYXBw
ZXJHTDo6RmxhZ3MgbV9mbGFncyB7IH07Ci0gICAgR0x1aW50IG1fdGV4dHVyZUlEIHsgMCB9Owot
ICAgIGJvb2wgbV9pc01hcHBlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc01hcHBlZFRleHR1
cmVzIHsgZmFsc2UgfTsKLX07Ci0jZW5kaWYKLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjppbml0aWFsaXplRGVidWdDYXRlZ29yeSgpCi17Ci0gICAgR1NUX0RFQlVHX0NB
VEVHT1JZX0lOSVQod2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZywgIndlYmtpdG1lZGlhcGxheWVy
IiwgMCwgIldlYktpdCBtZWRpYSBwbGF5ZXIiKTsKLX0KLQotTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZShNZWRpYVBsYXllciog
cGxheWVyKQotICAgIDogbV9ub3RpZmllcihNYWluVGhyZWFkTm90aWZpZXI8TWFpblRocmVhZE5v
dGlmaWNhdGlvbj46OmNyZWF0ZSgpKQotICAgICwgbV9wbGF5ZXIocGxheWVyKQotICAgICwgbV9m
cHNTaW5rKG51bGxwdHIpCi0gICAgLCBtX3JlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVOb3Ro
aW5nKQotICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQotICAgICwgbV9k
cmF3VGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6cmVwYWludCkKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0jaWYgVVNFKE5J
Q09TSUEpCi0gICAgLCBtX25pY29zaWFMYXllcihOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0
ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgq
dGhpcykpKQotI2Vsc2UKLSAgICAsIG1fcGxhdGZvcm1MYXllclByb3h5KGFkb3B0UmVmKG5ldyBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KCkpKQotI2VuZGlmCi0jZW5kaWYKLXsKLX0K
LQotTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6fk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UoKQotewotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgaWYgKG1fdmlkZW9E
ZWNvZGVyUGxhdGZvcm0gPT0gR3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OlZpZGVvNExpbnV4KQot
ICAgICAgICBmbHVzaEN1cnJlbnRCdWZmZXIoKTsKLSNlbmRpZgotI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkgJiYgVVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVD
bGllbnQoKTsKLSNlbmRpZgotCi0gICAgbV9ub3RpZmllci0+aW52YWxpZGF0ZSgpOwotCi0gICAg
aWYgKG1fdmlkZW9TaW5rKSB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
bWF0Y2hlZChtX3ZpZGVvU2luay5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVs
bHB0ciwgbnVsbHB0ciwgdGhpcyk7Ci0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICAgICAgaWYg
KEdTVF9JU19CSU4obV92aWRlb1NpbmsuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBHUmVmUHRyPEdz
dEVsZW1lbnQ+IGFwcHNpbmsgPSBhZG9wdEdSZWYoZ3N0X2Jpbl9nZXRfYnlfbmFtZShHU1RfQklO
X0NBU1QobV92aWRlb1NpbmsuZ2V0KCkpLCAid2Via2l0LWdsLXZpZGVvLXNpbmsiKSk7Ci0gICAg
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEoYXBwc2luay5nZXQo
KSwgdGhpcyk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLQotICAgIGlmIChtX3ZvbHVtZUVs
ZW1lbnQpCi0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3Zv
bHVtZUVsZW1lbnQuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51
bGxwdHIsIHRoaXMpOwotCi0gICAgLy8gVGhpcyB3aWxsIHJlbGVhc2UgdGhlIEdTdHJlYW1lciB0
aHJlYWQgZnJvbSBtX2RyYXdDb25kaXRpb24gaW4gbm9uIEFDIG1vZGUgaW4gY2FzZSB0aGVyZSdz
IGFuIG9uZ29pbmcgdHJpZ2dlclJlcGFpbnQgY2FsbAotICAgIC8vIHdhaXRpbmcgdGhlcmUsIGFu
ZCBlbnN1cmUgdGhhdCBhbnkgdHJpZ2dlclJlcGFpbnQgY2FsbCByZWFjaGluZyB0aGUgbG9jayB3
b24ndCB3YWl0IG9uIG1fZHJhd0NvbmRpdGlvbi4KLSAgICBjYW5jZWxSZXBhaW50KHRydWUpOwot
Ci0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICBtX2NkbUF0dGFjaG1lbnRTZW1hcGhv
cmUuc2lnbmFsKCk7Ci0jZW5kaWYKLQotICAgIC8vIFRoZSBjaGFuZ2UgdG8gR1NUX1NUQVRFX05V
TEwgc3RhdGUgaXMgYWx3YXlzIHN5bmNocm9ub3VzLiBTbyBhZnRlciB0aGlzIGdldHMgZXhlY3V0
ZWQgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeQotICAgIC8vIGFib3V0IGhhbmRsZXJzIHJ1bm5pbmcg
aW4gdGhlIEdTdHJlYW1lciB0aHJlYWQuCi0gICAgaWYgKG1fcGlwZWxpbmUpCi0gICAgICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7Ci0K
LSAgICBtX3BsYXllciA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6c2V0UGlwZWxpbmUoR3N0RWxlbWVudCogcGlwZWxpbmUpCi17Ci0gICAgbV9w
aXBlbGluZSA9IHBpcGVsaW5lOwotCi0gICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1Jl
Zihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsK
LSAgICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBbXShHc3RCdXMqLCBHc3RN
ZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICBhdXRvJiBwbGF5
ZXIgPSAqc3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSo+KHVzZXJE
YXRhKTsKLQotICAgICAgICBpZiAocGxheWVyLmhhbmRsZVN5bmNNZXNzYWdlKG1lc3NhZ2UpKSB7
Ci0gICAgICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKLSAgICAgICAgICAgIHJl
dHVybiBHU1RfQlVTX0RST1A7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gR1NUX0JVU19Q
QVNTOwotICAgIH0sIHRoaXMsIG51bGxwdHIpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKG1lc3NhZ2UpOwotICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1l
c3NhZ2UpICE9IEdTVF9NRVNTQUdFX05FRURfQ09OVEVYVCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgY29uc3QgZ2NoYXIqIGNvbnRleHRUeXBlOwotICAgIGdzdF9tZXNzYWdlX3BhcnNl
X2NvbnRleHRfdHlwZShtZXNzYWdlLCAmY29udGV4dFR5cGUpOwotICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIkhhbmRsaW5nICVzIG5lZWQtY29udGV4dCBtZXNzYWdlIGZvciAlcyIs
IGNvbnRleHRUeXBlLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0KLSAgICBpZiAo
IWdfc3RyY21wMChjb250ZXh0VHlwZSwgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRFWFRfVFlQ
RV9OQU1FKSkgewotICAgICAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdS
ZWYoZ3N0X2NvbnRleHRfbmV3KFdFQktJVF9XRUJfU1JDX1BMQVlFUl9DT05URVhUX1RZUEVfTkFN
RSwgRkFMU0UpKTsKLSAgICAgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3RydWN0dXJlID0gZ3N0
X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOwotCi0gICAgICAgIEFT
U0VSVChtX3BsYXllcik7Ci0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1
cmUsICJwbGF5ZXIiLCBHX1RZUEVfUE9JTlRFUiwgbV9wbGF5ZXIsIG51bGxwdHIpOwotICAgICAg
ICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChHU1RfTUVTU0FHRV9TUkMobWVz
c2FnZSkpLCBjb250ZXh0LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0j
aWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGVsZW1lbnRDb250
ZXh0ID0gYWRvcHRHUmVmKHJlcXVlc3RHTENvbnRleHQoY29udGV4dFR5cGUpKTsKLSAgICBpZiAo
ZWxlbWVudENvbnRleHQpIHsKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VM
RU1FTlQobWVzc2FnZS0+c3JjKSwgZWxlbWVudENvbnRleHQuZ2V0KCkpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKLQotI2lmIEVOQUJM
RShFTkNSWVBURURfTUVESUEpCi0gICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUsICJkcm0t
cHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIikpIHsKLSAgICAgICAgaWYgKGlzTWFpblRo
cmVhZCgpKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1IoImNhbid0IGhhbmRsZSBkcm0tcHJlZmVy
cmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNzYWdlIGluIHRoZSBtYWlu
IHRocmVhZCIpOwotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiaGFuZGxpbmcgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVk
IGNvbnRleHQgbWVzc2FnZSIpOwotCi0gICAgICAgIEluaXREYXRhIGluaXREYXRhOwotICAgICAg
ICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90ZWN0aW9uTXV0ZXgpOwotICAg
ICAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzKG1l
c3NhZ2UpOwotICAgICAgICAgICAgR1NUX1RSQUNFKCJmb3VuZCAlenUgcHJvdGVjdGlvbiBldmVu
dHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZl
bnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmF2YWlsYWJsZVN5c3RlbXMoKS5z
aXplKCkpOwotCi0gICAgICAgICAgICBmb3IgKGF1dG8mIGV2ZW50IDogcHJvdGVjdGlvblN5c3Rl
bUV2ZW50cy5ldmVudHMoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV2ZW50S2V5
U3lzdGVtSWQgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciogZGF0YSA9IG51
bGxwdHI7Ci0gICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24oZXZlbnQu
Z2V0KCksICZldmVudEtleVN5c3RlbUlkLCAmZGF0YSwgbnVsbHB0cik7Ci0KLSAgICAgICAgICAg
ICAgICBpbml0RGF0YS5hcHBlbmQoe2V2ZW50S2V5U3lzdGVtSWQsIGRhdGF9KTsKLSAgICAgICAg
ICAgICAgICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1RfRVZFTlRfU0VRTlVNKGV2
ZW50LmdldCgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW5pdGlhbGl6
YXRpb25EYXRhRW5jb3VudGVyZWQoV1RGTW92ZShpbml0RGF0YSkpOwotCi0gICAgICAgIEdTVF9J
TkZPX09CSkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0gaW5zdGFuY2UiKTsKLSAg
ICAgICAgaWYgKG1fY2RtQXR0YWNobWVudFNlbWFwaG9yZS53YWl0Rm9yKDRfcykKLSAgICAgICAg
ICAgICYmIG1fbm90aWZpZXItPmlzVmFsaWQoKSAvLyBDaGVjayB0aGUgcGxheWVyIGlzIG5vdCBi
ZWluZyBkZXN0cm95ZWQuCi0gICAgICAgICAgICAmJiAhbV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVt
KCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBwcmVmZXJyZWRLZXlTeXN0
ZW1VdWlkID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0ZW1Ub1V1aWQobV9jZG1JbnN0
YW5jZS0+a2V5U3lzdGVtKCkpOwotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5l
KCksICJ3b3JraW5nIHdpdGgga2V5IHN5c3RlbSAlcywgY29udGludWluZyB3aXRoIGtleSBzeXN0
ZW0gJXMgb24gJXMiLCBtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKS51dGY4KCkuZGF0YSgpLCBw
cmVmZXJyZWRLZXlTeXN0ZW1VdWlkLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0K
LSAgICAgICAgICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3Rf
Y29udGV4dF9uZXcoImRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQiLCBGQUxTRSkp
OwotICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRl
eHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOwotICAgICAgICAgICAgZ3N0X3N0
cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImRlY3J5cHRpb24tc3lzdGVtLWlkIiwgR19U
WVBFX1NUUklORywgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChHU1RfTUVTU0FHRV9TUkMobWVz
c2FnZSkpLCBjb250ZXh0LmdldCgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBHU1Rf
V0FSTklORygiQ0RNIGluc3RhbmNlIG5vdCBpbml0aWFsaXphZWQiKTsKLQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1Hc3RDb250ZXh0KiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpyZXF1ZXN0R0xDb250ZXh0KGNvbnN0IGNo
YXIqIGNvbnRleHRUeXBlKQotewotICAgIGlmICghZW5zdXJlR3N0R0xDb250ZXh0KCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUsIEdT
VF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSkpIHsKLSAgICAgICAgR3N0Q29udGV4dCogZGlzcGxh
eUNvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFLCBU
UlVFKTsKLSAgICAgICAgZ3N0X2NvbnRleHRfc2V0X2dsX2Rpc3BsYXkoZGlzcGxheUNvbnRleHQs
IGdzdEdMRGlzcGxheSgpKTsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlDb250ZXh0OwotICAgIH0K
LQotICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCAiZ3N0LmdsLmFwcF9jb250ZXh0Iikp
IHsKLSAgICAgICAgR3N0Q29udGV4dCogYXBwQ29udGV4dCA9IGdzdF9jb250ZXh0X25ldygiZ3N0
LmdsLmFwcF9jb250ZXh0IiwgVFJVRSk7Ci0gICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGFwcENvbnRleHQpOwotI2lmIEdTVF9D
SEVDS19WRVJTSU9OKDEsIDEyLCAwKQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1
cmUsICJjb250ZXh0IiwgR1NUX1RZUEVfR0xfQ09OVEVYVCwgZ3N0R0xDb250ZXh0KCksIG51bGxw
dHIpOwotI2Vsc2UKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4
dCIsIEdTVF9HTF9UWVBFX0NPTlRFWFQsIGdzdEdMQ29udGV4dCgpLCBudWxscHRyKTsKLSNlbmRp
ZgotICAgICAgICByZXR1cm4gYXBwQ29udGV4dDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjplbnN1cmVHc3RH
TENvbnRleHQoKQotewotICAgIGlmIChtX2dsQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBhdXRvJiBzaGFyZWREaXNwbGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNw
bGF5Rm9yQ29tcG9zaXRpbmcoKTsKLQotICAgIC8vIFRoZSBmbG9hdGluZyByZWYgcmVtb3ZhbCBz
dXBwb3J0IHdhcyBhZGRlZCBpbiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzQzMDYyLgotICAgIGJvb2wgc2hvdWxkQWRvcHRSZWYgPSB3ZWJraXRHc3RDaGVja1Zl
cnNpb24oMSwgMTQsIDApOwotICAgIGlmICghbV9nbERpc3BsYXkpIHsKLSNpZiBQTEFURk9STShY
MTEpCi0jaWYgVVNFKEdMWCkKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oc2hh
cmVkRGlzcGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IkNyZWF0aW5nIFgxMSBzaGFyZWQgR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3Vs
ZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9H
TF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBs
YXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3Rf
Z2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlY
MTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2ZSgpKSk7Ci0gICAgICAgIH0KLSNlbGlmIFVTRShFR0wp
Ci0gICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7Ci0g
ICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBYMTEgc2hh
cmVkIEVHTCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAg
ICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2ds
X2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxh
eVgxMT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3Bs
YXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4o
c2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotI2VuZGlm
Ci0KLSNpZiBQTEFURk9STShXQVlMQU5EKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5
V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIkNyZWF0aW5nIFdheWxhbmQgc2hhcmVkIGRpc3BsYXkiKTsKLSAgICAgICAg
ICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IGFk
b3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rp
c3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkuZWds
RGlzcGxheSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZ2xEaXNw
bGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNw
bGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVnbERp
c3BsYXkoKSkpOwotICAgICAgICB9Ci0jZW5kaWYKLQotI2lmIFVTRShXUEVfUkVOREVSRVIpCi0g
ICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpKSB7Ci0g
ICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBXUEUgc2hh
cmVkIEVHTCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAg
ICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2ds
X2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxh
eUxpYldQRT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rp
c3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheUxp
YldQRT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAgICAgIH0KLSNlbmRpZgot
Ci0gICAgICAgIEFTU0VSVChtX2dsRGlzcGxheSk7Ci0gICAgfQotCi0gICAgR0xDb250ZXh0KiB3
ZWJraXRDb250ZXh0ID0gc2hhcmVkRGlzcGxheS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0gICAgLy8g
RUdMIGFuZCBHTFggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgbm8gbmVlZCBmb3IgaWZkZWZzIGhl
cmUuCi0gICAgR3N0R0xQbGF0Zm9ybSBnbFBsYXRmb3JtID0gd2Via2l0Q29udGV4dC0+aXNFR0xD
b250ZXh0KCkgPyBHU1RfR0xfUExBVEZPUk1fRUdMIDogR1NUX0dMX1BMQVRGT1JNX0dMWDsKLQot
I2lmIFVTRShPUEVOR0xfRVMpCi0gICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX0dMRVMy
OwotI2VsaWYgVVNFKE9QRU5HTCkKLSAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9BUElfT1BF
TkdMOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotCi0gICAgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRCBjb250ZXh0SGFuZGxlID0gd2Via2l0Q29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0SGFuZGxlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgIG1fZ2xDb250ZXh0ID0g
YWRvcHRHUmVmKGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1fZ2xEaXNwbGF5LmdldCgpLCBy
ZWludGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xB
UEkpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZ2xDb250ZXh0ID0gZ3N0X2dsX2NvbnRleHRfbmV3
X3dyYXBwZWQobV9nbERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNv
bnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSk7Ci0KLSAgICAvLyBBY3RpdmF0ZSBhbmQg
ZmlsbCB0aGUgR1N0cmVhbWVyIHdyYXBwZWQgY29udGV4dCB3aXRoIHRoZSBXZWJraXQncyBzaGFy
ZWQgb25lLgotICAgIGF1dG8gcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJy
ZW50KCk7Ci0gICAgd2Via2l0Q29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYg
KGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBUUlVFKSkgewotICAg
ICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIGlmICghZ3N0X2dsX2Nv
bnRleHRfZmlsbF9pbmZvKG1fZ2xDb250ZXh0LmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpKQotICAg
ICAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBmaWxsIGluIEdTdHJlYW1lciBjb250ZXh0
OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgICAgZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUo
bV9nbENvbnRleHQuZ2V0KCksIEZBTFNFKTsKLSAgICB9IGVsc2UKLSAgICAgICAgR1NUX1dBUk5J
TkcoIkZhaWxlZCB0byBhY3RpdmF0ZSBHU3RyZWFtZXIgY29udGV4dCAlIiBHU1RfUFRSX0ZPUk1B
VCwgbV9nbENvbnRleHQuZ2V0KCkpOwotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0g
ICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQotCi0vLyBSZXR1
cm5zIHRoZSBzaXplIG9mIHRoZSB2aWRlbwotRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6Om5hdHVyYWxTaXplKCkgY29uc3QKLXsKLSNpZiBVU0UoR1NUUkVBTUVSX0hP
TEVQVU5DSCkKLSAgICAvLyBXaGVuIHVzaW5nIHRoZSBob2xlcHVjaCB3ZSBtYXkgbm90IGJlIGFi
bGUgdG8gZ2V0IHRoZSB2aWRlbyBmcmFtZXMgc2l6ZSwgc28gd2UgY2FuJ3QgdXNlCi0gICAgLy8g
aXQuIEJ1dCB3ZSBuZWVkIHRvIHJlcG9ydCBzb21lIG5vbiBlbXB0eSBuYXR1cmFsU2l6ZSBmb3Ig
dGhlIHBsYXllcidzIEdyYXBoaWNzTGF5ZXIKLSAgICAvLyB0byBiZSBwcm9wZXJseSBjcmVhdGVk
LgotICAgIHJldHVybiBzX2hvbGVQdW5jaERlZmF1bHRGcmFtZVNpemU7Ci0jZW5kaWYKLQotICAg
IGlmICghaGFzVmlkZW8oKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOwotCi0gICAgaWYg
KCFtX3ZpZGVvU2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtX3ZpZGVvU2l6ZTsKLQot
ICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7Ci0gICAgaWYg
KCFHU1RfSVNfU0FNUExFKG1fc2FtcGxlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6
ZSgpOwotCi0gICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9zYW1wbGUu
Z2V0KCkpOwotICAgIGlmICghY2FwcykKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOwotCi0K
LSAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUgY2xlYW4gYXBlcnR1cmUgZGF0YS4gU2VlCi0g
ICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjU3MQot
ICAgIC8vIFRPRE86IGhhbmRsZSBwb3NzaWJsZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIFNlZQot
ICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjYK
LQotICAgIC8vIEdldCB0aGUgdmlkZW8gUEFSIGFuZCBvcmlnaW5hbCBzaXplLCBpZiB0aGlzIGZh
aWxzIHRoZQotICAgIC8vIHZpZGVvLXNpbmsgaGFzIGxpa2VseSBub3QgeWV0IG5lZ290aWF0ZWQg
aXRzIGNhcHMuCi0gICAgaW50IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0
UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlOwotICAgIEludFNpemUgb3JpZ2luYWxTaXplOwotICAg
IEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICBpZiAoIWdldFZpZGVvU2l6ZUFuZEZvcm1hdEZy
b21DYXBzKGNhcHMsIG9yaWdpbmFsU2l6ZSwgZm9ybWF0LCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJh
dG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0cmlkZSkpCi0gICAgICAgIHJldHVy
biBGbG9hdFNpemUoKTsKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAgICAvLyBXaGVu
IHVzaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLCBpZiB0aGUgdmlkZW8gaXMgdGFnZ2VkIGFz
IHJvdGF0ZWQgOTAgb3IgMjcwIGRlZ3JlZXMsIHN3YXAgd2lkdGggYW5kIGhlaWdodC4KLSAgICBp
ZiAobV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIGlmIChtX3ZpZGVvU291
cmNlT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkKLSAgICAgICAgICAgIG9yaWdpbmFs
U2l6ZSA9IG9yaWdpbmFsU2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiT3JpZ2luYWwgdmlkZW8gc2l6ZTogJWR4
JWQiLCBvcmlnaW5hbFNpemUud2lkdGgoKSwgb3JpZ2luYWxTaXplLmhlaWdodCgpKTsKLSAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJQaXhlbCBhc3BlY3QgcmF0aW86ICVkLyVkIiwg
cGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKTsK
LQotICAgIC8vIENhbGN1bGF0ZSBEQVIgYmFzZWQgb24gUEFSIGFuZCB2aWRlbyBzaXplLgotICAg
IGludCBkaXNwbGF5V2lkdGggPSBvcmlnaW5hbFNpemUud2lkdGgoKSAqIHBpeGVsQXNwZWN0UmF0
aW9OdW1lcmF0b3I7Ci0gICAgaW50IGRpc3BsYXlIZWlnaHQgPSBvcmlnaW5hbFNpemUuaGVpZ2h0
KCkgKiBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3I7Ci0KLSAgICAvLyBEaXZpZGUgZGlzcGxh
eSB3aWR0aCBhbmQgaGVpZ2h0IGJ5IHRoZWlyIEdDRCB0byBhdm9pZCBwb3NzaWJsZSBvdmVyZmxv
d3MuCi0gICAgaW50IGRpc3BsYXlBc3BlY3RSYXRpb0dDRCA9IGdyZWF0ZXN0Q29tbW9uRGl2aXNv
cihkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOwotICAgIGRpc3BsYXlXaWR0aCAvPSBkaXNw
bGF5QXNwZWN0UmF0aW9HQ0Q7Ci0gICAgZGlzcGxheUhlaWdodCAvPSBkaXNwbGF5QXNwZWN0UmF0
aW9HQ0Q7Ci0KLSAgICAvLyBBcHBseSBEQVIgdG8gb3JpZ2luYWwgdmlkZW8gc2l6ZS4gVGhpcyBp
cyB0aGUgc2FtZSBiZWhhdmlvciBhcyBpbiB4dmltYWdlc2luaydzIHNldGNhcHMgZnVuY3Rpb24u
Ci0gICAgZ3VpbnQ2NCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgaWYgKCEob3JpZ2luYWxT
aXplLmhlaWdodCgpICUgZGlzcGxheUhlaWdodCkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChwaXBlbGluZSgpLCAiS2VlcGluZyB2aWRlbyBvcmlnaW5hbCBoZWlnaHQiKTsKLSAgICAgICAg
d2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwg
ZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nh
c3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhlaWdodCgpKTsKLSAgICB9IGVsc2UgaWYgKCEob3Jp
Z2luYWxTaXplLndpZHRoKCkgJSBkaXNwbGF5V2lkdGgpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIktlZXBpbmcgdmlkZW8gb3JpZ2luYWwgd2lkdGgiKTsKLSAgICAg
ICAgaGVpZ2h0ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUud2lkdGgo
KSwgZGlzcGxheUhlaWdodCwgZGlzcGxheVdpZHRoKTsKLSAgICAgICAgd2lkdGggPSBzdGF0aWNf
Y2FzdDxndWludDY0PihvcmlnaW5hbFNpemUud2lkdGgoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQXBwcm94aW1hdGluZyB3aGlsZSBrZWVw
aW5nIG9yaWdpbmFsIHZpZGVvIGhlaWdodCIpOwotICAgICAgICB3aWR0aCA9IGdzdF91dGlsX3Vp
bnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLmhlaWdodCgpLCBkaXNwbGF5V2lkdGgsIGRpc3Bs
YXlIZWlnaHQpOwotICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5h
bFNpemUuaGVpZ2h0KCkpOwotICAgIH0KLQotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIk5hdHVyYWwgc2l6ZTogJSIgR19HVUlOVDY0X0ZPUk1BVCAieCUiIEdfR1VJTlQ2NF9GT1JN
QVQsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1fdmlkZW9TaXplID0gRmxvYXRTaXplKHN0YXRpY19j
YXN0PGludD4od2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KGhlaWdodCkpOwotICAgIHJldHVybiBt
X3ZpZGVvU2l6ZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpz
ZXRWb2x1bWUoZmxvYXQgdm9sdW1lKQotewotICAgIGlmICghbV92b2x1bWVFbGVtZW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5n
IHZvbHVtZTogJWYiLCB2b2x1bWUpOwotICAgIGdzdF9zdHJlYW1fdm9sdW1lX3NldF92b2x1bWUo
bV92b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfTElORUFSLCBz
dGF0aWNfY2FzdDxkb3VibGU+KHZvbHVtZSkpOwotfQotCi1mbG9hdCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlOjp2b2x1bWUoKSBjb25zdAotewotICAgIGlmICghbV92b2x1bWVFbGVt
ZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBnc3Rfc3RyZWFtX3ZvbHVtZV9n
ZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFU
X0xJTkVBUik7Ci19Ci0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpu
b3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpCi17Ci0gICAgaWYgKCFtX3BsYXllciB8fCAhbV92
b2x1bWVFbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgZG91YmxlIHZvbHVtZTsKLSAgICB2
b2x1bWUgPSBnc3Rfc3RyZWFtX3ZvbHVtZV9nZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQo
KSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJTkVBUik7Ci0gICAgLy8gZ2V0X3ZvbHVtZSgp
IGNhbiByZXR1cm4gdmFsdWVzIHN1cGVyaW9yIHRvIDEuMCBpZiB0aGUgdXNlcgotICAgIC8vIGFw
cGxpZXMgc29mdHdhcmUgdXNlciBnYWluIHZpYSB0aGlyZCBwYXJ0eSBhcHBsaWNhdGlvbiAoR05P
TUUKLSAgICAvLyB2b2x1bWUgY29udHJvbCBmb3IgaW5zdGFuY2UpLgotICAgIHZvbHVtZSA9IENM
QU1QKHZvbHVtZSwgMC4wLCAxLjApOwotICAgIG1fcGxheWVyLT52b2x1bWVDaGFuZ2VkKHN0YXRp
Y19jYXN0PGZsb2F0Pih2b2x1bWUpKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjp2b2x1bWVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZSogcGxheWVyKQotewotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbV92b2x1bWVF
bGVtZW50IHJlY2VpdmVzIHRoZSBub3RpZnk6OnZvbHVtZSBzaWduYWwuCi0gICAgR1NUX0RFQlVH
X09CSkVDVChwbGF5ZXItPnBpcGVsaW5lKCksICJWb2x1bWUgY2hhbmdlZCB0bzogJWYiLCBwbGF5
ZXItPnZvbHVtZSgpKTsKLQotICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJl
YWROb3RpZmljYXRpb246OlZvbHVtZUNoYW5nZWQsIFtwbGF5ZXJdIHsKLSAgICAgICAgcGxheWVy
LT5ub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOwotICAgIH0pOwotfQotCi1NZWRpYVBsYXll
cjo6TmV0d29ya1N0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5ldHdvcmtT
dGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbmV0d29ya1N0YXRlOwotfQotCi1NZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpyZWFkeVN0
YXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZWFkeVN0YXRlOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNpemVDaGFuZ2VkKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNl
dE11dGVkKGJvb2wgbXV0ZSkKLXsKLSAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYm9vbCBjdXJyZW50VmFsdWUgPSBtdXRlZCgpOwotICAgIGlmIChjdXJy
ZW50VmFsdWUgPT0gbXV0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1NUX0lORk9fT0JKRUNU
KHBpcGVsaW5lKCksICJTZXQgbXV0ZWQgdG8gJXMiLCB0b1N0cmluZyhtdXRlKS51dGY4KCkuZGF0
YSgpKTsKLSAgICBnX29iamVjdF9zZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsIG11
dGUsIG51bGxwdHIpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
Om11dGVkKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgZ2Jvb2xlYW4gbXV0ZWQ7Ci0gICAgZ19vYmplY3RfZ2V0KG1fdm9s
dW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCAmbXV0ZWQsIG51bGxwdHIpOwotICAgIEdTVF9JTkZP
X09CSkVDVChwaXBlbGluZSgpLCAiUGxheWVyIGlzIG11dGVkOiAlcyIsIHRvU3RyaW5nKHN0YXRp
Y19jYXN0PGJvb2w+KG11dGVkKSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIG11dGVkOwot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5vdGlmeVBsYXllck9m
TXV0ZSgpCi17Ci0gICAgaWYgKCFtX3BsYXllciB8fCAhbV92b2x1bWVFbGVtZW50KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnYm9vbGVhbiBtdXRlZDsKLSAgICBnX29iamVjdF9nZXQobV92b2x1
bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsICZtdXRlZCwgbnVsbHB0cik7Ci0gICAgbV9wbGF5ZXIt
Pm11dGVDaGFuZ2VkKHN0YXRpY19jYXN0PGJvb2w+KG11dGVkKSk7Ci19Ci0KLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bXV0ZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyBjYWxsZWQg
d2hlbiBtX3ZvbHVtZUVsZW1lbnQgcmVjZWl2ZXMgdGhlIG5vdGlmeTo6bXV0ZSBzaWduYWwuCi0g
ICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6TXV0
ZUNoYW5nZWQsIFtwbGF5ZXJdIHsKLSAgICAgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZk11dGUo
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjph
Y2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCi17Ci0gICAgbV9yZW5kZXJpbmdDYW5C
ZUFjY2VsZXJhdGVkID0gbV9wbGF5ZXIgJiYgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKTsKLX0KLQotI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKLVBsYXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotI2lmIFVTRShOSUNPU0lBKQotICAgIHJldHVybiBt
X25pY29zaWFMYXllci5wdHIoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSo+KHRoaXMpOwotI2VuZGlmCi19Ci0KLSNpZiBVU0Uo
TklDT1NJQSkKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c3dhcEJ1ZmZl
cnNJZk5lZWRlZCgpCi17Ci0jaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCi0gICAgcHVzaE5l
eHRIb2xlUHVuY2hCdWZmZXIoKTsKLSNlbmRpZgotfQotI2Vsc2UKLVJlZlB0cjxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5PiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpw
cm94eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYo
KTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzd2FwQnVmZmVy
c0lmTmVlZGVkKCkKLXsKLSNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKLSAgICBwdXNoTmV4
dEhvbGVQdW5jaEJ1ZmZlcigpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpCi17Ci0gICAg
YXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKLSAgICBpZiAoIUdT
VF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
IHByb3h5T3BlcmF0aW9uID0KLSAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkmIHByb3h5KQotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRl
cihwcm94eS5sb2NrKCkpOwotCi0gICAgICAgICAgICBpZiAoIXByb3h5LmlzQWN0aXZlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R3N0
VmlkZW9GcmFtZUhvbGRlcj4gZnJhbWVIb2xkZXIgPSBtYWtlVW5pcXVlPEdzdFZpZGVvRnJhbWVI
b2xkZXI+KG1fc2FtcGxlLmdldCgpLCBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtLCBtX3RleHR1cmVN
YXBwZXJGbGFncywgIW1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayk7Ci0KLSAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gbGF5ZXJCdWZm
ZXI7Ci0gICAgICAgICAgICBpZiAoZnJhbWVIb2xkZXItPmhhc01hcHBlZFRleHR1cmVzKCkpIHsK
LSAgICAgICAgICAgICAgICBsYXllckJ1ZmZlciA9IGZyYW1lSG9sZGVyLT5wbGF0Zm9ybUxheWVy
QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFsYXllckJ1ZmZlcikKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyLT5zZXRVbm1hbmFn
ZWRCdWZmZXJEYXRhSG9sZGVyKFdURk1vdmUoZnJhbWVIb2xkZXIpKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXJCdWZmZXIgPSBwcm94eS5nZXRBdmFpbGFibGVC
dWZmZXIoZnJhbWVIb2xkZXItPnNpemUoKSwgR0xfRE9OVF9DQVJFKTsKLSAgICAgICAgICAgICAg
ICBpZiAoVU5MSUtFTFkoIWxheWVyQnVmZmVyKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRv
IHRleHR1cmUgPSBCaXRtYXBUZXh0dXJlR0w6OmNyZWF0ZShUZXh0dXJlTWFwcGVyQ29udGV4dEF0
dHJpYnV0ZXM6OmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQoZnJh
bWVIb2xkZXItPnNpemUoKSwgZnJhbWVIb2xkZXItPmhhc0FscGhhQ2hhbm5lbCgpID8gQml0bWFw
VGV4dHVyZTo6U3VwcG9ydHNBbHBoYSA6IEJpdG1hcFRleHR1cmU6Ok5vRmxhZyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGxheWVyQnVmZmVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllckJ1ZmZlcj4oV1RGTW92ZSh0ZXh0dXJlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGZyYW1lSG9sZGVyLT51cGRhdGVUZXh0dXJlKGxheWVyQnVmZmVyLT50ZXh0
dXJlR0woKSk7Ci0gICAgICAgICAgICAgICAgbGF5ZXJCdWZmZXItPnNldEV4dHJhRmxhZ3MobV90
ZXh0dXJlTWFwcGVyRmxhZ3MgfCAoZnJhbWVIb2xkZXItPmhhc0FscGhhQ2hhbm5lbCgpID8gVGV4
dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6IDApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKFdURk1vdmUobGF5ZXJCdWZmZXIpKTsKLSAgICAgICAg
fTsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29z
aWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgp
KS5wcm94eSgpKTsKLSNlbHNlCi0gICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclBy
b3h5KTsKLSNlbmRpZgotfQotI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpyZXBhaW50KCkKLXsKLSAgICBBU1NF
UlQobV9zYW1wbGUpOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBtX3BsYXll
ci0+cmVwYWludCgpOwotCi0gICAgTG9ja0hvbGRlciBsb2NrKG1fZHJhd011dGV4KTsKLSAgICBt
X2RyYXdDb25kaXRpb24ubm90aWZ5T25lKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6dHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxlKiBzYW1wbGUpCi17Ci0gICAg
Ym9vbCB0cmlnZ2VyUmVzaXplOwotICAgIHsKLSAgICAgICAgYXV0byBzYW1wbGVMb2NrZXIgPSBo
b2xkTG9jayhtX3NhbXBsZU11dGV4KTsKLSAgICAgICAgdHJpZ2dlclJlc2l6ZSA9ICFtX3NhbXBs
ZTsKLSAgICAgICAgbV9zYW1wbGUgPSBzYW1wbGU7Ci0gICAgfQotCi0gICAgaWYgKHRyaWdnZXJS
ZXNpemUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRmlyc3Qgc2Ft
cGxlIHJlYWNoZWQgdGhlIHNpbmssIHRyaWdnZXJpbmcgdmlkZW8gZGltZW5zaW9ucyB1cGRhdGUi
KTsKLSAgICAgICAgbV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlNp
emVDaGFuZ2VkLCBbdGhpc10gewotICAgICAgICAgICAgbV9wbGF5ZXItPnNpemVDaGFuZ2VkKCk7
Ci0gICAgICAgIH0pOwotICAgIH0KLQotICAgIGlmICghbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJh
dGVkKSB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZHJhd011dGV4KTsKLSAgICAgICAg
aWYgKG1fZGVzdHJveWluZykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9kcmF3VGlt
ZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci0gICAgICAgIG1fZHJhd0NvbmRpdGlvbi53YWl0KG1fZHJh
d011dGV4KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKLSAgICBpZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKSB7Ci0gICAgICAgIExvY2tI
b2xkZXIgbG9jayhtX2RyYXdNdXRleCk7Ci0gICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQot
ICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBwcm94eS5zY2hlZHVsZVVw
ZGF0ZU9uQ29tcG9zaXRvclRocmVhZChbdGhpc10geyB0aGlzLT5wdXNoVGV4dHVyZVRvQ29tcG9z
aXRvcigpOyB9KTsKLSAgICAgICAgICAgIH07Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgICAgIGlm
ICghcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpKQotICAgICAgICAgICAg
cmV0dXJuOwotI2Vsc2UKLSAgICAgICAgaWYgKCFwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxh
eWVyUHJveHkpKQotICAgICAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0gICAgICAgIG1fZHJhd1Rp
bWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotICAgICAgICBtX2RyYXdDb25kaXRpb24ud2FpdChtX2Ry
YXdNdXRleCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHB1c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7
Ci0jZW5kaWYgLy8gVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlKiBwbGF5ZXIsIEdzdFNhbXBsZSogc2FtcGxlKQotewotICAgIHBsYXllci0+
dHJpZ2dlclJlcGFpbnQoc2FtcGxlKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpjYW5jZWxSZXBhaW50KGJvb2wgZGVzdHJveWluZykKLXsKLSAgICAvLyBUaGUg
Z29hbCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHJlbGVhc2UgdGhlIEdTdHJlYW1lciB0aHJlYWQg
ZnJvbSBtX2RyYXdDb25kaXRpb24gaW4gdHJpZ2dlclJlcGFpbnQoKSBpbiBub24tQUMgY2FzZSwK
LSAgICAvLyB0byBhdm9pZCBhIGRlYWRsb2NrIGlmIHRoZSBwbGF5ZXIgZ2V0cyBwYXVzZWQgd2hp
bGUgd2FpdGluZyBmb3IgZHJhd2luZyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzAwMDMpOgotICAgIC8vIHRoZSBtYWluIHRocmVhZCBpcyB3YWl0aW5nIGZv
ciB0aGUgR1N0cmVhbWVyIHRocmVhZCB0byBwYXVzZSwgYnV0IHRoZSBHU3RyZWFtZXIgdGhyZWFk
IGlzIGxvY2tlZCB3YWl0aW5nIGZvciB0aGUKLSAgICAvLyBtYWluIHRocmVhZCB0byBkcmF3LiBU
aGlzIGRlYWRsb2NrIGRvZXNuJ3QgaGFwcGVuIHdoZW4gdXNpbmcgQUMgYmVjYXVzZSB0aGUgc2Ft
cGxlIGlzIHByb2Nlc3NlZCAobm90IHBhaW50ZWQpIGluIHRoZSBjb21wb3NpdG9yCi0gICAgLy8g
dGhyZWFkLCBzbyB0aGUgbWFpbiB0aHJlYWQgY2FuIHJlcXVlc3QgdGhlIHBhdXNlIGFuZCB3YWl0
IGlmIHRoZSBHU3RyZWFtZXIgdGhyZWFkIGlzIHdhaXRpbmcgZm9yIHRoZSBjb21wb3NpdG9yIHRo
cmVhZC4KLSAgICAvLwotICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyB1c2VkIHdoZW4gZGVz
dHJveWluZyB0aGUgcGxheWVyIChkZXN0cm95aW5nIHBhcmFtZXRlciBpcyB0cnVlKSwgdG8gcmVs
ZWFzZSB0aGUgZ3N0cmVhbWVyIHRocmVhZCBmcm9tCi0gICAgLy8gbV9kcmF3Q29uZGl0aW9uIGFu
ZCB0byBlbnN1cmUgdGhhdCBuZXcgdHJpZ2dlclJlcGFpbnQgY2FsbHMgd29uJ3Qgd2FpdCBvbiBt
X2RyYXdDb25kaXRpb24uCi0gICAgaWYgKCFtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQpIHsK
LSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kcmF3TXV0ZXgpOwotICAgICAgICBtX2RyYXdU
aW1lci5zdG9wKCk7Ci0gICAgICAgIG1fZGVzdHJveWluZyA9IGRlc3Ryb3lpbmc7Ci0gICAgICAg
IG1fZHJhd0NvbmRpdGlvbi5ub3RpZnlPbmUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVwYWludENhbmNlbGxlZENhbGxiYWNrKE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKLXsKLSAgICBwbGF5ZXItPmNhbmNlbFJl
cGFpbnQoKTsKLX0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1Hc3RGbG93UmV0dXJuIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5ld1NhbXBsZUNhbGxiYWNrKEdzdEVsZW1lbnQq
IHNpbmssIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKLXsKLSAgICBH
UmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3Nh
bXBsZShHU1RfQVBQX1NJTksoc2luaykpKTsKLSAgICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNh
bXBsZS5nZXQoKSk7Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi1Hc3RGbG93UmV0dXJu
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5ld1ByZXJvbGxDYWxsYmFjayhHc3RF
bGVtZW50KiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCi17
Ci0gICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3Npbmtf
cHVsbF9wcmVyb2xsKEdTVF9BUFBfU0lOSyhzaW5rKSkpOwotICAgIHBsYXllci0+dHJpZ2dlclJl
cGFpbnQoc2FtcGxlLmdldCgpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Zmx1c2hDdXJyZW50QnVmZmVyKCkKLXsK
LSAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwotCi0gICAg
aWYgKG1fc2FtcGxlKSB7Ci0gICAgICAgIC8vIFJlcGxhY2UgYnkgYSBuZXcgc2FtcGxlIGhhdmlu
ZyBvbmx5IHRoZSBjYXBzLCBzbyB0aGlzIGR1bW15IHNhbXBsZSBpcyBzdGlsbCB1c2VmdWwgdG8g
Z2V0IHRoZSBkaW1lbnNpb25zLgotICAgICAgICAvLyBUaGlzIHByZXZlbnRzIHJlc2l6aW5nIHBy
b2JsZW1zIHdoZW4gdGhlIHZpZGVvIGNoYW5nZXMgaXRzIHF1YWxpdHkgYW5kIGEgRFJBSU4gaXMg
cGVyZm9ybWVkLgotICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIGluZm8gPSBnc3Rfc2FtcGxl
X2dldF9pbmZvKG1fc2FtcGxlLmdldCgpKTsKLSAgICAgICAgbV9zYW1wbGUgPSBhZG9wdEdSZWYo
Z3N0X3NhbXBsZV9uZXcobnVsbHB0ciwgZ3N0X3NhbXBsZV9nZXRfY2FwcyhtX3NhbXBsZS5nZXQo
KSksCi0gICAgICAgICAgICBnc3Rfc2FtcGxlX2dldF9zZWdtZW50KG1fc2FtcGxlLmdldCgpKSwg
aW5mbyA/IGdzdF9zdHJ1Y3R1cmVfY29weShpbmZvKSA6IG51bGxwdHIpKTsKLSAgICB9Ci0KLSAg
ICBib29sIHNob3VsZFdhaXQgPSBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtID09IEdzdFZpZGVvRGVj
b2RlclBsYXRmb3JtOjpWaWRlbzRMaW51eDsKLSAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0gW3No
b3VsZFdhaXQsIHBpcGVsaW5lID0gcGlwZWxpbmUoKV0oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eSYgcHJveHkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSwgIkZs
dXNoaW5nIHZpZGVvIHNhbXBsZSAlcyIsIHNob3VsZFdhaXQgPyAic3luY2hyb25vdXNseSIgOiAi
Iik7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKCFzaG91bGRXYWl0ID8gJnByb3h5LmxvY2so
KSA6IG51bGxwdHIpOwotCi0gICAgICAgIGlmIChwcm94eS5pc0FjdGl2ZSgpKQotICAgICAgICAg
ICAgcHJveHkuZHJvcEN1cnJlbnRCdWZmZXJXaGlsZVByZXNlcnZpbmdUZXh0dXJlKHNob3VsZFdh
aXQpOwotICAgIH07Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAgICBwcm94eU9wZXJhdGlvbihkb3du
Y2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5
ZXItPmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQotICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRm
b3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBt
X3NpemUgPSBzaXplOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKCFtX3BsYXllci0+dmlzaWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwotICAgIGlmICghR1NU
X0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShH
U1RSRUFNRVJfR0wpCi0gICAgLy8gRW5zdXJlIHRoZSBpbnB1dCBpcyBSR0JBLiBXZSBoYW5kbGUg
WVVWIHZpZGVvIG5hdGl2ZWx5LCBzbyB3ZSBuZWVkIHRvIGRvCi0gICAgLy8gdGhpcyBjb252ZXJz
aW9uIG9uLWRlbWFuZCBoZXJlLgotICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X3NhbXBsZV9n
ZXRfYnVmZmVyKG1fc2FtcGxlLmdldCgpKTsKLSAgICBpZiAoVU5MSUtFTFkoIUdTVF9JU19CVUZG
RVIoYnVmZmVyKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdzdENhcHMqIGNhcHMgPSBnc3Rf
c2FtcGxlX2dldF9jYXBzKG1fc2FtcGxlLmdldCgpKTsKLQotICAgIEdzdFZpZGVvSW5mbyB2aWRl
b0luZm87Ci0gICAgZ3N0X3ZpZGVvX2luZm9faW5pdCgmdmlkZW9JbmZvKTsKLSAgICBpZiAoIWdz
dF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBjYXBzKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFHU1RfVklERU9fSU5GT19JU19SR0IoJnZpZGVvSW5mbykpIHsKLSAgICAg
ICAgaWYgKCFtX2NvbG9yQ29udmVydCkgewotICAgICAgICAgICAgR3N0TWVtb3J5KiBtZW0gPSBn
c3RfYnVmZmVyX3BlZWtfbWVtb3J5KGJ1ZmZlciwgMCk7Ci0gICAgICAgICAgICBHc3RHTENvbnRl
eHQqIGNvbnRleHQgPSAoKEdzdEdMQmFzZU1lbW9yeSopbWVtKS0+Y29udGV4dDsKLSAgICAgICAg
ICAgIG1fY29sb3JDb252ZXJ0ID0gYWRvcHRHUmVmKGdzdF9nbF9jb2xvcl9jb252ZXJ0X25ldyhj
b250ZXh0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1fY29sb3JDb252ZXJ0SW5wdXRD
YXBzIHx8ICFnc3RfY2Fwc19pc19lcXVhbChtX2NvbG9yQ29udmVydElucHV0Q2Fwcy5nZXQoKSwg
Y2FwcykpIHsKLSAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0SW5wdXRDYXBzID0gY2FwczsKLSAg
ICAgICAgICAgIG1fY29sb3JDb252ZXJ0T3V0cHV0Q2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19j
b3B5KGNhcHMpKTsKLSNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi0gICAgICAg
ICAgICBjb25zdCBnY2hhciogZm9ybWF0U3RyaW5nID0gR1NUX1ZJREVPX0lORk9fSEFTX0FMUEhB
KCZ2aWRlb0luZm8pID8gIlJHQkEiIDogIkJHUngiOwotI2Vsc2UKLSAgICAgICAgICAgIGNvbnN0
IGdjaGFyKiBmb3JtYXRTdHJpbmcgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5m
bykgPyAiUkdCQSIgOiAiUkdCeCI7Ci0jZW5kaWYKLSAgICAgICAgICAgIGdzdF9jYXBzX3NldF9z
aW1wbGUobV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzLmdldCgpLCAiZm9ybWF0IiwgR19UWVBFX1NU
UklORywgZm9ybWF0U3RyaW5nLCBudWxscHRyKTsKLSAgICAgICAgICAgIGlmICghZ3N0X2dsX2Nv
bG9yX2NvbnZlcnRfc2V0X2NhcHMobV9jb2xvckNvbnZlcnQuZ2V0KCksIGNhcHMsIG1fY29sb3JD
b252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgR1JlZlB0cjxHc3RCdWZmZXI+IHJnYkJ1ZmZlciA9IGFkb3B0R1JlZihn
c3RfZ2xfY29sb3JfY29udmVydF9wZXJmb3JtKG1fY29sb3JDb252ZXJ0LmdldCgpLCBidWZmZXIp
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFHU1RfSVNfQlVGRkVSKHJnYkJ1ZmZlci5nZXQoKSkp
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogaW5m
byA9IGdzdF9zYW1wbGVfZ2V0X2luZm8obV9zYW1wbGUuZ2V0KCkpOwotICAgICAgICBtX3NhbXBs
ZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhyZ2JCdWZmZXIuZ2V0KCksIG1fY29sb3JDb252
ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSwKLSAgICAgICAgICAgIGdzdF9zYW1wbGVfZ2V0X3NlZ21lbnQo
bV9zYW1wbGUuZ2V0KCkpLCBpbmZvID8gZ3N0X3N0cnVjdHVyZV9jb3B5KGluZm8pIDogbnVsbHB0
cikpOwotICAgIH0KLSNlbmRpZgotCi0gICAgYXV0byBnc3RJbWFnZSA9IEltYWdlR1N0cmVhbWVy
OjpjcmVhdGVJbWFnZShtX3NhbXBsZS5nZXQoKSk7Ci0gICAgaWYgKCFnc3RJbWFnZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY29udGV4dC5kcmF3SW1hZ2UoZ3N0SW1hZ2UtPmltYWdlKCksIHJl
Y3QsIGdzdEltYWdlLT5yZWN0KCksIHsgQ29tcG9zaXRlQ29weSwgbV9yZW5kZXJpbmdDYW5CZUFj
Y2VsZXJhdGVkID8gbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uIDogSW1hZ2VPcmllbnRhdGlvbigp
IH0pOwotfQotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0IG91dHB1dFRleHR1cmUsIEdDM0Rl
bnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBi
b29sIGZsaXBZKQotewotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLQotICAgIGlmIChtX3Vz
aW5nRmFsbGJhY2tWaWRlb1NpbmspCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChw
cmVtdWx0aXBseUFscGhhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHNhbXBs
ZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwotCi0gICAgaWYgKCFHU1RfSVNfU0FN
UExFKG1fc2FtcGxlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVIb2xkZXI+IGZyYW1lSG9sZGVyID0gbWFrZVVuaXF1ZTxH
c3RWaWRlb0ZyYW1lSG9sZGVyPihtX3NhbXBsZS5nZXQoKSwgbV92aWRlb0RlY29kZXJQbGF0Zm9y
bSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3MsIHRydWUpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9IGZyYW1lSG9sZGVy
LT5wbGF0Zm9ybUxheWVyQnVmZmVyKCk7Ci0gICAgaWYgKCFsYXllckJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBzaXplID0gZnJhbWVIb2xkZXItPnNpemUoKTsKLSAg
ICBpZiAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCi0gICAg
ICAgIHNpemUgPSBzaXplLnRyYW5zcG9zZWRTaXplKCk7Ci0KLSAgICBpZiAoIW1fdmlkZW9UZXh0
dXJlQ29waWVyKQotICAgICAgICBtX3ZpZGVvVGV4dHVyZUNvcGllciA9IG1ha2VVbmlxdWU8Vmlk
ZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyPihURVhUVVJFX0NPUElFUl9DT0xPUl9DT05WRVJUX0ZM
QUcpOwotCi0gICAgZnJhbWVIb2xkZXItPndhaXRGb3JDUFVTeW5jKCk7Ci0KLSAgICByZXR1cm4g
bV92aWRlb1RleHR1cmVDb3BpZXItPmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSgq
bGF5ZXJCdWZmZXIuZ2V0KCksIHNpemUsIG91dHB1dFRleHR1cmUsIG91dHB1dFRhcmdldCwgbGV2
ZWwsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBtX3ZpZGVvU291cmNlT3Jp
ZW50YXRpb24pOwotfQotCi1OYXRpdmVJbWFnZVB0ciBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkKLXsKLSNpZiBVU0UoQ0FJUk8pICYm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgaWYgKG1fdXNpbmdGYWxsYmFja1Zp
ZGVvU2luaykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNhbXBsZUxvY2tl
ciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwotCi0gICAgaWYgKCFHU1RfSVNfU0FNUExFKG1f
c2FtcGxlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8R3N0VmlkZW9GcmFtZUhvbGRlcj4gZnJhbWVIb2xkZXIgPSBtYWtlVW5pcXVlPEdzdFZp
ZGVvRnJhbWVIb2xkZXI+KG1fc2FtcGxlLmdldCgpLCBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtLCBt
X3RleHR1cmVNYXBwZXJGbGFncywgdHJ1ZSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGxheWVyQnVmZmVyID0gZnJhbWVIb2xkZXItPnBs
YXRmb3JtTGF5ZXJCdWZmZXIoKTsKLSAgICBpZiAoIWxheWVyQnVmZmVyKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gc2l6ZSA9IGZyYW1lSG9sZGVyLT5zaXplKCk7Ci0gICAg
aWYgKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKQotICAgICAg
ICBzaXplID0gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOwotCi0gICAgR0xDb250ZXh0KiBjb250ZXh0
ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5n
R0xDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBp
ZiAoIW1fdmlkZW9UZXh0dXJlQ29waWVyKQotICAgICAgICBtX3ZpZGVvVGV4dHVyZUNvcGllciA9
IG1ha2VVbmlxdWU8VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyPihURVhUVVJFX0NPUElFUl9D
T0xPUl9DT05WRVJUX0ZMQUcpOwotCi0gICAgZnJhbWVIb2xkZXItPndhaXRGb3JDUFVTeW5jKCk7
Ci0KLSAgICBpZiAoIW1fdmlkZW9UZXh0dXJlQ29waWVyLT5jb3B5VmlkZW9UZXh0dXJlVG9QbGF0
Zm9ybVRleHR1cmUoKmxheWVyQnVmZmVyLmdldCgpLCBzaXplLCAwLCBHTF9URVhUVVJFXzJELCAw
LCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgbV92aWRlb1NvdXJj
ZU9yaWVudGF0aW9uKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYWRv
cHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9E
ZXZpY2UoKSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV92aWRlb1RleHR1cmVDb3BpZXIt
PnJlc3VsdFRleHR1cmUoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7Ci0jZWxzZQot
ICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCi19Ci0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9H
TCkKLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRWaWRlb1NvdXJj
ZU9yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgaWYgKG1f
dmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA9PSBvcmllbnRhdGlvbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uID0gb3JpZW50YXRpb247Ci0jaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQotICAgIHVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpOwotI2VuZGlm
Ci19Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OnVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpCi17Ci0gICAgc3dpdGNo
IChtX3ZpZGVvU291cmNlT3JpZW50YXRpb24pIHsKLSAgICBjYXNlIEltYWdlT3JpZW50YXRpb246
Ok9yaWdpblRvcExlZnQ6Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gMDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5SaWdodFRvcDoKLSAg
ICAgICAgbV90ZXh0dXJlTWFwcGVyRmxhZ3MgPSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZFJvdGF0
ZVRleHR1cmU5MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbWFnZU9yaWVudGF0aW9uOjpP
cmlnaW5Cb3R0b21SaWdodDoKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyRmxhZ3MgPSBUZXh0dXJl
TWFwcGVyR0w6OlNob3VsZFJvdGF0ZVRleHR1cmUxODA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luTGVmdEJvdHRvbToKLSAgICAgICAgbV90ZXh0dXJl
TWFwcGVyRmxhZ3MgPSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZFJvdGF0ZVRleHR1cmUyNzA7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgT3Jp
Z2luVG9wUmlnaHQsIE9yaWdpbkJvdHRvbUxlZnQsIE9yaWdpbkxlZnRUb3AgYW5kIE9yaWdpblJp
Z2h0Qm90dG9tPwotICAgICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9IDA7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLSNlbmRpZgotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLU1lZGlhUGxheWVyOjpNb3ZpZUxvYWRUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6Om1vdmllTG9hZFR5cGUoKSBjb25zdAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0g
TWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OlVu
a25vd247Ci0KLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCi0gICAgICAgIHJldHVybiBNZWRpYVBs
YXllcjo6TGl2ZVN0cmVhbTsKLQotICAgIHJldHVybiBNZWRpYVBsYXllcjo6RG93bmxvYWQ7Ci19
Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6Y3JlYXRlR0xBcHBTaW5rKCkKLXsKLSAgICBHc3RFbGVtZW50KiBhcHBz
aW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzaW5rIiwgIndlYmtpdC1nbC12aWRl
by1zaW5rIik7Ci0gICAgaWYgKCFhcHBzaW5rKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGdfb2JqZWN0X3NldChhcHBzaW5rLCAiZW5hYmxlLWxhc3Qtc2FtcGxlIiwgRkFMU0UsICJl
bWl0LXNpZ25hbHMiLCBUUlVFLCAibWF4LWJ1ZmZlcnMiLCAxLCBudWxscHRyKTsKLSAgICBnX3Np
Z25hbF9jb25uZWN0KGFwcHNpbmssICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhuZXdTYW1wbGVD
YWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoYXBwc2luaywgIm5ldy1wcmVy
b2xsIiwgR19DQUxMQkFDSyhuZXdQcmVyb2xsQ2FsbGJhY2spLCB0aGlzKTsKLQotICAgIEdSZWZQ
dHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoYXBw
c2luaywgInNpbmsiKSk7Ci0gICAgZ3N0X3BhZF9hZGRfcHJvYmUocGFkLmdldCgpLCBzdGF0aWNf
Y2FzdDxHc3RQYWRQcm9iZVR5cGU+KEdTVF9QQURfUFJPQkVfVFlQRV9QVVNIIHwgR1NUX1BBRF9Q
Uk9CRV9UWVBFX1FVRVJZX0RPV05TVFJFQU0gfCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxV
U0gpLCBbXSAoR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZvLCAgZ3BvaW50ZXIgdXNlckRh
dGEpIC0+IEdzdFBhZFByb2JlUmV0dXJuIHsKLSAgICAgICAgLy8gSW4gc29tZSBwbGF0Zm9ybXMg
KGUuZy4gT3Blbk1BWCBvbiB0aGUgUmFzcGJlcnJ5IFBpKSB3aGVuIGEgcmVzb2x1dGlvbiBjaGFu
Z2Ugb2NjdXJzIHRoZQotICAgICAgICAvLyBwaXBlbGluZSBoYXMgdG8gYmUgZHJhaW5lZCBiZWZv
cmUgYSBmcmFtZSB3aXRoIHRoZSBuZXcgcmVzb2x1dGlvbiBjYW4gYmUgZGVjb2RlZC4KLSAgICAg
ICAgLy8gSW4gdGhpcyBjb250ZXh0LCBpdCdzIGltcG9ydGFudCB0aGF0IHdlIGRvbid0IGhvbGQg
cmVmZXJlbmNlcyB0byBhbnkgcHJldmlvdXMgZnJhbWUKLSAgICAgICAgLy8gKGUuZy4gbV9zYW1w
bGUpIHNvIHRoYXQgZGVjb2RpbmcgY2FuIGNvbnRpbnVlLgotICAgICAgICAvLyBXZSBhcmUgYWxz
byBub3Qgc3VwcG9zZWQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgZnJhbWUgYWZ0ZXIgYSBmbHVzaC4K
LSAgICAgICAgaWYgKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNU
UkVBTSkgewotICAgICAgICAgICAgaWYgKEdTVF9RVUVSWV9UWVBFKEdTVF9QQURfUFJPQkVfSU5G
T19RVUVSWShpbmZvKSkgIT0gR1NUX1FVRVJZX0RSQUlOKQotICAgICAgICAgICAgICAgIHJldHVy
biBHU1RfUEFEX1BST0JFX09LOwotICAgICAgICAgICAgR1NUX0RFQlVHKCJBY3RpbmcgdXBvbiBE
UkFJTiBxdWVyeSIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbmZvLT50eXBlICYgR1NUX1BB
RF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSB7Ci0gICAgICAgICAgICBpZiAoR1NUX0VWRU5UX1RZ
UEUoR1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UKGluZm8pKSAhPSBHU1RfRVZFTlRfRkxVU0hfU1RB
UlQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci0gICAgICAgICAg
ICBHU1RfREVCVUcoIkFjdGluZyB1cG9uIGZsdXNoLXN0YXJ0IGV2ZW50Iik7Ci0gICAgICAgIH0K
LQotICAgICAgICBhdXRvKiBwbGF5ZXIgPSBzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlKj4odXNlckRhdGEpOwotICAgICAgICBwbGF5ZXItPmZsdXNoQ3VycmVudEJ1
ZmZlcigpOwotICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLSAgICB9LCB0aGlzLCBu
dWxscHRyKTsKLQotICAgIHJldHVybiBhcHBzaW5rOwotfQotCi1Hc3RFbGVtZW50KiBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjcmVhdGVWaWRlb1NpbmtHTCgpCi17Ci0gICAgZ2Jv
b2xlYW4gcmVzdWx0ID0gVFJVRTsKLSAgICBHc3RFbGVtZW50KiB2aWRlb1NpbmsgPSBnc3RfYmlu
X25ldyhudWxscHRyKTsKLSAgICBHc3RFbGVtZW50KiB1cGxvYWQgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImdsdXBsb2FkIiwgbnVsbHB0cik7Ci0gICAgR3N0RWxlbWVudCogY29sb3Jjb252
ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJnbGNvbG9yY29udmVydCIsIG51bGxwdHIp
OwotICAgIEdzdEVsZW1lbnQqIGFwcHNpbmsgPSBjcmVhdGVHTEFwcFNpbmsoKTsKLQotICAgIC8v
IGdsc2lua2JpbiBpcyBub3QgdXNlZCBiZWNhdXNlIGl0IGluY2x1ZGVzIGdsY29sb3Jjb252ZXJ0
IHdoaWNoIG9ubHkgcHJvY2VzcyBSR0JBLAotICAgIC8vIGJ1dCB3ZSBjYW4gZGlzcGxheSBZVVYg
Zm9ybWF0cyB0b28uCi0KLSAgICBpZiAoIWFwcHNpbmsgfHwgIXVwbG9hZCB8fCAhY29sb3Jjb252
ZXJ0KSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gY3JlYXRlIEdzdEdMIGVsZW1l
bnRzIik7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYodmlkZW9TaW5rKTsKLQotICAgICAgICBp
ZiAodXBsb2FkKQotICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZih1cGxvYWQpOwotICAgICAg
ICBpZiAoY29sb3Jjb252ZXJ0KQotICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZihjb2xvcmNv
bnZlcnQpOwotICAgICAgICBpZiAoYXBwc2luaykKLSAgICAgICAgICAgIGdzdF9vYmplY3RfdW5y
ZWYoYXBwc2luayk7Ci0KLSAgICAgICAgZ193YXJuaW5nKCJXZWJLaXQgd2Fzbid0IGFibGUgdG8g
ZmluZCB0aGUgR1N0cmVhbWVyIG9wZW5nbCBwbHVnaW4uIEhhcmR3YXJlLWFjY2VsZXJhdGVkIHpl
cm8tY29weSB2aWRlbyByZW5kZXJpbmcgY2FuJ3QgYmUgZW5hYmxlZCB3aXRob3V0IHRoaXMgcGx1
Z2luLiIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBnc3RfYmluX2Fk
ZF9tYW55KEdTVF9CSU4odmlkZW9TaW5rKSwgdXBsb2FkLCBjb2xvcmNvbnZlcnQsIGFwcHNpbmss
IG51bGxwdHIpOwotCi0gICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9j
YXBzX2Zyb21fc3RyaW5nKCJ2aWRlby94LXJhdywgZm9ybWF0ID0gKHN0cmluZykgIiBHU1RfR0xf
Q0FQU19GT1JNQVQpKTsKLSAgICBnc3RfY2Fwc19zZXRfZmVhdHVyZXMoY2Fwcy5nZXQoKSwgMCwg
Z3N0X2NhcHNfZmVhdHVyZXNfbmV3KEdTVF9DQVBTX0ZFQVRVUkVfTUVNT1JZX0dMX01FTU9SWSwg
bnVsbHB0cikpOwotICAgIGdfb2JqZWN0X3NldChhcHBzaW5rLCAiY2FwcyIsIGNhcHMuZ2V0KCks
IG51bGxwdHIpOwotCi0gICAgcmVzdWx0ICY9IGdzdF9lbGVtZW50X2xpbmtfbWFueSh1cGxvYWQs
IGNvbG9yY29udmVydCwgYXBwc2luaywgbnVsbHB0cik7Ci0KLSAgICAvLyBXb3JrYXJvdW5kIHVu
dGlsIHdlIGNhbiBkZXBlbmQgb24gR1N0cmVhbWVyIDEuMTYuMi4KLSAgICAvLyBodHRwczovL2dp
dGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhc2UvY29tbWl0Lzhk
MzJkZTA5MDU1NGNmMjlmZTM1OWY4M2FhNDYwMDBiYTY1OGE2OTMKLSAgICAvLyBGb3JjaW5nIGEg
Y29sb3IgY29udmVyc2lvbiB0byBSR0JBIGhlcmUgYWxsb3dzIGdsdXBsb2FkIHRvIGludGVybmFs
bHkgdXNlCi0gICAgLy8gYW4gdXBsb2FkZXIgdGhhdCBhZGRzIGEgVmlkZW9NZXRhLCB0aHJvdWdo
IHRoZSBUZXh0dXJlVXBsb2FkTWV0YSBjYXBzCi0gICAgLy8gZmVhdHVyZSwgd2l0aG91dCBuZWVk
aW5nIHRoZSBwYXRjaCBhYm92ZS4gSG93ZXZlciB0aGlzIHNwZWNpZmljIGNhcHMKLSAgICAvLyBm
ZWF0dXJlIGlzIGdvaW5nIHRvIGJlIHJlbW92ZWQgZnJvbSBHU3RyZWFtZXIgc28gaXQgaXMgY29u
c2lkZXJlZCBhCi0gICAgLy8gc2hvcnQtdGVybSB3b3JrYXJvdW5kLiBUaGlzIGNvZGUgcGF0aCBt
b3N0IGxpa2VseSB3aWxsIGhhdmUgYSBuZWdhdGl2ZQotICAgIC8vIHBlcmZvcm1hbmNlIGltcGFj
dCBvbiBlbWJlZGRlZCBwbGF0Zm9ybXMgYXMgd2VsbC4gRG93bnN0cmVhbSBlbWJlZGRlcnMKLSAg
ICAvLyBhcmUgaGlnaGx5IGVuY291cmFnZWQgdG8gY2hlcnJ5LXBpY2sgdGhlIHBhdGNoIGxpbmtl
ZCBhYm92ZSBpbiB0aGVpciBCU1AKLSAgICAvLyBhbmQgc2V0IHRoZSBXRUJLSVRfR1NUX05PX1JH
QkFfQ09OVkVSU0lPTiBlbnZpcm9ubWVudCB2YXJpYWJsZSB1bnRpbAotICAgIC8vIEdTdHJlYW1l
ciAxLjE2LjIgaXMgcmVsZWFzZWQuCi0gICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTQyMgotICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNp
b24oMSwgMTYsIDIpIHx8IGdldGVudigiV0VCS0lUX0dTVF9OT19SR0JBX0NPTlZFUlNJT04iKSkg
ewotICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKHVwbG9hZCwgInNpbmsiKSk7Ci0gICAgICAgIGdzdF9lbGVtZW50X2FkZF9w
YWQodmlkZW9TaW5rLCBnc3RfZ2hvc3RfcGFkX25ldygic2luayIsIHBhZC5nZXQoKSkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIEdzdEVsZW1lbnQqIGNhcHNGaWx0ZXIgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRyKTsKLSAgICAgICAgR1JlZlB0cjxHc3RD
YXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5nKCJ2aWRlby94LXJhdywg
Zm9ybWF0PVJHQkEiKSk7Ci0gICAgICAgIGdfb2JqZWN0X3NldChjYXBzRmlsdGVyLCAiY2FwcyIs
IGNhcHMuZ2V0KCksIG51bGxwdHIpOwotCi0gICAgICAgIEdzdEVsZW1lbnQqIHZpZGVvY29udmVy
dCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252ZXJ0IiwgbnVsbHB0cik7Ci0g
ICAgICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKHZpZGVvU2luayksIGNhcHNGaWx0
ZXIsIHZpZGVvY29udmVydCwgbnVsbHB0cik7Ci0gICAgICAgIHJlc3VsdCAmPSBnc3RfZWxlbWVu
dF9saW5rX21hbnkoY2Fwc0ZpbHRlciwgdmlkZW9jb252ZXJ0LCB1cGxvYWQsIG51bGxwdHIpOwot
Ci0gICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQoY2Fwc0ZpbHRlciwgInNpbmsiKSk7Ci0gICAgICAgIGdzdF9lbGVtZW50X2Fk
ZF9wYWQodmlkZW9TaW5rLCBnc3RfZ2hvc3RfcGFkX25ldygic2luayIsIHBhZC5nZXQoKSkpOwot
ICAgIH0KLQotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQg
dG8gbGluayBHc3RHTCBlbGVtZW50cyIpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHZpZGVv
U2luayk7Ci0gICAgICAgIHZpZGVvU2luayA9IG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiB2
aWRlb1Npbms7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZW5z
dXJlR0xWaWRlb1NpbmtDb250ZXh0KCkKLXsKLSAgICBpZiAoIW1fZ2xEaXNwbGF5RWxlbWVudENv
bnRleHQpCi0gICAgICAgIG1fZ2xEaXNwbGF5RWxlbWVudENvbnRleHQgPSBhZG9wdEdSZWYocmVx
dWVzdEdMQ29udGV4dChHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUpKTsKLQotICAgIGlmICht
X2dsRGlzcGxheUVsZW1lbnRDb250ZXh0KQotICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4
dChtX3ZpZGVvU2luay5nZXQoKSwgbV9nbERpc3BsYXlFbGVtZW50Q29udGV4dC5nZXQoKSk7Ci0K
LSAgICBpZiAoIW1fZ2xBcHBFbGVtZW50Q29udGV4dCkKLSAgICAgICAgbV9nbEFwcEVsZW1lbnRD
b250ZXh0ID0gYWRvcHRHUmVmKHJlcXVlc3RHTENvbnRleHQoImdzdC5nbC5hcHBfY29udGV4dCIp
KTsKLQotICAgIGlmIChtX2dsQXBwRWxlbWVudENvbnRleHQpCi0gICAgICAgIGdzdF9lbGVtZW50
X3NldF9jb250ZXh0KG1fdmlkZW9TaW5rLmdldCgpLCBtX2dsQXBwRWxlbWVudENvbnRleHQuZ2V0
KCkpOwotfQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KLSNpZiBVU0UoR1NUUkVBTUVS
X0hPTEVQVU5DSCkKLXN0YXRpYyB2b2lkIHNldFJlY3RhbmdsZVRvVmlkZW9TaW5rKEdzdEVsZW1l
bnQqIHZpZGVvU2luaywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBIZXJlIGdvZXMg
dGhlIHBsYXRmb3JtLWRlcGVuZGFudCBjb2RlIHRvIHNldCB0byB0aGUgdmlkZW9TaW5rIHRoZSBz
aXplCi0gICAgLy8gYW5kIHBvc2l0aW9uIG9mIHRoZSB2aWRlbyByZW5kZXJpbmcgd2luZG93LiBN
YXJrIHRoZW0gdW51c2VkIGFzIGRlZmF1bHQuCi0gICAgVU5VU0VEX1BBUkFNKHZpZGVvU2luayk7
Ci0gICAgVU5VU0VEX1BBUkFNKHJlY3QpOwotfQotCi1jbGFzcyBHU3RyZWFtZXJIb2xlUHVuY2hD
bGllbnQgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI6OkhvbGVQdW5j
aENsaWVudCB7Ci1wdWJsaWM6Ci0gICAgR1N0cmVhbWVySG9sZVB1bmNoQ2xpZW50KEdSZWZQdHI8
R3N0RWxlbWVudD4mJiB2aWRlb1NpbmspIDogbV92aWRlb1NpbmsoV1RGTW92ZSh2aWRlb1Npbmsp
KSB7IH07Ci0gICAgdm9pZCBzZXRWaWRlb1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiByZWN0KSBm
aW5hbCB7IHNldFJlY3RhbmdsZVRvVmlkZW9TaW5rKG1fdmlkZW9TaW5rLmdldCgpLCByZWN0KTsg
fQotcHJpdmF0ZToKLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmlkZW9TaW5rOwotfTsKLQot
R3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlSG9sZVB1
bmNoVmlkZW9TaW5rKCkKLXsKLSAgICAvLyBIZXJlIGdvZXMgdGhlIHBsYXRmb3JtLWRlcGVuZGFu
dCBjb2RlIHRvIGNyZWF0ZSB0aGUgdmlkZW9TaW5rLiBBcyBhIGRlZmF1bHQKLSAgICAvLyB3ZSB1
c2UgYSBmYWtlVmlkZW9TaW5rIHNvIG5vdGhpbmcgaXMgZHJhd24gdG8gdGhlIHBhZ2UuCi0gICAg
R3N0RWxlbWVudCogdmlkZW9TaW5rID0gIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZmFrZXZp
ZGVvc2luayIsIG51bGxwdHIpOwotCi0gICAgcmV0dXJuIHZpZGVvU2luazsKLX0KLQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwdXNoTmV4dEhvbGVQdW5jaEJ1ZmZlcigp
Ci17Ci0gICAgYXV0byBwcm94eU9wZXJhdGlvbiA9Ci0gICAgICAgIFt0aGlzXShUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKLSAgICAgICAgewotICAgICAgICAgICAgTG9j
a0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gbGF5ZXJCdWZmZXIgPSBtYWtlVW5p
cXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPigwLCBtX3NpemUsIFRleHR1cmVN
YXBwZXJHTDo6U2hvdWxkTm90QmxlbmQsIEdMX0RPTlRfQ0FSRSk7Ci0gICAgICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8R1N0cmVhbWVySG9sZVB1bmNoQ2xpZW50PiBob2xlUHVuY2hDbGllbnQgPSBt
YWtlVW5pcXVlPEdTdHJlYW1lckhvbGVQdW5jaENsaWVudD4obV92aWRlb1NpbmsuZ2V0KCkpOwot
ICAgICAgICAgICAgbGF5ZXJCdWZmZXItPnNldEhvbGVQdW5jaENsaWVudChXVEZNb3ZlKGhvbGVQ
dW5jaENsaWVudCkpOwotICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92ZShs
YXllckJ1ZmZlcikpOwotICAgICAgICB9OwotCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgcHJveHlP
cGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+
KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICBwcm94eU9wZXJh
dGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotR3N0RWxl
bWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlkZW9TaW5rKCkK
LXsKLSAgICBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpOwotCi0jaWYgVVNFKEdT
VFJFQU1FUl9IT0xFUFVOQ0gpCi0gICAgbV92aWRlb1NpbmsgPSBjcmVhdGVIb2xlUHVuY2hWaWRl
b1NpbmsoKTsKLSAgICBwdXNoTmV4dEhvbGVQdW5jaEJ1ZmZlcigpOwotICAgIHJldHVybiBtX3Zp
ZGVvU2luay5nZXQoKTsKLSNlbmRpZgotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBpZiAo
bV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKQotICAgICAgICBtX3ZpZGVvU2luayA9IGNyZWF0
ZVZpZGVvU2lua0dMKCk7Ci0jZW5kaWYKLQotICAgIGlmICghbV92aWRlb1NpbmspIHsKLSAgICAg
ICAgbV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rID0gdHJ1ZTsKLSAgICAgICAgbV92aWRlb1Npbmsg
PSB3ZWJraXRWaWRlb1NpbmtOZXcoKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fdmlkZW9TaW5rLmdldCgpLCAicmVwYWludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKHJlcGFp
bnRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92
aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50LWNhbmNlbGxlZCIsIEdfQ0FMTEJBQ0socmVwYWludENh
bmNlbGxlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQotCi0gICAgR3N0RWxlbWVudCogdmlkZW9T
aW5rID0gbnVsbHB0cjsKLSNpZiBFTkFCTEUoTUVESUFfU1RBVElTVElDUykKLSAgICBtX2Zwc1Np
bmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImZwc2Rpc3BsYXlzaW5rIiwgInNpbmsiKTsK
LSAgICBpZiAobV9mcHNTaW5rKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmsuZ2V0
KCksICJzaWxlbnQiLCBUUlVFICwgbnVsbHB0cik7Ci0KLSAgICAgICAgLy8gVHVybiBvZmYgdGV4
dCBvdmVybGF5IHVubGVzcyB0cmFjaW5nIGlzIGVuYWJsZWQuCi0gICAgICAgIGlmIChnc3RfZGVi
dWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCh3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVnKSA8IEdT
VF9MRVZFTF9UUkFDRSkKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmsuZ2V0KCks
ICJ0ZXh0LW92ZXJsYXkiLCBGQUxTRSAsIG51bGxwdHIpOwotCi0gICAgICAgIGlmIChnX29iamVj
dF9jbGFzc19maW5kX3Byb3BlcnR5KEdfT0JKRUNUX0dFVF9DTEFTUyhtX2Zwc1NpbmsuZ2V0KCkp
LCAidmlkZW8tc2luayIpKSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLmdl
dCgpLCAidmlkZW8tc2luayIsIG1fdmlkZW9TaW5rLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAg
ICAgIHZpZGVvU2luayA9IG1fZnBzU2luay5nZXQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBtX2Zwc1NpbmsgPSBudWxscHRyOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKCFtX2Zw
c1NpbmspCi0gICAgICAgIHZpZGVvU2luayA9IG1fdmlkZW9TaW5rLmdldCgpOwotCi0gICAgQVNT
RVJUKHZpZGVvU2luayk7Ci0KLSAgICByZXR1cm4gdmlkZW9TaW5rOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR3N0U3Ry
ZWFtVm9sdW1lKiB2b2x1bWUpCi17Ci0gICAgQVNTRVJUKCFtX3ZvbHVtZUVsZW1lbnQpOwotICAg
IG1fdm9sdW1lRWxlbWVudCA9IHZvbHVtZTsKLQotICAgIC8vIFdlIGRvbid0IHNldCB0aGUgaW5p
dGlhbCB2b2x1bWUgYmVjYXVzZSB3ZSB0cnVzdCB0aGUgc2luayB0byBrZWVwIGl0IGZvciB1cy4g
U2VlCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODk3
NCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICBpZiAoIW1fcGxheWVyLT5wbGF0Zm9ybVZvbHVt
ZUNvbmZpZ3VyYXRpb25SZXF1aXJlZCgpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIlNldHRpbmcgc3RyZWFtIHZvbHVtZSB0byAlZiIsIG1fcGxheWVyLT52b2x1bWUo
KSk7Ci0gICAgICAgIGdzdF9zdHJlYW1fdm9sdW1lX3NldF92b2x1bWUobV92b2x1bWVFbGVtZW50
LmdldCgpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfTElORUFSLCBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG1fcGxheWVyLT52b2x1bWUoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJOb3Qgc2V0dGluZyBzdHJlYW0gdm9sdW1lLCB0cnVzdGluZyBz
eXN0ZW0gb25lIik7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5n
IHN0cmVhbSBtdXRlZCAlcyIsIHRvU3RyaW5nKG1fcGxheWVyLT5tdXRlZCgpKS51dGY4KCkuZGF0
YSgpKTsKLSAgICBnX29iamVjdF9zZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsIG1f
cGxheWVyLT5tdXRlZCgpLCBudWxscHRyKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJub3RpZnk6OnZvbHVtZSIsIEdfQ0FMTEJBQ0sodm9s
dW1lQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm5vdGlmeTo6bXV0ZSIsIEdfQ0FMTEJBQ0sobXV0ZUNo
YW5nZWRDYWxsYmFjayksIHRoaXMpOwotfQotCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpkZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0Ci17Ci0gICAgZ3VpbnQ2NCBk
ZWNvZGVkRnJhbWVzID0gMDsKLSAgICBpZiAobV9mcHNTaW5rKQotICAgICAgICBnX29iamVjdF9n
ZXQobV9mcHNTaW5rLmdldCgpLCAiZnJhbWVzLXJlbmRlcmVkIiwgJmRlY29kZWRGcmFtZXMsIG51
bGxwdHIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVjb2RlZEZyYW1lcyk7
Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRyb3BwZWRG
cmFtZUNvdW50KCkgY29uc3QKLXsKLSAgICBndWludDY0IGZyYW1lc0Ryb3BwZWQgPSAwOwotICAg
IGlmIChtX2Zwc1NpbmspCi0gICAgICAgIGdfb2JqZWN0X2dldChtX2Zwc1NpbmsuZ2V0KCksICJm
cmFtZXMtZHJvcHBlZCIsICZmcmFtZXNEcm9wcGVkLCBudWxscHRyKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGZyYW1lc0Ryb3BwZWQpOwotfQotCi11bnNpZ25lZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjphdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdAot
ewotICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1B
VF9CWVRFUyk7Ci0gICAgZ2ludDY0IHBvc2l0aW9uID0gMDsKLQotICAgIGlmIChhdWRpb1Npbmso
KSAmJiBnc3RfZWxlbWVudF9xdWVyeShhdWRpb1NpbmsoKSwgcXVlcnkpKQotICAgICAgICBnc3Rf
cXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3NpdGlvbik7Ci0KLSAgICBnc3RfcXVl
cnlfdW5yZWYocXVlcnkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRp
b24pOwotfQotCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2aWRl
b0RlY29kZWRCeXRlQ291bnQoKSBjb25zdAotewotICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9x
dWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gICAgZ2ludDY0IHBvc2l0aW9u
ID0gMDsKLQotICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3ZpZGVvU2luay5nZXQoKSwgcXVl
cnkpKQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3NpdGlv
bik7Ci0KLSAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocG9zaXRpb24pOwotfQotCi0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkK
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6aW5pdGlhbGl6YXRpb25EYXRh
RW5jb3VudGVyZWQoSW5pdERhdGEmJiBpbml0RGF0YSkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIGluaXREYXRhID0gV1RGTW92ZShpbml0RGF0YSldIHsKLSAgICAgICAg
aWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBHU1RfREVCVUco
InNjaGVkdWxpbmcgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQgZXZlbnQgb2Ygc2l6ZSAl
enUiLCBpbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7Ci0gICAgICAgIEdTVF9NRU1EVU1QKCJp
bml0IGRhdGFzIiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5pdERhdGEucGF5
bG9hZCgpLT5kYXRhKCkpLCBpbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7Ci0gICAgICAgIHdl
YWtUaGlzLT5tX3BsYXllci0+aW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoaW5pdERhdGEu
cGF5bG9hZENvbnRhaW5lclR5cGUoKSwgaW5pdERhdGEucGF5bG9hZCgpLT50cnlDcmVhdGVBcnJh
eUJ1ZmZlcigpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpjZG1JbnN0YW5jZUF0dGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5jZSkKLXsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1fY2RtSW5zdGFuY2UgPT0gJmlu
c3RhbmNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcGlwZWxpbmUpIHsKLSAgICAg
ICAgR1NUX0VSUk9SKCJubyBwaXBlbGluZSB5ZXQiKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NkbUluc3RhbmNlID0gJmlu
c3RhbmNlOwotCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdz
dF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNFKSk7Ci0gICAgR3N0U3RydWN0
dXJlKiBjb250ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNv
bnRleHQuZ2V0KCkpOwotICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJj
ZG0taW5zdGFuY2UiLCBHX1RZUEVfUE9JTlRFUiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5n
ZXQoKSwgbnVsbHB0cik7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQo
bV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0KCkpOwotCi0gICAgR1NUX0RFQlVHX09CSkVD
VChtX3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5IGluc3RhbmNlICVwIGRpc3BhdGNoZWQgYXMg
Y29udGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5Q0RNKCkuZ2V0KCkpOwotCi0gICAgbV9jZG1B
dHRhY2htZW50U2VtYXBob3JlLnNpZ25hbCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmNkbUluc3RhbmNlRGV0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNl
KQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9jZG1JbnN0YW5j
ZSAhPSAmaW5zdGFuY2UpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcoInBhc3NlZCBDRE1JbnN0YW5j
ZSAlcCBpcyBkaWZmZXJlbnQgZnJvbSBzdG9yZWQgb25lICVwIiwgJmluc3RhbmNlLCBtX2NkbUlu
c3RhbmNlLmdldCgpKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9waXBlbGluZSk7Ci0KLSAgICBHU1RfREVCVUdf
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJkZXRhY2hpbmcgQ0RNIGluc3RhbmNlICVwLCBzZXR0
aW5nIGVtcHR5IGNvbnRleHQiLCBtX2NkbUluc3RhbmNlLmdldCgpKTsKLSAgICBtX2NkbUluc3Rh
bmNlID0gbnVsbHB0cjsKLQotICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0
R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0taW5zdGFuY2UiLCBGQUxTRSkpOwotICAgIGdz
dF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1fcGlwZWxpbmUuZ2V0KCkpLCBjb250
ZXh0LmdldCgpKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjph
dHRlbXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKENETUluc3RhbmNlJiBpbnN0YW5jZSkKLXsKLSAg
ICBBU1NFUlQobV9jZG1JbnN0YW5jZS5nZXQoKSA9PSAmaW5zdGFuY2UpOwotICAgIEdTVF9UUkFD
RSgiaW5zdGFuY2UgJXAsIGN1cnJlbnQgc3RvcmVkICVwIiwgJmluc3RhbmNlLCBtX2NkbUluc3Rh
bmNlLmdldCgpKTsKLSAgICBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjphdHRlbXB0VG9EZWNyeXB0
V2l0aExvY2FsSW5zdGFuY2UoKQotewotICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gZ3N0X2VsZW1l
bnRfc2VuZF9ldmVudChwaXBlbGluZSgpLCBnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRf
Q1VTVE9NX0RPV05TVFJFQU1fT09CLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXR0ZW1wdC10
by1kZWNyeXB0IikpKTsKLSAgICBHU1RfREVCVUcoImF0dGVtcHRpbmcgdG8gZGVjcnlwdCwgZXZl
bnQgaGFuZGxlZCAlcyIsIGJvb2xGb3JQcmludGluZyhldmVudEhhbmRsZWQpKTsKLX0KLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVQcm90ZWN0aW9uRXZlbnQo
R3N0RXZlbnQqIGV2ZW50KQotewotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJv
dGVjdGlvbk11dGV4KTsKLSAgICAgICAgaWYgKG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHMuY29u
dGFpbnMoR1NUX0VWRU5UX1NFUU5VTShldmVudCkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJldmVudCAldSBhbHJlYWR5IGhhbmRsZWQiLCBHU1RfRVZFTlRf
U0VRTlVNKGV2ZW50KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiaGFuZGxpbmcgZXZlbnQgJXUgZnJvbSBN
U0UiLCBHU1RfRVZFTlRfU0VRTlVNKGV2ZW50KSk7Ci0gICAgY29uc3QgY2hhciogZXZlbnRLZXlT
eXN0ZW1VVUlEID0gbnVsbHB0cjsKLSAgICBHc3RCdWZmZXIqIGluaXREYXRhID0gbnVsbHB0cjsK
LSAgICBnc3RfZXZlbnRfcGFyc2VfcHJvdGVjdGlvbihldmVudCwgJmV2ZW50S2V5U3lzdGVtVVVJ
RCwgJmluaXREYXRhLCBudWxscHRyKTsKLSAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJl
ZCh7ZXZlbnRLZXlTeXN0ZW1VVUlELCBpbml0RGF0YX0pOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNldFdhaXRpbmdGb3JLZXkoYm9vbCB3YWl0aW5nRm9yS2V5
KQotewotICAgIC8vIFdlIGJhaWwgb3V0IGlmIHZhbHVlcyBkaWQgbm90IGNoYW5nZSBvciBpZiB3
ZSBhcmUgcmVxdWVzdGVkIHRvIG5vdCB3YWl0IGFueW1vcmUgYnV0IHRoZXJlIGFyZSBzdGlsbCB3
YWl0aW5nIGRlY3J5cHRvcnMuCi0gICAgR1NUX1RSQUNFKCJ3YWl0aW5nRm9yS2V5ICVzLCBtX3dh
aXRpbmdGb3JLZXkgJXMiLCBib29sRm9yUHJpbnRpbmcod2FpdGluZ0ZvcktleSksIGJvb2xGb3JQ
cmludGluZyhtX3dhaXRpbmdGb3JLZXkpKTsKLSAgICBpZiAod2FpdGluZ0ZvcktleSA9PSBtX3dh
aXRpbmdGb3JLZXkgfHwgKCF3YWl0aW5nRm9yS2V5ICYmIHRoaXMtPndhaXRpbmdGb3JLZXkoKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fd2FpdGluZ0ZvcktleSA9IHdhaXRpbmdGb3JLZXk7
Ci0gICAgR1NUX0RFQlVHKCJ3YWl0aW5nIGZvciBrZXkgY2hhbmdlZCAlcyIsIGJvb2xGb3JQcmlu
dGluZyhtX3dhaXRpbmdGb3JLZXkpKTsKLSAgICBtX3BsYXllci0+d2FpdGluZ0ZvcktleUNoYW5n
ZWQoKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp3YWl0aW5n
Rm9yS2V5KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdzdFN0YXRlIHN0YXRlOwotICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZSht
X3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOwotCi0gICAgYm9vbCByZXN1bHQg
PSBmYWxzZTsKLSAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihnc3RfcXVl
cnlfbmV3X2N1c3RvbShHU1RfUVVFUllfQ1VTVE9NLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgi
YW55LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkpOwotICAgIGlmIChzdGF0ZSA+PSBHU1Rf
U1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGlw
ZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAgR1NUX1RSQUNFKCJxdWVyeSByZXN1
bHQgJXMsIG9uICVzIiwgYm9vbEZvclByaW50aW5nKHJlc3VsdCksIGdzdF9lbGVtZW50X3N0YXRl
X2dldF9uYW1lKHN0YXRlKSk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZSA+PSBHU1RfU1RBVEVfUkVB
RFkpIHsKLSAgICAgICAgLy8gUnVubmluZyBhIHF1ZXJ5IGluIHRoZSBwaXBlbGluZSBpcyBlYXNp
ZXIgYnV0IGl0IG9ubHkgd29ya3Mgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0IHVwIGFuZCBydW5u
aW5nLCBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbnNwZWN0IGl0IGFuZCBhc2sgdGhlIGRlY3J5cHRv
cnMgZGlyZWN0bHkuCi0gICAgICAgIEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+IGl0ZXJhdG9yKGdz
dF9iaW5faXRlcmF0ZV9yZWN1cnNlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpKTsKLSAgICAg
ICAgR3N0SXRlcmF0b3JSZXN1bHQgaXRlcmF0b3JSZXN1bHQ7Ci0gICAgICAgIGRvIHsKLSAgICAg
ICAgICAgIGl0ZXJhdG9yUmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZvbGQoaXRlcmF0b3IuZ2V0KCks
IFtdKGNvbnN0IEdWYWx1ZSAqaXRlbSwgR1ZhbHVlICosIGdwb2ludGVyIGRhdGEpIC0+IGdib29s
ZWFuIHsKLSAgICAgICAgICAgICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gR1NUX0VMRU1FTlQo
Z192YWx1ZV9nZXRfb2JqZWN0KGl0ZW0pKTsKLSAgICAgICAgICAgICAgICBHc3RRdWVyeSogcXVl
cnkgPSBHU1RfUVVFUlkoZGF0YSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFXRUJLSVRfSVNf
TUVESUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpIHx8ICFnc3RfZWxlbWVudF9xdWVyeShlbGVtZW50
LCBxdWVyeSk7Ci0gICAgICAgICAgICB9LCBudWxscHRyLCBxdWVyeS5nZXQoKSk7Ci0gICAgICAg
ICAgICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKLSAgICAgICAg
ICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXJhdG9yLmdldCgpKTsKLSAgICAgICAgfSB3
aGlsZSAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7Ci0gICAgICAgIGlm
IChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfRVJST1IpCi0gICAgICAgICAgICBHU1Rf
V0FSTklORygiaXRlcmF0b3IgcmV0dXJuZWQgYW4gZXJyb3IiKTsKLSAgICAgICAgcmVzdWx0ID0g
aXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX09LOwotICAgICAgICBHU1RfVFJBQ0UoIml0
ZXJhdG9yIHJlc3VsdCAlZCwgd2FpdGluZyAlcyIsIGl0ZXJhdG9yUmVzdWx0LCBib29sRm9yUHJp
bnRpbmcocmVzdWx0KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgot
Ci1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnN1cHBvcnRzS2V5U3lzdGVt
KGNvbnN0IFN0cmluZyYga2V5U3lzdGVtLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAg
IGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAg
IHJlc3VsdCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6aXNDbGVhcktleUtleVN5c3RlbShrZXlT
eXN0ZW0pOwotI2VuZGlmCi0KLSAgICBHU1RfREVCVUcoImNoZWNraW5nIGZvciBLZXlTeXN0ZW0g
c3VwcG9ydCB3aXRoICVzIGFuZCB0eXBlICVzOiAlcyIsIGtleVN5c3RlbS51dGY4KCkuZGF0YSgp
LCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpLCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjpleHRlbmRlZFN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVu
Z2luZVN1cHBvcnRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNU
eXBlIHJlc3VsdCkKLXsKLSAgICBVTlVTRURfUEFSQU0ocGFyYW1ldGVycyk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhYjVhOTNkZjU2YzkxNDUzNTI1OGQzMTRlN2MyZTc0NmE1OTZjZmFm
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMjQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCwgMjAxNSwgMjAxNiBJZ2FsaWEgUy5MCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUsIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2VfaAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlX2gKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCi0KLSNpbmNsdWRl
ICJHU3RyZWFtZXJDb21tb24uaCIKLSNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIK
LSNpbmNsdWRlICJNYWluVGhyZWFkTm90aWZpZXIuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclBy
aXZhdGUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgot
I2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+Ci0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+Ci0K
LSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotI2lmIFVTRShMSUJFUE9YWSkKLS8vIEluY2x1ZGUgdGhl
IDxlcG94eS9nbC5oPiBoZWFkZXIgYmVmb3JlIDxnc3QvZ2wvZ2wuaD4uCi0jaW5jbHVkZSA8ZXBv
eHkvZ2wuaD4KLQotLy8gV29ya2Fyb3VuZCBidWlsZCBpc3N1ZSB3aXRoIFJQaSB1c2VybGFuZCBH
TEVTdjIgaGVhZGVycyBhbmQgbGliZXBveHkgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE4NTYzOT4K
LSNpZiAhR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTQsIDApCi0jaW5jbHVkZSA8Z3N0L2dsL2dzdGds
Y29uZmlnLmg+Ci0jaWYgZGVmaW5lZChHU1RfR0xfSEFWRV9XSU5ET1dfRElTUE1BTlgpICYmIEdT
VF9HTF9IQVZFX1dJTkRPV19ESVNQTUFOWAotI2RlZmluZSBfX2dsMl9oXwotI3VuZGVmIEdTVF9H
TF9IQVZFX0dMU1lOQwotI2RlZmluZSBHU1RfR0xfSEFWRV9HTFNZTkMgMQotI2VuZGlmCi0jZW5k
aWYgLy8gIUdTVF9DSEVDS19WRVJTSU9OKDEsIDE0LCAwKQotI2VuZGlmIC8vIFVTRShMSUJFUE9Y
WSkKLQotI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQotI2luY2x1ZGUgPGdzdC9nbC9nbC5o
PgotI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCi0jZW5kaWYKLQotI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpZiBVU0UoTklDT1NJ
QSkKLSNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNl
bHNlCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgi
Ci0jZW5kaWYKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdzdFN0
cmVhbVZvbHVtZTsKLXR5cGVkZWYgc3RydWN0IF9Hc3RWaWRlb0luZm8gR3N0VmlkZW9JbmZvOwot
dHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7Ci10eXBlZGVmIHN0cnVj
dCBfR3N0R0xEaXNwbGF5IEdzdEdMRGlzcGxheTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBCaXRtYXBUZXh0dXJlR0w7Ci1jbGFzcyBHTENvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0Nv
bnRleHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBJ
bnRSZWN0OwotY2xhc3MgVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyOwotCi0jaWYgVVNFKFRF
WFRVUkVfTUFQUEVSX0dMKQotY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsK
LSNlbmRpZgotCi12b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKTsKLQotLy8g
VXNlIGVhZ2VyIGluaXRpYWxpemF0aW9uIGZvciB0aGUgV2Vha1B0ckZhY3Rvcnkgc2luY2Ugd2Ug
Y2FsbCBtYWtlV2Vha1B0cigpIGZyb20gYW5vdGhlciB0aHJlYWQuCi1jbGFzcyBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFj
ZSwgcHVibGljIENhbk1ha2VXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Us
IFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPgotI2lmIFVTRShURVhUVVJFX01B
UFBFUl9HTCkKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAsIHB1YmxpYyBOaWNvc2lhOjpDb250ZW50
TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50Ci0jZWxzZQotICAgICwgcHVibGljIFBsYXRm
b3JtTGF5ZXIKLSNlbmRpZgotI2VuZGlmCi17Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKTsKLQot
ICAgIHZpcnR1YWwgfk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoKTsKLQotICAgIEZs
b2F0U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRWb2x1
bWUoZmxvYXQpIG92ZXJyaWRlOwotICAgIGZsb2F0IHZvbHVtZSgpIGNvbnN0IG92ZXJyaWRlOwot
Ci0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBib29sIGVuc3VyZUdzdEdMQ29udGV4dCgpOwot
ICAgIEdzdENvbnRleHQqIHJlcXVlc3RHTENvbnRleHQoY29uc3QgY2hhciogY29udGV4dFR5cGUp
OwotI2VuZGlmCi0gICAgdm9pZCBzZXRNdXRlZChib29sKSBvdmVycmlkZTsKLSAgICBib29sIG11
dGVkKCkgY29uc3Q7Ci0KLSAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0
ZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3Rh
dGUoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0VmlzaWJsZShib29sKSBvdmVycmlk
ZSB7IH0KLSAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2l6ZUNoYW5nZWQoKTsKLQotICAgIC8vIFByZWZlciBNZWRpYVRpbWUgYmFzZWQgbWV0aG9k
cyBvdmVyIGZsb2F0IGJhc2VkLgotICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50b0Zsb2F0KCk7IH0KLSAgICBkb3VibGUgZHVy
YXRpb25Eb3VibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBkdXJhdGlvbk1lZGlhVGltZSgp
LnRvRG91YmxlKCk7IH0KLSAgICBNZWRpYVRpbWUgZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7IH0KLSAgICBmbG9hdCBjdXJy
ZW50VGltZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGN1cnJlbnRNZWRpYVRpbWUoKS50b0Zs
b2F0KCk7IH0KLSAgICBkb3VibGUgY3VycmVudFRpbWVEb3VibGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBjdXJyZW50TWVkaWFUaW1lKCkudG9Eb3VibGUoKTsgfQotICAgIE1lZGlhVGltZSBj
dXJyZW50TWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJv
VGltZSgpOyB9Ci0gICAgdm9pZCBzZWVrKGZsb2F0IHRpbWUpIG92ZXJyaWRlIHsgc2VlayhNZWRp
YVRpbWU6OmNyZWF0ZVdpdGhGbG9hdCh0aW1lKSk7IH0KLSAgICB2b2lkIHNlZWtEb3VibGUoZG91
YmxlIHRpbWUpIG92ZXJyaWRlIHsgc2VlayhNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUodGlt
ZSkpOyB9Ci0gICAgdm9pZCBzZWVrKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlIHsgfQotICAg
IGZsb2F0IG1heFRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1heE1lZGlh
VGltZVNlZWthYmxlKCkudG9GbG9hdCgpOyB9Ci0gICAgTWVkaWFUaW1lIG1heE1lZGlhVGltZVNl
ZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9
Ci0gICAgZG91YmxlIG1pblRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1p
bk1lZGlhVGltZVNlZWthYmxlKCkudG9GbG9hdCgpOyB9Ci0gICAgTWVkaWFUaW1lIG1pbk1lZGlh
VGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGlt
ZSgpOyB9Ci0KLSAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIE1lZGlhVGltZSBtYXhUaW1l
TG9hZGVkKCkgY29uc3QgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9Ci0KLSAgICBi
b29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgTWVkaWFQbGF5
ZXI6Ok1vdmllTG9hZFR5cGUgbW92aWVMb2FkVHlwZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgYm9vbCBpc0xpdmVTdHJlYW0oKSBjb25zdCA9IDA7Ci0KLSAgICBNZWRpYVBsYXllciog
bWVkaWFQbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllcjsgfQotCi0gICAgdW5zaWduZWQg
ZGVjb2RlZEZyYW1lQ291bnQoKSBjb25zdCBvdmVycmlkZTsKLSAgICB1bnNpZ25lZCBkcm9wcGVk
RnJhbWVDb3VudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHVuc2lnbmVkIGF1ZGlvRGVjb2RlZEJ5
dGVDb3VudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHVuc2lnbmVkIHZpZGVvRGVjb2RlZEJ5dGVD
b3VudCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0
YXRlQ2hhbmdlZCgpIG92ZXJyaWRlOwotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAg
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKLSNpZiBQTEFU
Rk9STShXSU5fQ0FJUk8pCi0gICAgLy8gRklYTUU6IEFjY2VsZXJhdGVkIHJlbmRlcmluZyBoYXMg
bm90IGJlZW4gaW1wbGVtZW50ZWQgZm9yIFdpbkNhaXJvIHlldC4KLSAgICBib29sIHN1cHBvcnRz
QWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQot
I2Vsc2UKLSAgICBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKLSAgICB2b2lkIGNkbUluc3RhbmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNkbUluc3RhbmNlRGV0YWNoZWQoQ0RNSW5zdGFuY2UmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGhhbmRsZVByb3RlY3Rpb25FdmVudChHc3RFdmVudCopOwotICAgIHZp
cnR1YWwgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKLSAgICB2b2lk
IGF0dGVtcHRUb0RlY3J5cHRXaXRoSW5zdGFuY2UoQ0RNSW5zdGFuY2UmKSBmaW5hbDsKLSAgICB2
b2lkIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRhJiYpOwotICAgIHZvaWQg
c2V0V2FpdGluZ0ZvcktleShib29sKTsKLSAgICBib29sIHdhaXRpbmdGb3JLZXkoKSBjb25zdCBv
dmVycmlkZTsKLSNlbmRpZgotCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNLZXlTeXN0ZW0oY29u
c3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgIHN0YXRp
YyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIGV4dGVuZGVkU3VwcG9ydHNUeXBlKGNvbnN0IE1l
ZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlKTsK
LQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0
Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51
bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgb3Zl
cnJpZGU7Ci0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIG92
ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2b2lkIHNldFZpZGVvU291cmNlT3JpZW50YXRpb24oSW1h
Z2VPcmllbnRhdGlvbik7Ci0gICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7IHJldHVy
biBtX3BpcGVsaW5lLmdldCgpOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3luY01lc3Nh
Z2UoR3N0TWVzc2FnZSopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZShNZWRpYVBsYXllciopOwotICAgIHZpcnR1YWwgR3N0RWxlbWVudCogY3JlYXRl
VmlkZW9TaW5rKCk7Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKLSAgICBHc3RFbGVt
ZW50KiBjcmVhdGVIb2xlUHVuY2hWaWRlb1NpbmsoKTsKLSAgICB2b2lkIHB1c2hOZXh0SG9sZVB1
bmNoQnVmZmVyKCk7Ci0gICAgYm9vbCBzaG91bGRJZ25vcmVJbnRyaW5zaWNTaXplKCkgZmluYWwg
eyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIHN0
YXRpYyBHc3RGbG93UmV0dXJuIG5ld1NhbXBsZUNhbGxiYWNrKEdzdEVsZW1lbnQqLCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlKik7Ci0gICAgc3RhdGljIEdzdEZsb3dSZXR1cm4gbmV3
UHJlcm9sbENhbGxiYWNrKEdzdEVsZW1lbnQqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlKik7Ci0gICAgdm9pZCBmbHVzaEN1cnJlbnRCdWZmZXIoKTsKLSAgICBHc3RFbGVtZW50KiBj
cmVhdGVHTEFwcFNpbmsoKTsKLSAgICBHc3RFbGVtZW50KiBjcmVhdGVWaWRlb1NpbmtHTCgpOwot
ICAgIEdzdEdMQ29udGV4dCogZ3N0R0xDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9nbENvbnRl
eHQuZ2V0KCk7IH0KLSAgICBHc3RHTERpc3BsYXkqIGdzdEdMRGlzcGxheSgpIGNvbnN0IHsgcmV0
dXJuIG1fZ2xEaXNwbGF5LmdldCgpOyB9Ci0gICAgdm9pZCBlbnN1cmVHTFZpZGVvU2lua0NvbnRl
eHQoKTsKLSNlbmRpZgotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIHZvaWQgcHVz
aFRleHR1cmVUb0NvbXBvc2l0b3IoKTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICB2b2lkIHN3YXBC
dWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
d2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgR3N0
RWxlbWVudCogdmlkZW9TaW5rKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1NpbmsuZ2V0KCk7IH0K
LQotICAgIHZvaWQgc2V0U3RyZWFtVm9sdW1lRWxlbWVudChHc3RTdHJlYW1Wb2x1bWUqKTsKLSAg
ICB2aXJ0dWFsIEdzdEVsZW1lbnQqIGNyZWF0ZUF1ZGlvU2luaygpIHsgcmV0dXJuIDA7IH0KLSAg
ICB2aXJ0dWFsIEdzdEVsZW1lbnQqIGF1ZGlvU2luaygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQot
ICAgIHZvaWQgc2V0UGlwZWxpbmUoR3N0RWxlbWVudCopOwotCi0gICAgdm9pZCB0cmlnZ2VyUmVw
YWludChHc3RTYW1wbGUqKTsKLSAgICB2b2lkIHJlcGFpbnQoKTsKLSAgICB2b2lkIGNhbmNlbFJl
cGFpbnQoYm9vbCBkZXN0cm95aW5nID0gZmFsc2UpOwotCi0gICAgc3RhdGljIHZvaWQgcmVwYWlu
dENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqLCBHc3RTYW1wbGUqKTsK
LSAgICBzdGF0aWMgdm9pZCByZXBhaW50Q2FuY2VsbGVkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZSopOwotCi0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5n
ZSgpOwotICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZNdXRlKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCB2
b2x1bWVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOwot
ICAgIHN0YXRpYyB2b2lkIG11dGVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZSopOwotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIHZvaWQgdXBk
YXRlVGV4dHVyZU1hcHBlckZsYWdzKCk7Ci0gICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX3Rl
eHR1cmVNYXBwZXJGbGFnczsKLSNlbmRpZgotCi0gICAgZW51bSBNYWluVGhyZWFkTm90aWZpY2F0
aW9uIHsKLSAgICAgICAgVmlkZW9DaGFuZ2VkID0gMSA8PCAwLAotICAgICAgICBWaWRlb0NhcHND
aGFuZ2VkID0gMSA8PCAxLAotICAgICAgICBBdWRpb0NoYW5nZWQgPSAxIDw8IDIsCi0gICAgICAg
IFZvbHVtZUNoYW5nZWQgPSAxIDw8IDMsCi0gICAgICAgIE11dGVDaGFuZ2VkID0gMSA8PCA0LAot
I2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICAgICAgVGV4dENoYW5nZWQgPSAxIDw8IDUsCi0j
ZW5kaWYKLSAgICAgICAgU2l6ZUNoYW5nZWQgPSAxIDw8IDYsCi0gICAgICAgIFN0cmVhbUNvbGxl
Y3Rpb25DaGFuZ2VkID0gMSA8PCA3Ci0gICAgfTsKLQotICAgIFJlZjxNYWluVGhyZWFkTm90aWZp
ZXI8TWFpblRocmVhZE5vdGlmaWNhdGlvbj4+IG1fbm90aWZpZXI7Ci0gICAgTWVkaWFQbGF5ZXIq
IG1fcGxheWVyOwotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKLSAgICBHUmVm
UHRyPEdzdFN0cmVhbVZvbHVtZT4gbV92b2x1bWVFbGVtZW50OwotICAgIEdSZWZQdHI8R3N0RWxl
bWVudD4gbV92aWRlb1Npbms7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2Zwc1Npbms7Ci0g
ICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIG11dGFibGUgTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKLSAgICBJbnRTaXplIG1fc2l6
ZTsKLSAgICBtdXRhYmxlIExvY2sgbV9zYW1wbGVNdXRleDsKLSAgICBHUmVmUHRyPEdzdFNhbXBs
ZT4gbV9zYW1wbGU7Ci0KLSAgICBtdXRhYmxlIEZsb2F0U2l6ZSBtX3ZpZGVvU2l6ZTsKLSAgICBi
b29sIG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3JlbmRl
cmluZ0NhbkJlQWNjZWxlcmF0ZWQgeyBmYWxzZSB9OwotCi0gICAgQ29uZGl0aW9uIG1fZHJhd0Nv
bmRpdGlvbjsKLSAgICBMb2NrIG1fZHJhd011dGV4OwotICAgIGJvb2wgbV9kZXN0cm95aW5nIHsg
ZmFsc2UgfTsKLSAgICBSdW5Mb29wOjpUaW1lcjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlPiBtX2RyYXdUaW1lcjsKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSNpZiBVU0Uo
TklDT1NJQSkKLSAgICBSZWY8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsK
LSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxh
dGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0jZW5kaWYKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wp
Ci0gICAgR1JlZlB0cjxHc3RHTENvbnRleHQ+IG1fZ2xDb250ZXh0OwotICAgIEdSZWZQdHI8R3N0
R0xEaXNwbGF5PiBtX2dsRGlzcGxheTsKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IG1fZ2xEaXNw
bGF5RWxlbWVudENvbnRleHQ7Ci0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBtX2dsQXBwRWxlbWVu
dENvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1l
cj4gbV92aWRlb1RleHR1cmVDb3BpZXI7Ci0KLSAgICBHUmVmUHRyPEdzdEdMQ29sb3JDb252ZXJ0
PiBtX2NvbG9yQ29udmVydDsKLSAgICBHUmVmUHRyPEdzdENhcHM+IG1fY29sb3JDb252ZXJ0SW5w
dXRDYXBzOwotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzOwot
I2VuZGlmCi0KLSAgICBJbWFnZU9yaWVudGF0aW9uIG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbjsK
LQotI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0gICAgQmluYXJ5U2VtYXBob3JlIG1fY2Rt
QXR0YWNobWVudFNlbWFwaG9yZTsKLSAgICBSZWZQdHI8Y29uc3QgQ0RNSW5zdGFuY2U+IG1fY2Rt
SW5zdGFuY2U7Ci0KLSAgICBMb2NrIG1fcHJvdGVjdGlvbk11dGV4OyAvLyBHdWFyZHMgYWNjZXNz
IHRvIG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHMuCi0gICAgSGFzaFNldDx1aW50MzJfdD4gbV9o
YW5kbGVkUHJvdGVjdGlvbkV2ZW50czsKLQotICAgIGJvb2wgbV93YWl0aW5nRm9yS2V5IHsgZmFs
c2UgfTsKLSNlbmRpZgotCi0gICAgT3B0aW9uYWw8R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm0+IG1f
dmlkZW9EZWNvZGVyUGxhdGZvcm07Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
KQotI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>383871</attachid>
            <date>2019-11-19 08:34:55 -0800</date>
            <delta_ts>2019-11-25 01:26:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204352-20191119163453.patch</filename>
            <type>text/plain</type>
            <size>324977</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNjI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjUwYTBlNGZjZTNiYzE5
NWNhYzYxMzA4YmEyZmYzMmM1YmE5NGYzNS4uMGI2YWFkNDY4ZmI1NWMyNjc1OGM3M2ZjZjUyNGNm
ZDNlODU5NDJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NiBAQAorMjAxOS0xMS0xOSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0g
RmxhdHRlbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgaW50byBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDQzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGUgaW5oZXJpdGFuY2UgbGluayBiZXR3ZWVuIHRoZSBiYXNlIHBsYXllciBhbmQg
dGhlIHByaXZhdGUgcGxheWVyIG5vCisgICAgICAgIGxvbmdlciBzZXJ2ZXMgYSBwdXJwb3NlLiBU
aGUgb25seSB1c2VyIG9mIHRoZSBiYXNlIGNsYXNzIGlzIHRoZSBwcml2YXRlCisgICAgICAgIHBs
YXllci4KKworICAgICAgICBTcXVhc2hpbmcgdGhlc2UgdG9naGV0aGVyIG1ha2VzIGl0IGVhc3kg
dG8gZG8gZnVydGhlciByZWZhY3RvcmluZ3MsCisgICAgICAgIHNpbmNlIGV2ZXJ5dGhpbmcgY2Fu
IGJlIHNlZW4gaW4gb25lIHBsYWNlIHJhdGhlciB0aGFuIGJlaW5nIGFyYml0cmFyaWx5CisgICAg
ICAgIHNwbGl0IGludG8gdHdvIGNsYXNzZXMgYW5kIGhhdmluZyB0byBkbyBkZXJpdmVkLXRvLWJh
c2UgY29udmVyc2lvbnMgaW4KKyAgICAgICAgeW91ciBoZWFkIGZvciBubyBnYWluIGluIGNsYXJp
dHkgZWxzZXdoZXJlLgorCisgICAgICAgIEFzaWRlIGZyb20gbWVyZ2luZyB0aGUgY2xhc3Nlcywg
dGhlIG9ubHkgb3RoZXIgY2hhbmdlIGhlcmUgaXMgc3dpdGNoaW5nCisgICAgICAgIHRvIGluLWNs
YXNzIGluaXRpYWxpemF0aW9uIG9mIG1hbnkgbWVtYmVyIHZhcmlhYmxlcywgcmF0aGVyIHRoYW4g
YSBsb25nCisgICAgICAgIGxpc3Qgb2YgaW5pdGlhbGl6YXRpb25zIGluIHRoZSBjb25zdHJ1Y3Rv
ciB0aGF0IGdldHMgZmlkZGx5IHdpdGgKKyAgICAgICAgLVdyZW9yZGVyLgorCisgICAgICAgIFRo
ZXNlIGNsYXNzZXMgYXJlIG11Y2ggdG9vIGxhcmdlIGFuZCBjb3VsZCB1c2Ugc29tZSByZWRlc2ln
biwgdGhpcyBpcworICAgICAgICBvbmx5IGEgZmlyc3Qgc3RlcCB0b3dhcmQgdGhhdCBnb2FsLgor
CisgICAgICAgIFRoaXMgaXMgYSByZWZhY3RvcmluZywgaG9wZWZ1bGx5IHdlbGwgY292ZXJlZCBi
eSBvdXIgZXhpc3RpbmcgdGVzdHMhCisKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpncmVhdGVzdENvbW1vbkRpdmlz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6YnVzTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnRUb0ludGVybmFsUHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6R3N0
VmlkZW9GcmFtZUhvbGRlcjo6R3N0VmlkZW9GcmFtZUhvbGRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp+R3N0VmlkZW9GcmFtZUhvbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp3YWl0Rm9yQ1BVU3luYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6Omhhc0FscGhhQ2hhbm5lbCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjpmbGFncyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp0ZXh0dXJlSUQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3N0VmlkZW9GcmFtZUhvbGRlcjo6aGFzTWFwcGVkVGV4dHVyZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3N0VmlkZW9GcmFtZUhvbGRlcjo6dmlkZW9GcmFtZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp1cGRhdGVUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6OnBsYXRmb3JtTGF5ZXJCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppbml0
aWFsaXplRGVidWdDYXRlZ29yeSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpp
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnJlZ2lzdGVyTWVkaWFFbmdpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBhdXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtRHVyYXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbk1lZGlhVGlt
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmN1cnJlbnRNZWRpYVRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlbG9hZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1l
U2Vla2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjptYXhUaW1lTG9hZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Omhhc1Npbmds
ZVNlY3VyaXR5T3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6d291bGRUYWludE9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbnN1cmVB
dWRpb1NvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6YXVkaW9Tb3VyY2VQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9TdHJlYW1Qcm9w
ZXJ0aWVzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBs
YXliaW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U3luY09uQ2xvY2spOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzeW5jT25DbG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9m
VmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlm
eVBsYXllck9mQXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp0ZXh0Q2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNhbXBsZUNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNh
bXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZp
bGxUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUF1ZGlvU2luayk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvU2luayBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9z
aXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjplbmFibGVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnVwZGF0ZVRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNsZWFyVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQaXBlbGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVxdWVz
dEdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmVuc3VyZUdzdEdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9sdW1lIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWb2x1bWVD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
b2x1bWVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpuZXR3b3JrU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om11dGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxh
eWVyT2ZNdXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bXV0ZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVNYXhUaW1lTG9hZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRl
QnVmZmVyaW5nU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cHJvY2Vzc01wZWdUc1NlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZDb250
ZW50c0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6cHVyZ2VJbnZhbGlkQXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRWaWRlb1RyYWNrcyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFRleHRUcmFj
a3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cmlE
ZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmRvd25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlT2xk
RG93bmxvYWRGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWVkaWFMb2NhdGlvbkNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3Vw
cG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkUGFzc0NPUlNBY2Nl
c3NDaGVjayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNhblNhdmVNZWRpYURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJveHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2Vy
UmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnJlcGFpbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNhbmNlbFJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpyZXBhaW50Q2FuY2VsbGVkQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdTYW1wbGVDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1ByZXJvbGxD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmZsdXNoQ3VycmVudEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdGl2ZUltYWdlRm9yQ3Vy
cmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRWaWRlb1NvdXJjZU9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlVGV4dHVyZU1hcHBlckZsYWdzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNGdWxsc2NyZWVu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bW92aWVMb2FkVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZUdMQXBwU2luayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2lua0dMKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR0xWaWRlb1NpbmtDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFJlY3RhbmdsZVRvVmlkZW9TaW5rKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckhvbGVQdW5jaENsaWVudDo6R1N0cmVhbWVySG9sZVB1bmNoQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3Jl
YXRlSG9sZVB1bmNoVmlkZW9TaW5rKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6cHVzaE5leHRIb2xlUHVuY2hCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVWaWRlb1NpbmspOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRTdHJlYW1Wb2x1bWVF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZGVjb2RlZEZyYW1lQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpkcm9wcGVkRnJhbWVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZp
ZGVvRGVjb2RlZEJ5dGVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRh
Y2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNk
bUluc3RhbmNlRGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjphdHRlbXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2Nh
bEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlUHJvdGVjdGlvbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c0tleVN5c3Rl
bSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmV4dGVu
ZGVkU3VwcG9ydHNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6Om1lZGlhUGxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGlwZWxpbmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppc0xpdmVTdHJlYW0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb25m
aWd1cmVQbGF5U2luayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmdzdEdMQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmdzdEdMRGlzcGxheSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvU2luayBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmg6IFJlbW92ZWQuCisKIDIwMTktMTEt
MTkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgRWxl
bWVudFJ1bGVDb2xsZWN0b3IgdG8gU3R5bGUgbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UKaW5kZXggZjI0MGVjN2FmMTAzYmVjYWIzZTc3NDY5YWUzMDI2YTY5
NTE2OTA4ZC4uMmM5NDFmMGNiNGFlOGFhODYwZDVlNTcxNjViYTJiNTYzOGIwMjFhOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTQsNyArMTQsNiBAQCBpZiAo
RU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFj
dG9yeUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lckdTdHJlYW1lci5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRTaW5rR1N0cmVhbWVyLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRl
eCBkMjJhNGZlMmIxMTJiMzk0OGU1ZDY1ZTY4MjQyMTgzZDI2YWU5NmFhLi44NmUxY2FiMzA0ZTNh
OTBkY2YzZGNjNmE1ZTNjNTc4ODM2Mzg1ZTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMyw5ICszLDkgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNyBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogQ29weXJpZ2h0IChDKSAy
MDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNSwgMjAxNiBJZ2FsaWEgUy5MCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQ2FibGUgVGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4K
LSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDE5IElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAx
NSwgMjAxOSBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
OCwxNDQgKzI4LDM3MCBAQAogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQog
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9u
LmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyLmgiCiAjaW5jbHVkZSAiSFRU
UEhlYWRlck5hbWVzLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUg
IkltYWdlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclJlcXVlc3RJbnN0YWxsTWlzc2luZ1BsdWdpbnND
YWxsYmFjay5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiVGlt
ZVJhbmdlcy5oIgorI2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1lci5oIgogI2luY2x1ZGUgIldl
YktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorI2lu
Y2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiSW5iYW5kTWV0
YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlRleHRDb21iaW5lckdTdHJlYW1lci5o
IgorI2luY2x1ZGUgIlRleHRTaW5rR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9UcmFja1By
aXZhdGVHU3RyZWFtZXIuaCIKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhU3RyZWFtU291cmNl
LmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisjaW5jbHVkZSAiTWVkaWFT
b3VyY2UuaCIKKyNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorI2VuZGlm
CisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorI2luY2x1ZGUgIkNETUluc3RhbmNlLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCisjaW5jbHVkZSAiV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1l
ci5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkF1ZGlvU291
cmNlUHJvdmlkZXJHU3RyZWFtZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8Z2xpYi5oPgorI2lu
Y2x1ZGUgPGdzdC9hdWRpby9zdHJlYW12b2x1bWUuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAj
aW5jbHVkZSA8Z3N0L3BidXRpbHMvbWlzc2luZy1wbHVnaW5zLmg+CisjaW5jbHVkZSA8Z3N0L3Zp
ZGVvL2dzdHZpZGVvbWV0YS5oPgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvRmls
ZVN5c3RlbS5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dMaWJVdGlsaXRpZXMuaD4KKyNpbmNsdWRl
IDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJj
ZVByaW9yaXR5Lmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
TWVkaWFUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUg
PHd0Zi9XYWxsVGltZS5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dMaWJVdGlsaXRpZXMuaD4KLSNp
bmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9tU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgotCi0jaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLSNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oIgotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0jaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVH
U3RyZWFtZXIuaCIKLSNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgi
Ci0jaW5jbHVkZSAiVGV4dENvbWJpbmVyR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAiVGV4dFNpbmtH
U3RyZWFtZXIuaCIKLSNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2Vu
ZGlmCisjaW5jbHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgogCiAj
aWYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBVU0UoR1NUUkVBTUVSX01QRUdUUykKICNkZWZpbmUg
R1NUX1VTRV9VTlNUQUJMRV9BUEkKICNpbmNsdWRlIDxnc3QvbXBlZ3RzL21wZWd0cy5oPgogI3Vu
ZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKSAm
JiBVU0UoR1NUUkVBTUVSX01QRUdUUykKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyNkZWZp
bmUgQ1JFQVRFX1RSQUNLKHR5cGUsIFR5cGUpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgbV9oYXMjI1R5cGUgPSB0cnVlOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCF1c2VNZWRpYVNvdXJj
ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIFJlZlB0cjxUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMjVHJh
Y2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCBpLCBzdHJlYW0p
OyBcCisgICAgICAgICAgICBtXyMjdHlwZSMjVHJhY2tzLmFkZCh0cmFjay0+aWQoKSwgdHJhY2sp
OyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNU
cmFjaygqdHJhY2spOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAo
Z3N0X3N0cmVhbV9nZXRfc3RyZWFtX2ZsYWdzKHN0cmVhbS5nZXQoKSkgJiBHU1RfU1RSRUFNX0ZM
QUdfU0VMRUNUKSBcCisgICAgICAgICAgICAgICAgbV9jdXJyZW50IyNUeXBlIyNTdHJlYW1JZCA9
IFN0cmluZyhnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7IFwKKyAgICAg
ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICB9IEdfU1RNVF9FTkQKKworI2RlZmluZSBDTEVBUl9UUkFDS1ModHJh
Y2tzLCBtZXRob2QpIFwKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogdHJhY2tzLnZhbHVlcygpKVwK
KyAgICAgICAgbWV0aG9kKCp0cmFjayk7XAorICAgIHRyYWNrcy5jbGVhcigpOworI2Vsc2UKKyNk
ZWZpbmUgQ1JFQVRFX1RSQUNLKHR5cGUsIFR5cGUpIEdfU1RNVF9TVEFSVCB7IFwKKyAgICAgICAg
bV9oYXMjI1R5cGUjIyA9IHRydWU7ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IEdfU1RNVF9F
TkQKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpZiBVU0UoR1NUUkVBTUVSX0dM
KQorI2RlZmluZSBURVhUVVJFX0NPUElFUl9DT0xPUl9DT05WRVJUX0ZMQUcgVmlkZW9UZXh0dXJl
Q29waWVyR1N0cmVhbWVyOjpDb2xvckNvbnZlcnNpb246Ok5vQ29udmVydAorI2RlZmluZSBHU1Rf
R0xfQ0FQU19GT1JNQVQgInsgUkdCeCwgUkdCQSwgSTQyMCwgWTQ0NCwgWVYxMiwgWTQxQiwgWTQy
QiwgTlYxMiwgTlYyMSwgVlVZQSB9IgorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+
CisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpZiBVU0UoR0xYKQorI2luY2x1ZGUgIkdMQ29u
dGV4dEdMWC5oIgorI2luY2x1ZGUgPGdzdC9nbC94MTEvZ3N0Z2xkaXNwbGF5X3gxMS5oPgogI2Vu
ZGlmCi0jaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgogCi0jaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKLSNpbmNsdWRlICJNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUgIldlYktpdE1l
ZGlhU291cmNlR1N0cmVhbWVyLmgiCisjaWYgVVNFKEVHTCkKKyNpbmNsdWRlICJHTENvbnRleHRF
R0wuaCIKKyNpbmNsdWRlIDxnc3QvZ2wvZWdsL2dzdGdsZGlzcGxheV9lZ2wuaD4KICNlbmRpZgog
Ci0jaWYgRU5BQkxFKFdFQl9BVURJTykKLSNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyR1N0
cmVhbWVyLmgiCisjaWYgUExBVEZPUk0oWDExKQorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheVgx
MS5oIgogI2VuZGlmCiAKLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X21lZGlhX3Bs
YXllcl9kZWJ1Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfcGxheWVy
X2RlYnVnCisjaWYgUExBVEZPUk0oV0FZTEFORCkKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlX
YXlsYW5kLmgiCisjZW5kaWYKKworI2lmIFVTRShXUEVfUkVOREVSRVIpCisjaW5jbHVkZSAiUGxh
dGZvcm1EaXNwbGF5TGliV1BFLmgiCisjZW5kaWYKKworLy8gZ3N0Z2xhcGkuaCBtYXkgaW5jbHVk
ZSBlZ2xwbGF0Zm9ybS5oIGFuZCBpdCBpbmNsdWRlcyBYLmgsIHdoaWNoCisvLyBkZWZpbmVzIE5v
bmUsIGJyZWFraW5nIE1lZGlhUGxheWVyOjpOb25lIGVudW0KKyNpZiBQTEFURk9STShYMTEpICYm
IEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAorI3VuZGVmIE5vbmUKKyNlbmRpZiAvLyBQTEFURk9S
TShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAorI2luY2x1ZGUgIlZpZGVvVGV4dHVy
ZUNvcGllckdTdHJlYW1lci5oIgorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCisKKyNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZUdMLmgiCisjaW5j
bHVkZSAiQml0bWFwVGV4dHVyZVBvb2wuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQ29udGV4
dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
ci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKyNpZiBV
U0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSA8Y2Fp
cm8tZ2wuaD4KKyNlbmRpZgorI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIAorR1NU
X0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcpOworI2RlZmluZSBHU1Rf
Q0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCi1zdGF0aWMgdm9pZCBidXNNZXNzYWdlQ2FsbGJh
Y2soR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKiBwbGF5ZXIpCisjaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCitzdGF0aWMgY29uc3Qg
RmxvYXRTaXplIHNfaG9sZVB1bmNoRGVmYXVsdEZyYW1lU2l6ZSgxMjgwLCA3MjApOworI2VuZGlm
CisKK3N0YXRpYyBpbnQgZ3JlYXRlc3RDb21tb25EaXZpc29yKGludCBhLCBpbnQgYikKIHsKLSAg
ICBwbGF5ZXItPmhhbmRsZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgd2hpbGUgKGIpIHsKKyAgICAg
ICAgaW50IHRlbXAgPSBhOworICAgICAgICBhID0gYjsKKyAgICAgICAgYiA9IHRlbXAgJSBiOwor
ICAgIH0KKworICAgIHJldHVybiBBQlMoYSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXNDYWxsYmFjayhNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIqIHBsYXllciwgR09iamVjdCogb2JqZWN0KQorc3RhdGljIHZvaWQgYnVz
TWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQogewotICAgIHBsYXllci0+c2V0QXVkaW9TdHJlYW1Q
cm9wZXJ0aWVzKG9iamVjdCk7CisgICAgcGxheWVyLT5oYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOwog
fQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9TdHJlYW1Qcm9w
ZXJ0aWVzKEdPYmplY3QqIG9iamVjdCkKK3N0YXRpYyB2b2lkIGNvbnZlcnRUb0ludGVybmFsUHJv
dG9jb2woVVJMJiB1cmwpCiB7Ci0gICAgaWYgKGdfc3RyY21wMChHX09CSkVDVF9UWVBFX05BTUUo
b2JqZWN0KSwgIkdzdFB1bHNlU2luayIpKQorICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24o
MSwgMTIsIDApKQogICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBjaGFyKiByb2xlID0gbV9w
bGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVySXNWaWRlbygpID8gInZpZGVvIiA6ICJtdXNpYyI7
Ci0gICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldygic3RyZWFt
LXByb3BlcnRpZXMiLCAibWVkaWEucm9sZSIsIEdfVFlQRV9TVFJJTkcsIHJvbGUsIG51bGxwdHIp
OwotICAgIGdfb2JqZWN0X3NldChvYmplY3QsICJzdHJlYW0tcHJvcGVydGllcyIsIHN0cnVjdHVy
ZSwgbnVsbHB0cik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlKHN0cnVjdHVyZSk7Ci0gICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gZWxlbWVudE5hbWUoZ3N0X2VsZW1lbnRfZ2V0X25hbWUoR1NUX0VMRU1F
TlQob2JqZWN0KSkpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldCBtZWRp
YS5yb2xlIGFzICVzIGF0ICVzIiwgcm9sZSwgZWxlbWVudE5hbWUuZ2V0KCkpOworICAgIGlmICh1
cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IHVybC5wcm90b2NvbElzQmxvYigpKQorICAg
ICAgICB1cmwuc2V0UHJvdG9jb2woIndlYmtpdCsiICsgdXJsLnByb3RvY29sKCkpOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRp
YUVuZ2luZVJlZ2lzdHJhciByZWdpc3RyYXIpCi17Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6aW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKTsKLSAgICBpZiAoaXNBdmFpbGFi
bGUoKSkgewotICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXllcikgeyByZXR1
cm4gbWFrZVVuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+KHBsYXllcik7IH0sCi0g
ICAgICAgICAgICBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlLCBudWxscHRyLCBudWxs
cHRyLCBudWxscHRyLCBzdXBwb3J0c0tleVN5c3RlbSk7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVS
X0dMKQorY2xhc3MgR3N0VmlkZW9GcmFtZUhvbGRlciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllckJ1ZmZlcjo6VW5tYW5hZ2VkQnVmZmVyRGF0YUhvbGRlciB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgR3N0VmlkZW9GcmFtZUhvbGRlcihHc3RTYW1wbGUqIHNhbXBsZSwgT3B0aW9u
YWw8R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm0+IHZpZGVvRGVjb2RlclBsYXRmb3JtLCBUZXh0dXJl
TWFwcGVyR0w6OkZsYWdzIGZsYWdzLCBib29sIGdzdEdMRW5hYmxlZCkKKyAgICAgICAgOiBtX3Zp
ZGVvRGVjb2RlclBsYXRmb3JtKHZpZGVvRGVjb2RlclBsYXRmb3JtKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoR1NUX0lTX1NBTVBMRShzYW1wbGUpKTsKKworICAgICAgICBHc3RWaWRl
b0luZm8gdmlkZW9JbmZvOworICAgICAgICBpZiAoVU5MSUtFTFkoIWdldFNhbXBsZVZpZGVvSW5m
byhzYW1wbGUsIHZpZGVvSW5mbykpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1f
c2l6ZSA9IEludFNpemUoR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyksIEdTVF9WSURF
T19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKSk7CisgICAgICAgIG1faGFzQWxwaGFDaGFubmVsID0g
R1NUX1ZJREVPX0lORk9fSEFTX0FMUEhBKCZ2aWRlb0luZm8pOworICAgICAgICBtX2J1ZmZlciA9
IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIUdT
VF9JU19CVUZGRVIobV9idWZmZXIpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworI2lmIFVTRShH
U1RSRUFNRVJfR0wpCisgICAgICAgIG1fZmxhZ3MgPSBmbGFncyB8IChtX2hhc0FscGhhQ2hhbm5l
bCA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwKTsKKworICAgICAgICBpZiAoZ3N0
R0xFbmFibGVkKSB7CisgICAgICAgICAgICBtX2lzTWFwcGVkID0gZ3N0X3ZpZGVvX2ZyYW1lX21h
cCgmbV92aWRlb0ZyYW1lLCAmdmlkZW9JbmZvLCBtX2J1ZmZlciwgc3RhdGljX2Nhc3Q8R3N0TWFw
RmxhZ3M+KEdTVF9NQVBfUkVBRCB8IEdTVF9NQVBfR0wpKTsKKyAgICAgICAgICAgIGlmIChtX2lz
TWFwcGVkKSB7CisgICAgICAgICAgICAgICAgbV90ZXh0dXJlSUQgPSAqcmVpbnRlcnByZXRfY2Fz
dDxHTHVpbnQqPihtX3ZpZGVvRnJhbWUuZGF0YVswXSk7CisgICAgICAgICAgICAgICAgbV9oYXNN
YXBwZWRUZXh0dXJlcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorI2Vs
c2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGdz
dEdMRW5hYmxlZCk7CisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKKworICAgICAgICB7Cisg
ICAgICAgICAgICBtX3RleHR1cmVJRCA9IDA7CisgICAgICAgICAgICBtX2lzTWFwcGVkID0gZ3N0
X3ZpZGVvX2ZyYW1lX21hcCgmbV92aWRlb0ZyYW1lLCAmdmlkZW9JbmZvLCBtX2J1ZmZlciwgR1NU
X01BUF9SRUFEKTsKKyAgICAgICAgICAgIGlmIChtX2lzTWFwcGVkKSB7CisgICAgICAgICAgICAg
ICAgLy8gUmlnaHQgbm93IHRoZSBUZXh0dXJlTWFwcGVyIG9ubHkgc3VwcG9ydHMgY2hyb21hcyB3
aXRoIG9uZSBwbGFuZQorICAgICAgICAgICAgICAgIEFTU0VSVChHU1RfVklERU9fSU5GT19OX1BM
QU5FUygmdmlkZW9JbmZvKSA9PSAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0K
LX0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmlzQXZhaWxhYmxlKCkKLXsK
LSAgICBpZiAoIWluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2aXJ0dWFsIH5Hc3RWaWRlb0ZyYW1lSG9sZGVy
KCkKKyAgICB7CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9pc01hcHBlZCkpCisgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0b3J5PiBmYWN0b3J5ID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgicGxheWJpbiIpKTsKLSAgICByZXR1cm4g
ZmFjdG9yeTsKKyAgICAgICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwKCZtX3ZpZGVvRnJhbWUpOwor
ICAgIH0KKworI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JD
UFVTeW5jKCkKKyAgICB7CisgICAgICAgIEdzdEdMU3luY01ldGEqIG1ldGEgPSBnc3RfYnVmZmVy
X2dldF9nbF9zeW5jX21ldGEobV9idWZmZXIpOworICAgICAgICBpZiAobWV0YSkgeworICAgICAg
ICAgICAgR3N0TWVtb3J5KiBtZW0gPSBnc3RfYnVmZmVyX3BlZWtfbWVtb3J5KG1fYnVmZmVyLCAw
KTsKKyAgICAgICAgICAgIEdzdEdMQ29udGV4dCogY29udGV4dCA9ICgoR3N0R0xCYXNlTWVtb3J5
KiltZW0pLT5jb250ZXh0OworICAgICAgICAgICAgZ3N0X2dsX3N5bmNfbWV0YV93YWl0X2NwdSht
ZXRhLCBjb250ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
X0dMKQorCisgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQorICAgIGJvb2wgaGFzQWxwaGFDaGFubmVsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYUNo
YW5uZWw7IH0KKyAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1
cm4gbV9mbGFnczsgfQorICAgIEdMdWludCB0ZXh0dXJlSUQoKSBjb25zdCB7IHJldHVybiBtX3Rl
eHR1cmVJRDsgfQorICAgIGJvb2wgaGFzTWFwcGVkVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBt
X2hhc01hcHBlZFRleHR1cmVzOyB9CisgICAgY29uc3QgR3N0VmlkZW9GcmFtZSYgdmlkZW9GcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9GcmFtZTsgfQorCisgICAgdm9pZCB1cGRhdGVUZXh0
dXJlKEJpdG1hcFRleHR1cmVHTCYgdGV4dHVyZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV90
ZXh0dXJlSUQpOworICAgICAgICBHc3RWaWRlb0dMVGV4dHVyZVVwbG9hZE1ldGEqIG1ldGE7Cisg
ICAgICAgIGlmIChtX2J1ZmZlciAmJiAobWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX2dsX3Rl
eHR1cmVfdXBsb2FkX21ldGEobV9idWZmZXIpKSkgeworICAgICAgICAgICAgaWYgKG1ldGEtPm5f
dGV4dHVyZXMgPT0gMSkgeyAvLyBCUkd4ICYgQkdSQSBmb3JtYXRzIHVzZSBvbmx5IG9uZSB0ZXh0
dXJlLgorICAgICAgICAgICAgICAgIGd1aW50IGlkc1s0XSA9IHsgdGV4dHVyZS5pZCgpLCAwLCAw
LCAwIH07CisKKyAgICAgICAgICAgICAgICBpZiAoZ3N0X3ZpZGVvX2dsX3RleHR1cmVfdXBsb2Fk
X21ldGFfdXBsb2FkKG1ldGEsIGlkcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9pc01hcHBlZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpbnQgc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BM
QU5FX1NUUklERSgmbV92aWRlb0ZyYW1lLCAwKTsKKyAgICAgICAgY29uc3Qgdm9pZCogc3JjRGF0
YSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9EQVRBKCZtX3ZpZGVvRnJhbWUsIDApOworCisgICAg
ICAgIGlmICghc3JjRGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0ZXh0dXJl
LnVwZGF0ZUNvbnRlbnRzKHNyY0RhdGEsIFdlYkNvcmU6OkludFJlY3QoMCwgMCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSksIFdlYkNvcmU6OkludFBvaW50KDAsIDApLCBzdHJpZGUp
OworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ckJ1ZmZlcj4gcGxhdGZvcm1MYXllckJ1ZmZlcigpCisgICAgeworICAgICAgICBpZiAoIW1faGFz
TWFwcGVkVGV4dHVyZXMpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICB1
c2luZyBCdWZmZXIgPSBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcjsKKworICAgICAg
ICBpZiAoKEdTVF9WSURFT19JTkZPX0lTX1JHQigmbV92aWRlb0ZyYW1lLmluZm8pICYmIEdTVF9W
SURFT19JTkZPX05fUExBTkVTKCZtX3ZpZGVvRnJhbWUuaW5mbykgPT0gMSkpCisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxCdWZmZXI+KEJ1ZmZlcjo6VGV4dHVyZVZhcmlhbnQgeyBCdWZm
ZXI6OlJHQlRleHR1cmUgeyAqc3RhdGljX2Nhc3Q8R0x1aW50Kj4obV92aWRlb0ZyYW1lLmRhdGFb
MF0pIH0gfSwgbV9zaXplLCBtX2ZsYWdzLCBHTF9SR0JBKTsKKworICAgICAgICBpZiAoR1NUX1ZJ
REVPX0lORk9fSVNfWVVWKCZtX3ZpZGVvRnJhbWUuaW5mbykpIHsKKyAgICAgICAgICAgIGlmIChH
U1RfVklERU9fSU5GT19OX0NPTVBPTkVOVFMoJm1fdmlkZW9GcmFtZS5pbmZvKSA8IDMgfHwgR1NU
X1ZJREVPX0lORk9fTl9QTEFORVMoJm1fdmlkZW9GcmFtZS5pbmZvKSA+IDMpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIGlmIChtX3ZpZGVvRGVjb2RlclBs
YXRmb3JtICYmICptX3ZpZGVvRGVjb2RlclBsYXRmb3JtID09IEdzdFZpZGVvRGVjb2RlclBsYXRm
b3JtOjpJbXhWUFUpIHsKKyAgICAgICAgICAgICAgICAvLyBJTVggVlBVIGRlY29kZXIgZGVjb2Rl
cyBZVVYgZGF0YSBvbmx5IGludG8gdGhlIFkgdGV4dHVyZSBmcm9tIHdoaWNoIHRoZSBzYW1wbGVy
CisgICAgICAgICAgICAgICAgLy8gdGhlbiBkaXJlY3RseSBwcm9kdWNlcyBSR0JBIGRhdGEuIFRl
eHR1cmVzIGZvciBvdGhlciBwbGFuZXMgYXJlbid0IHVzZWQsIGJ1dAorICAgICAgICAgICAgICAg
IC8vIHRoYXQncyBkZWNvZGVyJ3MgcHJvYmxlbS4gV2UgaGF2ZSB0byB0cmVhdCB0aGF0IFkgdGV4
dHVyZSBhcyBoYXZpbmcgUkdCQSBkYXRhLgorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPEJ1ZmZlcj4oQnVmZmVyOjpUZXh0dXJlVmFyaWFudCB7IEJ1ZmZlcjo6UkdCVGV4dHVyZSB7
ICpzdGF0aWNfY2FzdDxHTHVpbnQqPihtX3ZpZGVvRnJhbWUuZGF0YVswXSkgfSB9LCBtX3NpemUs
IG1fZmxhZ3MsIEdMX1JHQkEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZlBsYW5lcyA9IEdTVF9WSURFT19JTkZPX05fUExBTkVTKCZtX3ZpZGVvRnJhbWUu
aW5mbyk7CisgICAgICAgICAgICBzdGQ6OmFycmF5PEdMdWludCwgMz4gcGxhbmVzOworICAgICAg
ICAgICAgc3RkOjphcnJheTx1bnNpZ25lZCwgMz4geXV2UGxhbmU7CisgICAgICAgICAgICBzdGQ6
OmFycmF5PHVuc2lnbmVkLCAzPiB5dXZQbGFuZU9mZnNldDsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlBsYW5lczsgKytpKQorICAgICAgICAgICAgICAgIHBs
YW5lc1tpXSA9ICpzdGF0aWNfY2FzdDxHTHVpbnQqPihtX3ZpZGVvRnJhbWUuZGF0YVtpXSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAg
ICAgICAgeXV2UGxhbmVbaV0gPSBHU1RfVklERU9fSU5GT19DT01QX1BMQU5FKCZtX3ZpZGVvRnJh
bWUuaW5mbywgaSk7CisgICAgICAgICAgICAgICAgeXV2UGxhbmVPZmZzZXRbaV0gPSBHU1RfVklE
RU9fSU5GT19DT01QX1BPRkZTRVQoJm1fdmlkZW9GcmFtZS5pbmZvLCBpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3RkOjphcnJheTxHTGZsb2F0LCA5PiB5dXZUb1JnYjsKKyAgICAg
ICAgICAgIGlmIChnc3RfdmlkZW9fY29sb3JpbWV0cnlfbWF0Y2hlcygmR1NUX1ZJREVPX0lORk9f
Q09MT1JJTUVUUlkoJm1fdmlkZW9GcmFtZS5pbmZvKSwgR1NUX1ZJREVPX0NPTE9SSU1FVFJZX0JU
NzA5KSkgeworICAgICAgICAgICAgICAgIHl1dlRvUmdiID0geworICAgICAgICAgICAgICAgICAg
ICAxLjE2NGYsICAwLjBmLCAgICAxLjc4N2YsCisgICAgICAgICAgICAgICAgICAgIDEuMTY0Ziwg
LTAuMjEzZiwgLTAuNTMxZiwKKyAgICAgICAgICAgICAgICAgICAgMS4xNjRmLCAgMi4xMTJmLCAg
MC4wZgorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIERlZmF1bHQgdG8gYnQ2MDEuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3VyIGFz
IEdTdHJlYW1lcidzIGdsY29sb3Jjb252ZXJ0IGVsZW1lbnQuCisgICAgICAgICAgICAgICAgeXV2
VG9SZ2IgPSB7CisgICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgIDAuMGYsICAgIDEuNTk2ZiwK
KyAgICAgICAgICAgICAgICAgICAgMS4xNjRmLCAtMC4zOTFmLCAtMC44MTNmLAorICAgICAgICAg
ICAgICAgICAgICAxLjE2NGYsICAyLjAxOGYsICAwLjBmCisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8QnVmZmVyPiggQnVm
ZmVyOjpUZXh0dXJlVmFyaWFudCB7IEJ1ZmZlcjo6WVVWVGV4dHVyZSB7IG51bWJlck9mUGxhbmVz
LCBwbGFuZXMsIHl1dlBsYW5lLCB5dXZQbGFuZU9mZnNldCwgeXV2VG9SZ2IgfSB9LCBtX3NpemUs
IG1fZmxhZ3MsIEdMX1JHQkEpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCitwcml2YXRlOgorICAgIEdzdEJ1ZmZlciogbV9idWZmZXI7CisgICAgR3N0Vmlk
ZW9GcmFtZSBtX3ZpZGVvRnJhbWUgeyB9OworICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wg
bV9oYXNBbHBoYUNoYW5uZWw7CisgICAgT3B0aW9uYWw8R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm0+
IG1fdmlkZW9EZWNvZGVyUGxhdGZvcm07CisgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX2Zs
YWdzIHsgfTsKKyAgICBHTHVpbnQgbV90ZXh0dXJlSUQgeyAwIH07CisgICAgYm9vbCBtX2lzTWFw
cGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzTWFwcGVkVGV4dHVyZXMgeyBmYWxzZSB9Owor
fTsKKyNlbmRpZgorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aW5pdGlhbGl6
ZURlYnVnQ2F0ZWdvcnkoKQoreworICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9t
ZWRpYV9wbGF5ZXJfZGVidWcsICJ3ZWJraXRtZWRpYXBsYXllciIsIDAsICJXZWJLaXQgbWVkaWEg
cGxheWVyIik7CiB9CiAKIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpCi0gICAgOiBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlKHBsYXllcikKLSAgICAsIG1fYnVmZmVyaW5nKGZhbHNlKQotICAg
ICwgbV9idWZmZXJpbmdQZXJjZW50YWdlKDApCisgICAgOiBtX25vdGlmaWVyKE1haW5UaHJlYWRO
b3RpZmllcjxNYWluVGhyZWFkTm90aWZpY2F0aW9uPjo6Y3JlYXRlKCkpCisgICAgLCBtX3BsYXll
cihwbGF5ZXIpCiAgICAgLCBtX2NhY2hlZFBvc2l0aW9uKE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KSkKICAgICAsIG1fY2FjaGVkRHVyYXRpb24oTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQotICAg
ICwgbV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uKGZhbHNlKQotICAgICwg
bV9jaGFuZ2luZ1JhdGUoZmFsc2UpCi0gICAgLCBtX2Rvd25sb2FkRmluaXNoZWQoZmFsc2UpCi0g
ICAgLCBtX2Vycm9yT2NjdXJlZChmYWxzZSkKLSAgICAsIG1faXNFbmRSZWFjaGVkKGZhbHNlKQot
ICAgICwgbV9pc1N0cmVhbWluZyhmYWxzZSkKLSAgICAsIG1fcGF1c2VkKHRydWUpCi0gICAgLCBt
X3BsYXliYWNrUmF0ZSgxKQotICAgICwgbV9yZXF1ZXN0ZWRTdGF0ZShHU1RfU1RBVEVfVk9JRF9Q
RU5ESU5HKQotICAgICwgbV9yZXNldFBpcGVsaW5lKGZhbHNlKQotICAgICwgbV9zZWVraW5nKGZh
bHNlKQotICAgICwgbV9zZWVrSXNQZW5kaW5nKGZhbHNlKQogICAgICwgbV9zZWVrVGltZShNZWRp
YVRpbWU6OmludmFsaWRUaW1lKCkpCi0gICAgLCBtX3NvdXJjZShudWxscHRyKQotICAgICwgbV92
b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAgLCBtX21lZGlhTG9jYXRpb25zKG51
bGxwdHIpCi0gICAgLCBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXgoMCkKLSAgICAsIG1fcGxh
eWJhY2tSYXRlUGF1c2UoZmFsc2UpCiAgICAgLCBtX3RpbWVPZk92ZXJsYXBwaW5nU2VlayhNZWRp
YVRpbWU6OmludmFsaWRUaW1lKCkpCi0gICAgLCBtX2xhc3RQbGF5YmFja1JhdGUoMSkKICAgICAs
IG1fZmlsbFRpbWVyKCp0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpmaWxsVGlt
ZXJGaXJlZCkKICAgICAsIG1fbWF4VGltZUxvYWRlZChNZWRpYVRpbWU6Onplcm9UaW1lKCkpCiAg
ICAgLCBtX3ByZWxvYWQocGxheWVyLT5wcmVsb2FkKCkpCi0gICAgLCBtX2RlbGF5aW5nTG9hZChm
YWxzZSkKICAgICAsIG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyhNZWRp
YVRpbWU6Onplcm9UaW1lKCkpCi0gICAgLCBtX2hhc1ZpZGVvKGZhbHNlKQotICAgICwgbV9oYXNB
dWRpbyhmYWxzZSkKLSAgICAsIG1fcmVhZHlUaW1lckhhbmRsZXIoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVRpbWVyRmlyZWQpCi0gICAg
LCBtX3RvdGFsQnl0ZXMoMCkKLSAgICAsIG1fcHJlc2VydmVzUGl0Y2goZmFsc2UpCisgICAgLCBt
X2RyYXdUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnJlcGFpbnQpCisgICAgLCBtX3JlYWR5VGltZXJIYW5kbGVyKFJ1bkxvb3A6Om1haW4o
KSwgdGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlUaW1lckZpcmVkCisp
CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorI2lmIFVTRShOSUNPU0lBKQorICAgICwgbV9u
aWNvc2lhTGF5ZXIoTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKKyNlbHNlCisg
ICAgLCBtX3BsYXRmb3JtTGF5ZXJQcm94eShhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eSgpKSkKKyNlbmRpZgorI2VuZGlmICAgICAgCiB7CiAjaWYgVVNFKEdMSUIp
CiAgICAgbV9yZWFkeVRpbWVySGFuZGxlci5zZXRQcmlvcml0eShHX1BSSU9SSVRZX0RFRkFVTFRf
SURMRSk7CkBAIC0yMjIsNTQgKzQ0OCw2NCBAQCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKQogICAgICAgICBnc3RfYnVzX3NldF9zeW5j
X2hhbmRsZXIoYnVzLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKICAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fcGlwZWxpbmUuZ2V0KCksIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwogICAgIH0K
LX0KIAotc3RhdGljIHZvaWQgY29udmVydFRvSW50ZXJuYWxQcm90b2NvbChVUkwmIHVybCkKLXsK
LSAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDEyLCAwKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmICh1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IHVybC5wcm90b2NvbElz
QmxvYigpKQotICAgICAgICB1cmwuc2V0UHJvdG9jb2woIndlYmtpdCsiICsgdXJsLnByb3RvY29s
KCkpOwotfQorI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgaWYgKG1fdmlkZW9EZWNvZGVyUGxh
dGZvcm0gPT0gR3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OlZpZGVvNExpbnV4KQorICAgICAgICBm
bHVzaEN1cnJlbnRCdWZmZXIoKTsKKyNlbmRpZgorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkg
JiYgVVNFKE5JQ09TSUEpCisgICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsK
KyNlbmRpZgogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UGxheWJpblVS
TChjb25zdCBVUkwmIHVybCkKLXsKLSAgICAvLyBDbGVhbiBvdXQgZXZlcnl0aGluZyBhZnRlciBm
aWxlOi8vIHVybCBwYXRoLgotICAgIFN0cmluZyBjbGVhblVSTFN0cmluZyh1cmwuc3RyaW5nKCkp
OwotICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgY2xlYW5VUkxTdHJpbmcgPSBj
bGVhblVSTFN0cmluZy5zdWJzdHJpbmcoMCwgdXJsLnBhdGhFbmQoKSk7CisgICAgbV9ub3RpZmll
ci0+aW52YWxpZGF0ZSgpOwogCi0gICAgbV91cmwgPSBVUkwoVVJMKCksIGNsZWFuVVJMU3RyaW5n
KTsKLSAgICBjb252ZXJ0VG9JbnRlcm5hbFByb3RvY29sKG1fdXJsKTsKLSAgICBHU1RfSU5GT19P
QkpFQ1QocGlwZWxpbmUoKSwgIkxvYWQgJXMiLCBtX3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInVyaSIsIG1fdXJsLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOwotfQorICAgIGlmIChtX3ZpZGVvU2luaykgewor
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV92aWRlb1Npbmsu
Z2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMp
OworI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgICAgIGlmIChHU1RfSVNfQklOKG1fdmlkZW9T
aW5rLmdldCgpKSkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBhcHBzaW5rID0g
YWRvcHRHUmVmKGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJTl9DQVNUKG1fdmlkZW9TaW5rLmdl
dCgpKSwgIndlYmtpdC1nbC12aWRlby1zaW5rIikpOworICAgICAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKGFwcHNpbmsuZ2V0KCksIHRoaXMpOworICAgICAgICB9
CisjZW5kaWYKKyAgICB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2Fk
KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQotewotICAgIGxvYWRGdWxsKHVybFN0cmluZywgU3Ry
aW5nKCkpOworICAgIGlmIChtX3ZvbHVtZUVsZW1lbnQpCisgICAgICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworCisgICAgLy8gVGhpcyB3
aWxsIHJlbGVhc2UgdGhlIEdTdHJlYW1lciB0aHJlYWQgZnJvbSBtX2RyYXdDb25kaXRpb24gaW4g
bm9uIEFDIG1vZGUgaW4gY2FzZSB0aGVyZSdzIGFuIG9uZ29pbmcgdHJpZ2dlclJlcGFpbnQgY2Fs
bAorICAgIC8vIHdhaXRpbmcgdGhlcmUsIGFuZCBlbnN1cmUgdGhhdCBhbnkgdHJpZ2dlclJlcGFp
bnQgY2FsbCByZWFjaGluZyB0aGUgbG9jayB3b24ndCB3YWl0IG9uIG1fZHJhd0NvbmRpdGlvbi4K
KyAgICBjYW5jZWxSZXBhaW50KHRydWUpOworCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkK
KyAgICBtX2NkbUF0dGFjaG1lbnRTZW1hcGhvcmUuc2lnbmFsKCk7CisjZW5kaWYKKworICAgIC8v
IFRoZSBjaGFuZ2UgdG8gR1NUX1NUQVRFX05VTEwgc3RhdGUgaXMgYWx3YXlzIHN5bmNocm9ub3Vz
LiBTbyBhZnRlciB0aGlzIGdldHMgZXhlY3V0ZWQgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeQorICAg
IC8vIGFib3V0IGhhbmRsZXJzIHJ1bm5pbmcgaW4gdGhlIEdTdHJlYW1lciB0aHJlYWQuCisgICAg
aWYgKG1fcGlwZWxpbmUpCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5l
LmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisKKyAgICBtX3BsYXllciA9IG51bGxwdHI7CiB9CiAK
LXN0YXRpYyB2b2lkIHNldFN5bmNPbkNsb2NrKEdzdEVsZW1lbnQgKmVsZW1lbnQsIGJvb2wgc3lu
YykKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppc0F2YWlsYWJsZSgpCiB7Ci0g
ICAgaWYgKCFHU1RfSVNfQklOKGVsZW1lbnQpKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldChlbGVt
ZW50LCAic3luYyIsIHN5bmMsIE5VTEwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
ICghaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgR3N0SXRlcmF0b3IqIGl0ID0gZ3N0X2Jpbl9pdGVyYXRl
X3NpbmtzKEdTVF9CSU4oZWxlbWVudCkpOwotICAgIHdoaWxlIChnc3RfaXRlcmF0b3JfZm9yZWFj
aChpdCwgKEdzdEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uKShbXShjb25zdCBHVmFsdWUqIGl0ZW0s
IHZvaWQqIHN5bmNQdHIpIHsKLSAgICAgICAgYm9vbCogc3luYyA9IHN0YXRpY19jYXN0PGJvb2wq
PihzeW5jUHRyKTsKLSAgICAgICAgc2V0U3luY09uQ2xvY2soR1NUX0VMRU1FTlQoZ192YWx1ZV9n
ZXRfb2JqZWN0KGl0ZW0pKSwgKnN5bmMpOwotICAgIH0pLCAmc3luYykgPT0gR1NUX0lURVJBVE9S
X1JFU1lOQykKLSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdCk7Ci0gICAgZ3N0X2l0ZXJh
dG9yX2ZyZWUoaXQpOworICAgIC8vIEZJWE1FOiBUaGlzIGhhcyBub3QgYmVlbiB1cGRhdGVkIGZv
ciB0aGUgcGxheWJpbjMgc3dpdGNoLgorICAgIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+IGZh
Y3RvcnkgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kKCJwbGF5YmluIikpOwor
ICAgIHJldHVybiBmYWN0b3J5OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c3luY09uQ2xvY2soYm9vbCBzeW5jKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQog
ewotICAgIHNldFN5bmNPbkNsb2NrKHZpZGVvU2luaygpLCBzeW5jKTsKLSAgICBzZXRTeW5jT25D
bG9jayhhdWRpb1NpbmsoKSwgc3luYyk7CisgICAgaW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKTsK
KworICAgIGlmIChpc0F2YWlsYWJsZSgpKSB7CisgICAgICAgIHJlZ2lzdHJhcihbXShNZWRpYVBs
YXllciogcGxheWVyKSB7IHJldHVybiBtYWtlVW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcj4ocGxheWVyKTsgfSwKKyAgICAgICAgICAgIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0
c1R5cGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIHN1cHBvcnRzS2V5U3lzdGVtKTsKKyAg
ICB9CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVsbChjb25z
dCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nJiBwaXBlbGluZU5hbWUpCkBAIC0zMTQs
NiArNTUwLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVsbChj
b25zdCBTdHJpbmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgICAgIGNvbW1pdExvYWQo
KTsKIH0KIAordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcpCit7CisgICAgbG9hZEZ1bGwodXJsU3RyaW5nLCBTdHJpbmcoKSk7Cit9
CisKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmxvYWQoY29uc3QgU3RyaW5nJiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KikKIHsK
QEAgLTM1Myw4OCArNTk0LDEzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
b21taXRMb2FkKCkKICAgICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAotTWVkaWFUaW1lIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJhY2tQb3NpdGlvbigpIGNvbnN0Cit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsTG9hZCgpCiB7Ci0gICAgR1NUX1RSQUNFX09C
SkVDVChwaXBlbGluZSgpLCAiaXNFbmRSZWFjaGVkOiAlcywgc2Vla2luZzogJXMsIHNlZWtUaW1l
OiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2lzRW5kUmVhY2hlZCksIGJvb2xGb3JQcmludGluZyht
X3NlZWtpbmcpLCBtX3NlZWtUaW1lLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYg
KG1faXNFbmRSZWFjaGVkICYmIG1fc2Vla2luZykKLSAgICAgICAgcmV0dXJuIG1fc2Vla1RpbWU7
CisgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVkaWFQbGF5ZXI6OkxvYWRpbmcgfHwgbV9uZXR3
b3JrU3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkxvYWRlZCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gVGhpcyBjb25zdGFudCBzaG91bGQgcmVtYWluIGxvd2VyIHRoYW4gSFRNTE1lZGlhRWxlbWVu
dCdzIG1heFRpbWV1cGRhdGVFdmVudEZyZXF1ZW5jeS4KLSAgICBzdGF0aWMgY29uc3QgU2Vjb25k
cyBwb3NpdGlvbkNhY2hlVGhyZXNob2xkID0gMjAwX21zOwotICAgIFNlY29uZHMgbm93ID0gV1RG
OjpXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKTsKLSAgICBpZiAobV9sYXN0UXVl
cnlUaW1lICYmIChub3cgLSBtX2xhc3RRdWVyeVRpbWUudmFsdWUoKSkgPCBwb3NpdGlvbkNhY2hl
VGhyZXNob2xkICYmIG1fY2FjaGVkUG9zaXRpb24uaXNWYWxpZCgpKSB7Ci0gICAgICAgIEdTVF9U
UkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgIlJldHVybmluZyBjYWNoZWQgcG9zaXRpb246ICVzIiwg
bV9jYWNoZWRQb3NpdGlvbi50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1
cm4gbV9jYWNoZWRQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBtX2xhc3RRdWVyeVRpbWUgPSBub3c7
Ci0KLSAgICAvLyBQb3NpdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiBubyBhc3luYyBzdGF0ZSBj
aGFuZ2UgaXMgZ29pbmcgb24gYW5kIHRoZSBzdGF0ZSBpcyBlaXRoZXIgcGF1c2VkIG9yIHBsYXlp
bmcuCi0gICAgZ2ludDY0IHBvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICBHc3RR
dWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfVElNRSk7Ci0g
ICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5KSkKLSAgICAg
ICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwotICAgIGdz
dF9xdWVyeV91bnJlZihxdWVyeSk7Ci0KLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCks
ICJQb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hl
ZFNlZWtQb3NpdGlvbjogJXMiLCBHU1RfVElNRV9BUkdTKHBvc2l0aW9uKSwgYm9vbEZvclByaW50
aW5nKG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbikpOwotCi0gICAgTWVk
aWFUaW1lIHBsYXliYWNrUG9zaXRpb24gPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0gICAgR3N0
Q2xvY2tUaW1lIGdzdHJlYW1lclBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPihw
b3NpdGlvbik7Ci0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEKGdzdHJlYW1lclBvc2l0
aW9uKSkKLSAgICAgICAgcGxheWJhY2tQb3NpdGlvbiA9IE1lZGlhVGltZShnc3RyZWFtZXJQb3Np
dGlvbiwgR1NUX1NFQ09ORCk7Ci0gICAgZWxzZSBpZiAobV9jYW5GYWxsQmFja1RvTGFzdEZpbmlz
aGVkU2Vla1Bvc2l0aW9uKQotICAgICAgICBwbGF5YmFja1Bvc2l0aW9uID0gbV9zZWVrVGltZTsK
LQotICAgIG1fY2FjaGVkUG9zaXRpb24gPSBwbGF5YmFja1Bvc2l0aW9uOwotICAgIHJldHVybiBw
bGF5YmFja1Bvc2l0aW9uOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cmVhZHlUaW1lckZpcmVkKCkKLXsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJJ
biBSRUFEWSBmb3IgdG9vIGxvbmcuIFJlbGVhc2luZyBwaXBlbGluZSByZXNvdXJjZXMuIik7Ci0g
ICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfTlVMTCk7Ci19Ci0KLWJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlIG5ld1N0
YXRlKQotewotICAgIEFTU0VSVChtX3BpcGVsaW5lKTsKLQotICAgIEdzdFN0YXRlIGN1cnJlbnRT
dGF0ZTsKLSAgICBHc3RTdGF0ZSBwZW5kaW5nOwotCi0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRl
KG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nLCAwKTsKLSAgICBpZiAo
Y3VycmVudFN0YXRlID09IG5ld1N0YXRlIHx8IHBlbmRpbmcgPT0gbmV3U3RhdGUpIHsKLSAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUmVqZWN0ZWQgc3RhdGUgY2hhbmdlIHRv
ICVzIGZyb20gJXMgd2l0aCAlcyBwZW5kaW5nIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUo
bmV3U3RhdGUpLAotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoY3VycmVu
dFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJD
aGFuZ2luZyBzdGF0ZSBjaGFuZ2UgdG8gJXMgZnJvbSAlcyB3aXRoICVzIHBlbmRpbmciLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSksCi0gICAgICAgIGdzdF9lbGVtZW50X3N0
YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBl
bmRpbmcpKTsKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgaWYgKGN1cnJlbnRTdGF0ZSA8
PSBHU1RfU1RBVEVfUkVBRFkgJiYgbmV3U3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkKLSAgICAg
ICAgZW5zdXJlR0xWaWRlb1NpbmtDb250ZXh0KCk7Ci0jZW5kaWYKLQotICAgIEdzdFN0YXRlQ2hh
bmdlUmV0dXJuIHNldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxp
bmUuZ2V0KCksIG5ld1N0YXRlKTsKLSAgICBHc3RTdGF0ZSBwYXVzZWRPclBsYXlpbmcgPSBuZXdT
dGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORyA/IEdTVF9TVEFURV9QQVVTRUQgOiBHU1RfU1RBVEVf
UExBWUlORzsKLSAgICBpZiAoY3VycmVudFN0YXRlICE9IHBhdXNlZE9yUGxheWluZyAmJiBzZXRT
dGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIENyZWF0ZSBhIHRpbWVyIHdoZW4gZW50ZXJpbmcgdGhlIFJFQURZIHN0
YXRlIHNvIHRoYXQgd2UgY2FuIGZyZWUgcmVzb3VyY2VzCi0gICAgLy8gaWYgd2Ugc3RheSBmb3Ig
dG9vIGxvbmcgb24gUkVBRFkuCi0gICAgLy8gQWxzbyBsZXRzIHJlbW92ZSB0aGUgdGltZXIgaWYg
d2UgcmVxdWVzdCBhIHN0YXRlIGNoYW5nZSBmb3IgYW55IHN0YXRlIG90aGVyIHRoYW4gUkVBRFku
Ci0gICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNzM1NAotICAgIGlmIChuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkgJiYgIW1fcmVhZHlU
aW1lckhhbmRsZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAvLyBNYXggaW50ZXJ2YWwgaW4gc2Vj
b25kcyB0byBzdGF5IGluIHRoZSBSRUFEWSBzdGF0ZSBvbiBtYW51YWwKLSAgICAgICAgLy8gc3Rh
dGUgY2hhbmdlIHJlcXVlc3RzLgotICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyByZWFkeVN0
YXRlVGltZXJEZWxheSB7IDFfbWluIH07Ci0gICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc3Rh
cnRPbmVTaG90KHJlYWR5U3RhdGVUaW1lckRlbGF5KTsKLSAgICB9IGVsc2UgaWYgKG5ld1N0YXRl
ICE9IEdTVF9TVEFURV9SRUFEWSkKLSAgICAgICAgbV9yZWFkeVRpbWVySGFuZGxlci5zdG9wKCk7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgY2hhbmdl
UGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6cHJlcGFyZVRvUGxheSgpCkBAIC00NzgsNTQgKzY0NCw0OCBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UoKQogICAgICAgICBsb2FkaW5nRmFp
bGVkKE1lZGlhUGxheWVyOjpFbXB0eSk7CiB9CiAKLU1lZGlhVGltZSBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnBsYXRmb3JtRHVyYXRpb24oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnBhdXNlZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BpcGVsaW5lKQot
ICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwotCi0gICAgR1NUX1RSQUNF
X09CSkVDVChwaXBlbGluZSgpLCAiZXJyb3JPY2N1cmVkOiAlcywgcGlwZWxpbmUgc3RhdGU6ICVz
IiwgYm9vbEZvclByaW50aW5nKG1fZXJyb3JPY2N1cmVkKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUoR1NUX1NUQVRFKG1fcGlwZWxpbmUuZ2V0KCkpKSk7Ci0gICAgaWYgKG1fZXJyb3JPY2N1
cmVkKQotICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIC8vIFRoZSBkdXJhdGlvbiBxdWVyeSB3b3VsZCBmYWlsIG9uIGEg
bm90LXByZXJvbGxlZCBwaXBlbGluZS4KLSAgICBpZiAoR1NUX1NUQVRFKG1fcGlwZWxpbmUuZ2V0
KCkpIDwgR1NUX1NUQVRFX1BBVVNFRCkKLSAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxp
ZFRpbWUoKTsKKyAgICBpZiAobV9pc0VuZFJlYWNoZWQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiSWdub3JpbmcgcGF1c2UgYXQgRU9TIik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KIAotICAgIGludDY0X3QgZHVyYXRpb24gPSAwOwotICAgIGlmICghZ3N0
X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9waXBlbGluZS5nZXQoKSwgR1NUX0ZPUk1BVF9USU1F
LCAmZHVyYXRpb24pIHx8ICFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRChkdXJhdGlvbikpIHsKLSAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVGltZSBkdXJhdGlvbiBxdWVyeSBm
YWlsZWQgZm9yICVzIiwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJl
dHVybiBNZWRpYVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7CisgICAgaWYgKG1fcGxheWJh
Y2tSYXRlUGF1c2UpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUGxh
eWJhY2sgcmF0ZSBpcyAwLCBzaW11bGF0aW5nIFBBVVNFRCBzdGF0ZSIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIkR1cmF0
aW9uOiAlIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MoZHVyYXRpb24pKTsKLSAgICBy
ZXR1cm4gTWVkaWFUaW1lKGR1cmF0aW9uLCBHU1RfU0VDT05EKTsKKyAgICBHc3RTdGF0ZSBzdGF0
ZTsKKyAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBu
dWxscHRyLCAwKTsKKyAgICBib29sIHBhdXNlZCA9IHN0YXRlIDw9IEdTVF9TVEFURV9QQVVTRUQ7
CisgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBhdXNlZDogJXMiLCB0b1N0cmluZyhw
YXVzZWQpLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBwYXVzZWQ7CiB9CiAKLU1lZGlhVGlt
ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWsoY29uc3QgTWVkaWFUaW1l
JiBwb3NpdGlvbiwgZmxvYXQgcmF0ZSwgR3N0U2Vla0ZsYWdzIHNlZWtUeXBlKQogewotICAgIEdT
VF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgIkNhY2hlZCBkdXJhdGlvbjogJXMiLCBtX2NhY2hl
ZER1cmF0aW9uLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKG1fY2FjaGVkRHVy
YXRpb24uaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gbV9jYWNoZWREdXJhdGlvbjsKLQotICAg
IE1lZGlhVGltZSBkdXJhdGlvbiA9IHBsYXRmb3JtRHVyYXRpb24oKTsKLSAgICBpZiAoIWR1cmF0
aW9uIHx8IGR1cmF0aW9uLmlzSW52YWxpZCgpKQotICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6
ZXJvVGltZSgpOwotCi0gICAgbV9jYWNoZWREdXJhdGlvbiA9IGR1cmF0aW9uOwotCi0gICAgcmV0
dXJuIG1fY2FjaGVkRHVyYXRpb247Ci19CisgICAgLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIHJhdGUg
Pj0gMC4KKyAgICBNZWRpYVRpbWUgc3RhcnRUaW1lID0gcG9zaXRpb24sIGVuZFRpbWUgPSBNZWRp
YVRpbWU6OmludmFsaWRUaW1lKCk7CiAKLU1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmN1cnJlbnRNZWRpYVRpbWUoKSBjb25zdAotewotICAgIGlmICghbV9waXBlbGluZSB8
fCBtX2Vycm9yT2NjdXJlZCkKLSAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KTsKKyAgICBpZiAocmF0ZSA8IDApIHsKKyAgICAgICAgc3RhcnRUaW1lID0gTWVkaWFUaW1lOjp6
ZXJvVGltZSgpOworICAgICAgICAvLyBJZiB3ZSBhcmUgYXQgYmVnaW5uaW5nIG9mIG1lZGlhLCBz
dGFydCBmcm9tIHRoZSBlbmQgdG8KKyAgICAgICAgLy8gYXZvaWQgaW1tZWRpYXRlIEVPUy4KKyAg
ICAgICAgaWYgKHBvc2l0aW9uIDwgTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQorICAgICAgICAgICAg
ZW5kVGltZSA9IGR1cmF0aW9uTWVkaWFUaW1lKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGVuZFRpbWUgPSBwb3NpdGlvbjsKKyAgICB9CiAKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVs
aW5lKCksICJzZWVraW5nOiAlcywgc2Vla1RpbWU6ICVzIiwgYm9vbEZvclByaW50aW5nKG1fc2Vl
a2luZyksIG1fc2Vla1RpbWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAobV9z
ZWVraW5nKQotICAgICAgICByZXR1cm4gbV9zZWVrVGltZTsKKyAgICBpZiAoIXJhdGUpCisgICAg
ICAgIHJhdGUgPSAxLjA7CiAKLSAgICByZXR1cm4gcGxheWJhY2tQb3NpdGlvbigpOworICAgIHJl
dHVybiBnc3RfZWxlbWVudF9zZWVrKG1fcGlwZWxpbmUuZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRf
VElNRSwgc2Vla1R5cGUsCisgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGlt
ZShzdGFydFRpbWUpLCBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoZW5kVGltZSkp
OwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayhjb25zdCBNZWRp
YVRpbWUmIG1lZGlhVGltZSkKQEAgLTU4OCwyOCArNzQ4LDYgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnNlZWsoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAgICAgbV9p
c0VuZFJlYWNoZWQgPSBmYWxzZTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmRvU2Vlayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBmbG9hdCByYXRlLCBHc3RTZWVr
RmxhZ3Mgc2Vla1R5cGUpCi17Ci0gICAgLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIHJhdGUgPj0gMC4K
LSAgICBNZWRpYVRpbWUgc3RhcnRUaW1lID0gcG9zaXRpb24sIGVuZFRpbWUgPSBNZWRpYVRpbWU6
OmludmFsaWRUaW1lKCk7Ci0KLSAgICBpZiAocmF0ZSA8IDApIHsKLSAgICAgICAgc3RhcnRUaW1l
ID0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotICAgICAgICAvLyBJZiB3ZSBhcmUgYXQgYmVnaW5u
aW5nIG9mIG1lZGlhLCBzdGFydCBmcm9tIHRoZSBlbmQgdG8KLSAgICAgICAgLy8gYXZvaWQgaW1t
ZWRpYXRlIEVPUy4KLSAgICAgICAgaWYgKHBvc2l0aW9uIDwgTWVkaWFUaW1lOjp6ZXJvVGltZSgp
KQotICAgICAgICAgICAgZW5kVGltZSA9IGR1cmF0aW9uTWVkaWFUaW1lKCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGVuZFRpbWUgPSBwb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAoIXJh
dGUpCi0gICAgICAgIHJhdGUgPSAxLjA7Ci0KLSAgICByZXR1cm4gZ3N0X2VsZW1lbnRfc2Vlayht
X3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtUeXBlLAotICAgICAg
ICBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoc3RhcnRUaW1lKSwgR1NUX1NFRUtf
VFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKGVuZFRpbWUpKTsKLX0KLQogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCiB7CiAgICAgaWYgKCFtX2No
YW5naW5nUmF0ZSkKQEAgLTY0NCw1ODAgKzc4MiwxNDA4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp1cGRhdGVQbGF5YmFja1JhdGUoKQogICAgIG1fcGxheWVyLT5yYXRlQ2hh
bmdlZCgpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkKCkg
Y29uc3QKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtRHVy
YXRpb24oKSBjb25zdAogewogICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAKLSAgICBpZiAo
bV9pc0VuZFJlYWNoZWQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
SWdub3JpbmcgcGF1c2UgYXQgRU9TIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBwaXBlbGlu
ZSBzdGF0ZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9lcnJvck9jY3VyZWQpLCBnc3RfZWxlbWVu
dF9zdGF0ZV9nZXRfbmFtZShHU1RfU1RBVEUobV9waXBlbGluZS5nZXQoKSkpKTsKKyAgICBpZiAo
bV9lcnJvck9jY3VyZWQpCisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7
CiAKLSAgICBpZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgewotICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJQbGF5YmFjayByYXRlIGlzIDAsIHNpbXVsYXRpbmcgUEFVU0VEIHN0
YXRlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBUaGUgZHVyYXRpb24gcXVlcnkg
d291bGQgZmFpbCBvbiBhIG5vdC1wcmVyb2xsZWQgcGlwZWxpbmUuCisgICAgaWYgKEdTVF9TVEFU
RShtX3BpcGVsaW5lLmdldCgpKSA8IEdTVF9TVEFURV9QQVVTRUQpCisgICAgICAgIHJldHVybiBN
ZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisKKyAgICBpbnQ2NF90IGR1cmF0aW9uID0gMDsKKyAg
ICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9G
T1JNQVRfVElNRSwgJmR1cmF0aW9uKSB8fCAhR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQoZHVyYXRp
b24pKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRpbWUgZHVyYXRp
b24gcXVlcnkgZmFpbGVkIGZvciAlcyIsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpOwogICAgIH0K
IAotICAgIEdzdFN0YXRlIHN0YXRlOwotICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOwotICAgIGJvb2wgcGF1c2VkID0gc3RhdGUg
PD0gR1NUX1NUQVRFX1BBVVNFRDsKLSAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiUGF1
c2VkOiAlcyIsIHRvU3RyaW5nKHBhdXNlZCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHBh
dXNlZDsKKyAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiRHVyYXRpb246ICUiIEdTVF9U
SU1FX0ZPUk1BVCwgR1NUX1RJTUVfQVJHUyhkdXJhdGlvbikpOworICAgIHJldHVybiBNZWRpYVRp
bWUoZHVyYXRpb24sIEdTVF9TRUNPTkQpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c2Vla2luZygpIGNvbnN0CitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc2Vla2lu
ZzsKLX0KKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJDYWNoZWQgZHVyYXRpb246
ICVzIiwgbV9jYWNoZWREdXJhdGlvbi50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlm
IChtX2NhY2hlZER1cmF0aW9uLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVkRHVy
YXRpb247CiAKLSNkZWZpbmUgQ0xFQVJfVFJBQ0tTKHRyYWNrcywgbWV0aG9kKSBcCi0gICAgZm9y
IChhdXRvJiB0cmFjayA6IHRyYWNrcy52YWx1ZXMoKSlcCi0gICAgICAgIG1ldGhvZCgqdHJhY2sp
O1wKLSAgICB0cmFja3MuY2xlYXIoKTsKKyAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBwbGF0Zm9y
bUR1cmF0aW9uKCk7CisgICAgaWYgKCFkdXJhdGlvbiB8fCBkdXJhdGlvbi5pc0ludmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmNsZWFyVHJhY2tzKCkKLXsKLSNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCi0gICAgQ0xFQVJfVFJBQ0tTKG1fYXVkaW9UcmFja3MsIG1fcGxheWVyLT5yZW1vdmVBdWRp
b1RyYWNrKTsKLSAgICBDTEVBUl9UUkFDS1MobV92aWRlb1RyYWNrcywgbV9wbGF5ZXItPnJlbW92
ZVZpZGVvVHJhY2spOwotICAgIENMRUFSX1RSQUNLUyhtX3RleHRUcmFja3MsIG1fcGxheWVyLT5y
ZW1vdmVUZXh0VHJhY2spOwotI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBtX2Nh
Y2hlZER1cmF0aW9uID0gZHVyYXRpb247CisKKyAgICByZXR1cm4gbV9jYWNoZWREdXJhdGlvbjsK
IH0KLSN1bmRlZiBDTEVBUl9UUkFDS1MKIAotRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAorTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKLSAgICBpZiAoIW1faXNMZWdhY3lQbGF5YmluICYmICFtX2N1cnJlbnRWaWRlb1N0
cmVhbUlkLmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXI+IHZpZGVvVHJhY2sgPSBtX3ZpZGVvVHJhY2tzLmdldChtX2N1cnJlbnRWaWRlb1N0cmVh
bUlkKTsKLQotICAgICAgICBpZiAodmlkZW9UcmFjaykgewotICAgICAgICAgICAgYXV0byB0YWdz
ID0gYWRvcHRHUmVmKGdzdF9zdHJlYW1fZ2V0X3RhZ3ModmlkZW9UcmFjay0+c3RyZWFtKCkpKTsK
LSAgICAgICAgICAgIGdpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwg
bV9lcnJvck9jY3VyZWQpCisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7
CiAKLSAgICAgICAgICAgIGlmICh0YWdzICYmIGdzdF90YWdfbGlzdF9nZXRfaW50KHRhZ3MuZ2V0
KCksIFdFQktJVF9NRURJQV9UUkFDS19UQUdfV0lEVEgsICZ3aWR0aCkgJiYgZ3N0X3RhZ19saXN0
X2dldF9pbnQodGFncy5nZXQoKSwgV0VCS0lUX01FRElBX1RSQUNLX1RBR19IRUlHSFQsICZoZWln
aHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBGbG9hdFNpemUod2lkdGgsIGhlaWdodCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBHU1Rf
VFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJzZWVraW5nOiAlcywgc2Vla1RpbWU6ICVzIiwgYm9v
bEZvclByaW50aW5nKG1fc2Vla2luZyksIG1fc2Vla1RpbWUudG9TdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICBpZiAobV9zZWVraW5nKQorICAgICAgICByZXR1cm4gbV9zZWVrVGltZTsKIAot
ICAgIHJldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuYXR1cmFsU2l6ZSgp
OworICAgIHJldHVybiBwbGF5YmFja1Bvc2l0aW9uKCk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCi0jZGVmaW5lIENSRUFURV9UUkFDSyh0eXBlLCBUeXBlKSBHX1NUTVRfU1RBUlQgeyAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIG1faGFzIyNUeXBlID0gdHJ1ZTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICgh
dXNlTWVkaWFTb3VyY2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgICBSZWZQdHI8VHlwZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFj
ayA9IFR5cGUjI1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCp0aGlz
KSwgaSwgc3RyZWFtKTsgXAotICAgICAgICAgICAgbV8jI3R5cGUjI1RyYWNrcy5hZGQodHJhY2st
PmlkKCksIHRyYWNrKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgbV9wbGF5ZXIt
PmFkZCMjVHlwZSMjVHJhY2soKnRyYWNrKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgaWYgKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9mbGFncyhzdHJlYW0uZ2V0KCkpICYg
R1NUX1NUUkVBTV9GTEFHX1NFTEVDVCkgXAotICAgICAgICAgICAgICAgIG1fY3VycmVudCMjVHlw
ZSMjU3RyZWFtSWQgPSBTdHJpbmcoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQo
KSkpOyBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSBHX1NUTVRfRU5ECi0jZWxzZQotI2RlZmlu
ZSBDUkVBVEVfVFJBQ0sodHlwZSwgVHlwZSkgR19TVE1UX1NUQVJUIHsgXAotICAgICAgICBtX2hh
cyMjVHlwZSMjID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgXAotICAgIH0gR19TVE1UX0VORAot
I2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnVwZGF0ZVRyYWNrcygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UmF0ZShmbG9hdCByYXRlKQogewotICAgIEFTU0VSVCghbV9pc0xlZ2FjeVBsYXliaW4p
OworICAgIC8vIEhpZ2hlciByYXRlIGNhdXNlcyBjcmFzaC4KKyAgICByYXRlID0gY2xhbXBUbyhy
YXRlLCAtMjAuMCwgMjAuMCk7CiAKLSAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNv
dXJjZSgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRf
c2l6ZShtX3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCkpOwotCi0gICAgYm9vbCBvbGRIYXNBdWRpbyA9
IG1faGFzQXVkaW87Ci0gICAgYm9vbCBvbGRIYXNWaWRlbyA9IG1faGFzVmlkZW87Ci0gICAgLy8g
TmV3IHN0cmVhbSBjb2xsZWN0aW9ucyBvdmVycmlkZSBwcmV2aW91cyBvbmVzLgotICAgIGNsZWFy
VHJhY2tzKCk7Ci0gICAgdW5zaWduZWQgdGV4dFRyYWNrSW5kZXggPSAwOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBHUmVmUHRyPEdzdFN0cmVh
bT4gc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0obV9zdHJlYW1Db2xs
ZWN0aW9uLmdldCgpLCBpKTsKLSAgICAgICAgU3RyaW5nIHN0cmVhbUlkKGdzdF9zdHJlYW1fZ2V0
X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpKTsKLSAgICAgICAgR3N0U3RyZWFtVHlwZSB0eXBlID0g
Z3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtLmdldCgpKTsKLQotICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJJbnNwZWN0aW5nICVzIHRyYWNrIHdpdGggSUQgJXMi
LCBnc3Rfc3RyZWFtX3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJTykKLSAgICAgICAgICAg
IENSRUFURV9UUkFDSyhhdWRpbywgQXVkaW8pOwotICAgICAgICBlbHNlIGlmICh0eXBlICYgR1NU
X1NUUkVBTV9UWVBFX1ZJREVPKQotICAgICAgICAgICAgQ1JFQVRFX1RSQUNLKHZpZGVvLCBWaWRl
byk7Ci0gICAgICAgIGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVEVYVCAmJiAhdXNl
TWVkaWFTb3VyY2UpIHsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgICAgICAgICBhdXRv
IHRyYWNrID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKHRleHRUcmFj
a0luZGV4KyssIHN0cmVhbSk7Ci0gICAgICAgICAgICBtX3RleHRUcmFja3MuYWRkKHN0cmVhbUlk
LCB0cmFjay5jb3B5UmVmKCkpOwotICAgICAgICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjayh0
cmFjay5nZXQoKSk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBHU1RfV0FS
TklORygiVW5rbm93biB0cmFjayB0eXBlIGZvdW5kIGZvciBzdHJlYW0gJXMiLCBzdHJlYW1JZC51
dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoKG9sZEhhc1ZpZGVvICE9IG1faGFzVmlk
ZW8pIHx8IChvbGRIYXNBdWRpbyAhPSBtX2hhc0F1ZGlvKSkKLSAgICAgICAgbV9wbGF5ZXItPmNo
YXJhY3RlcmlzdGljQ2hhbmdlZCgpOwotCi0gICAgaWYgKG1faGFzVmlkZW8pCi0gICAgICAgIG1f
cGxheWVyLT5zaXplQ2hhbmdlZCgpOwotCi0gICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxh
eWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7Ci19Ci0KLSN1bmRlZiBDUkVBVEVfVFJBQ0sKKyAg
ICAvLyBBdm9pZCB1c2VsZXNzIHBsYXliYWNrIHJhdGUgdXBkYXRlLgorICAgIGlmIChtX3BsYXli
YWNrUmF0ZSA9PSByYXRlKSB7CisgICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgdGhhdCB1cHBlciBs
YXllcnMgd2VyZSBub3RpZmllZCBpZiByYXRlIHdhcyBzZXQKIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmVuYWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRy
YWNrVHlwZSB0cmFja1R5cGUsIHVuc2lnbmVkIGluZGV4KQotewotICAgIC8vIEZJWE1FOiBSZW1v
dmUgaXNNZWRpYVNvdXJjZSgpIHRlc3QgYmVsb3cgd2hlbiBmaXhpbmcgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjUzMS4KLSAgICBpZiAoaXNNZWRpYVNvdXJjZSgp
KSB7Ci0gICAgICAgIEdTVF9GSVhNRV9PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkF1ZGlvL1Zp
ZGVvL1RleHQgdHJhY2sgc3dpdGNoaW5nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IHRoZSBNU0Ug
YmFja2VuZC4iKTsKKyAgICAgICAgaWYgKCFtX2NoYW5naW5nUmF0ZSAmJiBtX3BsYXllci0+cmF0
ZSgpICE9IG1fcGxheWJhY2tSYXRlKQorICAgICAgICAgICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2Vk
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBjaGFyKiBwcm9wZXJ0eU5h
bWU7Ci0gICAgY29uc3QgY2hhciogdHJhY2tUeXBlQXNTdHJpbmc7Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gc2VsZWN0ZWRTdHJlYW1zOwotICAgIFN0cmluZyBzZWxlY3RlZFN0cmVhbUlkOwotCi0gICAg
R3N0U3RyZWFtKiBzdHJlYW0gPSBudWxscHRyOwotCi0gICAgaWYgKCFtX2lzTGVnYWN5UGxheWJp
bikgewotICAgICAgICBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbSht
X3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCksIGluZGV4KTsKLSAgICAgICAgaWYgKCFzdHJlYW0pIHsK
LSAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAiTm8gc3RyZWFtIHRv
IHNlbGVjdCBhdCBpbmRleCAldSIsIGluZGV4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBzZWxlY3RlZFN0cmVhbUlkID0gU3RyaW5nOjpmcm9tVVRGOChnc3Rfc3Ry
ZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtKSk7Ci0gICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBl
bmQoc2VsZWN0ZWRTdHJlYW1JZCk7CisgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKSB7CisgICAgICAg
IC8vIG5vdGlmeSB1cHBlciBsYXllcnMgdGhhdCB3ZSBjYW5ub3QgaGFuZGxlIHBhc3NlZCByYXRl
LgorICAgICAgICBtX2NoYW5naW5nUmF0ZSA9IGZhbHNlOworICAgICAgICBtX3BsYXllci0+cmF0
ZUNoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN3aXRjaCAodHJhY2tU
eXBlKSB7Ci0gICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OkF1
ZGlvOgotICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiY3VycmVudC1hdWRpbyI7Ci0gICAgICAgIHRy
YWNrVHlwZUFzU3RyaW5nID0gImF1ZGlvIjsKLSAgICAgICAgaWYgKCFzZWxlY3RlZFN0cmVhbUlk
LmlzRW1wdHkoKSAmJiBzZWxlY3RlZFN0cmVhbUlkID09IG1fY3VycmVudEF1ZGlvU3RyZWFtSWQp
IHsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiJXMgc3RyZWFtOiAl
cyBhbHJlYWR5IHNlbGVjdGVkLCBub3QgZG9pbmcgYW55dGhpbmcuIiwgdHJhY2tUeXBlQXNTdHJp
bmcsIHNlbGVjdGVkU3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KKyAgICBHc3RTdGF0ZSBzdGF0ZTsKKyAgICBHc3RTdGF0ZSBwZW5kaW5nOwog
Ci0gICAgICAgIGlmICghbV9jdXJyZW50VGV4dFN0cmVhbUlkLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50VGV4dFN0cmVhbUlkKTsKLSAgICAg
ICAgaWYgKCFtX2N1cnJlbnRWaWRlb1N0cmVhbUlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNl
bGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpWaWRl
bzoKLSAgICAgICAgcHJvcGVydHlOYW1lID0gImN1cnJlbnQtdmlkZW8iOwotICAgICAgICB0cmFj
a1R5cGVBc1N0cmluZyA9ICJ2aWRlbyI7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRTdHJlYW1JZC5p
c0VtcHR5KCkgJiYgc2VsZWN0ZWRTdHJlYW1JZCA9PSBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKSB7
Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMg
YWxyZWFkeSBzZWxlY3RlZCwgbm90IGRvaW5nIGFueXRoaW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5n
LCBzZWxlY3RlZFN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgbV9wbGF5YmFja1JhdGUgPSByYXRlOworICAgIG1fY2hhbmdpbmdSYXRl
ID0gdHJ1ZTsKIAotICAgICAgICBpZiAoIW1fY3VycmVudEF1ZGlvU3RyZWFtSWQuaXNFbXB0eSgp
KQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRBdWRpb1N0cmVh
bUlkKTsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRUZXh0U3RyZWFtSWQuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRUZXh0U3RyZWFtSWQpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNr
VHlwZTo6VGV4dDoKLSAgICAgICAgcHJvcGVydHlOYW1lID0gImN1cnJlbnQtdGV4dCI7Ci0gICAg
ICAgIHRyYWNrVHlwZUFzU3RyaW5nID0gInRleHQiOwotICAgICAgICBpZiAoIXNlbGVjdGVkU3Ry
ZWFtSWQuaXNFbXB0eSgpICYmIHNlbGVjdGVkU3RyZWFtSWQgPT0gbV9jdXJyZW50VGV4dFN0cmVh
bUlkKSB7Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVh
bTogJXMgYWxyZWFkeSBzZWxlY3RlZCwgbm90IGRvaW5nIGFueXRoaW5nLiIsIHRyYWNrVHlwZUFz
U3RyaW5nLCBzZWxlY3RlZFN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9CisgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0
KCksICZzdGF0ZSwgJnBlbmRpbmcsIDApOwogCi0gICAgICAgIGlmICghbV9jdXJyZW50QXVkaW9T
dHJlYW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1f
Y3VycmVudEF1ZGlvU3RyZWFtSWQpOwotICAgICAgICBpZiAoIW1fY3VycmVudFZpZGVvU3RyZWFt
SWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJl
bnRWaWRlb1N0cmVhbUlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFja1ByaXZhdGVC
YXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlVua25vd246Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgaWYgKCFyYXRlKSB7CisgICAgICAgIG1fY2hhbmdp
bmdSYXRlID0gZmFsc2U7CisgICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2UgPSB0cnVlOworICAg
ICAgICBpZiAoc3RhdGUgIT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBwZW5kaW5nICE9IEdTVF9TVEFU
RV9QQVVTRUQpCisgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVT
RUQpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICJFbmFibGluZyAlcyB0cmFjayB3aXRoIGluZGV4OiAldSIsIHRyYWNrVHlwZUFzU3Ry
aW5nLCBpbmRleCk7Ci0gICAgaWYgKG1faXNMZWdhY3lQbGF5YmluKQotICAgICAgICBnX29iamVj
dF9zZXQobV9waXBlbGluZS5nZXQoKSwgcHJvcGVydHlOYW1lLCBpbmRleCwgbnVsbHB0cik7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIEdMaXN0KiBzZWxlY3RlZFN0cmVhbXNMaXN0ID0gbnVsbHB0cjsK
KyAgICBpZiAoKHN0YXRlICE9IEdTVF9TVEFURV9QTEFZSU5HICYmIHN0YXRlICE9IEdTVF9TVEFU
RV9QQVVTRUQpCisgICAgICAgIHx8IChwZW5kaW5nID09IEdTVF9TVEFURV9QQVVTRUQpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdHJlYW1JZCA6IHNlbGVj
dGVkU3RyZWFtcykKLSAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtc0xpc3QgPSBnX2xpc3RfYXBw
ZW5kKHNlbGVjdGVkU3RyZWFtc0xpc3QsIGdfc3RyZHVwKHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICB1cGRhdGVQbGF5YmFja1JhdGUoKTsKK30KIAotICAgICAgICAvLyBUT0RPOiBNU0Ug
R3N0U3RyZWFtIEFQSSBzdXBwb3J0OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgyNTMxCi0gICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQobV9waXBlbGluZS5n
ZXQoKSwgZ3N0X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtcyhzZWxlY3RlZFN0cmVhbXNMaXN0KSk7
Ci0gICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwoc2VsZWN0ZWRTdHJlYW1zTGlzdCwgcmVpbnRlcnBy
ZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19mcmVlKSk7Ci0gICAgfQorZG91YmxlIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWJh
Y2tSYXRlOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DaGFu
Z2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlc2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2
ZXNQaXRjaCkKIHsKLSAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90
aWZpY2F0aW9uOjpWaWRlb0NoYW5nZWQsIFtwbGF5ZXJdIHsKLSAgICAgICAgcGxheWVyLT5ub3Rp
ZnlQbGF5ZXJPZlZpZGVvKCk7Ci0gICAgfSk7CisgICAgbV9wcmVzZXJ2ZXNQaXRjaCA9IHByZXNl
cnZlc1BpdGNoOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5
UGxheWVyT2ZWaWRlbygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJl
bG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQogewotICAgIGlmIChVTkxJS0VMWSgh
bV9waXBlbGluZSB8fCAhbV9zb3VyY2UpKQorICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIlNldHRpbmcgcHJlbG9hZCB0byAlcyIsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKHBy
ZWxvYWQpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChwcmVsb2FkID09IE1lZGlhUGxheWVyOjpB
dXRvICYmIGlzTGl2ZVN0cmVhbSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9p
c0xlZ2FjeVBsYXliaW4gfHwgaXNNZWRpYVNvdXJjZSgpKTsKLQotICAgIGdpbnQgbnVtVHJhY2tz
ID0gMDsKLSAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOwotICAgIEdz
dEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRpYVNvdXJjZSA/IG1fc291cmNlLmdldCgpIDogbV9w
aXBlbGluZS5nZXQoKTsKLSAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgIm4tdmlkZW8iLCAmbnVt
VHJhY2tzLCBudWxscHRyKTsKKyAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOworICAgIHVwZGF0ZURv
d25sb2FkQnVmZmVyaW5nRmxhZygpOwogCi0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCks
ICJNZWRpYSBoYXMgJWQgdmlkZW8gdHJhY2tzIiwgbnVtVHJhY2tzKTsKKyAgICBpZiAobV9kZWxh
eWluZ0xvYWQgJiYgbV9wcmVsb2FkICE9IE1lZGlhUGxheWVyOjpOb25lKSB7CisgICAgICAgIG1f
ZGVsYXlpbmdMb2FkID0gZmFsc2U7CisgICAgICAgIGNvbW1pdExvYWQoKTsKKyAgICB9Cit9CiAK
LSAgICBib29sIG9sZEhhc1ZpZGVvID0gbV9oYXNWaWRlbzsKLSAgICBtX2hhc1ZpZGVvID0gbnVt
VHJhY2tzID4gMDsKLSAgICBpZiAob2xkSGFzVmlkZW8gIT0gbV9oYXNWaWRlbykKLSAgICAgICAg
bV9wbGF5ZXItPmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOworc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpidWZmZXJlZCgpIGNv
bnN0Cit7CisgICAgYXV0byB0aW1lUmFuZ2VzID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybVRpbWVSYW5n
ZXM+KCk7CisgICAgaWYgKG1fZXJyb3JPY2N1cmVkIHx8IGlzTGl2ZVN0cmVhbSgpKQorICAgICAg
ICByZXR1cm4gdGltZVJhbmdlczsKIAotICAgIGlmIChtX2hhc1ZpZGVvKQotICAgICAgICBtX3Bs
YXllci0+c2l6ZUNoYW5nZWQoKTsKKyAgICBNZWRpYVRpbWUgbWVkaWFEdXJhdGlvbiA9IGR1cmF0
aW9uTWVkaWFUaW1lKCk7CisgICAgaWYgKCFtZWRpYUR1cmF0aW9uIHx8IG1lZGlhRHVyYXRpb24u
aXNQb3NpdGl2ZUluZmluaXRlKCkpCisgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOwogCi0gICAg
aWYgKHVzZU1lZGlhU291cmNlKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIlRyYWNrcyBtYW5hZ2VkIGJ5IHNvdXJjZSBlbGVtZW50LiBCYWlsaW5nIG91dCBub3cuIik7
Ci0gICAgICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9w
bGF5ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1
ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nKEdTVF9GT1JNQVRfUEVSQ0VO
VCkpOwogCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIFZlY3RvcjxTdHJpbmc+IHZhbGlk
VmlkZW9TdHJlYW1zOwotICAgIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytpKSB7
Ci0gICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlf
bmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LXZpZGVvLXBhZCIsIGksICZwYWQub3V0UHRyKCks
IG51bGxwdHIpOwotICAgICAgICBBU1NFUlQocGFkKTsKKyAgICBpZiAoIWdzdF9lbGVtZW50X3F1
ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHRpbWVS
YW5nZXM7CiAKLSAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIlYiICsgU3RyaW5nOjpudW1iZXIo
aSk7Ci0gICAgICAgIHZhbGlkVmlkZW9TdHJlYW1zLmFwcGVuZChzdHJlYW1JZCk7Ci0gICAgICAg
IGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV92aWRlb1RyYWNrcy5zaXplKCkpKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sg
PSBtX3ZpZGVvVHJhY2tzLmdldChzdHJlYW1JZCk7Ci0gICAgICAgICAgICBpZiAoZXhpc3RpbmdU
cmFjaykgewotICAgICAgICAgICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOwotICAg
ICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrLT5wYWQoKSA9PSBwYWQpCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQorICAgIGd1aW50IG51bUJ1ZmZlcmlu
Z1JhbmdlcyA9IGdzdF9xdWVyeV9nZXRfbl9idWZmZXJpbmdfcmFuZ2VzKHF1ZXJ5LmdldCgpKTsK
KyAgICBmb3IgKGd1aW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1CdWZmZXJpbmdSYW5nZXM7IGlu
ZGV4KyspIHsKKyAgICAgICAgZ2ludDY0IHJhbmdlU3RhcnQgPSAwLCByYW5nZVN0b3AgPSAwOwor
ICAgICAgICBpZiAoZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UocXVlcnkuZ2V0
KCksIGluZGV4LCAmcmFuZ2VTdGFydCwgJnJhbmdlU3RvcCkpIHsKKyAgICAgICAgICAgIHVpbnQ2
NF90IHN0YXJ0VGltZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQodG9Hc3RVbnNp
Z25lZDY0VGltZShtZWRpYUR1cmF0aW9uKSwgcmFuZ2VTdGFydCwgR1NUX0ZPUk1BVF9QRVJDRU5U
X01BWCk7CisgICAgICAgICAgICB1aW50NjRfdCBzdG9wVGltZSA9IGdzdF91dGlsX3VpbnQ2NF9z
Y2FsZV9pbnRfcm91bmQodG9Hc3RVbnNpZ25lZDY0VGltZShtZWRpYUR1cmF0aW9uKSwgcmFuZ2VT
dG9wLCBHU1RfRk9STUFUX1BFUkNFTlRfTUFYKTsKKyAgICAgICAgICAgIHRpbWVSYW5nZXMtPmFk
ZChNZWRpYVRpbWUoc3RhcnRUaW1lLCBHU1RfU0VDT05EKSwgTWVkaWFUaW1lKHN0b3BUaW1lLCBH
U1RfU0VDT05EKSk7CiAgICAgICAgIH0KLQotICAgICAgICBhdXRvIHRyYWNrID0gVmlkZW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0cigqdGhpcyksIGksIHBhZCk7Ci0g
ICAgICAgIEFTU0VSVChzdHJlYW1JZCA9PSB0cmFjay0+aWQoKSk7Ci0gICAgICAgIG1fdmlkZW9U
cmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjay5jb3B5UmVmKCkpOwotICAgICAgICBtX3BsYXllci0+
YWRkVmlkZW9UcmFjayh0cmFjay5nZXQoKSk7CiAgICAgfQogCi0gICAgcHVyZ2VJbnZhbGlkVmlk
ZW9UcmFja3ModmFsaWRWaWRlb1N0cmVhbXMpOwotI2VuZGlmCisgICAgLy8gRmFsbGJhY2sgdG8g
dGhlIG1vcmUgZ2VuZXJhbCBtYXhUaW1lTG9hZGVkKCkgaWYgbm8gcmFuZ2UgaGFzCisgICAgLy8g
YmVlbiBmb3VuZC4KKyAgICBpZiAoIXRpbWVSYW5nZXMtPmxlbmd0aCgpKSB7CisgICAgICAgIE1l
ZGlhVGltZSBsb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CisgICAgICAgIGlmIChsb2FkZWQuaXNW
YWxpZCgpICYmIGxvYWRlZCkKKyAgICAgICAgICAgIHRpbWVSYW5nZXMtPmFkZChNZWRpYVRpbWU6
Onplcm9UaW1lKCksIGxvYWRlZCk7CisgICAgfQogCi0gICAgbV9wbGF5ZXItPmNsaWVudCgpLm1l
ZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7CisgICAgcmV0dXJuIHRpbWVSYW5nZXM7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb1NpbmtDYXBzQ2hh
bmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQorTWVkaWFU
aW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1lU2Vla2FibGUoKSBj
b25zdAogewotICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmlj
YXRpb246OlZpZGVvQ2Fwc0NoYW5nZWQsIFtwbGF5ZXJdIHsKLSAgICAgICAgcGxheWVyLT5ub3Rp
ZnlQbGF5ZXJPZlZpZGVvQ2FwcygpOwotICAgIH0pOwotfQorICAgIEdTVF9UUkFDRV9PQkpFQ1Qo
cGlwZWxpbmUoKSwgImVycm9yT2NjdXJlZDogJXMsIGlzTGl2ZVN0cmVhbTogJXMiLCBib29sRm9y
UHJpbnRpbmcobV9lcnJvck9jY3VyZWQpLCBib29sRm9yUHJpbnRpbmcoaXNMaXZlU3RyZWFtKCkp
KTsKKyAgICBpZiAobV9lcnJvck9jY3VyZWQpCisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onpl
cm9UaW1lKCk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5
ZXJPZlZpZGVvQ2FwcygpCi17Ci0gICAgbV92aWRlb1NpemUgPSBJbnRTaXplKCk7Ci0gICAgbV9w
bGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7Ci19Cisg
ICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQorICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGlt
ZSgpOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9DaGFuZ2VkQ2Fs
bGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgcGxheWVy
LT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6QXVkaW9DaGFuZ2Vk
LCBbcGxheWVyXSB7Ci0gICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZBdWRpbygpOwotICAg
IH0pOworICAgIE1lZGlhVGltZSBkdXJhdGlvbiA9IGR1cmF0aW9uTWVkaWFUaW1lKCk7CisgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAibWF4TWVkaWFUaW1lU2Vla2FibGUsIGR1cmF0
aW9uOiAlcyIsIHRvU3RyaW5nKGR1cmF0aW9uKS51dGY4KCkuZGF0YSgpKTsKKyAgICAvLyBpbmZp
bml0ZSBkdXJhdGlvbiBtZWFucyBsaXZlIHN0cmVhbQorICAgIGlmIChkdXJhdGlvbi5pc1Bvc2l0
aXZlSW5maW5pdGUoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKKwor
ICAgIHJldHVybiBkdXJhdGlvbjsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6Om5vdGlmeVBsYXllck9mQXVkaW8oKQorTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bWF4VGltZUxvYWRlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKFVOTElLRUxZKCFtX3Bp
cGVsaW5lIHx8ICFtX3NvdXJjZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2lz
TGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOworICAgIGlmIChtX2Vycm9yT2NjdXJl
ZCkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotICAgIGdpbnQgbnVt
VHJhY2tzID0gMDsKLSAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOwot
ICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRpYVNvdXJjZSA/IG1fc291cmNlLmdldCgp
IDogbV9waXBlbGluZS5nZXQoKTsKLSAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgIm4tYXVkaW8i
LCAmbnVtVHJhY2tzLCBudWxscHRyKTsKLQotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgp
LCAiTWVkaWEgaGFzICVkIGF1ZGlvIHRyYWNrcyIsIG51bVRyYWNrcyk7Ci0gICAgYm9vbCBvbGRI
YXNBdWRpbyA9IG1faGFzQXVkaW87Ci0gICAgbV9oYXNBdWRpbyA9IG51bVRyYWNrcyA+IDA7Ci0g
ICAgaWYgKG9sZEhhc0F1ZGlvICE9IG1faGFzQXVkaW8pCi0gICAgICAgIG1fcGxheWVyLT5jaGFy
YWN0ZXJpc3RpY0NoYW5nZWQoKTsKLQotICAgIGlmICh1c2VNZWRpYVNvdXJjZSkgewotICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJUcmFja3MgbWFuYWdlZCBieSBzb3VyY2Ug
ZWxlbWVudC4gQmFpbGluZyBvdXQgbm93LiIpOwotICAgICAgICBtX3BsYXllci0+Y2xpZW50KCku
bWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLSAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZEF1
ZGlvU3RyZWFtczsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewot
ICAgICAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOwotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV9waXBlbGluZS5nZXQoKSwgImdldC1hdWRpby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBu
dWxscHRyKTsKLSAgICAgICAgQVNTRVJUKHBhZCk7CisgICAgTWVkaWFUaW1lIGxvYWRlZCA9IG1f
bWF4VGltZUxvYWRlZDsKKyAgICBpZiAobV9pc0VuZFJlYWNoZWQpCisgICAgICAgIGxvYWRlZCA9
IGR1cmF0aW9uTWVkaWFUaW1lKCk7CisgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIm1h
eFRpbWVMb2FkZWQ6ICVzIiwgdG9TdHJpbmcobG9hZGVkKS51dGY4KCkuZGF0YSgpKTsKKyAgICBy
ZXR1cm4gbG9hZGVkOworfQogCi0gICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJBIiArIFN0cmlu
Zzo6bnVtYmVyKGkpOwotICAgICAgICB2YWxpZEF1ZGlvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQp
OwotICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fYXVkaW9UcmFja3Muc2l6ZSgp
KSkgewotICAgICAgICAgICAgUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlz
dGluZ1RyYWNrID0gbV9hdWRpb1RyYWNrcy5nZXQoc3RyZWFtSWQpOwotICAgICAgICAgICAgaWYg
KGV4aXN0aW5nVHJhY2spIHsKLSAgICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRl
eChpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNv
bnN0Cit7CisgICAgaWYgKG1fZXJyb3JPY2N1cmVkIHx8IG1fbG9hZGluZ1N0YWxsZWQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBhdXRvIHRyYWNrID0gQXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0cigqdGhpcyksIGksIHBhZCk7Ci0gICAgICAg
IEFTU0VSVChzdHJlYW1JZCA9PSB0cmFjay0+aWQoKSk7Ci0gICAgICAgIG1fYXVkaW9UcmFja3Mu
YWRkKHN0cmVhbUlkLCB0cmFjayk7Ci0gICAgICAgIG1fcGxheWVyLT5hZGRBdWRpb1RyYWNrKCp0
cmFjayk7CisgICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkgeworICAg
ICAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiTGFzdCBuZXR3b3JrIHJlYWQgcG9zaXRp
b246ICUiIEdfR1VJTlQ2NF9GT1JNQVQgIiwgY3VycmVudDogJSIgR19HVUlOVDY0X0ZPUk1BVCwg
bV9yZWFkUG9zaXRpb25BdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MsIG1fbmV0d29ya1JlYWRQb3Np
dGlvbik7CisgICAgICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzID0gbV9yZWFkUG9zaXRpb25B
dExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MgPCBtX25ldHdvcmtSZWFkUG9zaXRpb247CisgICAgICAg
IG1fcmVhZFBvc2l0aW9uQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzID0gbV9uZXR3b3JrUmVhZFBv
c2l0aW9uOworICAgICAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiZGlkTG9hZGluZ1By
b2dyZXNzOiAlcyIsIGJvb2xGb3JQcmludGluZyhkaWRMb2FkaW5nUHJvZ3Jlc3MpKTsKKyAgICAg
ICAgcmV0dXJuIGRpZExvYWRpbmdQcm9ncmVzczsKICAgICB9CiAKLSAgICBwdXJnZUludmFsaWRB
dWRpb1RyYWNrcyh2YWxpZEF1ZGlvU3RyZWFtcyk7Ci0jZW5kaWYKKyAgICBpZiAoVU5MSUtFTFko
IW1fcGlwZWxpbmUgfHwgIWR1cmF0aW9uTWVkaWFUaW1lKCkgfHwgKCFpc01lZGlhU291cmNlKCkg
JiYgIXRvdGFsQnl0ZXMoKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3BsYXll
ci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKKyAgICBNZWRp
YVRpbWUgY3VycmVudE1heFRpbWVMb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CisgICAgYm9vbCBk
aWRMb2FkaW5nUHJvZ3Jlc3MgPSBjdXJyZW50TWF4VGltZUxvYWRlZCAhPSBtX21heFRpbWVMb2Fk
ZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7CisgICAgbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlk
TG9hZGluZ1Byb2dyZXNzID0gY3VycmVudE1heFRpbWVMb2FkZWQ7CisgICAgR1NUX0xPR19PQkpF
Q1QocGlwZWxpbmUoKSwgImRpZExvYWRpbmdQcm9ncmVzczogJXMiLCBib29sRm9yUHJpbnRpbmco
ZGlkTG9hZGluZ1Byb2dyZXNzKSk7CisgICAgcmV0dXJuIGRpZExvYWRpbmdQcm9ncmVzczsKIH0K
IAotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjp0ZXh0Q2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxh
eWVyKQordW5zaWduZWQgbG9uZyBsb25nIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90
YWxCeXRlcygpIGNvbnN0CiB7Ci0gICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRo
cmVhZE5vdGlmaWNhdGlvbjo6VGV4dENoYW5nZWQsIFtwbGF5ZXJdIHsKLSAgICAgICAgcGxheWVy
LT5ub3RpZnlQbGF5ZXJPZlRleHQoKTsKLSAgICB9KTsKLX0KKyAgICBpZiAobV9lcnJvck9jY3Vy
ZWQpCisgICAgICAgIHJldHVybiAwOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bm90aWZ5UGxheWVyT2ZUZXh0KCkKLXsKLSAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUg
fHwgIW1fc291cmNlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3RvdGFsQnl0ZXMpCisg
ICAgICAgIHJldHVybiBtX3RvdGFsQnl0ZXM7CiAKLSAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXli
aW4gfHwgaXNNZWRpYVNvdXJjZSgpKTsKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1
cm4gMDsKIAotICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKLSAgICBib29sIHVzZU1lZGlhU291cmNl
ID0gaXNNZWRpYVNvdXJjZSgpOwotICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRpYVNv
dXJjZSA/IG1fc291cmNlLmdldCgpIDogbV9waXBlbGluZS5nZXQoKTsKLSAgICBnX29iamVjdF9n
ZXQoZWxlbWVudCwgIm4tdGV4dCIsICZudW1UcmFja3MsIG51bGxwdHIpOworICAgIGlmIChpc0xp
dmVTdHJlYW0oKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlw
ZWxpbmUoKSwgIk1lZGlhIGhhcyAlZCB0ZXh0IHRyYWNrcyIsIG51bVRyYWNrcyk7CisgICAgR3N0
Rm9ybWF0IGZtdCA9IEdTVF9GT1JNQVRfQllURVM7CisgICAgZ2ludDY0IGxlbmd0aCA9IDA7Cisg
ICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fc291cmNlLmdldCgpLCBmbXQsICZs
ZW5ndGgpKSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAidG90YWxCeXRl
cyAlIiBHX0dJTlQ2NF9GT1JNQVQsIGxlbmd0aCk7CisgICAgICAgIG1fdG90YWxCeXRlcyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVuZ3RoKTsKKyAgICAgICAgbV9pc1N0cmVh
bWluZyA9ICFsZW5ndGg7CisgICAgICAgIHJldHVybiBtX3RvdGFsQnl0ZXM7CisgICAgfQogCi0g
ICAgaWYgKHVzZU1lZGlhU291cmNlKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIlRyYWNrcyBtYW5hZ2VkIGJ5IHNvdXJjZSBlbGVtZW50LiBCYWlsaW5nIG91dCBub3cu
Iik7Ci0gICAgICAgIHJldHVybjsKKyAgICAvLyBGYWxsIGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNv
dXJjZSBwYWRzIG1hbnVhbGx5LgorICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVnemlsbGEuZ25v
bWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg3NDkKKyAgICBHc3RJdGVyYXRvciogaXRlciA9IGdz
dF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMobV9zb3VyY2UuZ2V0KCkpOworICAgIGJvb2wgZG9u
ZSA9IGZhbHNlOworICAgIHdoaWxlICghZG9uZSkgeworICAgICAgICBHVmFsdWUgaXRlbSA9IEdf
VkFMVUVfSU5JVDsKKyAgICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dChpdGVyLCAmaXRl
bSkpIHsKKyAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6IHsKKyAgICAgICAgICAgIEdzdFBh
ZCogcGFkID0gc3RhdGljX2Nhc3Q8R3N0UGFkKj4oZ192YWx1ZV9nZXRfb2JqZWN0KCZpdGVtKSk7
CisgICAgICAgICAgICBnaW50NjQgcGFkTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGlmIChnc3Rf
cGFkX3F1ZXJ5X2R1cmF0aW9uKHBhZCwgZm10LCAmcGFkTGVuZ3RoKSAmJiBwYWRMZW5ndGggPiBs
ZW5ndGgpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gcGFkTGVuZ3RoOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgorICAg
ICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdGVyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKKyAgICAgICAgICAgIEZBTExUSFJPVUdI
OworICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICAgICAgZG9uZSA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGdfdmFsdWVfdW5z
ZXQoJml0ZW0pOwogICAgIH0KIAotICAgIFZlY3RvcjxTdHJpbmc+IHZhbGlkVGV4dFN0cmVhbXM7
Ci0gICAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKLSAgICAgICAgR1Jl
ZlB0cjxHc3RQYWQ+IHBhZDsKLSAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxp
bmUuZ2V0KCksICJnZXQtdGV4dC1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsKLSAg
ICAgICAgQVNTRVJUKHBhZCk7CisgICAgZ3N0X2l0ZXJhdG9yX2ZyZWUoaXRlcik7CiAKLSAgICAg
ICAgLy8gV2UgY2FuJ3QgYXNzdW1lIHRoZSBwYWQgaGFzIGEgc3RpY2t5IGV2ZW50IGhlcmUgbGlr
ZSBpbXBsZW1lbnRlZCBpbgotICAgICAgICAvLyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVh
bWVyIGJlY2F1c2UgaXQgbWlnaHQgYmUgZW1pdHRlZCBhZnRlciB0aGUKLSAgICAgICAgLy8gdHJh
Y2sgd2FzIGNyZWF0ZWQuIFNvIGZhbGxiYWNrIHRvIGEgZHVtbXkgc3RyZWFtIElEIGxpa2UgaW4g
dGhlIEF1ZGlvCi0gICAgICAgIC8vIGFuZCBWaWRlbyB0cmFja3MuCi0gICAgICAgIFN0cmluZyBz
dHJlYW1JZCA9ICJUIiArIFN0cmluZzo6bnVtYmVyKGkpOworICAgIEdTVF9JTkZPX09CSkVDVChw
aXBlbGluZSgpLCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9GT1JNQVQsIGxlbmd0aCk7CisgICAg
bV90b3RhbEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihsZW5ndGgpOwor
ICAgIG1faXNTdHJlYW1pbmcgPSAhbGVuZ3RoOworICAgIHJldHVybiBtX3RvdGFsQnl0ZXM7Cit9
CiAKLSAgICAgICAgdmFsaWRUZXh0U3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOwotICAgICAgICBp
ZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fdGV4dFRyYWNrcy5zaXplKCkpKSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFj
ayA9IG1fdGV4dFRyYWNrcy5nZXQoc3RyZWFtSWQpOwotICAgICAgICAgICAgaWYgKGV4aXN0aW5n
VHJhY2spIHsKLSAgICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpo
YXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJj
ZS5nZXQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgR1VuaXF1ZU91dFB0cjxjaGFy
PiBvcmlnaW5hbFVSSSwgcmVzb2x2ZWRVUkk7CisgICAgZ19vYmplY3RfZ2V0KG1fc291cmNlLmdl
dCgpLCAibG9jYXRpb24iLCAmb3JpZ2luYWxVUkkub3V0UHRyKCksICJyZXNvbHZlZC1sb2NhdGlv
biIsICZyZXNvbHZlZFVSSS5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgaWYgKCFvcmlnaW5hbFVS
SSB8fCAhcmVzb2x2ZWRVUkkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWdfc3Ry
Y21wMChvcmlnaW5hbFVSSS5nZXQoKSwgcmVzb2x2ZWRVUkkuZ2V0KCkpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIFJlZjxTZWN1cml0eU9yaWdpbj4gcmVzb2x2ZWRPcmlnaW4oU2VjdXJp
dHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoU3RyaW5nOjpmcm9tVVRGOChyZXNvbHZlZFVSSS5n
ZXQoKSkpKTsKKyAgICBSZWY8U2VjdXJpdHlPcmlnaW4+IHJlcXVlc3RlZE9yaWdpbihTZWN1cml0
eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyhTdHJpbmc6OmZyb21VVEY4KG9yaWdpbmFsVVJJLmdl
dCgpKSkpOworICAgIHJldHVybiByZXNvbHZlZE9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQo
cmVxdWVzdGVkT3JpZ2luLmdldCgpKTsKK30KKworT3B0aW9uYWw8Ym9vbD4gTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp3b3VsZFRhaW50T3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBv
cmlnaW4pIGNvbnN0Cit7CisgICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxMiwgMCkp
IHsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiQ2hlY2tpbmcgJXUgb3Jp
Z2lucyIsIG1fb3JpZ2lucy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIHJlc3BvbnNlT3Jp
Z2luIDogbV9vcmlnaW5zKSB7CisgICAgICAgICAgICBpZiAoIW9yaWdpbi5jYW5BY2Nlc3MoKnJl
c3BvbnNlT3JpZ2luKSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIkZvdW5kIHJlYWNoYWJsZSByZXNwb25zZSBvcmlnaW4iKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIGF1dG8g
dHJhY2sgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoaSwgcGFkKTsK
LSAgICAgICAgbV90ZXh0VHJhY2tzLmFkZChzdHJlYW1JZCwgdHJhY2suY29weVJlZigpKTsKLSAg
ICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjayh0cmFjay5nZXQoKSk7CisgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk5vIHZhbGlkIHJlc3BvbnNlIG9yaWdpbiBmb3VuZCIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcHVyZ2VJbnZhbGlkVGV4dFRy
YWNrcyh2YWxpZFRleHRTdHJlYW1zKTsKKyAgICAvLyBHU3RyZWFtZXIgPCAxLjEyIGhhcyBhbiBp
bmNvbXBsZXRlIHVyaWRvd25sb2FkZXIgaW1wbGVtZW50YXRpb24gc28gd2UKKyAgICAvLyBjYW4n
dCB1c2UgV2ViS2l0V2ViU3JjIGZvciBhZGFwdGl2ZSBmcmFnbWVudHMgZG93bmxvYWRpbmcgaWYg
dGhpcworICAgIC8vIHZlcnNpb24gaXMgZGV0ZWN0ZWQuCisgICAgVU5VU0VEX1BBUkFNKG9yaWdp
bik7CisgICAgcmV0dXJuIG1faGFzVGFpbnRlZE9yaWdpbjsKIH0KIAotR3N0Rmxvd1JldHVybiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1RleHRTYW1wbGVDYWxsYmFjayhNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzaW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9uKCkKIHsKLSAgICBwbGF5ZXItPm5ld1Rl
eHRTYW1wbGUoKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgR3N0TWVzc2FnZSogbWVz
c2FnZSA9IGdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlKEdTVF9PQkpFQ1QobV9waXBlbGlu
ZS5nZXQoKSksIEdTVF9TVEFURV9QQVVTRUQpOworICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2Fn
ZShtX3BpcGVsaW5lLmdldCgpLCBtZXNzYWdlKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Om5ld1RleHRTYW1wbGUoKQorI2lmIEVOQUJMRShXRUJfQVVESU8pCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRlcigp
CiB7Ci0gICAgaWYgKCFtX3RleHRBcHBTaW5rKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFt
X2F1ZGlvU291cmNlUHJvdmlkZXIpCisgICAgICAgIG1fYXVkaW9Tb3VyY2VQcm92aWRlciA9IG1h
a2VVbmlxdWU8QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcj4oKTsKK30KIAotICAgIEdSZWZQ
dHI8R3N0RXZlbnQ+IHN0cmVhbVN0YXJ0RXZlbnQgPSBhZG9wdEdSZWYoCi0gICAgICAgIGdzdF9w
YWRfZ2V0X3N0aWNreV9ldmVudChtX3RleHRBcHBTaW5rUGFkLmdldCgpLCBHU1RfRVZFTlRfU1RS
RUFNX1NUQVJULCAwKSk7CitBdWRpb1NvdXJjZVByb3ZpZGVyKiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmF1ZGlvU291cmNlUHJvdmlkZXIoKQoreworICAgIGVuc3VyZUF1ZGlvU291cmNl
UHJvdmlkZXIoKTsKKyAgICByZXR1cm4gbV9hdWRpb1NvdXJjZVByb3ZpZGVyLmdldCgpOworfQor
I2VuZGlmCiAKLSAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlOwotICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZShtX3RleHRBcHBTaW5rLmdldCgpLCAicHVsbC1zYW1wbGUiLCAmc2FtcGxlLm91
dFB0cigpLCBudWxscHRyKTsKLSAgICBBU1NFUlQoc2FtcGxlKTsKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQoKQoreworICAgIE1lZGlhVGltZSBwcmV2
aW91c0R1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKKyAgICBtX2NhY2hlZER1cmF0aW9u
ID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwogCi0gICAgaWYgKHN0cmVhbVN0YXJ0RXZlbnQp
IHsKLSAgICAgICAgYm9vbCBmb3VuZCA9IEZBTFNFOwotICAgICAgICBjb25zdCBnY2hhciogaWQ7
Ci0gICAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQoc3RyZWFtU3RhcnRFdmVudC5n
ZXQoKSwgJmlkKTsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdGV4dFRyYWNrcy52YWx1
ZXMoKSkgewotICAgICAgICAgICAgaWYgKCFzdHJjbXAodHJhY2stPnN0cmVhbUlkKCkudXRmOCgp
LmRhdGEoKSwgaWQpKSB7Ci0gICAgICAgICAgICAgICAgdHJhY2stPmhhbmRsZVNhbXBsZShzYW1w
bGUpOwotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWZvdW5kKQotICAgICAg
ICAgICAgR1NUX1dBUk5JTkcoIkdvdCBzYW1wbGUgd2l0aCB1bmtub3duIHN0cmVhbSBJRCAlcy4i
LCBpZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEdTVF9XQVJOSU5HKCJVbmFibGUgdG8gaGFuZGxl
IHNhbXBsZSB3aXRoIG5vIHN0cmVhbSBzdGFydCBldmVudC4iKTsKKyAgICAvLyBBdm9pZCBlbWl0
aW5nIGR1cmF0aW9uY2hhbmdlZCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgcHJldmlvdXMKKyAgICAv
LyBkdXJhdGlvbiB3YXMgMCBiZWNhdXNlIHRoYXQgY2FzZSBpcyBhbHJlYWR5IGhhbmRsZWQgYnkg
dGhlCisgICAgLy8gSFRNTE1lZGlhRWxlbWVudC4KKyAgICBpZiAocHJldmlvdXNEdXJhdGlvbiAm
JiBkdXJhdGlvbk1lZGlhVGltZSgpICE9IHByZXZpb3VzRHVyYXRpb24pCisgICAgICAgIG1fcGxh
eWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKIH0KLSNlbmRpZgogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZShmbG9hdCByYXRlKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwKEdzdEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQpCiB7Ci0g
ICAgLy8gSGlnaGVyIHJhdGUgY2F1c2VzIGNyYXNoLgotICAgIHJhdGUgPSBjbGFtcFRvKHJhdGUs
IC0yMC4wLCAyMC4wKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTb3VyY2Ug
ZWxlbWVudCBzZXQtdXAgZm9yICVzIiwgR1NUX0VMRU1FTlRfTkFNRShzb3VyY2VFbGVtZW50KSk7
CiAKLSAgICAvLyBBdm9pZCB1c2VsZXNzIHBsYXliYWNrIHJhdGUgdXBkYXRlLgotICAgIGlmICht
X3BsYXliYWNrUmF0ZSA9PSByYXRlKSB7Ci0gICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgdGhhdCB1
cHBlciBsYXllcnMgd2VyZSBub3RpZmllZCBpZiByYXRlIHdhcyBzZXQKKyAgICBpZiAoV0VCS0lU
X0lTX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpICYmIEdTVF9PQkpFQ1RfUEFSRU5UKG1fc291cmNl
LmdldCgpKSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKEdT
VF9FTEVNRU5UX1BBUkVOVChtX3NvdXJjZS5nZXQoKSksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50
ZXI+KHVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNrKSwgdGhpcyk7CiAKLSAgICAgICAg
aWYgKCFtX2NoYW5naW5nUmF0ZSAmJiBtX3BsYXllci0+cmF0ZSgpICE9IG1fcGxheWJhY2tSYXRl
KQotICAgICAgICAgICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgbV9zb3VyY2UgPSBzb3VyY2VFbGVtZW50OwogCi0gICAgaWYgKGlzTGl2ZVN0
cmVhbSgpKSB7Ci0gICAgICAgIC8vIG5vdGlmeSB1cHBlciBsYXllcnMgdGhhdCB3ZSBjYW5ub3Qg
aGFuZGxlIHBhc3NlZCByYXRlLgotICAgICAgICBtX2NoYW5naW5nUmF0ZSA9IGZhbHNlOwotICAg
ICAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChX
RUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkpIHsKKyAgICAgICAgd2ViS2l0V2ViU3Jj
U2V0TWVkaWFQbGF5ZXIoV0VCS0lUX1dFQl9TUkNfQ0FTVChtX3NvdXJjZS5nZXQoKSksIG1fcGxh
eWVyKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChHU1RfRUxFTUVOVF9QQVJFTlQobV9zb3Vy
Y2UuZ2V0KCkpLCAiZWxlbWVudC1hZGRlZCIsIEdfQ0FMTEJBQ0sodXJpRGVjb2RlQmluRWxlbWVu
dEFkZGVkQ2FsbGJhY2spLCB0aGlzKTsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIH0g
ZWxzZSBpZiAoV0VCS0lUX0lTX01FRElBX1NUUkVBTV9TUkMoc291cmNlRWxlbWVudCkpIHsKKyAg
ICAgICAgYXV0byBzdHJlYW0gPSBtX3N0cmVhbVByaXZhdGUuZ2V0KCk7CisgICAgICAgIEFTU0VS
VChzdHJlYW0pOworICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldFN0cmVhbShXRUJLSVRf
TUVESUFfU1RSRUFNX1NSQyhzb3VyY2VFbGVtZW50KSwgc3RyZWFtKTsKKyNlbmRpZgogICAgIH0K
K30KIAotICAgIEdzdFN0YXRlIHN0YXRlOwotICAgIEdzdFN0YXRlIHBlbmRpbmc7Cit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzQ2FsbGJh
Y2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIsIEdPYmplY3QqIG9iamVjdCkK
K3sKKyAgICBwbGF5ZXItPnNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyhvYmplY3QpOworfQogCi0g
ICAgbV9wbGF5YmFja1JhdGUgPSByYXRlOwotICAgIG1fY2hhbmdpbmdSYXRlID0gdHJ1ZTsKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMo
R09iamVjdCogb2JqZWN0KQoreworICAgIGlmIChnX3N0cmNtcDAoR19PQkpFQ1RfVFlQRV9OQU1F
KG9iamVjdCksICJHc3RQdWxzZVNpbmsiKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJnBlbmRpbmcsIDApOwor
ICAgIGNvbnN0IGNoYXIqIHJvbGUgPSBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJJc1Zp
ZGVvKCkgPyAidmlkZW8iIDogIm11c2ljIjsKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGdzdF9zdHJ1Y3R1cmVfbmV3KCJzdHJlYW0tcHJvcGVydGllcyIsICJtZWRpYS5yb2xlIiwgR19U
WVBFX1NUUklORywgcm9sZSwgbnVsbHB0cik7CisgICAgZ19vYmplY3Rfc2V0KG9iamVjdCwgInN0
cmVhbS1wcm9wZXJ0aWVzIiwgc3RydWN0dXJlLCBudWxscHRyKTsKKyAgICBnc3Rfc3RydWN0dXJl
X2ZyZWUoc3RydWN0dXJlKTsKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBlbGVtZW50TmFtZShnc3Rf
ZWxlbWVudF9nZXRfbmFtZShHU1RfRUxFTUVOVChvYmplY3QpKSk7CisgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiU2V0IG1lZGlhLnJvbGUgYXMgJXMgYXQgJXMiLCByb2xlLCBlbGVt
ZW50TmFtZS5nZXQoKSk7Cit9CiAKLSAgICBpZiAoIXJhdGUpIHsKLSAgICAgICAgbV9jaGFuZ2lu
Z1JhdGUgPSBmYWxzZTsKLSAgICAgICAgbV9wbGF5YmFja1JhdGVQYXVzZSA9IHRydWU7Ci0gICAg
ICAgIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUEFVU0VEICYmIHBlbmRpbmcgIT0gR1NUX1NUQVRF
X1BBVVNFRCkKLSAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNF
RCk7Ci0gICAgICAgIHJldHVybjsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
b3VyY2VTZXR1cENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyLCBH
c3RFbGVtZW50KiBzb3VyY2VFbGVtZW50KQoreworICAgIHBsYXllci0+c291cmNlU2V0dXAoc291
cmNlRWxlbWVudCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjaGFu
Z2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlIG5ld1N0YXRlKQoreworICAgIEFTU0VSVChtX3BpcGVs
aW5lKTsKKworICAgIEdzdFN0YXRlIGN1cnJlbnRTdGF0ZTsKKyAgICBHc3RTdGF0ZSBwZW5kaW5n
OworCisgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50
U3RhdGUsICZwZW5kaW5nLCAwKTsKKyAgICBpZiAoY3VycmVudFN0YXRlID09IG5ld1N0YXRlIHx8
IHBlbmRpbmcgPT0gbmV3U3RhdGUpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiUmVqZWN0ZWQgc3RhdGUgY2hhbmdlIHRvICVzIGZyb20gJXMgd2l0aCAlcyBwZW5kaW5n
IiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpLAorICAgICAgICAgICAgZ3N0
X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUocGVuZGluZykpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBp
ZiAoKHN0YXRlICE9IEdTVF9TVEFURV9QTEFZSU5HICYmIHN0YXRlICE9IEdTVF9TVEFURV9QQVVT
RUQpCi0gICAgICAgIHx8IChwZW5kaW5nID09IEdTVF9TVEFURV9QQVVTRUQpKQotICAgICAgICBy
ZXR1cm47CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ2hhbmdpbmcgc3RhdGUg
Y2hhbmdlIHRvICVzIGZyb20gJXMgd2l0aCAlcyBwZW5kaW5nIiwgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUobmV3U3RhdGUpLAorICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShj
dXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CiAKLSAg
ICB1cGRhdGVQbGF5YmFja1JhdGUoKTsKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIGlmIChj
dXJyZW50U3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZICYmIG5ld1N0YXRlID49IEdTVF9TVEFURV9Q
QVVTRUQpCisgICAgICAgIGVuc3VyZUdMVmlkZW9TaW5rQ29udGV4dCgpOworI2VuZGlmCisKKyAg
ICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BpcGVsaW5lLmdldCgpLCBuZXdTdGF0ZSk7CisgICAgR3N0U3RhdGUgcGF1c2VkT3JQ
bGF5aW5nID0gbmV3U3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcgPyBHU1RfU1RBVEVfUEFVU0VE
IDogR1NUX1NUQVRFX1BMQVlJTkc7CisgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBwYXVzZWRPclBs
YXlpbmcgJiYgc2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYSB0aW1lciB3aGVuIGVudGVyaW5n
IHRoZSBSRUFEWSBzdGF0ZSBzbyB0aGF0IHdlIGNhbiBmcmVlIHJlc291cmNlcworICAgIC8vIGlm
IHdlIHN0YXkgZm9yIHRvbyBsb25nIG9uIFJFQURZLgorICAgIC8vIEFsc28gbGV0cyByZW1vdmUg
dGhlIHRpbWVyIGlmIHdlIHJlcXVlc3QgYSBzdGF0ZSBjaGFuZ2UgZm9yIGFueSBzdGF0ZSBvdGhl
ciB0aGFuIFJFQURZLgorICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTczNTQKKyAgICBpZiAobmV3U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZ
ICYmICFtX3JlYWR5VGltZXJIYW5kbGVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgLy8gTWF4IGlu
dGVydmFsIGluIHNlY29uZHMgdG8gc3RheSBpbiB0aGUgUkVBRFkgc3RhdGUgb24gbWFudWFsCisg
ICAgICAgIC8vIHN0YXRlIGNoYW5nZSByZXF1ZXN0cy4KKyAgICAgICAgc3RhdGljIGNvbnN0IFNl
Y29uZHMgcmVhZHlTdGF0ZVRpbWVyRGVsYXkgeyAxX21pbiB9OworICAgICAgICBtX3JlYWR5VGlt
ZXJIYW5kbGVyLnN0YXJ0T25lU2hvdChyZWFkeVN0YXRlVGltZXJEZWxheSk7CisgICAgfSBlbHNl
IGlmIChuZXdTdGF0ZSAhPSBHU1RfU1RBVEVfUkVBRFkpCisgICAgICAgIG1fcmVhZHlUaW1lckhh
bmRsZXIuc3RvcCgpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWRvdWJsZSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnJhdGUoKSBjb25zdAordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnNldFBsYXliaW5VUkwoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIG1f
cGxheWJhY2tSYXRlOworICAgIC8vIENsZWFuIG91dCBldmVyeXRoaW5nIGFmdGVyIGZpbGU6Ly8g
dXJsIHBhdGguCisgICAgU3RyaW5nIGNsZWFuVVJMU3RyaW5nKHVybC5zdHJpbmcoKSk7CisgICAg
aWYgKHVybC5pc0xvY2FsRmlsZSgpKQorICAgICAgICBjbGVhblVSTFN0cmluZyA9IGNsZWFuVVJM
U3RyaW5nLnN1YnN0cmluZygwLCB1cmwucGF0aEVuZCgpKTsKKworICAgIG1fdXJsID0gVVJMKFVS
TCgpLCBjbGVhblVSTFN0cmluZyk7CisgICAgY29udmVydFRvSW50ZXJuYWxQcm90b2NvbChtX3Vy
bCk7CisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJMb2FkICVzIiwgbV91cmwuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCks
ICJ1cmkiLCBtX3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBudWxscHRyKTsKIH0KIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJl
c2VydmVzUGl0Y2gpCitzdGF0aWMgdm9pZCBzZXRTeW5jT25DbG9jayhHc3RFbGVtZW50ICplbGVt
ZW50LCBib29sIHN5bmMpCiB7Ci0gICAgbV9wcmVzZXJ2ZXNQaXRjaCA9IHByZXNlcnZlc1BpdGNo
OworICAgIGlmICghR1NUX0lTX0JJTihlbGVtZW50KSkgeworICAgICAgICBnX29iamVjdF9zZXQo
ZWxlbWVudCwgInN5bmMiLCBzeW5jLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEdzdEl0ZXJhdG9yKiBpdCA9IGdzdF9iaW5faXRlcmF0ZV9zaW5rcyhHU1RfQklOKGVsZW1l
bnQpKTsKKyAgICB3aGlsZSAoZ3N0X2l0ZXJhdG9yX2ZvcmVhY2goaXQsIChHc3RJdGVyYXRvckZv
cmVhY2hGdW5jdGlvbikoW10oY29uc3QgR1ZhbHVlKiBpdGVtLCB2b2lkKiBzeW5jUHRyKSB7Cisg
ICAgICAgIGJvb2wqIHN5bmMgPSBzdGF0aWNfY2FzdDxib29sKj4oc3luY1B0cik7CisgICAgICAg
IHNldFN5bmNPbkNsb2NrKEdTVF9FTEVNRU5UKGdfdmFsdWVfZ2V0X29iamVjdChpdGVtKSksICpz
eW5jKTsKKyAgICB9KSwgJnN5bmMpID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpCisgICAgICAgIGdz
dF9pdGVyYXRvcl9yZXN5bmMoaXQpOworICAgIGdzdF9pdGVyYXRvcl9mcmVlKGl0KTsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpidWZmZXJlZCgpIGNvbnN0Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6c3luY09uQ2xvY2soYm9vbCBzeW5jKQogewotICAgIGF1dG8gdGltZVJhbmdlcyA9IG1ha2VV
bmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPigpOwotICAgIGlmIChtX2Vycm9yT2NjdXJlZCB8fCBp
c0xpdmVTdHJlYW0oKSkKLSAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXM7CisgICAgc2V0U3luY09u
Q2xvY2sodmlkZW9TaW5rKCksIHN5bmMpOworICAgIHNldFN5bmNPbkNsb2NrKGF1ZGlvU2luaygp
LCBzeW5jKTsKK30KIAotICAgIE1lZGlhVGltZSBtZWRpYUR1cmF0aW9uID0gZHVyYXRpb25NZWRp
YVRpbWUoKTsKLSAgICBpZiAoIW1lZGlhRHVyYXRpb24gfHwgbWVkaWFEdXJhdGlvbi5pc1Bvc2l0
aXZlSW5maW5pdGUoKSkKLSAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXM7Cit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbygpCit7CisgICAgaWYgKFVO
TElLRUxZKCFtX3BpcGVsaW5lIHx8ICFtX3NvdXJjZSkpCisgICAgICAgIHJldHVybjsKIAotICAg
IEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9uZXdfYnVmZmVy
aW5nKEdTVF9GT1JNQVRfUEVSQ0VOVCkpOworICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8
fCBpc01lZGlhU291cmNlKCkpOwogCi0gICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3BpcGVs
aW5lLmdldCgpLCBxdWVyeS5nZXQoKSkpCi0gICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOworICAg
IGdpbnQgbnVtVHJhY2tzID0gMDsKKyAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNv
dXJjZSgpOworICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRpYVNvdXJjZSA/IG1fc291
cmNlLmdldCgpIDogbV9waXBlbGluZS5nZXQoKTsKKyAgICBnX29iamVjdF9nZXQoZWxlbWVudCwg
Im4tdmlkZW8iLCAmbnVtVHJhY2tzLCBudWxscHRyKTsKIAotICAgIGd1aW50IG51bUJ1ZmZlcmlu
Z1JhbmdlcyA9IGdzdF9xdWVyeV9nZXRfbl9idWZmZXJpbmdfcmFuZ2VzKHF1ZXJ5LmdldCgpKTsK
LSAgICBmb3IgKGd1aW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1CdWZmZXJpbmdSYW5nZXM7IGlu
ZGV4KyspIHsKLSAgICAgICAgZ2ludDY0IHJhbmdlU3RhcnQgPSAwLCByYW5nZVN0b3AgPSAwOwot
ICAgICAgICBpZiAoZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UocXVlcnkuZ2V0
KCksIGluZGV4LCAmcmFuZ2VTdGFydCwgJnJhbmdlU3RvcCkpIHsKLSAgICAgICAgICAgIHVpbnQ2
NF90IHN0YXJ0VGltZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQodG9Hc3RVbnNp
Z25lZDY0VGltZShtZWRpYUR1cmF0aW9uKSwgcmFuZ2VTdGFydCwgR1NUX0ZPUk1BVF9QRVJDRU5U
X01BWCk7Ci0gICAgICAgICAgICB1aW50NjRfdCBzdG9wVGltZSA9IGdzdF91dGlsX3VpbnQ2NF9z
Y2FsZV9pbnRfcm91bmQodG9Hc3RVbnNpZ25lZDY0VGltZShtZWRpYUR1cmF0aW9uKSwgcmFuZ2VT
dG9wLCBHU1RfRk9STUFUX1BFUkNFTlRfTUFYKTsKLSAgICAgICAgICAgIHRpbWVSYW5nZXMtPmFk
ZChNZWRpYVRpbWUoc3RhcnRUaW1lLCBHU1RfU0VDT05EKSwgTWVkaWFUaW1lKHN0b3BUaW1lLCBH
U1RfU0VDT05EKSk7Ci0gICAgICAgIH0KKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
Ik1lZGlhIGhhcyAlZCB2aWRlbyB0cmFja3MiLCBudW1UcmFja3MpOworCisgICAgYm9vbCBvbGRI
YXNWaWRlbyA9IG1faGFzVmlkZW87CisgICAgbV9oYXNWaWRlbyA9IG51bVRyYWNrcyA+IDA7Cisg
ICAgaWYgKG9sZEhhc1ZpZGVvICE9IG1faGFzVmlkZW8pCisgICAgICAgIG1fcGxheWVyLT5jaGFy
YWN0ZXJpc3RpY0NoYW5nZWQoKTsKKworICAgIGlmIChtX2hhc1ZpZGVvKQorICAgICAgICBtX3Bs
YXllci0+c2l6ZUNoYW5nZWQoKTsKKworICAgIGlmICh1c2VNZWRpYVNvdXJjZSkgeworICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJUcmFja3MgbWFuYWdlZCBieSBzb3VyY2Ug
ZWxlbWVudC4gQmFpbGluZyBvdXQgbm93LiIpOworICAgICAgICBtX3BsYXllci0+Y2xpZW50KCku
bWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBtb3JlIGdlbmVyYWwgbWF4VGltZUxvYWRlZCgp
IGlmIG5vIHJhbmdlIGhhcwotICAgIC8vIGJlZW4gZm91bmQuCi0gICAgaWYgKCF0aW1lUmFuZ2Vz
LT5sZW5ndGgoKSkgewotICAgICAgICBNZWRpYVRpbWUgbG9hZGVkID0gbWF4VGltZUxvYWRlZCgp
OwotICAgICAgICBpZiAobG9hZGVkLmlzVmFsaWQoKSAmJiBsb2FkZWQpCi0gICAgICAgICAgICB0
aW1lUmFuZ2VzLT5hZGQoTWVkaWFUaW1lOjp6ZXJvVGltZSgpLCBsb2FkZWQpOworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZFZpZGVvU3RyZWFtczsKKyAg
ICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgeworICAgICAgICBHUmVmUHRy
PEdzdFBhZD4gcGFkOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9waXBlbGluZS5n
ZXQoKSwgImdldC12aWRlby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAg
ICAgQVNTRVJUKHBhZCk7CisKKyAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIlYiICsgU3RyaW5n
OjpudW1iZXIoaSk7CisgICAgICAgIHZhbGlkVmlkZW9TdHJlYW1zLmFwcGVuZChzdHJlYW1JZCk7
CisgICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV92aWRlb1RyYWNrcy5zaXplKCkp
KSB7CisgICAgICAgICAgICBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0
aW5nVHJhY2sgPSBtX3ZpZGVvVHJhY2tzLmdldChzdHJlYW1JZCk7CisgICAgICAgICAgICBpZiAo
ZXhpc3RpbmdUcmFjaykgeworICAgICAgICAgICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4
KGkpOworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrLT5wYWQoKSA9PSBwYWQpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgYXV0byB0cmFjayA9IFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUo
bWFrZVdlYWtQdHIoKnRoaXMpLCBpLCBwYWQpOworICAgICAgICBBU1NFUlQoc3RyZWFtSWQgPT0g
dHJhY2stPmlkKCkpOworICAgICAgICBtX3ZpZGVvVHJhY2tzLmFkZChzdHJlYW1JZCwgdHJhY2su
Y29weVJlZigpKTsKKyAgICAgICAgbV9wbGF5ZXItPmFkZFZpZGVvVHJhY2sodHJhY2suZ2V0KCkp
OwogICAgIH0KIAotICAgIHJldHVybiB0aW1lUmFuZ2VzOworICAgIHB1cmdlSW52YWxpZFZpZGVv
VHJhY2tzKHZhbGlkVmlkZW9TdHJlYW1zKTsKKyNlbmRpZgorCisgICAgbV9wbGF5ZXItPmNsaWVu
dCgpLm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2Up
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9TaW5rQ2Fwc0NoYW5nZWRD
YWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKIHsKLSAgICBHVW5p
cXVlT3V0UHRyPEdFcnJvcj4gZXJyOwotICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGRlYnVnOwot
ICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3I7Ci0gICAgYm9vbCBpc3N1ZUVycm9y
ID0gdHJ1ZTsKLSAgICBib29sIGF0dGVtcHROZXh0TG9jYXRpb24gPSBmYWxzZTsKLSAgICBjb25z
dCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUobWVz
c2FnZSk7Ci0gICAgR3N0U3RhdGUgcmVxdWVzdGVkU3RhdGUsIGN1cnJlbnRTdGF0ZTsKKyAgICBw
bGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpWaWRlb0Nh
cHNDaGFuZ2VkLCBbcGxheWVyXSB7CisgICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWaWRl
b0NhcHMoKTsKKyAgICB9KTsKK30KIAotICAgIG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNl
ZWtQb3NpdGlvbiA9IGZhbHNlOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5v
dGlmeVBsYXllck9mVmlkZW9DYXBzKCkKK3sKKyAgICBtX3ZpZGVvU2l6ZSA9IEludFNpemUoKTsK
KyAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVy
KTsKK30KIAotICAgIGlmIChzdHJ1Y3R1cmUpIHsKLSAgICAgICAgY29uc3QgZ2NoYXIqIG1lc3Nh
Z2VUeXBlTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5v
dGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpBdWRpb0NoYW5nZWQsIFtwbGF5ZXJdIHsKKyAg
ICAgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZkF1ZGlvKCk7CisgICAgfSk7Cit9CiAKLSAgICAg
ICAgLy8gUmVkaXJlY3QgbWVzc2FnZXMgYXJlIHNlbnQgZnJvbSBlbGVtZW50cywgbGlrZSBxdGRl
bXV4LCB0bwotICAgICAgICAvLyBub3RpZnkgb2YgdGhlIG5ldyBsb2NhdGlvbihzKSBvZiB0aGUg
bWVkaWEuCi0gICAgICAgIGlmICghZ19zdHJjbXAwKG1lc3NhZ2VUeXBlTmFtZSwgInJlZGlyZWN0
IikpIHsKLSAgICAgICAgICAgIG1lZGlhTG9jYXRpb25DaGFuZ2VkKG1lc3NhZ2UpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6Om5vdGlmeVBsYXllck9mQXVkaW8oKQoreworICAgIGlmIChVTkxJS0VMWSghbV9w
aXBlbGluZSB8fCAhbV9zb3VyY2UpKQorICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSBpZ25v
cmUgc3RhdGUgY2hhbmdlcyBmcm9tIGludGVybmFsIGVsZW1lbnRzLiBUaGV5IGFyZSBmb3J3YXJk
ZWQgdG8gcGxheWJpbjIgYW55d2F5LgotICAgIGJvb2wgbWVzc2FnZVNvdXJjZUlzUGxheWJpbiA9
IEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSA9PSByZWludGVycHJldF9jYXN0PEdzdE9iamVjdCo+
KG1fcGlwZWxpbmUuZ2V0KCkpOworICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01l
ZGlhU291cmNlKCkpOwogCi0gICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIk1lc3NhZ2Ug
JXMgcmVjZWl2ZWQgZnJvbSBlbGVtZW50ICVzIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1lc3Nh
Z2UpLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0gICAgc3dpdGNoIChHU1RfTUVT
U0FHRV9UWVBFKG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKLSAgICAg
ICAgaWYgKG1fcmVzZXRQaXBlbGluZSB8fCAhbV9taXNzaW5nUGx1Z2luQ2FsbGJhY2tzLmlzRW1w
dHkoKSB8fCBtX2Vycm9yT2NjdXJlZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBnc3Rf
bWVzc2FnZV9wYXJzZV9lcnJvcihtZXNzYWdlLCAmZXJyLm91dFB0cigpLCAmZGVidWcub3V0UHRy
KCkpOwotICAgICAgICBHU1RfRVJST1IoIkVycm9yICVkOiAlcyAodXJsPSVzKSIsIGVyci0+Y29k
ZSwgZXJyLT5tZXNzYWdlLCBtX3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBnaW50
IG51bVRyYWNrcyA9IDA7CisgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2Uo
KTsKKyAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3NvdXJjZS5n
ZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7CisgICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJuLWF1
ZGlvIiwgJm51bVRyYWNrcywgbnVsbHB0cik7CiAKLSAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19E
T1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQ
SF9TSE9XX0FMTCwgIndlYmtpdC12aWRlby5lcnJvciIpOworICAgIEdTVF9JTkZPX09CSkVDVChw
aXBlbGluZSgpLCAiTWVkaWEgaGFzICVkIGF1ZGlvIHRyYWNrcyIsIG51bVRyYWNrcyk7CisgICAg
Ym9vbCBvbGRIYXNBdWRpbyA9IG1faGFzQXVkaW87CisgICAgbV9oYXNBdWRpbyA9IG51bVRyYWNr
cyA+IDA7CisgICAgaWYgKG9sZEhhc0F1ZGlvICE9IG1faGFzQXVkaW8pCisgICAgICAgIG1fcGxh
eWVyLT5jaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKTsKIAotICAgICAgICBlcnJvciA9IE1lZGlhUGxh
eWVyOjpFbXB0eTsKLSAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9T
VFJFQU1fRVJST1IsIEdTVF9TVFJFQU1fRVJST1JfQ09ERUNfTk9UX0ZPVU5EKQotICAgICAgICAg
ICAgfHwgZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NU
UkVBTV9FUlJPUl9XUk9OR19UWVBFKQotICAgICAgICAgICAgfHwgZ19lcnJvcl9tYXRjaGVzKGVy
ci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9GQUlMRUQpCi0gICAg
ICAgICAgICB8fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfQ09SRV9FUlJPUiwgR1NU
X0NPUkVfRVJST1JfTUlTU0lOR19QTFVHSU4pCi0gICAgICAgICAgICB8fCBnX2Vycm9yX21hdGNo
ZXMoZXJyLmdldCgpLCBHU1RfUkVTT1VSQ0VfRVJST1IsIEdTVF9SRVNPVVJDRV9FUlJPUl9OT1Rf
Rk9VTkQpKQotICAgICAgICAgICAgZXJyb3IgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7Ci0g
ICAgICAgIGVsc2UgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9TVFJFQU1fRVJS
T1IsIEdTVF9TVFJFQU1fRVJST1JfVFlQRV9OT1RfRk9VTkQpKSB7Ci0gICAgICAgICAgICAvLyBM
ZXQgdGhlIG1lZGlhUGxheWVyQ2xpZW50IGhhbmRsZSB0aGUgc3RyZWFtIGVycm9yLCBpbgotICAg
ICAgICAgICAgLy8gdGhpcyBjYXNlIHRoZSBIVE1MTWVkaWFFbGVtZW50IHdpbGwgZW1pdCBhIHN0
YWxsZWQKKyAgICBpZiAodXNlTWVkaWFTb3VyY2UpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChwaXBlbGluZSgpLCAiVHJhY2tzIG1hbmFnZWQgYnkgc291cmNlIGVsZW1lbnQuIEJhaWxpbmcg
b3V0IG5vdy4iKTsKKyAgICAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5l
VXBkYXRlZChtX3BsYXllcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCisgICAgVmVjdG9yPFN0cmluZz4gdmFsaWRBdWRpb1N0cmVhbXM7CisgICAg
Zm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKKyAgICAgICAgR1JlZlB0cjxH
c3RQYWQ+IHBhZDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0
KCksICJnZXQtYXVkaW8tcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAg
IEFTU0VSVChwYWQpOworCisgICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJBIiArIFN0cmluZzo6
bnVtYmVyKGkpOworICAgICAgICB2YWxpZEF1ZGlvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOwor
ICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fYXVkaW9UcmFja3Muc2l6ZSgpKSkg
eworICAgICAgICAgICAgUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGlu
Z1RyYWNrID0gbV9hdWRpb1RyYWNrcy5nZXQoc3RyZWFtSWQpOworICAgICAgICAgICAgaWYgKGV4
aXN0aW5nVHJhY2spIHsKKyAgICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChp
KTsKKyAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGF1dG8gdHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1h
a2VXZWFrUHRyKCp0aGlzKSwgaSwgcGFkKTsKKyAgICAgICAgQVNTRVJUKHN0cmVhbUlkID09IHRy
YWNrLT5pZCgpKTsKKyAgICAgICAgbV9hdWRpb1RyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrKTsK
KyAgICAgICAgbV9wbGF5ZXItPmFkZEF1ZGlvVHJhY2soKnRyYWNrKTsKKyAgICB9CisKKyAgICBw
dXJnZUludmFsaWRBdWRpb1RyYWNrcyh2YWxpZEF1ZGlvU3RyZWFtcyk7CisjZW5kaWYKKworICAg
IG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwor
fQorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnRleHRDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBw
bGF5ZXIpCit7CisgICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlm
aWNhdGlvbjo6VGV4dENoYW5nZWQsIFtwbGF5ZXJdIHsKKyAgICAgICAgcGxheWVyLT5ub3RpZnlQ
bGF5ZXJPZlRleHQoKTsKKyAgICB9KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om5vdGlmeVBsYXllck9mVGV4dCgpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVs
aW5lIHx8ICFtX3NvdXJjZSkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2lzTGVn
YWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOworCisgICAgZ2ludCBudW1UcmFja3MgPSAw
OworICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7CisgICAgR3N0RWxl
bWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVs
aW5lLmdldCgpOworICAgIGdfb2JqZWN0X2dldChlbGVtZW50LCAibi10ZXh0IiwgJm51bVRyYWNr
cywgbnVsbHB0cik7CisKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIk1lZGlhIGhh
cyAlZCB0ZXh0IHRyYWNrcyIsIG51bVRyYWNrcyk7CisKKyAgICBpZiAodXNlTWVkaWFTb3VyY2Up
IHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVHJhY2tzIG1hbmFnZWQg
Ynkgc291cmNlIGVsZW1lbnQuIEJhaWxpbmcgb3V0IG5vdy4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFZlY3RvcjxTdHJpbmc+IHZhbGlkVGV4dFN0cmVhbXM7CisgICAgZm9yIChn
aW50IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+
IHBhZDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCksICJn
ZXQtdGV4dC1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgQVNTRVJU
KHBhZCk7CisKKyAgICAgICAgLy8gV2UgY2FuJ3QgYXNzdW1lIHRoZSBwYWQgaGFzIGEgc3RpY2t5
IGV2ZW50IGhlcmUgbGlrZSBpbXBsZW1lbnRlZCBpbgorICAgICAgICAvLyBJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlR1N0cmVhbWVyIGJlY2F1c2UgaXQgbWlnaHQgYmUgZW1pdHRlZCBhZnRlciB0aGUK
KyAgICAgICAgLy8gdHJhY2sgd2FzIGNyZWF0ZWQuIFNvIGZhbGxiYWNrIHRvIGEgZHVtbXkgc3Ry
ZWFtIElEIGxpa2UgaW4gdGhlIEF1ZGlvCisgICAgICAgIC8vIGFuZCBWaWRlbyB0cmFja3MuCisg
ICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJUIiArIFN0cmluZzo6bnVtYmVyKGkpOworCisgICAg
ICAgIHZhbGlkVGV4dFN0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKKyAgICAgICAgaWYgKGkgPCBz
dGF0aWNfY2FzdDxnaW50PihtX3RleHRUcmFja3Muc2l6ZSgpKSkgeworICAgICAgICAgICAgUmVm
UHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX3Rl
eHRUcmFja3MuZ2V0KHN0cmVhbUlkKTsKKyAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrKSB7
CisgICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7CisgICAgICAgICAg
ICAgICAgaWYgKGV4aXN0aW5nVHJhY2stPnBhZCgpID09IHBhZCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHRy
YWNrID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKGksIHBhZCk7Cisg
ICAgICAgIG1fdGV4dFRyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrLmNvcHlSZWYoKSk7CisgICAg
ICAgIG1fcGxheWVyLT5hZGRUZXh0VHJhY2sodHJhY2suZ2V0KCkpOworICAgIH0KKworICAgIHB1
cmdlSW52YWxpZFRleHRUcmFja3ModmFsaWRUZXh0U3RyZWFtcyk7Cit9CisKK0dzdEZsb3dSZXR1
cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0U2FtcGxlQ2FsbGJhY2soTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgcGxheWVyLT5uZXdUZXh0
U2FtcGxlKCk7CisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNhbXBsZSgpCit7CisgICAgaWYgKCFtX3RleHRBcHBT
aW5rKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEdzdEV2ZW50PiBzdHJlYW1TdGFy
dEV2ZW50ID0gYWRvcHRHUmVmKAorICAgICAgICBnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQobV90
ZXh0QXBwU2lua1BhZC5nZXQoKSwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCkpOworCisgICAg
R1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV90
ZXh0QXBwU2luay5nZXQoKSwgInB1bGwtc2FtcGxlIiwgJnNhbXBsZS5vdXRQdHIoKSwgbnVsbHB0
cik7CisgICAgQVNTRVJUKHNhbXBsZSk7CisKKyAgICBpZiAoc3RyZWFtU3RhcnRFdmVudCkgewor
ICAgICAgICBib29sIGZvdW5kID0gRkFMU0U7CisgICAgICAgIGNvbnN0IGdjaGFyKiBpZDsKKyAg
ICAgICAgZ3N0X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydChzdHJlYW1TdGFydEV2ZW50LmdldCgp
LCAmaWQpOworICAgICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV90ZXh0VHJhY2tzLnZhbHVlcygp
KSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcCh0cmFjay0+c3RyZWFtSWQoKS51dGY4KCkuZGF0
YSgpLCBpZCkpIHsKKyAgICAgICAgICAgICAgICB0cmFjay0+aGFuZGxlU2FtcGxlKHNhbXBsZSk7
CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAg
ICBHU1RfV0FSTklORygiR290IHNhbXBsZSB3aXRoIHVua25vd24gc3RyZWFtIElEICVzLiIsIGlk
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkcoIlVuYWJsZSB0byBoYW5kbGUgc2Ft
cGxlIHdpdGggbm8gc3RyZWFtIHN0YXJ0IGV2ZW50LiIpOworfQorI2VuZGlmCisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpmaWxsVGltZXJGaXJlZCgpCit7CisgICAgaWYgKG1f
ZXJyb3JPY2N1cmVkKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltC
dWZmZXJpbmddIEFuIGVycm9yIG9jY3VycmVkLCBkaXNhYmxpbmcgdGhlIGZpbGwgdGltZXIiKTsK
KyAgICAgICAgbV9maWxsVGltZXIuc3RvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19idWZm
ZXJpbmcoR1NUX0ZPUk1BVF9QRVJDRU5UKSk7CisgICAgZG91YmxlIGZpbGxTdGF0dXMgPSAxMDAu
MDsKKyAgICBHc3RCdWZmZXJpbmdNb2RlIG1vZGUgPSBHU1RfQlVGRkVSSU5HX0RPV05MT0FEOwor
CisgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fc291cmNlLmdldCgpLCBxdWVyeS5nZXQoKSkp
IHsKKyAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0cyhxdWVyeS5nZXQoKSwg
Jm1vZGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgIGludCBwZXJjZW50
YWdlOworICAgICAgICBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQocXVlcnkuZ2V0
KCksIG51bGxwdHIsICZwZXJjZW50YWdlKTsKKyAgICAgICAgZmlsbFN0YXR1cyA9IHBlcmNlbnRh
Z2U7CisgICAgfSBlbHNlIGlmIChtX2h0dHBSZXNwb25zZVRvdGFsU2l6ZSkgeworICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBRdWVyeSBmYWlsZWQsIGZh
bGxpbmcgYmFjayB0byBuZXR3b3JrIHJlYWQgcG9zaXRpb24gZXN0aW1hdGlvbiIpOworICAgICAg
ICBmaWxsU3RhdHVzID0gMTAwLjAgKiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX25ldHdvcmtSZWFk
UG9zaXRpb24pIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2h0dHBSZXNwb25zZVRvdGFsU2l6ZSkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltC
dWZmZXJpbmddIFVuYWJsZSB0byBkZXRlcm1pbmUgb24tZGlzayBidWZmZXJpbmcgc3RhdHVzIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1cGRhdGVCdWZmZXJpbmdTdGF0dXMobW9k
ZSwgZmlsbFN0YXR1cyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjps
b2FkU3RhdGVDaGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRpbWVDaGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVTdGF0
ZXMoKTsKKyAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0
ZSBuZXR3b3JrRXJyb3IsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUsIGJvb2wg
Zm9yY2VOb3RpZmljYXRpb25zKQoreworICAgIEdTVF9XQVJOSU5HKCJMb2FkaW5nIGZhaWxlZCwg
ZXJyb3I6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcobmV0d29ya0Vycm9yKS51dGY4
KCkuZGF0YSgpKTsKKworICAgIG1fZXJyb3JPY2N1cmVkID0gdHJ1ZTsKKyAgICBpZiAoZm9yY2VO
b3RpZmljYXRpb25zIHx8IG1fbmV0d29ya1N0YXRlICE9IG5ldHdvcmtFcnJvcikgeworICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IG5ldHdvcmtFcnJvcjsKKyAgICAgICAgbV9wbGF5ZXItPm5ldHdv
cmtTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisgICAgaWYgKGZvcmNlTm90aWZpY2F0aW9ucyB8fCBt
X3JlYWR5U3RhdGUgIT0gcmVhZHlTdGF0ZSkgeworICAgICAgICBtX3JlYWR5U3RhdGUgPSByZWFk
eVN0YXRlOworICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisK
KyAgICAvLyBMb2FkaW5nIGZhaWxlZCwgcmVtb3ZlIHJlYWR5IHRpbWVyLgorICAgIG1fcmVhZHlU
aW1lckhhbmRsZXIuc3RvcCgpOworfQorCitHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZUF1ZGlvU2luaygpCit7CisgICAgbV9hdXRvQXVkaW9TaW5rID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdXRvYXVkaW9zaW5rIiwgbnVsbHB0cik7CisgICAgaWYg
KCFtX2F1dG9BdWRpb1NpbmspIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIkdTdHJlYW1lcidzIGF1
dG9hdWRpb3Npbmsgbm90IGZvdW5kLiBQbGVhc2UgY2hlY2sgeW91ciBnc3QtcGx1Z2lucy1nb29k
IGluc3RhbGxhdGlvbiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9hdXRvQXVkaW9TaW5rLmdldCgpLCAiY2hpbGQtYWRk
ZWQiLCBHX0NBTExCQUNLKHNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKSwgdGhpcyk7
CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2lua0JpbiA9
IGdzdF9iaW5fbmV3KCJhdWRpby1zaW5rIik7CisgICAgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRl
cigpOworICAgIG1fYXVkaW9Tb3VyY2VQcm92aWRlci0+Y29uZmlndXJlQXVkaW9CaW4oYXVkaW9T
aW5rQmluLCBudWxscHRyKTsKKyAgICByZXR1cm4gYXVkaW9TaW5rQmluOworI2Vsc2UKKyAgICBy
ZXR1cm4gbV9hdXRvQXVkaW9TaW5rLmdldCgpOworI2VuZGlmCit9CisKK0dzdEVsZW1lbnQqIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9TaW5rKCkgY29uc3QKK3sKKyAgICBHc3RF
bGVtZW50KiBzaW5rOworICAgIGdfb2JqZWN0X2dldChtX3BpcGVsaW5lLmdldCgpLCAiYXVkaW8t
c2luayIsICZzaW5rLCBudWxscHRyKTsKKyAgICByZXR1cm4gc2luazsKK30KKworTWVkaWFUaW1l
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJhY2tQb3NpdGlvbigpIGNvbnN0Cit7
CisgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiaXNFbmRSZWFjaGVkOiAlcywgc2Vl
a2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2lzRW5kUmVhY2hlZCks
IGJvb2xGb3JQcmludGluZyhtX3NlZWtpbmcpLCBtX3NlZWtUaW1lLnRvU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIG1fc2Vla2luZykKKyAgICAgICAg
cmV0dXJuIG1fc2Vla1RpbWU7CisKKyAgICAvLyBUaGlzIGNvbnN0YW50IHNob3VsZCByZW1haW4g
bG93ZXIgdGhhbiBIVE1MTWVkaWFFbGVtZW50J3MgbWF4VGltZXVwZGF0ZUV2ZW50RnJlcXVlbmN5
LgorICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIHBvc2l0aW9uQ2FjaGVUaHJlc2hvbGQgPSAyMDBf
bXM7CisgICAgU2Vjb25kcyBub3cgPSBXVEY6OldhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VF
cG9jaCgpOworICAgIGlmIChtX2xhc3RRdWVyeVRpbWUgJiYgKG5vdyAtIG1fbGFzdFF1ZXJ5VGlt
ZS52YWx1ZSgpKSA8IHBvc2l0aW9uQ2FjaGVUaHJlc2hvbGQgJiYgbV9jYWNoZWRQb3NpdGlvbi5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiUmV0dXJu
aW5nIGNhY2hlZCBwb3NpdGlvbjogJXMiLCBtX2NhY2hlZFBvc2l0aW9uLnRvU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBtX2NhY2hlZFBvc2l0aW9uOworICAgIH0KKwor
ICAgIG1fbGFzdFF1ZXJ5VGltZSA9IG5vdzsKKworICAgIC8vIFBvc2l0aW9uIGlzIG9ubHkgYXZh
aWxhYmxlIGlmIG5vIGFzeW5jIHN0YXRlIGNoYW5nZSBpcyBnb2luZyBvbiBhbmQgdGhlIHN0YXRl
IGlzIGVpdGhlciBwYXVzZWQgb3IgcGxheWluZy4KKyAgICBnaW50NjQgcG9zaXRpb24gPSBHU1Rf
Q0xPQ0tfVElNRV9OT05FOworICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9z
aXRpb24oR1NUX0ZPUk1BVF9USU1FKTsKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBl
bGluZS5nZXQoKSwgcXVlcnkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVl
cnksIDAsICZwb3NpdGlvbik7CisgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKKworICAgIEdT
VF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgIlBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCAi
LCBjYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uOiAlcyIsIEdTVF9USU1FX0FS
R1MocG9zaXRpb24pLCBib29sRm9yUHJpbnRpbmcobV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVk
U2Vla1Bvc2l0aW9uKSk7CisKKyAgICBNZWRpYVRpbWUgcGxheWJhY2tQb3NpdGlvbiA9IE1lZGlh
VGltZTo6emVyb1RpbWUoKTsKKyAgICBHc3RDbG9ja1RpbWUgZ3N0cmVhbWVyUG9zaXRpb24gPSBz
dGF0aWNfY2FzdDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKTsKKyAgICBpZiAoR1NUX0NMT0NLX1RJ
TUVfSVNfVkFMSUQoZ3N0cmVhbWVyUG9zaXRpb24pKQorICAgICAgICBwbGF5YmFja1Bvc2l0aW9u
ID0gTWVkaWFUaW1lKGdzdHJlYW1lclBvc2l0aW9uLCBHU1RfU0VDT05EKTsKKyAgICBlbHNlIGlm
IChtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24pCisgICAgICAgIHBsYXli
YWNrUG9zaXRpb24gPSBtX3NlZWtUaW1lOworCisgICAgbV9jYWNoZWRQb3NpdGlvbiA9IHBsYXli
YWNrUG9zaXRpb247CisgICAgcmV0dXJuIHBsYXliYWNrUG9zaXRpb247Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0
cmVhbWVyOjpUcmFja1R5cGUgdHJhY2tUeXBlLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICAvLyBG
SVhNRTogUmVtb3ZlIGlzTWVkaWFTb3VyY2UoKSB0ZXN0IGJlbG93IHdoZW4gZml4aW5nIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI1MzEuCisgICAgaWYgKGlzTWVk
aWFTb3VyY2UoKSkgeworICAgICAgICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJBdWRpby9WaWRlby9UZXh0IHRyYWNrIHN3aXRjaGluZyBpcyBub3QgeWV0IHN1cHBvcnRlZCBi
eSB0aGUgTVNFIGJhY2tlbmQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25z
dCBjaGFyKiBwcm9wZXJ0eU5hbWU7CisgICAgY29uc3QgY2hhciogdHJhY2tUeXBlQXNTdHJpbmc7
CisgICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0ZWRTdHJlYW1zOworICAgIFN0cmluZyBzZWxlY3Rl
ZFN0cmVhbUlkOworCisgICAgR3N0U3RyZWFtKiBzdHJlYW0gPSBudWxscHRyOworCisgICAgaWYg
KCFtX2lzTGVnYWN5UGxheWJpbikgeworICAgICAgICBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxl
Y3Rpb25fZ2V0X3N0cmVhbShtX3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCksIGluZGV4KTsKKyAgICAg
ICAgaWYgKCFzdHJlYW0pIHsKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGlu
ZSgpLCAiTm8gc3RyZWFtIHRvIHNlbGVjdCBhdCBpbmRleCAldSIsIGluZGV4KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZWxlY3RlZFN0cmVhbUlkID0gU3RyaW5n
Ojpmcm9tVVRGOChnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtKSk7CisgICAgICAgIHNl
bGVjdGVkU3RyZWFtcy5hcHBlbmQoc2VsZWN0ZWRTdHJlYW1JZCk7CisgICAgfQorCisgICAgc3dp
dGNoICh0cmFja1R5cGUpIHsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRy
YWNrVHlwZTo6QXVkaW86CisgICAgICAgIHByb3BlcnR5TmFtZSA9ICJjdXJyZW50LWF1ZGlvIjsK
KyAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAiYXVkaW8iOworICAgICAgICBpZiAoIXNlbGVj
dGVkU3RyZWFtSWQuaXNFbXB0eSgpICYmIHNlbGVjdGVkU3RyZWFtSWQgPT0gbV9jdXJyZW50QXVk
aW9TdHJlYW1JZCkgeworICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICIl
cyBzdHJlYW06ICVzIGFscmVhZHkgc2VsZWN0ZWQsIG5vdCBkb2luZyBhbnl0aGluZy4iLCB0cmFj
a1R5cGVBc1N0cmluZywgc2VsZWN0ZWRTdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9jdXJyZW50VGV4dFN0cmVh
bUlkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJy
ZW50VGV4dFN0cmVhbUlkKTsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRWaWRlb1N0cmVhbUlkLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50Vmlk
ZW9TdHJlYW1JZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6VHJhY2tUeXBlOjpWaWRlbzoKKyAgICAgICAgcHJvcGVydHlOYW1lID0gImN1cnJl
bnQtdmlkZW8iOworICAgICAgICB0cmFja1R5cGVBc1N0cmluZyA9ICJ2aWRlbyI7CisgICAgICAg
IGlmICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0ZWRTdHJlYW1JZCA9PSBt
X2N1cnJlbnRWaWRlb1N0cmVhbUlkKSB7CisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlw
ZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMgYWxyZWFkeSBzZWxlY3RlZCwgbm90IGRvaW5nIGFueXRo
aW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5nLCBzZWxlY3RlZFN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX2N1cnJl
bnRBdWRpb1N0cmVhbUlkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5h
cHBlbmQobV9jdXJyZW50QXVkaW9TdHJlYW1JZCk7CisgICAgICAgIGlmICghbV9jdXJyZW50VGV4
dFN0cmVhbUlkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQo
bV9jdXJyZW50VGV4dFN0cmVhbUlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlRleHQ6CisgICAgICAgIHByb3BlcnR5TmFt
ZSA9ICJjdXJyZW50LXRleHQiOworICAgICAgICB0cmFja1R5cGVBc1N0cmluZyA9ICJ0ZXh0IjsK
KyAgICAgICAgaWYgKCFzZWxlY3RlZFN0cmVhbUlkLmlzRW1wdHkoKSAmJiBzZWxlY3RlZFN0cmVh
bUlkID09IG1fY3VycmVudFRleHRTdHJlYW1JZCkgeworICAgICAgICAgICAgR1NUX0lORk9fT0JK
RUNUKHBpcGVsaW5lKCksICIlcyBzdHJlYW06ICVzIGFscmVhZHkgc2VsZWN0ZWQsIG5vdCBkb2lu
ZyBhbnl0aGluZy4iLCB0cmFja1R5cGVBc1N0cmluZywgc2VsZWN0ZWRTdHJlYW1JZC51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
bV9jdXJyZW50QXVkaW9TdHJlYW1JZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzZWxlY3RlZFN0
cmVhbXMuYXBwZW5kKG1fY3VycmVudEF1ZGlvU3RyZWFtSWQpOworICAgICAgICBpZiAoIW1fY3Vy
cmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1z
LmFwcGVuZChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlVua25vd246CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgR1NUX0lO
Rk9fT0JKRUNUKHBpcGVsaW5lKCksICJFbmFibGluZyAlcyB0cmFjayB3aXRoIGluZGV4OiAldSIs
IHRyYWNrVHlwZUFzU3RyaW5nLCBpbmRleCk7CisgICAgaWYgKG1faXNMZWdhY3lQbGF5YmluKQor
ICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgcHJvcGVydHlOYW1lLCBpbmRl
eCwgbnVsbHB0cik7CisgICAgZWxzZSB7CisgICAgICAgIEdMaXN0KiBzZWxlY3RlZFN0cmVhbXNM
aXN0ID0gbnVsbHB0cjsKKworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmVhbUlkIDogc2Vs
ZWN0ZWRTdHJlYW1zKQorICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zTGlzdCA9IGdfbGlzdF9h
cHBlbmQoc2VsZWN0ZWRTdHJlYW1zTGlzdCwgZ19zdHJkdXAoc3RyZWFtSWQudXRmOCgpLmRhdGEo
KSkpOworCisgICAgICAgIC8vIFRPRE86IE1TRSBHc3RTdHJlYW0gQVBJIHN1cHBvcnQ6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI1MzEKKyAgICAgICAgZ3N0X2Vs
ZW1lbnRfc2VuZF9ldmVudChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X3NlbGVjdF9z
dHJlYW1zKHNlbGVjdGVkU3RyZWFtc0xpc3QpKTsKKyAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChz
ZWxlY3RlZFN0cmVhbXNMaXN0LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihnX2Zy
ZWUpKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRh
dGVUcmFja3MoKQoreworICAgIEFTU0VSVCghbV9pc0xlZ2FjeVBsYXliaW4pOworCisgICAgYm9v
bCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemUobV9zdHJlYW1Db2xsZWN0aW9uLmdldCgp
KTsKKworICAgIGJvb2wgb2xkSGFzQXVkaW8gPSBtX2hhc0F1ZGlvOworICAgIGJvb2wgb2xkSGFz
VmlkZW8gPSBtX2hhc1ZpZGVvOworICAgIC8vIE5ldyBzdHJlYW0gY29sbGVjdGlvbnMgb3ZlcnJp
ZGUgcHJldmlvdXMgb25lcy4KKyAgICBjbGVhclRyYWNrcygpOworICAgIHVuc2lnbmVkIHRleHRU
cmFja0luZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9IGdzdF9zdHJlYW1fY29sbGVj
dGlvbl9nZXRfc3RyZWFtKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQoKSwgaSk7CisgICAgICAgIFN0
cmluZyBzdHJlYW1JZChnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7Cisg
ICAgICAgIEdzdFN0cmVhbVR5cGUgdHlwZSA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlKHN0
cmVhbS5nZXQoKSk7CisKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiSW5z
cGVjdGluZyAlcyB0cmFjayB3aXRoIElEICVzIiwgZ3N0X3N0cmVhbV90eXBlX2dldF9uYW1lKHR5
cGUpLCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgaWYgKHR5cGUgJiBHU1RfU1RS
RUFNX1RZUEVfQVVESU8pCisgICAgICAgICAgICBDUkVBVEVfVFJBQ0soYXVkaW8sIEF1ZGlvKTsK
KyAgICAgICAgZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9WSURFTykKKyAgICAgICAg
ICAgIENSRUFURV9UUkFDSyh2aWRlbywgVmlkZW8pOworICAgICAgICBlbHNlIGlmICh0eXBlICYg
R1NUX1NUUkVBTV9UWVBFX1RFWFQgJiYgIXVzZU1lZGlhU291cmNlKSB7CisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorICAgICAgICAgICAgYXV0byB0cmFjayA9IEluYmFuZFRleHRUcmFja1ByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZSh0ZXh0VHJhY2tJbmRleCsrLCBzdHJlYW0pOworICAgICAgICAg
ICAgbV90ZXh0VHJhY2tzLmFkZChzdHJlYW1JZCwgdHJhY2suY29weVJlZigpKTsKKyAgICAgICAg
ICAgIG1fcGxheWVyLT5hZGRUZXh0VHJhY2sodHJhY2suZ2V0KCkpOworI2VuZGlmCisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25vd24gdHJhY2sgdHlwZSBmb3Vu
ZCBmb3Igc3RyZWFtICVzIiwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAg
aWYgKChvbGRIYXNWaWRlbyAhPSBtX2hhc1ZpZGVvKSB8fCAob2xkSGFzQXVkaW8gIT0gbV9oYXNB
dWRpbykpCisgICAgICAgIG1fcGxheWVyLT5jaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKTsKKworICAg
IGlmIChtX2hhc1ZpZGVvKQorICAgICAgICBtX3BsYXllci0+c2l6ZUNoYW5nZWQoKTsKKworICAg
IG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2xlYXJUcmFja3MoKQorewor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBDTEVBUl9UUkFDS1MobV9hdWRpb1RyYWNrcywg
bV9wbGF5ZXItPnJlbW92ZUF1ZGlvVHJhY2spOworICAgIENMRUFSX1RSQUNLUyhtX3ZpZGVvVHJh
Y2tzLCBtX3BsYXllci0+cmVtb3ZlVmlkZW9UcmFjayk7CisgICAgQ0xFQVJfVFJBQ0tTKG1fdGV4
dFRyYWNrcywgbV9wbGF5ZXItPnJlbW92ZVRleHRUcmFjayk7CisjZW5kaWYgLy8gRU5BQkxFKFZJ
REVPX1RSQUNLKQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9D
aGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7Cisg
ICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6Vmlk
ZW9DaGFuZ2VkLCBbcGxheWVyXSB7CisgICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWaWRl
bygpOworICAgIH0pOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0
UGlwZWxpbmUoR3N0RWxlbWVudCogcGlwZWxpbmUpCit7CisgICAgbV9waXBlbGluZSA9IHBpcGVs
aW5lOworCisgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVf
Z2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKKyAgICBnc3RfYnVzX3Nl
dF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBbXShHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdl
LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvJiBwbGF5ZXIgPSAqc3RhdGljX2Nh
c3Q8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKj4odXNlckRhdGEpOworCisgICAgICAgIGlm
IChwbGF5ZXIuaGFuZGxlU3luY01lc3NhZ2UobWVzc2FnZSkpIHsKKyAgICAgICAgICAgIGdzdF9t
ZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBHU1RfQlVTX1BBU1M7CisgICAgfSwgdGhpcywg
bnVsbHB0cik7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVT
eW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIGlmIChHU1RfTUVTU0FHRV9U
WVBFKG1lc3NhZ2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OICYmICFtX2lzTGVn
YWN5UGxheWJpbikgeworICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxl
Y3Rpb247CisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uKG1lc3Nh
Z2UsICZjb2xsZWN0aW9uLm91dFB0cigpKTsKKworICAgICAgICBpZiAoY29sbGVjdGlvbikgewor
ICAgICAgICAgICAgbV9zdHJlYW1Db2xsZWN0aW9uLnN3YXAoY29sbGVjdGlvbik7CisgICAgICAg
ICAgICBtX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6U3RyZWFtQ29s
bGVjdGlvbkNoYW5nZWQsIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgdGhpcy0+dXBkYXRlVHJh
Y2tzKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChHU1Rf
TUVTU0FHRV9UWVBFKG1lc3NhZ2UpICE9IEdTVF9NRVNTQUdFX05FRURfQ09OVEVYVCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnRleHRUeXBlOworICAgIGdz
dF9tZXNzYWdlX3BhcnNlX2NvbnRleHRfdHlwZShtZXNzYWdlLCAmY29udGV4dFR5cGUpOworICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkhhbmRsaW5nICVzIG5lZWQtY29udGV4dCBt
ZXNzYWdlIGZvciAlcyIsIGNvbnRleHRUeXBlLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdl
KSk7CisKKyAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgV0VCS0lUX1dFQl9TUkNfUExB
WUVSX0NPTlRFWFRfVFlQRV9OQU1FKSkgeworICAgICAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNv
bnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KFdFQktJVF9XRUJfU1JDX1BMQVlFUl9D
T05URVhUX1RZUEVfTkFNRSwgRkFMU0UpKTsKKyAgICAgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0
U3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkp
OworCisgICAgICAgIEFTU0VSVChtX3BsYXllcik7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
KGNvbnRleHRTdHJ1Y3R1cmUsICJwbGF5ZXIiLCBHX1RZUEVfUE9JTlRFUiwgbV9wbGF5ZXIsIG51
bGxwdHIpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChHU1Rf
TUVTU0FHRV9TUkMobWVzc2FnZSkpLCBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBHUmVmUHRyPEdzdENvbnRl
eHQ+IGVsZW1lbnRDb250ZXh0ID0gYWRvcHRHUmVmKHJlcXVlc3RHTENvbnRleHQoY29udGV4dFR5
cGUpKTsKKyAgICBpZiAoZWxlbWVudENvbnRleHQpIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X2NvbnRleHQoR1NUX0VMRU1FTlQobWVzc2FnZS0+c3JjKSwgZWxlbWVudENvbnRleHQuZ2V0KCkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9H
TCkKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisgICAgaWYgKCFnX3N0cmNtcDAoY29u
dGV4dFR5cGUsICJkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIikpIHsKKyAgICAg
ICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgICAgICBHU1RfRVJST1IoImNhbid0IGhh
bmRsZSBkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNz
YWdlIGluIHRoZSBtYWluIHRocmVhZCIpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiaGFuZGxpbmcgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9u
LXN5c3RlbS1pZCBuZWVkIGNvbnRleHQgbWVzc2FnZSIpOworCisgICAgICAgIEluaXREYXRhIGlu
aXREYXRhOworICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90ZWN0
aW9uTXV0ZXgpOworICAgICAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBwcm90ZWN0aW9u
U3lzdGVtRXZlbnRzKG1lc3NhZ2UpOworICAgICAgICAgICAgR1NUX1RSQUNFKCJmb3VuZCAlenUg
cHJvdGVjdGlvbiBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHByb3RlY3Rpb25T
eXN0ZW1FdmVudHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmF2YWls
YWJsZVN5c3RlbXMoKS5zaXplKCkpOworCisgICAgICAgICAgICBmb3IgKGF1dG8mIGV2ZW50IDog
cHJvdGVjdGlvblN5c3RlbUV2ZW50cy5ldmVudHMoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGV2ZW50S2V5U3lzdGVtSWQgPSBudWxscHRyOworICAgICAgICAgICAgICAgIEdzdEJ1
ZmZlciogZGF0YSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3By
b3RlY3Rpb24oZXZlbnQuZ2V0KCksICZldmVudEtleVN5c3RlbUlkLCAmZGF0YSwgbnVsbHB0cik7
CisKKyAgICAgICAgICAgICAgICBpbml0RGF0YS5hcHBlbmQoe2V2ZW50S2V5U3lzdGVtSWQsIGRh
dGF9KTsKKyAgICAgICAgICAgICAgICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1Rf
RVZFTlRfU0VRTlVNKGV2ZW50LmdldCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoV1RGTW92ZShpbml0RGF0YSkpOwor
CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0g
aW5zdGFuY2UiKTsKKyAgICAgICAgaWYgKG1fY2RtQXR0YWNobWVudFNlbWFwaG9yZS53YWl0Rm9y
KDRfcykKKyAgICAgICAgICAgICYmIG1fbm90aWZpZXItPmlzVmFsaWQoKSAvLyBDaGVjayB0aGUg
cGxheWVyIGlzIG5vdCBiZWluZyBkZXN0cm95ZWQuCisgICAgICAgICAgICAmJiAhbV9jZG1JbnN0
YW5jZS0+a2V5U3lzdGVtKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBw
cmVmZXJyZWRLZXlTeXN0ZW1VdWlkID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0ZW1U
b1V1aWQobV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVtKCkpOworICAgICAgICAgICAgR1NUX0lORk9f
T0JKRUNUKHBpcGVsaW5lKCksICJ3b3JraW5nIHdpdGgga2V5IHN5c3RlbSAlcywgY29udGludWlu
ZyB3aXRoIGtleSBzeXN0ZW0gJXMgb24gJXMiLCBtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKS51
dGY4KCkuZGF0YSgpLCBwcmVmZXJyZWRLZXlTeXN0ZW1VdWlkLCBHU1RfTUVTU0FHRV9TUkNfTkFN
RShtZXNzYWdlKSk7CisKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9
IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0
ZW0taWQiLCBGQUxTRSkpOworICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3RydWN0
dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOworICAg
ICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImRlY3J5cHRpb24t
c3lzdGVtLWlkIiwgR19UWVBFX1NUUklORywgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgbnVsbHB0
cik7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChHU1Rf
TUVTU0FHRV9TUkMobWVzc2FnZSkpLCBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBHU1RfV0FSTklORygiQ0RNIGluc3RhbmNlIG5vdCBpbml0aWFsaXphZWQiKTsK
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQSkKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQor
R3N0Q29udGV4dCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZXF1ZXN0R0xDb250ZXh0
KGNvbnN0IGNoYXIqIGNvbnRleHRUeXBlKQoreworICAgIGlmICghZW5zdXJlR3N0R0xDb250ZXh0
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4
dFR5cGUsIEdTVF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSkpIHsKKyAgICAgICAgR3N0Q29udGV4
dCogZGlzcGxheUNvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoR1NUX0dMX0RJU1BMQVlfQ09OVEVY
VF9UWVBFLCBUUlVFKTsKKyAgICAgICAgZ3N0X2NvbnRleHRfc2V0X2dsX2Rpc3BsYXkoZGlzcGxh
eUNvbnRleHQsIGdzdEdMRGlzcGxheSgpKTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlDb250ZXh0
OworICAgIH0KKworICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCAiZ3N0LmdsLmFwcF9j
b250ZXh0IikpIHsKKyAgICAgICAgR3N0Q29udGV4dCogYXBwQ29udGV4dCA9IGdzdF9jb250ZXh0
X25ldygiZ3N0LmdsLmFwcF9jb250ZXh0IiwgVFJVRSk7CisgICAgICAgIEdzdFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGFwcENvbnRleHQpOwor
I2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDEyLCAwKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3Nl
dChzdHJ1Y3R1cmUsICJjb250ZXh0IiwgR1NUX1RZUEVfR0xfQ09OVEVYVCwgZ3N0R0xDb250ZXh0
KCksIG51bGxwdHIpOworI2Vsc2UKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJl
LCAiY29udGV4dCIsIEdTVF9HTF9UWVBFX0NPTlRFWFQsIGdzdEdMQ29udGV4dCgpLCBudWxscHRy
KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gYXBwQ29udGV4dDsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmVuc3Vy
ZUdzdEdMQ29udGV4dCgpCit7CisgICAgaWYgKG1fZ2xDb250ZXh0KQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGF1dG8mIHNoYXJlZERpc3BsYXkgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJl
ZERpc3BsYXlGb3JDb21wb3NpdGluZygpOworCisgICAgLy8gVGhlIGZsb2F0aW5nIHJlZiByZW1v
dmFsIHN1cHBvcnQgd2FzIGFkZGVkIGluIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3df
YnVnLmNnaT9pZD03NDMwNjIuCisgICAgYm9vbCBzaG91bGRBZG9wdFJlZiA9IHdlYmtpdEdzdENo
ZWNrVmVyc2lvbigxLCAxNCwgMCk7CisgICAgaWYgKCFtX2dsRGlzcGxheSkgeworI2lmIFBMQVRG
T1JNKFgxMSkKKyNpZiBVU0UoR0xYKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDEx
PihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBHTCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAo
c2hvdWxkQWRvcHRSZWYpCisgICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYo
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNh
c3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZ
KGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlz
cGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKTsKKyAgICAgICAgfQorI2VsaWYgVVNF
KEVHTCkKKyAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkp
IHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNyZWF0aW5nIFgx
MSBzaGFyZWQgRUdMIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikK
KyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShn
c3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1E
aXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xf
ZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5
WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICAgICAgfQorI2VuZGlmCisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKFdBWUxBTkQpCisgICAgICAgIGlmIChpczxQbGF0Zm9ybURp
c3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgV2F5bGFuZCBzaGFyZWQgZGlzcGxheSIpOworICAg
ICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5
ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9l
Z2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5
KS5lZ2xEaXNwbGF5KCkpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9n
bERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWds
X2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSku
ZWdsRGlzcGxheSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisjaWYgVVNFKFdQRV9SRU5ERVJF
UikKKyAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkp
IHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNyZWF0aW5nIFdQ
RSBzaGFyZWQgRUdMIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikK
KyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShn
c3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1E
aXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3Rf
Z2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNw
bGF5TGliV1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICAgICAgfQorI2Vu
ZGlmCisKKyAgICAgICAgQVNTRVJUKG1fZ2xEaXNwbGF5KTsKKyAgICB9CisKKyAgICBHTENvbnRl
eHQqIHdlYmtpdENvbnRleHQgPSBzaGFyZWREaXNwbGF5LnNoYXJpbmdHTENvbnRleHQoKTsKKyAg
ICAvLyBFR0wgYW5kIEdMWCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBubyBuZWVkIGZvciBpZmRl
ZnMgaGVyZS4KKyAgICBHc3RHTFBsYXRmb3JtIGdsUGxhdGZvcm0gPSB3ZWJraXRDb250ZXh0LT5p
c0VHTENvbnRleHQoKSA/IEdTVF9HTF9QTEFURk9STV9FR0wgOiBHU1RfR0xfUExBVEZPUk1fR0xY
OworCisjaWYgVVNFKE9QRU5HTF9FUykKKyAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9BUElf
R0xFUzI7CisjZWxpZiBVU0UoT1BFTkdMKQorICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQ
SV9PUEVOR0w7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisKKyAg
ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHRIYW5kbGUgPSB3ZWJraXRDb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHRIYW5kbGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgbV9nbENvbnRl
eHQgPSBhZG9wdEdSZWYoZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQobV9nbERpc3BsYXkuZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3Jt
LCBnbEFQSSkpOworICAgIGVsc2UKKyAgICAgICAgbV9nbENvbnRleHQgPSBnc3RfZ2xfY29udGV4
dF9uZXdfd3JhcHBlZChtX2dsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0
cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKTsKKworICAgIC8vIEFjdGl2YXRl
IGFuZCBmaWxsIHRoZSBHU3RyZWFtZXIgd3JhcHBlZCBjb250ZXh0IHdpdGggdGhlIFdlYmtpdCdz
IHNoYXJlZCBvbmUuCisgICAgYXV0byBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6
OmN1cnJlbnQoKTsKKyAgICB3ZWJraXRDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBpZiAoZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUobV9nbENvbnRleHQuZ2V0KCksIFRSVUUpKSB7
CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgaWYgKCFnc3Rf
Z2xfY29udGV4dF9maWxsX2luZm8obV9nbENvbnRleHQuZ2V0KCksICZlcnJvci5vdXRQdHIoKSkp
CisgICAgICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGZpbGwgaW4gR1N0cmVhbWVyIGNv
bnRleHQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnc3RfZ2xfY29udGV4dF9hY3Rp
dmF0ZShtX2dsQ29udGV4dC5nZXQoKSwgRkFMU0UpOworICAgIH0gZWxzZQorICAgICAgICBHU1Rf
V0FSTklORygiRmFpbGVkIHRvIGFjdGl2YXRlIEdTdHJlYW1lciBjb250ZXh0ICUiIEdTVF9QVFJf
Rk9STUFULCBtX2dsQ29udGV4dC5nZXQoKSk7CisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4
dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCisKKy8v
IFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHZpZGVvCitGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisjaWYgVVNFKEdTVFJFQU1FUl9I
T0xFUFVOQ0gpCisgICAgLy8gV2hlbiB1c2luZyB0aGUgaG9sZXB1Y2ggd2UgbWF5IG5vdCBiZSBh
YmxlIHRvIGdldCB0aGUgdmlkZW8gZnJhbWVzIHNpemUsIHNvIHdlIGNhbid0IHVzZQorICAgIC8v
IGl0LiBCdXQgd2UgbmVlZCB0byByZXBvcnQgc29tZSBub24gZW1wdHkgbmF0dXJhbFNpemUgZm9y
IHRoZSBwbGF5ZXIncyBHcmFwaGljc0xheWVyCisgICAgLy8gdG8gYmUgcHJvcGVybHkgY3JlYXRl
ZC4KKyAgICByZXR1cm4gc19ob2xlUHVuY2hEZWZhdWx0RnJhbWVTaXplOworI2VuZGlmCisKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIGlmICghbV9pc0xlZ2FjeVBsYXliaW4gJiYgIW1f
Y3VycmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxWaWRlb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcj4gdmlkZW9UcmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KG1fY3Vy
cmVudFZpZGVvU3RyZWFtSWQpOworCisgICAgICAgIGlmICh2aWRlb1RyYWNrKSB7CisgICAgICAg
ICAgICBhdXRvIHRhZ3MgPSBhZG9wdEdSZWYoZ3N0X3N0cmVhbV9nZXRfdGFncyh2aWRlb1RyYWNr
LT5zdHJlYW0oKSkpOworICAgICAgICAgICAgZ2ludCB3aWR0aCwgaGVpZ2h0OworCisgICAgICAg
ICAgICBpZiAodGFncyAmJiBnc3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLmdldCgpLCBXRUJLSVRf
TUVESUFfVFJBQ0tfVEFHX1dJRFRILCAmd2lkdGgpICYmIGdzdF90YWdfbGlzdF9nZXRfaW50KHRh
Z3MuZ2V0KCksIFdFQktJVF9NRURJQV9UUkFDS19UQUdfSEVJR0hULCAmaGVpZ2h0KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9Cisg
ICAgfQorI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyAgICBpZiAoIWhhc1ZpZGVv
KCkpCisgICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKKworICAgIGlmICghbV92aWRlb1NpemUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV92aWRlb1NpemU7CisKKyAgICBhdXRvIHNhbXBs
ZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOworICAgIGlmICghR1NUX0lTX1NBTVBM
RShtX3NhbXBsZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKKworICAgIEdz
dENhcHMqIGNhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzKG1fc2FtcGxlLmdldCgpKTsKKyAgICBp
ZiAoIWNhcHMpCisgICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKKworICAgIC8vIFRPRE86IGhh
bmRsZSBwb3NzaWJsZSBjbGVhbiBhcGVydHVyZSBkYXRhLiBTZWUKKyAgICAvLyBodHRwczovL2J1
Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2NTcxCisgICAgLy8gVE9ETzogaGFu
ZGxlIHBvc3NpYmxlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gU2VlCisgICAgLy8gaHR0cHM6Ly9i
dWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjMyNgorCisgICAgLy8gR2V0IHRo
ZSB2aWRlbyBQQVIgYW5kIG9yaWdpbmFsIHNpemUsIGlmIHRoaXMgZmFpbHMgdGhlCisgICAgLy8g
dmlkZW8tc2luayBoYXMgbGlrZWx5IG5vdCB5ZXQgbmVnb3RpYXRlZCBpdHMgY2Fwcy4KKyAgICBp
bnQgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9y
LCBzdHJpZGU7CisgICAgSW50U2l6ZSBvcmlnaW5hbFNpemU7CisgICAgR3N0VmlkZW9Gb3JtYXQg
Zm9ybWF0OworICAgIGlmICghZ2V0VmlkZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMoY2Fwcywgb3Jp
Z2luYWxTaXplLCBmb3JtYXQsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0
UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOwor
CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcsIGlmIHRoZSB2aWRlbyBpcyB0YWdnZWQgYXMgcm90YXRlZCA5MCBvciAy
NzAgZGVncmVlcywgc3dhcCB3aWR0aCBhbmQgaGVpZ2h0LgorICAgIGlmIChtX3JlbmRlcmluZ0Nh
bkJlQWNjZWxlcmF0ZWQpIHsKKyAgICAgICAgaWYgKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbi51
c2VzV2lkdGhBc0hlaWdodCgpKQorICAgICAgICAgICAgb3JpZ2luYWxTaXplID0gb3JpZ2luYWxT
aXplLnRyYW5zcG9zZWRTaXplKCk7CisgICAgfQorI2VuZGlmCisKKyAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJPcmlnaW5hbCB2aWRlbyBzaXplOiAlZHglZCIsIG9yaWdpbmFsU2l6
ZS53aWR0aCgpLCBvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIlBpeGVsIGFzcGVjdCByYXRpbzogJWQvJWQiLCBwaXhlbEFzcGVjdFJhdGlv
TnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpOworCisgICAgLy8gQ2FsY3Vs
YXRlIERBUiBiYXNlZCBvbiBQQVIgYW5kIHZpZGVvIHNpemUuCisgICAgaW50IGRpc3BsYXlXaWR0
aCA9IG9yaWdpbmFsU2l6ZS53aWR0aCgpICogcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvcjsKKyAg
ICBpbnQgZGlzcGxheUhlaWdodCA9IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAqIHBpeGVsQXNwZWN0
UmF0aW9EZW5vbWluYXRvcjsKKworICAgIC8vIERpdmlkZSBkaXNwbGF5IHdpZHRoIGFuZCBoZWln
aHQgYnkgdGhlaXIgR0NEIHRvIGF2b2lkIHBvc3NpYmxlIG92ZXJmbG93cy4KKyAgICBpbnQgZGlz
cGxheUFzcGVjdFJhdGlvR0NEID0gZ3JlYXRlc3RDb21tb25EaXZpc29yKGRpc3BsYXlXaWR0aCwg
ZGlzcGxheUhlaWdodCk7CisgICAgZGlzcGxheVdpZHRoIC89IGRpc3BsYXlBc3BlY3RSYXRpb0dD
RDsKKyAgICBkaXNwbGF5SGVpZ2h0IC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKKworICAgIC8v
IEFwcGx5IERBUiB0byBvcmlnaW5hbCB2aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2
aW9yIGFzIGluIHh2aW1hZ2VzaW5rJ3Mgc2V0Y2FwcyBmdW5jdGlvbi4KKyAgICBndWludDY0IHdp
ZHRoID0gMCwgaGVpZ2h0ID0gMDsKKyAgICBpZiAoIShvcmlnaW5hbFNpemUuaGVpZ2h0KCkgJSBk
aXNwbGF5SGVpZ2h0KSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJL
ZWVwaW5nIHZpZGVvIG9yaWdpbmFsIGhlaWdodCIpOworICAgICAgICB3aWR0aCA9IGdzdF91dGls
X3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLmhlaWdodCgpLCBkaXNwbGF5V2lkdGgsIGRp
c3BsYXlIZWlnaHQpOworICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0Pihvcmln
aW5hbFNpemUuaGVpZ2h0KCkpOworICAgIH0gZWxzZSBpZiAoIShvcmlnaW5hbFNpemUud2lkdGgo
KSAlIGRpc3BsYXlXaWR0aCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiS2VlcGluZyB2aWRlbyBvcmlnaW5hbCB3aWR0aCIpOworICAgICAgICBoZWlnaHQgPSBnc3Rf
dXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBkaXNwbGF5SGVpZ2h0
LCBkaXNwbGF5V2lkdGgpOworICAgICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9y
aWdpbmFsU2l6ZS53aWR0aCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJBcHByb3hpbWF0aW5nIHdoaWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlk
ZW8gaGVpZ2h0Iik7CisgICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChv
cmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7CisgICAg
ICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7
CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTmF0dXJhbCBzaXpl
OiAlIiBHX0dVSU5UNjRfRk9STUFUICJ4JSIgR19HVUlOVDY0X0ZPUk1BVCwgd2lkdGgsIGhlaWdo
dCk7CisgICAgbV92aWRlb1NpemUgPSBGbG9hdFNpemUoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCks
IHN0YXRpY19jYXN0PGludD4oaGVpZ2h0KSk7CisgICAgcmV0dXJuIG1fdmlkZW9TaXplOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVt
ZSkKK3sKKyAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyB2b2x1bWU6ICVmIiwgdm9sdW1l
KTsKKyAgICBnc3Rfc3RyZWFtX3ZvbHVtZV9zZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQo
KSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJTkVBUiwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2
b2x1bWUpKTsKK30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2b2x1bWUo
KSBjb25zdAoreworICAgIGlmICghbV92b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBnc3Rfc3RyZWFtX3ZvbHVtZV9nZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVu
dC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJTkVBUik7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpCit7
CisgICAgaWYgKCFtX3BsYXllciB8fCAhbV92b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm47
CisgICAgZG91YmxlIHZvbHVtZTsKKyAgICB2b2x1bWUgPSBnc3Rfc3RyZWFtX3ZvbHVtZV9nZXRf
dm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJ
TkVBUik7CisgICAgLy8gZ2V0X3ZvbHVtZSgpIGNhbiByZXR1cm4gdmFsdWVzIHN1cGVyaW9yIHRv
IDEuMCBpZiB0aGUgdXNlcgorICAgIC8vIGFwcGxpZXMgc29mdHdhcmUgdXNlciBnYWluIHZpYSB0
aGlyZCBwYXJ0eSBhcHBsaWNhdGlvbiAoR05PTUUKKyAgICAvLyB2b2x1bWUgY29udHJvbCBmb3Ig
aW5zdGFuY2UpLgorICAgIHZvbHVtZSA9IENMQU1QKHZvbHVtZSwgMC4wLCAxLjApOworICAgIG1f
cGxheWVyLT52b2x1bWVDaGFuZ2VkKHN0YXRpY19jYXN0PGZsb2F0Pih2b2x1bWUpKTsKK30KKwor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZvbHVtZUNoYW5nZWRDYWxsYmFjayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICAvLyBUaGlzIGlzIGNh
bGxlZCB3aGVuIG1fdm9sdW1lRWxlbWVudCByZWNlaXZlcyB0aGUgbm90aWZ5Ojp2b2x1bWUgc2ln
bmFsLgorICAgIEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBlbGluZSgpLCAiVm9sdW1lIGNo
YW5nZWQgdG86ICVmIiwgcGxheWVyLT52b2x1bWUoKSk7CisKKyAgICBwbGF5ZXItPm1fbm90aWZp
ZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpWb2x1bWVDaGFuZ2VkLCBbcGxheWVy
XSB7CisgICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKKyAgICB9
KTsKK30KKworTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om5ldHdvcmtTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1N0YXRl
OworfQorCitNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzaXplQ2hhbmdlZCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnNldE11dGVkKGJvb2wgbXV0ZSkKK3sKKyAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYm9vbCBjdXJyZW50VmFsdWUgPSBtdXRlZCgpOworICAgIGlmIChj
dXJyZW50VmFsdWUgPT0gbXV0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0lORk9fT0JK
RUNUKHBpcGVsaW5lKCksICJTZXQgbXV0ZWQgdG8gJXMiLCB0b1N0cmluZyhtdXRlKS51dGY4KCku
ZGF0YSgpKTsKKyAgICBnX29iamVjdF9zZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIs
IG11dGUsIG51bGxwdHIpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bXV0ZWQoKSBjb25zdAoreworICAgIGlmICghbV92b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBnYm9vbGVhbiBtdXRlZDsKKyAgICBnX29iamVjdF9nZXQobV92b2x1
bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsICZtdXRlZCwgbnVsbHB0cik7CisgICAgR1NUX0lORk9f
T0JKRUNUKHBpcGVsaW5lKCksICJQbGF5ZXIgaXMgbXV0ZWQ6ICVzIiwgdG9TdHJpbmcoc3RhdGlj
X2Nhc3Q8Ym9vbD4obXV0ZWQpKS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gbXV0ZWQ7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZk11dGUo
KQoreworICAgIGlmICghbV9wbGF5ZXIgfHwgIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZ2Jvb2xlYW4gbXV0ZWQ7CisgICAgZ19vYmplY3RfZ2V0KG1fdm9sdW1lRWxl
bWVudC5nZXQoKSwgIm11dGUiLCAmbXV0ZWQsIG51bGxwdHIpOworICAgIG1fcGxheWVyLT5tdXRl
Q2hhbmdlZChzdGF0aWNfY2FzdDxib29sPihtdXRlZCkpOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bXV0ZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIG1fdm9sdW1l
RWxlbWVudCByZWNlaXZlcyB0aGUgbm90aWZ5OjptdXRlIHNpZ25hbC4KKyAgICBwbGF5ZXItPm1f
bm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpNdXRlQ2hhbmdlZCwgW3Bs
YXllcl0geworICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mTXV0ZSgpOworICAgIH0pOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RN
ZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnI7CisgICAg
R1VuaXF1ZU91dFB0cjxnY2hhcj4gZGVidWc7CisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0
ZSBlcnJvcjsKKyAgICBib29sIGlzc3VlRXJyb3IgPSB0cnVlOworICAgIGJvb2wgYXR0ZW1wdE5l
eHRMb2NhdGlvbiA9IGZhbHNlOworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKyAgICBHc3RTdGF0ZSByZXF1ZXN0
ZWRTdGF0ZSwgY3VycmVudFN0YXRlOworCisgICAgbV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVk
U2Vla1Bvc2l0aW9uID0gZmFsc2U7CisKKyAgICBpZiAoc3RydWN0dXJlKSB7CisgICAgICAgIGNv
bnN0IGdjaGFyKiBtZXNzYWdlVHlwZU5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0cnVj
dHVyZSk7CisKKyAgICAgICAgLy8gUmVkaXJlY3QgbWVzc2FnZXMgYXJlIHNlbnQgZnJvbSBlbGVt
ZW50cywgbGlrZSBxdGRlbXV4LCB0bworICAgICAgICAvLyBub3RpZnkgb2YgdGhlIG5ldyBsb2Nh
dGlvbihzKSBvZiB0aGUgbWVkaWEuCisgICAgICAgIGlmICghZ19zdHJjbXAwKG1lc3NhZ2VUeXBl
TmFtZSwgInJlZGlyZWN0IikpIHsKKyAgICAgICAgICAgIG1lZGlhTG9jYXRpb25DaGFuZ2VkKG1l
c3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
V2UgaWdub3JlIHN0YXRlIGNoYW5nZXMgZnJvbSBpbnRlcm5hbCBlbGVtZW50cy4gVGhleSBhcmUg
Zm9yd2FyZGVkIHRvIHBsYXliaW4yIGFueXdheS4KKyAgICBib29sIG1lc3NhZ2VTb3VyY2VJc1Bs
YXliaW4gPSBHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkgPT0gcmVpbnRlcnByZXRfY2FzdDxHc3RP
YmplY3QqPihtX3BpcGVsaW5lLmdldCgpKTsKKworICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5l
KCksICJNZXNzYWdlICVzIHJlY2VpdmVkIGZyb20gZWxlbWVudCAlcyIsIEdTVF9NRVNTQUdFX1RZ
UEVfTkFNRShtZXNzYWdlKSwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOworICAgIHN3
aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0Vf
RVJST1I6CisgICAgICAgIGlmIChtX3Jlc2V0UGlwZWxpbmUgfHwgIW1fbWlzc2luZ1BsdWdpbkNh
bGxiYWNrcy5pc0VtcHR5KCkgfHwgbV9lcnJvck9jY3VyZWQpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVyci5vdXRQdHIoKSwg
JmRlYnVnLm91dFB0cigpKTsKKyAgICAgICAgR1NUX0VSUk9SKCJFcnJvciAlZDogJXMgKHVybD0l
cykiLCBlcnItPmNvZGUsIGVyci0+bWVzc2FnZSwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisKKyAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4o
bV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgIndlYmtpdC12aWRl
by5lcnJvciIpOworCisgICAgICAgIGVycm9yID0gTWVkaWFQbGF5ZXI6OkVtcHR5OworICAgICAg
ICBpZiAoZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NU
UkVBTV9FUlJPUl9DT0RFQ19OT1RfRk9VTkQpCisgICAgICAgICAgICB8fCBnX2Vycm9yX21hdGNo
ZXMoZXJyLmdldCgpLCBHU1RfU1RSRUFNX0VSUk9SLCBHU1RfU1RSRUFNX0VSUk9SX1dST05HX1RZ
UEUpCisgICAgICAgICAgICB8fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfU1RSRUFN
X0VSUk9SLCBHU1RfU1RSRUFNX0VSUk9SX0ZBSUxFRCkKKyAgICAgICAgICAgIHx8IGdfZXJyb3Jf
bWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9DT1JFX0VSUk9SLCBHU1RfQ09SRV9FUlJPUl9NSVNTSU5H
X1BMVUdJTikKKyAgICAgICAgICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9S
RVNPVVJDRV9FUlJPUiwgR1NUX1JFU09VUkNFX0VSUk9SX05PVF9GT1VORCkpCisgICAgICAgICAg
ICBlcnJvciA9IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsKKyAgICAgICAgZWxzZSBpZiAoZ19l
cnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJP
Ul9UWVBFX05PVF9GT1VORCkpIHsKKyAgICAgICAgICAgIC8vIExldCB0aGUgbWVkaWFQbGF5ZXJD
bGllbnQgaGFuZGxlIHRoZSBzdHJlYW0gZXJyb3IsIGluCisgICAgICAgICAgICAvLyB0aGlzIGNh
c2UgdGhlIEhUTUxNZWRpYUVsZW1lbnQgd2lsbCBlbWl0IGEgc3RhbGxlZAogICAgICAgICAgICAg
Ly8gZXZlbnQuCiAgICAgICAgICAgICBHU1RfRVJST1IoIkRlY29kZSBlcnJvciwgbGV0IHRoZSBN
ZWRpYSBlbGVtZW50IGVtaXQgYSBzdGFsbGVkIGV2ZW50LiIpOwogICAgICAgICAgICAgbV9sb2Fk
aW5nU3RhbGxlZCA9IHRydWU7CkBAIC0xNDE4LDExNDMgKzIzODQsMTYzOCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdl
KQogICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247CiAgICAg
ICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbXNfc2VsZWN0ZWQobWVzc2FnZSwgJmNvbGxlY3Rp
b24ub3V0UHRyKCkpOwogCi0gICAgICAgIGlmICghY29sbGVjdGlvbikKLSAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBpZiAoIWNvbGxlY3Rpb24pCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBtX3N0cmVhbUNvbGxlY3Rpb24uc3dhcChjb2xsZWN0aW9uKTsKKyAgICAgICAgbV9jdXJy
ZW50QXVkaW9TdHJlYW1JZCA9ICIiOworICAgICAgICBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkID0g
IiI7CisgICAgICAgIG1fY3VycmVudFRleHRTdHJlYW1JZCA9ICIiOworCisgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3NpemUobWVzc2Fn
ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9IGdzdF9tZXNzYWdlX3N0cmVhbXNf
c2VsZWN0ZWRfZ2V0X3N0cmVhbShtZXNzYWdlLCBpKTsKKyAgICAgICAgICAgIGlmICghc3RyZWFt
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBHc3RTdHJlYW1UeXBl
IHR5cGUgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0uZ2V0KCkpOworICAgICAg
ICAgICAgU3RyaW5nIHN0cmVhbUlkKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0
KCkpKTsKKworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiU2VsZWN0
aW5nICVzIHRyYWNrIHdpdGggSUQ6ICVzIiwgZ3N0X3N0cmVhbV90eXBlX2dldF9uYW1lKHR5cGUp
LCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIC8vIFBsYXliaW4zIGNhbiBz
ZW5kIG1vcmUgdGhhbiBvbmUgc2VsZWN0ZWQgc3RyZWFtIG9mIHRoZSBzYW1lIHR5cGUKKyAgICAg
ICAgICAgIC8vIGJ1dCB0aGVyZSdzIG5vIHByaW9yaXR5IG9yIG9yZGVyaW5nIHN5c3RlbSBpbiBw
bGFjZSwgc28gd2UgYXNzdW1lCisgICAgICAgICAgICAvLyB0aGUgc2VsZWN0ZWQgc3RyZWFtIGlz
IHRoZSBsYXN0IG9uZSBhcyByZXBvcnRlZCBieSBwbGF5YmluMy4KKyAgICAgICAgICAgIGlmICh0
eXBlICYgR1NUX1NUUkVBTV9UWVBFX0FVRElPKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50
QXVkaW9TdHJlYW1JZCA9IHN0cmVhbUlkOworICAgICAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBt
X2F1ZGlvVHJhY2tzLmdldChtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQodHJhY2spOworICAgICAgICAgICAgICAgIHRyYWNrLT5tYXJrQXNBY3RpdmUoKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9WSURFTykgewor
ICAgICAgICAgICAgICAgIG1fY3VycmVudFZpZGVvU3RyZWFtSWQgPSBzdHJlYW1JZDsKKyAgICAg
ICAgICAgICAgICBhdXRvIHRyYWNrID0gbV92aWRlb1RyYWNrcy5nZXQobV9jdXJyZW50VmlkZW9T
dHJlYW1JZCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHRyYWNrKTsKKyAgICAgICAgICAgICAg
ICB0cmFjay0+bWFya0FzQWN0aXZlKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgJiBH
U1RfU1RSRUFNX1RZUEVfVEVYVCkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRUZXh0U3RyZWFt
SWQgPSBzdHJlYW1JZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBHU1RfV0FS
TklORygiVW5rbm93biBzdHJlYW0gdHlwZSB3aXRoIHN0cmVhbS1pZCAlcyIsIHN0cmVhbUlkLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZh
dWx0OgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJVbmhhbmRsZWQgR1N0
cmVhbWVyIG1lc3NhZ2UgdHlwZTogJXMiLCBHU1RfTUVTU0FHRV9UWVBFX05BTUUobWVzc2FnZSkp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAg
ICBHc3RCdWZmZXJpbmdNb2RlIG1vZGU7CisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5n
X3N0YXRzKG1lc3NhZ2UsICZtb2RlLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKKworICAg
IGludCBwZXJjZW50YWdlOworICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyhtZXNzYWdl
LCAmcGVyY2VudGFnZSk7CisKKyAgICB1cGRhdGVCdWZmZXJpbmdTdGF0dXMobW9kZSwgcGVyY2Vu
dGFnZSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVNYXhU
aW1lTG9hZGVkKGRvdWJsZSBwZXJjZW50YWdlKQoreworICAgIE1lZGlhVGltZSBtZWRpYUR1cmF0
aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKKyAgICBpZiAoIW1lZGlhRHVyYXRpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fbWF4VGltZUxvYWRlZCA9IE1lZGlhVGltZShwZXJjZW50YWdl
ICogc3RhdGljX2Nhc3Q8ZG91YmxlPih0b0dzdFVuc2lnbmVkNjRUaW1lKG1lZGlhRHVyYXRpb24p
KSAvIDEwMCwgR1NUX1NFQ09ORCk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
W0J1ZmZlcmluZ10gVXBkYXRlZCBtYXhUaW1lTG9hZGVkOiAlcyIsIHRvU3RyaW5nKG1fbWF4VGlt
ZUxvYWRlZCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp1cGRhdGVCdWZmZXJpbmdTdGF0dXMoR3N0QnVmZmVyaW5nTW9kZSBtb2RlLCBkb3Vi
bGUgcGVyY2VudGFnZSkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVm
ZmVyaW5nXSBtb2RlOiAlcywgc3RhdHVzOiAlZiUlIiwgZW51bVRvU3RyaW5nKEdTVF9UWVBFX0JV
RkZFUklOR19NT0RFLCBtb2RlKS5kYXRhKCksIHBlcmNlbnRhZ2UpOworCisgICAgbV9kb3dubG9h
ZEZpbmlzaGVkID0gcGVyY2VudGFnZSA9PSAxMDA7CisgICAgbV9idWZmZXJpbmcgPSAhbV9kb3du
bG9hZEZpbmlzaGVkOworCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBHU1RfQlVGRkVS
SU5HX1NUUkVBTTogeworICAgICAgICB1cGRhdGVNYXhUaW1lTG9hZGVkKHBlcmNlbnRhZ2UpOwor
CisgICAgICAgIG1fYnVmZmVyaW5nUGVyY2VudGFnZSA9IHBlcmNlbnRhZ2U7CisgICAgICAgIGlm
IChtX2Rvd25sb2FkRmluaXNoZWQpCisgICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKKworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfQlVGRkVSSU5HX0RPV05MT0FEOiB7Cisg
ICAgICAgIHVwZGF0ZU1heFRpbWVMb2FkZWQocGVyY2VudGFnZSk7CisKKyAgICAgICAgLy8gTWVk
aWEgaXMgbm93IGZ1bGx5IGxvYWRlZC4gSXQgd2lsbCBwbGF5IGV2ZW4gaWYgbmV0d29yayBjb25u
ZWN0aW9uIGlzCisgICAgICAgIC8vIGN1dC4gQnVmZmVyaW5nIGlzIGRvbmUsIHJlbW92ZSB0aGUg
ZmlsbCBzb3VyY2UgZnJvbSB0aGUgbWFpbiBsb29wLgorICAgICAgICBpZiAobV9kb3dubG9hZEZp
bmlzaGVkKQorICAgICAgICAgICAgbV9maWxsVGltZXIuc3RvcCgpOworCisgICAgICAgIHVwZGF0
ZVN0YXRlcygpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVW5oYW5kbGVkIGJ1ZmZlcmluZyBtb2RlOiAl
cyIsIGVudW1Ub1N0cmluZyhHU1RfVFlQRV9CVUZGRVJJTkdfTU9ERSwgbW9kZSkuZGF0YSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBV
U0UoR1NUUkVBTUVSX01QRUdUUykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpw
cm9jZXNzTXBlZ1RzU2VjdGlvbihHc3RNcGVndHNTZWN0aW9uKiBzZWN0aW9uKQoreworICAgIEFT
U0VSVChzZWN0aW9uKTsKKworICAgIGlmIChzZWN0aW9uLT5zZWN0aW9uX3R5cGUgPT0gR1NUX01Q
RUdUU19TRUNUSU9OX1BNVCkgeworICAgICAgICBjb25zdCBHc3RNcGVndHNQTVQqIHBtdCA9IGdz
dF9tcGVndHNfc2VjdGlvbl9nZXRfcG10KHNlY3Rpb24pOworICAgICAgICBtX21ldGFkYXRhVHJh
Y2tzLmNsZWFyKCk7CisgICAgICAgIGZvciAoZ3VpbnQgaSA9IDA7IGkgPCBwbXQtPnN0cmVhbXMt
PmxlbjsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBHc3RNcGVndHNQTVRTdHJlYW0qIHN0cmVh
bSA9IHN0YXRpY19jYXN0PGNvbnN0IEdzdE1wZWd0c1BNVFN0cmVhbSo+KGdfcHRyX2FycmF5X2lu
ZGV4KHBtdC0+c3RyZWFtcywgaSkpOworICAgICAgICAgICAgaWYgKHN0cmVhbS0+c3RyZWFtX3R5
cGUgPT0gMHgwNSB8fCBzdHJlYW0tPnN0cmVhbV90eXBlID49IDB4ODApIHsKKyAgICAgICAgICAg
ICAgICBBdG9tU3RyaW5nIHBpZCA9IFN0cmluZzo6bnVtYmVyKHN0cmVhbS0+cGlkKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIHRyYWNrID0gSW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIEluYmFuZFRleHRUcmFja1ByaXZh
dGU6Ok1ldGFkYXRhLCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpEYXRhLCBwaWQpOworCisgICAg
ICAgICAgICAgICAgLy8gNC43LjEwLjEyLjIgU291cmNpbmcgaW4tYmFuZCB0ZXh0IHRyYWNrcwor
ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgdGV4dCB0cmFjaydzIGtpbmQgaXMgbWV0YWRh
dGEsIHRoZW4gc2V0IHRoZSB0ZXh0IHRyYWNrIGluLWJhbmQgbWV0YWRhdGEgdHJhY2sgZGlzcGF0
Y2gKKyAgICAgICAgICAgICAgICAvLyB0eXBlIGFzIGZvbGxvd3MsIGJhc2VkIG9uIHRoZSB0eXBl
IG9mIHRoZSBtZWRpYSByZXNvdXJjZToKKyAgICAgICAgICAgICAgICAvLyBMZXQgc3RyZWFtIHR5
cGUgYmUgdGhlIHZhbHVlIG9mIHRoZSAic3RyZWFtX3R5cGUiIGZpZWxkIGRlc2NyaWJpbmcgdGhl
IHRleHQgdHJhY2sncyB0eXBlIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIGZpbGUncyBwcm9n
cmFtIG1hcCBzZWN0aW9uLCBpbnRlcnByZXRlZCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBpbnRlZ2Vy
LiBMZXQgbGVuZ3RoIGJlIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgIC8vIHRoZSAiRVNf
aW5mb19sZW5ndGgiIGZpZWxkIGZvciB0aGUgdHJhY2sgaW4gdGhlIHNhbWUgcGFydCBvZiB0aGUg
cHJvZ3JhbSBtYXAgc2VjdGlvbiwgaW50ZXJwcmV0ZWQKKyAgICAgICAgICAgICAgICAvLyBhcyBh
biBpbnRlZ2VyIGFzIGRlZmluZWQgYnkgdGhlIE1QRUctMiBzcGVjaWZpY2F0aW9uLiBMZXQgZGVz
Y3JpcHRvciBieXRlcyBiZSB0aGUgbGVuZ3RoIGJ5dGVzCisgICAgICAgICAgICAgICAgLy8gZm9s
bG93aW5nIHRoZSAiRVNfaW5mb19sZW5ndGgiIGZpZWxkLiBUaGUgdGV4dCB0cmFjayBpbi1iYW5k
IG1ldGFkYXRhIHRyYWNrIGRpc3BhdGNoIHR5cGUgbXVzdCBiZQorICAgICAgICAgICAgICAgIC8v
IHNldCB0byB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyZWFtIHR5cGUgYnl0ZSBhbmQgdGhl
IHplcm8gb3IgbW9yZSBkZXNjcmlwdG9yIGJ5dGVzIGJ5dGVzLAorICAgICAgICAgICAgICAgIC8v
IGV4cHJlc3NlZCBpbiBoZXhhZGVjaW1hbCB1c2luZyB1cHBlcmNhc2UgQVNDSUkgaGV4IGRpZ2l0
cy4KKyAgICAgICAgICAgICAgICBTdHJpbmcgaW5iYW5kTWV0YWRhdGFUcmFja0Rpc3BhdGNoVHlw
ZTsKKyAgICAgICAgICAgICAgICBhcHBlbmRVbnNpZ25lZEFzSGV4Rml4ZWRTaXplKHN0cmVhbS0+
c3RyZWFtX3R5cGUsIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUsIDIpOworICAgICAg
ICAgICAgICAgIGZvciAoZ3VpbnQgaiA9IDA7IGogPCBzdHJlYW0tPmRlc2NyaXB0b3JzLT5sZW47
ICsraikgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RNcGVndHNEZXNjcmlwdG9yKiBk
ZXNjcmlwdG9yID0gc3RhdGljX2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzRGVzY3JpcHRvcio+KGdfcHRy
X2FycmF5X2luZGV4KHN0cmVhbS0+ZGVzY3JpcHRvcnMsIGopKTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChndWludCBrID0gMDsgayA8IGRlc2NyaXB0b3ItPmxlbmd0aDsgKytrKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGRlc2NyaXB0b3ItPmRhdGFba10sIGlu
YmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB0cmFjay0+c2V0SW5CYW5kTWV0YWRhdGFUcmFja0Rpc3BhdGNoVHlwZShpbmJh
bmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKTsKKworICAgICAgICAgICAgICAgIG1fbWV0YWRh
dGFUcmFja3MuYWRkKHBpZCwgdHJhY2spOworICAgICAgICAgICAgICAgIG1fcGxheWVyLT5hZGRU
ZXh0VHJhY2soKnRyYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIEF0b21TdHJpbmcgcGlkID0gU3RyaW5nOjpudW1iZXIoc2VjdGlvbi0+cGlkKTsK
KyAgICAgICAgUmVmUHRyPEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4g
dHJhY2sgPSBtX21ldGFkYXRhVHJhY2tzLmdldChwaWQpOworICAgICAgICBpZiAoIXRyYWNrKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEdSZWZQdHI8R0J5dGVzPiBkYXRhID0gZ3N0
X21wZWd0c19zZWN0aW9uX2dldF9kYXRhKHNlY3Rpb24pOworICAgICAgICBnc2l6ZSBzaXplOwor
ICAgICAgICBjb25zdCB2b2lkKiBieXRlcyA9IGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwg
JnNpemUpOworCisgICAgICAgIHRyYWNrLT5hZGREYXRhQ3VlKGN1cnJlbnRNZWRpYVRpbWUoKSwg
Y3VycmVudE1lZGlhVGltZSgpLCBieXRlcywgc2l6ZSk7CisgICAgfQorfQorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cHJvY2Vzc1RhYmxlT2ZDb250ZW50cyhHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIGlmICht
X2NoYXB0ZXJzVHJhY2spCisgICAgICAgIG1fcGxheWVyLT5yZW1vdmVUZXh0VHJhY2soKm1fY2hh
cHRlcnNUcmFjayk7CisKKyAgICBtX2NoYXB0ZXJzVHJhY2sgPSBJbmJhbmRNZXRhZGF0YVRleHRU
cmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpDaGFw
dGVycywgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6R2VuZXJpYyk7CisgICAgbV9wbGF5ZXItPmFk
ZFRleHRUcmFjaygqbV9jaGFwdGVyc1RyYWNrKTsKKworICAgIEdSZWZQdHI8R3N0VG9jPiB0b2M7
CisgICAgZ2Jvb2xlYW4gdXBkYXRlZDsKKyAgICBnc3RfbWVzc2FnZV9wYXJzZV90b2MobWVzc2Fn
ZSwgJnRvYy5vdXRQdHIoKSwgJnVwZGF0ZWQpOworICAgIEFTU0VSVCh0b2MpOworCisgICAgZm9y
IChHTGlzdCogaSA9IGdzdF90b2NfZ2V0X2VudHJpZXModG9jLmdldCgpKTsgaTsgaSA9IGktPm5l
eHQpCisgICAgICAgIHByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeShzdGF0aWNfY2FzdDxHc3RU
b2NFbnRyeSo+KGktPmRhdGEpKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeShHc3RUb2NFbnRyeSogZW50cnkpCit7Cisg
ICAgQVNTRVJUKGVudHJ5KTsKKworICAgIGF1dG8gY3VlID0gR2VuZXJpY0N1ZURhdGE6OmNyZWF0
ZSgpOworCisgICAgZ2ludDY0IHN0YXJ0ID0gLTEsIHN0b3AgPSAtMTsKKyAgICBnc3RfdG9jX2Vu
dHJ5X2dldF9zdGFydF9zdG9wX3RpbWVzKGVudHJ5LCAmc3RhcnQsICZzdG9wKTsKKyAgICBpZiAo
c3RhcnQgIT0gLTEpCisgICAgICAgIGN1ZS0+c2V0U3RhcnRUaW1lKE1lZGlhVGltZShzdGFydCwg
R1NUX1NFQ09ORCkpOworICAgIGlmIChzdG9wICE9IC0xKQorICAgICAgICBjdWUtPnNldEVuZFRp
bWUoTWVkaWFUaW1lKHN0b3AsIEdTVF9TRUNPTkQpKTsKKworICAgIEdzdFRhZ0xpc3QqIHRhZ3Mg
PSBnc3RfdG9jX2VudHJ5X2dldF90YWdzKGVudHJ5KTsKKyAgICBpZiAodGFncykgeworICAgICAg
ICBnY2hhciogdGl0bGUgPSBudWxscHRyOworICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmlu
Zyh0YWdzLCBHU1RfVEFHX1RJVExFLCAmdGl0bGUpOworICAgICAgICBpZiAodGl0bGUpIHsKKyAg
ICAgICAgICAgIGN1ZS0+c2V0Q29udGVudCh0aXRsZSk7CisgICAgICAgICAgICBnX2ZyZWUodGl0
bGUpOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jaGFwdGVyc1RyYWNrLT5hZGRHZW5lcmlj
Q3VlKGN1ZSk7CisKKyAgICBmb3IgKEdMaXN0KiBpID0gZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2Vu
dHJpZXMoZW50cnkpOyBpOyBpID0gaS0+bmV4dCkKKyAgICAgICAgcHJvY2Vzc1RhYmxlT2ZDb250
ZW50c0VudHJ5KHN0YXRpY19jYXN0PEdzdFRvY0VudHJ5Kj4oaS0+ZGF0YSkpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJbnZhbGlkQXVkaW9UcmFja3MoVmVj
dG9yPFN0cmluZz4gdmFsaWRUcmFja0lkcykKK3sKKyAgICBtX2F1ZGlvVHJhY2tzLnJlbW92ZUlm
KFt2YWxpZFRyYWNrSWRzXShhdXRvJiBrZXlBbmRWYWx1ZSkgeworICAgICAgICByZXR1cm4gIXZh
bGlkVHJhY2tJZHMuY29udGFpbnMoa2V5QW5kVmFsdWUua2V5KTsKKyAgICB9KTsKK30KKwordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFZpZGVvVHJhY2tzKFZl
Y3RvcjxTdHJpbmc+IHZhbGlkVHJhY2tJZHMpCit7CisgICAgbV92aWRlb1RyYWNrcy5yZW1vdmVJ
ZihbdmFsaWRUcmFja0lkc10oYXV0byYga2V5QW5kVmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICF2
YWxpZFRyYWNrSWRzLmNvbnRhaW5zKGtleUFuZFZhbHVlLmtleSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRUZXh0VHJhY2tzKFZl
Y3RvcjxTdHJpbmc+IHZhbGlkVHJhY2tJZHMpCit7CisgICAgbV90ZXh0VHJhY2tzLnJlbW92ZUlm
KFt2YWxpZFRyYWNrSWRzXShhdXRvJiBrZXlBbmRWYWx1ZSkgeworICAgICAgICByZXR1cm4gIXZh
bGlkVHJhY2tJZHMuY29udGFpbnMoa2V5QW5kVmFsdWUua2V5KTsKKyAgICB9KTsKK30KKyNlbmRp
ZgogCi0gICAgICAgIG1fc3RyZWFtQ29sbGVjdGlvbi5zd2FwKGNvbGxlY3Rpb24pOwotICAgICAg
ICBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkID0gIiI7Ci0gICAgICAgIG1fY3VycmVudFZpZGVvU3Ry
ZWFtSWQgPSAiIjsKLSAgICAgICAgbV9jdXJyZW50VGV4dFN0cmVhbUlkID0gIiI7Cit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJh
Y2soR3N0QmluKiBiaW4sIEdzdEVsZW1lbnQqIGVsZW1lbnQsIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lciogcGxheWVyKQoreworICAgIGlmIChnX3N0cmNtcDAoR19PQkpFQ1RfVFlQRV9OQU1F
KGVsZW1lbnQpLCAiR3N0RG93bmxvYWRCdWZmZXIiKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3Np
emUobWVzc2FnZSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9IGdzdF9tZXNzYWdl
X3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3N0cmVhbShtZXNzYWdlLCBpKTsKLSAgICAgICAgICAgIGlm
ICghc3RyZWFtKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIHBsYXllci0+bV9kb3du
bG9hZEJ1ZmZlciA9IGVsZW1lbnQ7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9i
eV9mdW5jKGJpbiwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4odXJpRGVjb2RlQmluRWxlbWVu
dEFkZGVkQ2FsbGJhY2spLCBwbGF5ZXIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChl
bGVtZW50LCAibm90aWZ5Ojp0ZW1wLWxvY2F0aW9uIiwgR19DQUxMQkFDSyhkb3dubG9hZEJ1ZmZl
ckZpbGVDcmVhdGVkQ2FsbGJhY2spLCBwbGF5ZXIpOwogCi0gICAgICAgICAgICBHc3RTdHJlYW1U
eXBlIHR5cGUgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0uZ2V0KCkpOwotICAg
ICAgICAgICAgU3RyaW5nIHN0cmVhbUlkKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0u
Z2V0KCkpKTsKKyAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IG9sZERvd25sb2FkVGVtcGxhdGU7Cisg
ICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJ0ZW1wLXRlbXBsYXRlIiwgJm9sZERvd25sb2FkVGVt
cGxhdGUub3V0UHRyKCksIG51bGxwdHIpOwogCi0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJTZWxlY3RpbmcgJXMgdHJhY2sgd2l0aCBJRDogJXMiLCBnc3Rfc3RyZWFt
X3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAg
ICAgLy8gUGxheWJpbjMgY2FuIHNlbmQgbW9yZSB0aGFuIG9uZSBzZWxlY3RlZCBzdHJlYW0gb2Yg
dGhlIHNhbWUgdHlwZQotICAgICAgICAgICAgLy8gYnV0IHRoZXJlJ3Mgbm8gcHJpb3JpdHkgb3Ig
b3JkZXJpbmcgc3lzdGVtIGluIHBsYWNlLCBzbyB3ZSBhc3N1bWUKLSAgICAgICAgICAgIC8vIHRo
ZSBzZWxlY3RlZCBzdHJlYW0gaXMgdGhlIGxhc3Qgb25lIGFzIHJlcG9ydGVkIGJ5IHBsYXliaW4z
LgotICAgICAgICAgICAgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfQVVESU8pIHsKLSAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkID0gc3RyZWFtSWQ7Ci0gICAgICAgICAg
ICAgICAgYXV0byB0cmFjayA9IG1fYXVkaW9UcmFja3MuZ2V0KG1fY3VycmVudEF1ZGlvU3RyZWFt
SWQpOwotICAgICAgICAgICAgICAgIEFTU0VSVCh0cmFjayk7Ci0gICAgICAgICAgICAgICAgdHJh
Y2stPm1hcmtBc0FjdGl2ZSgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NU
UkVBTV9UWVBFX1ZJREVPKSB7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50VmlkZW9TdHJlYW1J
ZCA9IHN0cmVhbUlkOwotICAgICAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBtX3ZpZGVvVHJhY2tz
LmdldChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQodHJh
Y2spOwotICAgICAgICAgICAgICAgIHRyYWNrLT5tYXJrQXNBY3RpdmUoKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9URVhUKQotICAgICAgICAgICAgICAg
IG1fY3VycmVudFRleHRTdHJlYW1JZCA9IHN0cmVhbUlkOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJVbmtub3duIHN0cmVhbSB0eXBlIHdpdGggc3RyZWFt
LWlkICVzIiwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIlVuaGFuZGxlZCBHU3RyZWFtZXIgbWVzc2FnZSB0eXBlOiAlcyIsIEdTVF9NRVNTQUdF
X1RZUEVfTkFNRShtZXNzYWdlKSk7Ci0gICAgICAgIGJyZWFrOworICAgIEdVbmlxdWVQdHI8Y2hh
cj4gbmV3RG93bmxvYWRUZW1wbGF0ZShnX2J1aWxkX2ZpbGVuYW1lKEdfRElSX1NFUEFSQVRPUl9T
LCAidmFyIiwgInRtcCIsICJXZWJLaXQtTWVkaWEtWFhYWFhYIiwgbnVsbHB0cikpOworICAgIGdf
b2JqZWN0X3NldChlbGVtZW50LCAidGVtcC10ZW1wbGF0ZSIsIG5ld0Rvd25sb2FkVGVtcGxhdGUu
Z2V0KCksIG51bGxwdHIpOworICAgIEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBlbGluZSgp
LCAiUmVjb25maWd1cmVkIGZpbGUgZG93bmxvYWQgdGVtcGxhdGUgZnJvbSAnJXMnIHRvICclcyci
LCBvbGREb3dubG9hZFRlbXBsYXRlLmdldCgpLCBuZXdEb3dubG9hZFRlbXBsYXRlLmdldCgpKTsK
KworICAgIHBsYXllci0+cHVyZ2VPbGREb3dubG9hZEZpbGVzKG9sZERvd25sb2FkVGVtcGxhdGUu
Z2V0KCkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG93bmxvYWRC
dWZmZXJGaWxlQ3JlYXRlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxh
eWVyKQoreworICAgIEFTU0VSVChwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIpOworCisgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHBsYXllci0+bV9kb3dubG9hZEJ1ZmZl
ci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4oZG93bmxvYWRCdWZmZXJGaWxlQ3Jl
YXRlZENhbGxiYWNrKSwgcGxheWVyKTsKKworICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gZG93bmxv
YWRGaWxlOworICAgIGdfb2JqZWN0X2dldChwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIuZ2V0KCks
ICJ0ZW1wLWxvY2F0aW9uIiwgJmRvd25sb2FkRmlsZS5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAg
cGxheWVyLT5tX2Rvd25sb2FkQnVmZmVyID0gbnVsbHB0cjsKKworICAgIGlmIChVTkxJS0VMWSgh
RmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShkb3dubG9hZEZpbGUuZ2V0KCkpKSkgeworICAgICAgICBH
U1RfV0FSTklORygiQ291bGRuJ3QgdW5saW5rIG1lZGlhIHRlbXBvcmFyeSBmaWxlICVzIGFmdGVy
IGNyZWF0aW9uIiwgZG93bmxvYWRGaWxlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0K
KworICAgIEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBlbGluZSgpLCAiVW5saW5rZWQgbWVk
aWEgdGVtcG9yYXJ5IGZpbGUgJXMgYWZ0ZXIgY3JlYXRpb24iLCBkb3dubG9hZEZpbGUuZ2V0KCkp
OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc0J1ZmZlcmlu
Z1N0YXRzKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6cHVyZ2VPbGREb3dubG9hZEZpbGVzKGNvbnN0IGNoYXIqIGRvd25sb2FkRmlsZVRlbXBs
YXRlKQogewotICAgIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZTsKLSAgICBnc3RfbWVzc2FnZV9wYXJz
ZV9idWZmZXJpbmdfc3RhdHMobWVzc2FnZSwgJm1vZGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxw
dHIpOworICAgIGlmICghZG93bmxvYWRGaWxlVGVtcGxhdGUpCisgICAgICAgIHJldHVybjsKIAot
ICAgIGludCBwZXJjZW50YWdlOwotICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyhtZXNz
YWdlLCAmcGVyY2VudGFnZSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiB0ZW1wbGF0ZVBhdGgoZ19w
YXRoX2dldF9kaXJuYW1lKGRvd25sb2FkRmlsZVRlbXBsYXRlKSk7CisgICAgR1VuaXF1ZVB0cjxj
aGFyPiB0ZW1wbGF0ZUZpbGUoZ19wYXRoX2dldF9iYXNlbmFtZShkb3dubG9hZEZpbGVUZW1wbGF0
ZSkpOworICAgIFN0cmluZyB0ZW1wbGF0ZVBhdHRlcm4gPSBTdHJpbmcodGVtcGxhdGVGaWxlLmdl
dCgpKS5yZXBsYWNlKCJYIiwgIj8iKTsKIAotICAgIHVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhtb2Rl
LCBwZXJjZW50YWdlKTsKKyAgICBmb3IgKGF1dG8mIGZpbGVQYXRoIDogRmlsZVN5c3RlbTo6bGlz
dERpcmVjdG9yeSh0ZW1wbGF0ZVBhdGguZ2V0KCksIHRlbXBsYXRlUGF0dGVybikpIHsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZpbGVQYXRoKSkpIHsKKyAg
ICAgICAgICAgIEdTVF9XQVJOSU5HKCJDb3VsZG4ndCB1bmxpbmsgbGVnYWN5IG1lZGlhIHRlbXBv
cmFyeSBmaWxlOiAlcyIsIGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICBHU1RfVFJBQ0UoIlVubGlua2VkIGxlZ2FjeSBt
ZWRpYSB0ZW1wb3JhcnkgZmlsZTogJXMiLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICB9
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVNYXhUaW1lTG9h
ZGVkKGRvdWJsZSBwZXJjZW50YWdlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmFzeW5jU3RhdGVDaGFuZ2VEb25lKCkKIHsKLSAgICBNZWRpYVRpbWUgbWVkaWFEdXJhdGlvbiA9
IGR1cmF0aW9uTWVkaWFUaW1lKCk7Ci0gICAgaWYgKCFtZWRpYUR1cmF0aW9uKQorICAgIGlmICgh
bV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9t
YXhUaW1lTG9hZGVkID0gTWVkaWFUaW1lKHBlcmNlbnRhZ2UgKiBzdGF0aWNfY2FzdDxkb3VibGU+
KHRvR3N0VW5zaWduZWQ2NFRpbWUobWVkaWFEdXJhdGlvbikpIC8gMTAwLCBHU1RfU0VDT05EKTsK
LSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBVcGRhdGVkIG1h
eFRpbWVMb2FkZWQ6ICVzIiwgdG9TdHJpbmcobV9tYXhUaW1lTG9hZGVkKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBpZiAobV9zZWVraW5nKSB7CisgICAgICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpCisg
ICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gc2Vla2VkIHRvICVzIiwgdG9TdHJp
bmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBtX3NlZWtpbmcgPSBm
YWxzZTsKKyAgICAgICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRU
aW1lKCk7CisgICAgICAgICAgICBpZiAobV90aW1lT2ZPdmVybGFwcGluZ1NlZWsgIT0gbV9zZWVr
VGltZSAmJiBtX3RpbWVPZk92ZXJsYXBwaW5nU2Vlay5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAg
ICAgICBzZWVrKG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrKTsKKyAgICAgICAgICAgICAgICBtX3Rp
bWVPZk92ZXJsYXBwaW5nU2VlayA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3RpbWVPZk92ZXJs
YXBwaW5nU2VlayA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgICAgICAgICAgLy8g
VGhlIHBpcGVsaW5lIGNhbiBzdGlsbCBoYXZlIGEgcGVuZGluZyBzdGF0ZS4gSW4gdGhpcyBjYXNl
IGEgcG9zaXRpb24gcXVlcnkgd2lsbCBmYWlsLgorICAgICAgICAgICAgLy8gUmlnaHQgbm93IHdl
IGNhbiB1c2UgbV9zZWVrVGltZSBhcyBhIGZhbGxiYWNrLgorICAgICAgICAgICAgbV9jYW5GYWxs
QmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIHRpbWVD
aGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgdXBkYXRlU3RhdGVzKCk7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVCdWZmZXJpbmdT
dGF0dXMoR3N0QnVmZmVyaW5nTW9kZSBtb2RlLCBkb3VibGUgcGVyY2VudGFnZSkKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogewotICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIG1vZGU6ICVzLCBzdGF0dXM6ICVmJSUi
LCBlbnVtVG9TdHJpbmcoR1NUX1RZUEVfQlVGRkVSSU5HX01PREUsIG1vZGUpLmRhdGEoKSwgcGVy
Y2VudGFnZSk7CisgICAgaWYgKCFtX3BpcGVsaW5lKQorICAgICAgICByZXR1cm47CiAKLSAgICBt
X2Rvd25sb2FkRmluaXNoZWQgPSBwZXJjZW50YWdlID09IDEwMDsKLSAgICBtX2J1ZmZlcmluZyA9
ICFtX2Rvd25sb2FkRmluaXNoZWQ7CisgICAgaWYgKG1fZXJyb3JPY2N1cmVkKQorICAgICAgICBy
ZXR1cm47CiAKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdTVF9CVUZGRVJJTkdfU1RS
RUFNOiB7Ci0gICAgICAgIHVwZGF0ZU1heFRpbWVMb2FkZWQocGVyY2VudGFnZSk7CisgICAgTWVk
aWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsK
KyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRl
OworICAgIEdzdFN0YXRlIHBlbmRpbmc7CisgICAgR3N0U3RhdGUgc3RhdGU7CisgICAgYm9vbCBz
dGF0ZVJlYWxseUNoYW5nZWQgPSBmYWxzZTsKIAotICAgICAgICBtX2J1ZmZlcmluZ1BlcmNlbnRh
Z2UgPSBwZXJjZW50YWdlOwotICAgICAgICBpZiAobV9kb3dubG9hZEZpbmlzaGVkKQotICAgICAg
ICAgICAgdXBkYXRlU3RhdGVzKCk7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVS
ZXN1bHQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAm
cGVuZGluZywgMjUwICogR1NUX05TRUNPTkQpOworICAgIGlmIChzdGF0ZSAhPSBtX2N1cnJlbnRT
dGF0ZSkgeworICAgICAgICBtX29sZFN0YXRlID0gbV9jdXJyZW50U3RhdGU7CisgICAgICAgIG1f
Y3VycmVudFN0YXRlID0gc3RhdGU7CisgICAgICAgIHN0YXRlUmVhbGx5Q2hhbmdlZCA9IHRydWU7
CisgICAgfQorCisgICAgYm9vbCBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gZmFsc2U7Cisg
ICAgc3dpdGNoIChnZXRTdGF0ZVJlc3VsdCkgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9T
VUNDRVNTOiB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlN0YXRlOiAl
cywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0
ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKKworICAgICAgICAvLyBE
byBub3RoaW5nIGlmIG9uIEVPUyBhbmQgc3RhdGUgY2hhbmdlZCB0byBSRUFEWSB0byBhdm9pZCBy
ZWNyZWF0aW5nIHRoZSBwbGF5ZXIKKyAgICAgICAgLy8gb24gSFRNTE1lZGlhRWxlbWVudCBhbmQg
cHJvcGVybHkgZ2VuZXJhdGUgdGhlIHZpZGVvICdlbmRlZCcgZXZlbnQuCisgICAgICAgIGlmICht
X2lzRW5kUmVhY2hlZCAmJiBtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpCisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBtX3Jlc2V0UGlwZWxpbmUgPSBtX2N1cnJlbnRTdGF0
ZSA8PSBHU1RfU1RBVEVfUkVBRFk7CisKKyAgICAgICAgYm9vbCBkaWRCdWZmZXJpbmcgPSBtX2J1
ZmZlcmluZzsKKworICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgor
ICAgICAgICBzd2l0Y2ggKG1fY3VycmVudFN0YXRlKSB7CisgICAgICAgIGNhc2UgR1NUX1NUQVRF
X05VTEw6CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhp
bmc7CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpFbXB0eTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdTVF9TVEFURV9SRUFEWToKKyAgICAgICAg
ICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgICAgICAg
ICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpFbXB0eTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdTVF9TVEFURV9QQVVTRUQ6CisgICAgICAgIGNhc2UgR1NUX1NUQVRF
X1BMQVlJTkc6CisgICAgICAgICAgICBpZiAobV9idWZmZXJpbmcpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobV9idWZmZXJpbmdQZXJjZW50YWdlID09IDEwMCkgeworICAgICAgICAgICAgICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBDb21wbGV0ZS4iKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9idWZmZXJpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAg
ICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IG1fZG93bmxvYWRGaW5pc2hlZCA/IE1lZGlh
UGxheWVyOjpJZGxlIDogTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6Okhh
dmVDdXJyZW50RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRp
YVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1fZG93bmxvYWRGaW5pc2hlZCkgeworICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICAgICAgICAgICAgICBtX25ldHdvcmtT
dGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YTsKKyAg
ICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICAvLyBTeW5jIHN0YXRlcyB3aGVyZSBuZWVkZWQuCisgICAgICAgIGlmICht
X2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CisgICAgICAgICAgICBpZiAoIW1f
dm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgbm90aWZ5UGxheWVy
T2ZWb2x1bWVDaGFuZ2UoKTsKKyAgICAgICAgICAgICAgICBub3RpZnlQbGF5ZXJPZk11dGUoKTsK
KyAgICAgICAgICAgICAgICBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCA9IHRydWU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkaWRCdWZmZXJpbmcgJiYgIW1fYnVmZmVyaW5n
ICYmICFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkgeworICAgICAgICAgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIFJlc3RhcnRpbmcgcGxheWJhY2su
Iik7CisgICAgICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlO
Ryk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50U3RhdGUgPT0g
R1NUX1NUQVRFX1BMQVlJTkcpIHsKKyAgICAgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7CisKKyAg
ICAgICAgICAgIGlmICgobV9idWZmZXJpbmcgJiYgIWlzTGl2ZVN0cmVhbSgpKSB8fCAhbV9wbGF5
YmFja1JhdGUpIHsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBmb3IgYnVmZmVyaW5nLiIpOworICAgICAgICAg
ICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworCisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk9sZCBzdGF0ZTogJXMsIG5ldyBzdGF0
ZTogJXMgKHJlcXVlc3RlZDogJXMpIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9vbGRT
dGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2Vs
ZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9yZXF1ZXN0ZWRTdGF0ZSkpOworICAgICAgICBpZiAobV9y
ZXF1ZXN0ZWRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEICYmIG1fY3VycmVudFN0YXRlID09IEdT
VF9TVEFURV9QQVVTRUQpIHsKKyAgICAgICAgICAgIHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUg
PSB0cnVlOworICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJSZXF1ZXN0
ZWQgc3RhdGUgY2hhbmdlIHRvICVzIHdhcyBjb21wbGV0ZWQiLCBnc3RfZWxlbWVudF9zdGF0ZV9n
ZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRW1pdCBw
bGF5IHN0YXRlIGNoYW5nZSBub3RpZmljYXRpb24gb25seSB3aGVuIGdvaW5nIHRvIFBMQVlJTkcg
c28gdGhhdAorICAgICAgICAvLyB0aGUgbWVkaWEgZWxlbWVudCBnZXRzIGEgY2hhbmNlIHRvIGVu
YWJsZSBpdHMgcGFnZSBzbGVlcCBkaXNhYmxlci4KKyAgICAgICAgLy8gRW1pdHRpbmcgdGhpcyBu
b3RpZmljYXRpb24gaW4gbW9yZSBjYXNlcyB0cmlnZ2VycyB1bndhbnRlZCBjb2RlIHBhdGhzCisg
ICAgICAgIC8vIGFuZCB0ZXN0IHRpbWVvdXRzLgorICAgICAgICBpZiAoc3RhdGVSZWFsbHlDaGFu
Z2VkICYmIChtX29sZFN0YXRlICE9IG1fY3VycmVudFN0YXRlKSAmJiAobV9vbGRTdGF0ZSA9PSBH
U1RfU1RBVEVfUEFVU0VEICYmIG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSkg
eworICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5YmFjayBzdGF0
ZSBjaGFuZ2VkIGZyb20gJXMgdG8gJXMuIE5vdGlmeWluZyB0aGUgbWVkaWEgcGxheWVyIGNsaWVu
dCIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fb2xkU3RhdGUpLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSkpOworICAgICAgICAgICAgc2hvdWxkVXBkYXRl
UGxheWJhY2tTdGF0ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgorICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJBc3luYzogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUocGVuZGluZykpOworICAgICAgICAvLyBDaGFuZ2UgaW4gcHJvZ3Jlc3MuCisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgorICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJGYWlsdXJlOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVz
IiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBnc3RfZWxlbWVu
dF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBmYWlsZWQKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOgorICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJObyBwcmVyb2xsOiBTdGF0ZTogJXMs
IHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUp
LCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisKKyAgICAgICAgLy8gTGl2
ZSBwaXBlbGluZXMgZ28gaW4gUEFVU0VEIHdpdGhvdXQgcHJlcm9sbGluZy4KKyAgICAgICAgbV9p
c1N0cmVhbWluZyA9IHRydWU7CisgICAgICAgIHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygp
OwogCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9CVUZGRVJJTkdfRE9XTkxP
QUQ6IHsKLSAgICAgICAgdXBkYXRlTWF4VGltZUxvYWRlZChwZXJjZW50YWdlKTsKKyAgICAgICAg
aWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgIG1fcmVh
ZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgZWxzZSBpZiAobV9j
dXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAgbV9yZWFkeVN0
YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAgbV9wYXVzZWQg
PSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9Q
TEFZSU5HKQorICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKIAotICAgICAgICAvLyBNZWRp
YSBpcyBub3cgZnVsbHkgbG9hZGVkLiBJdCB3aWxsIHBsYXkgZXZlbiBpZiBuZXR3b3JrIGNvbm5l
Y3Rpb24gaXMKLSAgICAgICAgLy8gY3V0LiBCdWZmZXJpbmcgaXMgZG9uZSwgcmVtb3ZlIHRoZSBm
aWxsIHNvdXJjZSBmcm9tIHRoZSBtYWluIGxvb3AuCi0gICAgICAgIGlmIChtX2Rvd25sb2FkRmlu
aXNoZWQpCi0gICAgICAgICAgICBtX2ZpbGxUaW1lci5zdG9wKCk7CisgICAgICAgIGlmICghbV9w
YXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpCisgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRl
KEdTVF9TVEFURV9QTEFZSU5HKTsKIAotICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKKyAgICAgICAg
bV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKICAgICAgICAgYnJlYWs7Ci0g
ICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IlVuaGFuZGxlZCBidWZmZXJpbmcgbW9kZTogJXMiLCBlbnVtVG9TdHJpbmcoR1NUX1RZUEVfQlVG
RkVSSU5HX01PREUsIG1vZGUpLmRhdGEoKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIkVsc2UgOiAlZCIsIGdldFN0YXRlUmVzdWx0KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotfQogCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBVU0UoR1NUUkVBTUVSX01QRUdU
UykKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzTXBlZ1RzU2VjdGlv
bihHc3RNcGVndHNTZWN0aW9uKiBzZWN0aW9uKQotewotICAgIEFTU0VSVChzZWN0aW9uKTsKKyAg
ICBtX3JlcXVlc3RlZFN0YXRlID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKIAotICAgIGlmIChz
ZWN0aW9uLT5zZWN0aW9uX3R5cGUgPT0gR1NUX01QRUdUU19TRUNUSU9OX1BNVCkgewotICAgICAg
ICBjb25zdCBHc3RNcGVndHNQTVQqIHBtdCA9IGdzdF9tcGVndHNfc2VjdGlvbl9nZXRfcG10KHNl
Y3Rpb24pOwotICAgICAgICBtX21ldGFkYXRhVHJhY2tzLmNsZWFyKCk7Ci0gICAgICAgIGZvciAo
Z3VpbnQgaSA9IDA7IGkgPCBwbXQtPnN0cmVhbXMtPmxlbjsgKytpKSB7Ci0gICAgICAgICAgICBj
b25zdCBHc3RNcGVndHNQTVRTdHJlYW0qIHN0cmVhbSA9IHN0YXRpY19jYXN0PGNvbnN0IEdzdE1w
ZWd0c1BNVFN0cmVhbSo+KGdfcHRyX2FycmF5X2luZGV4KHBtdC0+c3RyZWFtcywgaSkpOwotICAg
ICAgICAgICAgaWYgKHN0cmVhbS0+c3RyZWFtX3R5cGUgPT0gMHgwNSB8fCBzdHJlYW0tPnN0cmVh
bV90eXBlID49IDB4ODApIHsKLSAgICAgICAgICAgICAgICBBdG9tU3RyaW5nIHBpZCA9IFN0cmlu
Zzo6bnVtYmVyKHN0cmVhbS0+cGlkKTsKLSAgICAgICAgICAgICAgICBhdXRvIHRyYWNrID0gSW5i
YW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoCi0gICAgICAgICAg
ICAgICAgICAgIEluYmFuZFRleHRUcmFja1ByaXZhdGU6Ok1ldGFkYXRhLCBJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlOjpEYXRhLCBwaWQpOworICAgIGlmIChzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRl
KQorICAgICAgICBtX3BsYXllci0+cGxheWJhY2tTdGF0ZUNoYW5nZWQoKTsKIAotICAgICAgICAg
ICAgICAgIC8vIDQuNy4xMC4xMi4yIFNvdXJjaW5nIGluLWJhbmQgdGV4dCB0cmFja3MKLSAgICAg
ICAgICAgICAgICAvLyBJZiB0aGUgbmV3IHRleHQgdHJhY2sncyBraW5kIGlzIG1ldGFkYXRhLCB0
aGVuIHNldCB0aGUgdGV4dCB0cmFjayBpbi1iYW5kIG1ldGFkYXRhIHRyYWNrIGRpc3BhdGNoCi0g
ICAgICAgICAgICAgICAgLy8gdHlwZSBhcyBmb2xsb3dzLCBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0
aGUgbWVkaWEgcmVzb3VyY2U6Ci0gICAgICAgICAgICAgICAgLy8gTGV0IHN0cmVhbSB0eXBlIGJl
IHRoZSB2YWx1ZSBvZiB0aGUgInN0cmVhbV90eXBlIiBmaWVsZCBkZXNjcmliaW5nIHRoZSB0ZXh0
IHRyYWNrJ3MgdHlwZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBmaWxlJ3MgcHJvZ3JhbSBt
YXAgc2VjdGlvbiwgaW50ZXJwcmV0ZWQgYXMgYW4gOC1iaXQgdW5zaWduZWQgaW50ZWdlci4gTGV0
IGxlbmd0aCBiZSB0aGUgdmFsdWUgb2YKLSAgICAgICAgICAgICAgICAvLyB0aGUgIkVTX2luZm9f
bGVuZ3RoIiBmaWVsZCBmb3IgdGhlIHRyYWNrIGluIHRoZSBzYW1lIHBhcnQgb2YgdGhlIHByb2dy
YW0gbWFwIHNlY3Rpb24sIGludGVycHJldGVkCi0gICAgICAgICAgICAgICAgLy8gYXMgYW4gaW50
ZWdlciBhcyBkZWZpbmVkIGJ5IHRoZSBNUEVHLTIgc3BlY2lmaWNhdGlvbi4gTGV0IGRlc2NyaXB0
b3IgYnl0ZXMgYmUgdGhlIGxlbmd0aCBieXRlcwotICAgICAgICAgICAgICAgIC8vIGZvbGxvd2lu
ZyB0aGUgIkVTX2luZm9fbGVuZ3RoIiBmaWVsZC4gVGhlIHRleHQgdHJhY2sgaW4tYmFuZCBtZXRh
ZGF0YSB0cmFjayBkaXNwYXRjaCB0eXBlIG11c3QgYmUKLSAgICAgICAgICAgICAgICAvLyBzZXQg
dG8gdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmVhbSB0eXBlIGJ5dGUgYW5kIHRoZSB6ZXJv
IG9yIG1vcmUgZGVzY3JpcHRvciBieXRlcyBieXRlcywKLSAgICAgICAgICAgICAgICAvLyBleHBy
ZXNzZWQgaW4gaGV4YWRlY2ltYWwgdXNpbmcgdXBwZXJjYXNlIEFTQ0lJIGhleCBkaWdpdHMuCi0g
ICAgICAgICAgICAgICAgU3RyaW5nIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGU7Ci0g
ICAgICAgICAgICAgICAgYXBwZW5kVW5zaWduZWRBc0hleEZpeGVkU2l6ZShzdHJlYW0tPnN0cmVh
bV90eXBlLCBpbmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlLCAyKTsKLSAgICAgICAgICAg
ICAgICBmb3IgKGd1aW50IGogPSAwOyBqIDwgc3RyZWFtLT5kZXNjcmlwdG9ycy0+bGVuOyArK2op
IHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgR3N0TXBlZ3RzRGVzY3JpcHRvciogZGVzY3Jp
cHRvciA9IHN0YXRpY19jYXN0PGNvbnN0IEdzdE1wZWd0c0Rlc2NyaXB0b3IqPihnX3B0cl9hcnJh
eV9pbmRleChzdHJlYW0tPmRlc2NyaXB0b3JzLCBqKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoZ3VpbnQgayA9IDA7IGsgPCBkZXNjcmlwdG9yLT5sZW5ndGg7ICsraykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZEJ5dGVBc0hleChkZXNjcmlwdG9yLT5kYXRhW2tdLCBpbmJhbmRN
ZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgdHJhY2stPnNldEluQmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUoaW5iYW5kTWV0
YWRhdGFUcmFja0Rpc3BhdGNoVHlwZSk7CisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5l
dHdvcmtTdGF0ZSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJOZXR3
b3JrIFN0YXRlIENoYW5nZWQgZnJvbSAlcyB0byAlcyIsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3Ry
aW5nKG9sZE5ldHdvcmtTdGF0ZSkudXRmOCgpLmRhdGEoKSwgY29udmVydEVudW1lcmF0aW9uVG9T
dHJpbmcobV9uZXR3b3JrU3RhdGUpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtX3BsYXllci0+
bmV0d29ya1N0YXRlQ2hhbmdlZCgpOworICAgIH0KKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9s
ZFJlYWR5U3RhdGUpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUmVh
ZHkgU3RhdGUgQ2hhbmdlZCBmcm9tICVzIHRvICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJp
bmcob2xkUmVhZHlTdGF0ZSkudXRmOCgpLmRhdGEoKSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJp
bmcobV9yZWFkeVN0YXRlKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9wbGF5ZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisgICAgfQogCi0gICAgICAgICAgICAgICAgbV9tZXRhZGF0YVRyYWNr
cy5hZGQocGlkLCB0cmFjayk7Ci0gICAgICAgICAgICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFj
aygqdHJhY2spOworICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NV
Q0NFU1MgJiYgbV9jdXJyZW50U3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICB1
cGRhdGVQbGF5YmFja1JhdGUoKTsKKyAgICAgICAgaWYgKG1fc2Vla0lzUGVuZGluZykgeworICAg
ICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIGNvbW1pdHRpbmcg
cGVuZGluZyBzZWVrIHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgICAgICBtX3NlZWtJc1BlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fc2Vl
a2luZyA9IGRvU2VlayhtX3NlZWtUaW1lLCBtX3BsYXllci0+cmF0ZSgpLCBzdGF0aWNfY2FzdDxH
c3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRF
KSk7CisgICAgICAgICAgICBpZiAoIW1fc2Vla2luZykgeworICAgICAgICAgICAgICAgIG1fY2Fj
aGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisgICAgICAgICAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIHNlZWtpbmcgdG8gJXMgZmFpbGVk
IiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBBdG9tU3RyaW5nIHBpZCA9IFN0cmluZzo6
bnVtYmVyKHNlY3Rpb24tPnBpZCk7Ci0gICAgICAgIFJlZlB0cjxJbmJhbmRNZXRhZGF0YVRleHRU
cmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gbV9tZXRhZGF0YVRyYWNrcy5nZXQocGlkKTsK
LSAgICAgICAgaWYgKCF0cmFjaykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBHUmVm
UHRyPEdCeXRlcz4gZGF0YSA9IGdzdF9tcGVndHNfc2VjdGlvbl9nZXRfZGF0YShzZWN0aW9uKTsK
LSAgICAgICAgZ3NpemUgc2l6ZTsKLSAgICAgICAgY29uc3Qgdm9pZCogYnl0ZXMgPSBnX2J5dGVz
X2dldF9kYXRhKGRhdGEuZ2V0KCksICZzaXplKTsKLQotICAgICAgICB0cmFjay0+YWRkRGF0YUN1
ZShjdXJyZW50TWVkaWFUaW1lKCksIGN1cnJlbnRNZWRpYVRpbWUoKSwgYnl0ZXMsIHNpemUpOwog
ICAgIH0KIH0KLSNlbmRpZgogCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NUYWJsZU9mQ29udGVudHMoR3N0TWVzc2FnZSog
bWVzc2FnZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptZWRpYUxvY2F0aW9u
Q2hhbmdlZChHc3RNZXNzYWdlKiBtZXNzYWdlKQogewotICAgIGlmIChtX2NoYXB0ZXJzVHJhY2sp
Ci0gICAgICAgIG1fcGxheWVyLT5yZW1vdmVUZXh0VHJhY2soKm1fY2hhcHRlcnNUcmFjayk7Cisg
ICAgaWYgKG1fbWVkaWFMb2NhdGlvbnMpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZShtX21l
ZGlhTG9jYXRpb25zKTsKIAotICAgIG1fY2hhcHRlcnNUcmFjayA9IEluYmFuZE1ldGFkYXRhVGV4
dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKEluYmFuZFRleHRUcmFja1ByaXZhdGU6OkNo
YXB0ZXJzLCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpHZW5lcmljKTsKLSAgICBtX3BsYXllci0+
YWRkVGV4dFRyYWNrKCptX2NoYXB0ZXJzVHJhY2spOworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKyAgICBpZiAo
c3RydWN0dXJlKSB7CisgICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNhbiBjb250YWluOgorICAg
ICAgICAvLyAtIGJvdGggYSBuZXctbG9jYXRpb24gc3RyaW5nIGFuZCBlbWJlZGRlZCBsb2NhdGlv
bnMgc3RydWN0dXJlCisgICAgICAgIC8vIC0gb3Igb25seSBhIG5ldy1sb2NhdGlvbiBzdHJpbmcu
CisgICAgICAgIG1fbWVkaWFMb2NhdGlvbnMgPSBnc3Rfc3RydWN0dXJlX2NvcHkoc3RydWN0dXJl
KTsKKyAgICAgICAgY29uc3QgR1ZhbHVlKiBsb2NhdGlvbnMgPSBnc3Rfc3RydWN0dXJlX2dldF92
YWx1ZShtX21lZGlhTG9jYXRpb25zLCAibG9jYXRpb25zIik7CiAKLSAgICBHUmVmUHRyPEdzdFRv
Yz4gdG9jOwotICAgIGdib29sZWFuIHVwZGF0ZWQ7Ci0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfdG9j
KG1lc3NhZ2UsICZ0b2Mub3V0UHRyKCksICZ1cGRhdGVkKTsKLSAgICBBU1NFUlQodG9jKTsKKyAg
ICAgICAgaWYgKGxvY2F0aW9ucykKKyAgICAgICAgICAgIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJ
bmRleCA9IHN0YXRpY19jYXN0PGludD4oZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUobG9jYXRpb25z
KSkgLTE7CiAKLSAgICBmb3IgKEdMaXN0KiBpID0gZ3N0X3RvY19nZXRfZW50cmllcyh0b2MuZ2V0
KCkpOyBpOyBpID0gaS0+bmV4dCkKLSAgICAgICAgcHJvY2Vzc1RhYmxlT2ZDb250ZW50c0VudHJ5
KHN0YXRpY19jYXN0PEdzdFRvY0VudHJ5Kj4oaS0+ZGF0YSkpOworICAgICAgICBsb2FkTmV4dExv
Y2F0aW9uKCk7CisgICAgfQogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cHJvY2Vzc1RhYmxlT2ZDb250ZW50c0VudHJ5KEdzdFRvY0VudHJ5KiBlbnRyeSkKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9uKCkKIHsKLSAgICBBU1NF
UlQoZW50cnkpOworICAgIGlmICghbV9tZWRpYUxvY2F0aW9ucykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byBjdWUgPSBHZW5lcmljQ3VlRGF0YTo6Y3JlYXRlKCk7CisgICAgY29u
c3QgR1ZhbHVlKiBsb2NhdGlvbnMgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShtX21lZGlhTG9j
YXRpb25zLCAibG9jYXRpb25zIik7CisgICAgY29uc3QgZ2NoYXIqIG5ld0xvY2F0aW9uID0gbnVs
bHB0cjsKIAotICAgIGdpbnQ2NCBzdGFydCA9IC0xLCBzdG9wID0gLTE7Ci0gICAgZ3N0X3RvY19l
bnRyeV9nZXRfc3RhcnRfc3RvcF90aW1lcyhlbnRyeSwgJnN0YXJ0LCAmc3RvcCk7Ci0gICAgaWYg
KHN0YXJ0ICE9IC0xKQotICAgICAgICBjdWUtPnNldFN0YXJ0VGltZShNZWRpYVRpbWUoc3RhcnQs
IEdTVF9TRUNPTkQpKTsKLSAgICBpZiAoc3RvcCAhPSAtMSkKLSAgICAgICAgY3VlLT5zZXRFbmRU
aW1lKE1lZGlhVGltZShzdG9wLCBHU1RfU0VDT05EKSk7CisgICAgaWYgKCFsb2NhdGlvbnMpIHsK
KyAgICAgICAgLy8gRmFsbGJhY2sgb24gbmV3LWxvY2F0aW9uIHN0cmluZy4KKyAgICAgICAgbmV3
TG9jYXRpb24gPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcobV9tZWRpYUxvY2F0aW9ucywgIm5l
dy1sb2NhdGlvbiIpOworICAgICAgICBpZiAoIW5ld0xvY2F0aW9uKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KIAotICAgIEdzdFRhZ0xpc3QqIHRhZ3MgPSBnc3RfdG9jX2VudHJ5
X2dldF90YWdzKGVudHJ5KTsKLSAgICBpZiAodGFncykgewotICAgICAgICBnY2hhciogdGl0bGUg
PSBudWxscHRyOwotICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyh0YWdzLCBHU1RfVEFH
X1RJVExFLCAmdGl0bGUpOwotICAgICAgICBpZiAodGl0bGUpIHsKLSAgICAgICAgICAgIGN1ZS0+
c2V0Q29udGVudCh0aXRsZSk7Ci0gICAgICAgICAgICBnX2ZyZWUodGl0bGUpOworICAgIGlmICgh
bmV3TG9jYXRpb24pIHsKKyAgICAgICAgaWYgKG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCA8
IDApIHsKKyAgICAgICAgICAgIG1fbWVkaWFMb2NhdGlvbnMgPSBudWxscHRyOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgR1ZhbHVlKiBsb2Nh
dGlvbiA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZShsb2NhdGlvbnMsIG1fbWVkaWFMb2NhdGlv
bkN1cnJlbnRJbmRleCk7CisgICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUobG9jYXRpb24pOworCisgICAgICAgIGlmICghc3RydWN0
dXJlKSB7CisgICAgICAgICAgICBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXgtLTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorCisgICAgICAgIG5ld0xvY2F0aW9uID0g
Z3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm5ldy1sb2NhdGlvbiIpOwogICAg
IH0KIAotICAgIG1fY2hhcHRlcnNUcmFjay0+YWRkR2VuZXJpY0N1ZShjdWUpOworICAgIGlmIChu
ZXdMb2NhdGlvbikgeworICAgICAgICAvLyBGb3VuZCBhIGNhbmRpZGF0ZS4gbmV3LWxvY2F0aW9u
IGlzIG5vdCBhbHdheXMgYW4gYWJzb2x1dGUgdXJsCisgICAgICAgIC8vIHRob3VnaC4gV2UgbmVl
ZCB0byB0YWtlIHRoZSBiYXNlIG9mIHRoZSBjdXJyZW50IHVybCBhbmQKKyAgICAgICAgLy8gYXBw
ZW5kIHRoZSB2YWx1ZSBvZiBuZXctbG9jYXRpb24gdG8gaXQuCisgICAgICAgIFVSTCBiYXNlVXJs
ID0gZ3N0X3VyaV9pc192YWxpZChuZXdMb2NhdGlvbikgPyBVUkwoKSA6IG1fdXJsOworICAgICAg
ICBVUkwgbmV3VXJsID0gVVJMKGJhc2VVcmwsIG5ld0xvY2F0aW9uKTsKIAotICAgIGZvciAoR0xp
c3QqIGkgPSBnc3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyhlbnRyeSk7IGk7IGkgPSBpLT5u
ZXh0KQotICAgICAgICBwcm9jZXNzVGFibGVPZkNvbnRlbnRzRW50cnkoc3RhdGljX2Nhc3Q8R3N0
VG9jRW50cnkqPihpLT5kYXRhKSk7Ci19CisgICAgICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IHBs
YXliaW5VcmxTdHI7CisgICAgICAgIGdfb2JqZWN0X2dldChtX3BpcGVsaW5lLmdldCgpLCAiY3Vy
cmVudC11cmkiLCAmcGxheWJpblVybFN0ci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgIFVS
TCBwbGF5YmluVXJsKFVSTCgpLCBwbGF5YmluVXJsU3RyLmdldCgpKTsKIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZEF1ZGlvVHJhY2tzKFZlY3RvcjxTdHJp
bmc+IHZhbGlkVHJhY2tJZHMpCi17Ci0gICAgbV9hdWRpb1RyYWNrcy5yZW1vdmVJZihbdmFsaWRU
cmFja0lkc10oYXV0byYga2V5QW5kVmFsdWUpIHsKLSAgICAgICAgcmV0dXJuICF2YWxpZFRyYWNr
SWRzLmNvbnRhaW5zKGtleUFuZFZhbHVlLmtleSk7Ci0gICAgfSk7Ci19CisgICAgICAgIGlmIChw
bGF5YmluVXJsID09IG5ld1VybCkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiUGxheWJpbiBhbHJlYWR5IGhhbmRsZWQgcmVkaXJlY3Rpb24uIik7CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRWaWRlb1RyYWNrcyhWZWN0
b3I8U3RyaW5nPiB2YWxpZFRyYWNrSWRzKQotewotICAgIG1fdmlkZW9UcmFja3MucmVtb3ZlSWYo
W3ZhbGlkVHJhY2tJZHNdKGF1dG8mIGtleUFuZFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAhdmFs
aWRUcmFja0lkcy5jb250YWlucyhrZXlBbmRWYWx1ZS5rZXkpOwotICAgIH0pOwotfQorICAgICAg
ICAgICAgbV91cmwgPSBwbGF5YmluVXJsOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6cHVyZ2VJbnZhbGlkVGV4dFRyYWNrcyhWZWN0b3I8U3RyaW5nPiB2YWxpZFRyYWNrSWRz
KQotewotICAgIG1fdGV4dFRyYWNrcy5yZW1vdmVJZihbdmFsaWRUcmFja0lkc10oYXV0byYga2V5
QW5kVmFsdWUpIHsKLSAgICAgICAgcmV0dXJuICF2YWxpZFRyYWNrSWRzLmNvbnRhaW5zKGtleUFu
ZFZhbHVlLmtleSk7Ci0gICAgfSk7Ci19Ci0jZW5kaWYKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpmaWxsVGlt
ZXJGaXJlZCgpCi17Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVkKSB7Ci0gICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIEFuIGVycm9yIG9jY3VycmVkLCBkaXNh
YmxpbmcgdGhlIGZpbGwgdGltZXIiKTsKLSAgICAgICAgbV9maWxsVGltZXIuc3RvcCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFU
RV9SRUFEWSk7CisgICAgICAgIGF1dG8gc2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKG1fdXJsKTsKKyAgICAgICAgaWYgKHNlY3VyaXR5T3JpZ2luLT5jYW5SZXF1ZXN0KG5l
d1VybCkpIHsKKyAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiTmV3IG1l
ZGlhIHVybDogJXMiLCBuZXdVcmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBHUmVm
UHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhH
U1RfRk9STUFUX1BFUkNFTlQpKTsKLSAgICBkb3VibGUgZmlsbFN0YXR1cyA9IDEwMC4wOwotICAg
IEdzdEJ1ZmZlcmluZ01vZGUgbW9kZSA9IEdTVF9CVUZGRVJJTkdfRE9XTkxPQUQ7CisgICAgICAg
ICAgICAvLyBSZXNldCBwbGF5ZXIgc3RhdGVzLgorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3Rh
dGVDaGFuZ2VkKCk7CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmc7CisgICAgICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKIAot
ICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3NvdXJjZS5nZXQoKSwgcXVlcnkuZ2V0KCkpKSB7
Ci0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfc3RhdHMocXVlcnkuZ2V0KCksICZt
b2RlLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIC8vIFJlc2V0IHBp
cGVsaW5lIHN0YXRlLgorICAgICAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gdHJ1ZTsKIAotICAg
ICAgICBpbnQgcGVyY2VudGFnZTsKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19w
ZXJjZW50KHF1ZXJ5LmdldCgpLCBudWxscHRyLCAmcGVyY2VudGFnZSk7Ci0gICAgICAgIGZpbGxT
dGF0dXMgPSBwZXJjZW50YWdlOwotICAgIH0gZWxzZSBpZiAobV9odHRwUmVzcG9uc2VUb3RhbFNp
emUpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10g
UXVlcnkgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gbmV0d29yayByZWFkIHBvc2l0aW9uIGVzdGlt
YXRpb24iKTsKLSAgICAgICAgZmlsbFN0YXR1cyA9IDEwMC4wICogKHN0YXRpY19jYXN0PGRvdWJs
ZT4obV9uZXR3b3JrUmVhZFBvc2l0aW9uKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4obV9odHRwUmVz
cG9uc2VUb3RhbFNpemUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBVbmFibGUgdG8gZGV0ZXJtaW5lIG9uLWRpc2sgYnVm
ZmVyaW5nIHN0YXR1cyIpOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICBHc3RTdGF0ZSBz
dGF0ZTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgp
LCAmc3RhdGUsIG51bGxwdHIsIDApOworICAgICAgICAgICAgaWYgKHN0YXRlIDw9IEdTVF9TVEFU
RV9SRUFEWSkgeworICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgbmV3IHVyaSBhbmQgc3RhcnQg
cGxheWluZy4KKyAgICAgICAgICAgICAgICBzZXRQbGF5YmluVVJMKG5ld1VybCk7CisgICAgICAg
ICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJOb3QgYWxsb3dlZCB0byBsb2Fk
IG5ldyBtZWRpYSBsb2NhdGlvbjogJXMiLCBuZXdVcmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgfQorICAgIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleC0tOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCit7
CisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5YmFjayBlbmRlZCIpOworCisg
ICAgLy8gU3luY2hyb25pemUgcG9zaXRpb24gYW5kIGR1cmF0aW9uIHZhbHVlcyB0byBub3QgY29u
ZnVzZSB0aGUKKyAgICAvLyBIVE1MTWVkaWFFbGVtZW50LiBJbiBzb21lIGNhc2VzIGxpa2UgcmV2
ZXJzZSBwbGF5YmFjayB0aGUKKyAgICAvLyBwb3NpdGlvbiBpcyBub3QgYWx3YXlzIHJlcG9ydGVk
IGFzIDAgZm9yIGluc3RhbmNlLgorICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6Omlu
dmFsaWRUaW1lKCk7CisgICAgTWVkaWFUaW1lIG5vdyA9IGN1cnJlbnRNZWRpYVRpbWUoKTsKKyAg
ICBpZiAobm93ID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYmICFtX3NlZWtpbmcpIHsKKyAgICAg
ICAgbV9jYWNoZWREdXJhdGlvbiA9IG5vdzsKKyAgICAgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hh
bmdlZCgpOwogICAgIH0KIAotICAgIHVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhtb2RlLCBmaWxsU3Rh
dHVzKTsKKyAgICBtX2lzRW5kUmVhY2hlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGxheWVyLT5j
bGllbnQoKS5tZWRpYVBsYXllcklzTG9vcGluZygpKSB7CisgICAgICAgIG1fcGF1c2VkID0gdHJ1
ZTsKKyAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOworICAgICAg
ICBtX2Rvd25sb2FkRmluaXNoZWQgPSBmYWxzZTsKKyAgICB9CisgICAgdGltZUNoYW5nZWQoKTsK
IH0KIAotTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1l
U2Vla2FibGUoKSBjb25zdAordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmdldFN1
cHBvcnRlZFR5cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiB0
eXBlcykKIHsKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6
ICVzLCBpc0xpdmVTdHJlYW06ICVzIiwgYm9vbEZvclByaW50aW5nKG1fZXJyb3JPY2N1cmVkKSwg
Ym9vbEZvclByaW50aW5nKGlzTGl2ZVN0cmVhbSgpKSk7Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVk
KQotICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotCi0gICAgaWYgKGlzTGl2
ZVN0cmVhbSgpKQotICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotCi0gICAg
TWVkaWFUaW1lIGR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKLSAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJtYXhNZWRpYVRpbWVTZWVrYWJsZSwgZHVyYXRpb246ICVzIiwg
dG9TdHJpbmcoZHVyYXRpb24pLnV0ZjgoKS5kYXRhKCkpOwotICAgIC8vIGluZmluaXRlIGR1cmF0
aW9uIG1lYW5zIGxpdmUgc3RyZWFtCi0gICAgaWYgKGR1cmF0aW9uLmlzUG9zaXRpdmVJbmZpbml0
ZSgpKQotICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotCi0gICAgcmV0dXJu
IGR1cmF0aW9uOworICAgIGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9IEdTdHJlYW1lclJlZ2lz
dHJ5U2Nhbm5lcjo6c2luZ2xldG9uKCk7CisgICAgdHlwZXMgPSBnc3RSZWdpc3RyeVNjYW5uZXIu
bWltZVR5cGVTZXQoKTsKIH0KIAotTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bWF4VGltZUxvYWRlZCgpIGNvbnN0CitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3Vw
cG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVkKQot
ICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOworICAgIE1lZGlhUGxheWVyOjpT
dXBwb3J0c1R5cGUgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworI2lmIEVO
QUJMRShNRURJQV9TT1VSQ0UpCisgICAgLy8gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNF
IGlzIGluIGNoYXJnZSBvZiBtZWRpYXNvdXJjZSBwbGF5YmFjaywgbm90IHVzLgorICAgIGlmIChw
YXJhbWV0ZXJzLmlzTWVkaWFTb3VyY2UpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYK
IAotICAgIE1lZGlhVGltZSBsb2FkZWQgPSBtX21heFRpbWVMb2FkZWQ7Ci0gICAgaWYgKG1faXNF
bmRSZWFjaGVkKQotICAgICAgICBsb2FkZWQgPSBkdXJhdGlvbk1lZGlhVGltZSgpOwotICAgIEdT
VF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJtYXhUaW1lTG9hZGVkOiAlcyIsIHRvU3RyaW5nKGxv
YWRlZCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGxvYWRlZDsKLX0KKyNpZiAhRU5BQkxF
KE1FRElBX1NUUkVBTSkKKyAgICBpZiAocGFyYW1ldGVycy5pc01lZGlhU3RyZWFtKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworI2VuZGlmCiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIGlmIChtX2Vycm9yT2NjdXJl
ZCB8fCBtX2xvYWRpbmdTdGFsbGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHBh
cmFtZXRlcnMudHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBp
ZiAoV0VCS0lUX0lTX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpKSB7Ci0gICAgICAgIEdTVF9MT0df
T0JKRUNUKHBpcGVsaW5lKCksICJMYXN0IG5ldHdvcmsgcmVhZCBwb3NpdGlvbjogJSIgR19HVUlO
VDY0X0ZPUk1BVCAiLCBjdXJyZW50OiAlIiBHX0dVSU5UNjRfRk9STUFULCBtX3JlYWRQb3NpdGlv
bkF0TGFzdERpZExvYWRpbmdQcm9ncmVzcywgbV9uZXR3b3JrUmVhZFBvc2l0aW9uKTsKLSAgICAg
ICAgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MgPSBtX3JlYWRQb3NpdGlvbkF0TGFzdERpZExvYWRp
bmdQcm9ncmVzcyA8IG1fbmV0d29ya1JlYWRQb3NpdGlvbjsKLSAgICAgICAgbV9yZWFkUG9zaXRp
b25BdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MgPSBtX25ldHdvcmtSZWFkUG9zaXRpb247Ci0gICAg
ICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJkaWRMb2FkaW5nUHJvZ3Jlc3M6ICVzIiwg
Ym9vbEZvclByaW50aW5nKGRpZExvYWRpbmdQcm9ncmVzcykpOwotICAgICAgICByZXR1cm4gZGlk
TG9hZGluZ1Byb2dyZXNzOworICAgIEdTVF9ERUJVRygiQ2hlY2tpbmcgbWltZS10eXBlIFwiJXNc
IiIsIHBhcmFtZXRlcnMudHlwZS5yYXcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBhdXRvIGNvbnRh
aW5lclR5cGUgPSBwYXJhbWV0ZXJzLnR5cGUuY29udGFpbmVyVHlwZSgpOworICAgIGF1dG8mIGdz
dFJlZ2lzdHJ5U2Nhbm5lciA9IEdTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xldG9uKCk7
CisgICAgaWYgKGdzdFJlZ2lzdHJ5U2Nhbm5lci5pc0NvbnRhaW5lclR5cGVTdXBwb3J0ZWQoY29u
dGFpbmVyVHlwZSkpIHsKKyAgICAgICAgLy8gU3BlYyBzYXlzIHdlIHNob3VsZCBub3QgcmV0dXJu
ICJwcm9iYWJseSIgaWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkuCisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+IGNvZGVjcyA9IHBhcmFtZXRlcnMudHlwZS5jb2RlY3MoKTsKKyAgICAgICAgcmVz
dWx0ID0gY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IChn
c3RSZWdpc3RyeVNjYW5uZXIuYXJlQWxsQ29kZWNzU3VwcG9ydGVkKGNvZGVjcykgPyBNZWRpYVBs
YXllcjo6SXNTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQpOwogICAgIH0K
IAotICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCAhZHVyYXRpb25NZWRpYVRpbWUoKSB8
fCAoIWlzTWVkaWFTb3VyY2UoKSAmJiAhdG90YWxCeXRlcygpKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIE1lZGlhVGltZSBjdXJyZW50TWF4VGltZUxvYWRlZCA9IG1heFRpbWVMb2Fk
ZWQoKTsKLSAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcyA9IGN1cnJlbnRNYXhUaW1lTG9hZGVk
ICE9IG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzczsKLSAgICBtX21heFRp
bWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MgPSBjdXJyZW50TWF4VGltZUxvYWRlZDsK
LSAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiZGlkTG9hZGluZ1Byb2dyZXNzOiAlcyIs
IGJvb2xGb3JQcmludGluZyhkaWRMb2FkaW5nUHJvZ3Jlc3MpKTsKLSAgICByZXR1cm4gZGlkTG9h
ZGluZ1Byb2dyZXNzOworICAgIGF1dG8gZmluYWxSZXN1bHQgPSBleHRlbmRlZFN1cHBvcnRzVHlw
ZShwYXJhbWV0ZXJzLCByZXN1bHQpOworICAgIEdTVF9ERUJVRygiU3VwcG9ydGVkOiAlcyIsIGNv
bnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKGZpbmFsUmVzdWx0KS51dGY4KCkuZGF0YSgpKTsKKyAg
ICByZXR1cm4gZmluYWxSZXN1bHQ7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnRvdGFsQnl0ZXMoKSBjb25zdAordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpCiB7Ci0gICAgaWYg
KG1fZXJyb3JPY2N1cmVkKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcGlwZWxpbmUp
CisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3RvdGFsQnl0ZXMpCi0gICAgICAgIHJldHVy
biBtX3RvdGFsQnl0ZXM7CisgICAgdW5zaWduZWQgZmxhZ3M7CisgICAgZ19vYmplY3RfZ2V0KG1f
cGlwZWxpbmUuZ2V0KCksICJmbGFncyIsICZmbGFncywgbnVsbHB0cik7CiAKLSAgICBpZiAoIW1f
c291cmNlKQotICAgICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBmbGFnRG93bmxvYWQgPSBn
ZXRHc3RQbGF5RmxhZygiZG93bmxvYWQiKTsKIAotICAgIGlmIChpc0xpdmVTdHJlYW0oKSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzdG9wIGRvd25sb2FkaW5n
IGlmIHdlIGFscmVhZHkgc3RhcnRlZCBpdC4KKyAgICBpZiAoZmxhZ3MgJiBmbGFnRG93bmxvYWQg
JiYgbV9yZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nICYmICFtX3Jlc2V0UGlw
ZWxpbmUpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRG93bmxvYWQg
YWxyZWFkeSBzdGFydGVkLCBub3Qgc3RhcnRpbmcgYWdhaW4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgIEdzdEZvcm1hdCBmbXQgPSBHU1RfRk9STUFUX0JZVEVTOwotICAgIGdpbnQ2
NCBsZW5ndGggPSAwOwotICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbihtX3NvdXJj
ZS5nZXQoKSwgZm10LCAmbGVuZ3RoKSkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxp
bmUoKSwgInRvdGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFULCBsZW5ndGgpOwotICAgICAgICBt
X3RvdGFsQnl0ZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGxlbmd0aCk7Ci0g
ICAgICAgIG1faXNTdHJlYW1pbmcgPSAhbGVuZ3RoOwotICAgICAgICByZXR1cm4gbV90b3RhbEJ5
dGVzOworICAgIGJvb2wgc2hvdWxkRG93bmxvYWQgPSAhaXNMaXZlU3RyZWFtKCkgJiYgbV9wcmVs
b2FkID09IE1lZGlhUGxheWVyOjpBdXRvOworICAgIGlmIChzaG91bGREb3dubG9hZCkgeworICAg
ICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkVuYWJsaW5nIG9uLWRpc2sgYnVmZmVy
aW5nIik7CisgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAiZmxhZ3MiLCBm
bGFncyB8IGZsYWdEb3dubG9hZCwgbnVsbHB0cik7CisgICAgICAgIG1fZmlsbFRpbWVyLnN0YXJ0
UmVwZWF0aW5nKDIwMF9tcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0lORk9fT0JKRUNU
KHBpcGVsaW5lKCksICJEaXNhYmxpbmcgb24tZGlzayBidWZmZXJpbmciKTsKKyAgICAgICAgZ19v
YmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJmbGFncyIsIGZsYWdzICYgfmZsYWdEb3dubG9h
ZCwgbnVsbHB0cik7CisgICAgICAgIG1fZmlsbFRpbWVyLnN0b3AoKTsKICAgICB9Cit9CiAKLSAg
ICAvLyBGYWxsIGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNvdXJjZSBwYWRzIG1hbnVhbGx5LgotICAg
IC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02
Mzg3NDkKLSAgICBHc3RJdGVyYXRvciogaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3Bh
ZHMobV9zb3VyY2UuZ2V0KCkpOwotICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIHdoaWxlICgh
ZG9uZSkgewotICAgICAgICBHVmFsdWUgaXRlbSA9IEdfVkFMVUVfSU5JVDsKLSAgICAgICAgc3dp
dGNoIChnc3RfaXRlcmF0b3JfbmV4dChpdGVyLCAmaXRlbSkpIHsKLSAgICAgICAgY2FzZSBHU1Rf
SVRFUkFUT1JfT0s6IHsKLSAgICAgICAgICAgIEdzdFBhZCogcGFkID0gc3RhdGljX2Nhc3Q8R3N0
UGFkKj4oZ192YWx1ZV9nZXRfb2JqZWN0KCZpdGVtKSk7Ci0gICAgICAgICAgICBnaW50NjQgcGFk
TGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGlmIChnc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uKHBhZCwg
Zm10LCAmcGFkTGVuZ3RoKSAmJiBwYWRMZW5ndGggPiBsZW5ndGgpCi0gICAgICAgICAgICAgICAg
bGVuZ3RoID0gcGFkTGVuZ3RoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jl
c3luYyhpdGVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9JVEVSQVRP
Ul9FUlJPUjoKLSAgICAgICAgICAgIEZBTExUSFJPVUdIOwotICAgICAgICBjYXNlIEdTVF9JVEVS
QVRPUl9ET05FOgotICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBs
YXlCaW4oY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGlwZWxpbmVOYW1lKQoreworICAg
IGNvbnN0IGdjaGFyKiBwbGF5YmluTmFtZSA9ICJwbGF5YmluIjsKIAotICAgICAgICBnX3ZhbHVl
X3Vuc2V0KCZpdGVtKTsKLSAgICB9CisgICAgLy8gTVNFIGRvZXNuJ3Qgc3VwcG9ydCBwbGF5Ymlu
My4gTWVkaWFzdHJlYW0gcmVxdWlyZXMgcGxheWJpbjMuIFJlZ3VsYXIKKyAgICAvLyBwbGF5YmFj
ayBjYW4gdXNlIHBsYXliaW4zIG9uLWRlbWFuZCB3aXRoIHRoZSBXRUJLSVRfR1NUX1VTRV9QTEFZ
QklOMworICAgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgIGlmICgoIWlzTWVkaWFTb3Vy
Y2UoKSAmJiBnX2dldGVudigiV0VCS0lUX0dTVF9VU0VfUExBWUJJTjMiKSkgfHwgdXJsLnByb3Rv
Y29sSXMoIm1lZGlhc3RyZWFtIikpCisgICAgICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4zIjsK
IAotICAgIGdzdF9pdGVyYXRvcl9mcmVlKGl0ZXIpOworICAgIGlmIChtX3BpcGVsaW5lKSB7Cisg
ICAgICAgIGlmICghZ19zdHJjbXAwKEdTVF9PQkpFQ1RfTkFNRShnc3RfZWxlbWVudF9nZXRfZmFj
dG9yeShtX3BpcGVsaW5lLmdldCgpKSksIHBsYXliaW5OYW1lKSkgeworICAgICAgICAgICAgR1NU
X0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJBbHJlYWR5IHVzaW5nICVzIiwgcGxheWJpbk5hbWUp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBHU1RfSU5GT19PQkpFQ1Qo
cGlwZWxpbmUoKSwgInRvdGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFULCBsZW5ndGgpOwotICAg
IG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVuZ3RoKTsK
LSAgICBtX2lzU3RyZWFtaW5nID0gIWxlbmd0aDsKLSAgICByZXR1cm4gbV90b3RhbEJ5dGVzOwot
fQorICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlRlYXJpbmcgZG93biBhcyB3
ZSBuZWVkIHRvIHVzZSAlcyBub3cuIiwgcGxheWJpbk5hbWUpOworICAgICAgICBjaGFuZ2VQaXBl
bGluZVN0YXRlKEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgbV9waXBlbGluZSA9IG51bGxwdHI7
CisgICAgfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlU2V0dXBD
YWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllciwgR3N0RWxlbWVudCog
c291cmNlRWxlbWVudCkKLXsKLSAgICBwbGF5ZXItPnNvdXJjZVNldHVwKHNvdXJjZUVsZW1lbnQp
OwotfQorICAgIEFTU0VSVCghbV9waXBlbGluZSk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp1cmlEZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayhHc3RCaW4qIGJpbiwg
R3N0RWxlbWVudCogZWxlbWVudCwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIp
Ci17Ci0gICAgaWYgKGdfc3RyY21wMChHX09CSkVDVF9UWVBFX05BTUUoZWxlbWVudCksICJHc3RE
b3dubG9hZEJ1ZmZlciIpKQotICAgICAgICByZXR1cm47CisgICAgbV9pc0xlZ2FjeVBsYXliaW4g
PSAhZ19zdHJjbXAwKHBsYXliaW5OYW1lLCAicGxheWJpbiIpOwogCi0gICAgcGxheWVyLT5tX2Rv
d25sb2FkQnVmZmVyID0gZWxlbWVudDsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X2J5X2Z1bmMoYmluLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih1cmlEZWNvZGVCaW5FbGVt
ZW50QWRkZWRDYWxsYmFjayksIHBsYXllcik7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KGVsZW1lbnQsICJub3RpZnk6OnRlbXAtbG9jYXRpb24iLCBHX0NBTExCQUNLKGRvd25sb2FkQnVm
ZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayksIHBsYXllcik7CisgICAgLy8gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCkgcmV0dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZSBzbworICAgIC8vIHdlIHNo
b3VsZCBub3QgYWRvcHQuCisgICAgc3RhdGljIEF0b21pYzx1aW50MzJfdD4gcGlwZWxpbmVJZDsK
KyAgICBzZXRQaXBlbGluZShnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UocGxheWJpbk5hbWUsCisg
ICAgICAgIChwaXBlbGluZU5hbWUuaXNFbXB0eSgpID8gbWFrZVN0cmluZygibWVkaWEtcGxheWVy
LSIsIHBpcGVsaW5lSWQuZXhjaGFuZ2VBZGQoMSkpIDogcGlwZWxpbmVOYW1lKS51dGY4KCkuZGF0
YSgpKSk7CisgICAgc2V0U3RyZWFtVm9sdW1lRWxlbWVudChHU1RfU1RSRUFNX1ZPTFVNRShtX3Bp
cGVsaW5lLmdldCgpKSk7CiAKLSAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IG9sZERvd25sb2FkVGVt
cGxhdGU7Ci0gICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJ0ZW1wLXRlbXBsYXRlIiwgJm9sZERv
d25sb2FkVGVtcGxhdGUub3V0UHRyKCksIG51bGxwdHIpOworICAgIEdTVF9JTkZPX09CSkVDVChw
aXBlbGluZSgpLCAiVXNpbmcgbGVnYWN5IHBsYXliaW4gZWxlbWVudDogJXMiLCBib29sRm9yUHJp
bnRpbmcobV9pc0xlZ2FjeVBsYXliaW4pKTsKIAotICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmV3RG93
bmxvYWRUZW1wbGF0ZShnX2J1aWxkX2ZpbGVuYW1lKEdfRElSX1NFUEFSQVRPUl9TLCAidmFyIiwg
InRtcCIsICJXZWJLaXQtTWVkaWEtWFhYWFhYIiwgbnVsbHB0cikpOwotICAgIGdfb2JqZWN0X3Nl
dChlbGVtZW50LCAidGVtcC10ZW1wbGF0ZSIsIG5ld0Rvd25sb2FkVGVtcGxhdGUuZ2V0KCksIG51
bGxwdHIpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBlbGluZSgpLCAiUmVjb25m
aWd1cmVkIGZpbGUgZG93bmxvYWQgdGVtcGxhdGUgZnJvbSAnJXMnIHRvICclcyciLCBvbGREb3du
bG9hZFRlbXBsYXRlLmdldCgpLCBuZXdEb3dubG9hZFRlbXBsYXRlLmdldCgpKTsKKyAgICAvLyBM
ZXQgYWxzbyBvdGhlciBsaXN0ZW5lcnMgc3Vic2NyaWJlIHRvIChhcHBsaWNhdGlvbikgbWVzc2Fn
ZXMgaW4gdGhpcyBidXMuCisgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3Rf
cGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKKyAgICBn
c3RfYnVzX2FkZF9zaWduYWxfd2F0Y2hfZnVsbChidXMuZ2V0KCksIFJ1bkxvb3BTb3VyY2VQcmlv
cml0eTo6UnVuTG9vcERpc3BhdGNoZXIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVzLmdldCgp
LCAibWVzc2FnZSIsIEdfQ0FMTEJBQ0soYnVzTWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CiAKLSAg
ICBwbGF5ZXItPnB1cmdlT2xkRG93bmxvYWRGaWxlcyhvbGREb3dubG9hZFRlbXBsYXRlLmdldCgp
KTsKLX0KKyAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgIm11dGUiLCBtX3BsYXll
ci0+bXV0ZWQoKSwgbnVsbHB0cik7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojpkb3dubG9hZEJ1ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgQVNTRVJUKHBsYXllci0+bV9kb3dubG9hZEJ1ZmZlcik7
CisgICAgZ19zaWduYWxfY29ubmVjdChHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksICJk
ZWVwLWVsZW1lbnQtYWRkZWQiLCBHX0NBTExCQUNLKCtbXShHc3RCaW4qLCBHc3RCaW4qIHN1YkJp
biwgR3N0RWxlbWVudCogZWxlbWVudCwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5
ZXIpIHsKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBiaW5OYW1lKGdzdF9lbGVtZW50X2dldF9u
YW1lKEdTVF9FTEVNRU5UX0NBU1Qoc3ViQmluKSkpOworICAgICAgICBpZiAoIWdfc3RyX2hhc19w
cmVmaXgoYmluTmFtZS5nZXQoKSwgImRlY29kZWJpbiIpKQorICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHBsYXllci0+bV9kb3du
bG9hZEJ1ZmZlci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4oZG93bmxvYWRCdWZm
ZXJGaWxlQ3JlYXRlZENhbGxiYWNrKSwgcGxheWVyKTsKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFy
PiBlbGVtZW50TmFtZShnc3RfZWxlbWVudF9nZXRfbmFtZShlbGVtZW50KSk7CisgICAgICAgIGlm
IChnX3N0cl9oYXNfcHJlZml4KGVsZW1lbnROYW1lLmdldCgpLCAidjRsMiIpKQorICAgICAgICAg
ICAgcGxheWVyLT5tX3ZpZGVvRGVjb2RlclBsYXRmb3JtID0gR3N0VmlkZW9EZWNvZGVyUGxhdGZv
cm06OlZpZGVvNExpbnV4OworICAgICAgICBlbHNlIGlmIChnX3N0cl9oYXNfcHJlZml4KGVsZW1l
bnROYW1lLmdldCgpLCAiaW14dnB1ZGVjIikpCisgICAgICAgICAgICBwbGF5ZXItPm1fdmlkZW9E
ZWNvZGVyUGxhdGZvcm0gPSBHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6SW14VlBVOwogCi0gICAg
R1VuaXF1ZU91dFB0cjxjaGFyPiBkb3dubG9hZEZpbGU7Ci0gICAgZ19vYmplY3RfZ2V0KHBsYXll
ci0+bV9kb3dubG9hZEJ1ZmZlci5nZXQoKSwgInRlbXAtbG9jYXRpb24iLCAmZG93bmxvYWRGaWxl
Lm91dFB0cigpLCBudWxscHRyKTsKLSAgICBwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIgPSBudWxs
cHRyOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICAgICAgcGxheWVyLT51cGRhdGVU
ZXh0dXJlTWFwcGVyRmxhZ3MoKTsKKyNlbmRpZgorICAgIH0pLCB0aGlzKTsKIAotICAgIGlmIChV
TkxJS0VMWSghRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShkb3dubG9hZEZpbGUuZ2V0KCkpKSkgewot
ICAgICAgICBHU1RfV0FSTklORygiQ291bGRuJ3QgdW5saW5rIG1lZGlhIHRlbXBvcmFyeSBmaWxl
ICVzIGFmdGVyIGNyZWF0aW9uIiwgZG93bmxvYWRGaWxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJu
OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgpLCAic291cmNl
LXNldHVwIiwgR19DQUxMQkFDSyhzb3VyY2VTZXR1cENhbGxiYWNrKSwgdGhpcyk7CisgICAgaWYg
KG1faXNMZWdhY3lQbGF5YmluKSB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X3BpcGVsaW5lLmdldCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlkZW9DaGFuZ2Vk
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGlw
ZWxpbmUuZ2V0KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhhdWRpb0NoYW5nZWRDYWxs
YmFjayksIHRoaXMpOwogICAgIH0KIAotICAgIEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBl
bGluZSgpLCAiVW5saW5rZWQgbWVkaWEgdGVtcG9yYXJ5IGZpbGUgJXMgYWZ0ZXIgY3JlYXRpb24i
LCBkb3dubG9hZEZpbGUuZ2V0KCkpOwotfQorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBp
ZiAobV9pc0xlZ2FjeVBsYXliaW4pCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X3BpcGVsaW5lLmdldCgpLCAidGV4dC1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENh
bGxiYWNrKSwgdGhpcyk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJn
ZU9sZERvd25sb2FkRmlsZXMoY29uc3QgY2hhciogZG93bmxvYWRGaWxlVGVtcGxhdGUpCi17Ci0g
ICAgaWYgKCFkb3dubG9hZEZpbGVUZW1wbGF0ZSkKLSAgICAgICAgcmV0dXJuOworICAgIEdzdEVs
ZW1lbnQqIHRleHRDb21iaW5lciA9IHdlYmtpdFRleHRDb21iaW5lck5ldygpOworICAgIEFTU0VS
VCh0ZXh0Q29tYmluZXIpOworICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidGV4
dC1zdHJlYW0tY29tYmluZXIiLCB0ZXh0Q29tYmluZXIsIG51bGxwdHIpOwogCi0gICAgR1VuaXF1
ZVB0cjxjaGFyPiB0ZW1wbGF0ZVBhdGgoZ19wYXRoX2dldF9kaXJuYW1lKGRvd25sb2FkRmlsZVRl
bXBsYXRlKSk7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiB0ZW1wbGF0ZUZpbGUoZ19wYXRoX2dldF9i
YXNlbmFtZShkb3dubG9hZEZpbGVUZW1wbGF0ZSkpOwotICAgIFN0cmluZyB0ZW1wbGF0ZVBhdHRl
cm4gPSBTdHJpbmcodGVtcGxhdGVGaWxlLmdldCgpKS5yZXBsYWNlKCJYIiwgIj8iKTsKKyAgICBt
X3RleHRBcHBTaW5rID0gd2Via2l0VGV4dFNpbmtOZXcoKTsKKyAgICBBU1NFUlQobV90ZXh0QXBw
U2luayk7CiAKLSAgICBmb3IgKGF1dG8mIGZpbGVQYXRoIDogRmlsZVN5c3RlbTo6bGlzdERpcmVj
dG9yeSh0ZW1wbGF0ZVBhdGguZ2V0KCksIHRlbXBsYXRlUGF0dGVybikpIHsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZpbGVQYXRoKSkpIHsKLSAgICAgICAg
ICAgIEdTVF9XQVJOSU5HKCJDb3VsZG4ndCB1bmxpbmsgbGVnYWN5IG1lZGlhIHRlbXBvcmFyeSBm
aWxlOiAlcyIsIGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KKyAgICBtX3RleHRBcHBTaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50
X2dldF9zdGF0aWNfcGFkKG1fdGV4dEFwcFNpbmsuZ2V0KCksICJzaW5rIikpOworICAgIEFTU0VS
VChtX3RleHRBcHBTaW5rUGFkKTsKIAotICAgICAgICBHU1RfVFJBQ0UoIlVubGlua2VkIGxlZ2Fj
eSBtZWRpYSB0ZW1wb3JhcnkgZmlsZTogJXMiLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKLSAg
ICB9Ci19CisgICAgR1JlZlB0cjxHc3RDYXBzPiB0ZXh0Q2FwczsKKyAgICBpZiAod2Via2l0R3N0
Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKSkKKyAgICAgICAgdGV4dENhcHMgPSBhZG9wdEdSZWYoZ3N0
X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgiYXBwbGljYXRpb24veC1zdWJ0aXRsZS12dHQiKSk7Cisg
ICAgZWxzZQorICAgICAgICB0ZXh0Q2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlf
c2ltcGxlKCJ0ZXh0L3Z0dCIpKTsKKyAgICBnX29iamVjdF9zZXQobV90ZXh0QXBwU2luay5nZXQo
KSwgImVtaXQtc2lnbmFscyIsIFRSVUUsICJlbmFibGUtbGFzdC1zYW1wbGUiLCBGQUxTRSwgImNh
cHMiLCB0ZXh0Q2Fwcy5nZXQoKSwgbnVsbHB0cik7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKG1fdGV4dEFwcFNpbmsuZ2V0KCksICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhuZXdUZXh0
U2FtcGxlQ2FsbGJhY2spLCB0aGlzKTsKKworICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdl
dCgpLCAidGV4dC1zaW5rIiwgbV90ZXh0QXBwU2luay5nZXQoKSwgbnVsbHB0cik7CisjZW5kaWYK
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwKEdzdEVsZW1l
bnQqIHNvdXJjZUVsZW1lbnQpCi17Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
U291cmNlIGVsZW1lbnQgc2V0LXVwIGZvciAlcyIsIEdTVF9FTEVNRU5UX05BTUUoc291cmNlRWxl
bWVudCkpOworICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8tc2luayIs
IGNyZWF0ZVZpZGVvU2luaygpLCAiYXVkaW8tc2luayIsIGNyZWF0ZUF1ZGlvU2luaygpLCBudWxs
cHRyKTsKIAotICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkgJiYgR1NU
X09CSkVDVF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkpKQotICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMoR1NUX0VMRU1FTlRfUEFSRU5UKG1fc291cmNlLmdldCgpKSwg
cmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4odXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICBjb25maWd1cmVQbGF5U2luaygpOwogCi0gICAgbV9zb3VyY2UgPSBz
b3VyY2VFbGVtZW50OworICAgIGlmIChtX3ByZXNlcnZlc1BpdGNoKSB7CisgICAgICAgIEdzdEVs
ZW1lbnQqIHNjYWxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJzY2FsZXRlbXBvIiwgbnVs
bHB0cik7CiAKLSAgICBpZiAoV0VCS0lUX0lTX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpKSB7Ci0g
ICAgICAgIHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKFdFQktJVF9XRUJfU1JDX0NBU1QobV9z
b3VyY2UuZ2V0KCkpLCBtX3BsYXllcik7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1NUX0VM
RU1FTlRfUEFSRU5UKG1fc291cmNlLmdldCgpKSwgImVsZW1lbnQtYWRkZWQiLCBHX0NBTExCQUNL
KHVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNrKSwgdGhpcyk7Ci0jaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKLSAgICB9IGVsc2UgaWYgKFdFQktJVF9JU19NRURJQV9TVFJFQU1fU1JDKHNv
dXJjZUVsZW1lbnQpKSB7Ci0gICAgICAgIGF1dG8gc3RyZWFtID0gbV9zdHJlYW1Qcml2YXRlLmdl
dCgpOwotICAgICAgICBBU1NFUlQoc3RyZWFtKTsKLSAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1T
cmNTZXRTdHJlYW0oV0VCS0lUX01FRElBX1NUUkVBTV9TUkMoc291cmNlRWxlbWVudCksIHN0cmVh
bSk7Ci0jZW5kaWYKKyAgICAgICAgaWYgKCFzY2FsZSkKKyAgICAgICAgICAgIEdTVF9XQVJOSU5H
KCJGYWlsZWQgdG8gY3JlYXRlIHNjYWxldGVtcG8iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJhdWRpby1maWx0ZXIiLCBzY2FsZSwg
bnVsbHB0cik7CisgICAgfQorCisgICAgaWYgKCFtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQp
IHsKKyAgICAgICAgLy8gSWYgbm90IHVzaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLCBsZXQg
R1N0cmVhbWVyIGhhbmRsZQorICAgICAgICAvLyB0aGUgaW1hZ2Utb3JpZW50YXRpb24gdGFnLgor
ICAgICAgICBHc3RFbGVtZW50KiB2aWRlb0ZsaXAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
InZpZGVvZmxpcCIsIG51bGxwdHIpOworICAgICAgICBpZiAodmlkZW9GbGlwKSB7CisgICAgICAg
ICAgICBnX29iamVjdF9zZXQodmlkZW9GbGlwLCAibWV0aG9kIiwgOCwgbnVsbHB0cik7CisgICAg
ICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInZpZGVvLWZpbHRlciIsIHZp
ZGVvRmxpcCwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgR1NUX1dBUk5J
TkcoIlRoZSB2aWRlb2ZsaXAgZWxlbWVudCBpcyBtaXNzaW5nLCB2aWRlbyByb3RhdGlvbiBzdXBw
b3J0IGlzIG5vdyBkaXNhYmxlZC4gUGxlYXNlIGNoZWNrIHlvdXIgZ3N0LXBsdWdpbnMtZ29vZCBp
bnN0YWxsYXRpb24uIik7CiAgICAgfQorCisgICAgR1JlZlB0cjxHc3RQYWQ+IHZpZGVvU2lua1Bh
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3ZpZGVvU2luay5nZXQo
KSwgInNpbmsiKSk7CisgICAgaWYgKHZpZGVvU2lua1BhZCkKKyAgICAgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKHZpZGVvU2lua1BhZC5nZXQoKSwgIm5vdGlmeTo6Y2FwcyIsIEdfQ0FMTEJB
Q0sodmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogfQogCi1ib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdAor
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZFBhc3NDT1JTQWNjZXNzQ2hlY2so
KSBjb25zdAogewotICAgIGlmICghbV9zb3VyY2UpCisgICAgaWYgKFdFQktJVF9JU19XRUJfU1JD
KG1fc291cmNlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHdlYktpdFNyY1Bhc3NlZENPUlNBY2Nl
c3NDaGVjayhXRUJLSVRfV0VCX1NSQ19DQVNUKG1fc291cmNlLmdldCgpKSk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuU2F2ZU1l
ZGlhRGF0YSgpIGNvbnN0Cit7CisgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBpZiAoIVdFQktJVF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkK
KyAgICBpZiAobV91cmwuaXNMb2NhbEZpbGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICBHVW5pcXVlT3V0UHRyPGNoYXI+IG9yaWdpbmFsVVJJLCByZXNvbHZlZFVSSTsKLSAgICBnX29i
amVjdF9nZXQobV9zb3VyY2UuZ2V0KCksICJsb2NhdGlvbiIsICZvcmlnaW5hbFVSSS5vdXRQdHIo
KSwgInJlc29sdmVkLWxvY2F0aW9uIiwgJnJlc29sdmVkVVJJLm91dFB0cigpLCBudWxscHRyKTsK
LSAgICBpZiAoIW9yaWdpbmFsVVJJIHx8ICFyZXNvbHZlZFVSSSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghZ19zdHJjbXAwKG9yaWdpbmFsVVJJLmdldCgpLCByZXNvbHZlZFVSSS5n
ZXQoKSkpCisgICAgaWYgKG1fdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBSZWY8U2VjdXJpdHlPcmlnaW4+IHJlc29sdmVkT3JpZ2luKFNl
Y3VyaXR5T3JpZ2luOjpjcmVhdGVGcm9tU3RyaW5nKFN0cmluZzo6ZnJvbVVURjgocmVzb2x2ZWRV
UkkuZ2V0KCkpKSk7Ci0gICAgUmVmPFNlY3VyaXR5T3JpZ2luPiByZXF1ZXN0ZWRPcmlnaW4oU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZUZyb21TdHJpbmcoU3RyaW5nOjpmcm9tVVRGOChvcmlnaW5hbFVS
SS5nZXQoKSkpKTsKLSAgICByZXR1cm4gcmVzb2x2ZWRPcmlnaW4tPmlzU2FtZVNjaGVtZUhvc3RQ
b3J0KHJlcXVlc3RlZE9yaWdpbi5nZXQoKSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsTG9hZCgpCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlUaW1lckZpcmVkKCkKIHsKLSAgICBpZiAobV9uZXR3
b3JrU3RhdGUgPCBNZWRpYVBsYXllcjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9PSBNZWRp
YVBsYXllcjo6TG9hZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9waXBlbGluZSkK
LSAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOworICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkluIFJFQURZIGZvciB0b28gbG9uZy4gUmVsZWFzaW5n
IHBpcGVsaW5lIHJlc291cmNlcy4iKTsKKyAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFU
RV9OVUxMKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmFzeW5jU3Rh
dGVDaGFuZ2VEb25lKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphY2NlbGVy
YXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1f
ZXJyb3JPY2N1cmVkKQotICAgICAgICByZXR1cm47CisgICAgbV9yZW5kZXJpbmdDYW5CZUFjY2Vs
ZXJhdGVkID0gbV9wbGF5ZXIgJiYgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKTsKK30KIAotICAgIGlmIChtX3NlZWtpbmcpIHsKLSAg
ICAgICAgaWYgKG1fc2Vla0lzUGVuZGluZykKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlcygpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IltTZWVrXSBzZWVrZWQgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwotICAgICAgICAgICAgbV9jYWNoZWRQ
b3NpdGlvbiA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAgICAgICAgICAgIGlmIChtX3Rp
bWVPZk92ZXJsYXBwaW5nU2VlayAhPSBtX3NlZWtUaW1lICYmIG1fdGltZU9mT3ZlcmxhcHBpbmdT
ZWVrLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIHNlZWsobV90aW1lT2ZPdmVybGFwcGlu
Z1NlZWspOwotICAgICAgICAgICAgICAgIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrID0gTWVkaWFU
aW1lOjppbnZhbGlkVGltZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrID0gTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKK1BsYXRmb3JtTGF5ZXIqIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYg
VVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLnB0cigpOworI2Vsc2UKKyAg
ICByZXR1cm4gY29uc3RfY2FzdDxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqPih0aGlzKTsK
KyNlbmRpZgorfQogCi0gICAgICAgICAgICAvLyBUaGUgcGlwZWxpbmUgY2FuIHN0aWxsIGhhdmUg
YSBwZW5kaW5nIHN0YXRlLiBJbiB0aGlzIGNhc2UgYSBwb3NpdGlvbiBxdWVyeSB3aWxsIGZhaWwu
Ci0gICAgICAgICAgICAvLyBSaWdodCBub3cgd2UgY2FuIHVzZSBtX3NlZWtUaW1lIGFzIGEgZmFs
bGJhY2suCi0gICAgICAgICAgICBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRp
b24gPSB0cnVlOwotICAgICAgICAgICAgdGltZUNoYW5nZWQoKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZQotICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKKyNpZiBVU0UoTklDT1NJQSkKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyNpZiBV
U0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKKyAgICBwdXNoTmV4dEhvbGVQdW5jaEJ1ZmZlcigpOwor
I2VuZGlmCit9CisjZWxzZQorUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJveHkoKSBjb25zdAoreworICAgIHJldHVy
biBtX3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQogewotICAgIGlmICghbV9waXBlbGluZSkK
LSAgICAgICAgcmV0dXJuOworI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQorICAgIHB1c2hO
ZXh0SG9sZVB1bmNoQnVmZmVyKCk7CisjZW5kaWYKK30KKyNlbmRpZgogCi0gICAgaWYgKG1fZXJy
b3JPY2N1cmVkKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hUZXh0dXJl
VG9Db21wb3NpdG9yKCkKK3sKKyAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2Ft
cGxlTXV0ZXgpOworICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0
YXRlID0gbV9uZXR3b3JrU3RhdGU7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVh
ZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKLSAgICBHc3RTdGF0ZSBwZW5kaW5nOwotICAgIEdzdFN0
YXRlIHN0YXRlOwotICAgIGJvb2wgc3RhdGVSZWFsbHlDaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICBH
c3RTdGF0ZUNoYW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0
ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZwZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7
Ci0gICAgaWYgKHN0YXRlICE9IG1fY3VycmVudFN0YXRlKSB7Ci0gICAgICAgIG1fb2xkU3RhdGUg
PSBtX2N1cnJlbnRTdGF0ZTsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUgPSBzdGF0ZTsKLSAgICAg
ICAgc3RhdGVSZWFsbHlDaGFuZ2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZFVw
ZGF0ZVBsYXliYWNrU3RhdGUgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKGdldFN0YXRlUmVzdWx0KSB7
Ci0gICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6IHsKLSAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50
X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUocGVuZGluZykpOwotCi0gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBzdGF0
ZSBjaGFuZ2VkIHRvIFJFQURZIHRvIGF2b2lkIHJlY3JlYXRpbmcgdGhlIHBsYXllcgotICAgICAg
ICAvLyBvbiBIVE1MTWVkaWFFbGVtZW50IGFuZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlkZW8g
J2VuZGVkJyBldmVudC4KLSAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIG1fY3VycmVudFN0
YXRlID09IEdTVF9TVEFURV9SRUFEWSkKLSAgICAgICAgICAgIGJyZWFrOworICAgIGF1dG8gcHJv
eHlPcGVyYXRpb24gPQorICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eSYgcHJveHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHBy
b3h5LmxvY2soKSk7CiAKLSAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gbV9jdXJyZW50U3RhdGUg
PD0gR1NUX1NUQVRFX1JFQURZOworICAgICAgICAgICAgaWYgKCFwcm94eS5pc0FjdGl2ZSgpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBib29sIGRpZEJ1ZmZlcmluZyA9IG1f
YnVmZmVyaW5nOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVIb2xk
ZXI+IGZyYW1lSG9sZGVyID0gbWFrZVVuaXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPihtX3NhbXBs
ZS5nZXQoKSwgbV92aWRlb0RlY29kZXJQbGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3MsICFt
X3VzaW5nRmFsbGJhY2tWaWRlb1NpbmspOwogCi0gICAgICAgIC8vIFVwZGF0ZSByZWFkeSBhbmQg
bmV0d29yayBzdGF0ZXMuCi0gICAgICAgIHN3aXRjaCAobV9jdXJyZW50U3RhdGUpIHsKLSAgICAg
ICAgY2FzZSBHU1RfU1RBVEVfTlVMTDoKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlTm90aGluZzsKLSAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkVtcHR5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1NUQVRF
X1JFQURZOgotICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRh
ZGF0YTsKLSAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVtcHR5Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKLSAgICAg
ICAgY2FzZSBHU1RfU1RBVEVfUExBWUlORzoKLSAgICAgICAgICAgIGlmIChtX2J1ZmZlcmluZykg
ewotICAgICAgICAgICAgICAgIGlmIChtX2J1ZmZlcmluZ1BlcmNlbnRhZ2UgPT0gMTAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJp
bmddIENvbXBsZXRlLiIpOwotICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlcmluZyA9IGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVu
b3VnaERhdGE7Ci0gICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gbV9kb3dubG9h
ZEZpbmlzaGVkID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZzsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZUN1cnJlbnREYXRhOwotICAgICAgICAgICAgICAgICAgICBtX25l
dHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7Ci0gICAgICAgICAgICAg
ICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgICAgICAg
ICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gbGF5ZXJC
dWZmZXI7CisgICAgICAgICAgICBpZiAoZnJhbWVIb2xkZXItPmhhc01hcHBlZFRleHR1cmVzKCkp
IHsKKyAgICAgICAgICAgICAgICBsYXllckJ1ZmZlciA9IGZyYW1lSG9sZGVyLT5wbGF0Zm9ybUxh
eWVyQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgaWYgKCFsYXllckJ1ZmZlcikKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyLT5zZXRVbm1h
bmFnZWRCdWZmZXJEYXRhSG9sZGVyKFdURk1vdmUoZnJhbWVIb2xkZXIpKTsKICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6Okhh
dmVGdXR1cmVEYXRhOwotICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6OkxvYWRpbmc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN5bmMgc3RhdGVzIHdoZXJlIG5lZWRl
ZC4KLSAgICAgICAgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAg
ICAgICAgICAgIGlmICghbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAg
ICAgICBub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOwotICAgICAgICAgICAgICAgIG5vdGlm
eVBsYXllck9mTXV0ZSgpOwotICAgICAgICAgICAgICAgIG1fdm9sdW1lQW5kTXV0ZUluaXRpYWxp
emVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRpZEJ1ZmZlcmlu
ZyAmJiAhbV9idWZmZXJpbmcgJiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7Ci0gICAg
ICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gUmVz
dGFydGluZyBwbGF5YmFjay4iKTsKLSAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRl
KEdTVF9TVEFURV9QTEFZSU5HKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICht
X2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgewotICAgICAgICAgICAgbV9wYXVz
ZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKChtX2J1ZmZlcmluZyAmJiAhaXNMaXZlU3Ry
ZWFtKCkpIHx8ICFtX3BsYXliYWNrUmF0ZSkgewotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIFBhdXNpbmcgc3RyZWFtIGZvciBidWZmZXJp
bmcuIik7Ci0gICAgICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFV
U0VEKTsKKyAgICAgICAgICAgICAgICBsYXllckJ1ZmZlciA9IHByb3h5LmdldEF2YWlsYWJsZUJ1
ZmZlcihmcmFtZUhvbGRlci0+c2l6ZSgpLCBHTF9ET05UX0NBUkUpOworICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWSghbGF5ZXJCdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
dGV4dHVyZSA9IEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlKFRleHR1cmVNYXBwZXJDb250ZXh0QXR0
cmlidXRlczo6Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChmcmFt
ZUhvbGRlci0+c2l6ZSgpLCBmcmFtZUhvbGRlci0+aGFzQWxwaGFDaGFubmVsKCkgPyBCaXRtYXBU
ZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogQml0bWFwVGV4dHVyZTo6Tm9GbGFnKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyQnVmZmVyPihXVEZNb3ZlKHRleHR1cmUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZnJhbWVIb2xkZXItPnVwZGF0ZVRleHR1cmUobGF5ZXJCdWZmZXItPnRleHR1
cmVHTCgpKTsKKyAgICAgICAgICAgICAgICBsYXllckJ1ZmZlci0+c2V0RXh0cmFGbGFncyhtX3Rl
eHR1cmVNYXBwZXJGbGFncyB8IChmcmFtZUhvbGRlci0+aGFzQWxwaGFDaGFubmVsKCkgPyBUZXh0
dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMCkpOwogICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKLQotICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJPbGQgc3RhdGU6ICVzLCBuZXcgc3RhdGU6ICVzIChyZXF1ZXN0
ZWQ6ICVzKSIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fb2xkU3RhdGUpLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKG1fcmVxdWVzdGVkU3RhdGUpKTsKLSAgICAgICAgaWYgKG1fcmVxdWVzdGVkU3RhdGUg
PT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VE
KSB7Ci0gICAgICAgICAgICBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKLSAgICAg
ICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiUmVxdWVzdGVkIHN0YXRlIGNoYW5n
ZSB0byAlcyB3YXMgY29tcGxldGVkIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJy
ZW50U3RhdGUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEVtaXQgcGxheSBzdGF0ZSBjaGFu
Z2Ugbm90aWZpY2F0aW9uIG9ubHkgd2hlbiBnb2luZyB0byBQTEFZSU5HIHNvIHRoYXQKLSAgICAg
ICAgLy8gdGhlIG1lZGlhIGVsZW1lbnQgZ2V0cyBhIGNoYW5jZSB0byBlbmFibGUgaXRzIHBhZ2Ug
c2xlZXAgZGlzYWJsZXIuCi0gICAgICAgIC8vIEVtaXR0aW5nIHRoaXMgbm90aWZpY2F0aW9uIGlu
IG1vcmUgY2FzZXMgdHJpZ2dlcnMgdW53YW50ZWQgY29kZSBwYXRocwotICAgICAgICAvLyBhbmQg
dGVzdCB0aW1lb3V0cy4KLSAgICAgICAgaWYgKHN0YXRlUmVhbGx5Q2hhbmdlZCAmJiAobV9vbGRT
dGF0ZSAhPSBtX2N1cnJlbnRTdGF0ZSkgJiYgKG1fb2xkU3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNF
RCAmJiBtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykpIHsKLSAgICAgICAgICAg
IEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiUGxheWJhY2sgc3RhdGUgY2hhbmdlZCBmcm9t
ICVzIHRvICVzLiBOb3RpZnlpbmcgdGhlIG1lZGlhIHBsYXllciBjbGllbnQiLCBnc3RfZWxlbWVu
dF9zdGF0ZV9nZXRfbmFtZShtX29sZFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUo
bV9jdXJyZW50U3RhdGUpKTsKLSAgICAgICAgICAgIHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUg
PSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NU
X1NUQVRFX0NIQU5HRV9BU1lOQzoKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiQXN5bmM6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRf
bmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcp
KTsKLSAgICAgICAgLy8gQ2hhbmdlIGluIHByb2dyZXNzLgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRToKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiRmFpbHVyZTogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50
X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUocGVuZGluZykpOwotICAgICAgICAvLyBDaGFuZ2UgZmFpbGVkCi0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKLSAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiTm8gcHJlcm9sbDogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIs
IGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRf
c3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwotCi0gICAgICAgIC8vIExpdmUgcGlwZWxpbmVzIGdv
IGluIFBBVVNFRCB3aXRob3V0IHByZXJvbGxpbmcuCi0gICAgICAgIG1faXNTdHJlYW1pbmcgPSB0
cnVlOwotICAgICAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsKLQotICAgICAgICBp
ZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQotICAgICAgICAgICAgbV9yZWFk
eVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICBlbHNlIGlmIChtX2N1
cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Ci0gICAgICAgICAgICBtX3BhdXNlZCA9
IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BM
QVlJTkcpCi0gICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJveHku
cHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1ZmZlcikpOworICAgICAgICB9OwogCi0gICAg
ICAgIGlmICghbV9wYXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpCi0gICAgICAgICAgICBjaGFuZ2VQ
aXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBw
cm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7CisjZWxzZQorICAgIHByb3h5
T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKK30KKyNlbmRpZiAvLyBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAKLSAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBs
YXllcjo6TG9hZGluZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRWxzZSA6ICVkIiwgZ2V0U3RhdGVSZXN1bHQpOwot
ICAgICAgICBicmVhazsKLSAgICB9Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
cmVwYWludCgpCit7CisgICAgQVNTRVJUKG1fc2FtcGxlKTsKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogCi0gICAgbV9yZXF1ZXN0ZWRTdGF0ZSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7
CisgICAgbV9wbGF5ZXItPnJlcGFpbnQoKTsKIAotICAgIGlmIChzaG91bGRVcGRhdGVQbGF5YmFj
a1N0YXRlKQotICAgICAgICBtX3BsYXllci0+cGxheWJhY2tTdGF0ZUNoYW5nZWQoKTsKKyAgICBM
b2NrSG9sZGVyIGxvY2sobV9kcmF3TXV0ZXgpOworICAgIG1fZHJhd0NvbmRpdGlvbi5ub3RpZnlP
bmUoKTsKK30KIAotICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUpIHsK
LSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTmV0d29yayBTdGF0ZSBDaGFu
Z2VkIGZyb20gJXMgdG8gJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhvbGROZXR3b3Jr
U3RhdGUpLnV0ZjgoKS5kYXRhKCksIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG1fbmV0d29y
a1N0YXRlKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNo
YW5nZWQoKTsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2VyUmVwYWlu
dChHc3RTYW1wbGUqIHNhbXBsZSkKK3sKKyAgICBib29sIHRyaWdnZXJSZXNpemU7CisgICAgewor
ICAgICAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOworICAg
ICAgICB0cmlnZ2VyUmVzaXplID0gIW1fc2FtcGxlOworICAgICAgICBtX3NhbXBsZSA9IHNhbXBs
ZTsKICAgICB9Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBvbGRSZWFkeVN0YXRlKSB7Ci0gICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlJlYWR5IFN0YXRlIENoYW5nZWQgZnJv
bSAlcyB0byAlcyIsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG9sZFJlYWR5U3RhdGUpLnV0
ZjgoKS5kYXRhKCksIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG1fcmVhZHlTdGF0ZSkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworCisg
ICAgaWYgKHRyaWdnZXJSZXNpemUpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiRmlyc3Qgc2FtcGxlIHJlYWNoZWQgdGhlIHNpbmssIHRyaWdnZXJpbmcgdmlkZW8gZGlt
ZW5zaW9ucyB1cGRhdGUiKTsKKyAgICAgICAgbV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWRO
b3RpZmljYXRpb246OlNpemVDaGFuZ2VkLCBbdGhpc10geworICAgICAgICAgICAgbV9wbGF5ZXIt
PnNpemVDaGFuZ2VkKCk7CisgICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmIChnZXRTdGF0ZVJl
c3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgbV9jdXJyZW50U3RhdGUgPj0gR1NU
X1NUQVRFX1BBVVNFRCkgewotICAgICAgICB1cGRhdGVQbGF5YmFja1JhdGUoKTsKLSAgICAgICAg
aWYgKG1fc2Vla0lzUGVuZGluZykgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiW1NlZWtdIGNvbW1pdHRpbmcgcGVuZGluZyBzZWVrIHRvICVzIiwgdG9TdHJpbmco
bV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBtX3NlZWtJc1BlbmRpbmcg
PSBmYWxzZTsKLSAgICAgICAgICAgIG1fc2Vla2luZyA9IGRvU2VlayhtX3NlZWtUaW1lLCBtX3Bs
YXllci0+cmF0ZSgpLCBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxV
U0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSk7Ci0gICAgICAgICAgICBpZiAoIW1fc2Vla2lu
ZykgewotICAgICAgICAgICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCk7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
W1NlZWtdIHNlZWtpbmcgdG8gJXMgZmFpbGVkIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAoIW1fcmVuZGVyaW5n
Q2FuQmVBY2NlbGVyYXRlZCkgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2RyYXdNdXRl
eCk7CisgICAgICAgIGlmIChtX2Rlc3Ryb3lpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIG1fZHJhd1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworICAgICAgICBtX2RyYXdDb25kaXRp
b24ud2FpdChtX2RyYXdNdXRleCk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpCisgICAgaWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykgewor
ICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9kcmF3TXV0ZXgpOworICAgICAgICBhdXRvIHByb3h5
T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5JiBwcm94eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJv
eHkuc2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQoW3RoaXNdIHsgdGhpcy0+cHVzaFRl
eHR1cmVUb0NvbXBvc2l0b3IoKTsgfSk7CisgICAgICAgICAgICB9OworI2lmIFVTRShOSUNPU0lB
KQorICAgICAgICBpZiAoIXByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgIGlmICghcHJveHlPcGVyYXRpb24o
Km1fcGxhdGZvcm1MYXllclByb3h5KSkKKyAgICAgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAg
ICAgICBtX2RyYXdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKKyAgICAgICAgbV9kcmF3Q29uZGl0
aW9uLndhaXQobV9kcmF3TXV0ZXgpOworICAgIH0gZWxzZQorICAgICAgICBwdXNoVGV4dHVyZVRv
Q29tcG9zaXRvcigpOworI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIH0KIAotYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVwYWludENh
bGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyLCBHc3RTYW1wbGUqIHNh
bXBsZSkKIHsKLSAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVTU0FH
RV9TVFJFQU1fQ09MTEVDVElPTiAmJiAhbV9pc0xlZ2FjeVBsYXliaW4pIHsKLSAgICAgICAgR1Jl
ZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOwotICAgICAgICBnc3RfbWVzc2Fn
ZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbihtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7
CisgICAgcGxheWVyLT50cmlnZ2VyUmVwYWludChzYW1wbGUpOworfQogCi0gICAgICAgIGlmIChj
b2xsZWN0aW9uKSB7Ci0gICAgICAgICAgICBtX3N0cmVhbUNvbGxlY3Rpb24uc3dhcChjb2xsZWN0
aW9uKTsKLSAgICAgICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0
aW9uOjpTdHJlYW1Db2xsZWN0aW9uQ2hhbmdlZCwgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICB0
aGlzLT51cGRhdGVUcmFja3MoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Cit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsUmVwYWludChib29sIGRlc3Ryb3lpbmcp
Cit7CisgICAgLy8gVGhlIGdvYWwgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byByZWxlYXNlIHRoZSBH
U3RyZWFtZXIgdGhyZWFkIGZyb20gbV9kcmF3Q29uZGl0aW9uIGluIHRyaWdnZXJSZXBhaW50KCkg
aW4gbm9uLUFDIGNhc2UsCisgICAgLy8gdG8gYXZvaWQgYSBkZWFkbG9jayBpZiB0aGUgcGxheWVy
IGdldHMgcGF1c2VkIHdoaWxlIHdhaXRpbmcgZm9yIGRyYXdpbmcgKHNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMDAzKToKKyAgICAvLyB0aGUgbWFpbiB0aHJl
YWQgaXMgd2FpdGluZyBmb3IgdGhlIEdTdHJlYW1lciB0aHJlYWQgdG8gcGF1c2UsIGJ1dCB0aGUg
R1N0cmVhbWVyIHRocmVhZCBpcyBsb2NrZWQgd2FpdGluZyBmb3IgdGhlCisgICAgLy8gbWFpbiB0
aHJlYWQgdG8gZHJhdy4gVGhpcyBkZWFkbG9jayBkb2Vzbid0IGhhcHBlbiB3aGVuIHVzaW5nIEFD
IGJlY2F1c2UgdGhlIHNhbXBsZSBpcyBwcm9jZXNzZWQgKG5vdCBwYWludGVkKSBpbiB0aGUgY29t
cG9zaXRvcgorICAgIC8vIHRocmVhZCwgc28gdGhlIG1haW4gdGhyZWFkIGNhbiByZXF1ZXN0IHRo
ZSBwYXVzZSBhbmQgd2FpdCBpZiB0aGUgR1N0cmVhbWVyIHRocmVhZCBpcyB3YWl0aW5nIGZvciB0
aGUgY29tcG9zaXRvciB0aHJlYWQuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFs
c28gdXNlZCB3aGVuIGRlc3Ryb3lpbmcgdGhlIHBsYXllciAoZGVzdHJveWluZyBwYXJhbWV0ZXIg
aXMgdHJ1ZSksIHRvIHJlbGVhc2UgdGhlIGdzdHJlYW1lciB0aHJlYWQgZnJvbQorICAgIC8vIG1f
ZHJhd0NvbmRpdGlvbiBhbmQgdG8gZW5zdXJlIHRoYXQgbmV3IHRyaWdnZXJSZXBhaW50IGNhbGxz
IHdvbid0IHdhaXQgb24gbV9kcmF3Q29uZGl0aW9uLgorICAgIGlmICghbV9yZW5kZXJpbmdDYW5C
ZUFjY2VsZXJhdGVkKSB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZHJhd011dGV4KTsK
KyAgICAgICAgbV9kcmF3VGltZXIuc3RvcCgpOworICAgICAgICBtX2Rlc3Ryb3lpbmcgPSBkZXN0
cm95aW5nOworICAgICAgICBtX2RyYXdDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgfQorfQog
Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmhhbmRsZVN5bmNN
ZXNzYWdlKG1lc3NhZ2UpOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFp
bnRDYW5jZWxsZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikK
K3sKKyAgICBwbGF5ZXItPmNhbmNlbFJlcGFpbnQoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om1lZGlhTG9jYXRpb25DaGFuZ2VkKEdzdE1lc3NhZ2UqIG1lc3NhZ2Up
CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKK0dzdEZsb3dSZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpuZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50KiBzaW5rLCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKIHsKLSAgICBpZiAobV9tZWRpYUxvY2F0aW9ucykK
LSAgICAgICAgZ3N0X3N0cnVjdHVyZV9mcmVlKG1fbWVkaWFMb2NhdGlvbnMpOworICAgIEdSZWZQ
dHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxl
KEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgIHBsYXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxl
LmdldCgpKTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CiAKLSAgICBjb25zdCBHc3RTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUobWVzc2FnZSk7Ci0g
ICAgaWYgKHN0cnVjdHVyZSkgewotICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjYW4gY29udGFp
bjoKLSAgICAgICAgLy8gLSBib3RoIGEgbmV3LWxvY2F0aW9uIHN0cmluZyBhbmQgZW1iZWRkZWQg
bG9jYXRpb25zIHN0cnVjdHVyZQotICAgICAgICAvLyAtIG9yIG9ubHkgYSBuZXctbG9jYXRpb24g
c3RyaW5nLgotICAgICAgICBtX21lZGlhTG9jYXRpb25zID0gZ3N0X3N0cnVjdHVyZV9jb3B5KHN0
cnVjdHVyZSk7Ci0gICAgICAgIGNvbnN0IEdWYWx1ZSogbG9jYXRpb25zID0gZ3N0X3N0cnVjdHVy
ZV9nZXRfdmFsdWUobV9tZWRpYUxvY2F0aW9ucywgImxvY2F0aW9ucyIpOworR3N0Rmxvd1JldHVy
biBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1ByZXJvbGxDYWxsYmFjayhHc3RFbGVt
ZW50KiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICBH
UmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3By
ZXJvbGwoR1NUX0FQUF9TSU5LKHNpbmspKSk7CisgICAgcGxheWVyLT50cmlnZ2VyUmVwYWludChz
YW1wbGUuZ2V0KCkpOworICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30KIAotICAgICAgICBpZiAo
bG9jYXRpb25zKQotICAgICAgICAgICAgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4ID0gc3Rh
dGljX2Nhc3Q8aW50Pihnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZShsb2NhdGlvbnMpKSAtMTsKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpmbHVzaEN1cnJlbnRCdWZmZXIoKQorewor
ICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7CiAKLSAgICAg
ICAgbG9hZE5leHRMb2NhdGlvbigpOworICAgIGlmIChtX3NhbXBsZSkgeworICAgICAgICAvLyBS
ZXBsYWNlIGJ5IGEgbmV3IHNhbXBsZSBoYXZpbmcgb25seSB0aGUgY2Fwcywgc28gdGhpcyBkdW1t
eSBzYW1wbGUgaXMgc3RpbGwgdXNlZnVsIHRvIGdldCB0aGUgZGltZW5zaW9ucy4KKyAgICAgICAg
Ly8gVGhpcyBwcmV2ZW50cyByZXNpemluZyBwcm9ibGVtcyB3aGVuIHRoZSB2aWRlbyBjaGFuZ2Vz
IGl0cyBxdWFsaXR5IGFuZCBhIERSQUlOIGlzIHBlcmZvcm1lZC4KKyAgICAgICAgY29uc3QgR3N0
U3RydWN0dXJlKiBpbmZvID0gZ3N0X3NhbXBsZV9nZXRfaW5mbyhtX3NhbXBsZS5nZXQoKSk7Cisg
ICAgICAgIG1fc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9zYW1wbGVfbmV3KG51bGxwdHIsIGdzdF9z
YW1wbGVfZ2V0X2NhcHMobV9zYW1wbGUuZ2V0KCkpLAorICAgICAgICAgICAgZ3N0X3NhbXBsZV9n
ZXRfc2VnbWVudChtX3NhbXBsZS5nZXQoKSksIGluZm8gPyBnc3Rfc3RydWN0dXJlX2NvcHkoaW5m
bykgOiBudWxscHRyKSk7CiAgICAgfQorCisgICAgYm9vbCBzaG91bGRXYWl0ID0gbV92aWRlb0Rl
Y29kZXJQbGF0Zm9ybSA9PSBHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6VmlkZW80TGludXg7Cisg
ICAgYXV0byBwcm94eU9wZXJhdGlvbiA9IFtzaG91bGRXYWl0LCBwaXBlbGluZSA9IHBpcGVsaW5l
KCldKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KSB7CisgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QocGlwZWxpbmUsICJGbHVzaGluZyB2aWRlbyBzYW1wbGUgJXMiLCBzaG91
bGRXYWl0ID8gInN5bmNocm9ub3VzbHkiIDogIiIpOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cighc2hvdWxkV2FpdCA/ICZwcm94eS5sb2NrKCkgOiBudWxscHRyKTsKKworICAgICAgICBpZiAo
cHJveHkuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIHByb3h5LmRyb3BDdXJyZW50QnVmZmVyV2hp
bGVQcmVzZXJ2aW5nVGV4dHVyZShzaG91bGRXYWl0KTsKKyAgICB9OworCisjaWYgVVNFKE5JQ09T
SUEpCisgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UK
KyAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCiB9Cisj
ZW5kaWYKIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9jYXRp
b24oKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFNpemUoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoIW1fbWVkaWFMb2NhdGlvbnMpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBtX3NpemUgPSBzaXplOworfQogCi0gICAgY29uc3QgR1ZhbHVlKiBsb2Nh
dGlvbnMgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShtX21lZGlhTG9jYXRpb25zLCAibG9jYXRp
b25zIik7Ci0gICAgY29uc3QgZ2NoYXIqIG5ld0xvY2F0aW9uID0gbnVsbHB0cjsKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbG9jYXRpb25zKSB7Ci0gICAgICAg
IC8vIEZhbGxiYWNrIG9uIG5ldy1sb2NhdGlvbiBzdHJpbmcuCi0gICAgICAgIG5ld0xvY2F0aW9u
ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKG1fbWVkaWFMb2NhdGlvbnMsICJuZXctbG9jYXRp
b24iKTsKLSAgICAgICAgaWYgKCFuZXdMb2NhdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgaWYgKCFtX3BsYXllci0+dmlzaWJsZSgpKQorICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoIW5ld0xvY2F0aW9uKSB7Ci0gICAgICAgIGlmIChtX21lZGlhTG9jYXRpb25D
dXJyZW50SW5kZXggPCAwKSB7Ci0gICAgICAgICAgICBtX21lZGlhTG9jYXRpb25zID0gbnVsbHB0
cjsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgIGF1dG8gc2FtcGxl
TG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7CisgICAgaWYgKCFHU1RfSVNfU0FNUExF
KG1fc2FtcGxlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvbnN0IEdWYWx1
ZSogbG9jYXRpb24gPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUobG9jYXRpb25zLCBtX21lZGlh
TG9jYXRpb25DdXJyZW50SW5kZXgpOwotICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGdzdF92YWx1ZV9nZXRfc3RydWN0dXJlKGxvY2F0aW9uKTsKKyNpZiBVU0UoR1NUUkVB
TUVSX0dMKQorICAgIC8vIEVuc3VyZSB0aGUgaW5wdXQgaXMgUkdCQS4gV2UgaGFuZGxlIFlVViB2
aWRlbyBuYXRpdmVseSwgc28gd2UgbmVlZCB0byBkbworICAgIC8vIHRoaXMgY29udmVyc2lvbiBv
bi1kZW1hbmQgaGVyZS4KKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1
ZmZlcihtX3NhbXBsZS5nZXQoKSk7CisgICAgaWYgKFVOTElLRUxZKCFHU1RfSVNfQlVGRkVSKGJ1
ZmZlcikpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpIHsKLSAg
ICAgICAgICAgIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleC0tOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIEdzdENhcHMqIGNhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzKG1fc2Ft
cGxlLmdldCgpKTsKKworICAgIEdzdFZpZGVvSW5mbyB2aWRlb0luZm87CisgICAgZ3N0X3ZpZGVv
X2luZm9faW5pdCgmdmlkZW9JbmZvKTsKKyAgICBpZiAoIWdzdF92aWRlb19pbmZvX2Zyb21fY2Fw
cygmdmlkZW9JbmZvLCBjYXBzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFHU1RfVklE
RU9fSU5GT19JU19SR0IoJnZpZGVvSW5mbykpIHsKKyAgICAgICAgaWYgKCFtX2NvbG9yQ29udmVy
dCkgeworICAgICAgICAgICAgR3N0TWVtb3J5KiBtZW0gPSBnc3RfYnVmZmVyX3BlZWtfbWVtb3J5
KGJ1ZmZlciwgMCk7CisgICAgICAgICAgICBHc3RHTENvbnRleHQqIGNvbnRleHQgPSAoKEdzdEdM
QmFzZU1lbW9yeSopbWVtKS0+Y29udGV4dDsKKyAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0ID0g
YWRvcHRHUmVmKGdzdF9nbF9jb2xvcl9jb252ZXJ0X25ldyhjb250ZXh0KSk7CiAgICAgICAgIH0K
IAotICAgICAgICBuZXdMb2NhdGlvbiA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1
cmUsICJuZXctbG9jYXRpb24iKTsKKyAgICAgICAgaWYgKCFtX2NvbG9yQ29udmVydElucHV0Q2Fw
cyB8fCAhZ3N0X2NhcHNfaXNfZXF1YWwobV9jb2xvckNvbnZlcnRJbnB1dENhcHMuZ2V0KCksIGNh
cHMpKSB7CisgICAgICAgICAgICBtX2NvbG9yQ29udmVydElucHV0Q2FwcyA9IGNhcHM7CisgICAg
ICAgICAgICBtX2NvbG9yQ29udmVydE91dHB1dENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfY29w
eShjYXBzKSk7CisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorICAgICAgICAg
ICAgY29uc3QgZ2NoYXIqIGZvcm1hdFN0cmluZyA9IEdTVF9WSURFT19JTkZPX0hBU19BTFBIQSgm
dmlkZW9JbmZvKSA/ICJSR0JBIiA6ICJCR1J4IjsKKyNlbHNlCisgICAgICAgICAgICBjb25zdCBn
Y2hhciogZm9ybWF0U3RyaW5nID0gR1NUX1ZJREVPX0lORk9fSEFTX0FMUEhBKCZ2aWRlb0luZm8p
ID8gIlJHQkEiIDogIlJHQngiOworI2VuZGlmCisgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2lt
cGxlKG1fY29sb3JDb252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSwgImZvcm1hdCIsIEdfVFlQRV9TVFJJ
TkcsIGZvcm1hdFN0cmluZywgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoIWdzdF9nbF9jb2xv
cl9jb252ZXJ0X3NldF9jYXBzKG1fY29sb3JDb252ZXJ0LmdldCgpLCBjYXBzLCBtX2NvbG9yQ29u
dmVydE91dHB1dENhcHMuZ2V0KCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIEdSZWZQdHI8R3N0QnVmZmVyPiByZ2JCdWZmZXIgPSBhZG9wdEdSZWYoZ3N0
X2dsX2NvbG9yX2NvbnZlcnRfcGVyZm9ybShtX2NvbG9yQ29udmVydC5nZXQoKSwgYnVmZmVyKSk7
CisgICAgICAgIGlmIChVTkxJS0VMWSghR1NUX0lTX0JVRkZFUihyZ2JCdWZmZXIuZ2V0KCkpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIGluZm8g
PSBnc3Rfc2FtcGxlX2dldF9pbmZvKG1fc2FtcGxlLmdldCgpKTsKKyAgICAgICAgbV9zYW1wbGUg
PSBhZG9wdEdSZWYoZ3N0X3NhbXBsZV9uZXcocmdiQnVmZmVyLmdldCgpLCBtX2NvbG9yQ29udmVy
dE91dHB1dENhcHMuZ2V0KCksCisgICAgICAgICAgICBnc3Rfc2FtcGxlX2dldF9zZWdtZW50KG1f
c2FtcGxlLmdldCgpKSwgaW5mbyA/IGdzdF9zdHJ1Y3R1cmVfY29weShpbmZvKSA6IG51bGxwdHIp
KTsKICAgICB9CisjZW5kaWYKIAotICAgIGlmIChuZXdMb2NhdGlvbikgewotICAgICAgICAvLyBG
b3VuZCBhIGNhbmRpZGF0ZS4gbmV3LWxvY2F0aW9uIGlzIG5vdCBhbHdheXMgYW4gYWJzb2x1dGUg
dXJsCi0gICAgICAgIC8vIHRob3VnaC4gV2UgbmVlZCB0byB0YWtlIHRoZSBiYXNlIG9mIHRoZSBj
dXJyZW50IHVybCBhbmQKLSAgICAgICAgLy8gYXBwZW5kIHRoZSB2YWx1ZSBvZiBuZXctbG9jYXRp
b24gdG8gaXQuCi0gICAgICAgIFVSTCBiYXNlVXJsID0gZ3N0X3VyaV9pc192YWxpZChuZXdMb2Nh
dGlvbikgPyBVUkwoKSA6IG1fdXJsOwotICAgICAgICBVUkwgbmV3VXJsID0gVVJMKGJhc2VVcmws
IG5ld0xvY2F0aW9uKTsKKyAgICBhdXRvIGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0
ZUltYWdlKG1fc2FtcGxlLmdldCgpKTsKKyAgICBpZiAoIWdzdEltYWdlKQorICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gcGxheWJpblVybFN0cjsKLSAgICAg
ICAgZ19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJjdXJyZW50LXVyaSIsICZwbGF5Ymlu
VXJsU3RyLm91dFB0cigpLCBudWxscHRyKTsKLSAgICAgICAgVVJMIHBsYXliaW5VcmwoVVJMKCks
IHBsYXliaW5VcmxTdHIuZ2V0KCkpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKGdzdEltYWdlLT5p
bWFnZSgpLCByZWN0LCBnc3RJbWFnZS0+cmVjdCgpLCB7IENvbXBvc2l0ZUNvcHksIG1fcmVuZGVy
aW5nQ2FuQmVBY2NlbGVyYXRlZCA/IG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA6IEltYWdlT3Jp
ZW50YXRpb24oKSB9KTsKK30KIAotICAgICAgICBpZiAocGxheWJpblVybCA9PSBuZXdVcmwpIHsK
LSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXliaW4gYWxyZWFk
eSBoYW5kbGVkIHJlZGlyZWN0aW9uLiIpOworI2lmIFVTRShHU1RSRUFNRVJfR0wpCitib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0IG91dHB1dFRl
eHR1cmUsIEdDM0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGZsaXBZKQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKIAot
ICAgICAgICAgICAgbV91cmwgPSBwbGF5YmluVXJsOworICAgIGlmIChtX3VzaW5nRmFsbGJhY2tW
aWRlb1NpbmspCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KKyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1JFQURZKTsK
LSAgICAgICAgYXV0byBzZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobV91
cmwpOwotICAgICAgICBpZiAoc2VjdXJpdHlPcmlnaW4tPmNhblJlcXVlc3QobmV3VXJsKSkgewot
ICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJOZXcgbWVkaWEgdXJsOiAl
cyIsIG5ld1VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBhdXRvIHNhbXBsZUxvY2tl
ciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwogCi0gICAgICAgICAgICAvLyBSZXNldCBwbGF5
ZXIgc3RhdGVzLgotICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9h
ZGluZzsKLSAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Ci0gICAg
ICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7Ci0gICAgICAg
ICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICBpZiAoIUdTVF9JU19TQU1Q
TEUobV9zYW1wbGUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
IC8vIFJlc2V0IHBpcGVsaW5lIHN0YXRlLgotICAgICAgICAgICAgbV9yZXNldFBpcGVsaW5lID0g
dHJ1ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3N0VmlkZW9GcmFtZUhvbGRlcj4gZnJhbWVIb2xk
ZXIgPSBtYWtlVW5pcXVlPEdzdFZpZGVvRnJhbWVIb2xkZXI+KG1fc2FtcGxlLmdldCgpLCBtX3Zp
ZGVvRGVjb2RlclBsYXRmb3JtLCBtX3RleHR1cmVNYXBwZXJGbGFncywgdHJ1ZSk7CiAKLSAgICAg
ICAgICAgIEdzdFN0YXRlIHN0YXRlOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRl
KG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7Ci0gICAgICAgICAgICBpZiAo
c3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBu
ZXcgdXJpIGFuZCBzdGFydCBwbGF5aW5nLgotICAgICAgICAgICAgICAgIHNldFBsYXliaW5VUkwo
bmV3VXJsKTsKLSAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9Q
TEFZSU5HKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIk5v
dCBhbGxvd2VkIHRvIGxvYWQgbmV3IG1lZGlhIGxvY2F0aW9uOiAlcyIsIG5ld1VybC5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci0gICAgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4
LS07Ci0gICAgcmV0dXJuIGZhbHNlOwotfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gbGF5ZXJCdWZmZXIgPSBmcmFtZUhvbGRlci0+cGxhdGZv
cm1MYXllckJ1ZmZlcigpOworICAgIGlmICghbGF5ZXJCdWZmZXIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRTdGF0ZUNoYW5n
ZWQoKQotewotICAgIHVwZGF0ZVN0YXRlcygpOwotfQorICAgIGF1dG8gc2l6ZSA9IGZyYW1lSG9s
ZGVyLT5zaXplKCk7CisgICAgaWYgKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbi51c2VzV2lkdGhB
c0hlaWdodCgpKQorICAgICAgICBzaXplID0gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOwogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGltZUNoYW5nZWQoKQotewotICAgIHVwZGF0
ZVN0YXRlcygpOwotICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworICAgIGlmICghbV92aWRl
b1RleHR1cmVDb3BpZXIpCisgICAgICAgIG1fdmlkZW9UZXh0dXJlQ29waWVyID0gbWFrZVVuaXF1
ZTxWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI+KFRFWFRVUkVfQ09QSUVSX0NPTE9SX0NPTlZF
UlRfRkxBRyk7CisKKyAgICBmcmFtZUhvbGRlci0+d2FpdEZvckNQVVN5bmMoKTsKKworICAgIHJl
dHVybiBtX3ZpZGVvVGV4dHVyZUNvcGllci0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKCpsYXllckJ1ZmZlci5nZXQoKSwgc2l6ZSwgb3V0cHV0VGV4dHVyZSwgb3V0cHV0VGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgZmxpcFksIG1fdmlkZW9Tb3Vy
Y2VPcmllbnRhdGlvbik7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpk
aWRFbmQoKQorTmF0aXZlSW1hZ2VQdHIgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXRp
dmVJbWFnZUZvckN1cnJlbnRUaW1lKCkKIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUo
KSwgIlBsYXliYWNrIGVuZGVkIik7CisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQorICAgIGlmIChtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmspCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgLy8gU3luY2hyb25pemUgcG9zaXRpb24gYW5kIGR1cmF0
aW9uIHZhbHVlcyB0byBub3QgY29uZnVzZSB0aGUKLSAgICAvLyBIVE1MTWVkaWFFbGVtZW50LiBJ
biBzb21lIGNhc2VzIGxpa2UgcmV2ZXJzZSBwbGF5YmFjayB0aGUKLSAgICAvLyBwb3NpdGlvbiBp
cyBub3QgYWx3YXlzIHJlcG9ydGVkIGFzIDAgZm9yIGluc3RhbmNlLgotICAgIG1fY2FjaGVkUG9z
aXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0gICAgTWVkaWFUaW1lIG5vdyA9IGN1
cnJlbnRNZWRpYVRpbWUoKTsKLSAgICBpZiAobm93ID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYm
ICFtX3NlZWtpbmcpIHsKLSAgICAgICAgbV9jYWNoZWREdXJhdGlvbiA9IG5vdzsKLSAgICAgICAg
bV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOwotICAgIH0KKyAgICBhdXRvIHNhbXBsZUxvY2tl
ciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwogCi0gICAgbV9pc0VuZFJlYWNoZWQgPSB0cnVl
OworICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCisgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgaWYgKCFtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJJc0xv
b3BpbmcoKSkgewotICAgICAgICBtX3BhdXNlZCA9IHRydWU7Ci0gICAgICAgIGNoYW5nZVBpcGVs
aW5lU3RhdGUoR1NUX1NUQVRFX1JFQURZKTsKLSAgICAgICAgbV9kb3dubG9hZEZpbmlzaGVkID0g
ZmFsc2U7Ci0gICAgfQotICAgIHRpbWVDaGFuZ2VkKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdz
dFZpZGVvRnJhbWVIb2xkZXI+IGZyYW1lSG9sZGVyID0gbWFrZVVuaXF1ZTxHc3RWaWRlb0ZyYW1l
SG9sZGVyPihtX3NhbXBsZS5nZXQoKSwgbV92aWRlb0RlY29kZXJQbGF0Zm9ybSwgbV90ZXh0dXJl
TWFwcGVyRmxhZ3MsIHRydWUpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9IGZyYW1lSG9sZGVyLT5wbGF0Zm9ybUxh
eWVyQnVmZmVyKCk7CisgICAgaWYgKCFsYXllckJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIHNpemUgPSBmcmFtZUhvbGRlci0+c2l6ZSgpOworICAgIGlmIChtX3Zp
ZGVvU291cmNlT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkKKyAgICAgICAgc2l6ZSA9
IHNpemUudHJhbnNwb3NlZFNpemUoKTsKKworICAgIEdMQ29udGV4dCogY29udGV4dCA9IFBsYXRm
b3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4
dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYgKCFtX3Zp
ZGVvVGV4dHVyZUNvcGllcikKKyAgICAgICAgbV92aWRlb1RleHR1cmVDb3BpZXIgPSBtYWtlVW5p
cXVlPFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcj4oVEVYVFVSRV9DT1BJRVJfQ09MT1JfQ09O
VkVSVF9GTEFHKTsKKworICAgIGZyYW1lSG9sZGVyLT53YWl0Rm9yQ1BVU3luYygpOworCisgICAg
aWYgKCFtX3ZpZGVvVGV4dHVyZUNvcGllci0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKCpsYXllckJ1ZmZlci5nZXQoKSwgc2l6ZSwgMCwgR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdC
QSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIG1fdmlkZW9Tb3VyY2VPcmllbnRh
dGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UmVmKGNh
aXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCks
IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fdmlkZW9UZXh0dXJlQ29waWVyLT5yZXN1bHRU
ZXh0dXJlKCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworI2Vsc2UKKyAgICByZXR1
cm4gbnVsbHB0cjsKKyNlbmRpZgogfQorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQoKQordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFZpZGVvU291cmNlT3JpZW50YXRpb24oSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKLSAgICBNZWRpYVRpbWUgcHJldmlvdXNEdXJh
dGlvbiA9IGR1cmF0aW9uTWVkaWFUaW1lKCk7Ci0gICAgbV9jYWNoZWREdXJhdGlvbiA9IE1lZGlh
VGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICBpZiAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uID09
IG9yaWVudGF0aW9uKQorICAgICAgICByZXR1cm47CiAKLSAgICAvLyBBdm9pZCBlbWl0aW5nIGR1
cmF0aW9uY2hhbmdlZCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgcHJldmlvdXMKLSAgICAvLyBkdXJh
dGlvbiB3YXMgMCBiZWNhdXNlIHRoYXQgY2FzZSBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgdGhlCi0g
ICAgLy8gSFRNTE1lZGlhRWxlbWVudC4KLSAgICBpZiAocHJldmlvdXNEdXJhdGlvbiAmJiBkdXJh
dGlvbk1lZGlhVGltZSgpICE9IHByZXZpb3VzRHVyYXRpb24pCi0gICAgICAgIG1fcGxheWVyLT5k
dXJhdGlvbkNoYW5nZWQoKTsKKyAgICBtX3ZpZGVvU291cmNlT3JpZW50YXRpb24gPSBvcmllbnRh
dGlvbjsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgdXBkYXRlVGV4dHVyZU1hcHBl
ckZsYWdzKCk7CisjZW5kaWYKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrRXJyb3IsIE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUsIGJvb2wgZm9yY2VOb3RpZmljYXRpb25z
KQorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp1cGRhdGVUZXh0dXJlTWFwcGVyRmxhZ3MoKQogewotICAgIEdTVF9XQVJOSU5HKCJM
b2FkaW5nIGZhaWxlZCwgZXJyb3I6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcobmV0
d29ya0Vycm9yKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIG1fZXJyb3JPY2N1cmVkID0gdHJ1ZTsK
LSAgICBpZiAoZm9yY2VOb3RpZmljYXRpb25zIHx8IG1fbmV0d29ya1N0YXRlICE9IG5ldHdvcmtF
cnJvcikgewotICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IG5ldHdvcmtFcnJvcjsKLSAgICAgICAg
bV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci0gICAgaWYgKGZvcmNlTm90
aWZpY2F0aW9ucyB8fCBtX3JlYWR5U3RhdGUgIT0gcmVhZHlTdGF0ZSkgewotICAgICAgICBtX3Jl
YWR5U3RhdGUgPSByZWFkeVN0YXRlOwotICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5n
ZWQoKTsKKyAgICBzd2l0Y2ggKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbikgeworICAgIGNhc2Ug
SW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdDoKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVy
RmxhZ3MgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEltYWdlT3JpZW50YXRpb246Ok9y
aWdpblJpZ2h0VG9wOgorICAgICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9IFRleHR1cmVNYXBw
ZXJHTDo6U2hvdWxkUm90YXRlVGV4dHVyZTkwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElt
YWdlT3JpZW50YXRpb246Ok9yaWdpbkJvdHRvbVJpZ2h0OgorICAgICAgICBtX3RleHR1cmVNYXBw
ZXJGbGFncyA9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkUm90YXRlVGV4dHVyZTE4MDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5MZWZ0Qm90dG9tOgor
ICAgICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkUm90
YXRlVGV4dHVyZTI3MDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8g
RklYTUU6IEhhbmRsZSBPcmlnaW5Ub3BSaWdodCwgT3JpZ2luQm90dG9tTGVmdCwgT3JpZ2luTGVm
dFRvcCBhbmQgT3JpZ2luUmlnaHRCb3R0b20/CisgICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdz
ID0gMDsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgLy8gTG9hZGluZyBmYWlsZWQsIHJl
bW92ZSByZWFkeSB0aW1lci4KLSAgICBtX3JlYWR5VGltZXJIYW5kbGVyLnN0b3AoKTsKIH0KKyNl
bmRpZgogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3VwcG9ydGVkVHlw
ZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQorYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0
CiB7Ci0gICAgYXV0byYgZ3N0UmVnaXN0cnlTY2FubmVyID0gR1N0cmVhbWVyUmVnaXN0cnlTY2Fu
bmVyOjpzaW5nbGV0b24oKTsKLSAgICB0eXBlcyA9IGdzdFJlZ2lzdHJ5U2Nhbm5lci5taW1lVHlw
ZVNldCgpOworICAgIHJldHVybiB0cnVlOwogfQogCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBl
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5n
aW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCitNZWRpYVBsYXllcjo6TW92aWVMb2Fk
VHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1vdmllTG9hZFR5cGUoKSBjb25zdAog
ewotICAgIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6Oklz
Tm90U3VwcG9ydGVkOwotI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi0gICAgLy8gTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFIGlzIGluIGNoYXJnZSBvZiBtZWRpYXNvdXJjZSBwbGF5YmFj
aywgbm90IHVzLgotICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTb3VyY2UpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0jZW5kaWYKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IE1lZGlhUGxheWVy
OjpIYXZlTm90aGluZykKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpVbmtub3duOwogCi0j
aWYgIUVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVN0cmVh
bSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSNlbmRpZgorICAgIGlmIChpc0xpdmVTdHJlYW0o
KSkKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtOwogCi0gICAgaWYgKHBh
cmFtZXRlcnMudHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0
dXJuIE1lZGlhUGxheWVyOjpEb3dubG9hZDsKK30KIAotICAgIEdTVF9ERUJVRygiQ2hlY2tpbmcg
bWltZS10eXBlIFwiJXNcIiIsIHBhcmFtZXRlcnMudHlwZS5yYXcoKS51dGY4KCkuZGF0YSgpKTsK
LSAgICBhdXRvIGNvbnRhaW5lclR5cGUgPSBwYXJhbWV0ZXJzLnR5cGUuY29udGFpbmVyVHlwZSgp
OwotICAgIGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9IEdTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5l
cjo6c2luZ2xldG9uKCk7Ci0gICAgaWYgKGdzdFJlZ2lzdHJ5U2Nhbm5lci5pc0NvbnRhaW5lclR5
cGVTdXBwb3J0ZWQoY29udGFpbmVyVHlwZSkpIHsKLSAgICAgICAgLy8gU3BlYyBzYXlzIHdlIHNo
b3VsZCBub3QgcmV0dXJuICJwcm9iYWJseSIgaWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHku
Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGNvZGVjcyA9IHBhcmFtZXRlcnMudHlwZS5jb2RlY3Mo
KTsKLSAgICAgICAgcmVzdWx0ID0gY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlC
ZVN1cHBvcnRlZCA6IChnc3RSZWdpc3RyeVNjYW5uZXIuYXJlQWxsQ29kZWNzU3VwcG9ydGVkKGNv
ZGVjcykgPyBNZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNOb3RTdXBw
b3J0ZWQpOwotICAgIH0KKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorR3N0RWxlbWVudCogTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHTEFwcFNpbmsoKQoreworICAgIEdzdEVsZW1l
bnQqIGFwcHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsiLCAid2Via2l0
LWdsLXZpZGVvLXNpbmsiKTsKKyAgICBpZiAoIWFwcHNpbmspCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgZ19vYmplY3Rfc2V0KGFwcHNpbmssICJlbmFibGUtbGFzdC1zYW1wbGUiLCBG
QUxTRSwgImVtaXQtc2lnbmFscyIsIFRSVUUsICJtYXgtYnVmZmVycyIsIDEsIG51bGxwdHIpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoYXBwc2luaywgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG5l
d1NhbXBsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChhcHBzaW5rLCAi
bmV3LXByZXJvbGwiLCBHX0NBTExCQUNLKG5ld1ByZXJvbGxDYWxsYmFjayksIHRoaXMpOworCisg
ICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChhcHBzaW5rLCAic2luayIpKTsKKyAgICBnc3RfcGFkX2FkZF9wcm9iZShwYWQuZ2V0KCks
IHN0YXRpY19jYXN0PEdzdFBhZFByb2JlVHlwZT4oR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0ggfCBH
U1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNUUkVBTSB8IEdTVF9QQURfUFJPQkVfVFlQRV9F
VkVOVF9GTFVTSCksIFtdIChHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8sICBncG9pbnRl
ciB1c2VyRGF0YSkgLT4gR3N0UGFkUHJvYmVSZXR1cm4geworICAgICAgICAvLyBJbiBzb21lIHBs
YXRmb3JtcyAoZS5nLiBPcGVuTUFYIG9uIHRoZSBSYXNwYmVycnkgUGkpIHdoZW4gYSByZXNvbHV0
aW9uIGNoYW5nZSBvY2N1cnMgdGhlCisgICAgICAgIC8vIHBpcGVsaW5lIGhhcyB0byBiZSBkcmFp
bmVkIGJlZm9yZSBhIGZyYW1lIHdpdGggdGhlIG5ldyByZXNvbHV0aW9uIGNhbiBiZSBkZWNvZGVk
LgorICAgICAgICAvLyBJbiB0aGlzIGNvbnRleHQsIGl0J3MgaW1wb3J0YW50IHRoYXQgd2UgZG9u
J3QgaG9sZCByZWZlcmVuY2VzIHRvIGFueSBwcmV2aW91cyBmcmFtZQorICAgICAgICAvLyAoZS5n
LiBtX3NhbXBsZSkgc28gdGhhdCBkZWNvZGluZyBjYW4gY29udGludWUuCisgICAgICAgIC8vIFdl
IGFyZSBhbHNvIG5vdCBzdXBwb3NlZCB0byBrZWVwIHRoZSBvcmlnaW5hbCBmcmFtZSBhZnRlciBh
IGZsdXNoLgorICAgICAgICBpZiAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9RVUVS
WV9ET1dOU1RSRUFNKSB7CisgICAgICAgICAgICBpZiAoR1NUX1FVRVJZX1RZUEUoR1NUX1BBRF9Q
Uk9CRV9JTkZPX1FVRVJZKGluZm8pKSAhPSBHU1RfUVVFUllfRFJBSU4pCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7CisgICAgICAgICAgICBHU1RfREVCVUcoIkFjdGlu
ZyB1cG9uIERSQUlOIHF1ZXJ5Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZm8tPnR5cGUg
JiBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0gpIHsKKyAgICAgICAgICAgIGlmIChHU1Rf
RVZFTlRfVFlQRShHU1RfUEFEX1BST0JFX0lORk9fRVZFTlQoaW5mbykpICE9IEdTVF9FVkVOVF9G
TFVTSF9TVEFSVCkKKyAgICAgICAgICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAg
ICAgICAgICAgIEdTVF9ERUJVRygiQWN0aW5nIHVwb24gZmx1c2gtc3RhcnQgZXZlbnQiKTsKKyAg
ICAgICAgfQogCi0gICAgYXV0byBmaW5hbFJlc3VsdCA9IGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBh
cmFtZXRlcnMsIHJlc3VsdCk7Ci0gICAgR1NUX0RFQlVHKCJTdXBwb3J0ZWQ6ICVzIiwgY29udmVy
dEVudW1lcmF0aW9uVG9TdHJpbmcoZmluYWxSZXN1bHQpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJl
dHVybiBmaW5hbFJlc3VsdDsKKyAgICAgICAgYXV0byogcGxheWVyID0gc3RhdGljX2Nhc3Q8TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKj4odXNlckRhdGEpOworICAgICAgICBwbGF5ZXItPmZs
dXNoQ3VycmVudEJ1ZmZlcigpOworICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAg
ICB9LCB0aGlzLCBudWxscHRyKTsKKworICAgIHJldHVybiBhcHBzaW5rOwogfQogCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlRG93bmxvYWRCdWZmZXJpbmdGbGFnKCkK
K0dzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5r
R0woKQogewotICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuOworICAgIGdib29s
ZWFuIHJlc3VsdCA9IFRSVUU7CisgICAgR3N0RWxlbWVudCogdmlkZW9TaW5rID0gZ3N0X2Jpbl9u
ZXcobnVsbHB0cik7CisgICAgR3N0RWxlbWVudCogdXBsb2FkID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJnbHVwbG9hZCIsIG51bGxwdHIpOworICAgIEdzdEVsZW1lbnQqIGNvbG9yY29udmVy
dCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZ2xjb2xvcmNvbnZlcnQiLCBudWxscHRyKTsK
KyAgICBHc3RFbGVtZW50KiBhcHBzaW5rID0gY3JlYXRlR0xBcHBTaW5rKCk7CiAKLSAgICB1bnNp
Z25lZCBmbGFnczsKLSAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwg
JmZsYWdzLCBudWxscHRyKTsKKyAgICAvLyBnbHNpbmtiaW4gaXMgbm90IHVzZWQgYmVjYXVzZSBp
dCBpbmNsdWRlcyBnbGNvbG9yY29udmVydCB3aGljaCBvbmx5IHByb2Nlc3MgUkdCQSwKKyAgICAv
LyBidXQgd2UgY2FuIGRpc3BsYXkgWVVWIGZvcm1hdHMgdG9vLgogCi0gICAgdW5zaWduZWQgZmxh
Z0Rvd25sb2FkID0gZ2V0R3N0UGxheUZsYWcoImRvd25sb2FkIik7CisgICAgaWYgKCFhcHBzaW5r
IHx8ICF1cGxvYWQgfHwgIWNvbG9yY29udmVydCkgeworICAgICAgICBHU1RfV0FSTklORygiRmFp
bGVkIHRvIGNyZWF0ZSBHc3RHTCBlbGVtZW50cyIpOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVm
KHZpZGVvU2luayk7CiAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHN0b3AgZG93bmxvYWRpbmcg
aWYgd2UgYWxyZWFkeSBzdGFydGVkIGl0LgotICAgIGlmIChmbGFncyAmIGZsYWdEb3dubG9hZCAm
JiBtX3JlYWR5U3RhdGUgPiBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcgJiYgIW1fcmVzZXRQaXBl
bGluZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJEb3dubG9hZCBh
bHJlYWR5IHN0YXJ0ZWQsIG5vdCBzdGFydGluZyBhZ2FpbiIpOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmICh1cGxvYWQpCisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHVwbG9hZCk7
CisgICAgICAgIGlmIChjb2xvcmNvbnZlcnQpCisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVm
KGNvbG9yY29udmVydCk7CisgICAgICAgIGlmIChhcHBzaW5rKQorICAgICAgICAgICAgZ3N0X29i
amVjdF91bnJlZihhcHBzaW5rKTsKKworICAgICAgICBnX3dhcm5pbmcoIldlYktpdCB3YXNuJ3Qg
YWJsZSB0byBmaW5kIHRoZSBHU3RyZWFtZXIgb3BlbmdsIHBsdWdpbi4gSGFyZHdhcmUtYWNjZWxl
cmF0ZWQgemVyby1jb3B5IHZpZGVvIHJlbmRlcmluZyBjYW4ndCBiZSBlbmFibGVkIHdpdGhvdXQg
dGhpcyBwbHVnaW4uIik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGJv
b2wgc2hvdWxkRG93bmxvYWQgPSAhaXNMaXZlU3RyZWFtKCkgJiYgbV9wcmVsb2FkID09IE1lZGlh
UGxheWVyOjpBdXRvOwotICAgIGlmIChzaG91bGREb3dubG9hZCkgewotICAgICAgICBHU1RfSU5G
T19PQkpFQ1QocGlwZWxpbmUoKSwgIkVuYWJsaW5nIG9uLWRpc2sgYnVmZmVyaW5nIik7Ci0gICAg
ICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAiZmxhZ3MiLCBmbGFncyB8IGZsYWdE
b3dubG9hZCwgbnVsbHB0cik7Ci0gICAgICAgIG1fZmlsbFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDIw
MF9tcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCks
ICJEaXNhYmxpbmcgb24tZGlzayBidWZmZXJpbmciKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1f
cGlwZWxpbmUuZ2V0KCksICJmbGFncyIsIGZsYWdzICYgfmZsYWdEb3dubG9hZCwgbnVsbHB0cik7
Ci0gICAgICAgIG1fZmlsbFRpbWVyLnN0b3AoKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9C
SU4odmlkZW9TaW5rKSwgdXBsb2FkLCBjb2xvcmNvbnZlcnQsIGFwcHNpbmssIG51bGxwdHIpOwor
CisgICAgLy8gV29ya2Fyb3VuZCB1bnRpbCB3ZSBjYW4gZGVwZW5kIG9uIEdTdHJlYW1lciAxLjE2
LjIuCisgICAgLy8gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3Qt
cGx1Z2lucy1iYXNlL2NvbW1pdC84ZDMyZGUwOTA1NTRjZjI5ZmUzNTlmODNhYTQ2MDAwYmE2NThh
NjkzCisgICAgLy8gRm9yY2luZyBhIGNvbG9yIGNvbnZlcnNpb24gdG8gUkdCQSBoZXJlIGFsbG93
cyBnbHVwbG9hZCB0byBpbnRlcm5hbGx5IHVzZQorICAgIC8vIGFuIHVwbG9hZGVyIHRoYXQgYWRk
cyBhIFZpZGVvTWV0YSwgdGhyb3VnaCB0aGUgVGV4dHVyZVVwbG9hZE1ldGEgY2FwcworICAgIC8v
IGZlYXR1cmUsIHdpdGhvdXQgbmVlZGluZyB0aGUgcGF0Y2ggYWJvdmUuIEhvd2V2ZXIgdGhpcyBz
cGVjaWZpYyBjYXBzCisgICAgLy8gZmVhdHVyZSBpcyBnb2luZyB0byBiZSByZW1vdmVkIGZyb20g
R1N0cmVhbWVyIHNvIGl0IGlzIGNvbnNpZGVyZWQgYQorICAgIC8vIHNob3J0LXRlcm0gd29ya2Fy
b3VuZC4gVGhpcyBjb2RlIHBhdGggbW9zdCBsaWtlbHkgd2lsbCBoYXZlIGEgbmVnYXRpdmUKKyAg
ICAvLyBwZXJmb3JtYW5jZSBpbXBhY3Qgb24gZW1iZWRkZWQgcGxhdGZvcm1zIGFzIHdlbGwuIERv
d25zdHJlYW0gZW1iZWRkZXJzCisgICAgLy8gYXJlIGhpZ2hseSBlbmNvdXJhZ2VkIHRvIGNoZXJy
eS1waWNrIHRoZSBwYXRjaCBsaW5rZWQgYWJvdmUgaW4gdGhlaXIgQlNQCisgICAgLy8gYW5kIHNl
dCB0aGUgV0VCS0lUX0dTVF9OT19SR0JBX0NPTlZFUlNJT04gZW52aXJvbm1lbnQgdmFyaWFibGUg
dW50aWwKKyAgICAvLyBHU3RyZWFtZXIgMS4xNi4yIGlzIHJlbGVhc2VkLgorICAgIC8vIFNlZSBh
bHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE0MjIKKyAgICBH
UmVmUHRyPEdzdENhcHM+IGNhcHM7CisgICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAx
NiwgMikgfHwgZ2V0ZW52KCJXRUJLSVRfR1NUX05PX1JHQkFfQ09OVkVSU0lPTiIpKQorICAgICAg
ICBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5nKCJ2aWRlby94LXJhdywgZm9y
bWF0ID0gKHN0cmluZykgIiBHU1RfR0xfQ0FQU19GT1JNQVQpKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJGb3JjaW5nIFJHQkEgYXMgR1N0cmVhbWVy
IGlzIG5vdCBuZXcgZW5vdWdoLiIpOworICAgICAgICBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBz
X2Zyb21fc3RyaW5nKCJ2aWRlby94LXJhdywgZm9ybWF0ID0gKHN0cmluZykgUkdCQSIpKTsKICAg
ICB9Ci19CisgICAgZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzKGNhcHMuZ2V0KCksIDAsIGdzdF9jYXBz
X2ZlYXR1cmVzX25ldyhHU1RfQ0FQU19GRUFUVVJFX01FTU9SWV9HTF9NRU1PUlksIG51bGxwdHIp
KTsKKyAgICBnX29iamVjdF9zZXQoYXBwc2luaywgImNhcHMiLCBjYXBzLmdldCgpLCBudWxscHRy
KTsKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZWxvYWQoTWVkaWFQ
bGF5ZXI6OlByZWxvYWQgcHJlbG9hZCkKLXsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJTZXR0aW5nIHByZWxvYWQgdG8gJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhw
cmVsb2FkKS51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAocHJlbG9hZCA9PSBNZWRpYVBsYXllcjo6
QXV0byAmJiBpc0xpdmVTdHJlYW0oKSkKLSAgICAgICAgcmV0dXJuOworICAgIHJlc3VsdCAmPSBn
c3RfZWxlbWVudF9saW5rX21hbnkodXBsb2FkLCBjb2xvcmNvbnZlcnQsIGFwcHNpbmssIG51bGxw
dHIpOwogCi0gICAgbV9wcmVsb2FkID0gcHJlbG9hZDsKLSAgICB1cGRhdGVEb3dubG9hZEJ1ZmZl
cmluZ0ZsYWcoKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKHVwbG9hZCwgInNpbmsiKSk7CisgICAgZ3N0X2VsZW1lbnRfYWRk
X3BhZCh2aWRlb1NpbmssIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgpKSk7CiAK
LSAgICBpZiAobV9kZWxheWluZ0xvYWQgJiYgbV9wcmVsb2FkICE9IE1lZGlhUGxheWVyOjpOb25l
KSB7Ci0gICAgICAgIG1fZGVsYXlpbmdMb2FkID0gZmFsc2U7Ci0gICAgICAgIGNvbW1pdExvYWQo
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGxp
bmsgR3N0R0wgZWxlbWVudHMiKTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZih2aWRlb1Npbmsp
OworICAgICAgICB2aWRlb1NpbmsgPSBudWxscHRyOwogICAgIH0KKyAgICByZXR1cm4gdmlkZW9T
aW5rOwogfQogCi1Hc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZUF1ZGlvU2luaygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR0xW
aWRlb1NpbmtDb250ZXh0KCkKIHsKLSAgICBtX2F1dG9BdWRpb1NpbmsgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoImF1dG9hdWRpb3NpbmsiLCBudWxscHRyKTsKLSAgICBpZiAoIW1fYXV0b0F1
ZGlvU2luaykgewotICAgICAgICBHU1RfV0FSTklORygiR1N0cmVhbWVyJ3MgYXV0b2F1ZGlvc2lu
ayBub3QgZm91bmQuIFBsZWFzZSBjaGVjayB5b3VyIGdzdC1wbHVnaW5zLWdvb2QgaW5zdGFsbGF0
aW9uIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBpZiAoIW1fZ2xEaXNw
bGF5RWxlbWVudENvbnRleHQpCisgICAgICAgIG1fZ2xEaXNwbGF5RWxlbWVudENvbnRleHQgPSBh
ZG9wdEdSZWYocmVxdWVzdEdMQ29udGV4dChHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUpKTsK
IAotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2F1dG9BdWRpb1NpbmsuZ2V0KCksICJj
aGlsZC1hZGRlZCIsIEdfQ0FMTEJBQ0soc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICBpZiAobV9nbERpc3BsYXlFbGVtZW50Q29udGV4dCkKKyAgICAgICAgZ3N0
X2VsZW1lbnRfc2V0X2NvbnRleHQobV92aWRlb1NpbmsuZ2V0KCksIG1fZ2xEaXNwbGF5RWxlbWVu
dENvbnRleHQuZ2V0KCkpOwogCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLSAgICBHc3RFbGVtZW50
KiBhdWRpb1NpbmtCaW4gPSBnc3RfYmluX25ldygiYXVkaW8tc2luayIpOwotICAgIGVuc3VyZUF1
ZGlvU291cmNlUHJvdmlkZXIoKTsKLSAgICBtX2F1ZGlvU291cmNlUHJvdmlkZXItPmNvbmZpZ3Vy
ZUF1ZGlvQmluKGF1ZGlvU2lua0JpbiwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIGF1ZGlvU2lua0Jp
bjsKLSNlbHNlCi0gICAgcmV0dXJuIG1fYXV0b0F1ZGlvU2luay5nZXQoKTsKLSNlbmRpZgorICAg
IGlmICghbV9nbEFwcEVsZW1lbnRDb250ZXh0KQorICAgICAgICBtX2dsQXBwRWxlbWVudENvbnRl
eHQgPSBhZG9wdEdSZWYocmVxdWVzdEdMQ29udGV4dCgiZ3N0LmdsLmFwcF9jb250ZXh0IikpOwor
CisgICAgaWYgKG1fZ2xBcHBFbGVtZW50Q29udGV4dCkKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X2NvbnRleHQobV92aWRlb1NpbmsuZ2V0KCksIG1fZ2xBcHBFbGVtZW50Q29udGV4dC5nZXQoKSk7
CiB9CisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKIAotR3N0RWxlbWVudCogTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb1NpbmsoKSBjb25zdAorI2lmIFVTRShHU1RSRUFNRVJf
SE9MRVBVTkNIKQorc3RhdGljIHZvaWQgc2V0UmVjdGFuZ2xlVG9WaWRlb1NpbmsoR3N0RWxlbWVu
dCogdmlkZW9TaW5rLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEdzdEVsZW1lbnQqIHNp
bms7Ci0gICAgZ19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJhdWRpby1zaW5rIiwgJnNp
bmssIG51bGxwdHIpOwotICAgIHJldHVybiBzaW5rOworICAgIC8vIEhlcmUgZ29lcyB0aGUgcGxh
dGZvcm0tZGVwZW5kYW50IGNvZGUgdG8gc2V0IHRvIHRoZSB2aWRlb1NpbmsgdGhlIHNpemUKKyAg
ICAvLyBhbmQgcG9zaXRpb24gb2YgdGhlIHZpZGVvIHJlbmRlcmluZyB3aW5kb3cuIE1hcmsgdGhl
bSB1bnVzZWQgYXMgZGVmYXVsdC4KKyAgICBVTlVTRURfUEFSQU0odmlkZW9TaW5rKTsKKyAgICBV
TlVTRURfUEFSQU0ocmVjdCk7CiB9CiAKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmVuc3VyZUF1ZGlvU291cmNlUHJvdmlkZXIoKQorY2xh
c3MgR1N0cmVhbWVySG9sZVB1bmNoQ2xpZW50IDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyQnVmZmVyOjpIb2xlUHVuY2hDbGllbnQgeworcHVibGljOgorICAgIEdTdHJlYW1lckhv
bGVQdW5jaENsaWVudChHUmVmUHRyPEdzdEVsZW1lbnQ+JiYgdmlkZW9TaW5rKSA6IG1fdmlkZW9T
aW5rKFdURk1vdmUodmlkZW9TaW5rKSkgeyB9OworICAgIHZvaWQgc2V0VmlkZW9SZWN0YW5nbGUo
Y29uc3QgSW50UmVjdCYgcmVjdCkgZmluYWwgeyBzZXRSZWN0YW5nbGVUb1ZpZGVvU2luayhtX3Zp
ZGVvU2luay5nZXQoKSwgcmVjdCk7IH0KK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBtX3ZpZGVvU2luazsKK307CisKK0dzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6Y3JlYXRlSG9sZVB1bmNoVmlkZW9TaW5rKCkKIHsKLSAgICBpZiAoIW1fYXVkaW9Tb3Vy
Y2VQcm92aWRlcikKLSAgICAgICAgbV9hdWRpb1NvdXJjZVByb3ZpZGVyID0gbWFrZVVuaXF1ZTxB
dWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyPigpOworICAgIC8vIEhlcmUgZ29lcyB0aGUgcGxh
dGZvcm0tZGVwZW5kYW50IGNvZGUgdG8gY3JlYXRlIHRoZSB2aWRlb1NpbmsuIEFzIGEgZGVmYXVs
dAorICAgIC8vIHdlIHVzZSBhIGZha2VWaWRlb1Npbmsgc28gbm90aGluZyBpcyBkcmF3biB0byB0
aGUgcGFnZS4KKyAgICBHc3RFbGVtZW50KiB2aWRlb1NpbmsgPSAgZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJmYWtldmlkZW9zaW5rIiwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gdmlkZW9TaW5r
OwogfQogCi1BdWRpb1NvdXJjZVByb3ZpZGVyKiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmF1ZGlvU291cmNlUHJvdmlkZXIoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnB1c2hOZXh0SG9sZVB1bmNoQnVmZmVyKCkKIHsKLSAgICBlbnN1cmVBdWRpb1NvdXJjZVByb3Zp
ZGVyKCk7Ci0gICAgcmV0dXJuIG1fYXVkaW9Tb3VyY2VQcm92aWRlci5nZXQoKTsKKyAgICBhdXRv
IHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkmIHByb3h5KQorICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRl
cihwcm94eS5sb2NrKCkpOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KDAsIG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91
bGROb3RCbGVuZCwgR0xfRE9OVF9DQVJFKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxH
U3RyZWFtZXJIb2xlUHVuY2hDbGllbnQ+IGhvbGVQdW5jaENsaWVudCA9IG1ha2VVbmlxdWU8R1N0
cmVhbWVySG9sZVB1bmNoQ2xpZW50PihtX3ZpZGVvU2luay5nZXQoKSk7CisgICAgICAgICAgICBs
YXllckJ1ZmZlci0+c2V0SG9sZVB1bmNoQ2xpZW50KFdURk1vdmUoaG9sZVB1bmNoQ2xpZW50KSk7
CisgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVyQnVmZmVyKSk7
CisgICAgICAgIH07CisKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBwcm94eU9wZXJhdGlvbihkb3du
Y2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5
ZXItPmltcGwoKSkucHJveHkoKSk7CisjZWxzZQorICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRm
b3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKIH0KICNlbmRpZgogCi12b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbihjb25zdCBVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBwaXBlbGluZU5hbWUpCitHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZVZpZGVvU2luaygpCiB7Ci0gICAgY29uc3QgZ2NoYXIqIHBsYXliaW5OYW1lID0g
InBsYXliaW4iOworICAgIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7CiAKLSAg
ICAvLyBNU0UgZG9lc24ndCBzdXBwb3J0IHBsYXliaW4zLiBNZWRpYXN0cmVhbSByZXF1aXJlcyBw
bGF5YmluMy4gUmVndWxhcgotICAgIC8vIHBsYXliYWNrIGNhbiB1c2UgcGxheWJpbjMgb24tZGVt
YW5kIHdpdGggdGhlIFdFQktJVF9HU1RfVVNFX1BMQVlCSU4zCi0gICAgLy8gZW52aXJvbm1lbnQg
dmFyaWFibGUuCi0gICAgaWYgKCghaXNNZWRpYVNvdXJjZSgpICYmIGdfZ2V0ZW52KCJXRUJLSVRf
R1NUX1VTRV9QTEFZQklOMyIpKSB8fCB1cmwucHJvdG9jb2xJcygibWVkaWFzdHJlYW0iKSkKLSAg
ICAgICAgcGxheWJpbk5hbWUgPSAicGxheWJpbjMiOworI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBV
TkNIKQorICAgIG1fdmlkZW9TaW5rID0gY3JlYXRlSG9sZVB1bmNoVmlkZW9TaW5rKCk7CisgICAg
cHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsKKyAgICByZXR1cm4gbV92aWRlb1NpbmsuZ2V0KCk7
CisjZW5kaWYKIAotICAgIGlmIChtX3BpcGVsaW5lKSB7Ci0gICAgICAgIGlmICghZ19zdHJjbXAw
KEdTVF9PQkpFQ1RfTkFNRShnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShtX3BpcGVsaW5lLmdldCgp
KSksIHBsYXliaW5OYW1lKSkgewotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5l
KCksICJBbHJlYWR5IHVzaW5nICVzIiwgcGxheWJpbk5hbWUpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBpZiAobV9yZW5kZXJpbmdD
YW5CZUFjY2VsZXJhdGVkKQorICAgICAgICBtX3ZpZGVvU2luayA9IGNyZWF0ZVZpZGVvU2lua0dM
KCk7CisjZW5kaWYKIAotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlRlYXJp
bmcgZG93biBhcyB3ZSBuZWVkIHRvIHVzZSAlcyBub3cuIiwgcGxheWJpbk5hbWUpOwotICAgICAg
ICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9OVUxMKTsKLSAgICAgICAgbV9waXBlbGlu
ZSA9IG51bGxwdHI7CisgICAgaWYgKCFtX3ZpZGVvU2luaykgeworICAgICAgICBtX3VzaW5nRmFs
bGJhY2tWaWRlb1NpbmsgPSB0cnVlOworICAgICAgICBtX3ZpZGVvU2luayA9IHdlYmtpdFZpZGVv
U2lua05ldygpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92aWRlb1Npbmsu
Z2V0KCksICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0socmVwYWludENhbGxiYWNrKSwg
dGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3ZpZGVvU2luay5nZXQo
KSwgInJlcGFpbnQtY2FuY2VsbGVkIiwgR19DQUxMQkFDSyhyZXBhaW50Q2FuY2VsbGVkQ2FsbGJh
Y2spLCB0aGlzKTsKICAgICB9CiAKLSAgICBBU1NFUlQoIW1fcGlwZWxpbmUpOworICAgIEdzdEVs
ZW1lbnQqIHZpZGVvU2luayA9IG51bGxwdHI7CisjaWYgRU5BQkxFKE1FRElBX1NUQVRJU1RJQ1Mp
CisgICAgbV9mcHNTaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJmcHNkaXNwbGF5c2lu
ayIsICJzaW5rIik7CisgICAgaWYgKG1fZnBzU2luaykgeworICAgICAgICBnX29iamVjdF9zZXQo
bV9mcHNTaW5rLmdldCgpLCAic2lsZW50IiwgVFJVRSAsIG51bGxwdHIpOwogCi0gICAgbV9pc0xl
Z2FjeVBsYXliaW4gPSAhZ19zdHJjbXAwKHBsYXliaW5OYW1lLCAicGxheWJpbiIpOworICAgICAg
ICAvLyBUdXJuIG9mZiB0ZXh0IG92ZXJsYXkgdW5sZXNzIHRyYWNpbmcgaXMgZW5hYmxlZC4KKyAg
ICAgICAgaWYgKGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkKHdlYmtpdF9tZWRpYV9w
bGF5ZXJfZGVidWcpIDwgR1NUX0xFVkVMX1RSQUNFKQorICAgICAgICAgICAgZ19vYmplY3Rfc2V0
KG1fZnBzU2luay5nZXQoKSwgInRleHQtb3ZlcmxheSIsIEZBTFNFICwgbnVsbHB0cik7CiAKLSAg
ICAvLyBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoKSByZXR1cm5zIGEgZmxvYXRpbmcgcmVmZXJl
bmNlIHNvCi0gICAgLy8gd2Ugc2hvdWxkIG5vdCBhZG9wdC4KLSAgICBzdGF0aWMgQXRvbWljPHVp
bnQzMl90PiBwaXBlbGluZUlkOwotICAgIHNldFBpcGVsaW5lKGdzdF9lbGVtZW50X2ZhY3Rvcnlf
bWFrZShwbGF5YmluTmFtZSwKLSAgICAgICAgKHBpcGVsaW5lTmFtZS5pc0VtcHR5KCkgPyBtYWtl
U3RyaW5nKCJtZWRpYS1wbGF5ZXItIiwgcGlwZWxpbmVJZC5leGNoYW5nZUFkZCgxKSkgOiBwaXBl
bGluZU5hbWUpLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KEdT
VF9TVFJFQU1fVk9MVU1FKG1fcGlwZWxpbmUuZ2V0KCkpKTsKKyAgICAgICAgaWYgKGdfb2JqZWN0
X2NsYXNzX2ZpbmRfcHJvcGVydHkoR19PQkpFQ1RfR0VUX0NMQVNTKG1fZnBzU2luay5nZXQoKSks
ICJ2aWRlby1zaW5rIikpIHsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmsuZ2V0
KCksICJ2aWRlby1zaW5rIiwgbV92aWRlb1NpbmsuZ2V0KCksIG51bGxwdHIpOworICAgICAgICAg
ICAgdmlkZW9TaW5rID0gbV9mcHNTaW5rLmdldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG1fZnBzU2luayA9IG51bGxwdHI7CisgICAgfQorI2VuZGlmCiAKLSAgICBHU1RfSU5GT19P
QkpFQ1QocGlwZWxpbmUoKSwgIlVzaW5nIGxlZ2FjeSBwbGF5YmluIGVsZW1lbnQ6ICVzIiwgYm9v
bEZvclByaW50aW5nKG1faXNMZWdhY3lQbGF5YmluKSk7CisgICAgaWYgKCFtX2Zwc1NpbmspCisg
ICAgICAgIHZpZGVvU2luayA9IG1fdmlkZW9TaW5rLmdldCgpOwogCi0gICAgLy8gTGV0IGFsc28g
b3RoZXIgbGlzdGVuZXJzIHN1YnNjcmliZSB0byAoYXBwbGljYXRpb24pIG1lc3NhZ2VzIGluIHRo
aXMgYnVzLgotICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5l
X2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7Ci0gICAgZ3N0X2J1c19h
ZGRfc2lnbmFsX3dhdGNoX2Z1bGwoYnVzLmdldCgpLCBSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJ1
bkxvb3BEaXNwYXRjaGVyKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cy5nZXQoKSwgIm1lc3Nh
Z2UiLCBHX0NBTExCQUNLKGJ1c01lc3NhZ2VDYWxsYmFjayksIHRoaXMpOworICAgIEFTU0VSVCh2
aWRlb1NpbmspOwogCi0gICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJtdXRlIiwg
bV9wbGF5ZXItPm11dGVkKCksIG51bGxwdHIpOworICAgIHJldHVybiB2aWRlb1Npbms7Cit9CiAK
LSAgICBnX3NpZ25hbF9jb25uZWN0KEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgImRl
ZXAtZWxlbWVudC1hZGRlZCIsIEdfQ0FMTEJBQ0soK1tdKEdzdEJpbiosIEdzdEJpbiogc3ViQmlu
LCBHc3RFbGVtZW50KiBlbGVtZW50LCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXll
cikgewotICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGJpbk5hbWUoZ3N0X2VsZW1lbnRfZ2V0X25h
bWUoR1NUX0VMRU1FTlRfQ0FTVChzdWJCaW4pKSk7Ci0gICAgICAgIGlmICghZ19zdHJfaGFzX3By
ZWZpeChiaW5OYW1lLmdldCgpLCAiZGVjb2RlYmluIikpCi0gICAgICAgICAgICByZXR1cm47Cit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0U3RyZWFtVm9sdW1lRWxlbWVudChH
c3RTdHJlYW1Wb2x1bWUqIHZvbHVtZSkKK3sKKyAgICBBU1NFUlQoIW1fdm9sdW1lRWxlbWVudCk7
CisgICAgbV92b2x1bWVFbGVtZW50ID0gdm9sdW1lOwogCi0gICAgICAgIEdVbmlxdWVQdHI8Y2hh
cj4gZWxlbWVudE5hbWUoZ3N0X2VsZW1lbnRfZ2V0X25hbWUoZWxlbWVudCkpOwotICAgICAgICBp
ZiAoZ19zdHJfaGFzX3ByZWZpeChlbGVtZW50TmFtZS5nZXQoKSwgInY0bDIiKSkKLSAgICAgICAg
ICAgIHBsYXllci0+bV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9IEdzdFZpZGVvRGVjb2RlclBsYXRm
b3JtOjpWaWRlbzRMaW51eDsKLSAgICAgICAgZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeChlbGVt
ZW50TmFtZS5nZXQoKSwgImlteHZwdWRlYyIpKQotICAgICAgICAgICAgcGxheWVyLT5tX3ZpZGVv
RGVjb2RlclBsYXRmb3JtID0gR3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OklteFZQVTsKKyAgICAv
LyBXZSBkb24ndCBzZXQgdGhlIGluaXRpYWwgdm9sdW1lIGJlY2F1c2Ugd2UgdHJ1c3QgdGhlIHNp
bmsgdG8ga2VlcCBpdCBmb3IgdXMuIFNlZQorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTg5NzQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgaWYgKCFt
X3BsYXllci0+cGxhdGZvcm1Wb2x1bWVDb25maWd1cmF0aW9uUmVxdWlyZWQoKSkgeworICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5nIHN0cmVhbSB2b2x1bWUgdG8g
JWYiLCBtX3BsYXllci0+dm9sdW1lKCkpOworICAgICAgICBnc3Rfc3RyZWFtX3ZvbHVtZV9zZXRf
dm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJ
TkVBUiwgc3RhdGljX2Nhc3Q8ZG91YmxlPihtX3BsYXllci0+dm9sdW1lKCkpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTm90IHNldHRpbmcgc3Ry
ZWFtIHZvbHVtZSwgdHJ1c3Rpbmcgc3lzdGVtIG9uZSIpOwogCi0jaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQotICAgICAgICBwbGF5ZXItPnVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpOwotI2Vu
ZGlmCi0gICAgfSksIHRoaXMpOworICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNl
dHRpbmcgc3RyZWFtIG11dGVkICVzIiwgdG9TdHJpbmcobV9wbGF5ZXItPm11dGVkKCkpLnV0Zjgo
KS5kYXRhKCkpOworICAgIGdfb2JqZWN0X3NldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRl
IiwgbV9wbGF5ZXItPm11dGVkKCksIG51bGxwdHIpOwogCi0gICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJzb3VyY2Utc2V0dXAiLCBHX0NBTExCQUNLKHNvdXJj
ZVNldHVwQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBpZiAobV9pc0xlZ2FjeVBsYXliaW4pIHsKLSAg
ICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJ2aWRlby1j
aGFuZ2VkIiwgR19DQUxMQkFDSyh2aWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWNoYW5n
ZWQiLCBHX0NBTExCQUNLKGF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQorICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJub3RpZnk6
OnZvbHVtZSIsIEdfQ0FMTEJBQ0sodm9sdW1lQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAg
Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm5vdGlmeTo6
bXV0ZSIsIEdfQ0FMTEJBQ0sobXV0ZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOworfQogCi0jaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQotICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKLSAgICAgICAg
Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJ0ZXh0LWNoYW5nZWQi
LCBHX0NBTExCQUNLKHRleHRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKK3Vuc2lnbmVkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGVjb2RlZEZyYW1lQ291bnQoKSBjb25zdAoreworICAg
IGd1aW50NjQgZGVjb2RlZEZyYW1lcyA9IDA7CisgICAgaWYgKG1fZnBzU2luaykKKyAgICAgICAg
Z19vYmplY3RfZ2V0KG1fZnBzU2luay5nZXQoKSwgImZyYW1lcy1yZW5kZXJlZCIsICZkZWNvZGVk
RnJhbWVzLCBudWxscHRyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlY29k
ZWRGcmFtZXMpOworfQogCi0gICAgR3N0RWxlbWVudCogdGV4dENvbWJpbmVyID0gd2Via2l0VGV4
dENvbWJpbmVyTmV3KCk7Ci0gICAgQVNTRVJUKHRleHRDb21iaW5lcik7Ci0gICAgZ19vYmplY3Rf
c2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ0ZXh0LXN0cmVhbS1jb21iaW5lciIsIHRleHRDb21iaW5l
ciwgbnVsbHB0cik7Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRyb3Bw
ZWRGcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICBndWludDY0IGZyYW1lc0Ryb3BwZWQgPSAwOwor
ICAgIGlmIChtX2Zwc1NpbmspCisgICAgICAgIGdfb2JqZWN0X2dldChtX2Zwc1NpbmsuZ2V0KCks
ICJmcmFtZXMtZHJvcHBlZCIsICZmcmFtZXNEcm9wcGVkLCBudWxscHRyKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyYW1lc0Ryb3BwZWQpOworfQogCi0gICAgbV90ZXh0QXBw
U2luayA9IHdlYmtpdFRleHRTaW5rTmV3KCk7Ci0gICAgQVNTRVJUKG1fdGV4dEFwcFNpbmspOwor
dW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0RlY29kZWRCeXRlQ291
bnQoKSBjb25zdAoreworICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRp
b24oR1NUX0ZPUk1BVF9CWVRFUyk7CisgICAgZ2ludDY0IHBvc2l0aW9uID0gMDsKIAotICAgIG1f
dGV4dEFwcFNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV90
ZXh0QXBwU2luay5nZXQoKSwgInNpbmsiKSk7Ci0gICAgQVNTRVJUKG1fdGV4dEFwcFNpbmtQYWQp
OworICAgIGlmIChhdWRpb1NpbmsoKSAmJiBnc3RfZWxlbWVudF9xdWVyeShhdWRpb1NpbmsoKSwg
cXVlcnkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3Np
dGlvbik7CiAKLSAgICBHUmVmUHRyPEdzdENhcHM+IHRleHRDYXBzOwotICAgIGlmICh3ZWJraXRH
c3RDaGVja1ZlcnNpb24oMSwgMTQsIDApKQotICAgICAgICB0ZXh0Q2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJhcHBsaWNhdGlvbi94LXN1YnRpdGxlLXZ0dCIpKTsK
LSAgICBlbHNlCi0gICAgICAgIHRleHRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0
eV9zaW1wbGUoInRleHQvdnR0IikpOwotICAgIGdfb2JqZWN0X3NldChtX3RleHRBcHBTaW5rLmdl
dCgpLCAiZW1pdC1zaWduYWxzIiwgVFJVRSwgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAi
Y2FwcyIsIHRleHRDYXBzLmdldCgpLCBudWxscHRyKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV90ZXh0QXBwU2luay5nZXQoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG5ld1Rl
eHRTYW1wbGVDYWxsYmFjayksIHRoaXMpOworICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbik7Cit9CiAKLSAgICBnX29i
amVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInRleHQtc2luayIsIG1fdGV4dEFwcFNpbmsuZ2V0
KCksIG51bGxwdHIpOwotI2VuZGlmCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnZpZGVvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0Cit7CisgICAgR3N0UXVlcnkqIHF1ZXJ5
ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX0JZVEVTKTsKKyAgICBnaW50NjQg
cG9zaXRpb24gPSAwOwogCi0gICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ2aWRl
by1zaW5rIiwgY3JlYXRlVmlkZW9TaW5rKCksICJhdWRpby1zaW5rIiwgY3JlYXRlQXVkaW9TaW5r
KCksIG51bGxwdHIpOworICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3ZpZGVvU2luay5nZXQo
KSwgcXVlcnkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZw
b3NpdGlvbik7CiAKLSAgICBjb25maWd1cmVQbGF5U2luaygpOworICAgIGdzdF9xdWVyeV91bnJl
ZihxdWVyeSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbik7Cit9
CiAKLSAgICBpZiAobV9wcmVzZXJ2ZXNQaXRjaCkgewotICAgICAgICBHc3RFbGVtZW50KiBzY2Fs
ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgic2NhbGV0ZW1wbyIsIG51bGxwdHIpOworI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJiBpbml0RGF0YSkKK3sK
KyAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgICAgICBpZiAoIXNjYWxlKQotICAg
ICAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBjcmVhdGUgc2NhbGV0ZW1wbyIpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImF1
ZGlvLWZpbHRlciIsIHNjYWxlLCBudWxscHRyKTsKLSAgICB9CisgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgaW5pdERhdGEgPSBXVEZN
b3ZlKGluaXREYXRhKV0geworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQpIHsKLSAgICAgICAg
Ly8gSWYgbm90IHVzaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLCBsZXQgR1N0cmVhbWVyIGhh
bmRsZQotICAgICAgICAvLyB0aGUgaW1hZ2Utb3JpZW50YXRpb24gdGFnLgotICAgICAgICBHc3RF
bGVtZW50KiB2aWRlb0ZsaXAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInZpZGVvZmxpcCIs
IG51bGxwdHIpOwotICAgICAgICBpZiAodmlkZW9GbGlwKSB7Ci0gICAgICAgICAgICBnX29iamVj
dF9zZXQodmlkZW9GbGlwLCAibWV0aG9kIiwgOCwgbnVsbHB0cik7Ci0gICAgICAgICAgICBnX29i
amVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInZpZGVvLWZpbHRlciIsIHZpZGVvRmxpcCwgbnVs
bHB0cik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlRoZSB2aWRl
b2ZsaXAgZWxlbWVudCBpcyBtaXNzaW5nLCB2aWRlbyByb3RhdGlvbiBzdXBwb3J0IGlzIG5vdyBk
aXNhYmxlZC4gUGxlYXNlIGNoZWNrIHlvdXIgZ3N0LXBsdWdpbnMtZ29vZCBpbnN0YWxsYXRpb24u
Iik7CisgICAgICAgIEdTVF9ERUJVRygic2NoZWR1bGluZyBpbml0aWFsaXphdGlvbkRhdGFFbmNv
dW50ZXJlZCBldmVudCBvZiBzaXplICV6dSIsIGluaXREYXRhLnBheWxvYWQoKS0+c2l6ZSgpKTsK
KyAgICAgICAgR1NUX01FTURVTVAoImluaXQgZGF0YXMiLCByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihpbml0RGF0YS5wYXlsb2FkKCktPmRhdGEoKSksIGluaXREYXRhLnBheWxvYWQo
KS0+c2l6ZSgpKTsKKyAgICAgICAgd2Vha1RoaXMtPm1fcGxheWVyLT5pbml0aWFsaXphdGlvbkRh
dGFFbmNvdW50ZXJlZChpbml0RGF0YS5wYXlsb2FkQ29udGFpbmVyVHlwZSgpLCBpbml0RGF0YS5w
YXlsb2FkKCktPnRyeUNyZWF0ZUFycmF5QnVmZmVyKCkpOworICAgIH0pOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5j
ZSYgaW5zdGFuY2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICht
X2NkbUluc3RhbmNlID09ICZpbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X3BpcGVsaW5lKSB7CisgICAgICAgIEdTVF9FUlJPUigibm8gcGlwZWxpbmUgeWV0Iik7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
R1JlZlB0cjxHc3RQYWQ+IHZpZGVvU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChtX3ZpZGVvU2luay5nZXQoKSwgInNpbmsiKSk7Ci0gICAgaWYgKHZpZGVvU2lu
a1BhZCkKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKHZpZGVvU2lua1BhZC5nZXQo
KSwgIm5vdGlmeTo6Y2FwcyIsIEdfQ0FMTEJBQ0sodmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFj
ayksIHRoaXMpOworICAgIG1fY2RtSW5zdGFuY2UgPSAmaW5zdGFuY2U7CisKKyAgICBHUmVmUHRy
PEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2Rt
LWluc3RhbmNlIiwgRkFMU0UpKTsKKyAgICBHc3RTdHJ1Y3R1cmUqIGNvbnRleHRTdHJ1Y3R1cmUg
PSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoY29udGV4dC5nZXQoKSk7CisgICAgZ3N0
X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNkbS1pbnN0YW5jZSIsIEdfVFlQRV9Q
T0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdldCgpLCBudWxscHRyKTsKKyAgICBn
c3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwgY29u
dGV4dC5nZXQoKSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJD
RE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250ZXh0IiwgbV9jZG1JbnN0YW5j
ZS0+cHJveHlDRE0oKS5nZXQoKSk7CisKKyAgICBtX2NkbUF0dGFjaG1lbnRTZW1hcGhvcmUuc2ln
bmFsKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzaW11bGF0ZUF1
ZGlvSW50ZXJydXB0aW9uKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjZG1J
bnN0YW5jZURldGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5jZSkKIHsKLSAgICBHc3RNZXNzYWdl
KiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGUoR1NUX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpKSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9t
ZXNzYWdlKG1fcGlwZWxpbmUuZ2V0KCksIG1lc3NhZ2UpOworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisKKyAgICBpZiAobV9jZG1JbnN0YW5jZSAhPSAmaW5zdGFuY2UpIHsKKyAgICAgICAg
R1NUX1dBUk5JTkcoInBhc3NlZCBDRE1JbnN0YW5jZSAlcCBpcyBkaWZmZXJlbnQgZnJvbSBzdG9y
ZWQgb25lICVwIiwgJmluc3RhbmNlLCBtX2NkbUluc3RhbmNlLmdldCgpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQo
bV9waXBlbGluZSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJk
ZXRhY2hpbmcgQ0RNIGluc3RhbmNlICVwLCBzZXR0aW5nIGVtcHR5IGNvbnRleHQiLCBtX2NkbUlu
c3RhbmNlLmdldCgpKTsKKyAgICBtX2NkbUluc3RhbmNlID0gbnVsbHB0cjsKKworICAgIEdSZWZQ
dHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1j
ZG0taW5zdGFuY2UiLCBGQUxTRSkpOworICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9F
TEVNRU5UKG1fcGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgpKTsKIH0KIAotYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZFBhc3NDT1JTQWNjZXNzQ2hlY2soKSBjb25zdAor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF0dGVtcHRUb0RlY3J5cHRXaXRoSW5z
dGFuY2UoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQogewotICAgIGlmIChXRUJLSVRfSVNfV0VCX1NS
QyhtX3NvdXJjZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiB3ZWJLaXRTcmNQYXNzZWRDT1JTQWNj
ZXNzQ2hlY2soV0VCS0lUX1dFQl9TUkNfQ0FTVChtX3NvdXJjZS5nZXQoKSkpOwotICAgIHJldHVy
biBmYWxzZTsKKyAgICBBU1NFUlQobV9jZG1JbnN0YW5jZS5nZXQoKSA9PSAmaW5zdGFuY2UpOwor
ICAgIEdTVF9UUkFDRSgiaW5zdGFuY2UgJXAsIGN1cnJlbnQgc3RvcmVkICVwIiwgJmluc3RhbmNl
LCBtX2NkbUluc3RhbmNlLmdldCgpKTsKKyAgICBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5z
dGFuY2UoKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNhblNhdmVN
ZWRpYURhdGEoKSBjb25zdAordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF0dGVt
cHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpCiB7Ci0gICAgaWYgKGlzTGl2ZVN0cmVhbSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBldmVudEhhbmRsZWQgPSBnc3RfZWxl
bWVudF9zZW5kX2V2ZW50KHBpcGVsaW5lKCksIGdzdF9ldmVudF9uZXdfY3VzdG9tKEdTVF9FVkVO
VF9DVVNUT01fRE9XTlNUUkVBTV9PT0IsIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhdHRlbXB0
LXRvLWRlY3J5cHQiKSkpOworICAgIEdTVF9ERUJVRygiYXR0ZW1wdGluZyB0byBkZWNyeXB0LCBl
dmVudCBoYW5kbGVkICVzIiwgYm9vbEZvclByaW50aW5nKGV2ZW50SGFuZGxlZCkpOworfQogCi0g
ICAgaWYgKG1fdXJsLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVByb3RlY3Rpb25FdmVudChHc3RFdmVu
dCogZXZlbnQpCit7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90ZWN0aW9u
TXV0ZXgpOworICAgICAgICBpZiAobV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy5jb250YWlucyhH
U1RfRVZFTlRfU0VRTlVNKGV2ZW50KSkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgImV2ZW50ICV1IGFscmVhZHkgaGFuZGxlZCIsIEdTVF9FVkVOVF9TRVFOVU0o
ZXZlbnQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJoYW5kbGluZyBldmVudCAldSBmcm9tIE1TRSIsIEdT
VF9FVkVOVF9TRVFOVU0oZXZlbnQpKTsKKyAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbVVV
SUQgPSBudWxscHRyOworICAgIEdzdEJ1ZmZlciogaW5pdERhdGEgPSBudWxscHRyOworICAgIGdz
dF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LCAmZXZlbnRLZXlTeXN0ZW1VVUlELCAmaW5p
dERhdGEsIG51bGxwdHIpOworICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKHtldmVu
dEtleVN5c3RlbVVVSUQsIGluaXREYXRhfSk7Cit9CiAKLSAgICBpZiAobV91cmwucHJvdG9jb2xJ
c0luSFRUUEZhbWlseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5KGJvb2wgd2FpdGluZ0ZvcktleSkKK3sK
KyAgICAvLyBXZSBiYWlsIG91dCBpZiB2YWx1ZXMgZGlkIG5vdCBjaGFuZ2Ugb3IgaWYgd2UgYXJl
IHJlcXVlc3RlZCB0byBub3Qgd2FpdCBhbnltb3JlIGJ1dCB0aGVyZSBhcmUgc3RpbGwgd2FpdGlu
ZyBkZWNyeXB0b3JzLgorICAgIEdTVF9UUkFDRSgid2FpdGluZ0ZvcktleSAlcywgbV93YWl0aW5n
Rm9yS2V5ICVzIiwgYm9vbEZvclByaW50aW5nKHdhaXRpbmdGb3JLZXkpLCBib29sRm9yUHJpbnRp
bmcobV93YWl0aW5nRm9yS2V5KSk7CisgICAgaWYgKHdhaXRpbmdGb3JLZXkgPT0gbV93YWl0aW5n
Rm9yS2V5IHx8ICghd2FpdGluZ0ZvcktleSAmJiB0aGlzLT53YWl0aW5nRm9yS2V5KCkpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgbV93YWl0aW5nRm9yS2V5ID0g
d2FpdGluZ0ZvcktleTsKKyAgICBHU1RfREVCVUcoIndhaXRpbmcgZm9yIGtleSBjaGFuZ2VkICVz
IiwgYm9vbEZvclByaW50aW5nKG1fd2FpdGluZ0ZvcktleSkpOworICAgIG1fcGxheWVyLT53YWl0
aW5nRm9yS2V5Q2hhbmdlZCgpOwogfQogCi1PcHRpb25hbDxib29sPiBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWdp
bikgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5
KCkgY29uc3QKIHsKLSAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDEyLCAwKSkgewot
ICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJDaGVja2luZyAldSBvcmlnaW5z
IiwgbV9vcmlnaW5zLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgcmVzcG9uc2VPcmlnaW4g
OiBtX29yaWdpbnMpIHsKLSAgICAgICAgICAgIGlmICghb3JpZ2luLmNhbkFjY2VzcygqcmVzcG9u
c2VPcmlnaW4pKSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiRm91bmQgcmVhY2hhYmxlIHJlc3BvbnNlIG9yaWdpbiIpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIk5vIHZhbGlkIHJlc3BvbnNlIG9yaWdpbiBmb3VuZCIpOworICAg
IGlmICghbV9waXBlbGluZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIC8v
IEdTdHJlYW1lciA8IDEuMTIgaGFzIGFuIGluY29tcGxldGUgdXJpZG93bmxvYWRlciBpbXBsZW1l
bnRhdGlvbiBzbyB3ZQotICAgIC8vIGNhbid0IHVzZSBXZWJLaXRXZWJTcmMgZm9yIGFkYXB0aXZl
IGZyYWdtZW50cyBkb3dubG9hZGluZyBpZiB0aGlzCi0gICAgLy8gdmVyc2lvbiBpcyBkZXRlY3Rl
ZC4KLSAgICBVTlVTRURfUEFSQU0ob3JpZ2luKTsKLSAgICByZXR1cm4gbV9oYXNUYWludGVkT3Jp
Z2luOworICAgIEdzdFN0YXRlIHN0YXRlOworICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3Bp
cGVsaW5lLmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOworCisgICAgYm9vbCByZXN1bHQgPSBm
YWxzZTsKKyAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihnc3RfcXVlcnlf
bmV3X2N1c3RvbShHU1RfUVVFUllfQ1VTVE9NLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYW55
LWRlY3J5cHRvci13YWl0aW5nLWZvci1rZXkiKSkpOworICAgIGlmIChzdGF0ZSA+PSBHU1RfU1RB
VEVfUEFVU0VEKSB7CisgICAgICAgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGlwZWxp
bmUuZ2V0KCksIHF1ZXJ5LmdldCgpKTsKKyAgICAgICAgR1NUX1RSQUNFKCJxdWVyeSByZXN1bHQg
JXMsIG9uICVzIiwgYm9vbEZvclByaW50aW5nKHJlc3VsdCksIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKHN0YXRlKSk7CisgICAgfSBlbHNlIGlmIChzdGF0ZSA+PSBHU1RfU1RBVEVfUkVBRFkp
IHsKKyAgICAgICAgLy8gUnVubmluZyBhIHF1ZXJ5IGluIHRoZSBwaXBlbGluZSBpcyBlYXNpZXIg
YnV0IGl0IG9ubHkgd29ya3Mgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0IHVwIGFuZCBydW5uaW5n
LCBvdGhlcndpc2Ugd2UgbmVlZCB0byBpbnNwZWN0IGl0IGFuZCBhc2sgdGhlIGRlY3J5cHRvcnMg
ZGlyZWN0bHkuCisgICAgICAgIEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+IGl0ZXJhdG9yKGdzdF9i
aW5faXRlcmF0ZV9yZWN1cnNlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpKTsKKyAgICAgICAg
R3N0SXRlcmF0b3JSZXN1bHQgaXRlcmF0b3JSZXN1bHQ7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIGl0ZXJhdG9yUmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZvbGQoaXRlcmF0b3IuZ2V0KCksIFtd
KGNvbnN0IEdWYWx1ZSAqaXRlbSwgR1ZhbHVlICosIGdwb2ludGVyIGRhdGEpIC0+IGdib29sZWFu
IHsKKyAgICAgICAgICAgICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gR1NUX0VMRU1FTlQoZ192
YWx1ZV9nZXRfb2JqZWN0KGl0ZW0pKTsKKyAgICAgICAgICAgICAgICBHc3RRdWVyeSogcXVlcnkg
PSBHU1RfUVVFUlkoZGF0YSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICFXRUJLSVRfSVNfTUVE
SUFfQ0VOQ19ERUNSWVBUKGVsZW1lbnQpIHx8ICFnc3RfZWxlbWVudF9xdWVyeShlbGVtZW50LCBx
dWVyeSk7CisgICAgICAgICAgICB9LCBudWxscHRyLCBxdWVyeS5nZXQoKSk7CisgICAgICAgICAg
ICBpZiAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKKyAgICAgICAgICAg
ICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXJhdG9yLmdldCgpKTsKKyAgICAgICAgfSB3aGls
ZSAoaXRlcmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7CisgICAgICAgIGlmIChp
dGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfRVJST1IpCisgICAgICAgICAgICBHU1RfV0FS
TklORygiaXRlcmF0b3IgcmV0dXJuZWQgYW4gZXJyb3IiKTsKKyAgICAgICAgcmVzdWx0ID0gaXRl
cmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX09LOworICAgICAgICBHU1RfVFJBQ0UoIml0ZXJh
dG9yIHJlc3VsdCAlZCwgd2FpdGluZyAlcyIsIGl0ZXJhdG9yUmVzdWx0LCBib29sRm9yUHJpbnRp
bmcocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCiti
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNLZXlTeXN0ZW0oY29uc3Qg
U3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisgICAgcmVzdWx0
ID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjppc0NsZWFyS2V5S2V5U3lzdGVtKGtleVN5c3RlbSk7
CisjZW5kaWYKKworICAgIEdTVF9ERUJVRygiY2hlY2tpbmcgZm9yIEtleVN5c3RlbSBzdXBwb3J0
IHdpdGggJXMgYW5kIHR5cGUgJXM6ICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIG1pbWVU
eXBlLnV0ZjgoKS5kYXRhKCksIGJvb2xGb3JQcmludGluZyhyZXN1bHQpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6ZXh0ZW5kZWRTdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0
UGFyYW1ldGVycyYgcGFyYW1ldGVycywgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSByZXN1bHQp
Cit7CisgICAgVU5VU0VEX1BBUkFNKHBhcmFtZXRlcnMpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRl
eCA1MTEzMjVlNDlmZTMzNzk5ZGQwZjU1MGFhNTZkOGU5OGQwNjc4NWFkLi45YzM2ODQxZTBmNGQz
MDgwOGQ0MWI5NmZjNzdhZDI1YTM2MGM5ZjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0yLDggKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE1LCAyMDE2IElnYWxpYSBTLkwKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBDYWJsZSBUZWxldmlzaW9uIExhYm9yYXRvcmllcywgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDE1LCAyMDE2IElnYWxpYSBTLkwKICAqIENvcHly
aWdodCAoQykgMjAxNSwgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTI3LDI0ICsyNiw3NCBAQAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikK
IAogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaCIKLQorI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5o
IgorI2luY2x1ZGUgIk1haW5UaHJlYWROb3RpZmllci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVy
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlIDxnbGliLmg+
CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUgPGdzdC9wYnV0aWxzL2luc3RhbGwtcGx1
Z2lucy5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaD4KIAogI2lmIEVOQUJMRShW
SURFT19UUkFDSykKICNpbmNsdWRlICJUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNlbmRpZgotCiB0eXBlZGVmIHN0cnVj
dCBfR3N0TXBlZ3RzU2VjdGlvbiBHc3RNcGVndHNTZWN0aW9uOwogCisjaWYgVVNFKEdTVFJFQU1F
Ul9HTCkKKyNpZiBVU0UoTElCRVBPWFkpCisvLyBJbmNsdWRlIHRoZSA8ZXBveHkvZ2wuaD4gaGVh
ZGVyIGJlZm9yZSA8Z3N0L2dsL2dsLmg+LgorI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisKKy8vIFdv
cmthcm91bmQgYnVpbGQgaXNzdWUgd2l0aCBSUGkgdXNlcmxhbmQgR0xFU3YyIGhlYWRlcnMgYW5k
IGxpYmVwb3h5IDxodHRwczovL3dlYmtpdC5vcmcvYi8xODU2Mzk+CisjaWYgIUdTVF9DSEVDS19W
RVJTSU9OKDEsIDE0LCAwKQorI2luY2x1ZGUgPGdzdC9nbC9nc3RnbGNvbmZpZy5oPgorI2lmIGRl
ZmluZWQoR1NUX0dMX0hBVkVfV0lORE9XX0RJU1BNQU5YKSAmJiBHU1RfR0xfSEFWRV9XSU5ET1df
RElTUE1BTlgKKyNkZWZpbmUgX19nbDJfaF8KKyN1bmRlZiBHU1RfR0xfSEFWRV9HTFNZTkMKKyNk
ZWZpbmUgR1NUX0dMX0hBVkVfR0xTWU5DIDEKKyNlbmRpZgorI2VuZGlmIC8vICFHU1RfQ0hFQ0tf
VkVSU0lPTigxLCAxNCwgMCkKKyNlbmRpZiAvLyBVU0UoTElCRVBPWFkpCisKKyNkZWZpbmUgR1NU
X1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRlIDxnc3QvZ2wvZ2wuaD4KKyN1bmRlZiBHU1RfVVNF
X1VOU1RBQkxFX0FQSQorI2VuZGlmCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaW5j
bHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmlj
b3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgorI2VuZGlmCisjZW5kaWYK
KwordHlwZWRlZiBzdHJ1Y3QgX0dzdFN0cmVhbVZvbHVtZSBHc3RTdHJlYW1Wb2x1bWU7Cit0eXBl
ZGVmIHN0cnVjdCBfR3N0VmlkZW9JbmZvIEdzdFZpZGVvSW5mbzsKK3R5cGVkZWYgc3RydWN0IF9H
c3RHTENvbnRleHQgR3N0R0xDb250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0dzdEdMRGlzcGxheSBH
c3RHTERpc3BsYXk7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQml0bWFwVGV4dHVy
ZUdMOworY2xhc3MgR0xDb250ZXh0OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgSW50UmVjdDsKK2NsYXNzIFZp
ZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcjsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkK
K2NsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk7CisjZW5kaWYKKwogI2lmIEVO
QUJMRShXRUJfQVVESU8pCiBjbGFzcyBBdWRpb1NvdXJjZVByb3ZpZGVyOwogY2xhc3MgQXVkaW9T
b3VyY2VQcm92aWRlckdTdHJlYW1lcjsKQEAgLTU2LDIwICsxMDUsMjcgQEAgY2xhc3MgSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjsKIGNsYXNzIE1lZGlhUGxheWVyUmVxdWVzdEluc3Rh
bGxNaXNzaW5nUGx1Z2luc0NhbGxiYWNrOwogY2xhc3MgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXI7CiAKLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotY2xhc3MgTWVkaWFTb3VyY2VQcml2YXRl
Q2xpZW50OwotI2VuZGlmCit2b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKTsK
IAotY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIDogcHVibGljIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UgeworLy8gVXNlIGVhZ2VyIGluaXRpYWxpemF0aW9uIGZvciB0
aGUgV2Vha1B0ckZhY3Rvcnkgc2luY2Ugd2UgY2FsbCBtYWtlV2Vha1B0cigpIGZyb20gYW5vdGhl
ciB0aHJlYWQuCitjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVk
aWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4K
KyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgLCBwdWJs
aWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UK
KyAgICAsIHB1YmxpYyBQbGF0Zm9ybUxheWVyCisjZW5kaWYKKyNlbmRpZgoreworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0IE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcihNZWRpYVBsYXllciopOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVE
ZWJ1Z0NhdGVnb3J5KCk7CisKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQ
bGF5ZXIqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKTsKIAot
ICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIp
OwogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7Ci0KLSAgICB2b2lkIGhhbmRsZU1lc3Nh
Z2UoR3N0TWVzc2FnZSopOwotICAgIHZvaWQgaGFuZGxlUGx1Z2luSW5zdGFsbGVyUmVzdWx0KEdz
dEluc3RhbGxQbHVnaW5zUmV0dXJuKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5n
aW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKIAogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2hhc1ZpZGVvOyB9CiAgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzQXVkaW87IH0KQEAgLTg3LDYzICsxNDMsMzA1IEBAIHB1
YmxpYzoKICAgICB2b2lkIHByZXBhcmVUb1BsYXkoKSBvdmVycmlkZTsKICAgICB2b2lkIHBsYXko
KSBvdmVycmlkZTsKICAgICB2b2lkIHBhdXNlKCkgb3ZlcnJpZGU7Ci0KICAgICBib29sIHBhdXNl
ZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgc2Vla2luZygpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgc2Vla2luZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2Vla2luZzsgfQor
ICAgIHZvaWQgc2Vlayhjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKIAogICAgIE1lZGlhVGlt
ZSBwbGF0Zm9ybUR1cmF0aW9uKCkgY29uc3Q7Ci0gICAgTWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFU
aW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgTWVkaWFUaW1lIGN1cnJlbnRNZWRpYVRpbWUoKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHNlZWsoY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIHNldFJhdGUoZmxvYXQpIG92ZXJyaWRlOwogICAgIGRvdWJsZSByYXRlKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29sKSBvdmVycmlk
ZTsKLQogICAgIHZvaWQgc2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBmaWxsVGltZXJGaXJlZCgpOwogCisgICAgRmxvYXRTaXplIG5hdHVyYWxTaXpl
KCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHNldFZvbHVtZShmbG9hdCkgb3ZlcnJpZGU7Cisg
ICAgZmxvYXQgdm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyNpZiBVU0UoR1NUUkVBTUVSX0dM
KQorICAgIGJvb2wgZW5zdXJlR3N0R0xDb250ZXh0KCk7CisgICAgR3N0Q29udGV4dCogcmVxdWVz
dEdMQ29udGV4dChjb25zdCBjaGFyKiBjb250ZXh0VHlwZSk7CisjZW5kaWYKKyAgICB2b2lkIHNl
dE11dGVkKGJvb2wpIG92ZXJyaWRlOworICAgIGJvb2wgbXV0ZWQoKSBjb25zdDsKKworICAgIE1l
ZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0U2l6
ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzaXplQ2hhbmdlZCgpOworCisg
ICAgLy8gUHJlZmVyIE1lZGlhVGltZSBiYXNlZCBtZXRob2RzIG92ZXIgZmxvYXQgYmFzZWQuCisK
KyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGR1cmF0aW9uTWVk
aWFUaW1lKCkudG9GbG9hdCgpOyB9CisgICAgZG91YmxlIGR1cmF0aW9uRG91YmxlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50b0RvdWJsZSgpOyB9CisgICAg
TWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgZmxvYXQg
Y3VycmVudFRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjdXJyZW50TWVkaWFUaW1lKCku
dG9GbG9hdCgpOyB9CisgICAgZG91YmxlIGN1cnJlbnRUaW1lRG91YmxlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gY3VycmVudE1lZGlhVGltZSgpLnRvRG91YmxlKCk7IH0KKyAgICBNZWRpYVRp
bWUgY3VycmVudE1lZGlhVGltZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzZWVrKGZsb2F0IHRpbWUpIG92ZXJyaWRlIHsgc2VlayhNZWRpYVRpbWU6OmNyZWF0ZVdpdGhG
bG9hdCh0aW1lKSk7IH0KKyAgICB2b2lkIHNlZWtEb3VibGUoZG91YmxlIHRpbWUpIG92ZXJyaWRl
IHsgc2VlayhNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUodGltZSkpOyB9CisKKyAgICBmbG9h
dCBtYXhUaW1lU2Vla2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtYXhNZWRpYVRpbWVT
ZWVrYWJsZSgpLnRvRmxvYXQoKTsgfQogICAgIE1lZGlhVGltZSBtYXhNZWRpYVRpbWVTZWVrYWJs
ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGRvdWJsZSBtaW5UaW1lU2Vla2FibGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtaW5NZWRpYVRpbWVTZWVrYWJsZSgpLnRvRmxvYXQoKTsgfQorICAg
IE1lZGlhVGltZSBtaW5NZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IE1lZGlhVGltZTo6emVyb1RpbWUoKTsgfQorCiAgICAgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3Mo
KSBjb25zdCBvdmVycmlkZTsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlcygpIGNv
bnN0IG92ZXJyaWRlOwotICAgIE1lZGlhVGltZSBtYXhUaW1lTG9hZGVkKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgT3B0aW9uYWw8Ym9vbD4gd291bGRUYWludE9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdp
biYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7Ci0gICAg
dm9pZCB0aW1lQ2hhbmdlZCgpOwotICAgIHZvaWQgZGlkRW5kKCk7CisgICAgdm9pZCBzaW11bGF0
ZUF1ZGlvSW50ZXJydXB0aW9uKCkgb3ZlcnJpZGU7CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQor
ICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKSBvdmVycmlkZTsK
KyNlbmRpZgorCisgICAgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKKworICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX3BsYXllcjsgfQorCisgICAgdW5zaWduZWQgZGVjb2RlZEZyYW1lQ291bnQoKSBj
b25zdCBvdmVycmlkZTsKKyAgICB1bnNpZ25lZCBkcm9wcGVkRnJhbWVDb3VudCgpIGNvbnN0IG92
ZXJyaWRlOworICAgIHVuc2lnbmVkIGF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0IG92ZXJy
aWRlOworICAgIHVuc2lnbmVkIHZpZGVvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpIG92ZXJyaWRl
OworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKKyNpZiBQTEFURk9STShXSU5fQ0FJUk8pCisgICAg
Ly8gRklYTUU6IEFjY2VsZXJhdGVkIHJlbmRlcmluZyBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQg
Zm9yIFdpbkNhaXJvIHlldC4KKyAgICBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmco
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorI2Vsc2UKKyAgICBib29sIHN1cHBv
cnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisjZW5kaWYKKyNlbmRpZgorCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICB2b2lk
IGNkbUluc3RhbmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNk
bUluc3RhbmNlRGV0YWNoZWQoQ0RNSW5zdGFuY2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRs
ZVByb3RlY3Rpb25FdmVudChHc3RFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBhdHRlbXB0VG9E
ZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKKyAgICB2b2lkIGF0dGVtcHRUb0RlY3J5cHRXaXRo
SW5zdGFuY2UoQ0RNSW5zdGFuY2UmKSBmaW5hbDsKKyAgICB2b2lkIGluaXRpYWxpemF0aW9uRGF0
YUVuY291bnRlcmVkKEluaXREYXRhJiYpOworICAgIHZvaWQgc2V0V2FpdGluZ0ZvcktleShib29s
KTsKKyAgICBib29sIHdhaXRpbmdGb3JLZXkoKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgorCisg
ICAgc3RhdGljIGJvb2wgc3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0s
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9y
dHNUeXBlIGV4dGVuZGVkU3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFt
ZXRlcnMmLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlKTsKKworI2lmIFVTRShHU1RSRUFNRVJf
R0wpCisgICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0s
IEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1h
Z2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIG92ZXJyaWRlOworI2VuZGlmCisKKyAg
ICB2b2lkIHNldFZpZGVvU291cmNlT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbik7CisgICAg
R3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9
CisgICAgdm9pZCBlbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5
cGUsIHVuc2lnbmVkIGluZGV4KTsKKworICAgIC8vIEFwcGVuZCBwaXBlbGluZSBpbnRlcmZhY2UK
KyAgICBib29sIGhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKyAgICB2b2lkIGhhbmRs
ZU1lc3NhZ2UoR3N0TWVzc2FnZSopOworCitwcm90ZWN0ZWQ6CisgICAgZW51bSBNYWluVGhyZWFk
Tm90aWZpY2F0aW9uIHsKKyAgICAgICAgVmlkZW9DaGFuZ2VkID0gMSA8PCAwLAorICAgICAgICBW
aWRlb0NhcHNDaGFuZ2VkID0gMSA8PCAxLAorICAgICAgICBBdWRpb0NoYW5nZWQgPSAxIDw8IDIs
CisgICAgICAgIFZvbHVtZUNoYW5nZWQgPSAxIDw8IDMsCisgICAgICAgIE11dGVDaGFuZ2VkID0g
MSA8PCA0LAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICAgICAgVGV4dENoYW5nZWQgPSAx
IDw8IDUsCisjZW5kaWYKKyAgICAgICAgU2l6ZUNoYW5nZWQgPSAxIDw8IDYsCisgICAgICAgIFN0
cmVhbUNvbGxlY3Rpb25DaGFuZ2VkID0gMSA8PCA3CisgICAgfTsKKworICAgIHZpcnR1YWwgYm9v
bCBpc0xpdmVTdHJlYW0oKSBjb25zdCB7IHJldHVybiBtX2lzU3RyZWFtaW5nOyB9CisgICAgTWVk
aWFUaW1lIG1heFRpbWVMb2FkZWQoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlv
bkNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc291cmNlU2V0dXAoR3N0RWxlbWVudCopOwor
ICAgIHZpcnR1YWwgdm9pZCBjb25maWd1cmVQbGF5U2luaygpIHsgfQorICAgIHZpcnR1YWwgYm9v
bCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlKTsKKworCisjaWYgVVNFKEdTVFJFQU1FUl9I
T0xFUFVOQ0gpCisgICAgR3N0RWxlbWVudCogY3JlYXRlSG9sZVB1bmNoVmlkZW9TaW5rKCk7Cisg
ICAgdm9pZCBwdXNoTmV4dEhvbGVQdW5jaEJ1ZmZlcigpOworICAgIGJvb2wgc2hvdWxkSWdub3Jl
SW50cmluc2ljU2l6ZSgpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorCisjaWYgVVNF
KEdTVFJFQU1FUl9HTCkKKyAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdTYW1wbGVDYWxsYmFj
ayhHc3RFbGVtZW50KiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisgICAgc3RhdGlj
IEdzdEZsb3dSZXR1cm4gbmV3UHJlcm9sbENhbGxiYWNrKEdzdEVsZW1lbnQqLCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICB2b2lkIGZsdXNoQ3VycmVudEJ1ZmZlcigpOworICAg
IEdzdEVsZW1lbnQqIGNyZWF0ZUdMQXBwU2luaygpOworICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVZp
ZGVvU2lua0dMKCk7CisgICAgR3N0R0xDb250ZXh0KiBnc3RHTENvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBtX2dsQ29udGV4dC5nZXQoKTsgfQorICAgIEdzdEdMRGlzcGxheSogZ3N0R0xEaXNwbGF5
KCkgY29uc3QgeyByZXR1cm4gbV9nbERpc3BsYXkuZ2V0KCk7IH0KKyAgICB2b2lkIGVuc3VyZUdM
VmlkZW9TaW5rQ29udGV4dCgpOworI2VuZGlmCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
CisgICAgdm9pZCBwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpOworI2lmIFVTRShOSUNPU0lBKQor
ICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworI2Vsc2UKKyAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyNlbmRpZgorI2Vu
ZGlmCisKKyAgICBHc3RFbGVtZW50KiB2aWRlb1NpbmsoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVv
U2luay5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KEdzdFN0cmVh
bVZvbHVtZSopOworCisgICAgdm9pZCBzZXRQaXBlbGluZShHc3RFbGVtZW50Kik7CisKKyAgICB2
b2lkIHRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSopOworICAgIHZvaWQgcmVwYWludCgpOworICAg
IHZvaWQgY2FuY2VsUmVwYWludChib29sIGRlc3Ryb3lpbmcgPSBmYWxzZSk7CisKKyAgICBzdGF0
aWMgdm9pZCByZXBhaW50Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiwgR3N0
U2FtcGxlKik7CisgICAgc3RhdGljIHZvaWQgcmVwYWludENhbmNlbGxlZENhbGxiYWNrKE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworCisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZvbHVt
ZUNoYW5nZSgpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZNdXRlKCk7CisKKyAgICBzdGF0aWMg
dm9pZCB2b2x1bWVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7
CisgICAgc3RhdGljIHZvaWQgbXV0ZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIqKTsKKworICAgIC8vIEZJWE1FOiBXaGVyZSBpcyB0aGlzIHVzZWQ/CisgICAgdm9p
ZCBoYW5kbGVQbHVnaW5JbnN0YWxsZXJSZXN1bHQoR3N0SW5zdGFsbFBsdWdpbnNSZXR1cm4pOwor
CisgICAgdm9pZCByZWFkeVRpbWVyRmlyZWQoKTsKKworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZW
aWRlbygpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMoKTsKKyAgICB2b2lkIG5v
dGlmeVBsYXllck9mQXVkaW8oKTsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICB2b2lk
IG5vdGlmeVBsYXllck9mVGV4dCgpOworICAgIHZvaWQgbmV3VGV4dFNhbXBsZSgpOworI2VuZGlm
CisKKyAgICB2b2lkIGVuc3VyZUF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKyAgICB2b2lkIHNldEF1
ZGlvU3RyZWFtUHJvcGVydGllcyhHT2JqZWN0Kik7CisKKyAgICBzdGF0aWMgdm9pZCBzZXRBdWRp
b1N0cmVhbVByb3BlcnRpZXNDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqLCBH
T2JqZWN0Kik7CisKKyAgICBzdGF0aWMgdm9pZCBzb3VyY2VTZXR1cENhbGxiYWNrKE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciosIEdzdEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCB2aWRl
b0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0
aWMgdm9pZCB2aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lciopOworICAgIHN0YXRpYyB2b2lkIGF1ZGlvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciopOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBzdGF0
aWMgdm9pZCB0ZXh0Q2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciop
OworICAgIHN0YXRpYyBHc3RGbG93UmV0dXJuIG5ld1RleHRTYW1wbGVDYWxsYmFjayhNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyNlbmRpZgorCisgICAgdm9pZCB0aW1lQ2hhbmdlZCgp
OwogICAgIHZvaWQgbG9hZGluZ0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlLCBNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZywgYm9vbCBmb3Jj
ZU5vdGlmaWNhdGlvbnMgPSBmYWxzZSk7CisgICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgc291cmNlU2V0dXAoR3N0RWxlbWVudCopOworI2lmIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKKyAgICB2b2lkIHVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpOworI2Vu
ZGlmCiAKLSAgICBHc3RFbGVtZW50KiBhdWRpb1NpbmsoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgY29uZmlndXJlUGxheVNpbmsoKSB7IH0KKyAgICBSZWY8TWFpblRocmVhZE5v
dGlmaWVyPE1haW5UaHJlYWROb3RpZmljYXRpb24+PiBtX25vdGlmaWVyOworICAgIE1lZGlhUGxh
eWVyKiBtX3BsYXllcjsKKyAgICBtdXRhYmxlIE1lZGlhVGltZSBtX2NhY2hlZFBvc2l0aW9uOwor
ICAgIG11dGFibGUgTWVkaWFUaW1lIG1fY2FjaGVkRHVyYXRpb247CisgICAgYm9vbCBtX2NhbkZh
bGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24geyBmYWxzZSB9OworICAgIGJvb2wgbV9j
aGFuZ2luZ1JhdGUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kb3dubG9hZEZpbmlzaGVkIHsgZmFs
c2UgfTsKKyAgICBib29sIG1fZXJyb3JPY2N1cmVkIHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIGJv
b2wgbV9pc0VuZFJlYWNoZWQgeyBmYWxzZSB9OworICAgIG11dGFibGUgYm9vbCBtX2lzU3RyZWFt
aW5nIHsgZmFsc2UgfTsKKyAgICBib29sIG1fcGF1c2VkIHsgdHJ1ZSB9OworICAgIGZsb2F0IG1f
cGxheWJhY2tSYXRlIHsgMSB9OworICAgIEdzdFN0YXRlIG1fY3VycmVudFN0YXRlOworICAgIEdz
dFN0YXRlIG1fb2xkU3RhdGU7CisgICAgR3N0U3RhdGUgbV9yZXF1ZXN0ZWRTdGF0ZSB7IEdTVF9T
VEFURV9WT0lEX1BFTkRJTkcgfTsKKyAgICBib29sIG1fcmVzZXRQaXBlbGluZSB7IGZhbHNlIH07
CisgICAgYm9vbCBtX3NlZWtpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zZWVrSXNQZW5kaW5n
IHsgZmFsc2UgfTsKKyAgICBNZWRpYVRpbWUgbV9zZWVrVGltZTsKKyAgICBHUmVmUHRyPEdzdEVs
ZW1lbnQ+IG1fc291cmNlIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV92b2x1bWVBbmRNdXRlSW5p
dGlhbGl6ZWQgeyBmYWxzZSB9OwogCi0gICAgdm9pZCBzaW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9u
KCkgb3ZlcnJpZGU7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIFRleHR1cmVNYXBw
ZXJHTDo6RmxhZ3MgbV90ZXh0dXJlTWFwcGVyRmxhZ3M7CisjZW5kaWYKIAotICAgIHZpcnR1YWwg
Ym9vbCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlKTsKKyAgICBHUmVmUHRyPEdzdFN0cmVh
bVZvbHVtZT4gbV92b2x1bWVFbGVtZW50OworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92aWRl
b1Npbms7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOworICAgIEludFNpemUg
bV9zaXplOwogCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLSAgICBBdWRpb1NvdXJjZVByb3ZpZGVy
KiBhdWRpb1NvdXJjZVByb3ZpZGVyKCkgb3ZlcnJpZGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgbV9yZWFkeVN0YXRlIHsgTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nIH07CisgICAgbXV0
YWJsZSBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlIHsgTWVkaWFQbGF5
ZXI6OkVtcHR5IH07CisKKyAgICBtdXRhYmxlIExvY2sgbV9zYW1wbGVNdXRleDsKKyAgICBHUmVm
UHRyPEdzdFNhbXBsZT4gbV9zYW1wbGU7CisKKyAgICBtdXRhYmxlIEZsb2F0U2l6ZSBtX3ZpZGVv
U2l6ZTsKKyAgICBib29sIG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luayB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQgeyBmYWxzZSB9OworCisgICAgYm9vbCBt
X2Rlc3Ryb3lpbmcgeyBmYWxzZSB9OworCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBHUmVm
UHRyPEdzdEdMQ29udGV4dD4gbV9nbENvbnRleHQ7CisgICAgR1JlZlB0cjxHc3RHTERpc3BsYXk+
IG1fZ2xEaXNwbGF5OworICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gbV9nbERpc3BsYXlFbGVtZW50
Q29udGV4dDsKKyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IG1fZ2xBcHBFbGVtZW50Q29udGV4dDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyPiBtX3ZpZGVv
VGV4dHVyZUNvcGllcjsKKworICAgIEdSZWZQdHI8R3N0R0xDb2xvckNvbnZlcnQ+IG1fY29sb3JD
b252ZXJ0OworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9jb2xvckNvbnZlcnRJbnB1dENhcHM7Cisg
ICAgR1JlZlB0cjxHc3RDYXBzPiBtX2NvbG9yQ29udmVydE91dHB1dENhcHM7CiAjZW5kaWYKIAot
ICAgIGJvb2wgaXNMaXZlU3RyZWFtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc1N0cmVh
bWluZzsgfQorICAgIEltYWdlT3JpZW50YXRpb24gbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uOwog
Ci0gICAgdm9pZCBlbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5
cGUsIHVuc2lnbmVkIGluZGV4KTsKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIEJp
bmFyeVNlbWFwaG9yZSBtX2NkbUF0dGFjaG1lbnRTZW1hcGhvcmU7CisgICAgUmVmUHRyPGNvbnN0
IENETUluc3RhbmNlPiBtX2NkbUluc3RhbmNlOworCisgICAgTG9jayBtX3Byb3RlY3Rpb25NdXRl
eDsgLy8gR3VhcmRzIGFjY2VzcyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgorICAgIEhh
c2hTZXQ8dWludDMyX3Q+IG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CiAKLSAgICBib29sIGhh
bmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqKSBvdmVycmlkZTsKKyAgICBib29sIG1fd2FpdGlu
Z0ZvcktleSB7IGZhbHNlIH07CisjZW5kaWYKKworICAgIE9wdGlvbmFsPEdzdFZpZGVvRGVjb2Rl
clBsYXRmb3JtPiBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtOwogCiBwcml2YXRlOgorICAgIHZvaWQg
ZmlsbFRpbWVyRmlyZWQoKTsKKworICAgIHZvaWQgZGlkRW5kKCk7CisKKworICAgIEdzdEVsZW1l
bnQqIGNyZWF0ZVZpZGVvU2luaygpOworICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUF1ZGlvU2luaygp
OworICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2luaygpIGNvbnN0OworCiAgICAgc3RhdGljIHZvaWQg
Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFz
aD4mKTsKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUo
Y29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYpOwogICAgIHZvaWQgc3luY09uQ2xv
Y2soYm9vbCBzeW5jKTsKIAotICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUF1ZGlvU2luaygpIG92ZXJy
aWRlOwotCiAgICAgTWVkaWFUaW1lIHBsYXliYWNrUG9zaXRpb24oKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVTdGF0ZXMoKTsKQEAgLTE4OCw4MSArNDg2LDQyIEBAIHByaXZhdGU6
CiAgICAgdm9pZCB1cGRhdGVUcmFja3MoKTsKICAgICB2b2lkIGNsZWFyVHJhY2tzKCk7CiAKLXBy
b3RlY3RlZDoKLSAgICBib29sIG1fYnVmZmVyaW5nOwotICAgIGludCBtX2J1ZmZlcmluZ1BlcmNl
bnRhZ2U7Ci0gICAgbXV0YWJsZSBNZWRpYVRpbWUgbV9jYWNoZWRQb3NpdGlvbjsKLSAgICBtdXRh
YmxlIE1lZGlhVGltZSBtX2NhY2hlZER1cmF0aW9uOwotICAgIGJvb2wgbV9jYW5GYWxsQmFja1Rv
TGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uOwotICAgIGJvb2wgbV9jaGFuZ2luZ1JhdGU7Ci0gICAg
Ym9vbCBtX2Rvd25sb2FkRmluaXNoZWQ7Ci0gICAgYm9vbCBtX2Vycm9yT2NjdXJlZDsKLSAgICBt
dXRhYmxlIGJvb2wgbV9pc0VuZFJlYWNoZWQ7Ci0gICAgbXV0YWJsZSBib29sIG1faXNTdHJlYW1p
bmc7Ci0gICAgYm9vbCBtX3BhdXNlZDsKLSAgICBmbG9hdCBtX3BsYXliYWNrUmF0ZTsKLSAgICBH
c3RTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKLSAgICBHc3RTdGF0ZSBtX29sZFN0YXRlOwotICAgIEdz
dFN0YXRlIG1fcmVxdWVzdGVkU3RhdGU7Ci0gICAgYm9vbCBtX3Jlc2V0UGlwZWxpbmU7Ci0gICAg
Ym9vbCBtX3NlZWtpbmc7Ci0gICAgYm9vbCBtX3NlZWtJc1BlbmRpbmc7Ci0gICAgTWVkaWFUaW1l
IG1fc2Vla1RpbWU7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3NvdXJjZTsKLSAgICBib29s
IG1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkOwotCi0gICAgdm9pZCByZWFkeVRpbWVyRmlyZWQo
KTsKLQotICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWaWRlbygpOwotICAgIHZvaWQgbm90aWZ5UGxh
eWVyT2ZWaWRlb0NhcHMoKTsKLSAgICB2b2lkIG5vdGlmeVBsYXllck9mQXVkaW8oKTsKLQotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICB2b2lkIG5vdGlmeVBsYXllck9mVGV4dCgpOwotICAg
IHZvaWQgbmV3VGV4dFNhbXBsZSgpOwotI2VuZGlmCi0KLSAgICB2b2lkIGVuc3VyZUF1ZGlvU291
cmNlUHJvdmlkZXIoKTsKLSAgICB2b2lkIHNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyhHT2JqZWN0
Kik7Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXNDYWxsYmFjayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqLCBHT2JqZWN0Kik7Ci0KLSAgICBzdGF0aWMgdm9p
ZCBzb3VyY2VTZXR1cENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciosIEdzdEVs
ZW1lbnQqKTsKLSAgICBzdGF0aWMgdm9pZCB2aWRlb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqKTsKLSAgICBzdGF0aWMgdm9pZCB2aWRlb1NpbmtDYXBzQ2hhbmdl
ZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwotICAgIHN0YXRpYyB2b2lk
IGF1ZGlvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICBzdGF0aWMgdm9pZCB0ZXh0Q2hhbmdlZENhbGxiYWNr
KE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwotICAgIHN0YXRpYyBHc3RGbG93UmV0dXJu
IG5ld1RleHRTYW1wbGVDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKLSNl
bmRpZgotCi1wcml2YXRlOgotCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gbV90ZXh0QXBwU2luazsKICAgICBHUmVmUHRyPEdzdFBhZD4gbV90ZXh0QXBw
U2lua1BhZDsKICNlbmRpZgotICAgIEdzdFN0cnVjdHVyZSogbV9tZWRpYUxvY2F0aW9uczsKLSAg
ICBpbnQgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4OwotICAgIGJvb2wgbV9wbGF5YmFja1Jh
dGVQYXVzZTsKKyAgICBHc3RTdHJ1Y3R1cmUqIG1fbWVkaWFMb2NhdGlvbnMgeyBudWxscHRyIH07
CisgICAgaW50IG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCB7IDAgfTsKKyAgICBib29sIG1f
cGxheWJhY2tSYXRlUGF1c2UgeyBmYWxzZSB9OwogICAgIE1lZGlhVGltZSBtX3RpbWVPZk92ZXJs
YXBwaW5nU2VlazsKLSAgICBmbG9hdCBtX2xhc3RQbGF5YmFja1JhdGU7CisgICAgZmxvYXQgbV9s
YXN0UGxheWJhY2tSYXRlIHsgMSB9OwogICAgIFRpbWVyIG1fZmlsbFRpbWVyOwogICAgIE1lZGlh
VGltZSBtX21heFRpbWVMb2FkZWQ7CiAgICAgYm9vbCBtX2xvYWRpbmdTdGFsbGVkIHsgZmFsc2Ug
fTsKICAgICBNZWRpYVBsYXllcjo6UHJlbG9hZCBtX3ByZWxvYWQ7Ci0gICAgYm9vbCBtX2RlbGF5
aW5nTG9hZDsKKyAgICBib29sIG1fZGVsYXlpbmdMb2FkIHsgZmFsc2UgfTsKICAgICBtdXRhYmxl
IE1lZGlhVGltZSBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7Ci0gICAg
Ym9vbCBtX2hhc1ZpZGVvOwotICAgIGJvb2wgbV9oYXNBdWRpbzsKKyAgICBib29sIG1faGFzVmlk
ZW8geyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNBdWRpbyB7IGZhbHNlIH07CisgICAgQ29uZGl0
aW9uIG1fZHJhd0NvbmRpdGlvbjsKKyAgICBMb2NrIG1fZHJhd011dGV4OworICAgIFJ1bkxvb3A6
OlRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4gbV9kcmF3VGltZXI7CiAgICAgUnVu
TG9vcDo6VGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPiBtX3JlYWR5VGltZXJIYW5k
bGVyOwotICAgIG11dGFibGUgdW5zaWduZWQgbG9uZyBsb25nIG1fdG90YWxCeXRlczsKKyNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgUmVmPE5pY29zaWE6
OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgor
I2VuZGlmCisgICAgYm9vbCBtX2J1ZmZlcmluZyB7IGZhbHNlIH07CisgICAgaW50IG1fYnVmZmVy
aW5nUGVyY2VudGFnZSB7IDAgfTsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3Rv
dGFsQnl0ZXMgeyAwIH07CiAgICAgVVJMIG1fdXJsOwotICAgIGJvb2wgbV9wcmVzZXJ2ZXNQaXRj
aDsKKyAgICBib29sIG1fcHJlc2VydmVzUGl0Y2ggeyBmYWxzZSB9OwogICAgIG11dGFibGUgT3B0
aW9uYWw8U2Vjb25kcz4gbV9sYXN0UXVlcnlUaW1lOwogICAgIGJvb2wgbV9pc0xlZ2FjeVBsYXli
aW47CiAgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBtX3N0cmVhbUNvbGxlY3Rpb247
Ci0gICAgRmxvYXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgZmluYWw7CiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVByaXZh
dGU7CiAjZW5kaWYKQEAgLTI5Miw4ICs1NTEsOSBAQCBwcml2YXRlOgogCiAgICAgSGFzaFNldDxS
ZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+PiBtX29yaWdpbnM7CiAgICAgT3B0aW9uYWw8
Ym9vbD4gbV9oYXNUYWludGVkT3JpZ2luIHsgV1RGOjpudWxsb3B0IH07CisKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fZnBzU2luayB7IG51bGxwdHIgfTsKIH07CiAKIH0KLQotI2VuZGlmIC8v
IFVTRShHU1RSRUFNRVIpCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVS
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjlhNDY4NTFkZDFiZDcyZjkyNTY0
ZmFlOWFiMGExNmZjNzVmMmVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1NjUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxw
QGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZh
IDxnbnNAZ25vbWUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDE1LCAyMDE2
IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWlu
dCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlLmgiCi0KLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCi0K
LSNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJJbWFnZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIkltYWdlT3JpZW50YXRp
b24uaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1
ZGUgIk1lZGlhUGxheWVyLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRl
ICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKLSNpbmNsdWRlICJXZWJLaXRXZWJTb3VyY2VHU3RyZWFt
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbVN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgot
Ci0jaW5jbHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgotI2luY2x1ZGUgPGdzdC92aWRl
by9nc3R2aWRlb21ldGEuaD4KLQotI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0jaW5jbHVk
ZSAiQ0RNSW5zdGFuY2UuaCIKLSNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0aW9u
RGVjcnlwdG9yR1N0cmVhbWVyLmgiCi0jZW5kaWYKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0j
ZGVmaW5lIFRFWFRVUkVfQ09QSUVSX0NPTE9SX0NPTlZFUlRfRkxBRyBWaWRlb1RleHR1cmVDb3Bp
ZXJHU3RyZWFtZXI6OkNvbG9yQ29udmVyc2lvbjo6Tm9Db252ZXJ0Ci0jZGVmaW5lIEdTVF9HTF9D
QVBTX0ZPUk1BVCAieyBSR0J4LCBSR0JBLCBJNDIwLCBZNDQ0LCBZVjEyLCBZNDFCLCBZNDJCLCBO
VjEyLCBOVjIxLCBWVVlBIH0iCi0KLSNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KLQot
I2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2lmIFVTRShHTFgpCi0jaW5jbHVkZSAiR0xDb250ZXh0
R0xYLmgiCi0jaW5jbHVkZSA8Z3N0L2dsL3gxMS9nc3RnbGRpc3BsYXlfeDExLmg+Ci0jZW5kaWYK
LQotI2lmIFVTRShFR0wpCi0jaW5jbHVkZSAiR0xDb250ZXh0RUdMLmgiCi0jaW5jbHVkZSA8Z3N0
L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFgxMSkK
LSNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlYMTEuaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0o
V0FZTEFORCkKLSNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmgiCi0jZW5kaWYKLQot
I2lmIFVTRShXUEVfUkVOREVSRVIpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5TGliV1BFLmgi
Ci0jZW5kaWYKLQotLy8gZ3N0Z2xhcGkuaCBtYXkgaW5jbHVkZSBlZ2xwbGF0Zm9ybS5oIGFuZCBp
dCBpbmNsdWRlcyBYLmgsIHdoaWNoCi0vLyBkZWZpbmVzIE5vbmUsIGJyZWFraW5nIE1lZGlhUGxh
eWVyOjpOb25lIGVudW0KLSNpZiBQTEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JN
X0VHTAotI3VuZGVmIE5vbmUKLSNlbmRpZiAvLyBQTEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZF
X1BMQVRGT1JNX0VHTAotI2luY2x1ZGUgIlZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5oIgot
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wp
Ci0jaW5jbHVkZSAiQml0bWFwVGV4dHVyZUdMLmgiCi0jaW5jbHVkZSAiQml0bWFwVGV4dHVyZVBv
b2wuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKLSNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KLSNlbmRpZgotI2Vu
ZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLQotR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtp
dF9tZWRpYV9wbGF5ZXJfZGVidWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21l
ZGlhX3BsYXllcl9kZWJ1ZwotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFj
ZSBzdGQ7Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKLXN0YXRpYyBjb25zdCBGbG9h
dFNpemUgc19ob2xlUHVuY2hEZWZhdWx0RnJhbWVTaXplKDEyODAsIDcyMCk7Ci0jZW5kaWYKLQot
c3RhdGljIGludCBncmVhdGVzdENvbW1vbkRpdmlzb3IoaW50IGEsIGludCBiKQotewotICAgIHdo
aWxlIChiKSB7Ci0gICAgICAgIGludCB0ZW1wID0gYTsKLSAgICAgICAgYSA9IGI7Ci0gICAgICAg
IGIgPSB0ZW1wICUgYjsKLSAgICB9Ci0KLSAgICByZXR1cm4gQUJTKGEpOwotfQotCi0jaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQotY2xhc3MgR3N0VmlkZW9GcmFtZUhvbGRlciA6IHB1YmxpYyBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcjo6VW5tYW5hZ2VkQnVmZmVyRGF0YUhvbGRl
ciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgR3N0VmlkZW9GcmFtZUhvbGRlcihHc3RTYW1wbGUq
IHNhbXBsZSwgT3B0aW9uYWw8R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm0+IHZpZGVvRGVjb2RlclBs
YXRmb3JtLCBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzLCBib29sIGdzdEdMRW5hYmxlZCkK
LSAgICAgICAgOiBtX3ZpZGVvRGVjb2RlclBsYXRmb3JtKHZpZGVvRGVjb2RlclBsYXRmb3JtKQot
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoR1NUX0lTX1NBTVBMRShzYW1wbGUpKTsKLQot
ICAgICAgICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOwotICAgICAgICBpZiAoVU5MSUtFTFkoIWdl
dFNhbXBsZVZpZGVvSW5mbyhzYW1wbGUsIHZpZGVvSW5mbykpKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIG1fc2l6ZSA9IEludFNpemUoR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVv
SW5mbyksIEdTVF9WSURFT19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKSk7Ci0gICAgICAgIG1faGFz
QWxwaGFDaGFubmVsID0gR1NUX1ZJREVPX0lORk9fSEFTX0FMUEhBKCZ2aWRlb0luZm8pOwotICAg
ICAgICBtX2J1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUpOwotICAgICAgICBp
ZiAoVU5MSUtFTFkoIUdTVF9JU19CVUZGRVIobV9idWZmZXIpKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgICAgIG1fZmxhZ3MgPSBmbGFncyB8ICht
X2hhc0FscGhhQ2hhbm5lbCA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwKTsKLQot
ICAgICAgICBpZiAoZ3N0R0xFbmFibGVkKSB7Ci0gICAgICAgICAgICBtX2lzTWFwcGVkID0gZ3N0
X3ZpZGVvX2ZyYW1lX21hcCgmbV92aWRlb0ZyYW1lLCAmdmlkZW9JbmZvLCBtX2J1ZmZlciwgc3Rh
dGljX2Nhc3Q8R3N0TWFwRmxhZ3M+KEdTVF9NQVBfUkVBRCB8IEdTVF9NQVBfR0wpKTsKLSAgICAg
ICAgICAgIGlmIChtX2lzTWFwcGVkKSB7Ci0gICAgICAgICAgICAgICAgbV90ZXh0dXJlSUQgPSAq
cmVpbnRlcnByZXRfY2FzdDxHTHVpbnQqPihtX3ZpZGVvRnJhbWUuZGF0YVswXSk7Ci0gICAgICAg
ICAgICAgICAgbV9oYXNNYXBwZWRUZXh0dXJlcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKLSAgICAgICAg
VU5VU0VEX1BBUkFNKGdzdEdMRW5hYmxlZCk7Ci0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkK
LQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3RleHR1cmVJRCA9IDA7Ci0gICAgICAgICAgICBt
X2lzTWFwcGVkID0gZ3N0X3ZpZGVvX2ZyYW1lX21hcCgmbV92aWRlb0ZyYW1lLCAmdmlkZW9JbmZv
LCBtX2J1ZmZlciwgR1NUX01BUF9SRUFEKTsKLSAgICAgICAgICAgIGlmIChtX2lzTWFwcGVkKSB7
Ci0gICAgICAgICAgICAgICAgLy8gUmlnaHQgbm93IHRoZSBUZXh0dXJlTWFwcGVyIG9ubHkgc3Vw
cG9ydHMgY2hyb21hcyB3aXRoIG9uZSBwbGFuZQotICAgICAgICAgICAgICAgIEFTU0VSVChHU1Rf
VklERU9fSU5GT19OX1BMQU5FUygmdmlkZW9JbmZvKSA9PSAxKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHZpcnR1YWwgfkdzdFZpZGVvRnJhbWVIb2xkZXIoKQotICAg
IHsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFtX2lzTWFwcGVkKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAoJm1fdmlkZW9GcmFtZSk7Ci0gICAg
fQotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvckNQVVN5
bmMoKQotICAgIHsKLSAgICAgICAgR3N0R0xTeW5jTWV0YSogbWV0YSA9IGdzdF9idWZmZXJfZ2V0
X2dsX3N5bmNfbWV0YShtX2J1ZmZlcik7Ci0gICAgICAgIGlmIChtZXRhKSB7Ci0gICAgICAgICAg
ICBHc3RNZW1vcnkqIG1lbSA9IGdzdF9idWZmZXJfcGVla19tZW1vcnkobV9idWZmZXIsIDApOwot
ICAgICAgICAgICAgR3N0R0xDb250ZXh0KiBjb250ZXh0ID0gKChHc3RHTEJhc2VNZW1vcnkqKW1l
bSktPmNvbnRleHQ7Ci0gICAgICAgICAgICBnc3RfZ2xfc3luY19tZXRhX3dhaXRfY3B1KG1ldGEs
IGNvbnRleHQpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wp
Ci0KLSAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0g
ICAgYm9vbCBoYXNBbHBoYUNoYW5uZWwoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhQ2hhbm5l
bDsgfQotICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBt
X2ZsYWdzOyB9Ci0gICAgR0x1aW50IHRleHR1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVy
ZUlEOyB9Ci0gICAgYm9vbCBoYXNNYXBwZWRUZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFz
TWFwcGVkVGV4dHVyZXM7IH0KLSAgICBjb25zdCBHc3RWaWRlb0ZyYW1lJiB2aWRlb0ZyYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV92aWRlb0ZyYW1lOyB9Ci0KLSAgICB2b2lkIHVwZGF0ZVRleHR1cmUo
Qml0bWFwVGV4dHVyZUdMJiB0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3RleHR1
cmVJRCk7Ci0gICAgICAgIEdzdFZpZGVvR0xUZXh0dXJlVXBsb2FkTWV0YSogbWV0YTsKLSAgICAg
ICAgaWYgKG1fYnVmZmVyICYmIChtZXRhID0gZ3N0X2J1ZmZlcl9nZXRfdmlkZW9fZ2xfdGV4dHVy
ZV91cGxvYWRfbWV0YShtX2J1ZmZlcikpKSB7Ci0gICAgICAgICAgICBpZiAobWV0YS0+bl90ZXh0
dXJlcyA9PSAxKSB7IC8vIEJSR3ggJiBCR1JBIGZvcm1hdHMgdXNlIG9ubHkgb25lIHRleHR1cmUu
Ci0gICAgICAgICAgICAgICAgZ3VpbnQgaWRzWzRdID0geyB0ZXh0dXJlLmlkKCksIDAsIDAsIDAg
fTsKLQotICAgICAgICAgICAgICAgIGlmIChnc3RfdmlkZW9fZ2xfdGV4dHVyZV91cGxvYWRfbWV0
YV91cGxvYWQobWV0YSwgaWRzKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtX2lzTWFwcGVkKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGludCBzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVf
U1RSSURFKCZtX3ZpZGVvRnJhbWUsIDApOwotICAgICAgICBjb25zdCB2b2lkKiBzcmNEYXRhID0g
R1NUX1ZJREVPX0ZSQU1FX1BMQU5FX0RBVEEoJm1fdmlkZW9GcmFtZSwgMCk7Ci0KLSAgICAgICAg
aWYgKCFzcmNEYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRleHR1cmUudXBk
YXRlQ29udGVudHMoc3JjRGF0YSwgV2ViQ29yZTo6SW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKSwgV2ViQ29yZTo6SW50UG9pbnQoMCwgMCksIHN0cmlkZSk7Ci0g
ICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyPiBwbGF0Zm9ybUxheWVyQnVmZmVyKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9oYXNNYXBw
ZWRUZXh0dXJlcykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHVzaW5n
IEJ1ZmZlciA9IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyOwotCi0gICAgICAgIGlm
ICgoR1NUX1ZJREVPX0lORk9fSVNfUkdCKCZtX3ZpZGVvRnJhbWUuaW5mbykgJiYgR1NUX1ZJREVP
X0lORk9fTl9QTEFORVMoJm1fdmlkZW9GcmFtZS5pbmZvKSA9PSAxKSkKLSAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlPEJ1ZmZlcj4oQnVmZmVyOjpUZXh0dXJlVmFyaWFudCB7IEJ1ZmZlcjo6
UkdCVGV4dHVyZSB7ICpzdGF0aWNfY2FzdDxHTHVpbnQqPihtX3ZpZGVvRnJhbWUuZGF0YVswXSkg
fSB9LCBtX3NpemUsIG1fZmxhZ3MsIEdMX1JHQkEpOwotCi0gICAgICAgIGlmIChHU1RfVklERU9f
SU5GT19JU19ZVVYoJm1fdmlkZW9GcmFtZS5pbmZvKSkgewotICAgICAgICAgICAgaWYgKEdTVF9W
SURFT19JTkZPX05fQ09NUE9ORU5UUygmbV92aWRlb0ZyYW1lLmluZm8pIDwgMyB8fCBHU1RfVklE
RU9fSU5GT19OX1BMQU5FUygmbV92aWRlb0ZyYW1lLmluZm8pID4gMykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgaWYgKG1fdmlkZW9EZWNvZGVyUGxhdGZv
cm0gJiYgKm1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gPT0gR3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06
OklteFZQVSkgewotICAgICAgICAgICAgICAgIC8vIElNWCBWUFUgZGVjb2RlciBkZWNvZGVzIFlV
ViBkYXRhIG9ubHkgaW50byB0aGUgWSB0ZXh0dXJlIGZyb20gd2hpY2ggdGhlIHNhbXBsZXIKLSAg
ICAgICAgICAgICAgICAvLyB0aGVuIGRpcmVjdGx5IHByb2R1Y2VzIFJHQkEgZGF0YS4gVGV4dHVy
ZXMgZm9yIG90aGVyIHBsYW5lcyBhcmVuJ3QgdXNlZCwgYnV0Ci0gICAgICAgICAgICAgICAgLy8g
dGhhdCdzIGRlY29kZXIncyBwcm9ibGVtLiBXZSBoYXZlIHRvIHRyZWF0IHRoYXQgWSB0ZXh0dXJl
IGFzIGhhdmluZyBSR0JBIGRhdGEuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8
QnVmZmVyPihCdWZmZXI6OlRleHR1cmVWYXJpYW50IHsgQnVmZmVyOjpSR0JUZXh0dXJlIHsgKnN0
YXRpY19jYXN0PEdMdWludCo+KG1fdmlkZW9GcmFtZS5kYXRhWzBdKSB9IH0sIG1fc2l6ZSwgbV9m
bGFncywgR0xfUkdCQSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mUGxhbmVzID0gR1NUX1ZJREVPX0lORk9fTl9QTEFORVMoJm1fdmlkZW9GcmFtZS5pbmZv
KTsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8R0x1aW50LCAzPiBwbGFuZXM7Ci0gICAgICAgICAg
ICBzdGQ6OmFycmF5PHVuc2lnbmVkLCAzPiB5dXZQbGFuZTsKLSAgICAgICAgICAgIHN0ZDo6YXJy
YXk8dW5zaWduZWQsIDM+IHl1dlBsYW5lT2Zmc2V0OwotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mUGxhbmVzOyArK2kpCi0gICAgICAgICAgICAgICAgcGxhbmVz
W2ldID0gKnN0YXRpY19jYXN0PEdMdWludCo+KG1fdmlkZW9GcmFtZS5kYXRhW2ldKTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICB5dXZQbGFuZVtpXSA9IEdTVF9WSURFT19JTkZPX0NPTVBfUExBTkUoJm1fdmlkZW9GcmFtZS5p
bmZvLCBpKTsKLSAgICAgICAgICAgICAgICB5dXZQbGFuZU9mZnNldFtpXSA9IEdTVF9WSURFT19J
TkZPX0NPTVBfUE9GRlNFVCgmbV92aWRlb0ZyYW1lLmluZm8sIGkpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PEdMZmxvYXQsIDk+IHl1dlRvUmdiOwotICAgICAgICAg
ICAgaWYgKGdzdF92aWRlb19jb2xvcmltZXRyeV9tYXRjaGVzKCZHU1RfVklERU9fSU5GT19DT0xP
UklNRVRSWSgmbV92aWRlb0ZyYW1lLmluZm8pLCBHU1RfVklERU9fQ09MT1JJTUVUUllfQlQ3MDkp
KSB7Ci0gICAgICAgICAgICAgICAgeXV2VG9SZ2IgPSB7Ci0gICAgICAgICAgICAgICAgICAgIDEu
MTY0ZiwgIDAuMGYsICAgIDEuNzg3ZiwKLSAgICAgICAgICAgICAgICAgICAgMS4xNjRmLCAtMC4y
MTNmLCAtMC41MzFmLAotICAgICAgICAgICAgICAgICAgICAxLjE2NGYsICAyLjExMmYsICAwLjBm
Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRGVmYXVsdCB0byBidDYwMS4gVGhpcyBpcyB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgR1N0
cmVhbWVyJ3MgZ2xjb2xvcmNvbnZlcnQgZWxlbWVudC4KLSAgICAgICAgICAgICAgICB5dXZUb1Jn
YiA9IHsKLSAgICAgICAgICAgICAgICAgICAgMS4xNjRmLCAgMC4wZiwgICAgMS41OTZmLAotICAg
ICAgICAgICAgICAgICAgICAxLjE2NGYsIC0wLjM5MWYsIC0wLjgxM2YsCi0gICAgICAgICAgICAg
ICAgICAgIDEuMTY0ZiwgIDIuMDE4ZiwgIDAuMGYKLSAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxCdWZmZXI+KCBCdWZmZXI6
OlRleHR1cmVWYXJpYW50IHsgQnVmZmVyOjpZVVZUZXh0dXJlIHsgbnVtYmVyT2ZQbGFuZXMsIHBs
YW5lcywgeXV2UGxhbmUsIHl1dlBsYW5lT2Zmc2V0LCB5dXZUb1JnYiB9IH0sIG1fc2l6ZSwgbV9m
bGFncywgR0xfUkdCQSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgR3N0QnVmZmVyKiBtX2J1ZmZlcjsKLSAgICBHc3RWaWRlb0Zy
YW1lIG1fdmlkZW9GcmFtZSB7IH07Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgYm9vbCBtX2hh
c0FscGhhQ2hhbm5lbDsKLSAgICBPcHRpb25hbDxHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybT4gbV92
aWRlb0RlY29kZXJQbGF0Zm9ybTsKLSAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3Mg
eyB9OwotICAgIEdMdWludCBtX3RleHR1cmVJRCB7IDAgfTsKLSAgICBib29sIG1faXNNYXBwZWQg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNNYXBwZWRUZXh0dXJlcyB7IGZhbHNlIH07Ci19Owot
I2VuZGlmCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6aW5pdGlhbGl6
ZURlYnVnQ2F0ZWdvcnkoKQotewotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9t
ZWRpYV9wbGF5ZXJfZGVidWcsICJ3ZWJraXRtZWRpYXBsYXllciIsIDAsICJXZWJLaXQgbWVkaWEg
cGxheWVyIik7Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoTWVkaWFQbGF5ZXIqIHBsYXllcikKLSAgICA6IG1fbm90
aWZpZXIoTWFpblRocmVhZE5vdGlmaWVyPE1haW5UaHJlYWROb3RpZmljYXRpb24+OjpjcmVhdGUo
KSkKLSAgICAsIG1fcGxheWVyKHBsYXllcikKLSAgICAsIG1fZnBzU2luayhudWxscHRyKQotICAg
ICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKLSAgICAsIG1fbmV0d29y
a1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKLSAgICAsIG1fZHJhd1RpbWVyKFJ1bkxvb3A6Om1h
aW4oKSwgdGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnQpCi0j
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotI2lmIFVTRShOSUNPU0lBKQotICAgICwgbV9uaWNv
c2lhTGF5ZXIoTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKLSNlbHNlCi0gICAg
LCBtX3BsYXRmb3JtTGF5ZXJQcm94eShhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eSgpKSkKLSNlbmRpZgotI2VuZGlmCi17Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKCkKLXsKLSNp
ZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGlmIChtX3ZpZGVvRGVjb2RlclBsYXRmb3JtID09IEdz
dFZpZGVvRGVjb2RlclBsYXRmb3JtOjpWaWRlbzRMaW51eCkKLSAgICAgICAgZmx1c2hDdXJyZW50
QnVmZmVyKCk7Ci0jZW5kaWYKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNP
U0lBKQotICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
PihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7Ci0jZW5kaWYKLQot
ICAgIG1fbm90aWZpZXItPmludmFsaWRhdGUoKTsKLQotICAgIGlmIChtX3ZpZGVvU2luaykgewot
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV92aWRlb1Npbmsu
Z2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMp
OwotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgICAgIGlmIChHU1RfSVNfQklOKG1fdmlkZW9T
aW5rLmdldCgpKSkgewotICAgICAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBhcHBzaW5rID0g
YWRvcHRHUmVmKGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJTl9DQVNUKG1fdmlkZW9TaW5rLmdl
dCgpKSwgIndlYmtpdC1nbC12aWRlby1zaW5rIikpOwotICAgICAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKGFwcHNpbmsuZ2V0KCksIHRoaXMpOwotICAgICAgICB9
Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICBpZiAobV92b2x1bWVFbGVtZW50KQotICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV92b2x1bWVFbGVtZW50LmdldCgpLCBH
X1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLQotICAg
IC8vIFRoaXMgd2lsbCByZWxlYXNlIHRoZSBHU3RyZWFtZXIgdGhyZWFkIGZyb20gbV9kcmF3Q29u
ZGl0aW9uIGluIG5vbiBBQyBtb2RlIGluIGNhc2UgdGhlcmUncyBhbiBvbmdvaW5nIHRyaWdnZXJS
ZXBhaW50IGNhbGwKLSAgICAvLyB3YWl0aW5nIHRoZXJlLCBhbmQgZW5zdXJlIHRoYXQgYW55IHRy
aWdnZXJSZXBhaW50IGNhbGwgcmVhY2hpbmcgdGhlIGxvY2sgd29uJ3Qgd2FpdCBvbiBtX2RyYXdD
b25kaXRpb24uCi0gICAgY2FuY2VsUmVwYWludCh0cnVlKTsKLQotI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCi0gICAgbV9jZG1BdHRhY2htZW50U2VtYXBob3JlLnNpZ25hbCgpOwotI2VuZGlm
Ci0KLSAgICAvLyBUaGUgY2hhbmdlIHRvIEdTVF9TVEFURV9OVUxMIHN0YXRlIGlzIGFsd2F5cyBz
eW5jaHJvbm91cy4gU28gYWZ0ZXIgdGhpcyBnZXRzIGV4ZWN1dGVkIHdlIGRvbid0IG5lZWQgdG8g
d29ycnkKLSAgICAvLyBhYm91dCBoYW5kbGVycyBydW5uaW5nIGluIHRoZSBHU3RyZWFtZXIgdGhy
ZWFkLgotICAgIGlmIChtX3BpcGVsaW5lKQotICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUo
bV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOwotCi0gICAgbV9wbGF5ZXIgPSBudWxs
cHRyOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNldFBpcGVs
aW5lKEdzdEVsZW1lbnQqIHBpcGVsaW5lKQotewotICAgIG1fcGlwZWxpbmUgPSBwaXBlbGluZTsK
LQotICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9i
dXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7Ci0gICAgZ3N0X2J1c19zZXRfc3lu
Y19oYW5kbGVyKGJ1cy5nZXQoKSwgW10oR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3Bv
aW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgYXV0byYgcGxheWVyID0gKnN0YXRpY19jYXN0PE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqPih1c2VyRGF0YSk7Ci0KLSAgICAgICAgaWYg
KHBsYXllci5oYW5kbGVTeW5jTWVzc2FnZShtZXNzYWdlKSkgewotICAgICAgICAgICAgZ3N0X21l
c3NhZ2VfdW5yZWYobWVzc2FnZSk7Ci0gICAgICAgICAgICByZXR1cm4gR1NUX0JVU19EUk9QOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEdTVF9CVVNfUEFTUzsKLSAgICB9LCB0aGlzLCBu
dWxscHRyKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5k
bGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQotewotICAgIFVOVVNFRF9QQVJBTSht
ZXNzYWdlKTsKLSAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSAhPSBHU1RfTUVTU0FH
RV9ORUVEX0NPTlRFWFQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IGdjaGFy
KiBjb250ZXh0VHlwZTsKLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGUobWVzc2Fn
ZSwgJmNvbnRleHRUeXBlKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJIYW5k
bGluZyAlcyBuZWVkLWNvbnRleHQgbWVzc2FnZSBmb3IgJXMiLCBjb250ZXh0VHlwZSwgR1NUX01F
U1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwotCi0gICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5
cGUsIFdFQktJVF9XRUJfU1JDX1BMQVlFUl9DT05URVhUX1RZUEVfTkFNRSkpIHsKLSAgICAgICAg
R1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldyhX
RUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBFX05BTUUsIEZBTFNFKSk7Ci0gICAgICAg
IEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0
cnVjdHVyZShjb250ZXh0LmdldCgpKTsKLQotICAgICAgICBBU1NFUlQobV9wbGF5ZXIpOwotICAg
ICAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAicGxheWVyIiwgR19UWVBF
X1BPSU5URVIsIG1fcGxheWVyLCBudWxscHRyKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2Nv
bnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5nZXQo
KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wp
Ci0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBlbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1
ZXN0R0xDb250ZXh0KGNvbnRleHRUeXBlKSk7Ci0gICAgaWYgKGVsZW1lbnRDb250ZXh0KSB7Ci0g
ICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyks
IGVsZW1lbnRDb250ZXh0LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2Vu
ZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQot
ICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9u
LXN5c3RlbS1pZCIpKSB7Ci0gICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAgICAg
ICAgR1NUX0VSUk9SKCJjYW4ndCBoYW5kbGUgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3Rl
bS1pZCBuZWVkIGNvbnRleHQgbWVzc2FnZSBpbiB0aGUgbWFpbiB0aHJlYWQiKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGRy
bS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UiKTsK
LQotICAgICAgICBJbml0RGF0YSBpbml0RGF0YTsKLSAgICAgICAgewotICAgICAgICAgICAgTG9j
a0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11dGV4KTsKLSAgICAgICAgICAgIFByb3RlY3Rpb25T
eXN0ZW1FdmVudHMgcHJvdGVjdGlvblN5c3RlbUV2ZW50cyhtZXNzYWdlKTsKLSAgICAgICAgICAg
IEdTVF9UUkFDRSgiZm91bmQgJXp1IHByb3RlY3Rpb24gZXZlbnRzLCAlenUgZGVjcnlwdG9ycyBh
dmFpbGFibGUiLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpLnNpemUoKSwgcHJvdGVj
dGlvblN5c3RlbUV2ZW50cy5hdmFpbGFibGVTeXN0ZW1zKCkuc2l6ZSgpKTsKLQotICAgICAgICAg
ICAgZm9yIChhdXRvJiBldmVudCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsK
LSAgICAgICAgICAgICAgICBHc3RCdWZmZXIqIGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAg
ICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0
ZW1JZCwgJmRhdGEsIG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5k
KHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVkUHJv
dGVjdGlvbkV2ZW50cy5hZGQoR1NUX0VWRU5UX1NFUU5VTShldmVudC5nZXQoKSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVk
KFdURk1vdmUoaW5pdERhdGEpKTsKLQotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUo
KSwgIndhaXRpbmcgZm9yIGEgQ0RNIGluc3RhbmNlIik7Ci0gICAgICAgIGlmIChtX2NkbUF0dGFj
aG1lbnRTZW1hcGhvcmUud2FpdEZvcig0X3MpCi0gICAgICAgICAgICAmJiBtX25vdGlmaWVyLT5p
c1ZhbGlkKCkgLy8gQ2hlY2sgdGhlIHBsYXllciBpcyBub3QgYmVpbmcgZGVzdHJveWVkLgotICAg
ICAgICAgICAgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgY29uc3QgY2hhciogcHJlZmVycmVkS2V5U3lzdGVtVXVpZCA9IEdTdHJlYW1lckVN
RVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlkKG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpKTsK
LSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAid29ya2luZyB3aXRoIGtl
eSBzeXN0ZW0gJXMsIGNvbnRpbnVpbmcgd2l0aCBrZXkgc3lzdGVtICVzIG9uICVzIiwgbV9jZG1J
bnN0YW5jZS0+a2V5U3lzdGVtKCkudXRmOCgpLmRhdGEoKSwgcHJlZmVycmVkS2V5U3lzdGVtVXVp
ZCwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwotCi0gICAgICAgICAgICBHUmVmUHRy
PEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tcHJl
ZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIiwgRkFMU0UpKTsKLSAgICAgICAgICAgIEdzdFN0
cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVy
ZShjb250ZXh0LmdldCgpKTsKLSAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRT
dHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsIHByZWZlcnJl
ZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2Nv
bnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5nZXQo
KSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNETSBpbnN0YW5j
ZSBub3QgaW5pdGlhbGl6YWVkIik7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2Vu
ZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotR3N0Q29udGV4dCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6cmVxdWVzdEdMQ29udGV4dChjb25zdCBjaGFyKiBjb250ZXh0VHlwZSkKLXsK
LSAgICBpZiAoIWVuc3VyZUdzdEdMQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCBHU1RfR0xfRElTUExBWV9DT05URVhU
X1RZUEUpKSB7Ci0gICAgICAgIEdzdENvbnRleHQqIGRpc3BsYXlDb250ZXh0ID0gZ3N0X2NvbnRl
eHRfbmV3KEdTVF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSwgVFJVRSk7Ci0gICAgICAgIGdzdF9j
b250ZXh0X3NldF9nbF9kaXNwbGF5KGRpc3BsYXlDb250ZXh0LCBnc3RHTERpc3BsYXkoKSk7Ci0g
ICAgICAgIHJldHVybiBkaXNwbGF5Q29udGV4dDsKLSAgICB9Ci0KLSAgICBpZiAoIWdfc3RyY21w
MChjb250ZXh0VHlwZSwgImdzdC5nbC5hcHBfY29udGV4dCIpKSB7Ci0gICAgICAgIEdzdENvbnRl
eHQqIGFwcENvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoImdzdC5nbC5hcHBfY29udGV4dCIsIFRS
VUUpOwotICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRh
YmxlX3N0cnVjdHVyZShhcHBDb250ZXh0KTsKLSNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMiwg
MCkKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4dCIsIEdTVF9U
WVBFX0dMX0NPTlRFWFQsIGdzdEdMQ29udGV4dCgpLCBudWxscHRyKTsKLSNlbHNlCi0gICAgICAg
IGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfR0xfVFlQRV9DT05U
RVhULCBnc3RHTENvbnRleHQoKSwgbnVsbHB0cik7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIGFw
cENvbnRleHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZW5zdXJlR3N0R0xDb250ZXh0KCkKLXsKLSAgICBp
ZiAobV9nbENvbnRleHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byYgc2hhcmVk
RGlzcGxheSA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCk7
Ci0KLSAgICAvLyBUaGUgZmxvYXRpbmcgcmVmIHJlbW92YWwgc3VwcG9ydCB3YXMgYWRkZWQgaW4g
aHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzA2Mi4KLSAgICBi
b29sIHNob3VsZEFkb3B0UmVmID0gd2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKTsKLSAg
ICBpZiAoIW1fZ2xEaXNwbGF5KSB7Ci0jaWYgUExBVEZPUk0oWDExKQotI2lmIFVTRShHTFgpCi0g
ICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAg
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBYMTEgc2hhcmVk
IEdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAg
ICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlz
cGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNo
YXJlZERpc3BsYXkpLm5hdGl2ZSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193
aXRoX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5u
YXRpdmUoKSkpOwotICAgICAgICB9Ci0jZWxpZiBVU0UoRUdMKQotICAgICAgICBpZiAoaXM8UGxh
dGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBFR0wgZGlzcGxheSIpOwot
ICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNw
bGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0
aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkp
LmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2ds
RGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xf
ZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERp
c3BsYXkoKSkpOwotICAgICAgICB9Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0FZ
TEFORCkKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3Bs
YXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGlu
ZyBXYXlsYW5kIHNoYXJlZCBkaXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRS
ZWYpCi0gICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BM
QVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRm
b3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZ
KGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9y
bURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAg
fQotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JFTkRFUkVSKQotICAgICAgICBpZiAoaXM8UGxhdGZv
cm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgV1BFIHNoYXJlZCBFR0wgZGlzcGxheSIpOwot
ICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNw
bGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0
aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3Bs
YXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBt
X2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9l
Z2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkp
LmVnbERpc3BsYXkoKSkpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBBU1NFUlQobV9n
bERpc3BsYXkpOwotICAgIH0KLQotICAgIEdMQ29udGV4dCogd2Via2l0Q29udGV4dCA9IHNoYXJl
ZERpc3BsYXkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1
YWxseSBleGNsdXNpdmUsIG5vIG5lZWQgZm9yIGlmZGVmcyBoZXJlLgotICAgIEdzdEdMUGxhdGZv
cm0gZ2xQbGF0Zm9ybSA9IHdlYmtpdENvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BM
QVRGT1JNX0VHTCA6IEdTVF9HTF9QTEFURk9STV9HTFg7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQot
ICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9HTEVTMjsKLSNlbGlmIFVTRShPUEVOR0wp
Ci0gICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKLSNlbHNlCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
M0QgY29udGV4dEhhbmRsZSA9IHdlYmtpdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAg
IGlmICghY29udGV4dEhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNo
b3VsZEFkb3B0UmVmKQotICAgICAgICBtX2dsQ29udGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29u
dGV4dF9uZXdfd3JhcHBlZChtX2dsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWlu
dHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKSk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2dsQ29udGV4dCA9IGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1fZ2xEaXNwbGF5
LmdldCgpLCByZWludGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0
Zm9ybSwgZ2xBUEkpOwotCi0gICAgLy8gQWN0aXZhdGUgYW5kIGZpbGwgdGhlIEdTdHJlYW1lciB3
cmFwcGVkIGNvbnRleHQgd2l0aCB0aGUgV2Via2l0J3Mgc2hhcmVkIG9uZS4KLSAgICBhdXRvIHBy
ZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIHdlYmtpdENv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3Rp
dmF0ZShtX2dsQ29udGV4dC5nZXQoKSwgVFJVRSkpIHsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxH
RXJyb3I+IGVycm9yOwotICAgICAgICBpZiAoIWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhtX2ds
Q29udGV4dC5nZXQoKSwgJmVycm9yLm91dFB0cigpKSkKLSAgICAgICAgICAgIEdTVF9XQVJOSU5H
KCJGYWlsZWQgdG8gZmlsbCBpbiBHU3RyZWFtZXIgY29udGV4dDogJXMiLCBlcnJvci0+bWVzc2Fn
ZSk7Ci0gICAgICAgIGdzdF9nbF9jb250ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBG
QUxTRSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZh
dGUgR1N0cmVhbWVyIGNvbnRleHQgJSIgR1NUX1BUUl9GT1JNQVQsIG1fZ2xDb250ZXh0LmdldCgp
KTsKLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2
ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0j
ZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKLQotLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUg
dmlkZW8KLUZsb2F0U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuYXR1cmFs
U2l6ZSgpIGNvbnN0Ci17Ci0jaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCi0gICAgLy8gV2hl
biB1c2luZyB0aGUgaG9sZXB1Y2ggd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGdldCB0aGUgdmlkZW8g
ZnJhbWVzIHNpemUsIHNvIHdlIGNhbid0IHVzZQotICAgIC8vIGl0LiBCdXQgd2UgbmVlZCB0byBy
ZXBvcnQgc29tZSBub24gZW1wdHkgbmF0dXJhbFNpemUgZm9yIHRoZSBwbGF5ZXIncyBHcmFwaGlj
c0xheWVyCi0gICAgLy8gdG8gYmUgcHJvcGVybHkgY3JlYXRlZC4KLSAgICByZXR1cm4gc19ob2xl
UHVuY2hEZWZhdWx0RnJhbWVTaXplOwotI2VuZGlmCi0KLSAgICBpZiAoIWhhc1ZpZGVvKCkpCi0g
ICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKLQotICAgIGlmICghbV92aWRlb1NpemUuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbV92aWRlb1NpemU7Ci0KLSAgICBhdXRvIHNhbXBsZUxvY2tl
ciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwotICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3Nh
bXBsZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKLQotICAgIEdzdENhcHMq
IGNhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzKG1fc2FtcGxlLmdldCgpKTsKLSAgICBpZiAoIWNh
cHMpCi0gICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKLQotCi0gICAgLy8gVE9ETzogaGFuZGxl
IHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNlZQotICAgIC8vIGh0dHBzOi8vYnVnemls
bGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEKLSAgICAvLyBUT0RPOiBoYW5kbGUg
cG9zc2libGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBTZWUKLSAgICAvLyBodHRwczovL2J1Z3pp
bGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2MzI2Ci0KLSAgICAvLyBHZXQgdGhlIHZp
ZGVvIFBBUiBhbmQgb3JpZ2luYWwgc2l6ZSwgaWYgdGhpcyBmYWlscyB0aGUKLSAgICAvLyB2aWRl
by1zaW5rIGhhcyBsaWtlbHkgbm90IHlldCBuZWdvdGlhdGVkIGl0cyBjYXBzLgotICAgIGludCBw
aXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0
cmlkZTsKLSAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZTsKLSAgICBHc3RWaWRlb0Zvcm1hdCBmb3Jt
YXQ7Ci0gICAgaWYgKCFnZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhjYXBzLCBvcmlnaW5h
bFNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRp
b0Rlbm9taW5hdG9yLCBzdHJpZGUpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7Ci0KLSNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgLy8gV2hlbiB1c2luZyBhY2NlbGVyYXRlZCBj
b21wb3NpdGluZywgaWYgdGhlIHZpZGVvIGlzIHRhZ2dlZCBhcyByb3RhdGVkIDkwIG9yIDI3MCBk
ZWdyZWVzLCBzd2FwIHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgaWYgKG1fcmVuZGVyaW5nQ2FuQmVB
Y2NlbGVyYXRlZCkgewotICAgICAgICBpZiAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uLnVzZXNX
aWR0aEFzSGVpZ2h0KCkpCi0gICAgICAgICAgICBvcmlnaW5hbFNpemUgPSBvcmlnaW5hbFNpemUu
dHJhbnNwb3NlZFNpemUoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIk9yaWdpbmFsIHZpZGVvIHNpemU6ICVkeCVkIiwgb3JpZ2luYWxTaXplLndp
ZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiUGl4ZWwgYXNwZWN0IHJhdGlvOiAlZC8lZCIsIHBpeGVsQXNwZWN0UmF0aW9OdW1l
cmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcik7Ci0KLSAgICAvLyBDYWxjdWxhdGUg
REFSIGJhc2VkIG9uIFBBUiBhbmQgdmlkZW8gc2l6ZS4KLSAgICBpbnQgZGlzcGxheVdpZHRoID0g
b3JpZ2luYWxTaXplLndpZHRoKCkgKiBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yOwotICAgIGlu
dCBkaXNwbGF5SGVpZ2h0ID0gb3JpZ2luYWxTaXplLmhlaWdodCgpICogcGl4ZWxBc3BlY3RSYXRp
b0Rlbm9taW5hdG9yOwotCi0gICAgLy8gRGl2aWRlIGRpc3BsYXkgd2lkdGggYW5kIGhlaWdodCBi
eSB0aGVpciBHQ0QgdG8gYXZvaWQgcG9zc2libGUgb3ZlcmZsb3dzLgotICAgIGludCBkaXNwbGF5
QXNwZWN0UmF0aW9HQ0QgPSBncmVhdGVzdENvbW1vbkRpdmlzb3IoZGlzcGxheVdpZHRoLCBkaXNw
bGF5SGVpZ2h0KTsKLSAgICBkaXNwbGF5V2lkdGggLz0gZGlzcGxheUFzcGVjdFJhdGlvR0NEOwot
ICAgIGRpc3BsYXlIZWlnaHQgLz0gZGlzcGxheUFzcGVjdFJhdGlvR0NEOwotCi0gICAgLy8gQXBw
bHkgREFSIHRvIG9yaWdpbmFsIHZpZGVvIHNpemUuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3Ig
YXMgaW4geHZpbWFnZXNpbmsncyBzZXRjYXBzIGZ1bmN0aW9uLgotICAgIGd1aW50NjQgd2lkdGgg
PSAwLCBoZWlnaHQgPSAwOwotICAgIGlmICghKG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAlIGRpc3Bs
YXlIZWlnaHQpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIktlZXBp
bmcgdmlkZW8gb3JpZ2luYWwgaGVpZ2h0Iik7Ci0gICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWlu
dDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxh
eUhlaWdodCk7Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFs
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgfSBlbHNlIGlmICghKG9yaWdpbmFsU2l6ZS53aWR0aCgpICUg
ZGlzcGxheVdpZHRoKSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJL
ZWVwaW5nIHZpZGVvIG9yaWdpbmFsIHdpZHRoIik7Ci0gICAgICAgIGhlaWdodCA9IGdzdF91dGls
X3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLndpZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRp
c3BsYXlXaWR0aCk7Ci0gICAgICAgIHdpZHRoID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2lu
YWxTaXplLndpZHRoKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIkFwcHJveGltYXRpbmcgd2hpbGUga2VlcGluZyBvcmlnaW5hbCB2aWRlbyBo
ZWlnaHQiKTsKLSAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdp
bmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAg
aGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhlaWdodCgpKTsKLSAg
ICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJOYXR1cmFsIHNpemU6ICUi
IEdfR1VJTlQ2NF9GT1JNQVQgInglIiBHX0dVSU5UNjRfRk9STUFULCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICBtX3ZpZGVvU2l6ZSA9IEZsb2F0U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKSwgc3Rh
dGljX2Nhc3Q8aW50PihoZWlnaHQpKTsKLSAgICByZXR1cm4gbV92aWRlb1NpemU7Ci19Ci0KLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVt
ZSkKLXsKLSAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyB2b2x1bWU6ICVmIiwgdm9sdW1l
KTsKLSAgICBnc3Rfc3RyZWFtX3ZvbHVtZV9zZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQo
KSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJTkVBUiwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2
b2x1bWUpKTsKLX0KLQotZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dm9s
dW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gZ3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZShtX3ZvbHVtZUVs
ZW1lbnQuZ2V0KCksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9MSU5FQVIpOwotfQotCi0KLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZWb2x1bWVD
aGFuZ2UoKQotewotICAgIGlmICghbV9wbGF5ZXIgfHwgIW1fdm9sdW1lRWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGRvdWJsZSB2b2x1bWU7Ci0gICAgdm9sdW1lID0gZ3N0X3N0cmVhbV92
b2x1bWVfZ2V0X3ZvbHVtZShtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksIEdTVF9TVFJFQU1fVk9MVU1F
X0ZPUk1BVF9MSU5FQVIpOwotICAgIC8vIGdldF92b2x1bWUoKSBjYW4gcmV0dXJuIHZhbHVlcyBz
dXBlcmlvciB0byAxLjAgaWYgdGhlIHVzZXIKLSAgICAvLyBhcHBsaWVzIHNvZnR3YXJlIHVzZXIg
Z2FpbiB2aWEgdGhpcmQgcGFydHkgYXBwbGljYXRpb24gKEdOT01FCi0gICAgLy8gdm9sdW1lIGNv
bnRyb2wgZm9yIGluc3RhbmNlKS4KLSAgICB2b2x1bWUgPSBDTEFNUCh2b2x1bWUsIDAuMCwgMS4w
KTsKLSAgICBtX3BsYXllci0+dm9sdW1lQ2hhbmdlZChzdGF0aWNfY2FzdDxmbG9hdD4odm9sdW1l
KSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dm9sdW1lQ2hh
bmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKLXsK
LSAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIG1fdm9sdW1lRWxlbWVudCByZWNlaXZlcyB0aGUg
bm90aWZ5Ojp2b2x1bWUgc2lnbmFsLgotICAgIEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBl
bGluZSgpLCAiVm9sdW1lIGNoYW5nZWQgdG86ICVmIiwgcGxheWVyLT52b2x1bWUoKSk7Ci0KLSAg
ICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpWb2x1
bWVDaGFuZ2VkLCBbcGxheWVyXSB7Ci0gICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWb2x1
bWVDaGFuZ2UoKTsKLSAgICB9KTsKLX0KLQotTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuZXR3b3JrU3RhdGUoKSBjb25zdAotewotICAg
IHJldHVybiBtX25ldHdvcmtTdGF0ZTsKLX0KLQotTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVhZHlTdGF0ZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fcmVhZHlTdGF0ZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpzaXplQ2hhbmdlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRNdXRlZChib29sIG11dGUpCi17
Ci0gICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wg
Y3VycmVudFZhbHVlID0gbXV0ZWQoKTsKLSAgICBpZiAoY3VycmVudFZhbHVlID09IG11dGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiU2V0IG11
dGVkIHRvICVzIiwgdG9TdHJpbmcobXV0ZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgZ19vYmplY3Rf
c2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCBtdXRlLCBudWxscHRyKTsKLX0KLQot
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjptdXRlZCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdi
b29sZWFuIG11dGVkOwotICAgIGdfb2JqZWN0X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJt
dXRlIiwgJm11dGVkLCBudWxscHRyKTsKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
IlBsYXllciBpcyBtdXRlZDogJXMiLCB0b1N0cmluZyhzdGF0aWNfY2FzdDxib29sPihtdXRlZCkp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBtdXRlZDsKLX0KLQotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjpub3RpZnlQbGF5ZXJPZk11dGUoKQotewotICAgIGlmICgh
bV9wbGF5ZXIgfHwgIW1fdm9sdW1lRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2Jv
b2xlYW4gbXV0ZWQ7Ci0gICAgZ19vYmplY3RfZ2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11
dGUiLCAmbXV0ZWQsIG51bGxwdHIpOwotICAgIG1fcGxheWVyLT5tdXRlQ2hhbmdlZChzdGF0aWNf
Y2FzdDxib29sPihtdXRlZCkpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6Om11dGVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZSogcGxheWVyKQotewotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbV92b2x1bWVFbGVtZW50
IHJlY2VpdmVzIHRoZSBub3RpZnk6Om11dGUgc2lnbmFsLgotICAgIHBsYXllci0+bV9ub3RpZmll
ci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246Ok11dGVDaGFuZ2VkLCBbcGxheWVyXSB7
Ci0gICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZNdXRlKCk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdT
dGF0ZUNoYW5nZWQoKQotewotICAgIG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCA9IG1fcGxh
eWVyICYmIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkKCk7Ci19Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi1QbGF0Zm9ybUxh
eWVyKiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwbGF0Zm9ybUxheWVyKCkgY29u
c3QKLXsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIucHRyKCk7
Ci0jZWxzZQotICAgIHJldHVybiBjb25zdF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UqPih0aGlzKTsKLSNlbmRpZgotfQotCi0jaWYgVVNFKE5JQ09TSUEpCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotI2lm
IFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQotICAgIHB1c2hOZXh0SG9sZVB1bmNoQnVmZmVyKCk7
Ci0jZW5kaWYKLX0KLSNlbHNlCi1SZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eT4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cHJveHkoKSBjb25zdAotewotICAg
IHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7Ci19Ci0KLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0jaWYg
VVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCi0gICAgcHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsK
LSNlbmRpZgotfQotI2VuZGlmCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6cHVzaFRleHR1cmVUb0NvbXBvc2l0b3IoKQotewotICAgIGF1dG8gc2FtcGxlTG9ja2VyID0g
aG9sZExvY2sobV9zYW1wbGVNdXRleCk7Ci0gICAgaWYgKCFHU1RfSVNfU0FNUExFKG1fc2FtcGxl
LmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwcm94eU9wZXJhdGlvbiA9Ci0g
ICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKLSAg
ICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKLQot
ICAgICAgICAgICAgaWYgKCFwcm94eS5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVIb2xkZXI+IGZy
YW1lSG9sZGVyID0gbWFrZVVuaXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPihtX3NhbXBsZS5nZXQo
KSwgbV92aWRlb0RlY29kZXJQbGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3MsICFtX3VzaW5n
RmFsbGJhY2tWaWRlb1NpbmspOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGxheWVyQnVmZmVyOwotICAgICAgICAgICAgaWYg
KGZyYW1lSG9sZGVyLT5oYXNNYXBwZWRUZXh0dXJlcygpKSB7Ci0gICAgICAgICAgICAgICAgbGF5
ZXJCdWZmZXIgPSBmcmFtZUhvbGRlci0+cGxhdGZvcm1MYXllckJ1ZmZlcigpOwotICAgICAgICAg
ICAgICAgIGlmICghbGF5ZXJCdWZmZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICBsYXllckJ1ZmZlci0+c2V0VW5tYW5hZ2VkQnVmZmVyRGF0YUhvbGRlcihX
VEZNb3ZlKGZyYW1lSG9sZGVyKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGxheWVyQnVmZmVyID0gcHJveHkuZ2V0QXZhaWxhYmxlQnVmZmVyKGZyYW1lSG9sZGVyLT5z
aXplKCksIEdMX0RPTlRfQ0FSRSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFsYXll
ckJ1ZmZlcikpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byB0ZXh0dXJlID0gQml0bWFwVGV4
dHVyZUdMOjpjcmVhdGUoVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzOjpnZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0KGZyYW1lSG9sZGVyLT5zaXplKCksIGZy
YW1lSG9sZGVyLT5oYXNBbHBoYUNoYW5uZWwoKSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxw
aGEgOiBCaXRtYXBUZXh0dXJlOjpOb0ZsYWcpOwotICAgICAgICAgICAgICAgICAgICBsYXllckJ1
ZmZlciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KFdURk1v
dmUodGV4dHVyZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmFtZUhv
bGRlci0+dXBkYXRlVGV4dHVyZShsYXllckJ1ZmZlci0+dGV4dHVyZUdMKCkpOwotICAgICAgICAg
ICAgICAgIGxheWVyQnVmZmVyLT5zZXRFeHRyYUZsYWdzKG1fdGV4dHVyZU1hcHBlckZsYWdzIHwg
KGZyYW1lSG9sZGVyLT5oYXNBbHBoYUNoYW5uZWwoKSA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxk
QmxlbmQgOiAwKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1
ZmZlcihXVEZNb3ZlKGxheWVyQnVmZmVyKSk7Ci0gICAgICAgIH07Ci0KLSNpZiBVU0UoTklDT1NJ
QSkKLSAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0
dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQot
ICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLX0KLSNl
bmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6cmVwYWludCgpCi17Ci0gICAgQVNTRVJUKG1fc2FtcGxlKTsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgbV9wbGF5ZXItPnJlcGFpbnQoKTsKLQotICAg
IExvY2tIb2xkZXIgbG9jayhtX2RyYXdNdXRleCk7Ci0gICAgbV9kcmF3Q29uZGl0aW9uLm5vdGlm
eU9uZSgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnRyaWdn
ZXJSZXBhaW50KEdzdFNhbXBsZSogc2FtcGxlKQotewotICAgIGJvb2wgdHJpZ2dlclJlc2l6ZTsK
LSAgICB7Ci0gICAgICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRl
eCk7Ci0gICAgICAgIHRyaWdnZXJSZXNpemUgPSAhbV9zYW1wbGU7Ci0gICAgICAgIG1fc2FtcGxl
ID0gc2FtcGxlOwotICAgIH0KLQotICAgIGlmICh0cmlnZ2VyUmVzaXplKSB7Ci0gICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkZpcnN0IHNhbXBsZSByZWFjaGVkIHRoZSBzaW5r
LCB0cmlnZ2VyaW5nIHZpZGVvIGRpbWVuc2lvbnMgdXBkYXRlIik7Ci0gICAgICAgIG1fbm90aWZp
ZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpTaXplQ2hhbmdlZCwgW3RoaXNdIHsK
LSAgICAgICAgICAgIG1fcGxheWVyLT5zaXplQ2hhbmdlZCgpOwotICAgICAgICB9KTsKLSAgICB9
Ci0KLSAgICBpZiAoIW1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkgewotICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2RyYXdNdXRleCk7Ci0gICAgICAgIGlmIChtX2Rlc3Ryb3lpbmcpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZHJhd1RpbWVyLnN0YXJ0T25lU2hvdCgwX3Mp
OwotICAgICAgICBtX2RyYXdDb25kaXRpb24ud2FpdChtX2RyYXdNdXRleCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgaWYgKG1fdXNp
bmdGYWxsYmFja1ZpZGVvU2luaykgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9kcmF3TXV0
ZXgpOwotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KLSAgICAgICAgICAgIFt0aGlzXShU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcHJveHkuc2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJl
YWQoW3RoaXNdIHsgdGhpcy0+cHVzaFRleHR1cmVUb0NvbXBvc2l0b3IoKTsgfSk7Ci0gICAgICAg
ICAgICB9OwotI2lmIFVTRShOSUNPU0lBKQotICAgICAgICBpZiAoIXByb3h5T3BlcmF0aW9uKGRv
d25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFM
YXllci0+aW1wbCgpKS5wcm94eSgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAg
ICAgIGlmICghcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSNlbmRpZgotICAgICAgICBtX2RyYXdUaW1lci5zdGFydE9uZVNob3QoMF9z
KTsKLSAgICAgICAgbV9kcmF3Q29uZGl0aW9uLndhaXQobV9kcmF3TXV0ZXgpOwotICAgIH0gZWxz
ZQotICAgICAgICBwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcigpOwotI2VuZGlmIC8vIFVTRShURVhU
VVJFX01BUFBFUl9HTCkKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
OjpyZXBhaW50Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVy
LCBHc3RTYW1wbGUqIHNhbXBsZSkKLXsKLSAgICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBs
ZSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y2FuY2VsUmVw
YWludChib29sIGRlc3Ryb3lpbmcpCi17Ci0gICAgLy8gVGhlIGdvYWwgb2YgdGhpcyBmdW5jdGlv
biBpcyB0byByZWxlYXNlIHRoZSBHU3RyZWFtZXIgdGhyZWFkIGZyb20gbV9kcmF3Q29uZGl0aW9u
IGluIHRyaWdnZXJSZXBhaW50KCkgaW4gbm9uLUFDIGNhc2UsCi0gICAgLy8gdG8gYXZvaWQgYSBk
ZWFkbG9jayBpZiB0aGUgcGxheWVyIGdldHMgcGF1c2VkIHdoaWxlIHdhaXRpbmcgZm9yIGRyYXdp
bmcgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMDAzKToK
LSAgICAvLyB0aGUgbWFpbiB0aHJlYWQgaXMgd2FpdGluZyBmb3IgdGhlIEdTdHJlYW1lciB0aHJl
YWQgdG8gcGF1c2UsIGJ1dCB0aGUgR1N0cmVhbWVyIHRocmVhZCBpcyBsb2NrZWQgd2FpdGluZyBm
b3IgdGhlCi0gICAgLy8gbWFpbiB0aHJlYWQgdG8gZHJhdy4gVGhpcyBkZWFkbG9jayBkb2Vzbid0
IGhhcHBlbiB3aGVuIHVzaW5nIEFDIGJlY2F1c2UgdGhlIHNhbXBsZSBpcyBwcm9jZXNzZWQgKG5v
dCBwYWludGVkKSBpbiB0aGUgY29tcG9zaXRvcgotICAgIC8vIHRocmVhZCwgc28gdGhlIG1haW4g
dGhyZWFkIGNhbiByZXF1ZXN0IHRoZSBwYXVzZSBhbmQgd2FpdCBpZiB0aGUgR1N0cmVhbWVyIHRo
cmVhZCBpcyB3YWl0aW5nIGZvciB0aGUgY29tcG9zaXRvciB0aHJlYWQuCi0gICAgLy8KLSAgICAv
LyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCB3aGVuIGRlc3Ryb3lpbmcgdGhlIHBsYXllciAo
ZGVzdHJveWluZyBwYXJhbWV0ZXIgaXMgdHJ1ZSksIHRvIHJlbGVhc2UgdGhlIGdzdHJlYW1lciB0
aHJlYWQgZnJvbQotICAgIC8vIG1fZHJhd0NvbmRpdGlvbiBhbmQgdG8gZW5zdXJlIHRoYXQgbmV3
IHRyaWdnZXJSZXBhaW50IGNhbGxzIHdvbid0IHdhaXQgb24gbV9kcmF3Q29uZGl0aW9uLgotICAg
IGlmICghbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fZHJhd011dGV4KTsKLSAgICAgICAgbV9kcmF3VGltZXIuc3RvcCgpOwotICAgICAg
ICBtX2Rlc3Ryb3lpbmcgPSBkZXN0cm95aW5nOwotICAgICAgICBtX2RyYXdDb25kaXRpb24ubm90
aWZ5T25lKCk7Ci0gICAgfQotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6OnJlcGFpbnRDYW5jZWxsZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlKiBwbGF5ZXIpCi17Ci0gICAgcGxheWVyLT5jYW5jZWxSZXBhaW50KCk7Ci19Ci0KLSNpZiBV
U0UoR1NUUkVBTUVSX0dMKQotR3N0Rmxvd1JldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpuZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50KiBzaW5rLCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCi17Ci0gICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNh
bXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfcHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5LKHNp
bmspKSk7Ci0gICAgcGxheWVyLT50cmlnZ2VyUmVwYWludChzYW1wbGUuZ2V0KCkpOwotICAgIHJl
dHVybiBHU1RfRkxPV19PSzsKLX0KLQotR3N0Rmxvd1JldHVybiBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpuZXdQcmVyb2xsQ2FsbGJhY2soR3N0RWxlbWVudCogc2luaywgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQotewotICAgIEdSZWZQdHI8R3N0U2Ft
cGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1RfQVBQ
X1NJTksoc2luaykpKTsKLSAgICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7
Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6OmZsdXNoQ3VycmVudEJ1ZmZlcigpCi17Ci0gICAgYXV0byBzYW1wbGVMb2Nr
ZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKLQotICAgIGlmIChtX3NhbXBsZSkgewotICAg
ICAgICAvLyBSZXBsYWNlIGJ5IGEgbmV3IHNhbXBsZSBoYXZpbmcgb25seSB0aGUgY2Fwcywgc28g
dGhpcyBkdW1teSBzYW1wbGUgaXMgc3RpbGwgdXNlZnVsIHRvIGdldCB0aGUgZGltZW5zaW9ucy4K
LSAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyByZXNpemluZyBwcm9ibGVtcyB3aGVuIHRoZSB2aWRl
byBjaGFuZ2VzIGl0cyBxdWFsaXR5IGFuZCBhIERSQUlOIGlzIHBlcmZvcm1lZC4KLSAgICAgICAg
Y29uc3QgR3N0U3RydWN0dXJlKiBpbmZvID0gZ3N0X3NhbXBsZV9nZXRfaW5mbyhtX3NhbXBsZS5n
ZXQoKSk7Ci0gICAgICAgIG1fc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9zYW1wbGVfbmV3KG51bGxw
dHIsIGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9zYW1wbGUuZ2V0KCkpLAotICAgICAgICAgICAgZ3N0
X3NhbXBsZV9nZXRfc2VnbWVudChtX3NhbXBsZS5nZXQoKSksIGluZm8gPyBnc3Rfc3RydWN0dXJl
X2NvcHkoaW5mbykgOiBudWxscHRyKSk7Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRXYWl0ID0g
bV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9PSBHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6VmlkZW80
TGludXg7Ci0gICAgYXV0byBwcm94eU9wZXJhdGlvbiA9IFtzaG91bGRXYWl0LCBwaXBlbGluZSA9
IHBpcGVsaW5lKCldKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KSB7Ci0g
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUsICJGbHVzaGluZyB2aWRlbyBzYW1wbGUg
JXMiLCBzaG91bGRXYWl0ID8gInN5bmNocm9ub3VzbHkiIDogIiIpOwotICAgICAgICBMb2NrSG9s
ZGVyIGxvY2tlcighc2hvdWxkV2FpdCA/ICZwcm94eS5sb2NrKCkgOiBudWxscHRyKTsKLQotICAg
ICAgICBpZiAocHJveHkuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIHByb3h5LmRyb3BDdXJyZW50
QnVmZmVyV2hpbGVQcmVzZXJ2aW5nVGV4dHVyZShzaG91bGRXYWl0KTsKLSAgICB9OwotCi0jaWYg
VVNFKE5JQ09TSUEpCi0gICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkp
OwotI2Vsc2UKLSAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2Vu
ZGlmCi19Ci0jZW5kaWYKLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpz
ZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgbV9zaXplID0gc2l6ZTsKLX0KLQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpwYWludChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoY29udGV4dC5w
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wbGF5ZXIt
PnZpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBzYW1wbGVMb2NrZXIgPSBo
b2xkTG9jayhtX3NhbXBsZU11dGV4KTsKLSAgICBpZiAoIUdTVF9JU19TQU1QTEUobV9zYW1wbGUu
Z2V0KCkpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIC8v
IEVuc3VyZSB0aGUgaW5wdXQgaXMgUkdCQS4gV2UgaGFuZGxlIFlVViB2aWRlbyBuYXRpdmVseSwg
c28gd2UgbmVlZCB0byBkbwotICAgIC8vIHRoaXMgY29udmVyc2lvbiBvbi1kZW1hbmQgaGVyZS4K
LSAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihtX3NhbXBsZS5n
ZXQoKSk7Ci0gICAgaWYgKFVOTElLRUxZKCFHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyhtX3Nh
bXBsZS5nZXQoKSk7Ci0KLSAgICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOwotICAgIGdzdF92aWRl
b19pbmZvX2luaXQoJnZpZGVvSW5mbyk7Ci0gICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2Nh
cHMoJnZpZGVvSW5mbywgY2FwcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghR1NUX1ZJ
REVPX0lORk9fSVNfUkdCKCZ2aWRlb0luZm8pKSB7Ci0gICAgICAgIGlmICghbV9jb2xvckNvbnZl
cnQpIHsKLSAgICAgICAgICAgIEdzdE1lbW9yeSogbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9y
eShidWZmZXIsIDApOwotICAgICAgICAgICAgR3N0R0xDb250ZXh0KiBjb250ZXh0ID0gKChHc3RH
TEJhc2VNZW1vcnkqKW1lbSktPmNvbnRleHQ7Ci0gICAgICAgICAgICBtX2NvbG9yQ29udmVydCA9
IGFkb3B0R1JlZihnc3RfZ2xfY29sb3JfY29udmVydF9uZXcoY29udGV4dCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFtX2NvbG9yQ29udmVydElucHV0Q2FwcyB8fCAhZ3N0X2NhcHNfaXNf
ZXF1YWwobV9jb2xvckNvbnZlcnRJbnB1dENhcHMuZ2V0KCksIGNhcHMpKSB7Ci0gICAgICAgICAg
ICBtX2NvbG9yQ29udmVydElucHV0Q2FwcyA9IGNhcHM7Ci0gICAgICAgICAgICBtX2NvbG9yQ29u
dmVydE91dHB1dENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfY29weShjYXBzKSk7Ci0jaWYgR19C
WVRFX09SREVSID09IEdfTElUVExFX0VORElBTgotICAgICAgICAgICAgY29uc3QgZ2NoYXIqIGZv
cm1hdFN0cmluZyA9IEdTVF9WSURFT19JTkZPX0hBU19BTFBIQSgmdmlkZW9JbmZvKSA/ICJSR0JB
IiA6ICJCR1J4IjsKLSNlbHNlCi0gICAgICAgICAgICBjb25zdCBnY2hhciogZm9ybWF0U3RyaW5n
ID0gR1NUX1ZJREVPX0lORk9fSEFTX0FMUEhBKCZ2aWRlb0luZm8pID8gIlJHQkEiIDogIlJHQngi
OwotI2VuZGlmCi0gICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlKG1fY29sb3JDb252ZXJ0
T3V0cHV0Q2Fwcy5nZXQoKSwgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsIGZvcm1hdFN0cmluZywg
bnVsbHB0cik7Ci0gICAgICAgICAgICBpZiAoIWdzdF9nbF9jb2xvcl9jb252ZXJ0X3NldF9jYXBz
KG1fY29sb3JDb252ZXJ0LmdldCgpLCBjYXBzLCBtX2NvbG9yQ29udmVydE91dHB1dENhcHMuZ2V0
KCkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEdSZWZQ
dHI8R3N0QnVmZmVyPiByZ2JCdWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2dsX2NvbG9yX2NvbnZlcnRf
cGVyZm9ybShtX2NvbG9yQ29udmVydC5nZXQoKSwgYnVmZmVyKSk7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSghR1NUX0lTX0JVRkZFUihyZ2JCdWZmZXIuZ2V0KCkpKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIGluZm8gPSBnc3Rfc2FtcGxlX2dldF9p
bmZvKG1fc2FtcGxlLmdldCgpKTsKLSAgICAgICAgbV9zYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X3Nh
bXBsZV9uZXcocmdiQnVmZmVyLmdldCgpLCBtX2NvbG9yQ29udmVydE91dHB1dENhcHMuZ2V0KCks
Ci0gICAgICAgICAgICBnc3Rfc2FtcGxlX2dldF9zZWdtZW50KG1fc2FtcGxlLmdldCgpKSwgaW5m
byA/IGdzdF9zdHJ1Y3R1cmVfY29weShpbmZvKSA6IG51bGxwdHIpKTsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIGF1dG8gZ3N0SW1hZ2UgPSBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UobV9zYW1w
bGUuZ2V0KCkpOwotICAgIGlmICghZ3N0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNv
bnRleHQuZHJhd0ltYWdlKGdzdEltYWdlLT5pbWFnZSgpLCByZWN0LCBnc3RJbWFnZS0+cmVjdCgp
LCB7IENvbXBvc2l0ZUNvcHksIG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCA/IG1fdmlkZW9T
b3VyY2VPcmllbnRhdGlvbiA6IEltYWdlT3JpZW50YXRpb24oKSB9KTsKLX0KLQotI2lmIFVTRShH
U1RSRUFNRVJfR0wpCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNvcHlW
aWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
UGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSAgICBV
TlVTRURfUEFSQU0oY29udGV4dCk7Ci0KLSAgICBpZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5r
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayht
X3NhbXBsZU11dGV4KTsKLQotICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0Zy
YW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9IG1ha2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4o
bV9zYW1wbGUuZ2V0KCksIG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1hcHBlckZs
YWdzLCB0cnVlKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllckJ1ZmZlcj4gbGF5ZXJCdWZmZXIgPSBmcmFtZUhvbGRlci0+cGxhdGZvcm1MYXllckJ1ZmZl
cigpOwotICAgIGlmICghbGF5ZXJCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gc2l6ZSA9IGZyYW1lSG9sZGVyLT5zaXplKCk7Ci0gICAgaWYgKG1fdmlkZW9Tb3VyY2VP
cmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKQotICAgICAgICBzaXplID0gc2l6ZS50cmFu
c3Bvc2VkU2l6ZSgpOwotCi0gICAgaWYgKCFtX3ZpZGVvVGV4dHVyZUNvcGllcikKLSAgICAgICAg
bV92aWRlb1RleHR1cmVDb3BpZXIgPSBtYWtlVW5pcXVlPFZpZGVvVGV4dHVyZUNvcGllckdTdHJl
YW1lcj4oVEVYVFVSRV9DT1BJRVJfQ09MT1JfQ09OVkVSVF9GTEFHKTsKLQotICAgIGZyYW1lSG9s
ZGVyLT53YWl0Rm9yQ1BVU3luYygpOwotCi0gICAgcmV0dXJuIG1fdmlkZW9UZXh0dXJlQ29waWVy
LT5jb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoKmxheWVyQnVmZmVyLmdldCgpLCBz
aXplLCBvdXRwdXRUZXh0dXJlLCBvdXRwdXRUYXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCBmbGlwWSwgbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uKTsKLX0KLQotTmF0
aXZlSW1hZ2VQdHIgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmF0aXZlSW1hZ2VG
b3JDdXJyZW50VGltZSgpCi17Ci0jaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQotICAgIGlmIChtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmspCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBs
ZU11dGV4KTsKLQotICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVI
b2xkZXI+IGZyYW1lSG9sZGVyID0gbWFrZVVuaXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPihtX3Nh
bXBsZS5nZXQoKSwgbV92aWRlb0RlY29kZXJQbGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3Ms
IHRydWUpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyPiBsYXllckJ1ZmZlciA9IGZyYW1lSG9sZGVyLT5wbGF0Zm9ybUxheWVyQnVmZmVyKCk7
Ci0gICAgaWYgKCFsYXllckJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBh
dXRvIHNpemUgPSBmcmFtZUhvbGRlci0+c2l6ZSgpOwotICAgIGlmIChtX3ZpZGVvU291cmNlT3Jp
ZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkKLSAgICAgICAgc2l6ZSA9IHNpemUudHJhbnNw
b3NlZFNpemUoKTsKLQotICAgIEdMQ29udGV4dCogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKCFtX3ZpZGVvVGV4dHVyZUNv
cGllcikKLSAgICAgICAgbV92aWRlb1RleHR1cmVDb3BpZXIgPSBtYWtlVW5pcXVlPFZpZGVvVGV4
dHVyZUNvcGllckdTdHJlYW1lcj4oVEVYVFVSRV9DT1BJRVJfQ09MT1JfQ09OVkVSVF9GTEFHKTsK
LQotICAgIGZyYW1lSG9sZGVyLT53YWl0Rm9yQ1BVU3luYygpOwotCi0gICAgaWYgKCFtX3ZpZGVv
VGV4dHVyZUNvcGllci0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCpsYXllckJ1
ZmZlci5nZXQoKSwgc2l6ZSwgMCwgR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgZmFsc2UsIG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbikpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZh
Y2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRF
TlRfQ09MT1JfQUxQSEEsIG1fdmlkZW9UZXh0dXJlQ29waWVyLT5yZXN1bHRUZXh0dXJlKCksIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotI2Vsc2UKLSAgICByZXR1cm4gbnVsbHB0cjsK
LSNlbmRpZgotfQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0VmlkZW9Tb3VyY2VPcmllbnRhdGlvbihJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIGlmIChtX3ZpZGVvU291cmNlT3JpZW50YXRp
b24gPT0gb3JpZW50YXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmlkZW9Tb3VyY2VP
cmllbnRhdGlvbiA9IG9yaWVudGF0aW9uOwotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAg
ICB1cGRhdGVUZXh0dXJlTWFwcGVyRmxhZ3MoKTsKLSNlbmRpZgotfQotCi0jaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp1cGRh
dGVUZXh0dXJlTWFwcGVyRmxhZ3MoKQotewotICAgIHN3aXRjaCAobV92aWRlb1NvdXJjZU9yaWVu
dGF0aW9uKSB7Ci0gICAgY2FzZSBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0OgotICAg
ICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luUmlnaHRUb3A6Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBl
ckZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRSb3RhdGVUZXh0dXJlOTA7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luQm90dG9tUmlnaHQ6Ci0g
ICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRSb3Rh
dGVUZXh0dXJlMTgwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEltYWdlT3JpZW50YXRpb246
Ok9yaWdpbkxlZnRCb3R0b206Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gVGV4dHVy
ZU1hcHBlckdMOjpTaG91bGRSb3RhdGVUZXh0dXJlMjcwOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICAvLyBGSVhNRTogSGFuZGxlIE9yaWdpblRvcFJpZ2h0LCBPcmlnaW5C
b3R0b21MZWZ0LCBPcmlnaW5MZWZ0VG9wIGFuZCBPcmlnaW5SaWdodEJvdHRvbT8KLSAgICAgICAg
bV90ZXh0dXJlTWFwcGVyRmxhZ3MgPSAwOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0jZW5k
aWYKLQotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c0Z1bGxz
Y3JlZW4oKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1NZWRpYVBsYXllcjo6TW92
aWVMb2FkVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjptb3ZpZUxvYWRUeXBl
KCkgY29uc3QKLXsKLSAgICBpZiAobV9yZWFkeVN0YXRlID09IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZykKLSAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpVbmtub3duOwotCi0gICAgaWYgKGlz
TGl2ZVN0cmVhbSgpKQotICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07Ci0K
LSAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkRvd25sb2FkOwotfQotCi0jaWYgVVNFKEdTVFJFQU1F
Ul9HTCkKLUdzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0
ZUdMQXBwU2luaygpCi17Ci0gICAgR3N0RWxlbWVudCogYXBwc2luayA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbWFrZSgiYXBwc2luayIsICJ3ZWJraXQtZ2wtdmlkZW8tc2luayIpOwotICAgIGlmICgh
YXBwc2luaykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBnX29iamVjdF9zZXQoYXBw
c2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAiZW1pdC1zaWduYWxzIiwgVFJVRSwg
Im1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7Ci0gICAgZ19zaWduYWxfY29ubmVjdChhcHBzaW5r
LCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0sobmV3U2FtcGxlQ2FsbGJhY2spLCB0aGlzKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0KGFwcHNpbmssICJuZXctcHJlcm9sbCIsIEdfQ0FMTEJBQ0sobmV3
UHJlcm9sbENhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGFwcHNpbmssICJzaW5rIikpOwotICAg
IGdzdF9wYWRfYWRkX3Byb2JlKHBhZC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0UGFkUHJvYmVUeXBl
PihHU1RfUEFEX1BST0JFX1RZUEVfUFVTSCB8IEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dO
U1RSRUFNIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSwgW10gKEdzdFBhZCosIEdz
dFBhZFByb2JlSW5mbyogaW5mbywgIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHc3RQYWRQcm9iZVJl
dHVybiB7Ci0gICAgICAgIC8vIEluIHNvbWUgcGxhdGZvcm1zIChlLmcuIE9wZW5NQVggb24gdGhl
IFJhc3BiZXJyeSBQaSkgd2hlbiBhIHJlc29sdXRpb24gY2hhbmdlIG9jY3VycyB0aGUKLSAgICAg
ICAgLy8gcGlwZWxpbmUgaGFzIHRvIGJlIGRyYWluZWQgYmVmb3JlIGEgZnJhbWUgd2l0aCB0aGUg
bmV3IHJlc29sdXRpb24gY2FuIGJlIGRlY29kZWQuCi0gICAgICAgIC8vIEluIHRoaXMgY29udGV4
dCwgaXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBkb24ndCBob2xkIHJlZmVyZW5jZXMgdG8gYW55IHBy
ZXZpb3VzIGZyYW1lCi0gICAgICAgIC8vIChlLmcuIG1fc2FtcGxlKSBzbyB0aGF0IGRlY29kaW5n
IGNhbiBjb250aW51ZS4KLSAgICAgICAgLy8gV2UgYXJlIGFsc28gbm90IHN1cHBvc2VkIHRvIGtl
ZXAgdGhlIG9yaWdpbmFsIGZyYW1lIGFmdGVyIGEgZmx1c2guCi0gICAgICAgIGlmIChpbmZvLT50
eXBlICYgR1NUX1BBRF9QUk9CRV9UWVBFX1FVRVJZX0RPV05TVFJFQU0pIHsKLSAgICAgICAgICAg
IGlmIChHU1RfUVVFUllfVFlQRShHU1RfUEFEX1BST0JFX0lORk9fUVVFUlkoaW5mbykpICE9IEdT
VF9RVUVSWV9EUkFJTikKLSAgICAgICAgICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsK
LSAgICAgICAgICAgIEdTVF9ERUJVRygiQWN0aW5nIHVwb24gRFJBSU4gcXVlcnkiKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9G
TFVTSCkgewotICAgICAgICAgICAgaWYgKEdTVF9FVkVOVF9UWVBFKEdTVF9QQURfUFJPQkVfSU5G
T19FVkVOVChpbmZvKSkgIT0gR1NUX0VWRU5UX0ZMVVNIX1NUQVJUKQotICAgICAgICAgICAgICAg
IHJldHVybiBHU1RfUEFEX1BST0JFX09LOwotICAgICAgICAgICAgR1NUX0RFQlVHKCJBY3Rpbmcg
dXBvbiBmbHVzaC1zdGFydCBldmVudCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byogcGxh
eWVyID0gc3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSo+KHVzZXJE
YXRhKTsKLSAgICAgICAgcGxheWVyLT5mbHVzaEN1cnJlbnRCdWZmZXIoKTsKLSAgICAgICAgcmV0
dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci0gICAgfSwgdGhpcywgbnVsbHB0cik7Ci0KLSAgICByZXR1
cm4gYXBwc2luazsKLX0KLQotR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6Y3JlYXRlVmlkZW9TaW5rR0woKQotewotICAgIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7
Ci0gICAgR3N0RWxlbWVudCogdmlkZW9TaW5rID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7Ci0gICAg
R3N0RWxlbWVudCogdXBsb2FkID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJnbHVwbG9hZCIs
IG51bGxwdHIpOwotICAgIEdzdEVsZW1lbnQqIGNvbG9yY29udmVydCA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbWFrZSgiZ2xjb2xvcmNvbnZlcnQiLCBudWxscHRyKTsKLSAgICBHc3RFbGVtZW50KiBh
cHBzaW5rID0gY3JlYXRlR0xBcHBTaW5rKCk7Ci0KLSAgICAvLyBnbHNpbmtiaW4gaXMgbm90IHVz
ZWQgYmVjYXVzZSBpdCBpbmNsdWRlcyBnbGNvbG9yY29udmVydCB3aGljaCBvbmx5IHByb2Nlc3Mg
UkdCQSwKLSAgICAvLyBidXQgd2UgY2FuIGRpc3BsYXkgWVVWIGZvcm1hdHMgdG9vLgotCi0gICAg
aWYgKCFhcHBzaW5rIHx8ICF1cGxvYWQgfHwgIWNvbG9yY29udmVydCkgewotICAgICAgICBHU1Rf
V0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBHc3RHTCBlbGVtZW50cyIpOwotICAgICAgICBnc3Rf
b2JqZWN0X3VucmVmKHZpZGVvU2luayk7Ci0KLSAgICAgICAgaWYgKHVwbG9hZCkKLSAgICAgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYodXBsb2FkKTsKLSAgICAgICAgaWYgKGNvbG9yY29udmVydCkK
LSAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoY29sb3Jjb252ZXJ0KTsKLSAgICAgICAgaWYg
KGFwcHNpbmspCi0gICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKGFwcHNpbmspOwotCi0gICAg
ICAgIGdfd2FybmluZygiV2ViS2l0IHdhc24ndCBhYmxlIHRvIGZpbmQgdGhlIEdTdHJlYW1lciBv
cGVuZ2wgcGx1Z2luLiBIYXJkd2FyZS1hY2NlbGVyYXRlZCB6ZXJvLWNvcHkgdmlkZW8gcmVuZGVy
aW5nIGNhbid0IGJlIGVuYWJsZWQgd2l0aG91dCB0aGlzIHBsdWdpbi4iKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKHZpZGVv
U2luayksIHVwbG9hZCwgY29sb3Jjb252ZXJ0LCBhcHBzaW5rLCBudWxscHRyKTsKLQotICAgIC8v
IFdvcmthcm91bmQgdW50aWwgd2UgY2FuIGRlcGVuZCBvbiBHU3RyZWFtZXIgMS4xNi4yLgotICAg
IC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMt
YmFzZS9jb21taXQvOGQzMmRlMDkwNTU0Y2YyOWZlMzU5ZjgzYWE0NjAwMGJhNjU4YTY5MwotICAg
IC8vIEZvcmNpbmcgYSBjb2xvciBjb252ZXJzaW9uIHRvIFJHQkEgaGVyZSBhbGxvd3MgZ2x1cGxv
YWQgdG8gaW50ZXJuYWxseSB1c2UKLSAgICAvLyBhbiB1cGxvYWRlciB0aGF0IGFkZHMgYSBWaWRl
b01ldGEsIHRocm91Z2ggdGhlIFRleHR1cmVVcGxvYWRNZXRhIGNhcHMKLSAgICAvLyBmZWF0dXJl
LCB3aXRob3V0IG5lZWRpbmcgdGhlIHBhdGNoIGFib3ZlLiBIb3dldmVyIHRoaXMgc3BlY2lmaWMg
Y2FwcwotICAgIC8vIGZlYXR1cmUgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCBmcm9tIEdTdHJlYW1l
ciBzbyBpdCBpcyBjb25zaWRlcmVkIGEKLSAgICAvLyBzaG9ydC10ZXJtIHdvcmthcm91bmQuIFRo
aXMgY29kZSBwYXRoIG1vc3QgbGlrZWx5IHdpbGwgaGF2ZSBhIG5lZ2F0aXZlCi0gICAgLy8gcGVy
Zm9ybWFuY2UgaW1wYWN0IG9uIGVtYmVkZGVkIHBsYXRmb3JtcyBhcyB3ZWxsLiBEb3duc3RyZWFt
IGVtYmVkZGVycwotICAgIC8vIGFyZSBoaWdobHkgZW5jb3VyYWdlZCB0byBjaGVycnktcGljayB0
aGUgcGF0Y2ggbGlua2VkIGFib3ZlIGluIHRoZWlyIEJTUAotICAgIC8vIGFuZCBzZXQgdGhlIFdF
QktJVF9HU1RfTk9fUkdCQV9DT05WRVJTSU9OIGVudmlyb25tZW50IHZhcmlhYmxlIHVudGlsCi0g
ICAgLy8gR1N0cmVhbWVyIDEuMTYuMiBpcyByZWxlYXNlZC4KLSAgICAvLyBTZWUgYWxzbyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNDIyCi0gICAgR1JlZlB0cjxH
c3RDYXBzPiBjYXBzOwotICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTYsIDIpIHx8
IGdldGVudigiV0VCS0lUX0dTVF9OT19SR0JBX0NPTlZFUlNJT04iKSkKLSAgICAgICAgY2FwcyA9
IGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZygidmlkZW8veC1yYXcsIGZvcm1hdCA9IChz
dHJpbmcpICIgR1NUX0dMX0NBUFNfRk9STUFUKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEdTVF9J
TkZPX09CSkVDVChwaXBlbGluZSgpLCAiRm9yY2luZyBSR0JBIGFzIEdTdHJlYW1lciBpcyBub3Qg
bmV3IGVub3VnaC4iKTsKLSAgICAgICAgY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0
cmluZygidmlkZW8veC1yYXcsIGZvcm1hdCA9IChzdHJpbmcpIFJHQkEiKSk7Ci0gICAgfQotCi0g
ICAgZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzKGNhcHMuZ2V0KCksIDAsIGdzdF9jYXBzX2ZlYXR1cmVz
X25ldyhHU1RfQ0FQU19GRUFUVVJFX01FTU9SWV9HTF9NRU1PUlksIG51bGxwdHIpKTsKLSAgICBn
X29iamVjdF9zZXQoYXBwc2luaywgImNhcHMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKLQotICAg
IHJlc3VsdCAmPSBnc3RfZWxlbWVudF9saW5rX21hbnkodXBsb2FkLCBjb2xvcmNvbnZlcnQsIGFw
cHNpbmssIG51bGxwdHIpOwotCi0gICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihn
c3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCh1cGxvYWQsICJzaW5rIikpOwotICAgIGdzdF9lbGVt
ZW50X2FkZF9wYWQodmlkZW9TaW5rLCBnc3RfZ2hvc3RfcGFkX25ldygic2luayIsIHBhZC5nZXQo
KSkpOwotCi0gICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0
byBsaW5rIEdzdEdMIGVsZW1lbnRzIik7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYodmlkZW9T
aW5rKTsKLSAgICAgICAgdmlkZW9TaW5rID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIHZp
ZGVvU2luazsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjplbnN1
cmVHTFZpZGVvU2lua0NvbnRleHQoKQotewotICAgIGlmICghbV9nbERpc3BsYXlFbGVtZW50Q29u
dGV4dCkKLSAgICAgICAgbV9nbERpc3BsYXlFbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1
ZXN0R0xDb250ZXh0KEdTVF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSkpOwotCi0gICAgaWYgKG1f
Z2xEaXNwbGF5RWxlbWVudENvbnRleHQpCi0gICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0
KG1fdmlkZW9TaW5rLmdldCgpLCBtX2dsRGlzcGxheUVsZW1lbnRDb250ZXh0LmdldCgpKTsKLQot
ICAgIGlmICghbV9nbEFwcEVsZW1lbnRDb250ZXh0KQotICAgICAgICBtX2dsQXBwRWxlbWVudENv
bnRleHQgPSBhZG9wdEdSZWYocmVxdWVzdEdMQ29udGV4dCgiZ3N0LmdsLmFwcF9jb250ZXh0Iikp
OwotCi0gICAgaWYgKG1fZ2xBcHBFbGVtZW50Q29udGV4dCkKLSAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X2NvbnRleHQobV92aWRlb1NpbmsuZ2V0KCksIG1fZ2xBcHBFbGVtZW50Q29udGV4dC5nZXQo
KSk7Ci19Ci0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKLQotI2lmIFVTRShHU1RSRUFNRVJf
SE9MRVBVTkNIKQotc3RhdGljIHZvaWQgc2V0UmVjdGFuZ2xlVG9WaWRlb1NpbmsoR3N0RWxlbWVu
dCogdmlkZW9TaW5rLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIC8vIEhlcmUgZ29lcyB0
aGUgcGxhdGZvcm0tZGVwZW5kYW50IGNvZGUgdG8gc2V0IHRvIHRoZSB2aWRlb1NpbmsgdGhlIHNp
emUKLSAgICAvLyBhbmQgcG9zaXRpb24gb2YgdGhlIHZpZGVvIHJlbmRlcmluZyB3aW5kb3cuIE1h
cmsgdGhlbSB1bnVzZWQgYXMgZGVmYXVsdC4KLSAgICBVTlVTRURfUEFSQU0odmlkZW9TaW5rKTsK
LSAgICBVTlVTRURfUEFSQU0ocmVjdCk7Ci19Ci0KLWNsYXNzIEdTdHJlYW1lckhvbGVQdW5jaENs
aWVudCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcjo6SG9sZVB1bmNo
Q2xpZW50IHsKLXB1YmxpYzoKLSAgICBHU3RyZWFtZXJIb2xlUHVuY2hDbGllbnQoR1JlZlB0cjxH
c3RFbGVtZW50PiYmIHZpZGVvU2luaykgOiBtX3ZpZGVvU2luayhXVEZNb3ZlKHZpZGVvU2luaykp
IHsgfTsKLSAgICB2b2lkIHNldFZpZGVvUmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHJlY3QpIGZp
bmFsIHsgc2V0UmVjdGFuZ2xlVG9WaWRlb1NpbmsobV92aWRlb1NpbmsuZ2V0KCksIHJlY3QpOyB9
Ci1wcml2YXRlOgotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92aWRlb1Npbms7Ci19OwotCi1H
c3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjcmVhdGVIb2xlUHVu
Y2hWaWRlb1NpbmsoKQotewotICAgIC8vIEhlcmUgZ29lcyB0aGUgcGxhdGZvcm0tZGVwZW5kYW50
IGNvZGUgdG8gY3JlYXRlIHRoZSB2aWRlb1NpbmsuIEFzIGEgZGVmYXVsdAotICAgIC8vIHdlIHVz
ZSBhIGZha2VWaWRlb1Npbmsgc28gbm90aGluZyBpcyBkcmF3biB0byB0aGUgcGFnZS4KLSAgICBH
c3RFbGVtZW50KiB2aWRlb1NpbmsgPSAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJmYWtldmlk
ZW9zaW5rIiwgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gdmlkZW9TaW5rOwotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnB1c2hOZXh0SG9sZVB1bmNoQnVmZmVyKCkK
LXsKLSAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KLSAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQotICAgICAgICB7Ci0gICAgICAgICAgICBMb2Nr
SG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOwotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9IG1ha2VVbmlx
dWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KDAsIG1fc2l6ZSwgVGV4dHVyZU1h
cHBlckdMOjpTaG91bGROb3RCbGVuZCwgR0xfRE9OVF9DQVJFKTsKLSAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxHU3RyZWFtZXJIb2xlUHVuY2hDbGllbnQ+IGhvbGVQdW5jaENsaWVudCA9IG1h
a2VVbmlxdWU8R1N0cmVhbWVySG9sZVB1bmNoQ2xpZW50PihtX3ZpZGVvU2luay5nZXQoKSk7Ci0g
ICAgICAgICAgICBsYXllckJ1ZmZlci0+c2V0SG9sZVB1bmNoQ2xpZW50KFdURk1vdmUoaG9sZVB1
bmNoQ2xpZW50KSk7Ci0gICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxh
eWVyQnVmZmVyKSk7Ci0gICAgICAgIH07Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAgICBwcm94eU9w
ZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4o
bV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQotICAgIHByb3h5T3BlcmF0
aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi1Hc3RFbGVt
ZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjcmVhdGVWaWRlb1NpbmsoKQot
ewotICAgIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7Ci0KLSNpZiBVU0UoR1NU
UkVBTUVSX0hPTEVQVU5DSCkKLSAgICBtX3ZpZGVvU2luayA9IGNyZWF0ZUhvbGVQdW5jaFZpZGVv
U2luaygpOwotICAgIHB1c2hOZXh0SG9sZVB1bmNoQnVmZmVyKCk7Ci0gICAgcmV0dXJuIG1fdmlk
ZW9TaW5rLmdldCgpOwotI2VuZGlmCi0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGlmICht
X3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQpCi0gICAgICAgIG1fdmlkZW9TaW5rID0gY3JlYXRl
VmlkZW9TaW5rR0woKTsKLSNlbmRpZgotCi0gICAgaWYgKCFtX3ZpZGVvU2luaykgewotICAgICAg
ICBtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmsgPSB0cnVlOwotICAgICAgICBtX3ZpZGVvU2luayA9
IHdlYmtpdFZpZGVvU2lua05ldygpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV92aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0socmVwYWlu
dENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3Zp
ZGVvU2luay5nZXQoKSwgInJlcGFpbnQtY2FuY2VsbGVkIiwgR19DQUxMQkFDSyhyZXBhaW50Q2Fu
Y2VsbGVkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICB9Ci0KLSAgICBHc3RFbGVtZW50KiB2aWRlb1Np
bmsgPSBudWxscHRyOwotI2lmIEVOQUJMRShNRURJQV9TVEFUSVNUSUNTKQotICAgIG1fZnBzU2lu
ayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZnBzZGlzcGxheXNpbmsiLCAic2luayIpOwot
ICAgIGlmIChtX2Zwc1NpbmspIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fZnBzU2luay5nZXQo
KSwgInNpbGVudCIsIFRSVUUgLCBudWxscHRyKTsKLQotICAgICAgICAvLyBUdXJuIG9mZiB0ZXh0
IG92ZXJsYXkgdW5sZXNzIHRyYWNpbmcgaXMgZW5hYmxlZC4KLSAgICAgICAgaWYgKGdzdF9kZWJ1
Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcpIDwgR1NU
X0xFVkVMX1RSQUNFKQotICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fZnBzU2luay5nZXQoKSwg
InRleHQtb3ZlcmxheSIsIEZBTFNFICwgbnVsbHB0cik7Ci0KLSAgICAgICAgaWYgKGdfb2JqZWN0
X2NsYXNzX2ZpbmRfcHJvcGVydHkoR19PQkpFQ1RfR0VUX0NMQVNTKG1fZnBzU2luay5nZXQoKSks
ICJ2aWRlby1zaW5rIikpIHsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmsuZ2V0
KCksICJ2aWRlby1zaW5rIiwgbV92aWRlb1NpbmsuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAg
ICAgdmlkZW9TaW5rID0gbV9mcHNTaW5rLmdldCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG1fZnBzU2luayA9IG51bGxwdHI7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAoIW1fZnBz
U2luaykKLSAgICAgICAgdmlkZW9TaW5rID0gbV92aWRlb1NpbmsuZ2V0KCk7Ci0KLSAgICBBU1NF
UlQodmlkZW9TaW5rKTsKLQotICAgIHJldHVybiB2aWRlb1Npbms7Ci19Ci0KLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U3RyZWFtVm9sdW1lRWxlbWVudChHc3RTdHJl
YW1Wb2x1bWUqIHZvbHVtZSkKLXsKLSAgICBBU1NFUlQoIW1fdm9sdW1lRWxlbWVudCk7Ci0gICAg
bV92b2x1bWVFbGVtZW50ID0gdm9sdW1lOwotCi0gICAgLy8gV2UgZG9uJ3Qgc2V0IHRoZSBpbml0
aWFsIHZvbHVtZSBiZWNhdXNlIHdlIHRydXN0IHRoZSBzaW5rIHRvIGtlZXAgaXQgZm9yIHVzLiBT
ZWUKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4OTc0
IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgIGlmICghbV9wbGF5ZXItPnBsYXRmb3JtVm9sdW1l
Q29uZmlndXJhdGlvblJlcXVpcmVkKCkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiU2V0dGluZyBzdHJlYW0gdm9sdW1lIHRvICVmIiwgbV9wbGF5ZXItPnZvbHVtZSgp
KTsKLSAgICAgICAgZ3N0X3N0cmVhbV92b2x1bWVfc2V0X3ZvbHVtZShtX3ZvbHVtZUVsZW1lbnQu
Z2V0KCksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9MSU5FQVIsIHN0YXRpY19jYXN0PGRvdWJs
ZT4obV9wbGF5ZXItPnZvbHVtZSgpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIk5vdCBzZXR0aW5nIHN0cmVhbSB2b2x1bWUsIHRydXN0aW5nIHN5
c3RlbSBvbmUiKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcg
c3RyZWFtIG11dGVkICVzIiwgdG9TdHJpbmcobV9wbGF5ZXItPm11dGVkKCkpLnV0ZjgoKS5kYXRh
KCkpOwotICAgIGdfb2JqZWN0X3NldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgbV9w
bGF5ZXItPm11dGVkKCksIG51bGxwdHIpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyh2b2x1
bWVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV92b2x1bWVFbGVtZW50LmdldCgpLCAibm90aWZ5OjptdXRlIiwgR19DQUxMQkFDSyhtdXRlQ2hh
bmdlZENhbGxiYWNrKSwgdGhpcyk7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6OmRlY29kZWRGcmFtZUNvdW50KCkgY29uc3QKLXsKLSAgICBndWludDY0IGRl
Y29kZWRGcmFtZXMgPSAwOwotICAgIGlmIChtX2Zwc1NpbmspCi0gICAgICAgIGdfb2JqZWN0X2dl
dChtX2Zwc1NpbmsuZ2V0KCksICJmcmFtZXMtcmVuZGVyZWQiLCAmZGVjb2RlZEZyYW1lcywgbnVs
bHB0cik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWNvZGVkRnJhbWVzKTsK
LX0KLQotdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZHJvcHBlZEZy
YW1lQ291bnQoKSBjb25zdAotewotICAgIGd1aW50NjQgZnJhbWVzRHJvcHBlZCA9IDA7Ci0gICAg
aWYgKG1fZnBzU2luaykKLSAgICAgICAgZ19vYmplY3RfZ2V0KG1fZnBzU2luay5nZXQoKSwgImZy
YW1lcy1kcm9wcGVkIiwgJmZyYW1lc0Ryb3BwZWQsIG51bGxwdHIpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZnJhbWVzRHJvcHBlZCk7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0Ci17
Ci0gICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFU
X0JZVEVTKTsKLSAgICBnaW50NjQgcG9zaXRpb24gPSAwOwotCi0gICAgaWYgKGF1ZGlvU2luaygp
ICYmIGdzdF9lbGVtZW50X3F1ZXJ5KGF1ZGlvU2luaygpLCBxdWVyeSkpCi0gICAgICAgIGdzdF9x
dWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKLQotICAgIGdzdF9xdWVy
eV91bnJlZihxdWVyeSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlv
bik7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZpZGVv
RGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0Ci17Ci0gICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1
ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX0JZVEVTKTsKLSAgICBnaW50NjQgcG9zaXRpb24g
PSAwOwotCi0gICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fdmlkZW9TaW5rLmdldCgpLCBxdWVy
eSkpCi0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9u
KTsKLQotICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihwb3NpdGlvbik7Ci19Ci0KLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjppbml0aWFsaXphdGlvbkRhdGFF
bmNvdW50ZXJlZChJbml0RGF0YSYmIGluaXREYXRhKQotewotICAgIEFTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgaW5pdERhdGEgPSBXVEZNb3ZlKGluaXREYXRhKV0gewotICAgICAgICBp
ZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEdTVF9ERUJVRygi
c2NoZWR1bGluZyBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCBldmVudCBvZiBzaXplICV6
dSIsIGluaXREYXRhLnBheWxvYWQoKS0+c2l6ZSgpKTsKLSAgICAgICAgR1NUX01FTURVTVAoImlu
aXQgZGF0YXMiLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbml0RGF0YS5wYXls
b2FkKCktPmRhdGEoKSksIGluaXREYXRhLnBheWxvYWQoKS0+c2l6ZSgpKTsKLSAgICAgICAgd2Vh
a1RoaXMtPm1fcGxheWVyLT5pbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChpbml0RGF0YS5w
YXlsb2FkQ29udGFpbmVyVHlwZSgpLCBpbml0RGF0YS5wYXlsb2FkKCktPnRyeUNyZWF0ZUFycmF5
QnVmZmVyKCkpOwotICAgIH0pOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OmNkbUluc3RhbmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQotewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9jZG1JbnN0YW5jZSA9PSAmaW5z
dGFuY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9waXBlbGluZSkgewotICAgICAg
ICBHU1RfRVJST1IoIm5vIHBpcGVsaW5lIHlldCIpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY2RtSW5zdGFuY2UgPSAmaW5z
dGFuY2U7Ci0KLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0
X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNlIiwgRkFMU0UpKTsKLSAgICBHc3RTdHJ1Y3R1
cmUqIGNvbnRleHRTdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoY29u
dGV4dC5nZXQoKSk7Ci0gICAgZ3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNk
bS1pbnN0YW5jZSIsIEdfVFlQRV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdl
dCgpLCBudWxscHRyKTsKLSAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVCht
X3BpcGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQoKSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNU
KG1fcGlwZWxpbmUuZ2V0KCksICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBj
b250ZXh0IiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSk7Ci0KLSAgICBtX2NkbUF0
dGFjaG1lbnRTZW1hcGhvcmUuc2lnbmFsKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6Y2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2Up
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmIChtX2NkbUluc3RhbmNl
ICE9ICZpbnN0YW5jZSkgewotICAgICAgICBHU1RfV0FSTklORygicGFzc2VkIENETUluc3RhbmNl
ICVwIGlzIGRpZmZlcmVudCBmcm9tIHN0b3JlZCBvbmUgJXAiLCAmaW5zdGFuY2UsIG1fY2RtSW5z
dGFuY2UuZ2V0KCkpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX3BpcGVsaW5lKTsKLQotICAgIEdTVF9ERUJVR19P
QkpFQ1QobV9waXBlbGluZS5nZXQoKSwgImRldGFjaGluZyBDRE0gaW5zdGFuY2UgJXAsIHNldHRp
bmcgZW1wdHkgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UuZ2V0KCkpOwotICAgIG1fY2RtSW5zdGFu
Y2UgPSBudWxscHRyOwotCi0gICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRH
UmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNFKSk7Ci0gICAgZ3N0
X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNvbnRl
eHQuZ2V0KCkpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmF0
dGVtcHRUb0RlY3J5cHRXaXRoSW5zdGFuY2UoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQotewotICAg
IEFTU0VSVChtX2NkbUluc3RhbmNlLmdldCgpID09ICZpbnN0YW5jZSk7Ci0gICAgR1NUX1RSQUNF
KCJpbnN0YW5jZSAlcCwgY3VycmVudCBzdG9yZWQgJXAiLCAmaW5zdGFuY2UsIG1fY2RtSW5zdGFu
Y2UuZ2V0KCkpOwotICAgIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwotfQot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmF0dGVtcHRUb0RlY3J5cHRX
aXRoTG9jYWxJbnN0YW5jZSgpCi17Ci0gICAgYm9vbCBldmVudEhhbmRsZWQgPSBnc3RfZWxlbWVu
dF9zZW5kX2V2ZW50KHBpcGVsaW5lKCksIGdzdF9ldmVudF9uZXdfY3VzdG9tKEdTVF9FVkVOVF9D
VVNUT01fRE9XTlNUUkVBTV9PT0IsIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhdHRlbXB0LXRv
LWRlY3J5cHQiKSkpOwotICAgIEdTVF9ERUJVRygiYXR0ZW1wdGluZyB0byBkZWNyeXB0LCBldmVu
dCBoYW5kbGVkICVzIiwgYm9vbEZvclByaW50aW5nKGV2ZW50SGFuZGxlZCkpOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmhhbmRsZVByb3RlY3Rpb25FdmVudChH
c3RFdmVudCogZXZlbnQpCi17Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90
ZWN0aW9uTXV0ZXgpOwotICAgICAgICBpZiAobV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy5jb250
YWlucyhHU1RfRVZFTlRfU0VRTlVNKGV2ZW50KSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgImV2ZW50ICV1IGFscmVhZHkgaGFuZGxlZCIsIEdTVF9FVkVOVF9T
RVFOVU0oZXZlbnQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJoYW5kbGluZyBldmVudCAldSBmcm9tIE1T
RSIsIEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQpKTsKLSAgICBjb25zdCBjaGFyKiBldmVudEtleVN5
c3RlbVVVSUQgPSBudWxscHRyOwotICAgIEdzdEJ1ZmZlciogaW5pdERhdGEgPSBudWxscHRyOwot
ICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2ZW50LCAmZXZlbnRLZXlTeXN0ZW1VVUlE
LCAmaW5pdERhdGEsIG51bGxwdHIpOwotICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVk
KHtldmVudEtleVN5c3RlbVVVSUQsIGluaXREYXRhfSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0V2FpdGluZ0ZvcktleShib29sIHdhaXRpbmdGb3JLZXkp
Ci17Ci0gICAgLy8gV2UgYmFpbCBvdXQgaWYgdmFsdWVzIGRpZCBub3QgY2hhbmdlIG9yIGlmIHdl
IGFyZSByZXF1ZXN0ZWQgdG8gbm90IHdhaXQgYW55bW9yZSBidXQgdGhlcmUgYXJlIHN0aWxsIHdh
aXRpbmcgZGVjcnlwdG9ycy4KLSAgICBHU1RfVFJBQ0UoIndhaXRpbmdGb3JLZXkgJXMsIG1fd2Fp
dGluZ0ZvcktleSAlcyIsIGJvb2xGb3JQcmludGluZyh3YWl0aW5nRm9yS2V5KSwgYm9vbEZvclBy
aW50aW5nKG1fd2FpdGluZ0ZvcktleSkpOwotICAgIGlmICh3YWl0aW5nRm9yS2V5ID09IG1fd2Fp
dGluZ0ZvcktleSB8fCAoIXdhaXRpbmdGb3JLZXkgJiYgdGhpcy0+d2FpdGluZ0ZvcktleSgpKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV93YWl0aW5nRm9yS2V5ID0gd2FpdGluZ0ZvcktleTsK
LSAgICBHU1RfREVCVUcoIndhaXRpbmcgZm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZvclByaW50
aW5nKG1fd2FpdGluZ0ZvcktleSkpOwotICAgIG1fcGxheWVyLT53YWl0aW5nRm9yS2V5Q2hhbmdl
ZCgpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OndhaXRpbmdG
b3JLZXkoKSBjb25zdAotewotICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1f
cGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7Ci0KLSAgICBib29sIHJlc3VsdCA9
IGZhbHNlOwotICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVy
eV9uZXdfY3VzdG9tKEdTVF9RVUVSWV9DVVNUT00sIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJh
bnktZGVjcnlwdG9yLXdhaXRpbmctZm9yLWtleSIpKSk7Ci0gICAgaWYgKHN0YXRlID49IEdTVF9T
VEFURV9QQVVTRUQpIHsKLSAgICAgICAgcmVzdWx0ID0gZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBl
bGluZS5nZXQoKSwgcXVlcnkuZ2V0KCkpOwotICAgICAgICBHU1RfVFJBQ0UoInF1ZXJ5IHJlc3Vs
dCAlcywgb24gJXMiLCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSwgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUoc3RhdGUpKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlID49IEdTVF9TVEFURV9SRUFE
WSkgewotICAgICAgICAvLyBSdW5uaW5nIGEgcXVlcnkgaW4gdGhlIHBpcGVsaW5lIGlzIGVhc2ll
ciBidXQgaXQgb25seSB3b3JrcyB3aGVuIHRoZSBwaXBlbGluZSBpcyBzZXQgdXAgYW5kIHJ1bm5p
bmcsIG90aGVyd2lzZSB3ZSBuZWVkIHRvIGluc3BlY3QgaXQgYW5kIGFzayB0aGUgZGVjcnlwdG9y
cyBkaXJlY3RseS4KLSAgICAgICAgR1VuaXF1ZVB0cjxHc3RJdGVyYXRvcj4gaXRlcmF0b3IoZ3N0
X2Jpbl9pdGVyYXRlX3JlY3Vyc2UoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSkpOwotICAgICAg
ICBHc3RJdGVyYXRvclJlc3VsdCBpdGVyYXRvclJlc3VsdDsKLSAgICAgICAgZG8gewotICAgICAg
ICAgICAgaXRlcmF0b3JSZXN1bHQgPSBnc3RfaXRlcmF0b3JfZm9sZChpdGVyYXRvci5nZXQoKSwg
W10oY29uc3QgR1ZhbHVlICppdGVtLCBHVmFsdWUgKiwgZ3BvaW50ZXIgZGF0YSkgLT4gZ2Jvb2xl
YW4gewotICAgICAgICAgICAgICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSBHU1RfRUxFTUVOVChn
X3ZhbHVlX2dldF9vYmplY3QoaXRlbSkpOwotICAgICAgICAgICAgICAgIEdzdFF1ZXJ5KiBxdWVy
eSA9IEdTVF9RVUVSWShkYXRhKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gIVdFQktJVF9JU19N
RURJQV9DRU5DX0RFQ1JZUFQoZWxlbWVudCkgfHwgIWdzdF9lbGVtZW50X3F1ZXJ5KGVsZW1lbnQs
IHF1ZXJ5KTsKLSAgICAgICAgICAgIH0sIG51bGxwdHIsIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAg
ICAgIGlmIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgICAgICAg
ICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMoaXRlcmF0b3IuZ2V0KCkpOwotICAgICAgICB9IHdo
aWxlIChpdGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKTsKLSAgICAgICAgaWYg
KGl0ZXJhdG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9FUlJPUikKLSAgICAgICAgICAgIEdTVF9X
QVJOSU5HKCJpdGVyYXRvciByZXR1cm5lZCBhbiBlcnJvciIpOwotICAgICAgICByZXN1bHQgPSBp
dGVyYXRvclJlc3VsdCA9PSBHU1RfSVRFUkFUT1JfT0s7Ci0gICAgICAgIEdTVF9UUkFDRSgiaXRl
cmF0b3IgcmVzdWx0ICVkLCB3YWl0aW5nICVzIiwgaXRlcmF0b3JSZXN1bHQsIGJvb2xGb3JQcmlu
dGluZyhyZXN1bHQpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0K
LWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c3VwcG9ydHNLZXlTeXN0ZW0o
Y29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKLQotI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0gICAg
cmVzdWx0ID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjppc0NsZWFyS2V5S2V5U3lzdGVtKGtleVN5
c3RlbSk7Ci0jZW5kaWYKLQotICAgIEdTVF9ERUJVRygiY2hlY2tpbmcgZm9yIEtleVN5c3RlbSBz
dXBwb3J0IHdpdGggJXMgYW5kIHR5cGUgJXM6ICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCks
IG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCksIGJvb2xGb3JQcmludGluZyhyZXN1bHQpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OmV4dGVuZGVkU3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5n
aW5lU3VwcG9ydFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5
cGUgcmVzdWx0KQotewotICAgIFVOVVNFRF9QQVJBTShwYXJhbWV0ZXJzKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi19Ci0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFiNWE5M2RmNTZjOTE0NTM1MjU4ZDMxNGU3YzJlNzQ2YTU5NmNmYWYu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyNCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LCAyMDA5IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwLCAyMDE1LCAyMDE2IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAo
QykgMjAxNSwgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZV9oCi0jZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2VfaAotI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKLQotI2luY2x1ZGUg
IkdTdHJlYW1lckNvbW1vbi5oIgotI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgot
I2luY2x1ZGUgIk1haW5UaHJlYWROb3RpZmllci5oIgotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJp
dmF0ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0j
aW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KLSNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaD4KLQot
I2lmIFVTRShHU1RSRUFNRVJfR0wpCi0jaWYgVVNFKExJQkVQT1hZKQotLy8gSW5jbHVkZSB0aGUg
PGVwb3h5L2dsLmg+IGhlYWRlciBiZWZvcmUgPGdzdC9nbC9nbC5oPi4KLSNpbmNsdWRlIDxlcG94
eS9nbC5oPgotCi0vLyBXb3JrYXJvdW5kIGJ1aWxkIGlzc3VlIHdpdGggUlBpIHVzZXJsYW5kIEdM
RVN2MiBoZWFkZXJzIGFuZCBsaWJlcG94eSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTg1NjM5Pgot
I2lmICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNCwgMCkKLSNpbmNsdWRlIDxnc3QvZ2wvZ3N0Z2xj
b25maWcuaD4KLSNpZiBkZWZpbmVkKEdTVF9HTF9IQVZFX1dJTkRPV19ESVNQTUFOWCkgJiYgR1NU
X0dMX0hBVkVfV0lORE9XX0RJU1BNQU5YCi0jZGVmaW5lIF9fZ2wyX2hfCi0jdW5kZWYgR1NUX0dM
X0hBVkVfR0xTWU5DCi0jZGVmaW5lIEdTVF9HTF9IQVZFX0dMU1lOQyAxCi0jZW5kaWYKLSNlbmRp
ZiAvLyAhR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTQsIDApCi0jZW5kaWYgLy8gVVNFKExJQkVQT1hZ
KQotCi0jZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCi0jaW5jbHVkZSA8Z3N0L2dsL2dsLmg+
Ci0jdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKLSNlbmRpZgotCi0jaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotI2lmIFVTRShOSUNPU0lB
KQotI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgotI2Vs
c2UKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIK
LSNlbmRpZgotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3Ry
ZWFtVm9sdW1lOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdFZpZGVvSW5mbyBHc3RWaWRlb0luZm87Ci10
eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKLXR5cGVkZWYgc3RydWN0
IF9Hc3RHTERpc3BsYXkgR3N0R0xEaXNwbGF5OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEJpdG1hcFRleHR1cmVHTDsKLWNsYXNzIEdMQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIElu
dFJlY3Q7Ci1jbGFzcyBWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI7Ci0KLSNpZiBVU0UoVEVY
VFVSRV9NQVBQRVJfR0wpCi1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Owot
I2VuZGlmCi0KLXZvaWQgcmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50cygpOwotCi0vLyBV
c2UgZWFnZXIgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBzaW5jZSB3ZSBj
YWxsIG1ha2VXZWFrUHRyKCkgZnJvbSBhbm90aGVyIHRocmVhZC4KLWNsYXNzIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNl
LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSwg
V2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+Ci0jaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQotI2lmIFVTRShOSUNPU0lBKQotICAgICwgcHVibGljIE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgLCBwdWJsaWMgUGxhdGZv
cm1MYXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplRGVidWdDYXRlZ29yeSgpOwotCi0g
ICAgdmlydHVhbCB+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSgpOwotCi0gICAgRmxv
YXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldFZvbHVt
ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgZmxvYXQgdm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGJvb2wgZW5zdXJlR3N0R0xDb250ZXh0KCk7Ci0g
ICAgR3N0Q29udGV4dCogcmVxdWVzdEdMQ29udGV4dChjb25zdCBjaGFyKiBjb250ZXh0VHlwZSk7
Ci0jZW5kaWYKLSAgICB2b2lkIHNldE11dGVkKGJvb2wpIG92ZXJyaWRlOwotICAgIGJvb2wgbXV0
ZWQoKSBjb25zdDsKLQotICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRl
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIG92ZXJyaWRl
IHsgfQotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzaXplQ2hhbmdlZCgpOwotCi0gICAgLy8gUHJlZmVyIE1lZGlhVGltZSBiYXNlZCBtZXRob2Rz
IG92ZXIgZmxvYXQgYmFzZWQuCi0gICAgZmxvYXQgZHVyYXRpb24oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBkdXJhdGlvbk1lZGlhVGltZSgpLnRvRmxvYXQoKTsgfQotICAgIGRvdWJsZSBkdXJh
dGlvbkRvdWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGR1cmF0aW9uTWVkaWFUaW1lKCku
dG9Eb3VibGUoKTsgfQotICAgIE1lZGlhVGltZSBkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsgfQotICAgIGZsb2F0IGN1cnJl
bnRUaW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gY3VycmVudE1lZGlhVGltZSgpLnRvRmxv
YXQoKTsgfQotICAgIGRvdWJsZSBjdXJyZW50VGltZURvdWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGN1cnJlbnRNZWRpYVRpbWUoKS50b0RvdWJsZSgpOyB9Ci0gICAgTWVkaWFUaW1lIGN1
cnJlbnRNZWRpYVRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBNZWRpYVRpbWU6Onplcm9U
aW1lKCk7IH0KLSAgICB2b2lkIHNlZWsoZmxvYXQgdGltZSkgb3ZlcnJpZGUgeyBzZWVrKE1lZGlh
VGltZTo6Y3JlYXRlV2l0aEZsb2F0KHRpbWUpKTsgfQotICAgIHZvaWQgc2Vla0RvdWJsZShkb3Vi
bGUgdGltZSkgb3ZlcnJpZGUgeyBzZWVrKE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSh0aW1l
KSk7IH0KLSAgICB2b2lkIHNlZWsoY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGUgeyB9Ci0gICAg
ZmxvYXQgbWF4VGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbWF4TWVkaWFU
aW1lU2Vla2FibGUoKS50b0Zsb2F0KCk7IH0KLSAgICBNZWRpYVRpbWUgbWF4TWVkaWFUaW1lU2Vl
a2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7IH0K
LSAgICBkb3VibGUgbWluVGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbWlu
TWVkaWFUaW1lU2Vla2FibGUoKS50b0Zsb2F0KCk7IH0KLSAgICBNZWRpYVRpbWUgbWluTWVkaWFU
aW1lU2Vla2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1l
KCk7IH0KLQotICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
Jikgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgTWVkaWFUaW1lIG1heFRpbWVM
b2FkZWQoKSBjb25zdCB7IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7IH0KLQotICAgIGJv
b2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBNZWRpYVBsYXll
cjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIGlzTGl2ZVN0cmVhbSgpIGNvbnN0ID0gMDsKLQotICAgIE1lZGlhUGxheWVyKiBt
ZWRpYVBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyOyB9Ci0KLSAgICB1bnNpZ25lZCBk
ZWNvZGVkRnJhbWVDb3VudCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHVuc2lnbmVkIGRyb3BwZWRG
cmFtZUNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0
ZUNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdW5zaWduZWQgdmlkZW9EZWNvZGVkQnl0ZUNv
dW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3Rh
dGVDaGFuZ2VkKCkgb3ZlcnJpZGU7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwotI2lmIFBMQVRG
T1JNKFdJTl9DQUlSTykKLSAgICAvLyBGSVhNRTogQWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGhhcyBu
b3QgYmVlbiBpbXBsZW1lbnRlZCBmb3IgV2luQ2Fpcm8geWV0LgotICAgIGJvb2wgc3VwcG9ydHNB
Y2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0j
ZWxzZQotICAgIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKQotICAgIHZvaWQgY2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYpIG92ZXJy
aWRlOwotICAgIHZvaWQgaGFuZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50Kik7Ci0gICAgdmly
dHVhbCB2b2lkIGF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwotICAgIHZvaWQg
YXR0ZW1wdFRvRGVjcnlwdFdpdGhJbnN0YW5jZShDRE1JbnN0YW5jZSYpIGZpbmFsOwotICAgIHZv
aWQgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7Ci0gICAgdm9pZCBz
ZXRXYWl0aW5nRm9yS2V5KGJvb2wpOwotICAgIGJvb2wgd2FpdGluZ0ZvcktleSgpIGNvbnN0IG92
ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0tleVN5c3RlbShjb25z
dCBTdHJpbmcmIGtleVN5c3RlbSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgc3RhdGlj
IE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgZXh0ZW5kZWRTdXBwb3J0c1R5cGUoY29uc3QgTWVk
aWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVycyYsIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUpOwot
Ci0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRm
b3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVt
LCBHQzNEaW50LCBHQzNEZW51bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBib29sLCBib29sKSBvdmVy
cmlkZTsKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkgb3Zl
cnJpZGU7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0VmlkZW9Tb3VyY2VPcmllbnRhdGlvbihJbWFn
ZU9yaWVudGF0aW9uKTsKLSAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGlwZWxpbmUuZ2V0KCk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTeW5jTWVzc2Fn
ZShHc3RNZXNzYWdlKik7Ci0KLXByb3RlY3RlZDoKLSAgICBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlKE1lZGlhUGxheWVyKik7Ci0gICAgdmlydHVhbCBHc3RFbGVtZW50KiBjcmVhdGVW
aWRlb1NpbmsoKTsKLQotI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQotICAgIEdzdEVsZW1l
bnQqIGNyZWF0ZUhvbGVQdW5jaFZpZGVvU2luaygpOwotICAgIHZvaWQgcHVzaE5leHRIb2xlUHVu
Y2hCdWZmZXIoKTsKLSAgICBib29sIHNob3VsZElnbm9yZUludHJpbnNpY1NpemUoKSBmaW5hbCB7
IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgc3Rh
dGljIEdzdEZsb3dSZXR1cm4gbmV3U2FtcGxlQ2FsbGJhY2soR3N0RWxlbWVudCosIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqKTsKLSAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdQ
cmVyb2xsQ2FsbGJhY2soR3N0RWxlbWVudCosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2UqKTsKLSAgICB2b2lkIGZsdXNoQ3VycmVudEJ1ZmZlcigpOwotICAgIEdzdEVsZW1lbnQqIGNy
ZWF0ZUdMQXBwU2luaygpOwotICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2lua0dMKCk7Ci0g
ICAgR3N0R0xDb250ZXh0KiBnc3RHTENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2dsQ29udGV4
dC5nZXQoKTsgfQotICAgIEdzdEdMRGlzcGxheSogZ3N0R0xEaXNwbGF5KCkgY29uc3QgeyByZXR1
cm4gbV9nbERpc3BsYXkuZ2V0KCk7IH0KLSAgICB2b2lkIGVuc3VyZUdMVmlkZW9TaW5rQ29udGV4
dCgpOwotI2VuZGlmCi0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgdm9pZCBwdXNo
VGV4dHVyZVRvQ29tcG9zaXRvcigpOwotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3
YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBHc3RF
bGVtZW50KiB2aWRlb1NpbmsoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU2luay5nZXQoKTsgfQot
Ci0gICAgdm9pZCBzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KEdzdFN0cmVhbVZvbHVtZSopOwotICAg
IHZpcnR1YWwgR3N0RWxlbWVudCogY3JlYXRlQXVkaW9TaW5rKCkgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgR3N0RWxlbWVudCogYXVkaW9TaW5rKCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0g
ICAgdm9pZCBzZXRQaXBlbGluZShHc3RFbGVtZW50Kik7Ci0KLSAgICB2b2lkIHRyaWdnZXJSZXBh
aW50KEdzdFNhbXBsZSopOwotICAgIHZvaWQgcmVwYWludCgpOwotICAgIHZvaWQgY2FuY2VsUmVw
YWludChib29sIGRlc3Ryb3lpbmcgPSBmYWxzZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCByZXBhaW50
Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSosIEdzdFNhbXBsZSopOwot
ICAgIHN0YXRpYyB2b2lkIHJlcGFpbnRDYW5jZWxsZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlKik7Ci0KLSAgICB2b2lkIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdl
KCk7Ci0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZk11dGUoKTsKLQotICAgIHN0YXRpYyB2b2lkIHZv
bHVtZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKik7Ci0g
ICAgc3RhdGljIHZvaWQgbXV0ZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlKik7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgdm9pZCB1cGRh
dGVUZXh0dXJlTWFwcGVyRmxhZ3MoKTsKLSAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fdGV4
dHVyZU1hcHBlckZsYWdzOwotI2VuZGlmCi0KLSAgICBlbnVtIE1haW5UaHJlYWROb3RpZmljYXRp
b24gewotICAgICAgICBWaWRlb0NoYW5nZWQgPSAxIDw8IDAsCi0gICAgICAgIFZpZGVvQ2Fwc0No
YW5nZWQgPSAxIDw8IDEsCi0gICAgICAgIEF1ZGlvQ2hhbmdlZCA9IDEgPDwgMiwKLSAgICAgICAg
Vm9sdW1lQ2hhbmdlZCA9IDEgPDwgMywKLSAgICAgICAgTXV0ZUNoYW5nZWQgPSAxIDw8IDQsCi0j
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgICAgICBUZXh0Q2hhbmdlZCA9IDEgPDwgNSwKLSNl
bmRpZgotICAgICAgICBTaXplQ2hhbmdlZCA9IDEgPDwgNiwKLSAgICAgICAgU3RyZWFtQ29sbGVj
dGlvbkNoYW5nZWQgPSAxIDw8IDcKLSAgICB9OwotCi0gICAgUmVmPE1haW5UaHJlYWROb3RpZmll
cjxNYWluVGhyZWFkTm90aWZpY2F0aW9uPj4gbV9ub3RpZmllcjsKLSAgICBNZWRpYVBsYXllciog
bV9wbGF5ZXI7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOwotICAgIEdSZWZQ
dHI8R3N0U3RyZWFtVm9sdW1lPiBtX3ZvbHVtZUVsZW1lbnQ7Ci0gICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiBtX3ZpZGVvU2luazsKLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZnBzU2luazsKLSAg
ICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7Ci0gICAgbXV0YWJsZSBNZWRp
YVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOwotICAgIEludFNpemUgbV9zaXpl
OwotICAgIG11dGFibGUgTG9jayBtX3NhbXBsZU11dGV4OwotICAgIEdSZWZQdHI8R3N0U2FtcGxl
PiBtX3NhbXBsZTsKLQotICAgIG11dGFibGUgRmxvYXRTaXplIG1fdmlkZW9TaXplOwotICAgIGJv
b2wgbV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcmVuZGVy
aW5nQ2FuQmVBY2NlbGVyYXRlZCB7IGZhbHNlIH07Ci0KLSAgICBDb25kaXRpb24gbV9kcmF3Q29u
ZGl0aW9uOwotICAgIExvY2sgbV9kcmF3TXV0ZXg7Ci0gICAgYm9vbCBtX2Rlc3Ryb3lpbmcgeyBm
YWxzZSB9OwotICAgIFJ1bkxvb3A6OlRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U+IG1fZHJhd1RpbWVyOwotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotI2lmIFVTRShO
SUNPU0lBKQotICAgIFJlZjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwot
I2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0
Zm9ybUxheWVyUHJveHk7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkK
LSAgICBHUmVmUHRyPEdzdEdMQ29udGV4dD4gbV9nbENvbnRleHQ7Ci0gICAgR1JlZlB0cjxHc3RH
TERpc3BsYXk+IG1fZ2xEaXNwbGF5OwotICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gbV9nbERpc3Bs
YXlFbGVtZW50Q29udGV4dDsKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IG1fZ2xBcHBFbGVtZW50
Q29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVy
PiBtX3ZpZGVvVGV4dHVyZUNvcGllcjsKLQotICAgIEdSZWZQdHI8R3N0R0xDb2xvckNvbnZlcnQ+
IG1fY29sb3JDb252ZXJ0OwotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9jb2xvckNvbnZlcnRJbnB1
dENhcHM7Ci0gICAgR1JlZlB0cjxHc3RDYXBzPiBtX2NvbG9yQ29udmVydE91dHB1dENhcHM7Ci0j
ZW5kaWYKLQotICAgIEltYWdlT3JpZW50YXRpb24gbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uOwot
Ci0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICBCaW5hcnlTZW1hcGhvcmUgbV9jZG1B
dHRhY2htZW50U2VtYXBob3JlOwotICAgIFJlZlB0cjxjb25zdCBDRE1JbnN0YW5jZT4gbV9jZG1J
bnN0YW5jZTsKLQotICAgIExvY2sgbV9wcm90ZWN0aW9uTXV0ZXg7IC8vIEd1YXJkcyBhY2Nlc3Mg
dG8gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy4KLSAgICBIYXNoU2V0PHVpbnQzMl90PiBtX2hh
bmRsZWRQcm90ZWN0aW9uRXZlbnRzOwotCi0gICAgYm9vbCBtX3dhaXRpbmdGb3JLZXkgeyBmYWxz
ZSB9OwotI2VuZGlmCi0KLSAgICBPcHRpb25hbDxHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybT4gbV92
aWRlb0RlY29kZXJQbGF0Zm9ybTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIp
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCA1OWU1MmUwMmY1ZmFiMjIxZDZkMzEwM2FmOTFiNDY1N2VkMGFiNDZiLi5hNDgxZWMwZjUz
MTdmNDEwMjQ5ZTVkZWViNmM3MWU2MGNiNzBiYmY3IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMTEtMTkgIENo
YXJsaWUgVHVybmVyICA8Y3R1cm5lckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJd
IEZsYXR0ZW4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIGludG8gTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA0MzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6IFRoZSBiYXNlIGNs
YXNzIG5vIGxvbmdlcgorICAgICAgICBleGlzdHMsIHBlcmZvcm0gdGhlIGNoZWNrIG9uIHRoZSBw
bGF5ZXIgcHJpdmF0ZS4KKwogMjAxOS0xMS0xOSAgUGF1bG8gTWF0b3MgIDxwbWF0b3NAaWdhbGlh
LmNvbT4KIAogICAgICAgICBTZXR1cCBFV1MgcXVldWVzIGZvciBKU0Nvbmx5IDMyYml0cyBBUk12
NyBhbmQgTUlQU2VsCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXgg
OGY3OTU2NzQwZWVjM2VkMTY3NTNiMmJkMGJhOTUxMjgwMTJiNmYyMC4uNDM0YTYxZWNiMWYwOWE3
MDMwYzA4ODU1NzFkNWYwYzlmNDU1NTViZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weQpAQCAtMTc3LDcgKzE3Nyw3IEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsK
ICAgICAoWwogICAgICAgIyBUbyB1c2UgR1N0cmVhbWVyIEdMIHdpdGhvdXQgY29uZmxpY3RzIG9m
IEdMIHN5bWJvbHMsCiAgICAgICAjIHdlIHNob3VsZCBpbmNsdWRlIGdzdC9nbC9nbC5oIGJlZm9y
ZSBpbmNsdWRpbmcgT3BlbkdMW0VTXVNoaW1zCi0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScs
ICdXZWJDb3JlJywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCcpXSwKKyAgICAgIG9zLnBhdGguam9pbignU291
cmNlJywgJ1dlYkNvcmUnLCAncGxhdGZvcm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywgJ01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAnKV0sCiAgICAgIFsiLWJ1aWxkL2luY2x1ZGVf
b3JkZXIiXSksCiAKICAgICAoWwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384280</attachid>
            <date>2019-11-25 01:26:37 -0800</date>
            <delta_ts>2019-11-25 02:42:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204352-20191125092635.patch</filename>
            <type>text/plain</type>
            <size>325130</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQ3ZjdmMjhlMzBmMDNk
NjQ2OGI3OWY3YjJhMjI2OWMyNGQ3MWEwYi4uMTk0MjE1MDRmOWVjOTY1NmZjZGNmZTViMGM3MWFm
ZDM0OWY5N2I1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NiBAQAorMjAxOS0xMS0xOSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0g
RmxhdHRlbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgaW50byBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDQzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGUgaW5oZXJpdGFuY2UgbGluayBiZXR3ZWVuIHRoZSBiYXNlIHBsYXllciBhbmQg
dGhlIHByaXZhdGUgcGxheWVyIG5vCisgICAgICAgIGxvbmdlciBzZXJ2ZXMgYSBwdXJwb3NlLiBU
aGUgb25seSB1c2VyIG9mIHRoZSBiYXNlIGNsYXNzIGlzIHRoZSBwcml2YXRlCisgICAgICAgIHBs
YXllci4KKworICAgICAgICBTcXVhc2hpbmcgdGhlc2UgdG9naGV0aGVyIG1ha2VzIGl0IGVhc3kg
dG8gZG8gZnVydGhlciByZWZhY3RvcmluZ3MsCisgICAgICAgIHNpbmNlIGV2ZXJ5dGhpbmcgY2Fu
IGJlIHNlZW4gaW4gb25lIHBsYWNlIHJhdGhlciB0aGFuIGJlaW5nIGFyYml0cmFyaWx5CisgICAg
ICAgIHNwbGl0IGludG8gdHdvIGNsYXNzZXMgYW5kIGhhdmluZyB0byBkbyBkZXJpdmVkLXRvLWJh
c2UgY29udmVyc2lvbnMgaW4KKyAgICAgICAgeW91ciBoZWFkIGZvciBubyBnYWluIGluIGNsYXJp
dHkgZWxzZXdoZXJlLgorCisgICAgICAgIEFzaWRlIGZyb20gbWVyZ2luZyB0aGUgY2xhc3Nlcywg
dGhlIG9ubHkgb3RoZXIgY2hhbmdlIGhlcmUgaXMgc3dpdGNoaW5nCisgICAgICAgIHRvIGluLWNs
YXNzIGluaXRpYWxpemF0aW9uIG9mIG1hbnkgbWVtYmVyIHZhcmlhYmxlcywgcmF0aGVyIHRoYW4g
YSBsb25nCisgICAgICAgIGxpc3Qgb2YgaW5pdGlhbGl6YXRpb25zIGluIHRoZSBjb25zdHJ1Y3Rv
ciB0aGF0IGdldHMgZmlkZGx5IHdpdGgKKyAgICAgICAgLVdyZW9yZGVyLgorCisgICAgICAgIFRo
ZXNlIGNsYXNzZXMgYXJlIG11Y2ggdG9vIGxhcmdlIGFuZCBjb3VsZCB1c2Ugc29tZSByZWRlc2ln
biwgdGhpcyBpcworICAgICAgICBvbmx5IGEgZmlyc3Qgc3RlcCB0b3dhcmQgdGhhdCBnb2FsLgor
CisgICAgICAgIFRoaXMgaXMgYSByZWZhY3RvcmluZywgaG9wZWZ1bGx5IHdlbGwgY292ZXJlZCBi
eSBvdXIgZXhpc3RpbmcgdGVzdHMhCisKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21h
a2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpncmVhdGVzdENvbW1vbkRpdmlz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6YnVzTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnZlcnRUb0ludGVybmFsUHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6R3N0
VmlkZW9GcmFtZUhvbGRlcjo6R3N0VmlkZW9GcmFtZUhvbGRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp+R3N0VmlkZW9GcmFtZUhvbGRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp3YWl0Rm9yQ1BVU3luYyk6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6Omhhc0FscGhhQ2hhbm5lbCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjpmbGFncyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp0ZXh0dXJlSUQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3N0VmlkZW9GcmFtZUhvbGRlcjo6aGFzTWFwcGVkVGV4dHVyZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3N0VmlkZW9GcmFtZUhvbGRlcjo6dmlkZW9GcmFtZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp1cGRhdGVUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6OnBsYXRmb3JtTGF5ZXJCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppbml0
aWFsaXplRGVidWdDYXRlZ29yeSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpp
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnJlZ2lzdGVyTWVkaWFFbmdpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpsb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y2FuY2VsTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBhdXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtRHVyYXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbk1lZGlhVGlt
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmN1cnJlbnRNZWRpYVRpbWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRSYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cmF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlbG9hZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1l
U2Vla2FibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjptYXhUaW1lTG9hZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Omhhc1Npbmds
ZVNlY3VyaXR5T3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6d291bGRUYWludE9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbnN1cmVB
dWRpb1NvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6YXVkaW9Tb3VyY2VQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9TdHJlYW1Qcm9w
ZXJ0aWVzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cENhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBs
YXliaW5VUkwpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U3luY09uQ2xvY2spOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzeW5jT25DbG9jayk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9m
VmlkZW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlm
eVBsYXllck9mQXVkaW8pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp0ZXh0Q2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNhbXBsZUNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNh
bXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZp
bGxUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bG9hZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnRpbWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZGluZ0ZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUF1ZGlvU2luayk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvU2luayBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9z
aXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjplbmFibGVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnVwZGF0ZVRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNsZWFyVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQaXBlbGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVxdWVz
dEdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmVuc3VyZUdzdEdMQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0Vm9sdW1lKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9sdW1lIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWb2x1bWVD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2
b2x1bWVDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpuZXR3b3JrU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om11dGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxh
eWVyT2ZNdXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bXV0ZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzQnVmZmVyaW5nU3RhdHMpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVNYXhUaW1lTG9hZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRl
QnVmZmVyaW5nU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6cHJvY2Vzc01wZWdUc1NlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNvbnRlbnRzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1RhYmxlT2ZDb250
ZW50c0VudHJ5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6cHVyZ2VJbnZhbGlkQXVkaW9UcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRWaWRlb1RyYWNrcyk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFRleHRUcmFj
a3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cmlE
ZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmRvd25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlT2xk
RG93bmxvYWRGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWVkaWFMb2NhdGlvbkNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3Vw
cG9ydGVkVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkUGFzc0NPUlNBY2Nl
c3NDaGVjayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNhblNhdmVNZWRpYURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRl
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJveHkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2Vy
UmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnJlcGFpbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNhbmNlbFJlcGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpyZXBhaW50Q2FuY2VsbGVkQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdTYW1wbGVDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1ByZXJvbGxD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmZsdXNoQ3VycmVudEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdGl2ZUltYWdlRm9yQ3Vy
cmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRWaWRlb1NvdXJjZU9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlVGV4dHVyZU1hcHBlckZsYWdzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNGdWxsc2NyZWVu
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bW92aWVMb2FkVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZUdMQXBwU2luayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2lua0dMKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR0xWaWRlb1NpbmtDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFJlY3RhbmdsZVRvVmlkZW9TaW5rKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckhvbGVQdW5jaENsaWVudDo6R1N0cmVhbWVySG9sZVB1bmNoQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3Jl
YXRlSG9sZVB1bmNoVmlkZW9TaW5rKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6cHVzaE5leHRIb2xlUHVuY2hCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVWaWRlb1NpbmspOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRTdHJlYW1Wb2x1bWVF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZGVjb2RlZEZyYW1lQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpkcm9wcGVkRnJhbWVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZp
ZGVvRGVjb2RlZEJ5dGVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRh
Y2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNk
bUluc3RhbmNlRGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjphdHRlbXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2Nh
bEluc3RhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlUHJvdGVjdGlvbkV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0V2FpdGluZ0ZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OndhaXRpbmdGb3JLZXkgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c0tleVN5c3Rl
bSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmV4dGVu
ZGVkU3VwcG9ydHNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6Om1lZGlhUGxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGlwZWxpbmUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppc0xpdmVTdHJlYW0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb25m
aWd1cmVQbGF5U2luayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmdzdEdMQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmdzdEdMRGlzcGxheSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvU2luayBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmg6IFJlbW92ZWQuCisKIDIwMTktMTEt
MjUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJ
T04gKFNhZmFyaSAxMyk6IFdlYlNvY2tldCBwYXlsb2FkIGlzIHRydW5jYXRlZCB3aGVuIHgtd2Vi
a2l0LWRlZmxhdGUtZnJhbWUgaXMgdXNlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR1N0cmVhbWVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVy
LmNtYWtlCmluZGV4IGYyNDBlYzdhZjEwM2JlY2FiM2U3NzQ2OWFlMzAyNmE2OTUxNjkwOGQuLjJj
OTQxZjBjYjRhZThhYTg2MGQ1ZTU3MTY1YmEyYjU2MzhiMDIxYTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKQEAgLTE0LDcgKzE0LDYgQEAgaWYgKEVOQUJMRV9WSURF
TyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhRW5naW5lQ29uZmlndXJhdGlvbkZhY3RvcnlHU3RyZWFt
ZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0Q29tYmluZXJHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9UZXh0U2lua0dTdHJlYW1lci5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggZDIyYTRmZTJi
MTEyYjM5NDhlNWQ2NWU2ODI0MjE4M2QyNmFlOTZhYS4uODZlMWNhYjMwNGUzYTkwZGNmM2RjYzZh
NWUzYzU3ODgzNjM4NWU1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAKQEAgLTMsOSArMyw5IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29s
bGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZv
IE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIw
MTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTUsIDIwMTYgSWdhbGlhIFMuTAogICogQ29weXJpZ2h0
IChDKSAyMDE0IENhYmxlIFRlbGV2aXNpb24gTGFib3JhdG9yaWVzLCBJbmMuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUsIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxOSBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTkgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsMTQ0ICsyOCwz
NzAgQEAKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKIAorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgogI2luY2x1
ZGUgIkdTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lci5oIgogI2luY2x1ZGUgIkhUVFBIZWFkZXJOYW1l
cy5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJJbWFnZUdTdHJl
YW1lci5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJSZXF1ZXN0SW5zdGFsbE1pc3NpbmdQbHVnaW5zQ2FsbGJhY2suaCIK
KyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIK
KyNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJTb3Vy
Y2VHU3RyZWFtZXIuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJBdWRp
b1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkluYmFuZE1ldGFkYXRhVGV4dFRy
YWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlICJUZXh0Q29tYmluZXJHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJUZXh0U2lua0dTdHJlYW1lci5oIgorI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlR1N0cmVh
bWVyLmgiCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oIgorI2VuZGlm
CisKKyNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQorI2luY2x1ZGUgIk1lZGlhU291cmNlLmgiCisj
aW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKyNlbmRpZgorCisjaWYgRU5B
QkxFKEVOQ1JZUFRFRF9NRURJQSkKKyNpbmNsdWRlICJDRE1JbnN0YW5jZS5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIldlYktpdENvbW1vbkVuY3J5cHRpb25EZWNyeXB0b3JHU3RyZWFtZXIuaCIKKyNlbmRp
ZgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVy
R1N0cmVhbWVyLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnc3Qv
YXVkaW8vc3RyZWFtdm9sdW1lLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgogI2luY2x1ZGUgPGdz
dC9wYnV0aWxzL21pc3NpbmctcGx1Z2lucy5oPgorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRl
b21ldGEuaD4KICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4K
KyNpbmNsdWRlIDx3dGYvZ2xpYi9HTGliVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIv
R1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1J1bkxvb3BTb3VyY2VQcmlvcml0eS5o
PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5o
PgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdQ
cmludFN0cmVhbS5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLSNpbmNsdWRlIDx3dGYvV2FsbFRp
bWUuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HTGliVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0jaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCIKLSNlbmRpZgotCi0jaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQotI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVy
LmgiCi0jaW5jbHVkZSAiSW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgi
Ci0jaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2luY2x1ZGUg
IlRleHRDb21iaW5lckdTdHJlYW1lci5oIgotI2luY2x1ZGUgIlRleHRTaW5rR1N0cmVhbWVyLmgi
Ci0jaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKLSNlbmRpZgorI2luY2x1
ZGUgPHd0Zi9VUkwuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KIAogI2lmIEVOQUJMRShW
SURFT19UUkFDSykgJiYgVVNFKEdTVFJFQU1FUl9NUEVHVFMpCiAjZGVmaW5lIEdTVF9VU0VfVU5T
VEFCTEVfQVBJCiAjaW5jbHVkZSA8Z3N0L21wZWd0cy9tcGVndHMuaD4KICN1bmRlZiBHU1RfVVNF
X1VOU1RBQkxFX0FQSQorI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykgJiYgVVNFKEdTVFJF
QU1FUl9NUEVHVFMpCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisjZGVmaW5lIENSRUFURV9U
UkFDSyh0eXBlLCBUeXBlKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIG1faGFzIyNUeXBlID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghdXNlTWVkaWFTb3VyY2UpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBSZWZQdHI8
VHlwZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IFR5cGUjI1RyYWNrUHJpdmF0ZUdT
dHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCp0aGlzKSwgaSwgc3RyZWFtKTsgXAorICAgICAg
ICAgICAgbV8jI3R5cGUjI1RyYWNrcy5hZGQodHJhY2stPmlkKCksIHRyYWNrKTsgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgbV9wbGF5ZXItPmFkZCMjVHlwZSMjVHJhY2soKnRyYWNr
KTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKGdzdF9zdHJlYW1f
Z2V0X3N0cmVhbV9mbGFncyhzdHJlYW0uZ2V0KCkpICYgR1NUX1NUUkVBTV9GTEFHX1NFTEVDVCkg
XAorICAgICAgICAgICAgICAgIG1fY3VycmVudCMjVHlwZSMjU3RyZWFtSWQgPSBTdHJpbmcoZ3N0
X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOyBcCisgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgfSBHX1NUTVRfRU5ECisKKyNkZWZpbmUgQ0xFQVJfVFJBQ0tTKHRyYWNrcywgbWV0aG9k
KSBcCisgICAgZm9yIChhdXRvJiB0cmFjayA6IHRyYWNrcy52YWx1ZXMoKSlcCisgICAgICAgIG1l
dGhvZCgqdHJhY2spO1wKKyAgICB0cmFja3MuY2xlYXIoKTsKKyNlbHNlCisjZGVmaW5lIENSRUFU
RV9UUkFDSyh0eXBlLCBUeXBlKSBHX1NUTVRfU1RBUlQgeyBcCisgICAgICAgIG1faGFzIyNUeXBl
IyMgPSB0cnVlOyAgICAgICAgICAgICAgICAgICBcCisgICAgfSBHX1NUTVRfRU5ECisjZW5kaWYg
Ly8gRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyNkZWZpbmUg
VEVYVFVSRV9DT1BJRVJfQ09MT1JfQ09OVkVSVF9GTEFHIFZpZGVvVGV4dHVyZUNvcGllckdTdHJl
YW1lcjo6Q29sb3JDb252ZXJzaW9uOjpOb0NvbnZlcnQKKyNkZWZpbmUgR1NUX0dMX0NBUFNfRk9S
TUFUICJ7IFJHQngsIFJHQkEsIEk0MjAsIFk0NDQsIFlWMTIsIFk0MUIsIFk0MkIsIE5WMTIsIE5W
MjEsIFZVWUEgfSIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgorCisjaW5jbHVk
ZSAiR0xDb250ZXh0LmgiCisjaWYgVVNFKEdMWCkKKyNpbmNsdWRlICJHTENvbnRleHRHTFguaCIK
KyNpbmNsdWRlIDxnc3QvZ2wveDExL2dzdGdsZGlzcGxheV94MTEuaD4KICNlbmRpZgotI2luY2x1
ZGUgPGdzdC9hdWRpby9zdHJlYW12b2x1bWUuaD4KIAotI2lmIEVOQUJMRShNRURJQV9TT1VSQ0Up
Ci0jaW5jbHVkZSAiTWVkaWFTb3VyY2UuaCIKLSNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdT
dHJlYW1lci5oIgorI2lmIFVTRShFR0wpCisjaW5jbHVkZSAiR0xDb250ZXh0RUdMLmgiCisjaW5j
bHVkZSA8Z3N0L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmg+CiAjZW5kaWYKIAotI2lmIEVOQUJM
RShXRUJfQVVESU8pCi0jaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5oIgor
I2lmIFBMQVRGT1JNKFgxMSkKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlYMTEuaCIKICNlbmRp
ZgogCi1HU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcp
OwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZworI2lm
IFBMQVRGT1JNKFdBWUxBTkQpCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5oIgor
I2VuZGlmCisKKyNpZiBVU0UoV1BFX1JFTkRFUkVSKQorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxh
eUxpYldQRS5oIgorI2VuZGlmCisKKy8vIGdzdGdsYXBpLmggbWF5IGluY2x1ZGUgZWdscGxhdGZv
cm0uaCBhbmQgaXQgaW5jbHVkZXMgWC5oLCB3aGljaAorLy8gZGVmaW5lcyBOb25lLCBicmVha2lu
ZyBNZWRpYVBsYXllcjo6Tm9uZSBlbnVtCisjaWYgUExBVEZPUk0oWDExKSAmJiBHU1RfR0xfSEFW
RV9QTEFURk9STV9FR0wKKyN1bmRlZiBOb25lCisjZW5kaWYgLy8gUExBVEZPUk0oWDExKSAmJiBH
U1RfR0xfSEFWRV9QTEFURk9STV9FR0wKKyNpbmNsdWRlICJWaWRlb1RleHR1cmVDb3BpZXJHU3Ry
ZWFtZXIuaCIKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQorCisjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQorI2luY2x1ZGUgIkJpdG1hcFRleHR1cmVHTC5oIgorI2luY2x1ZGUgIkJpdG1h
cFRleHR1cmVQb29sLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVz
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisjaWYgVVNFKENBSVJPKSAm
JiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgPGNhaXJvLWdsLmg+Cisj
ZW5kaWYKKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiAKK0dTVF9ERUJVR19DQVRF
R09SWSh3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxU
IHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAotc3RhdGljIHZvaWQgYnVzTWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyos
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVy
KQorI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQorc3RhdGljIGNvbnN0IEZsb2F0U2l6ZSBz
X2hvbGVQdW5jaERlZmF1bHRGcmFtZVNpemUoMTI4MCwgNzIwKTsKKyNlbmRpZgorCitzdGF0aWMg
aW50IGdyZWF0ZXN0Q29tbW9uRGl2aXNvcihpbnQgYSwgaW50IGIpCiB7Ci0gICAgcGxheWVyLT5o
YW5kbGVNZXNzYWdlKG1lc3NhZ2UpOworICAgIHdoaWxlIChiKSB7CisgICAgICAgIGludCB0ZW1w
ID0gYTsKKyAgICAgICAgYSA9IGI7CisgICAgICAgIGIgPSB0ZW1wICUgYjsKKyAgICB9CisKKyAg
ICByZXR1cm4gQUJTKGEpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyKiBwbGF5ZXIsIEdPYmplY3QqIG9iamVjdCkKK3N0YXRpYyB2b2lkIGJ1c01lc3NhZ2VDYWxs
YmFjayhHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqIHBsYXllcikKIHsKLSAgICBwbGF5ZXItPnNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyhv
YmplY3QpOworICAgIHBsYXllci0+aGFuZGxlTWVzc2FnZShtZXNzYWdlKTsKIH0KIAotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyhHT2Jq
ZWN0KiBvYmplY3QpCitzdGF0aWMgdm9pZCBjb252ZXJ0VG9JbnRlcm5hbFByb3RvY29sKFVSTCYg
dXJsKQogewotICAgIGlmIChnX3N0cmNtcDAoR19PQkpFQ1RfVFlQRV9OQU1FKG9iamVjdCksICJH
c3RQdWxzZVNpbmsiKSkKKyAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDEyLCAwKSkK
ICAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgY2hhciogcm9sZSA9IG1fcGxheWVyLT5jbGll
bnQoKS5tZWRpYVBsYXllcklzVmlkZW8oKSA/ICJ2aWRlbyIgOiAibXVzaWMiOwotICAgIEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXcoInN0cmVhbS1wcm9wZXJ0aWVz
IiwgIm1lZGlhLnJvbGUiLCBHX1RZUEVfU1RSSU5HLCByb2xlLCBudWxscHRyKTsKLSAgICBnX29i
amVjdF9zZXQob2JqZWN0LCAic3RyZWFtLXByb3BlcnRpZXMiLCBzdHJ1Y3R1cmUsIG51bGxwdHIp
OwotICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZShzdHJ1Y3R1cmUpOwotICAgIEdVbmlxdWVQdHI8Z2No
YXI+IGVsZW1lbnROYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKEdTVF9FTEVNRU5UKG9iamVjdCkp
KTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXQgbWVkaWEucm9sZSBhcyAl
cyBhdCAlcyIsIHJvbGUsIGVsZW1lbnROYW1lLmdldCgpKTsKKyAgICBpZiAodXJsLnByb3RvY29s
SXNJbkhUVFBGYW1pbHkoKSB8fCB1cmwucHJvdG9jb2xJc0Jsb2IoKSkKKyAgICAgICAgdXJsLnNl
dFByb3RvY29sKCJ3ZWJraXQrIiArIHVybC5wcm90b2NvbCgpKTsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnJlZ2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdp
c3RyYXIgcmVnaXN0cmFyKQotewotICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OmluaXRpYWxpemVEZWJ1Z0NhdGVnb3J5KCk7Ci0gICAgaWYgKGlzQXZhaWxhYmxlKCkpIHsKLSAg
ICAgICAgcmVnaXN0cmFyKFtdKE1lZGlhUGxheWVyKiBwbGF5ZXIpIHsgcmV0dXJuIG1ha2VVbmlx
dWU8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyPihwbGF5ZXIpOyB9LAotICAgICAgICAgICAg
Z2V0U3VwcG9ydGVkVHlwZXMsIHN1cHBvcnRzVHlwZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0
ciwgc3VwcG9ydHNLZXlTeXN0ZW0pOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKK2NsYXNz
IEdzdFZpZGVvRnJhbWVIb2xkZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJC
dWZmZXI6OlVubWFuYWdlZEJ1ZmZlckRhdGFIb2xkZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0
IEdzdFZpZGVvRnJhbWVIb2xkZXIoR3N0U2FtcGxlKiBzYW1wbGUsIE9wdGlvbmFsPEdzdFZpZGVv
RGVjb2RlclBsYXRmb3JtPiB2aWRlb0RlY29kZXJQbGF0Zm9ybSwgVGV4dHVyZU1hcHBlckdMOjpG
bGFncyBmbGFncywgYm9vbCBnc3RHTEVuYWJsZWQpCisgICAgICAgIDogbV92aWRlb0RlY29kZXJQ
bGF0Zm9ybSh2aWRlb0RlY29kZXJQbGF0Zm9ybSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKEdTVF9JU19TQU1QTEUoc2FtcGxlKSk7CisKKyAgICAgICAgR3N0VmlkZW9JbmZvIHZpZGVv
SW5mbzsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFnZXRTYW1wbGVWaWRlb0luZm8oc2FtcGxlLCB2
aWRlb0luZm8pKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3NpemUgPSBJbnRT
aXplKEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pLCBHU1RfVklERU9fSU5GT19IRUlH
SFQoJnZpZGVvSW5mbykpOworICAgICAgICBtX2hhc0FscGhhQ2hhbm5lbCA9IEdTVF9WSURFT19J
TkZPX0hBU19BTFBIQSgmdmlkZW9JbmZvKTsKKyAgICAgICAgbV9idWZmZXIgPSBnc3Rfc2FtcGxl
X2dldF9idWZmZXIoc2FtcGxlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFHU1RfSVNfQlVGRkVS
KG1fYnVmZmVyKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoR1NUUkVBTUVSX0dM
KQorICAgICAgICBtX2ZsYWdzID0gZmxhZ3MgfCAobV9oYXNBbHBoYUNoYW5uZWwgPyBUZXh0dXJl
TWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMCk7CisKKyAgICAgICAgaWYgKGdzdEdMRW5hYmxlZCkg
eworICAgICAgICAgICAgbV9pc01hcHBlZCA9IGdzdF92aWRlb19mcmFtZV9tYXAoJm1fdmlkZW9G
cmFtZSwgJnZpZGVvSW5mbywgbV9idWZmZXIsIHN0YXRpY19jYXN0PEdzdE1hcEZsYWdzPihHU1Rf
TUFQX1JFQUQgfCBHU1RfTUFQX0dMKSk7CisgICAgICAgICAgICBpZiAobV9pc01hcHBlZCkgewor
ICAgICAgICAgICAgICAgIG1fdGV4dHVyZUlEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50Kj4o
bV92aWRlb0ZyYW1lLmRhdGFbMF0pOworICAgICAgICAgICAgICAgIG1faGFzTWFwcGVkVGV4dHVy
ZXMgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyNlbHNlCisgICAgICAg
IFVOVVNFRF9QQVJBTShmbGFncyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShnc3RHTEVuYWJsZWQp
OworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCisKKyAgICAgICAgeworICAgICAgICAgICAg
bV90ZXh0dXJlSUQgPSAwOworICAgICAgICAgICAgbV9pc01hcHBlZCA9IGdzdF92aWRlb19mcmFt
ZV9tYXAoJm1fdmlkZW9GcmFtZSwgJnZpZGVvSW5mbywgbV9idWZmZXIsIEdTVF9NQVBfUkVBRCk7
CisgICAgICAgICAgICBpZiAobV9pc01hcHBlZCkgeworICAgICAgICAgICAgICAgIC8vIFJpZ2h0
IG5vdyB0aGUgVGV4dHVyZU1hcHBlciBvbmx5IHN1cHBvcnRzIGNocm9tYXMgd2l0aCBvbmUgcGxh
bmUKKyAgICAgICAgICAgICAgICBBU1NFUlQoR1NUX1ZJREVPX0lORk9fTl9QTEFORVMoJnZpZGVv
SW5mbykgPT0gMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci19CiAKLWJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppc0F2YWlsYWJsZSgpCi17Ci0gICAgaWYgKCFp
bml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVtZW50cygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgdmlydHVhbCB+R3N0VmlkZW9GcmFtZUhvbGRlcigpCisgICAgewor
ICAgICAgICBpZiAoVU5MSUtFTFkoIW1faXNNYXBwZWQpKQorICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50RmFjdG9yeT4gZmFjdG9yeSA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9mYWN0b3J5X2ZpbmQoInBsYXliaW4iKSk7Ci0gICAgcmV0dXJuIGZhY3Rvcnk7Cisg
ICAgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCgmbV92aWRlb0ZyYW1lKTsKKyAgICB9CisKKyNp
ZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9yQ1BVU3luYygpCisg
ICAgeworICAgICAgICBHc3RHTFN5bmNNZXRhKiBtZXRhID0gZ3N0X2J1ZmZlcl9nZXRfZ2xfc3lu
Y19tZXRhKG1fYnVmZmVyKTsKKyAgICAgICAgaWYgKG1ldGEpIHsKKyAgICAgICAgICAgIEdzdE1l
bW9yeSogbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeShtX2J1ZmZlciwgMCk7CisgICAgICAg
ICAgICBHc3RHTENvbnRleHQqIGNvbnRleHQgPSAoKEdzdEdMQmFzZU1lbW9yeSopbWVtKS0+Y29u
dGV4dDsKKyAgICAgICAgICAgIGdzdF9nbF9zeW5jX21ldGFfd2FpdF9jcHUobWV0YSwgY29udGV4
dCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKKworICAg
IGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBib29s
IGhhc0FscGhhQ2hhbm5lbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWxwaGFDaGFubmVsOyB9Cisg
ICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7
IH0KKyAgICBHTHVpbnQgdGV4dHVyZUlEKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlSUQ7IH0K
KyAgICBib29sIGhhc01hcHBlZFRleHR1cmVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNYXBwZWRU
ZXh0dXJlczsgfQorICAgIGNvbnN0IEdzdFZpZGVvRnJhbWUmIHZpZGVvRnJhbWUoKSBjb25zdCB7
IHJldHVybiBtX3ZpZGVvRnJhbWU7IH0KKworICAgIHZvaWQgdXBkYXRlVGV4dHVyZShCaXRtYXBU
ZXh0dXJlR0wmIHRleHR1cmUpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fdGV4dHVyZUlEKTsK
KyAgICAgICAgR3N0VmlkZW9HTFRleHR1cmVVcGxvYWRNZXRhKiBtZXRhOworICAgICAgICBpZiAo
bV9idWZmZXIgJiYgKG1ldGEgPSBnc3RfYnVmZmVyX2dldF92aWRlb19nbF90ZXh0dXJlX3VwbG9h
ZF9tZXRhKG1fYnVmZmVyKSkpIHsKKyAgICAgICAgICAgIGlmIChtZXRhLT5uX3RleHR1cmVzID09
IDEpIHsgLy8gQlJHeCAmIEJHUkEgZm9ybWF0cyB1c2Ugb25seSBvbmUgdGV4dHVyZS4KKyAgICAg
ICAgICAgICAgICBndWludCBpZHNbNF0gPSB7IHRleHR1cmUuaWQoKSwgMCwgMCwgMCB9OworCisg
ICAgICAgICAgICAgICAgaWYgKGdzdF92aWRlb19nbF90ZXh0dXJlX3VwbG9hZF9tZXRhX3VwbG9h
ZChtZXRhLCBpZHMpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1faXNNYXBwZWQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaW50IHN0cmlkZSA9IEdTVF9WSURFT19GUkFNRV9QTEFORV9TVFJJREUo
Jm1fdmlkZW9GcmFtZSwgMCk7CisgICAgICAgIGNvbnN0IHZvaWQqIHNyY0RhdGEgPSBHU1RfVklE
RU9fRlJBTUVfUExBTkVfREFUQSgmbV92aWRlb0ZyYW1lLCAwKTsKKworICAgICAgICBpZiAoIXNy
Y0RhdGEpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGV4dHVyZS51cGRhdGVDb250
ZW50cyhzcmNEYXRhLCBXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpLCBXZWJDb3JlOjpJbnRQb2ludCgwLCAwKSwgc3RyaWRlKTsKKyAgICB9CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IHBs
YXRmb3JtTGF5ZXJCdWZmZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2hhc01hcHBlZFRleHR1
cmVzKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdXNpbmcgQnVmZmVy
ID0gVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI7CisKKyAgICAgICAgaWYgKChHU1Rf
VklERU9fSU5GT19JU19SR0IoJm1fdmlkZW9GcmFtZS5pbmZvKSAmJiBHU1RfVklERU9fSU5GT19O
X1BMQU5FUygmbV92aWRlb0ZyYW1lLmluZm8pID09IDEpKQorICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWU8QnVmZmVyPihCdWZmZXI6OlRleHR1cmVWYXJpYW50IHsgQnVmZmVyOjpSR0JUZXh0
dXJlIHsgKnN0YXRpY19jYXN0PEdMdWludCo+KG1fdmlkZW9GcmFtZS5kYXRhWzBdKSB9IH0sIG1f
c2l6ZSwgbV9mbGFncywgR0xfUkdCQSk7CisKKyAgICAgICAgaWYgKEdTVF9WSURFT19JTkZPX0lT
X1lVVigmbV92aWRlb0ZyYW1lLmluZm8pKSB7CisgICAgICAgICAgICBpZiAoR1NUX1ZJREVPX0lO
Rk9fTl9DT01QT05FTlRTKCZtX3ZpZGVvRnJhbWUuaW5mbykgPCAzIHx8IEdTVF9WSURFT19JTkZP
X05fUExBTkVTKCZtX3ZpZGVvRnJhbWUuaW5mbykgPiAzKQorICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgICAgICAgICBpZiAobV92aWRlb0RlY29kZXJQbGF0Zm9ybSAmJiAq
bV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9PSBHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6SW14VlBV
KSB7CisgICAgICAgICAgICAgICAgLy8gSU1YIFZQVSBkZWNvZGVyIGRlY29kZXMgWVVWIGRhdGEg
b25seSBpbnRvIHRoZSBZIHRleHR1cmUgZnJvbSB3aGljaCB0aGUgc2FtcGxlcgorICAgICAgICAg
ICAgICAgIC8vIHRoZW4gZGlyZWN0bHkgcHJvZHVjZXMgUkdCQSBkYXRhLiBUZXh0dXJlcyBmb3Ig
b3RoZXIgcGxhbmVzIGFyZW4ndCB1c2VkLCBidXQKKyAgICAgICAgICAgICAgICAvLyB0aGF0J3Mg
ZGVjb2RlcidzIHByb2JsZW0uIFdlIGhhdmUgdG8gdHJlYXQgdGhhdCBZIHRleHR1cmUgYXMgaGF2
aW5nIFJHQkEgZGF0YS4KKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxCdWZmZXI+
KEJ1ZmZlcjo6VGV4dHVyZVZhcmlhbnQgeyBCdWZmZXI6OlJHQlRleHR1cmUgeyAqc3RhdGljX2Nh
c3Q8R0x1aW50Kj4obV92aWRlb0ZyYW1lLmRhdGFbMF0pIH0gfSwgbV9zaXplLCBtX2ZsYWdzLCBH
TF9SR0JBKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQ
bGFuZXMgPSBHU1RfVklERU9fSU5GT19OX1BMQU5FUygmbV92aWRlb0ZyYW1lLmluZm8pOworICAg
ICAgICAgICAgc3RkOjphcnJheTxHTHVpbnQsIDM+IHBsYW5lczsKKyAgICAgICAgICAgIHN0ZDo6
YXJyYXk8dW5zaWduZWQsIDM+IHl1dlBsYW5lOworICAgICAgICAgICAgc3RkOjphcnJheTx1bnNp
Z25lZCwgMz4geXV2UGxhbmVPZmZzZXQ7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtYmVyT2ZQbGFuZXM7ICsraSkKKyAgICAgICAgICAgICAgICBwbGFuZXNbaV0gPSAq
c3RhdGljX2Nhc3Q8R0x1aW50Kj4obV92aWRlb0ZyYW1lLmRhdGFbaV0pOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsraSkgeworICAgICAgICAgICAgICAgIHl1dlBs
YW5lW2ldID0gR1NUX1ZJREVPX0lORk9fQ09NUF9QTEFORSgmbV92aWRlb0ZyYW1lLmluZm8sIGkp
OworICAgICAgICAgICAgICAgIHl1dlBsYW5lT2Zmc2V0W2ldID0gR1NUX1ZJREVPX0lORk9fQ09N
UF9QT0ZGU0VUKCZtX3ZpZGVvRnJhbWUuaW5mbywgaSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHN0ZDo6YXJyYXk8R0xmbG9hdCwgOT4geXV2VG9SZ2I7CisgICAgICAgICAgICBpZiAo
Z3N0X3ZpZGVvX2NvbG9yaW1ldHJ5X21hdGNoZXMoJkdTVF9WSURFT19JTkZPX0NPTE9SSU1FVFJZ
KCZtX3ZpZGVvRnJhbWUuaW5mbyksIEdTVF9WSURFT19DT0xPUklNRVRSWV9CVDcwOSkpIHsKKyAg
ICAgICAgICAgICAgICB5dXZUb1JnYiA9IHsKKyAgICAgICAgICAgICAgICAgICAgMS4xNjRmLCAg
MC4wZiwgICAgMS43ODdmLAorICAgICAgICAgICAgICAgICAgICAxLjE2NGYsIC0wLjIxM2YsIC0w
LjUzMWYsCisgICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgIDIuMTEyZiwgIDAuMGYKKyAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBE
ZWZhdWx0IHRvIGJ0NjAxLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW91ciBhcyBHU3RyZWFtZXIn
cyBnbGNvbG9yY29udmVydCBlbGVtZW50LgorICAgICAgICAgICAgICAgIHl1dlRvUmdiID0gewor
ICAgICAgICAgICAgICAgICAgICAxLjE2NGYsICAwLjBmLCAgICAxLjU5NmYsCisgICAgICAgICAg
ICAgICAgICAgIDEuMTY0ZiwgLTAuMzkxZiwgLTAuODEzZiwKKyAgICAgICAgICAgICAgICAgICAg
MS4xNjRmLCAgMi4wMThmLCAgMC4wZgorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEJ1ZmZlcj4oIEJ1ZmZlcjo6VGV4dHVy
ZVZhcmlhbnQgeyBCdWZmZXI6OllVVlRleHR1cmUgeyBudW1iZXJPZlBsYW5lcywgcGxhbmVzLCB5
dXZQbGFuZSwgeXV2UGxhbmVPZmZzZXQsIHl1dlRvUmdiIH0gfSwgbV9zaXplLCBtX2ZsYWdzLCBH
TF9SR0JBKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBHc3RCdWZmZXIqIG1fYnVmZmVyOworICAgIEdzdFZpZGVvRnJhbWUgbV92
aWRlb0ZyYW1lIHsgfTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBib29sIG1faGFzQWxwaGFD
aGFubmVsOworICAgIE9wdGlvbmFsPEdzdFZpZGVvRGVjb2RlclBsYXRmb3JtPiBtX3ZpZGVvRGVj
b2RlclBsYXRmb3JtOworICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgbV9mbGFncyB7IH07Cisg
ICAgR0x1aW50IG1fdGV4dHVyZUlEIHsgMCB9OworICAgIGJvb2wgbV9pc01hcHBlZCB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2hhc01hcHBlZFRleHR1cmVzIHsgZmFsc2UgfTsKK307CisjZW5kaWYK
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmluaXRpYWxpemVEZWJ1Z0NhdGVn
b3J5KCkKK3sKKyAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbWVkaWFfcGxheWVy
X2RlYnVnLCAid2Via2l0bWVkaWFwbGF5ZXIiLCAwLCAiV2ViS2l0IG1lZGlhIHBsYXllciIpOwog
fQogCiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcihNZWRpYVBsYXllciogcGxheWVyKQotICAgIDogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZShwbGF5ZXIpCi0gICAgLCBtX2J1ZmZlcmluZyhmYWxzZSkKLSAgICAsIG1fYnVmZmVy
aW5nUGVyY2VudGFnZSgwKQorICAgIDogbV9ub3RpZmllcihNYWluVGhyZWFkTm90aWZpZXI8TWFp
blRocmVhZE5vdGlmaWNhdGlvbj46OmNyZWF0ZSgpKQorICAgICwgbV9wbGF5ZXIocGxheWVyKQog
ICAgICwgbV9jYWNoZWRQb3NpdGlvbihNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpCiAgICAgLCBt
X2NhY2hlZER1cmF0aW9uKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKLSAgICAsIG1fY2FuRmFs
bEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbihmYWxzZSkKLSAgICAsIG1fY2hhbmdpbmdS
YXRlKGZhbHNlKQotICAgICwgbV9kb3dubG9hZEZpbmlzaGVkKGZhbHNlKQotICAgICwgbV9lcnJv
ck9jY3VyZWQoZmFsc2UpCi0gICAgLCBtX2lzRW5kUmVhY2hlZChmYWxzZSkKLSAgICAsIG1faXNT
dHJlYW1pbmcoZmFsc2UpCi0gICAgLCBtX3BhdXNlZCh0cnVlKQotICAgICwgbV9wbGF5YmFja1Jh
dGUoMSkKLSAgICAsIG1fcmVxdWVzdGVkU3RhdGUoR1NUX1NUQVRFX1ZPSURfUEVORElORykKLSAg
ICAsIG1fcmVzZXRQaXBlbGluZShmYWxzZSkKLSAgICAsIG1fc2Vla2luZyhmYWxzZSkKLSAgICAs
IG1fc2Vla0lzUGVuZGluZyhmYWxzZSkKICAgICAsIG1fc2Vla1RpbWUoTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpKQotICAgICwgbV9zb3VyY2UobnVsbHB0cikKLSAgICAsIG1fdm9sdW1lQW5kTXV0
ZUluaXRpYWxpemVkKGZhbHNlKQotICAgICwgbV9tZWRpYUxvY2F0aW9ucyhudWxscHRyKQotICAg
ICwgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4KDApCi0gICAgLCBtX3BsYXliYWNrUmF0ZVBh
dXNlKGZhbHNlKQogICAgICwgbV90aW1lT2ZPdmVybGFwcGluZ1NlZWsoTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpKQotICAgICwgbV9sYXN0UGxheWJhY2tSYXRlKDEpCiAgICAgLCBtX2ZpbGxUaW1l
cigqdGhpcywgJk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZmlsbFRpbWVyRmlyZWQpCiAg
ICAgLCBtX21heFRpbWVMb2FkZWQoTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQogICAgICwgbV9wcmVs
b2FkKHBsYXllci0+cHJlbG9hZCgpKQotICAgICwgbV9kZWxheWluZ0xvYWQoZmFsc2UpCiAgICAg
LCBtX21heFRpbWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MoTWVkaWFUaW1lOjp6ZXJv
VGltZSgpKQotICAgICwgbV9oYXNWaWRlbyhmYWxzZSkKLSAgICAsIG1faGFzQXVkaW8oZmFsc2Up
Ci0gICAgLCBtX3JlYWR5VGltZXJIYW5kbGVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlUaW1lckZpcmVkKQotICAgICwgbV90b3RhbEJ5
dGVzKDApCi0gICAgLCBtX3ByZXNlcnZlc1BpdGNoKGZhbHNlKQorICAgICwgbV9kcmF3VGltZXIo
UnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZXBh
aW50KQorICAgICwgbV9yZWFkeVRpbWVySGFuZGxlcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5VGltZXJGaXJlZAorKQorI2lmIFVTRShU
RVhUVVJFX01BUFBFUl9HTCkKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAsIG1fbmljb3NpYUxheWVy
KE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkpCisjZWxzZQorICAgICwgbV9wbGF0
Zm9ybUxheWVyUHJveHkoYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkoKSkpCisjZW5kaWYKKyNlbmRpZiAgICAgIAogewogI2lmIFVTRShHTElCKQogICAgIG1fcmVh
ZHlUaW1lckhhbmRsZXIuc2V0UHJpb3JpdHkoR19QUklPUklUWV9ERUZBVUxUX0lETEUpOwpAQCAt
MjIyLDU0ICs0NDgsNjQgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyKCkKICAgICAgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1
cy5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3BpcGVsaW5lLmdldCgpLCBHX1NJR05BTF9NQVRD
SF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKICAgICB9Ci19CiAKLXN0YXRp
YyB2b2lkIGNvbnZlcnRUb0ludGVybmFsUHJvdG9jb2woVVJMJiB1cmwpCi17Ci0gICAgaWYgKHdl
YmtpdEdzdENoZWNrVmVyc2lvbigxLCAxMiwgMCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
dXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSB8fCB1cmwucHJvdG9jb2xJc0Jsb2IoKSkKLSAg
ICAgICAgdXJsLnNldFByb3RvY29sKCJ3ZWJraXQrIiArIHVybC5wcm90b2NvbCgpKTsKLX0KKyNp
ZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIGlmIChtX3ZpZGVvRGVjb2RlclBsYXRmb3JtID09IEdz
dFZpZGVvRGVjb2RlclBsYXRmb3JtOjpWaWRlbzRMaW51eCkKKyAgICAgICAgZmx1c2hDdXJyZW50
QnVmZmVyKCk7CisjZW5kaWYKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNP
U0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
PihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7CisjZW5kaWYKIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBsYXliaW5VUkwoY29uc3QgVVJM
JiB1cmwpCi17Ci0gICAgLy8gQ2xlYW4gb3V0IGV2ZXJ5dGhpbmcgYWZ0ZXIgZmlsZTovLyB1cmwg
cGF0aC4KLSAgICBTdHJpbmcgY2xlYW5VUkxTdHJpbmcodXJsLnN0cmluZygpKTsKLSAgICBpZiAo
dXJsLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgIGNsZWFuVVJMU3RyaW5nID0gY2xlYW5VUkxTdHJp
bmcuc3Vic3RyaW5nKDAsIHVybC5wYXRoRW5kKCkpOworICAgIG1fbm90aWZpZXItPmludmFsaWRh
dGUoKTsKIAotICAgIG1fdXJsID0gVVJMKFVSTCgpLCBjbGVhblVSTFN0cmluZyk7Ci0gICAgY29u
dmVydFRvSW50ZXJuYWxQcm90b2NvbChtX3VybCk7Ci0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICJMb2FkICVzIiwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgZ19v
YmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ1cmkiLCBtX3VybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBudWxscHRyKTsKLX0KKyAgICBpZiAobV92aWRlb1NpbmspIHsKKyAgICAgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fdmlkZW9TaW5rLmdldCgpLCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyNpZiBVU0Uo
R1NUUkVBTUVSX0dMKQorICAgICAgICBpZiAoR1NUX0lTX0JJTihtX3ZpZGVvU2luay5nZXQoKSkp
IHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gYXBwc2luayA9IGFkb3B0R1JlZihn
c3RfYmluX2dldF9ieV9uYW1lKEdTVF9CSU5fQ0FTVChtX3ZpZGVvU2luay5nZXQoKSksICJ3ZWJr
aXQtZ2wtdmlkZW8tc2luayIpKTsKKyAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfYnlfZGF0YShhcHBzaW5rLmdldCgpLCB0aGlzKTsKKyAgICAgICAgfQorI2VuZGlmCisg
ICAgfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJp
bmcmIHVybFN0cmluZykKLXsKLSAgICBsb2FkRnVsbCh1cmxTdHJpbmcsIFN0cmluZygpKTsKKyAg
ICBpZiAobV92b2x1bWVFbGVtZW50KQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQobV92b2x1bWVFbGVtZW50LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAw
LCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKworICAgIC8vIFRoaXMgd2lsbCByZWxlYXNl
IHRoZSBHU3RyZWFtZXIgdGhyZWFkIGZyb20gbV9kcmF3Q29uZGl0aW9uIGluIG5vbiBBQyBtb2Rl
IGluIGNhc2UgdGhlcmUncyBhbiBvbmdvaW5nIHRyaWdnZXJSZXBhaW50IGNhbGwKKyAgICAvLyB3
YWl0aW5nIHRoZXJlLCBhbmQgZW5zdXJlIHRoYXQgYW55IHRyaWdnZXJSZXBhaW50IGNhbGwgcmVh
Y2hpbmcgdGhlIGxvY2sgd29uJ3Qgd2FpdCBvbiBtX2RyYXdDb25kaXRpb24uCisgICAgY2FuY2Vs
UmVwYWludCh0cnVlKTsKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisgICAgbV9jZG1B
dHRhY2htZW50U2VtYXBob3JlLnNpZ25hbCgpOworI2VuZGlmCisKKyAgICAvLyBUaGUgY2hhbmdl
IHRvIEdTVF9TVEFURV9OVUxMIHN0YXRlIGlzIGFsd2F5cyBzeW5jaHJvbm91cy4gU28gYWZ0ZXIg
dGhpcyBnZXRzIGV4ZWN1dGVkIHdlIGRvbid0IG5lZWQgdG8gd29ycnkKKyAgICAvLyBhYm91dCBo
YW5kbGVycyBydW5uaW5nIGluIHRoZSBHU3RyZWFtZXIgdGhyZWFkLgorICAgIGlmIChtX3BpcGVs
aW5lKQorICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NU
X1NUQVRFX05VTEwpOworCisgICAgbV9wbGF5ZXIgPSBudWxscHRyOwogfQogCi1zdGF0aWMgdm9p
ZCBzZXRTeW5jT25DbG9jayhHc3RFbGVtZW50ICplbGVtZW50LCBib29sIHN5bmMpCitib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNBdmFpbGFibGUoKQogewotICAgIGlmICghR1NU
X0lTX0JJTihlbGVtZW50KSkgewotICAgICAgICBnX29iamVjdF9zZXQoZWxlbWVudCwgInN5bmMi
LCBzeW5jLCBOVUxMKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWluaXRpYWxp
emVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIEdzdEl0ZXJhdG9yKiBpdCA9IGdzdF9iaW5faXRlcmF0ZV9zaW5rcyhHU1Rf
QklOKGVsZW1lbnQpKTsKLSAgICB3aGlsZSAoZ3N0X2l0ZXJhdG9yX2ZvcmVhY2goaXQsIChHc3RJ
dGVyYXRvckZvcmVhY2hGdW5jdGlvbikoW10oY29uc3QgR1ZhbHVlKiBpdGVtLCB2b2lkKiBzeW5j
UHRyKSB7Ci0gICAgICAgIGJvb2wqIHN5bmMgPSBzdGF0aWNfY2FzdDxib29sKj4oc3luY1B0cik7
Ci0gICAgICAgIHNldFN5bmNPbkNsb2NrKEdTVF9FTEVNRU5UKGdfdmFsdWVfZ2V0X29iamVjdChp
dGVtKSksICpzeW5jKTsKLSAgICB9KSwgJnN5bmMpID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpCi0g
ICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMoaXQpOwotICAgIGdzdF9pdGVyYXRvcl9mcmVlKGl0
KTsKKyAgICAvLyBGSVhNRTogVGhpcyBoYXMgbm90IGJlZW4gdXBkYXRlZCBmb3IgdGhlIHBsYXli
aW4zIHN3aXRjaC4KKyAgICBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0b3J5PiBmYWN0b3J5ID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZCgicGxheWJpbiIpKTsKKyAgICByZXR1cm4g
ZmFjdG9yeTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN5bmNPbkNs
b2NrKGJvb2wgc3luYykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWdpc3Rl
ck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyIHJlZ2lzdHJhcikKIHsKLSAgICBzZXRT
eW5jT25DbG9jayh2aWRlb1NpbmsoKSwgc3luYyk7Ci0gICAgc2V0U3luY09uQ2xvY2soYXVkaW9T
aW5rKCksIHN5bmMpOworICAgIGluaXRpYWxpemVEZWJ1Z0NhdGVnb3J5KCk7CisKKyAgICBpZiAo
aXNBdmFpbGFibGUoKSkgeworICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXll
cikgeyByZXR1cm4gbWFrZVVuaXF1ZTxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+KHBsYXll
cik7IH0sCisgICAgICAgICAgICBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlLCBudWxs
cHRyLCBudWxscHRyLCBudWxscHRyLCBzdXBwb3J0c0tleVN5c3RlbSk7CisgICAgfQogfQogCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZEZ1bGwoY29uc3QgU3RyaW5nJiB1
cmxTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGlwZWxpbmVOYW1lKQpAQCAtMzE0LDYgKzU1MCwxMSBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZEZ1bGwoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgICAgICBjb21taXRMb2FkKCk7CiB9CiAKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsU3Ry
aW5nKQoreworICAgIGxvYWRGdWxsKHVybFN0cmluZywgU3RyaW5nKCkpOworfQorCiAjaWYgRU5B
QkxFKE1FRElBX1NPVVJDRSkKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2Fk
KGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopCiB7CkBAIC0zNTMsODgg
KzU5NCwxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29tbWl0TG9hZCgp
CiAgICAgdXBkYXRlU3RhdGVzKCk7CiB9CiAKLU1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnBsYXliYWNrUG9zaXRpb24oKSBjb25zdAordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmNhbmNlbExvYWQoKQogewotICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxp
bmUoKSwgImlzRW5kUmVhY2hlZDogJXMsIHNlZWtpbmc6ICVzLCBzZWVrVGltZTogJXMiLCBib29s
Rm9yUHJpbnRpbmcobV9pc0VuZFJlYWNoZWQpLCBib29sRm9yUHJpbnRpbmcobV9zZWVraW5nKSwg
bV9zZWVrVGltZS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChtX2lzRW5kUmVh
Y2hlZCAmJiBtX3NlZWtpbmcpCi0gICAgICAgIHJldHVybiBtX3NlZWtUaW1lOworICAgIGlmICht
X25ldHdvcmtTdGF0ZSA8IE1lZGlhUGxheWVyOjpMb2FkaW5nIHx8IG1fbmV0d29ya1N0YXRlID09
IE1lZGlhUGxheWVyOjpMb2FkZWQpCisgICAgICAgIHJldHVybjsKIAotICAgIC8vIFRoaXMgY29u
c3RhbnQgc2hvdWxkIHJlbWFpbiBsb3dlciB0aGFuIEhUTUxNZWRpYUVsZW1lbnQncyBtYXhUaW1l
dXBkYXRlRXZlbnRGcmVxdWVuY3kuCi0gICAgc3RhdGljIGNvbnN0IFNlY29uZHMgcG9zaXRpb25D
YWNoZVRocmVzaG9sZCA9IDIwMF9tczsKLSAgICBTZWNvbmRzIG5vdyA9IFdURjo6V2FsbFRpbWU6
Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCk7Ci0gICAgaWYgKG1fbGFzdFF1ZXJ5VGltZSAmJiAo
bm93IC0gbV9sYXN0UXVlcnlUaW1lLnZhbHVlKCkpIDwgcG9zaXRpb25DYWNoZVRocmVzaG9sZCAm
JiBtX2NhY2hlZFBvc2l0aW9uLmlzVmFsaWQoKSkgewotICAgICAgICBHU1RfVFJBQ0VfT0JKRUNU
KHBpcGVsaW5lKCksICJSZXR1cm5pbmcgY2FjaGVkIHBvc2l0aW9uOiAlcyIsIG1fY2FjaGVkUG9z
aXRpb24udG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIG1fY2FjaGVk
UG9zaXRpb247Ci0gICAgfQotCi0gICAgbV9sYXN0UXVlcnlUaW1lID0gbm93OwotCi0gICAgLy8g
UG9zaXRpb24gaXMgb25seSBhdmFpbGFibGUgaWYgbm8gYXN5bmMgc3RhdGUgY2hhbmdlIGlzIGdv
aW5nIG9uIGFuZCB0aGUgc3RhdGUgaXMgZWl0aGVyIHBhdXNlZCBvciBwbGF5aW5nLgotICAgIGdp
bnQ2NCBwb3NpdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Ci0gICAgR3N0UXVlcnkqIHF1ZXJ5
ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX1RJTUUpOwotICAgIGlmIChnc3Rf
ZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBxdWVyeSkpCi0gICAgICAgIGdzdF9xdWVy
eV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKLSAgICBnc3RfcXVlcnlfdW5y
ZWYocXVlcnkpOwotCi0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiUG9zaXRpb24g
JSIgR1NUX1RJTUVfRk9STUFUICIsIGNhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRp
b246ICVzIiwgR1NUX1RJTUVfQVJHUyhwb3NpdGlvbiksIGJvb2xGb3JQcmludGluZyhtX2NhbkZh
bGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24pKTsKLQotICAgIE1lZGlhVGltZSBwbGF5
YmFja1Bvc2l0aW9uID0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotICAgIEdzdENsb2NrVGltZSBn
c3RyZWFtZXJQb3NpdGlvbiA9IHN0YXRpY19jYXN0PEdzdENsb2NrVGltZT4ocG9zaXRpb24pOwot
ICAgIGlmIChHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRChnc3RyZWFtZXJQb3NpdGlvbikpCi0gICAg
ICAgIHBsYXliYWNrUG9zaXRpb24gPSBNZWRpYVRpbWUoZ3N0cmVhbWVyUG9zaXRpb24sIEdTVF9T
RUNPTkQpOwotICAgIGVsc2UgaWYgKG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3Np
dGlvbikKLSAgICAgICAgcGxheWJhY2tQb3NpdGlvbiA9IG1fc2Vla1RpbWU7Ci0KLSAgICBtX2Nh
Y2hlZFBvc2l0aW9uID0gcGxheWJhY2tQb3NpdGlvbjsKLSAgICByZXR1cm4gcGxheWJhY2tQb3Np
dGlvbjsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5VGltZXJG
aXJlZCgpCi17Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiSW4gUkVBRFkgZm9y
IHRvbyBsb25nLiBSZWxlYXNpbmcgcGlwZWxpbmUgcmVzb3VyY2VzLiIpOwotICAgIGNoYW5nZVBp
cGVsaW5lU3RhdGUoR1NUX1NUQVRFX05VTEwpOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZShHc3RTdGF0ZSBuZXdTdGF0ZSkKLXsKLSAg
ICBBU1NFUlQobV9waXBlbGluZSk7Ci0KLSAgICBHc3RTdGF0ZSBjdXJyZW50U3RhdGU7Ci0gICAg
R3N0U3RhdGUgcGVuZGluZzsKLQotICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5l
LmdldCgpLCAmY3VycmVudFN0YXRlLCAmcGVuZGluZywgMCk7Ci0gICAgaWYgKGN1cnJlbnRTdGF0
ZSA9PSBuZXdTdGF0ZSB8fCBwZW5kaW5nID09IG5ld1N0YXRlKSB7Ci0gICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgIlJlamVjdGVkIHN0YXRlIGNoYW5nZSB0byAlcyBmcm9tICVz
IHdpdGggJXMgcGVuZGluZyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSwK
LSAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSksIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ2hhbmdpbmcgc3Rh
dGUgY2hhbmdlIHRvICVzIGZyb20gJXMgd2l0aCAlcyBwZW5kaW5nIiwgZ3N0X2VsZW1lbnRfc3Rh
dGVfZ2V0X25hbWUobmV3U3RhdGUpLAotICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFt
ZShjdXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7Ci0K
LSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGlmIChjdXJyZW50U3RhdGUgPD0gR1NUX1NUQVRF
X1JFQURZICYmIG5ld1N0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpCi0gICAgICAgIGVuc3VyZUdM
VmlkZW9TaW5rQ29udGV4dCgpOwotI2VuZGlmCi0KLSAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiBz
ZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBu
ZXdTdGF0ZSk7Ci0gICAgR3N0U3RhdGUgcGF1c2VkT3JQbGF5aW5nID0gbmV3U3RhdGUgPT0gR1NU
X1NUQVRFX1BMQVlJTkcgPyBHU1RfU1RBVEVfUEFVU0VEIDogR1NUX1NUQVRFX1BMQVlJTkc7Ci0g
ICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBwYXVzZWRPclBsYXlpbmcgJiYgc2V0U3RhdGVSZXN1bHQg
PT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBDcmVhdGUgYSB0aW1lciB3aGVuIGVudGVyaW5nIHRoZSBSRUFEWSBzdGF0ZSBzbyB0aGF0
IHdlIGNhbiBmcmVlIHJlc291cmNlcwotICAgIC8vIGlmIHdlIHN0YXkgZm9yIHRvbyBsb25nIG9u
IFJFQURZLgotICAgIC8vIEFsc28gbGV0cyByZW1vdmUgdGhlIHRpbWVyIGlmIHdlIHJlcXVlc3Qg
YSBzdGF0ZSBjaGFuZ2UgZm9yIGFueSBzdGF0ZSBvdGhlciB0aGFuIFJFQURZLgotICAgIC8vIFNl
ZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTczNTQKLSAg
ICBpZiAobmV3U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZICYmICFtX3JlYWR5VGltZXJIYW5kbGVy
LmlzQWN0aXZlKCkpIHsKLSAgICAgICAgLy8gTWF4IGludGVydmFsIGluIHNlY29uZHMgdG8gc3Rh
eSBpbiB0aGUgUkVBRFkgc3RhdGUgb24gbWFudWFsCi0gICAgICAgIC8vIHN0YXRlIGNoYW5nZSBy
ZXF1ZXN0cy4KLSAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgcmVhZHlTdGF0ZVRpbWVyRGVs
YXkgeyAxX21pbiB9OwotICAgICAgICBtX3JlYWR5VGltZXJIYW5kbGVyLnN0YXJ0T25lU2hvdChy
ZWFkeVN0YXRlVGltZXJEZWxheSk7Ci0gICAgfSBlbHNlIGlmIChuZXdTdGF0ZSAhPSBHU1RfU1RB
VEVfUkVBRFkpCi0gICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc3RvcCgpOwotCi0gICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIGNoYW5nZVBpcGVsaW5lU3Rh
dGUoR1NUX1NUQVRFX1JFQURZKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnByZXBhcmVUb1BsYXkoKQpAQCAtNDc4LDU0ICs2NDQsNDggQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBhdXNlKCkKICAgICAgICAgbG9hZGluZ0ZhaWxlZChNZWRpYVBs
YXllcjo6RW1wdHkpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpwbGF0Zm9ybUR1cmF0aW9uKCkgY29uc3QKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpwYXVzZWQoKSBjb25zdAogewogICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0
dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLQotICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlw
ZWxpbmUoKSwgImVycm9yT2NjdXJlZDogJXMsIHBpcGVsaW5lIHN0YXRlOiAlcyIsIGJvb2xGb3JQ
cmludGluZyhtX2Vycm9yT2NjdXJlZCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKEdTVF9T
VEFURShtX3BpcGVsaW5lLmdldCgpKSkpOwotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKLSAgICAg
ICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICAvLyBUaGUgZHVyYXRpb24gcXVlcnkgd291bGQgZmFpbCBvbiBhIG5vdC1wcmVyb2xs
ZWQgcGlwZWxpbmUuCi0gICAgaWYgKEdTVF9TVEFURShtX3BpcGVsaW5lLmdldCgpKSA8IEdTVF9T
VEFURV9QQVVTRUQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Cisg
ICAgaWYgKG1faXNFbmRSZWFjaGVkKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIklnbm9yaW5nIHBhdXNlIGF0IEVPUyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CiAKLSAgICBpbnQ2NF90IGR1cmF0aW9uID0gMDsKLSAgICBpZiAoIWdzdF9lbGVtZW50X3F1
ZXJ5X2R1cmF0aW9uKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJmR1cmF0aW9u
KSB8fCAhR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQoZHVyYXRpb24pKSB7Ci0gICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRpbWUgZHVyYXRpb24gcXVlcnkgZmFpbGVkIGZvciAl
cyIsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gTWVkaWFU
aW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpOworICAgIGlmIChtX3BsYXliYWNrUmF0ZVBhdXNl
KSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXliYWNrIHJhdGUg
aXMgMCwgc2ltdWxhdGluZyBQQVVTRUQgc3RhdGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJEdXJhdGlvbjogJSIgR1NU
X1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTKGR1cmF0aW9uKSk7Ci0gICAgcmV0dXJuIE1lZGlh
VGltZShkdXJhdGlvbiwgR1NUX1NFQ09ORCk7CisgICAgR3N0U3RhdGUgc3RhdGU7CisgICAgZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7
CisgICAgYm9vbCBwYXVzZWQgPSBzdGF0ZSA8PSBHU1RfU1RBVEVfUEFVU0VEOworICAgIEdTVF9M
T0dfT0JKRUNUKHBpcGVsaW5lKCksICJQYXVzZWQ6ICVzIiwgdG9TdHJpbmcocGF1c2VkKS51dGY4
KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gcGF1c2VkOwogfQogCi1NZWRpYVRpbWUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0Citib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYgcG9zaXRpb24s
IGZsb2F0IHJhdGUsIEdzdFNlZWtGbGFncyBzZWVrVHlwZSkKIHsKLSAgICBHU1RfVFJBQ0VfT0JK
RUNUKHBpcGVsaW5lKCksICJDYWNoZWQgZHVyYXRpb246ICVzIiwgbV9jYWNoZWREdXJhdGlvbi50
b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChtX2NhY2hlZER1cmF0aW9uLmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuIG1fY2FjaGVkRHVyYXRpb247Ci0KLSAgICBNZWRpYVRpbWUg
ZHVyYXRpb24gPSBwbGF0Zm9ybUR1cmF0aW9uKCk7Ci0gICAgaWYgKCFkdXJhdGlvbiB8fCBkdXJh
dGlvbi5pc0ludmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsK
LQotICAgIG1fY2FjaGVkRHVyYXRpb24gPSBkdXJhdGlvbjsKLQotICAgIHJldHVybiBtX2NhY2hl
ZER1cmF0aW9uOwotfQorICAgIC8vIERlZmF1bHQgdmFsdWVzIGZvciByYXRlID49IDAuCisgICAg
TWVkaWFUaW1lIHN0YXJ0VGltZSA9IHBvc2l0aW9uLCBlbmRUaW1lID0gTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpOwogCi1NZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjdXJy
ZW50TWVkaWFUaW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9j
Y3VyZWQpCi0gICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisgICAgaWYg
KHJhdGUgPCAwKSB7CisgICAgICAgIHN0YXJ0VGltZSA9IE1lZGlhVGltZTo6emVyb1RpbWUoKTsK
KyAgICAgICAgLy8gSWYgd2UgYXJlIGF0IGJlZ2lubmluZyBvZiBtZWRpYSwgc3RhcnQgZnJvbSB0
aGUgZW5kIHRvCisgICAgICAgIC8vIGF2b2lkIGltbWVkaWF0ZSBFT1MuCisgICAgICAgIGlmIChw
b3NpdGlvbiA8IE1lZGlhVGltZTo6emVyb1RpbWUoKSkKKyAgICAgICAgICAgIGVuZFRpbWUgPSBk
dXJhdGlvbk1lZGlhVGltZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbmRUaW1lID0g
cG9zaXRpb247CisgICAgfQogCi0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAic2Vl
a2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX3NlZWtpbmcpLCBtX3Nl
ZWtUaW1lLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKG1fc2Vla2luZykKLSAg
ICAgICAgcmV0dXJuIG1fc2Vla1RpbWU7CisgICAgaWYgKCFyYXRlKQorICAgICAgICByYXRlID0g
MS4wOwogCi0gICAgcmV0dXJuIHBsYXliYWNrUG9zaXRpb24oKTsKKyAgICByZXR1cm4gZ3N0X2Vs
ZW1lbnRfc2VlayhtX3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtU
eXBlLAorICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoc3RhcnRUaW1l
KSwgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKGVuZFRpbWUpKTsKIH0KIAogdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNlZWsoY29uc3QgTWVkaWFUaW1lJiBtZWRp
YVRpbWUpCkBAIC01ODgsMjggKzc0OCw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpzZWVrKGNvbnN0IE1lZGlhVGltZSYgbWVkaWFUaW1lKQogICAgIG1faXNFbmRSZWFjaGVk
ID0gZmFsc2U7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWso
Y29uc3QgTWVkaWFUaW1lJiBwb3NpdGlvbiwgZmxvYXQgcmF0ZSwgR3N0U2Vla0ZsYWdzIHNlZWtU
eXBlKQotewotICAgIC8vIERlZmF1bHQgdmFsdWVzIGZvciByYXRlID49IDAuCi0gICAgTWVkaWFU
aW1lIHN0YXJ0VGltZSA9IHBvc2l0aW9uLCBlbmRUaW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGlt
ZSgpOwotCi0gICAgaWYgKHJhdGUgPCAwKSB7Ci0gICAgICAgIHN0YXJ0VGltZSA9IE1lZGlhVGlt
ZTo6emVyb1RpbWUoKTsKLSAgICAgICAgLy8gSWYgd2UgYXJlIGF0IGJlZ2lubmluZyBvZiBtZWRp
YSwgc3RhcnQgZnJvbSB0aGUgZW5kIHRvCi0gICAgICAgIC8vIGF2b2lkIGltbWVkaWF0ZSBFT1Mu
Ci0gICAgICAgIGlmIChwb3NpdGlvbiA8IE1lZGlhVGltZTo6emVyb1RpbWUoKSkKLSAgICAgICAg
ICAgIGVuZFRpbWUgPSBkdXJhdGlvbk1lZGlhVGltZSgpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBlbmRUaW1lID0gcG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKCFyYXRlKQotICAgICAg
ICByYXRlID0gMS4wOwotCi0gICAgcmV0dXJuIGdzdF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5n
ZXQoKSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLCBzZWVrVHlwZSwKLSAgICAgICAgR1NUX1NFRUtf
VFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKHN0YXJ0VGltZSksIEdTVF9TRUVLX1RZUEVfU0VULCB0
b0dzdENsb2NrVGltZShlbmRUaW1lKSk7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp1cGRhdGVQbGF5YmFja1JhdGUoKQogewogICAgIGlmICghbV9jaGFuZ2luZ1JhdGUp
CkBAIC02NDQsNTgwICs3ODIsMTQwOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6dXBkYXRlUGxheWJhY2tSYXRlKCkKICAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQoKTsKIH0K
IAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNlZCgpIGNvbnN0CitNZWRp
YVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF0Zm9ybUR1cmF0aW9uKCkgY29u
c3QKIHsKICAgICBpZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwogCi0gICAgaWYgKG1faXNFbmRSZWFj
aGVkKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIklnbm9yaW5nIHBh
dXNlIGF0IEVPUyIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgR1NUX1RSQUNF
X09CSkVDVChwaXBlbGluZSgpLCAiZXJyb3JPY2N1cmVkOiAlcywgcGlwZWxpbmUgc3RhdGU6ICVz
IiwgYm9vbEZvclByaW50aW5nKG1fZXJyb3JPY2N1cmVkKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUoR1NUX1NUQVRFKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgaWYgKG1fZXJyb3JPY2N1
cmVkKQorICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwogCi0gICAgaWYg
KG1fcGxheWJhY2tSYXRlUGF1c2UpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiUGxheWJhY2sgcmF0ZSBpcyAwLCBzaW11bGF0aW5nIFBBVVNFRCBzdGF0ZSIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gVGhlIGR1cmF0aW9uIHF1ZXJ5IHdvdWxkIGZhaWwg
b24gYSBub3QtcHJlcm9sbGVkIHBpcGVsaW5lLgorICAgIGlmIChHU1RfU1RBVEUobV9waXBlbGlu
ZS5nZXQoKSkgPCBHU1RfU1RBVEVfUEFVU0VEKQorICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjpp
bnZhbGlkVGltZSgpOworCisgICAgaW50NjRfdCBkdXJhdGlvbiA9IDA7CisgICAgaWYgKCFnc3Rf
ZWxlbWVudF9xdWVyeV9kdXJhdGlvbihtX3BpcGVsaW5lLmdldCgpLCBHU1RfRk9STUFUX1RJTUUs
ICZkdXJhdGlvbikgfHwgIUdTVF9DTE9DS19USU1FX0lTX1ZBTElEKGR1cmF0aW9uKSkgeworICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJUaW1lIGR1cmF0aW9uIHF1ZXJ5IGZh
aWxlZCBmb3IgJXMiLCBtX3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0
dXJuIE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUoKTsKICAgICB9CiAKLSAgICBHc3RT
dGF0ZSBzdGF0ZTsKLSAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwg
JnN0YXRlLCBudWxscHRyLCAwKTsKLSAgICBib29sIHBhdXNlZCA9IHN0YXRlIDw9IEdTVF9TVEFU
RV9QQVVTRUQ7Ci0gICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBhdXNlZDogJXMiLCB0
b1N0cmluZyhwYXVzZWQpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBwYXVzZWQ7CisgICAg
R1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIkR1cmF0aW9uOiAlIiBHU1RfVElNRV9GT1JNQVQs
IEdTVF9USU1FX0FSR1MoZHVyYXRpb24pKTsKKyAgICByZXR1cm4gTWVkaWFUaW1lKGR1cmF0aW9u
LCBHU1RfU0VDT05EKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNl
ZWtpbmcoKSBjb25zdAorTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVy
YXRpb25NZWRpYVRpbWUoKSBjb25zdAogewotICAgIHJldHVybiBtX3NlZWtpbmc7Ci19CisgICAg
R1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiQ2FjaGVkIGR1cmF0aW9uOiAlcyIsIG1fY2Fj
aGVkRHVyYXRpb24udG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAobV9jYWNoZWRE
dXJhdGlvbi5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBtX2NhY2hlZER1cmF0aW9uOwogCi0j
ZGVmaW5lIENMRUFSX1RSQUNLUyh0cmFja3MsIG1ldGhvZCkgXAotICAgIGZvciAoYXV0byYgdHJh
Y2sgOiB0cmFja3MudmFsdWVzKCkpXAotICAgICAgICBtZXRob2QoKnRyYWNrKTtcCi0gICAgdHJh
Y2tzLmNsZWFyKCk7CisgICAgTWVkaWFUaW1lIGR1cmF0aW9uID0gcGxhdGZvcm1EdXJhdGlvbigp
OworICAgIGlmICghZHVyYXRpb24gfHwgZHVyYXRpb24uaXNJbnZhbGlkKCkpCisgICAgICAgIHJl
dHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjbGVhclRyYWNrcygpCi17Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIENM
RUFSX1RSQUNLUyhtX2F1ZGlvVHJhY2tzLCBtX3BsYXllci0+cmVtb3ZlQXVkaW9UcmFjayk7Ci0g
ICAgQ0xFQVJfVFJBQ0tTKG1fdmlkZW9UcmFja3MsIG1fcGxheWVyLT5yZW1vdmVWaWRlb1RyYWNr
KTsKLSAgICBDTEVBUl9UUkFDS1MobV90ZXh0VHJhY2tzLCBtX3BsYXllci0+cmVtb3ZlVGV4dFRy
YWNrKTsKLSNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgbV9jYWNoZWREdXJhdGlv
biA9IGR1cmF0aW9uOworCisgICAgcmV0dXJuIG1fY2FjaGVkRHVyYXRpb247CiB9Ci0jdW5kZWYg
Q0xFQVJfVFJBQ0tTCiAKLUZsb2F0U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5h
dHVyYWxTaXplKCkgY29uc3QKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmN1cnJlbnRNZWRpYVRpbWUoKSBjb25zdAogewotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0g
ICAgaWYgKCFtX2lzTGVnYWN5UGxheWJpbiAmJiAhbV9jdXJyZW50VmlkZW9TdHJlYW1JZC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB2aWRl
b1RyYWNrID0gbV92aWRlb1RyYWNrcy5nZXQobV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7Ci0KLSAg
ICAgICAgaWYgKHZpZGVvVHJhY2spIHsKLSAgICAgICAgICAgIGF1dG8gdGFncyA9IGFkb3B0R1Jl
Zihnc3Rfc3RyZWFtX2dldF90YWdzKHZpZGVvVHJhY2stPnN0cmVhbSgpKSk7Ci0gICAgICAgICAg
ICBnaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1
cmVkKQorICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwogCi0gICAgICAg
ICAgICBpZiAodGFncyAmJiBnc3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLmdldCgpLCBXRUJLSVRf
TUVESUFfVFJBQ0tfVEFHX1dJRFRILCAmd2lkdGgpICYmIGdzdF90YWdfbGlzdF9nZXRfaW50KHRh
Z3MuZ2V0KCksIFdFQktJVF9NRURJQV9UUkFDS19UQUdfSEVJR0hULCAmaGVpZ2h0KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0g
ICAgfQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgR1NUX1RSQUNFX09CSkVD
VChwaXBlbGluZSgpLCAic2Vla2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmludGlu
ZyhtX3NlZWtpbmcpLCBtX3NlZWtUaW1lLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
aWYgKG1fc2Vla2luZykKKyAgICAgICAgcmV0dXJuIG1fc2Vla1RpbWU7CiAKLSAgICByZXR1cm4g
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmF0dXJhbFNpemUoKTsKKyAgICByZXR1
cm4gcGxheWJhY2tQb3NpdGlvbigpOwogfQogCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotI2Rl
ZmluZSBDUkVBVEVfVFJBQ0sodHlwZSwgVHlwZSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBtX2hhcyMjVHlwZSA9IHRydWU7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIXVzZU1lZGlhU291
cmNlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICAgICAgUmVmUHRyPFR5cGUjI1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBUeXBlIyNU
cmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0cigqdGhpcyksIGksIHN0cmVh
bSk7IFwKLSAgICAgICAgICAgIG1fIyN0eXBlIyNUcmFja3MuYWRkKHRyYWNrLT5pZCgpLCB0cmFj
ayk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIG1fcGxheWVyLT5hZGQjI1R5cGUj
I1RyYWNrKCp0cmFjayk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlm
IChnc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxhZ3Moc3RyZWFtLmdldCgpKSAmIEdTVF9TVFJFQU1f
RkxBR19TRUxFQ1QpIFwKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnQjI1R5cGUjI1N0cmVhbUlk
ID0gU3RyaW5nKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpKTsgXAotICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIH0gR19TVE1UX0VORAotI2Vsc2UKLSNkZWZpbmUgQ1JFQVRFX1RS
QUNLKHR5cGUsIFR5cGUpIEdfU1RNVF9TVEFSVCB7IFwKLSAgICAgICAgbV9oYXMjI1R5cGUjIyA9
IHRydWU7ICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IEdfU1RNVF9FTkQKLSNlbmRpZiAvLyBF
TkFCTEUoVklERU9fVFJBQ0spCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1
cGRhdGVUcmFja3MoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFJhdGUo
ZmxvYXQgcmF0ZSkKIHsKLSAgICBBU1NFUlQoIW1faXNMZWdhY3lQbGF5YmluKTsKKyAgICAvLyBI
aWdoZXIgcmF0ZSBjYXVzZXMgY3Jhc2guCisgICAgcmF0ZSA9IGNsYW1wVG8ocmF0ZSwgLTIwLjAs
IDIwLjApOwogCi0gICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemUobV9zdHJl
YW1Db2xsZWN0aW9uLmdldCgpKTsKLQotICAgIGJvb2wgb2xkSGFzQXVkaW8gPSBtX2hhc0F1ZGlv
OwotICAgIGJvb2wgb2xkSGFzVmlkZW8gPSBtX2hhc1ZpZGVvOwotICAgIC8vIE5ldyBzdHJlYW0g
Y29sbGVjdGlvbnMgb3ZlcnJpZGUgcHJldmlvdXMgb25lcy4KLSAgICBjbGVhclRyYWNrcygpOwot
ICAgIHVuc2lnbmVkIHRleHRUcmFja0luZGV4ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9
IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQo
KSwgaSk7Ci0gICAgICAgIFN0cmluZyBzdHJlYW1JZChnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQo
c3RyZWFtLmdldCgpKSk7Ci0gICAgICAgIEdzdFN0cmVhbVR5cGUgdHlwZSA9IGdzdF9zdHJlYW1f
Z2V0X3N0cmVhbV90eXBlKHN0cmVhbS5nZXQoKSk7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChwaXBlbGluZSgpLCAiSW5zcGVjdGluZyAlcyB0cmFjayB3aXRoIElEICVzIiwgZ3N0X3N0cmVh
bV90eXBlX2dldF9uYW1lKHR5cGUpLCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
aWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfQVVESU8pCi0gICAgICAgICAgICBDUkVBVEVfVFJB
Q0soYXVkaW8sIEF1ZGlvKTsKLSAgICAgICAgZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQ
RV9WSURFTykKLSAgICAgICAgICAgIENSRUFURV9UUkFDSyh2aWRlbywgVmlkZW8pOwotICAgICAg
ICBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX1RFWFQgJiYgIXVzZU1lZGlhU291cmNl
KSB7Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgICAgICAgICAgYXV0byB0cmFjayA9IElu
YmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZSh0ZXh0VHJhY2tJbmRleCsrLCBz
dHJlYW0pOwotICAgICAgICAgICAgbV90ZXh0VHJhY2tzLmFkZChzdHJlYW1JZCwgdHJhY2suY29w
eVJlZigpKTsKLSAgICAgICAgICAgIG1fcGxheWVyLT5hZGRUZXh0VHJhY2sodHJhY2suZ2V0KCkp
OwotI2VuZGlmCi0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25v
d24gdHJhY2sgdHlwZSBmb3VuZCBmb3Igc3RyZWFtICVzIiwgc3RyZWFtSWQudXRmOCgpLmRhdGEo
KSk7Ci0gICAgfQotCi0gICAgaWYgKChvbGRIYXNWaWRlbyAhPSBtX2hhc1ZpZGVvKSB8fCAob2xk
SGFzQXVkaW8gIT0gbV9oYXNBdWRpbykpCi0gICAgICAgIG1fcGxheWVyLT5jaGFyYWN0ZXJpc3Rp
Y0NoYW5nZWQoKTsKLQotICAgIGlmIChtX2hhc1ZpZGVvKQotICAgICAgICBtX3BsYXllci0+c2l6
ZUNoYW5nZWQoKTsKLQotICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVw
ZGF0ZWQobV9wbGF5ZXIpOwotfQotCi0jdW5kZWYgQ1JFQVRFX1RSQUNLCisgICAgLy8gQXZvaWQg
dXNlbGVzcyBwbGF5YmFjayByYXRlIHVwZGF0ZS4KKyAgICBpZiAobV9wbGF5YmFja1JhdGUgPT0g
cmF0ZSkgeworICAgICAgICAvLyBhbmQgbWFrZSBzdXJlIHRoYXQgdXBwZXIgbGF5ZXJzIHdlcmUg
bm90aWZpZWQgaWYgcmF0ZSB3YXMgc2V0CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjplbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUgdHJh
Y2tUeXBlLCB1bnNpZ25lZCBpbmRleCkKLXsKLSAgICAvLyBGSVhNRTogUmVtb3ZlIGlzTWVkaWFT
b3VyY2UoKSB0ZXN0IGJlbG93IHdoZW4gZml4aW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODI1MzEuCi0gICAgaWYgKGlzTWVkaWFTb3VyY2UoKSkgewotICAgICAg
ICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBdWRpby9WaWRlby9UZXh0IHRy
YWNrIHN3aXRjaGluZyBpcyBub3QgeWV0IHN1cHBvcnRlZCBieSB0aGUgTVNFIGJhY2tlbmQuIik7
CisgICAgICAgIGlmICghbV9jaGFuZ2luZ1JhdGUgJiYgbV9wbGF5ZXItPnJhdGUoKSAhPSBtX3Bs
YXliYWNrUmF0ZSkKKyAgICAgICAgICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgY29uc3QgY2hhciogcHJvcGVydHlOYW1lOwotICAgIGNv
bnN0IGNoYXIqIHRyYWNrVHlwZUFzU3RyaW5nOwotICAgIFZlY3RvcjxTdHJpbmc+IHNlbGVjdGVk
U3RyZWFtczsKLSAgICBTdHJpbmcgc2VsZWN0ZWRTdHJlYW1JZDsKLQotICAgIEdzdFN0cmVhbSog
c3RyZWFtID0gbnVsbHB0cjsKLQotICAgIGlmICghbV9pc0xlZ2FjeVBsYXliaW4pIHsKLSAgICAg
ICAgc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0obV9zdHJlYW1Db2xs
ZWN0aW9uLmdldCgpLCBpbmRleCk7Ci0gICAgICAgIGlmICghc3RyZWFtKSB7Ci0gICAgICAgICAg
ICBHU1RfV0FSTklOR19PQkpFQ1QocGlwZWxpbmUoKSwgIk5vIHN0cmVhbSB0byBzZWxlY3QgYXQg
aW5kZXggJXUiLCBpbmRleCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgc2VsZWN0ZWRTdHJlYW1JZCA9IFN0cmluZzo6ZnJvbVVURjgoZ3N0X3N0cmVhbV9nZXRfc3Ry
ZWFtX2lkKHN0cmVhbSkpOwotICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKHNlbGVjdGVk
U3RyZWFtSWQpOworICAgIGlmIChpc0xpdmVTdHJlYW0oKSkgeworICAgICAgICAvLyBub3RpZnkg
dXBwZXIgbGF5ZXJzIHRoYXQgd2UgY2Fubm90IGhhbmRsZSBwYXNzZWQgcmF0ZS4KKyAgICAgICAg
bV9jaGFuZ2luZ1JhdGUgPSBmYWxzZTsKKyAgICAgICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7
CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzd2l0Y2ggKHRyYWNrVHlwZSkgewotICAg
IGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpBdWRpbzoKLSAgICAg
ICAgcHJvcGVydHlOYW1lID0gImN1cnJlbnQtYXVkaW8iOwotICAgICAgICB0cmFja1R5cGVBc1N0
cmluZyA9ICJhdWRpbyI7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkg
JiYgc2VsZWN0ZWRTdHJlYW1JZCA9PSBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKSB7Ci0gICAgICAg
ICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMgYWxyZWFkeSBz
ZWxlY3RlZCwgbm90IGRvaW5nIGFueXRoaW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5nLCBzZWxlY3Rl
ZFN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CisgICAgR3N0U3RhdGUgc3RhdGU7CisgICAgR3N0U3RhdGUgcGVuZGluZzsKIAotICAgICAgICBp
ZiAoIW1fY3VycmVudFRleHRTdHJlYW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3Rl
ZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudFRleHRTdHJlYW1JZCk7Ci0gICAgICAgIGlmICghbV9j
dXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0cmVh
bXMuYXBwZW5kKG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VmlkZW86Ci0gICAgICAg
IHByb3BlcnR5TmFtZSA9ICJjdXJyZW50LXZpZGVvIjsKLSAgICAgICAgdHJhY2tUeXBlQXNTdHJp
bmcgPSAidmlkZW8iOwotICAgICAgICBpZiAoIXNlbGVjdGVkU3RyZWFtSWQuaXNFbXB0eSgpICYm
IHNlbGVjdGVkU3RyZWFtSWQgPT0gbV9jdXJyZW50VmlkZW9TdHJlYW1JZCkgewotICAgICAgICAg
ICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICIlcyBzdHJlYW06ICVzIGFscmVhZHkgc2Vs
ZWN0ZWQsIG5vdCBkb2luZyBhbnl0aGluZy4iLCB0cmFja1R5cGVBc1N0cmluZywgc2VsZWN0ZWRT
dHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQor
ICAgIG1fcGxheWJhY2tSYXRlID0gcmF0ZTsKKyAgICBtX2NoYW5naW5nUmF0ZSA9IHRydWU7CiAK
LSAgICAgICAgaWYgKCFtX2N1cnJlbnRBdWRpb1N0cmVhbUlkLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50QXVkaW9TdHJlYW1JZCk7Ci0gICAg
ICAgIGlmICghbV9jdXJyZW50VGV4dFN0cmVhbUlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNl
bGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50VGV4dFN0cmVhbUlkKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlRleHQ6
Ci0gICAgICAgIHByb3BlcnR5TmFtZSA9ICJjdXJyZW50LXRleHQiOwotICAgICAgICB0cmFja1R5
cGVBc1N0cmluZyA9ICJ0ZXh0IjsKLSAgICAgICAgaWYgKCFzZWxlY3RlZFN0cmVhbUlkLmlzRW1w
dHkoKSAmJiBzZWxlY3RlZFN0cmVhbUlkID09IG1fY3VycmVudFRleHRTdHJlYW1JZCkgewotICAg
ICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICIlcyBzdHJlYW06ICVzIGFscmVh
ZHkgc2VsZWN0ZWQsIG5vdCBkb2luZyBhbnl0aGluZy4iLCB0cmFja1R5cGVBc1N0cmluZywgc2Vs
ZWN0ZWRTdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQorICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUs
ICZwZW5kaW5nLCAwKTsKIAotICAgICAgICBpZiAoIW1fY3VycmVudEF1ZGlvU3RyZWFtSWQuaXNF
bXB0eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRBdWRp
b1N0cmVhbUlkKTsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnRWaWRlb1N0cmVhbUlkLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50VmlkZW9TdHJl
YW1JZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1l
cjo6VHJhY2tUeXBlOjpVbmtub3duOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIGlmICghcmF0ZSkgeworICAgICAgICBtX2NoYW5naW5nUmF0ZSA9IGZh
bHNlOworICAgICAgICBtX3BsYXliYWNrUmF0ZVBhdXNlID0gdHJ1ZTsKKyAgICAgICAgaWYgKHN0
YXRlICE9IEdTVF9TVEFURV9QQVVTRUQgJiYgcGVuZGluZyAhPSBHU1RfU1RBVEVfUEFVU0VEKQor
ICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiRW5h
YmxpbmcgJXMgdHJhY2sgd2l0aCBpbmRleDogJXUiLCB0cmFja1R5cGVBc1N0cmluZywgaW5kZXgp
OwotICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlw
ZWxpbmUuZ2V0KCksIHByb3BlcnR5TmFtZSwgaW5kZXgsIG51bGxwdHIpOwotICAgIGVsc2Ugewot
ICAgICAgICBHTGlzdCogc2VsZWN0ZWRTdHJlYW1zTGlzdCA9IG51bGxwdHI7CisgICAgaWYgKChz
dGF0ZSAhPSBHU1RfU1RBVEVfUExBWUlORyAmJiBzdGF0ZSAhPSBHU1RfU1RBVEVfUEFVU0VEKQor
ICAgICAgICB8fCAocGVuZGluZyA9PSBHU1RfU1RBVEVfUEFVU0VEKSkKKyAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RyZWFtSWQgOiBzZWxlY3RlZFN0cmVhbXMp
Ci0gICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXNMaXN0ID0gZ19saXN0X2FwcGVuZChzZWxlY3Rl
ZFN0cmVhbXNMaXN0LCBnX3N0cmR1cChzdHJlYW1JZC51dGY4KCkuZGF0YSgpKSk7CisgICAgdXBk
YXRlUGxheWJhY2tSYXRlKCk7Cit9CiAKLSAgICAgICAgLy8gVE9ETzogTVNFIEdzdFN0cmVhbSBB
UEkgc3VwcG9ydDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjUz
MQotICAgICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KG1fcGlwZWxpbmUuZ2V0KCksIGdzdF9l
dmVudF9uZXdfc2VsZWN0X3N0cmVhbXMoc2VsZWN0ZWRTdHJlYW1zTGlzdCkpOwotICAgICAgICBn
X2xpc3RfZnJlZV9mdWxsKHNlbGVjdGVkU3RyZWFtc0xpc3QsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rl
c3Ryb3lOb3RpZnk+KGdfZnJlZSkpOwotICAgIH0KK2RvdWJsZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnJhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXliYWNrUmF0ZTsKIH0K
IAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvQ2hhbmdlZENhbGxiYWNr
KE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0Y2gpCiB7
Ci0gICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6
VmlkZW9DaGFuZ2VkLCBbcGxheWVyXSB7Ci0gICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZW
aWRlbygpOwotICAgIH0pOworICAgIG1fcHJlc2VydmVzUGl0Y2ggPSBwcmVzZXJ2ZXNQaXRjaDsK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlk
ZW8oKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZWxvYWQoTWVkaWFQ
bGF5ZXI6OlByZWxvYWQgcHJlbG9hZCkKIHsKLSAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUg
fHwgIW1fc291cmNlKSkKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5n
IHByZWxvYWQgdG8gJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhwcmVsb2FkKS51dGY4
KCkuZGF0YSgpKTsKKyAgICBpZiAocHJlbG9hZCA9PSBNZWRpYVBsYXllcjo6QXV0byAmJiBpc0xp
dmVTdHJlYW0oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1faXNMZWdhY3lQbGF5
YmluIHx8IGlzTWVkaWFTb3VyY2UoKSk7Ci0KLSAgICBnaW50IG51bVRyYWNrcyA9IDA7Ci0gICAg
Ym9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKLSAgICBHc3RFbGVtZW50KiBl
bGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3NvdXJjZS5nZXQoKSA6IG1fcGlwZWxpbmUuZ2V0
KCk7Ci0gICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJuLXZpZGVvIiwgJm51bVRyYWNrcywgbnVs
bHB0cik7CisgICAgbV9wcmVsb2FkID0gcHJlbG9hZDsKKyAgICB1cGRhdGVEb3dubG9hZEJ1ZmZl
cmluZ0ZsYWcoKTsKIAotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiTWVkaWEgaGFz
ICVkIHZpZGVvIHRyYWNrcyIsIG51bVRyYWNrcyk7CisgICAgaWYgKG1fZGVsYXlpbmdMb2FkICYm
IG1fcHJlbG9hZCAhPSBNZWRpYVBsYXllcjo6Tm9uZSkgeworICAgICAgICBtX2RlbGF5aW5nTG9h
ZCA9IGZhbHNlOworICAgICAgICBjb21taXRMb2FkKCk7CisgICAgfQorfQogCi0gICAgYm9vbCBv
bGRIYXNWaWRlbyA9IG1faGFzVmlkZW87Ci0gICAgbV9oYXNWaWRlbyA9IG51bVRyYWNrcyA+IDA7
Ci0gICAgaWYgKG9sZEhhc1ZpZGVvICE9IG1faGFzVmlkZW8pCi0gICAgICAgIG1fcGxheWVyLT5j
aGFyYWN0ZXJpc3RpY0NoYW5nZWQoKTsKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5n
ZXM+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YnVmZmVyZWQoKSBjb25zdAoreworICAg
IGF1dG8gdGltZVJhbmdlcyA9IG1ha2VVbmlxdWU8UGxhdGZvcm1UaW1lUmFuZ2VzPigpOworICAg
IGlmIChtX2Vycm9yT2NjdXJlZCB8fCBpc0xpdmVTdHJlYW0oKSkKKyAgICAgICAgcmV0dXJuIHRp
bWVSYW5nZXM7CiAKLSAgICBpZiAobV9oYXNWaWRlbykKLSAgICAgICAgbV9wbGF5ZXItPnNpemVD
aGFuZ2VkKCk7CisgICAgTWVkaWFUaW1lIG1lZGlhRHVyYXRpb24gPSBkdXJhdGlvbk1lZGlhVGlt
ZSgpOworICAgIGlmICghbWVkaWFEdXJhdGlvbiB8fCBtZWRpYUR1cmF0aW9uLmlzUG9zaXRpdmVJ
bmZpbml0ZSgpKQorICAgICAgICByZXR1cm4gdGltZVJhbmdlczsKIAotICAgIGlmICh1c2VNZWRp
YVNvdXJjZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJUcmFja3Mg
bWFuYWdlZCBieSBzb3VyY2UgZWxlbWVudC4gQmFpbGluZyBvdXQgbm93LiIpOwotICAgICAgICBt
X3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0
R1JlZihnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhHU1RfRk9STUFUX1BFUkNFTlQpKTsKIAotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZFZpZGVvU3RyZWFt
czsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewotICAgICAgICBH
UmVmUHRyPEdzdFBhZD4gcGFkOwotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9waXBl
bGluZS5nZXQoKSwgImdldC12aWRlby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsK
LSAgICAgICAgQVNTRVJUKHBhZCk7CisgICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3BpcGVs
aW5lLmdldCgpLCBxdWVyeS5nZXQoKSkpCisgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOwogCi0g
ICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJWIiArIFN0cmluZzo6bnVtYmVyKGkpOwotICAgICAg
ICB2YWxpZFZpZGVvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOwotICAgICAgICBpZiAoaSA8IHN0
YXRpY19jYXN0PGdpbnQ+KG1fdmlkZW9UcmFja3Muc2l6ZSgpKSkgewotICAgICAgICAgICAgUmVm
UHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV92aWRlb1Ry
YWNrcy5nZXQoc3RyZWFtSWQpOwotICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2spIHsKLSAg
ICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIH0KKyAgICBndWludCBudW1CdWZmZXJpbmdSYW5nZXMgPSBn
c3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3JhbmdlcyhxdWVyeS5nZXQoKSk7CisgICAgZm9yIChn
dWludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtQnVmZmVyaW5nUmFuZ2VzOyBpbmRleCsrKSB7Cisg
ICAgICAgIGdpbnQ2NCByYW5nZVN0YXJ0ID0gMCwgcmFuZ2VTdG9wID0gMDsKKyAgICAgICAgaWYg
KGdzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlKHF1ZXJ5LmdldCgpLCBpbmRleCwg
JnJhbmdlU3RhcnQsICZyYW5nZVN0b3ApKSB7CisgICAgICAgICAgICB1aW50NjRfdCBzdGFydFRp
bWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kKHRvR3N0VW5zaWduZWQ2NFRpbWUo
bWVkaWFEdXJhdGlvbiksIHJhbmdlU3RhcnQsIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgpOworICAg
ICAgICAgICAgdWludDY0X3Qgc3RvcFRpbWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3Jv
dW5kKHRvR3N0VW5zaWduZWQ2NFRpbWUobWVkaWFEdXJhdGlvbiksIHJhbmdlU3RvcCwgR1NUX0ZP
Uk1BVF9QRVJDRU5UX01BWCk7CisgICAgICAgICAgICB0aW1lUmFuZ2VzLT5hZGQoTWVkaWFUaW1l
KHN0YXJ0VGltZSwgR1NUX1NFQ09ORCksIE1lZGlhVGltZShzdG9wVGltZSwgR1NUX1NFQ09ORCkp
OwogICAgICAgICB9Ci0KLSAgICAgICAgYXV0byB0cmFjayA9IFZpZGVvVHJhY2tQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCBpLCBwYWQpOwotICAgICAgICBBU1NF
UlQoc3RyZWFtSWQgPT0gdHJhY2stPmlkKCkpOwotICAgICAgICBtX3ZpZGVvVHJhY2tzLmFkZChz
dHJlYW1JZCwgdHJhY2suY29weVJlZigpKTsKLSAgICAgICAgbV9wbGF5ZXItPmFkZFZpZGVvVHJh
Y2sodHJhY2suZ2V0KCkpOwogICAgIH0KIAotICAgIHB1cmdlSW52YWxpZFZpZGVvVHJhY2tzKHZh
bGlkVmlkZW9TdHJlYW1zKTsKLSNlbmRpZgorICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBtb3JlIGdl
bmVyYWwgbWF4VGltZUxvYWRlZCgpIGlmIG5vIHJhbmdlIGhhcworICAgIC8vIGJlZW4gZm91bmQu
CisgICAgaWYgKCF0aW1lUmFuZ2VzLT5sZW5ndGgoKSkgeworICAgICAgICBNZWRpYVRpbWUgbG9h
ZGVkID0gbWF4VGltZUxvYWRlZCgpOworICAgICAgICBpZiAobG9hZGVkLmlzVmFsaWQoKSAmJiBs
b2FkZWQpCisgICAgICAgICAgICB0aW1lUmFuZ2VzLT5hZGQoTWVkaWFUaW1lOjp6ZXJvVGltZSgp
LCBsb2FkZWQpOworICAgIH0KIAotICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVu
Z2luZVVwZGF0ZWQobV9wbGF5ZXIpOworICAgIHJldHVybiB0aW1lUmFuZ2VzOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFj
ayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK01lZGlhVGltZSBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6Om1heE1lZGlhVGltZVNlZWthYmxlKCkgY29uc3QKIHsKLSAg
ICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpWaWRl
b0NhcHNDaGFuZ2VkLCBbcGxheWVyXSB7Ci0gICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZW
aWRlb0NhcHMoKTsKLSAgICB9KTsKLX0KKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCks
ICJlcnJvck9jY3VyZWQ6ICVzLCBpc0xpdmVTdHJlYW06ICVzIiwgYm9vbEZvclByaW50aW5nKG1f
ZXJyb3JPY2N1cmVkKSwgYm9vbEZvclByaW50aW5nKGlzTGl2ZVN0cmVhbSgpKSk7CisgICAgaWYg
KG1fZXJyb3JPY2N1cmVkKQorICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlb0Nh
cHMoKQotewotICAgIG1fdmlkZW9TaXplID0gSW50U2l6ZSgpOwotICAgIG1fcGxheWVyLT5jbGll
bnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwotfQorICAgIGlmIChpc0xp
dmVTdHJlYW0oKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvQ2hhbmdlZENhbGxiYWNrKE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQotewotICAgIHBsYXllci0+bV9ub3RpZmll
ci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OkF1ZGlvQ2hhbmdlZCwgW3BsYXllcl0g
ewotICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mQXVkaW8oKTsKLSAgICB9KTsKKyAgICBN
ZWRpYVRpbWUgZHVyYXRpb24gPSBkdXJhdGlvbk1lZGlhVGltZSgpOworICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIm1heE1lZGlhVGltZVNlZWthYmxlLCBkdXJhdGlvbjogJXMiLCB0
b1N0cmluZyhkdXJhdGlvbikudXRmOCgpLmRhdGEoKSk7CisgICAgLy8gaW5maW5pdGUgZHVyYXRp
b24gbWVhbnMgbGl2ZSBzdHJlYW0KKyAgICBpZiAoZHVyYXRpb24uaXNQb3NpdGl2ZUluZmluaXRl
KCkpCisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CisKKyAgICByZXR1cm4g
ZHVyYXRpb247CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQ
bGF5ZXJPZkF1ZGlvKCkKK01lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1h
eFRpbWVMb2FkZWQoKSBjb25zdAogewotICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCAh
bV9zb3VyY2UpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXli
aW4gfHwgaXNNZWRpYVNvdXJjZSgpKTsKKyAgICBpZiAobV9lcnJvck9jY3VyZWQpCisgICAgICAg
IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CiAKLSAgICBnaW50IG51bVRyYWNrcyA9IDA7
Ci0gICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKLSAgICBHc3RFbGVt
ZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3NvdXJjZS5nZXQoKSA6IG1fcGlwZWxp
bmUuZ2V0KCk7Ci0gICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJuLWF1ZGlvIiwgJm51bVRyYWNr
cywgbnVsbHB0cik7Ci0KLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIk1lZGlhIGhh
cyAlZCBhdWRpbyB0cmFja3MiLCBudW1UcmFja3MpOwotICAgIGJvb2wgb2xkSGFzQXVkaW8gPSBt
X2hhc0F1ZGlvOwotICAgIG1faGFzQXVkaW8gPSBudW1UcmFja3MgPiAwOwotICAgIGlmIChvbGRI
YXNBdWRpbyAhPSBtX2hhc0F1ZGlvKQotICAgICAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWND
aGFuZ2VkKCk7Ci0KLSAgICBpZiAodXNlTWVkaWFTb3VyY2UpIHsKLSAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiVHJhY2tzIG1hbmFnZWQgYnkgc291cmNlIGVsZW1lbnQuIEJh
aWxpbmcgb3V0IG5vdy4iKTsKLSAgICAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVy
RW5naW5lVXBkYXRlZChtX3BsYXllcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCi0gICAgVmVjdG9yPFN0cmluZz4gdmFsaWRBdWRpb1N0cmVhbXM7
Ci0gICAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKLSAgICAgICAgR1Jl
ZlB0cjxHc3RQYWQ+IHBhZDsKLSAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxp
bmUuZ2V0KCksICJnZXQtYXVkaW8tcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7Ci0g
ICAgICAgIEFTU0VSVChwYWQpOworICAgIE1lZGlhVGltZSBsb2FkZWQgPSBtX21heFRpbWVMb2Fk
ZWQ7CisgICAgaWYgKG1faXNFbmRSZWFjaGVkKQorICAgICAgICBsb2FkZWQgPSBkdXJhdGlvbk1l
ZGlhVGltZSgpOworICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJtYXhUaW1lTG9hZGVk
OiAlcyIsIHRvU3RyaW5nKGxvYWRlZCkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGxvYWRl
ZDsKK30KIAotICAgICAgICBTdHJpbmcgc3RyZWFtSWQgPSAiQSIgKyBTdHJpbmc6Om51bWJlcihp
KTsKLSAgICAgICAgdmFsaWRBdWRpb1N0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKLSAgICAgICAg
aWYgKGkgPCBzdGF0aWNfY2FzdDxnaW50PihtX2F1ZGlvVHJhY2tzLnNpemUoKSkpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFjayA9
IG1fYXVkaW9UcmFja3MuZ2V0KHN0cmVhbUlkKTsKLSAgICAgICAgICAgIGlmIChleGlzdGluZ1Ry
YWNrKSB7Ci0gICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2stPnBhZCgpID09IHBhZCkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KK2Jvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAoreworICAg
IGlmIChtX2Vycm9yT2NjdXJlZCB8fCBtX2xvYWRpbmdTdGFsbGVkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgYXV0byB0cmFjayA9IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCBpLCBwYWQpOwotICAgICAgICBBU1NFUlQoc3Ry
ZWFtSWQgPT0gdHJhY2stPmlkKCkpOwotICAgICAgICBtX2F1ZGlvVHJhY2tzLmFkZChzdHJlYW1J
ZCwgdHJhY2spOwotICAgICAgICBtX3BsYXllci0+YWRkQXVkaW9UcmFjaygqdHJhY2spOworICAg
IGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkpIHsKKyAgICAgICAgR1NUX0xP
R19PQkpFQ1QocGlwZWxpbmUoKSwgIkxhc3QgbmV0d29yayByZWFkIHBvc2l0aW9uOiAlIiBHX0dV
SU5UNjRfRk9STUFUICIsIGN1cnJlbnQ6ICUiIEdfR1VJTlQ2NF9GT1JNQVQsIG1fcmVhZFBvc2l0
aW9uQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzLCBtX25ldHdvcmtSZWFkUG9zaXRpb24pOworICAg
ICAgICBib29sIGRpZExvYWRpbmdQcm9ncmVzcyA9IG1fcmVhZFBvc2l0aW9uQXRMYXN0RGlkTG9h
ZGluZ1Byb2dyZXNzIDwgbV9uZXR3b3JrUmVhZFBvc2l0aW9uOworICAgICAgICBtX3JlYWRQb3Np
dGlvbkF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyA9IG1fbmV0d29ya1JlYWRQb3NpdGlvbjsKKyAg
ICAgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgImRpZExvYWRpbmdQcm9ncmVzczogJXMi
LCBib29sRm9yUHJpbnRpbmcoZGlkTG9hZGluZ1Byb2dyZXNzKSk7CisgICAgICAgIHJldHVybiBk
aWRMb2FkaW5nUHJvZ3Jlc3M7CiAgICAgfQogCi0gICAgcHVyZ2VJbnZhbGlkQXVkaW9UcmFja3Mo
dmFsaWRBdWRpb1N0cmVhbXMpOwotI2VuZGlmCisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5l
IHx8ICFkdXJhdGlvbk1lZGlhVGltZSgpIHx8ICghaXNNZWRpYVNvdXJjZSgpICYmICF0b3RhbEJ5
dGVzKCkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9wbGF5ZXItPmNsaWVudCgp
Lm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7CisgICAgTWVkaWFUaW1lIGN1cnJl
bnRNYXhUaW1lTG9hZGVkID0gbWF4VGltZUxvYWRlZCgpOworICAgIGJvb2wgZGlkTG9hZGluZ1By
b2dyZXNzID0gY3VycmVudE1heFRpbWVMb2FkZWQgIT0gbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlk
TG9hZGluZ1Byb2dyZXNzOworICAgIG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9n
cmVzcyA9IGN1cnJlbnRNYXhUaW1lTG9hZGVkOworICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5l
KCksICJkaWRMb2FkaW5nUHJvZ3Jlc3M6ICVzIiwgYm9vbEZvclByaW50aW5nKGRpZExvYWRpbmdQ
cm9ncmVzcykpOworICAgIHJldHVybiBkaWRMb2FkaW5nUHJvZ3Jlc3M7CiB9CiAKLSNpZiBFTkFC
TEUoVklERU9fVFJBQ0spCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGV4dENo
YW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3Vuc2ln
bmVkIGxvbmcgbG9uZyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRvdGFsQnl0ZXMoKSBj
b25zdAogewotICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmlj
YXRpb246OlRleHRDaGFuZ2VkLCBbcGxheWVyXSB7Ci0gICAgICAgIHBsYXllci0+bm90aWZ5UGxh
eWVyT2ZUZXh0KCk7Ci0gICAgfSk7Ci19CisgICAgaWYgKG1fZXJyb3JPY2N1cmVkKQorICAgICAg
ICByZXR1cm4gMDsKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBs
YXllck9mVGV4dCgpCi17Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8ICFtX3NvdXJj
ZSkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAobV90b3RhbEJ5dGVzKQorICAgICAgICByZXR1
cm4gbV90b3RhbEJ5dGVzOwogCi0gICAgQVNTRVJUKG1faXNMZWdhY3lQbGF5YmluIHx8IGlzTWVk
aWFTb3VyY2UoKSk7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBnaW50IG51bVRyYWNrcyA9IDA7Ci0gICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFT
b3VyY2UoKTsKLSAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3Nv
dXJjZS5nZXQoKSA6IG1fcGlwZWxpbmUuZ2V0KCk7Ci0gICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQs
ICJuLXRleHQiLCAmbnVtVHJhY2tzLCBudWxscHRyKTsKKyAgICBpZiAoaXNMaXZlU3RyZWFtKCkp
CisgICAgICAgIHJldHVybiAwOwogCi0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJN
ZWRpYSBoYXMgJWQgdGV4dCB0cmFja3MiLCBudW1UcmFja3MpOworICAgIEdzdEZvcm1hdCBmbXQg
PSBHU1RfRk9STUFUX0JZVEVTOworICAgIGdpbnQ2NCBsZW5ndGggPSAwOworICAgIGlmIChnc3Rf
ZWxlbWVudF9xdWVyeV9kdXJhdGlvbihtX3NvdXJjZS5nZXQoKSwgZm10LCAmbGVuZ3RoKSkgewor
ICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgInRvdGFsQnl0ZXMgJSIgR19HSU5U
NjRfRk9STUFULCBsZW5ndGgpOworICAgICAgICBtX3RvdGFsQnl0ZXMgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nIGxvbmc+KGxlbmd0aCk7CisgICAgICAgIG1faXNTdHJlYW1pbmcgPSAhbGVu
Z3RoOworICAgICAgICByZXR1cm4gbV90b3RhbEJ5dGVzOworICAgIH0KIAotICAgIGlmICh1c2VN
ZWRpYVNvdXJjZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJUcmFj
a3MgbWFuYWdlZCBieSBzb3VyY2UgZWxlbWVudC4gQmFpbGluZyBvdXQgbm93LiIpOwotICAgICAg
ICByZXR1cm47CisgICAgLy8gRmFsbCBiYWNrIHRvIHF1ZXJ5aW5nIHRoZSBzb3VyY2UgcGFkcyBt
YW51YWxseS4KKyAgICAvLyBTZWUgYWxzbyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjM4NzQ5CisgICAgR3N0SXRlcmF0b3IqIGl0ZXIgPSBnc3RfZWxlbWVudF9p
dGVyYXRlX3NyY19wYWRzKG1fc291cmNlLmdldCgpKTsKKyAgICBib29sIGRvbmUgPSBmYWxzZTsK
KyAgICB3aGlsZSAoIWRvbmUpIHsKKyAgICAgICAgR1ZhbHVlIGl0ZW0gPSBHX1ZBTFVFX0lOSVQ7
CisgICAgICAgIHN3aXRjaCAoZ3N0X2l0ZXJhdG9yX25leHQoaXRlciwgJml0ZW0pKSB7CisgICAg
ICAgIGNhc2UgR1NUX0lURVJBVE9SX09LOiB7CisgICAgICAgICAgICBHc3RQYWQqIHBhZCA9IHN0
YXRpY19jYXN0PEdzdFBhZCo+KGdfdmFsdWVfZ2V0X29iamVjdCgmaXRlbSkpOworICAgICAgICAg
ICAgZ2ludDY0IHBhZExlbmd0aCA9IDA7CisgICAgICAgICAgICBpZiAoZ3N0X3BhZF9xdWVyeV9k
dXJhdGlvbihwYWQsIGZtdCwgJnBhZExlbmd0aCkgJiYgcGFkTGVuZ3RoID4gbGVuZ3RoKQorICAg
ICAgICAgICAgICAgIGxlbmd0aCA9IHBhZExlbmd0aDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX1JFU1lOQzoKKyAgICAgICAgICAgIGdz
dF9pdGVyYXRvcl9yZXN5bmMoaXRlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHU1RfSVRFUkFUT1JfRVJST1I6CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAg
Y2FzZSBHU1RfSVRFUkFUT1JfRE9ORToKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZpdGVtKTsK
ICAgICB9CiAKLSAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZFRleHRTdHJlYW1zOwotICAgIGZvciAo
Z2ludCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytpKSB7Ci0gICAgICAgIEdSZWZQdHI8R3N0UGFk
PiBwYWQ7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAi
Z2V0LXRleHQtcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7Ci0gICAgICAgIEFTU0VS
VChwYWQpOworICAgIGdzdF9pdGVyYXRvcl9mcmVlKGl0ZXIpOwogCi0gICAgICAgIC8vIFdlIGNh
bid0IGFzc3VtZSB0aGUgcGFkIGhhcyBhIHN0aWNreSBldmVudCBoZXJlIGxpa2UgaW1wbGVtZW50
ZWQgaW4KLSAgICAgICAgLy8gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lciBiZWNhdXNl
IGl0IG1pZ2h0IGJlIGVtaXR0ZWQgYWZ0ZXIgdGhlCi0gICAgICAgIC8vIHRyYWNrIHdhcyBjcmVh
dGVkLiBTbyBmYWxsYmFjayB0byBhIGR1bW15IHN0cmVhbSBJRCBsaWtlIGluIHRoZSBBdWRpbwot
ICAgICAgICAvLyBhbmQgVmlkZW8gdHJhY2tzLgotICAgICAgICBTdHJpbmcgc3RyZWFtSWQgPSAi
VCIgKyBTdHJpbmc6Om51bWJlcihpKTsKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
InRvdGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFULCBsZW5ndGgpOworICAgIG1fdG90YWxCeXRl
cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVuZ3RoKTsKKyAgICBtX2lzU3Ry
ZWFtaW5nID0gIWxlbmd0aDsKKyAgICByZXR1cm4gbV90b3RhbEJ5dGVzOworfQogCi0gICAgICAg
IHZhbGlkVGV4dFN0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKLSAgICAgICAgaWYgKGkgPCBzdGF0
aWNfY2FzdDxnaW50PihtX3RleHRUcmFja3Muc2l6ZSgpKSkgewotICAgICAgICAgICAgUmVmUHRy
PEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX3RleHRU
cmFja3MuZ2V0KHN0cmVhbUlkKTsKLSAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrKSB7Ci0g
ICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGV4aXN0aW5nVHJhY2stPnBhZCgpID09IHBhZCkKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Citib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFzU2luZ2xlU2Vj
dXJpdHlPcmlnaW4oKSBjb25zdAoreworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICghV0VCS0lUX0lTX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gb3JpZ2luYWxV
UkksIHJlc29sdmVkVVJJOworICAgIGdfb2JqZWN0X2dldChtX3NvdXJjZS5nZXQoKSwgImxvY2F0
aW9uIiwgJm9yaWdpbmFsVVJJLm91dFB0cigpLCAicmVzb2x2ZWQtbG9jYXRpb24iLCAmcmVzb2x2
ZWRVUkkub3V0UHRyKCksIG51bGxwdHIpOworICAgIGlmICghb3JpZ2luYWxVUkkgfHwgIXJlc29s
dmVkVVJJKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFnX3N0cmNtcDAob3JpZ2lu
YWxVUkkuZ2V0KCksIHJlc29sdmVkVVJJLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBSZWY8U2VjdXJpdHlPcmlnaW4+IHJlc29sdmVkT3JpZ2luKFNlY3VyaXR5T3JpZ2luOjpj
cmVhdGVGcm9tU3RyaW5nKFN0cmluZzo6ZnJvbVVURjgocmVzb2x2ZWRVUkkuZ2V0KCkpKSk7Cisg
ICAgUmVmPFNlY3VyaXR5T3JpZ2luPiByZXF1ZXN0ZWRPcmlnaW4oU2VjdXJpdHlPcmlnaW46OmNy
ZWF0ZUZyb21TdHJpbmcoU3RyaW5nOjpmcm9tVVRGOChvcmlnaW5hbFVSSS5nZXQoKSkpKTsKKyAg
ICByZXR1cm4gcmVzb2x2ZWRPcmlnaW4tPmlzU2FtZVNjaGVtZUhvc3RQb3J0KHJlcXVlc3RlZE9y
aWdpbi5nZXQoKSk7Cit9CisKK09wdGlvbmFsPGJvb2w+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6d291bGRUYWludE9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiYgb3JpZ2luKSBjb25z
dAoreworICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTIsIDApKSB7CisgICAgICAg
IEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgIkNoZWNraW5nICV1IG9yaWdpbnMiLCBtX29y
aWdpbnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiByZXNwb25zZU9yaWdpbiA6IG1fb3Jp
Z2lucykgeworICAgICAgICAgICAgaWYgKCFvcmlnaW4uY2FuQWNjZXNzKCpyZXNwb25zZU9yaWdp
bikpIHsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJGb3Vu
ZCByZWFjaGFibGUgcmVzcG9uc2Ugb3JpZ2luIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBhdXRvIHRyYWNrID0gSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKGksIHBhZCk7Ci0gICAgICAgIG1f
dGV4dFRyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrLmNvcHlSZWYoKSk7Ci0gICAgICAgIG1fcGxh
eWVyLT5hZGRUZXh0VHJhY2sodHJhY2suZ2V0KCkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJObyB2YWxpZCByZXNwb25zZSBvcmlnaW4gZm91bmQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHB1cmdlSW52YWxpZFRleHRUcmFja3ModmFsaWRU
ZXh0U3RyZWFtcyk7CisgICAgLy8gR1N0cmVhbWVyIDwgMS4xMiBoYXMgYW4gaW5jb21wbGV0ZSB1
cmlkb3dubG9hZGVyIGltcGxlbWVudGF0aW9uIHNvIHdlCisgICAgLy8gY2FuJ3QgdXNlIFdlYktp
dFdlYlNyYyBmb3IgYWRhcHRpdmUgZnJhZ21lbnRzIGRvd25sb2FkaW5nIGlmIHRoaXMKKyAgICAv
LyB2ZXJzaW9uIGlzIGRldGVjdGVkLgorICAgIFVOVVNFRF9QQVJBTShvcmlnaW4pOworICAgIHJl
dHVybiBtX2hhc1RhaW50ZWRPcmlnaW47CiB9CiAKLUdzdEZsb3dSZXR1cm4gTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0U2FtcGxlQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyKiBwbGF5ZXIpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2lt
dWxhdGVBdWRpb0ludGVycnVwdGlvbigpCiB7Ci0gICAgcGxheWVyLT5uZXdUZXh0U2FtcGxlKCk7
Ci0gICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3Rf
bWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZShHU1RfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBH
U1RfU1RBVEVfUEFVU0VEKTsKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UobV9waXBlbGlu
ZS5nZXQoKSwgbWVzc2FnZSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpuZXdUZXh0U2FtcGxlKCkKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmVuc3VyZUF1ZGlvU291cmNlUHJvdmlkZXIoKQogewotICAgIGlm
ICghbV90ZXh0QXBwU2luaykKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9hdWRpb1NvdXJj
ZVByb3ZpZGVyKQorICAgICAgICBtX2F1ZGlvU291cmNlUHJvdmlkZXIgPSBtYWtlVW5pcXVlPEF1
ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI+KCk7Cit9CiAKLSAgICBHUmVmUHRyPEdzdEV2ZW50
PiBzdHJlYW1TdGFydEV2ZW50ID0gYWRvcHRHUmVmKAotICAgICAgICBnc3RfcGFkX2dldF9zdGlj
a3lfZXZlbnQobV90ZXh0QXBwU2lua1BhZC5nZXQoKSwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwg
MCkpOworQXVkaW9Tb3VyY2VQcm92aWRlciogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjph
dWRpb1NvdXJjZVByb3ZpZGVyKCkKK3sKKyAgICBlbnN1cmVBdWRpb1NvdXJjZVByb3ZpZGVyKCk7
CisgICAgcmV0dXJuIG1fYXVkaW9Tb3VyY2VQcm92aWRlci5nZXQoKTsKK30KKyNlbmRpZgogCi0g
ICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV90ZXh0QXBwU2luay5nZXQoKSwgInB1bGwtc2FtcGxlIiwgJnNhbXBsZS5vdXRQdHIoKSwgbnVs
bHB0cik7Ci0gICAgQVNTRVJUKHNhbXBsZSk7Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6ZHVyYXRpb25DaGFuZ2VkKCkKK3sKKyAgICBNZWRpYVRpbWUgcHJldmlvdXNEdXJhdGlv
biA9IGR1cmF0aW9uTWVkaWFUaW1lKCk7CisgICAgbV9jYWNoZWREdXJhdGlvbiA9IE1lZGlhVGlt
ZTo6aW52YWxpZFRpbWUoKTsKIAotICAgIGlmIChzdHJlYW1TdGFydEV2ZW50KSB7Ci0gICAgICAg
IGJvb2wgZm91bmQgPSBGQUxTRTsKLSAgICAgICAgY29uc3QgZ2NoYXIqIGlkOwotICAgICAgICBn
c3RfZXZlbnRfcGFyc2Vfc3RyZWFtX3N0YXJ0KHN0cmVhbVN0YXJ0RXZlbnQuZ2V0KCksICZpZCk7
Ci0gICAgICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RleHRUcmFja3MudmFsdWVzKCkpIHsKLSAg
ICAgICAgICAgIGlmICghc3RyY21wKHRyYWNrLT5zdHJlYW1JZCgpLnV0ZjgoKS5kYXRhKCksIGlk
KSkgewotICAgICAgICAgICAgICAgIHRyYWNrLT5oYW5kbGVTYW1wbGUoc2FtcGxlKTsKLSAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIEdTVF9X
QVJOSU5HKCJHb3Qgc2FtcGxlIHdpdGggdW5rbm93biBzdHJlYW0gSUQgJXMuIiwgaWQpOwotICAg
IH0gZWxzZQotICAgICAgICBHU1RfV0FSTklORygiVW5hYmxlIHRvIGhhbmRsZSBzYW1wbGUgd2l0
aCBubyBzdHJlYW0gc3RhcnQgZXZlbnQuIik7CisgICAgLy8gQXZvaWQgZW1pdGluZyBkdXJhdGlv
bmNoYW5nZWQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHByZXZpb3VzCisgICAgLy8gZHVyYXRpb24g
d2FzIDAgYmVjYXVzZSB0aGF0IGNhc2UgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZQorICAgIC8v
IEhUTUxNZWRpYUVsZW1lbnQuCisgICAgaWYgKHByZXZpb3VzRHVyYXRpb24gJiYgZHVyYXRpb25N
ZWRpYVRpbWUoKSAhPSBwcmV2aW91c0R1cmF0aW9uKQorICAgICAgICBtX3BsYXllci0+ZHVyYXRp
b25DaGFuZ2VkKCk7CiB9Ci0jZW5kaWYKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnNldFJhdGUoZmxvYXQgcmF0ZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojpzb3VyY2VTZXR1cChHc3RFbGVtZW50KiBzb3VyY2VFbGVtZW50KQogewotICAgIC8vIEhpZ2hl
ciByYXRlIGNhdXNlcyBjcmFzaC4KLSAgICByYXRlID0gY2xhbXBUbyhyYXRlLCAtMjAuMCwgMjAu
MCk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiU291cmNlIGVsZW1lbnQgc2V0
LXVwIGZvciAlcyIsIEdTVF9FTEVNRU5UX05BTUUoc291cmNlRWxlbWVudCkpOwogCi0gICAgLy8g
QXZvaWQgdXNlbGVzcyBwbGF5YmFjayByYXRlIHVwZGF0ZS4KLSAgICBpZiAobV9wbGF5YmFja1Jh
dGUgPT0gcmF0ZSkgewotICAgICAgICAvLyBhbmQgbWFrZSBzdXJlIHRoYXQgdXBwZXIgbGF5ZXJz
IHdlcmUgbm90aWZpZWQgaWYgcmF0ZSB3YXMgc2V0CisgICAgaWYgKFdFQktJVF9JU19XRUJfU1JD
KG1fc291cmNlLmdldCgpKSAmJiBHU1RfT0JKRUNUX1BBUkVOVChtX3NvdXJjZS5nZXQoKSkpCisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHU1RfRUxFTUVOVF9Q
QVJFTlQobV9zb3VyY2UuZ2V0KCkpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih1cmlEZWNv
ZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayksIHRoaXMpOwogCi0gICAgICAgIGlmICghbV9jaGFu
Z2luZ1JhdGUgJiYgbV9wbGF5ZXItPnJhdGUoKSAhPSBtX3BsYXliYWNrUmF0ZSkKLSAgICAgICAg
ICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IG1fc291cmNlID0gc291cmNlRWxlbWVudDsKIAotICAgIGlmIChpc0xpdmVTdHJlYW0oKSkgewot
ICAgICAgICAvLyBub3RpZnkgdXBwZXIgbGF5ZXJzIHRoYXQgd2UgY2Fubm90IGhhbmRsZSBwYXNz
ZWQgcmF0ZS4KLSAgICAgICAgbV9jaGFuZ2luZ1JhdGUgPSBmYWxzZTsKLSAgICAgICAgbV9wbGF5
ZXItPnJhdGVDaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoV0VCS0lUX0lTX1dF
Ql9TUkMobV9zb3VyY2UuZ2V0KCkpKSB7CisgICAgICAgIHdlYktpdFdlYlNyY1NldE1lZGlhUGxh
eWVyKFdFQktJVF9XRUJfU1JDX0NBU1QobV9zb3VyY2UuZ2V0KCkpLCBtX3BsYXllcik7CisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1NUX0VMRU1FTlRfUEFSRU5UKG1fc291cmNlLmdldCgpKSwg
ImVsZW1lbnQtYWRkZWQiLCBHX0NBTExCQUNLKHVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENhbGxi
YWNrKSwgdGhpcyk7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICB9IGVsc2UgaWYgKFdF
QktJVF9JU19NRURJQV9TVFJFQU1fU1JDKHNvdXJjZUVsZW1lbnQpKSB7CisgICAgICAgIGF1dG8g
c3RyZWFtID0gbV9zdHJlYW1Qcml2YXRlLmdldCgpOworICAgICAgICBBU1NFUlQoc3RyZWFtKTsK
KyAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNTZXRTdHJlYW0oV0VCS0lUX01FRElBX1NUUkVB
TV9TUkMoc291cmNlRWxlbWVudCksIHN0cmVhbSk7CisjZW5kaWYKICAgICB9Cit9CiAKLSAgICBH
c3RTdGF0ZSBzdGF0ZTsKLSAgICBHc3RTdGF0ZSBwZW5kaW5nOwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyLCBHT2JqZWN0KiBvYmplY3QpCit7CisgICAgcGxh
eWVyLT5zZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMob2JqZWN0KTsKK30KIAotICAgIG1fcGxheWJh
Y2tSYXRlID0gcmF0ZTsKLSAgICBtX2NoYW5naW5nUmF0ZSA9IHRydWU7Cit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBpZiAoZ19zdHJjbXAwKEdfT0JKRUNUX1RZUEVfTkFNRShvYmplY3QpLCAi
R3N0UHVsc2VTaW5rIikpCisgICAgICAgIHJldHVybjsKIAotICAgIGdzdF9lbGVtZW50X2dldF9z
dGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZwZW5kaW5nLCAwKTsKKyAgICBjb25zdCBj
aGFyKiByb2xlID0gbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVySXNWaWRlbygpID8gInZp
ZGVvIiA6ICJtdXNpYyI7CisgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0
dXJlX25ldygic3RyZWFtLXByb3BlcnRpZXMiLCAibWVkaWEucm9sZSIsIEdfVFlQRV9TVFJJTkcs
IHJvbGUsIG51bGxwdHIpOworICAgIGdfb2JqZWN0X3NldChvYmplY3QsICJzdHJlYW0tcHJvcGVy
dGllcyIsIHN0cnVjdHVyZSwgbnVsbHB0cik7CisgICAgZ3N0X3N0cnVjdHVyZV9mcmVlKHN0cnVj
dHVyZSk7CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZWxlbWVudE5hbWUoZ3N0X2VsZW1lbnRfZ2V0
X25hbWUoR1NUX0VMRU1FTlQob2JqZWN0KSkpOworICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIlNldCBtZWRpYS5yb2xlIGFzICVzIGF0ICVzIiwgcm9sZSwgZWxlbWVudE5hbWUuZ2V0
KCkpOworfQogCi0gICAgaWYgKCFyYXRlKSB7Ci0gICAgICAgIG1fY2hhbmdpbmdSYXRlID0gZmFs
c2U7Ci0gICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2UgPSB0cnVlOwotICAgICAgICBpZiAoc3Rh
dGUgIT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBwZW5kaW5nICE9IEdTVF9TVEFURV9QQVVTRUQpCi0g
ICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpOwotICAgICAg
ICByZXR1cm47Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlU2V0dXBD
YWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllciwgR3N0RWxlbWVudCog
c291cmNlRWxlbWVudCkKK3sKKyAgICBwbGF5ZXItPnNvdXJjZVNldHVwKHNvdXJjZUVsZW1lbnQp
OworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVT
dGF0ZShHc3RTdGF0ZSBuZXdTdGF0ZSkKK3sKKyAgICBBU1NFUlQobV9waXBlbGluZSk7CisKKyAg
ICBHc3RTdGF0ZSBjdXJyZW50U3RhdGU7CisgICAgR3N0U3RhdGUgcGVuZGluZzsKKworICAgIGdz
dF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmY3VycmVudFN0YXRlLCAmcGVu
ZGluZywgMCk7CisgICAgaWYgKGN1cnJlbnRTdGF0ZSA9PSBuZXdTdGF0ZSB8fCBwZW5kaW5nID09
IG5ld1N0YXRlKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlJlamVj
dGVkIHN0YXRlIGNoYW5nZSB0byAlcyBmcm9tICVzIHdpdGggJXMgcGVuZGluZyIsIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRlKSwKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0
YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBl
bmRpbmcpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKChzdGF0ZSAh
PSBHU1RfU1RBVEVfUExBWUlORyAmJiBzdGF0ZSAhPSBHU1RfU1RBVEVfUEFVU0VEKQotICAgICAg
ICB8fCAocGVuZGluZyA9PSBHU1RfU1RBVEVfUEFVU0VEKSkKLSAgICAgICAgcmV0dXJuOworICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNoYW5naW5nIHN0YXRlIGNoYW5nZSB0byAl
cyBmcm9tICVzIHdpdGggJXMgcGVuZGluZyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5l
d1N0YXRlKSwKKyAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoY3VycmVudFN0YXRl
KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwogCi0gICAgdXBkYXRlUGxh
eWJhY2tSYXRlKCk7CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBpZiAoY3VycmVudFN0YXRl
IDw9IEdTVF9TVEFURV9SRUFEWSAmJiBuZXdTdGF0ZSA+PSBHU1RfU1RBVEVfUEFVU0VEKQorICAg
ICAgICBlbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKTsKKyNlbmRpZgorCisgICAgR3N0U3RhdGVD
aGFuZ2VSZXR1cm4gc2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgbmV3U3RhdGUpOworICAgIEdzdFN0YXRlIHBhdXNlZE9yUGxheWluZyA9IG5l
d1N0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HID8gR1NUX1NUQVRFX1BBVVNFRCA6IEdTVF9TVEFU
RV9QTEFZSU5HOworICAgIGlmIChjdXJyZW50U3RhdGUgIT0gcGF1c2VkT3JQbGF5aW5nICYmIHNl
dFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gQ3JlYXRlIGEgdGltZXIgd2hlbiBlbnRlcmluZyB0aGUgUkVBRFkg
c3RhdGUgc28gdGhhdCB3ZSBjYW4gZnJlZSByZXNvdXJjZXMKKyAgICAvLyBpZiB3ZSBzdGF5IGZv
ciB0b28gbG9uZyBvbiBSRUFEWS4KKyAgICAvLyBBbHNvIGxldHMgcmVtb3ZlIHRoZSB0aW1lciBp
ZiB3ZSByZXF1ZXN0IGEgc3RhdGUgY2hhbmdlIGZvciBhbnkgc3RhdGUgb3RoZXIgdGhhbiBSRUFE
WS4KKyAgICAvLyBTZWUgYWxzbyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE3MzU0CisgICAgaWYgKG5ld1N0YXRlID09IEdTVF9TVEFURV9SRUFEWSAmJiAhbV9yZWFk
eVRpbWVySGFuZGxlci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIC8vIE1heCBpbnRlcnZhbCBpbiBz
ZWNvbmRzIHRvIHN0YXkgaW4gdGhlIFJFQURZIHN0YXRlIG9uIG1hbnVhbAorICAgICAgICAvLyBz
dGF0ZSBjaGFuZ2UgcmVxdWVzdHMuCisgICAgICAgIHN0YXRpYyBjb25zdCBTZWNvbmRzIHJlYWR5
U3RhdGVUaW1lckRlbGF5IHsgMV9taW4gfTsKKyAgICAgICAgbV9yZWFkeVRpbWVySGFuZGxlci5z
dGFydE9uZVNob3QocmVhZHlTdGF0ZVRpbWVyRGVsYXkpOworICAgIH0gZWxzZSBpZiAobmV3U3Rh
dGUgIT0gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICBtX3JlYWR5VGltZXJIYW5kbGVyLnN0b3Ao
KTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi1kb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpyYXRlKCkgY29uc3QKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
ZXRQbGF5YmluVVJMKGNvbnN0IFVSTCYgdXJsKQogewotICAgIHJldHVybiBtX3BsYXliYWNrUmF0
ZTsKKyAgICAvLyBDbGVhbiBvdXQgZXZlcnl0aGluZyBhZnRlciBmaWxlOi8vIHVybCBwYXRoLgor
ICAgIFN0cmluZyBjbGVhblVSTFN0cmluZyh1cmwuc3RyaW5nKCkpOworICAgIGlmICh1cmwuaXNM
b2NhbEZpbGUoKSkKKyAgICAgICAgY2xlYW5VUkxTdHJpbmcgPSBjbGVhblVSTFN0cmluZy5zdWJz
dHJpbmcoMCwgdXJsLnBhdGhFbmQoKSk7CisKKyAgICBtX3VybCA9IFVSTChVUkwoKSwgY2xlYW5V
UkxTdHJpbmcpOworICAgIGNvbnZlcnRUb0ludGVybmFsUHJvdG9jb2wobV91cmwpOworICAgIEdT
VF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiTG9hZCAlcyIsIG1fdXJsLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidXJpIiwgbV91
cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQcmVzZXJ2ZXNQaXRjaChib29sIHByZXNlcnZlc1BpdGNo
KQorc3RhdGljIHZvaWQgc2V0U3luY09uQ2xvY2soR3N0RWxlbWVudCAqZWxlbWVudCwgYm9vbCBz
eW5jKQogewotICAgIG1fcHJlc2VydmVzUGl0Y2ggPSBwcmVzZXJ2ZXNQaXRjaDsKKyAgICBpZiAo
IUdTVF9JU19CSU4oZWxlbWVudCkpIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0KGVsZW1lbnQsICJz
eW5jIiwgc3luYywgTlVMTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHc3RJdGVy
YXRvciogaXQgPSBnc3RfYmluX2l0ZXJhdGVfc2lua3MoR1NUX0JJTihlbGVtZW50KSk7CisgICAg
d2hpbGUgKGdzdF9pdGVyYXRvcl9mb3JlYWNoKGl0LCAoR3N0SXRlcmF0b3JGb3JlYWNoRnVuY3Rp
b24pKFtdKGNvbnN0IEdWYWx1ZSogaXRlbSwgdm9pZCogc3luY1B0cikgeworICAgICAgICBib29s
KiBzeW5jID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHN5bmNQdHIpOworICAgICAgICBzZXRTeW5jT25D
bG9jayhHU1RfRUxFTUVOVChnX3ZhbHVlX2dldF9vYmplY3QoaXRlbSkpLCAqc3luYyk7CisgICAg
fSksICZzeW5jKSA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQorICAgICAgICBnc3RfaXRlcmF0b3Jf
cmVzeW5jKGl0KTsKKyAgICBnc3RfaXRlcmF0b3JfZnJlZShpdCk7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YnVm
ZmVyZWQoKSBjb25zdAordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN5bmNPbkNs
b2NrKGJvb2wgc3luYykKIHsKLSAgICBhdXRvIHRpbWVSYW5nZXMgPSBtYWtlVW5pcXVlPFBsYXRm
b3JtVGltZVJhbmdlcz4oKTsKLSAgICBpZiAobV9lcnJvck9jY3VyZWQgfHwgaXNMaXZlU3RyZWFt
KCkpCi0gICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOworICAgIHNldFN5bmNPbkNsb2NrKHZpZGVv
U2luaygpLCBzeW5jKTsKKyAgICBzZXRTeW5jT25DbG9jayhhdWRpb1NpbmsoKSwgc3luYyk7Cit9
CiAKLSAgICBNZWRpYVRpbWUgbWVkaWFEdXJhdGlvbiA9IGR1cmF0aW9uTWVkaWFUaW1lKCk7Ci0g
ICAgaWYgKCFtZWRpYUR1cmF0aW9uIHx8IG1lZGlhRHVyYXRpb24uaXNQb3NpdGl2ZUluZmluaXRl
KCkpCi0gICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8oKQoreworICAgIGlmIChVTkxJS0VMWSghbV9w
aXBlbGluZSB8fCAhbV9zb3VyY2UpKQorICAgICAgICByZXR1cm47CiAKLSAgICBHUmVmUHRyPEdz
dFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhHU1RfRk9S
TUFUX1BFUkNFTlQpKTsKKyAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4gfHwgaXNNZWRpYVNv
dXJjZSgpKTsKIAotICAgIGlmICghZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQoKSwg
cXVlcnkuZ2V0KCkpKQotICAgICAgICByZXR1cm4gdGltZVJhbmdlczsKKyAgICBnaW50IG51bVRy
YWNrcyA9IDA7CisgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKKyAg
ICBHc3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3NvdXJjZS5nZXQoKSA6
IG1fcGlwZWxpbmUuZ2V0KCk7CisgICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJuLXZpZGVvIiwg
Jm51bVRyYWNrcywgbnVsbHB0cik7CiAKLSAgICBndWludCBudW1CdWZmZXJpbmdSYW5nZXMgPSBn
c3RfcXVlcnlfZ2V0X25fYnVmZmVyaW5nX3JhbmdlcyhxdWVyeS5nZXQoKSk7Ci0gICAgZm9yIChn
dWludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtQnVmZmVyaW5nUmFuZ2VzOyBpbmRleCsrKSB7Ci0g
ICAgICAgIGdpbnQ2NCByYW5nZVN0YXJ0ID0gMCwgcmFuZ2VTdG9wID0gMDsKLSAgICAgICAgaWYg
KGdzdF9xdWVyeV9wYXJzZV9udGhfYnVmZmVyaW5nX3JhbmdlKHF1ZXJ5LmdldCgpLCBpbmRleCwg
JnJhbmdlU3RhcnQsICZyYW5nZVN0b3ApKSB7Ci0gICAgICAgICAgICB1aW50NjRfdCBzdGFydFRp
bWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3JvdW5kKHRvR3N0VW5zaWduZWQ2NFRpbWUo
bWVkaWFEdXJhdGlvbiksIHJhbmdlU3RhcnQsIEdTVF9GT1JNQVRfUEVSQ0VOVF9NQVgpOwotICAg
ICAgICAgICAgdWludDY0X3Qgc3RvcFRpbWUgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50X3Jv
dW5kKHRvR3N0VW5zaWduZWQ2NFRpbWUobWVkaWFEdXJhdGlvbiksIHJhbmdlU3RvcCwgR1NUX0ZP
Uk1BVF9QRVJDRU5UX01BWCk7Ci0gICAgICAgICAgICB0aW1lUmFuZ2VzLT5hZGQoTWVkaWFUaW1l
KHN0YXJ0VGltZSwgR1NUX1NFQ09ORCksIE1lZGlhVGltZShzdG9wVGltZSwgR1NUX1NFQ09ORCkp
OwotICAgICAgICB9CisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJNZWRpYSBoYXMg
JWQgdmlkZW8gdHJhY2tzIiwgbnVtVHJhY2tzKTsKKworICAgIGJvb2wgb2xkSGFzVmlkZW8gPSBt
X2hhc1ZpZGVvOworICAgIG1faGFzVmlkZW8gPSBudW1UcmFja3MgPiAwOworICAgIGlmIChvbGRI
YXNWaWRlbyAhPSBtX2hhc1ZpZGVvKQorICAgICAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWND
aGFuZ2VkKCk7CisKKyAgICBpZiAobV9oYXNWaWRlbykKKyAgICAgICAgbV9wbGF5ZXItPnNpemVD
aGFuZ2VkKCk7CisKKyAgICBpZiAodXNlTWVkaWFTb3VyY2UpIHsKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiVHJhY2tzIG1hbmFnZWQgYnkgc291cmNlIGVsZW1lbnQuIEJh
aWxpbmcgb3V0IG5vdy4iKTsKKyAgICAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVy
RW5naW5lVXBkYXRlZChtX3BsYXllcik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAv
LyBGYWxsYmFjayB0byB0aGUgbW9yZSBnZW5lcmFsIG1heFRpbWVMb2FkZWQoKSBpZiBubyByYW5n
ZSBoYXMKLSAgICAvLyBiZWVuIGZvdW5kLgotICAgIGlmICghdGltZVJhbmdlcy0+bGVuZ3RoKCkp
IHsKLSAgICAgICAgTWVkaWFUaW1lIGxvYWRlZCA9IG1heFRpbWVMb2FkZWQoKTsKLSAgICAgICAg
aWYgKGxvYWRlZC5pc1ZhbGlkKCkgJiYgbG9hZGVkKQotICAgICAgICAgICAgdGltZVJhbmdlcy0+
YWRkKE1lZGlhVGltZTo6emVyb1RpbWUoKSwgbG9hZGVkKTsKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisgICAgVmVjdG9yPFN0cmluZz4gdmFsaWRWaWRlb1N0cmVhbXM7CisgICAgZm9yIChnaW50
IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBh
ZDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCksICJnZXQt
dmlkZW8tcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgIEFTU0VSVChw
YWQpOworCisgICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJWIiArIFN0cmluZzo6bnVtYmVyKGkp
OworICAgICAgICB2YWxpZFZpZGVvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOworICAgICAgICBp
ZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fdmlkZW9UcmFja3Muc2l6ZSgpKSkgeworICAgICAg
ICAgICAgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0g
bV92aWRlb1RyYWNrcy5nZXQoc3RyZWFtSWQpOworICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJh
Y2spIHsKKyAgICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8gdHJhY2sgPSBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRy
KCp0aGlzKSwgaSwgcGFkKTsKKyAgICAgICAgQVNTRVJUKHN0cmVhbUlkID09IHRyYWNrLT5pZCgp
KTsKKyAgICAgICAgbV92aWRlb1RyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrLmNvcHlSZWYoKSk7
CisgICAgICAgIG1fcGxheWVyLT5hZGRWaWRlb1RyYWNrKHRyYWNrLmdldCgpKTsKICAgICB9CiAK
LSAgICByZXR1cm4gdGltZVJhbmdlczsKKyAgICBwdXJnZUludmFsaWRWaWRlb1RyYWNrcyh2YWxp
ZFZpZGVvU3RyZWFtcyk7CisjZW5kaWYKKworICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBs
YXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2soTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCiB7Ci0gICAgR1VuaXF1ZU91dFB0cjxH
RXJyb3I+IGVycjsKLSAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBkZWJ1ZzsKLSAgICBNZWRpYVBs
YXllcjo6TmV0d29ya1N0YXRlIGVycm9yOwotICAgIGJvb2wgaXNzdWVFcnJvciA9IHRydWU7Ci0g
ICAgYm9vbCBhdHRlbXB0TmV4dExvY2F0aW9uID0gZmFsc2U7Ci0gICAgY29uc3QgR3N0U3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlKG1lc3NhZ2UpOwotICAg
IEdzdFN0YXRlIHJlcXVlc3RlZFN0YXRlLCBjdXJyZW50U3RhdGU7CisgICAgcGxheWVyLT5tX25v
dGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6VmlkZW9DYXBzQ2hhbmdlZCwg
W3BsYXllcl0geworICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVmlkZW9DYXBzKCk7Cisg
ICAgfSk7Cit9CiAKLSAgICBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24g
PSBmYWxzZTsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJP
ZlZpZGVvQ2FwcygpCit7CisgICAgbV92aWRlb1NpemUgPSBJbnRTaXplKCk7CisgICAgbV9wbGF5
ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7Cit9CiAKLSAg
ICBpZiAoc3RydWN0dXJlKSB7Ci0gICAgICAgIGNvbnN0IGdjaGFyKiBtZXNzYWdlVHlwZU5hbWUg
PSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0cnVjdHVyZSk7Cit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6YXVkaW9DaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRo
cmVhZE5vdGlmaWNhdGlvbjo6QXVkaW9DaGFuZ2VkLCBbcGxheWVyXSB7CisgICAgICAgIHBsYXll
ci0+bm90aWZ5UGxheWVyT2ZBdWRpbygpOworICAgIH0pOworfQogCi0gICAgICAgIC8vIFJlZGly
ZWN0IG1lc3NhZ2VzIGFyZSBzZW50IGZyb20gZWxlbWVudHMsIGxpa2UgcXRkZW11eCwgdG8KLSAg
ICAgICAgLy8gbm90aWZ5IG9mIHRoZSBuZXcgbG9jYXRpb24ocykgb2YgdGhlIG1lZGlhLgotICAg
ICAgICBpZiAoIWdfc3RyY21wMChtZXNzYWdlVHlwZU5hbWUsICJyZWRpcmVjdCIpKSB7Ci0gICAg
ICAgICAgICBtZWRpYUxvY2F0aW9uQ2hhbmdlZChtZXNzYWdlKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpu
b3RpZnlQbGF5ZXJPZkF1ZGlvKCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwg
IW1fc291cmNlKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gV2UgaWdub3JlIHN0YXRlIGNo
YW5nZXMgZnJvbSBpbnRlcm5hbCBlbGVtZW50cy4gVGhleSBhcmUgZm9yd2FyZGVkIHRvIHBsYXli
aW4yIGFueXdheS4KLSAgICBib29sIG1lc3NhZ2VTb3VyY2VJc1BsYXliaW4gPSBHU1RfTUVTU0FH
RV9TUkMobWVzc2FnZSkgPT0gcmVpbnRlcnByZXRfY2FzdDxHc3RPYmplY3QqPihtX3BpcGVsaW5l
LmdldCgpKTsKKyAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4gfHwgaXNNZWRpYVNvdXJjZSgp
KTsKIAotICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJNZXNzYWdlICVzIHJlY2VpdmVk
IGZyb20gZWxlbWVudCAlcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRShtZXNzYWdlKSwgR1NUX01F
U1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwotICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRSht
ZXNzYWdlKSkgewotICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6Ci0gICAgICAgIGlmIChtX3Jl
c2V0UGlwZWxpbmUgfHwgIW1fbWlzc2luZ1BsdWdpbkNhbGxiYWNrcy5pc0VtcHR5KCkgfHwgbV9l
cnJvck9jY3VyZWQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFy
c2VfZXJyb3IobWVzc2FnZSwgJmVyci5vdXRQdHIoKSwgJmRlYnVnLm91dFB0cigpKTsKLSAgICAg
ICAgR1NUX0VSUk9SKCJFcnJvciAlZDogJXMgKHVybD0lcykiLCBlcnItPmNvZGUsIGVyci0+bWVz
c2FnZSwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZ2ludCBudW1UcmFja3Mg
PSAwOworICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7CisgICAgR3N0
RWxlbWVudCogZWxlbWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3Bp
cGVsaW5lLmdldCgpOworICAgIGdfb2JqZWN0X2dldChlbGVtZW50LCAibi1hdWRpbyIsICZudW1U
cmFja3MsIG51bGxwdHIpOwogCi0gICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lU
SF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEws
ICJ3ZWJraXQtdmlkZW8uZXJyb3IiKTsKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
Ik1lZGlhIGhhcyAlZCBhdWRpbyB0cmFja3MiLCBudW1UcmFja3MpOworICAgIGJvb2wgb2xkSGFz
QXVkaW8gPSBtX2hhc0F1ZGlvOworICAgIG1faGFzQXVkaW8gPSBudW1UcmFja3MgPiAwOworICAg
IGlmIChvbGRIYXNBdWRpbyAhPSBtX2hhc0F1ZGlvKQorICAgICAgICBtX3BsYXllci0+Y2hhcmFj
dGVyaXN0aWNDaGFuZ2VkKCk7CiAKLSAgICAgICAgZXJyb3IgPSBNZWRpYVBsYXllcjo6RW1wdHk7
Ci0gICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfU1RSRUFNX0VSUk9S
LCBHU1RfU1RSRUFNX0VSUk9SX0NPREVDX05PVF9GT1VORCkKLSAgICAgICAgICAgIHx8IGdfZXJy
b3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9TVFJFQU1fRVJST1IsIEdTVF9TVFJFQU1fRVJST1Jf
V1JPTkdfVFlQRSkKLSAgICAgICAgICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdT
VF9TVFJFQU1fRVJST1IsIEdTVF9TVFJFQU1fRVJST1JfRkFJTEVEKQotICAgICAgICAgICAgfHwg
Z19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX0NPUkVfRVJST1IsIEdTVF9DT1JFX0VSUk9S
X01JU1NJTkdfUExVR0lOKQotICAgICAgICAgICAgfHwgZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQo
KSwgR1NUX1JFU09VUkNFX0VSUk9SLCBHU1RfUkVTT1VSQ0VfRVJST1JfTk9UX0ZPVU5EKSkKLSAg
ICAgICAgICAgIGVycm9yID0gTWVkaWFQbGF5ZXI6OkZvcm1hdEVycm9yOwotICAgICAgICBlbHNl
IGlmIChnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfU1RSRUFNX0VSUk9SLCBHU1RfU1RS
RUFNX0VSUk9SX1RZUEVfTk9UX0ZPVU5EKSkgewotICAgICAgICAgICAgLy8gTGV0IHRoZSBtZWRp
YVBsYXllckNsaWVudCBoYW5kbGUgdGhlIHN0cmVhbSBlcnJvciwgaW4KLSAgICAgICAgICAgIC8v
IHRoaXMgY2FzZSB0aGUgSFRNTE1lZGlhRWxlbWVudCB3aWxsIGVtaXQgYSBzdGFsbGVkCisgICAg
aWYgKHVzZU1lZGlhU291cmNlKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIlRyYWNrcyBtYW5hZ2VkIGJ5IHNvdXJjZSBlbGVtZW50LiBCYWlsaW5nIG91dCBub3cuIik7
CisgICAgICAgIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9w
bGF5ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQorICAgIFZlY3RvcjxTdHJpbmc+IHZhbGlkQXVkaW9TdHJlYW1zOworICAgIGZvciAoZ2ludCBp
ID0gMDsgaSA8IG51bVRyYWNrczsgKytpKSB7CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7
CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LWF1
ZGlvLXBhZCIsIGksICZwYWQub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICBBU1NFUlQocGFk
KTsKKworICAgICAgICBTdHJpbmcgc3RyZWFtSWQgPSAiQSIgKyBTdHJpbmc6Om51bWJlcihpKTsK
KyAgICAgICAgdmFsaWRBdWRpb1N0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKKyAgICAgICAgaWYg
KGkgPCBzdGF0aWNfY2FzdDxnaW50PihtX2F1ZGlvVHJhY2tzLnNpemUoKSkpIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFjayA9IG1f
YXVkaW9UcmFja3MuZ2V0KHN0cmVhbUlkKTsKKyAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNr
KSB7CisgICAgICAgICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7CisgICAgICAg
ICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2stPnBhZCgpID09IHBhZCkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IHRyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0cigq
dGhpcyksIGksIHBhZCk7CisgICAgICAgIEFTU0VSVChzdHJlYW1JZCA9PSB0cmFjay0+aWQoKSk7
CisgICAgICAgIG1fYXVkaW9UcmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjayk7CisgICAgICAgIG1f
cGxheWVyLT5hZGRBdWRpb1RyYWNrKCp0cmFjayk7CisgICAgfQorCisgICAgcHVyZ2VJbnZhbGlk
QXVkaW9UcmFja3ModmFsaWRBdWRpb1N0cmVhbXMpOworI2VuZGlmCisKKyAgICBtX3BsYXllci0+
Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKK30KKworI2lmIEVO
QUJMRShWSURFT19UUkFDSykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0ZXh0
Q2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQorewor
ICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlRl
eHRDaGFuZ2VkLCBbcGxheWVyXSB7CisgICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZUZXh0
KCk7CisgICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3Rp
ZnlQbGF5ZXJPZlRleHQoKQoreworICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCAhbV9z
b3VyY2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4g
fHwgaXNNZWRpYVNvdXJjZSgpKTsKKworICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKKyAgICBib29s
IHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOworICAgIEdzdEVsZW1lbnQqIGVsZW1l
bnQgPSB1c2VNZWRpYVNvdXJjZSA/IG1fc291cmNlLmdldCgpIDogbV9waXBlbGluZS5nZXQoKTsK
KyAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgIm4tdGV4dCIsICZudW1UcmFja3MsIG51bGxwdHIp
OworCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJNZWRpYSBoYXMgJWQgdGV4dCB0
cmFja3MiLCBudW1UcmFja3MpOworCisgICAgaWYgKHVzZU1lZGlhU291cmNlKSB7CisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRyYWNrcyBtYW5hZ2VkIGJ5IHNvdXJjZSBl
bGVtZW50LiBCYWlsaW5nIG91dCBub3cuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBWZWN0b3I8U3RyaW5nPiB2YWxpZFRleHRTdHJlYW1zOworICAgIGZvciAoZ2ludCBpID0gMDsg
aSA8IG51bVRyYWNrczsgKytpKSB7CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7CisgICAg
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LXRleHQtcGFk
IiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgIEFTU0VSVChwYWQpOworCisg
ICAgICAgIC8vIFdlIGNhbid0IGFzc3VtZSB0aGUgcGFkIGhhcyBhIHN0aWNreSBldmVudCBoZXJl
IGxpa2UgaW1wbGVtZW50ZWQgaW4KKyAgICAgICAgLy8gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdT
dHJlYW1lciBiZWNhdXNlIGl0IG1pZ2h0IGJlIGVtaXR0ZWQgYWZ0ZXIgdGhlCisgICAgICAgIC8v
IHRyYWNrIHdhcyBjcmVhdGVkLiBTbyBmYWxsYmFjayB0byBhIGR1bW15IHN0cmVhbSBJRCBsaWtl
IGluIHRoZSBBdWRpbworICAgICAgICAvLyBhbmQgVmlkZW8gdHJhY2tzLgorICAgICAgICBTdHJp
bmcgc3RyZWFtSWQgPSAiVCIgKyBTdHJpbmc6Om51bWJlcihpKTsKKworICAgICAgICB2YWxpZFRl
eHRTdHJlYW1zLmFwcGVuZChzdHJlYW1JZCk7CisgICAgICAgIGlmIChpIDwgc3RhdGljX2Nhc3Q8
Z2ludD4obV90ZXh0VHJhY2tzLnNpemUoKSkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0gbV90ZXh0VHJhY2tzLmdl
dChzdHJlYW1JZCk7CisgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgeworICAgICAgICAg
ICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOworICAgICAgICAgICAgICAgIGlmIChl
eGlzdGluZ1RyYWNrLT5wYWQoKSA9PSBwYWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXV0byB0cmFjayA9IEluYmFu
ZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShpLCBwYWQpOworICAgICAgICBtX3Rl
eHRUcmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjay5jb3B5UmVmKCkpOworICAgICAgICBtX3BsYXll
ci0+YWRkVGV4dFRyYWNrKHRyYWNrLmdldCgpKTsKKyAgICB9CisKKyAgICBwdXJnZUludmFsaWRU
ZXh0VHJhY2tzKHZhbGlkVGV4dFN0cmVhbXMpOworfQorCitHc3RGbG93UmV0dXJuIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3VGV4dFNhbXBsZUNhbGxiYWNrKE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIHBsYXllci0+bmV3VGV4dFNhbXBsZSgpOwor
ICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om5ld1RleHRTYW1wbGUoKQoreworICAgIGlmICghbV90ZXh0QXBwU2luaykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR1JlZlB0cjxHc3RFdmVudD4gc3RyZWFtU3RhcnRFdmVudCA9IGFk
b3B0R1JlZigKKyAgICAgICAgZ3N0X3BhZF9nZXRfc3RpY2t5X2V2ZW50KG1fdGV4dEFwcFNpbmtQ
YWQuZ2V0KCksIEdTVF9FVkVOVF9TVFJFQU1fU1RBUlQsIDApKTsKKworICAgIEdSZWZQdHI8R3N0
U2FtcGxlPiBzYW1wbGU7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fdGV4dEFwcFNpbmsu
Z2V0KCksICJwdWxsLXNhbXBsZSIsICZzYW1wbGUub3V0UHRyKCksIG51bGxwdHIpOworICAgIEFT
U0VSVChzYW1wbGUpOworCisgICAgaWYgKHN0cmVhbVN0YXJ0RXZlbnQpIHsKKyAgICAgICAgYm9v
bCBmb3VuZCA9IEZBTFNFOworICAgICAgICBjb25zdCBnY2hhciogaWQ7CisgICAgICAgIGdzdF9l
dmVudF9wYXJzZV9zdHJlYW1fc3RhcnQoc3RyZWFtU3RhcnRFdmVudC5nZXQoKSwgJmlkKTsKKyAg
ICAgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdGV4dFRyYWNrcy52YWx1ZXMoKSkgeworICAgICAg
ICAgICAgaWYgKCFzdHJjbXAodHJhY2stPnN0cmVhbUlkKCkudXRmOCgpLmRhdGEoKSwgaWQpKSB7
CisgICAgICAgICAgICAgICAgdHJhY2stPmhhbmRsZVNhbXBsZShzYW1wbGUpOworICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgR1NUX1dBUk5J
TkcoIkdvdCBzYW1wbGUgd2l0aCB1bmtub3duIHN0cmVhbSBJRCAlcy4iLCBpZCk7CisgICAgfSBl
bHNlCisgICAgICAgIEdTVF9XQVJOSU5HKCJVbmFibGUgdG8gaGFuZGxlIHNhbXBsZSB3aXRoIG5v
IHN0cmVhbSBzdGFydCBldmVudC4iKTsKK30KKyNlbmRpZgorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6ZmlsbFRpbWVyRmlyZWQoKQoreworICAgIGlmIChtX2Vycm9yT2NjdXJl
ZCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBB
biBlcnJvciBvY2N1cnJlZCwgZGlzYWJsaW5nIHRoZSBmaWxsIHRpbWVyIik7CisgICAgICAgIG1f
ZmlsbFRpbWVyLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdSZWZQdHI8
R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nKEdTVF9G
T1JNQVRfUEVSQ0VOVCkpOworICAgIGRvdWJsZSBmaWxsU3RhdHVzID0gMTAwLjA7CisgICAgR3N0
QnVmZmVyaW5nTW9kZSBtb2RlID0gR1NUX0JVRkZFUklOR19ET1dOTE9BRDsKKworICAgIGlmIChn
c3RfZWxlbWVudF9xdWVyeShtX3NvdXJjZS5nZXQoKSwgcXVlcnkuZ2V0KCkpKSB7CisgICAgICAg
IGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfc3RhdHMocXVlcnkuZ2V0KCksICZtb2RlLCBudWxs
cHRyLCBudWxscHRyLCBudWxscHRyKTsKKworICAgICAgICBpbnQgcGVyY2VudGFnZTsKKyAgICAg
ICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19wZXJjZW50KHF1ZXJ5LmdldCgpLCBudWxscHRy
LCAmcGVyY2VudGFnZSk7CisgICAgICAgIGZpbGxTdGF0dXMgPSBwZXJjZW50YWdlOworICAgIH0g
ZWxzZSBpZiAobV9odHRwUmVzcG9uc2VUb3RhbFNpemUpIHsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gUXVlcnkgZmFpbGVkLCBmYWxsaW5nIGJhY2sg
dG8gbmV0d29yayByZWFkIHBvc2l0aW9uIGVzdGltYXRpb24iKTsKKyAgICAgICAgZmlsbFN0YXR1
cyA9IDEwMC4wICogKHN0YXRpY19jYXN0PGRvdWJsZT4obV9uZXR3b3JrUmVhZFBvc2l0aW9uKSAv
IHN0YXRpY19jYXN0PGRvdWJsZT4obV9odHRwUmVzcG9uc2VUb3RhbFNpemUpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBV
bmFibGUgdG8gZGV0ZXJtaW5lIG9uLWRpc2sgYnVmZmVyaW5nIHN0YXR1cyIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgdXBkYXRlQnVmZmVyaW5nU3RhdHVzKG1vZGUsIGZpbGxTdGF0
dXMpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZFN0YXRlQ2hh
bmdlZCgpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp0aW1lQ2hhbmdlZCgpCit7CisgICAgdXBkYXRlU3RhdGVzKCk7CisgICAg
bV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpsb2FkaW5nRmFpbGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya0Vy
cm9yLCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlLCBib29sIGZvcmNlTm90aWZp
Y2F0aW9ucykKK3sKKyAgICBHU1RfV0FSTklORygiTG9hZGluZyBmYWlsZWQsIGVycm9yOiAlcyIs
IGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG5ldHdvcmtFcnJvcikudXRmOCgpLmRhdGEoKSk7
CisKKyAgICBtX2Vycm9yT2NjdXJlZCA9IHRydWU7CisgICAgaWYgKGZvcmNlTm90aWZpY2F0aW9u
cyB8fCBtX25ldHdvcmtTdGF0ZSAhPSBuZXR3b3JrRXJyb3IpIHsKKyAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBuZXR3b3JrRXJyb3I7CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFu
Z2VkKCk7CisgICAgfQorICAgIGlmIChmb3JjZU5vdGlmaWNhdGlvbnMgfHwgbV9yZWFkeVN0YXRl
ICE9IHJlYWR5U3RhdGUpIHsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsKKyAg
ICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgfQorCisgICAgLy8gTG9h
ZGluZyBmYWlsZWQsIHJlbW92ZSByZWFkeSB0aW1lci4KKyAgICBtX3JlYWR5VGltZXJIYW5kbGVy
LnN0b3AoKTsKK30KKworR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGVBdWRpb1NpbmsoKQoreworICAgIG1fYXV0b0F1ZGlvU2luayA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbWFrZSgiYXV0b2F1ZGlvc2luayIsIG51bGxwdHIpOworICAgIGlmICghbV9hdXRvQXVk
aW9TaW5rKSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJHU3RyZWFtZXIncyBhdXRvYXVkaW9zaW5r
IG5vdCBmb3VuZC4gUGxlYXNlIGNoZWNrIHlvdXIgZ3N0LXBsdWdpbnMtZ29vZCBpbnN0YWxsYXRp
b24iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKG1fYXV0b0F1ZGlvU2luay5nZXQoKSwgImNoaWxkLWFkZGVkIiwgR19DQUxM
QkFDSyhzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXNDYWxsYmFjayksIHRoaXMpOworCisjaWYgRU5B
QkxFKFdFQl9BVURJTykKKyAgICBHc3RFbGVtZW50KiBhdWRpb1NpbmtCaW4gPSBnc3RfYmluX25l
dygiYXVkaW8tc2luayIpOworICAgIGVuc3VyZUF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKyAgICBt
X2F1ZGlvU291cmNlUHJvdmlkZXItPmNvbmZpZ3VyZUF1ZGlvQmluKGF1ZGlvU2lua0JpbiwgbnVs
bHB0cik7CisgICAgcmV0dXJuIGF1ZGlvU2lua0JpbjsKKyNlbHNlCisgICAgcmV0dXJuIG1fYXV0
b0F1ZGlvU2luay5nZXQoKTsKKyNlbmRpZgorfQorCitHc3RFbGVtZW50KiBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmF1ZGlvU2luaygpIGNvbnN0Cit7CisgICAgR3N0RWxlbWVudCogc2lu
azsKKyAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLXNpbmsiLCAmc2lu
aywgbnVsbHB0cik7CisgICAgcmV0dXJuIHNpbms7Cit9CisKK01lZGlhVGltZSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9zaXRpb24oKSBjb25zdAoreworICAgIEdTVF9U
UkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgImlzRW5kUmVhY2hlZDogJXMsIHNlZWtpbmc6ICVzLCBz
ZWVrVGltZTogJXMiLCBib29sRm9yUHJpbnRpbmcobV9pc0VuZFJlYWNoZWQpLCBib29sRm9yUHJp
bnRpbmcobV9zZWVraW5nKSwgbV9zZWVrVGltZS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGlmIChtX2lzRW5kUmVhY2hlZCAmJiBtX3NlZWtpbmcpCisgICAgICAgIHJldHVybiBtX3Nl
ZWtUaW1lOworCisgICAgLy8gVGhpcyBjb25zdGFudCBzaG91bGQgcmVtYWluIGxvd2VyIHRoYW4g
SFRNTE1lZGlhRWxlbWVudCdzIG1heFRpbWV1cGRhdGVFdmVudEZyZXF1ZW5jeS4KKyAgICBzdGF0
aWMgY29uc3QgU2Vjb25kcyBwb3NpdGlvbkNhY2hlVGhyZXNob2xkID0gMjAwX21zOworICAgIFNl
Y29uZHMgbm93ID0gV1RGOjpXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAg
ICBpZiAobV9sYXN0UXVlcnlUaW1lICYmIChub3cgLSBtX2xhc3RRdWVyeVRpbWUudmFsdWUoKSkg
PCBwb3NpdGlvbkNhY2hlVGhyZXNob2xkICYmIG1fY2FjaGVkUG9zaXRpb24uaXNWYWxpZCgpKSB7
CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUoKSwgIlJldHVybmluZyBjYWNoZWQg
cG9zaXRpb246ICVzIiwgbV9jYWNoZWRQb3NpdGlvbi50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICByZXR1cm4gbV9jYWNoZWRQb3NpdGlvbjsKKyAgICB9CisKKyAgICBtX2xhc3RR
dWVyeVRpbWUgPSBub3c7CisKKyAgICAvLyBQb3NpdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiBu
byBhc3luYyBzdGF0ZSBjaGFuZ2UgaXMgZ29pbmcgb24gYW5kIHRoZSBzdGF0ZSBpcyBlaXRoZXIg
cGF1c2VkIG9yIHBsYXlpbmcuCisgICAgZ2ludDY0IHBvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVf
Tk9ORTsKKyAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9G
T1JNQVRfVElNRSk7CisgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCks
IHF1ZXJ5KSkKKyAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9z
aXRpb24pOworICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisKKyAgICBHU1RfVFJBQ0VfT0JK
RUNUKHBpcGVsaW5lKCksICJQb3NpdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQgIiwgY2FuRmFsbEJh
Y2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbjogJXMiLCBHU1RfVElNRV9BUkdTKHBvc2l0aW9u
KSwgYm9vbEZvclByaW50aW5nKG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlv
bikpOworCisgICAgTWVkaWFUaW1lIHBsYXliYWNrUG9zaXRpb24gPSBNZWRpYVRpbWU6Onplcm9U
aW1lKCk7CisgICAgR3N0Q2xvY2tUaW1lIGdzdHJlYW1lclBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8
R3N0Q2xvY2tUaW1lPihwb3NpdGlvbik7CisgICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElE
KGdzdHJlYW1lclBvc2l0aW9uKSkKKyAgICAgICAgcGxheWJhY2tQb3NpdGlvbiA9IE1lZGlhVGlt
ZShnc3RyZWFtZXJQb3NpdGlvbiwgR1NUX1NFQ09ORCk7CisgICAgZWxzZSBpZiAobV9jYW5GYWxs
QmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uKQorICAgICAgICBwbGF5YmFja1Bvc2l0aW9u
ID0gbV9zZWVrVGltZTsKKworICAgIG1fY2FjaGVkUG9zaXRpb24gPSBwbGF5YmFja1Bvc2l0aW9u
OworICAgIHJldHVybiBwbGF5YmFja1Bvc2l0aW9uOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6ZW5hYmxlVHJhY2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJh
Y2tUeXBlIHRyYWNrVHlwZSwgdW5zaWduZWQgaW5kZXgpCit7CisgICAgLy8gRklYTUU6IFJlbW92
ZSBpc01lZGlhU291cmNlKCkgdGVzdCBiZWxvdyB3aGVuIGZpeGluZyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNTMxLgorICAgIGlmIChpc01lZGlhU291cmNlKCkp
IHsKKyAgICAgICAgR1NUX0ZJWE1FX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQXVkaW8vVmlk
ZW8vVGV4dCB0cmFjayBzd2l0Y2hpbmcgaXMgbm90IHlldCBzdXBwb3J0ZWQgYnkgdGhlIE1TRSBi
YWNrZW5kLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgY2hhciogcHJv
cGVydHlOYW1lOworICAgIGNvbnN0IGNoYXIqIHRyYWNrVHlwZUFzU3RyaW5nOworICAgIFZlY3Rv
cjxTdHJpbmc+IHNlbGVjdGVkU3RyZWFtczsKKyAgICBTdHJpbmcgc2VsZWN0ZWRTdHJlYW1JZDsK
KworICAgIEdzdFN0cmVhbSogc3RyZWFtID0gbnVsbHB0cjsKKworICAgIGlmICghbV9pc0xlZ2Fj
eVBsYXliaW4pIHsKKyAgICAgICAgc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9z
dHJlYW0obV9zdHJlYW1Db2xsZWN0aW9uLmdldCgpLCBpbmRleCk7CisgICAgICAgIGlmICghc3Ry
ZWFtKSB7CisgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QocGlwZWxpbmUoKSwgIk5vIHN0
cmVhbSB0byBzZWxlY3QgYXQgaW5kZXggJXUiLCBpbmRleCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgc2VsZWN0ZWRTdHJlYW1JZCA9IFN0cmluZzo6ZnJvbVVURjgo
Z3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbSkpOworICAgICAgICBzZWxlY3RlZFN0cmVh
bXMuYXBwZW5kKHNlbGVjdGVkU3RyZWFtSWQpOworICAgIH0KKworICAgIHN3aXRjaCAodHJhY2tU
eXBlKSB7CisgICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OkF1
ZGlvOgorICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiY3VycmVudC1hdWRpbyI7CisgICAgICAgIHRy
YWNrVHlwZUFzU3RyaW5nID0gImF1ZGlvIjsKKyAgICAgICAgaWYgKCFzZWxlY3RlZFN0cmVhbUlk
LmlzRW1wdHkoKSAmJiBzZWxlY3RlZFN0cmVhbUlkID09IG1fY3VycmVudEF1ZGlvU3RyZWFtSWQp
IHsKKyAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiJXMgc3RyZWFtOiAl
cyBhbHJlYWR5IHNlbGVjdGVkLCBub3QgZG9pbmcgYW55dGhpbmcuIiwgdHJhY2tUeXBlQXNTdHJp
bmcsIHNlbGVjdGVkU3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fY3VycmVudFRleHRTdHJlYW1JZC5pc0VtcHR5
KCkpCisgICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudFRleHRTdHJl
YW1JZCk7CisgICAgICAgIGlmICghbV9jdXJyZW50VmlkZW9TdHJlYW1JZC5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudFZpZGVvU3RyZWFtSWQp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRy
YWNrVHlwZTo6VmlkZW86CisgICAgICAgIHByb3BlcnR5TmFtZSA9ICJjdXJyZW50LXZpZGVvIjsK
KyAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAidmlkZW8iOworICAgICAgICBpZiAoIXNlbGVj
dGVkU3RyZWFtSWQuaXNFbXB0eSgpICYmIHNlbGVjdGVkU3RyZWFtSWQgPT0gbV9jdXJyZW50Vmlk
ZW9TdHJlYW1JZCkgeworICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICIl
cyBzdHJlYW06ICVzIGFscmVhZHkgc2VsZWN0ZWQsIG5vdCBkb2luZyBhbnl0aGluZy4iLCB0cmFj
a1R5cGVBc1N0cmluZywgc2VsZWN0ZWRTdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9jdXJyZW50QXVkaW9TdHJl
YW1JZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3Vy
cmVudEF1ZGlvU3RyZWFtSWQpOworICAgICAgICBpZiAoIW1fY3VycmVudFRleHRTdHJlYW1JZC5p
c0VtcHR5KCkpCisgICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudFRl
eHRTdHJlYW1JZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdT
dHJlYW1lcjo6VHJhY2tUeXBlOjpUZXh0OgorICAgICAgICBwcm9wZXJ0eU5hbWUgPSAiY3VycmVu
dC10ZXh0IjsKKyAgICAgICAgdHJhY2tUeXBlQXNTdHJpbmcgPSAidGV4dCI7CisgICAgICAgIGlm
ICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0ZWRTdHJlYW1JZCA9PSBtX2N1
cnJlbnRUZXh0U3RyZWFtSWQpIHsKKyAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGlu
ZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5IHNlbGVjdGVkLCBub3QgZG9pbmcgYW55dGhpbmcu
IiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVjdGVkU3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fY3VycmVudEF1
ZGlvU3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVu
ZChtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKTsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRWaWRlb1N0
cmVhbUlkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9j
dXJyZW50VmlkZW9TdHJlYW1JZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJhY2tQcml2
YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpVbmtub3duOgorICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEdTVF9JTkZPX09CSkVDVChw
aXBlbGluZSgpLCAiRW5hYmxpbmcgJXMgdHJhY2sgd2l0aCBpbmRleDogJXUiLCB0cmFja1R5cGVB
c1N0cmluZywgaW5kZXgpOworICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKKyAgICAgICAgZ19v
YmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksIHByb3BlcnR5TmFtZSwgaW5kZXgsIG51bGxwdHIp
OworICAgIGVsc2UgeworICAgICAgICBHTGlzdCogc2VsZWN0ZWRTdHJlYW1zTGlzdCA9IG51bGxw
dHI7CisKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdHJlYW1JZCA6IHNlbGVjdGVkU3RyZWFt
cykKKyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtc0xpc3QgPSBnX2xpc3RfYXBwZW5kKHNlbGVj
dGVkU3RyZWFtc0xpc3QsIGdfc3RyZHVwKHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpKTsKKworICAg
ICAgICAvLyBUT0RPOiBNU0UgR3N0U3RyZWFtIEFQSSBzdXBwb3J0OiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyNTMxCisgICAgICAgIGdzdF9lbGVtZW50X3NlbmRf
ZXZlbnQobV9waXBlbGluZS5nZXQoKSwgZ3N0X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtcyhzZWxl
Y3RlZFN0cmVhbXNMaXN0KSk7CisgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwoc2VsZWN0ZWRTdHJl
YW1zTGlzdCwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19mcmVlKSk7CisgICAg
fQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlVHJhY2tzKCkK
K3sKKyAgICBBU1NFUlQoIW1faXNMZWdhY3lQbGF5YmluKTsKKworICAgIGJvb2wgdXNlTWVkaWFT
b3VyY2UgPSBpc01lZGlhU291cmNlKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X3N0cmVh
bV9jb2xsZWN0aW9uX2dldF9zaXplKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQoKSk7CisKKyAgICBi
b29sIG9sZEhhc0F1ZGlvID0gbV9oYXNBdWRpbzsKKyAgICBib29sIG9sZEhhc1ZpZGVvID0gbV9o
YXNWaWRlbzsKKyAgICAvLyBOZXcgc3RyZWFtIGNvbGxlY3Rpb25zIG92ZXJyaWRlIHByZXZpb3Vz
IG9uZXMuCisgICAgY2xlYXJUcmFja3MoKTsKKyAgICB1bnNpZ25lZCB0ZXh0VHJhY2tJbmRleCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAg
IEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0
cmVhbShtX3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCksIGkpOworICAgICAgICBTdHJpbmcgc3RyZWFt
SWQoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOworICAgICAgICBHc3RT
dHJlYW1UeXBlIHR5cGUgPSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0uZ2V0KCkp
OworCisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkluc3BlY3RpbmcgJXMg
dHJhY2sgd2l0aCBJRCAlcyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3RyZWFt
SWQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX0FV
RElPKQorICAgICAgICAgICAgQ1JFQVRFX1RSQUNLKGF1ZGlvLCBBdWRpbyk7CisgICAgICAgIGVs
c2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklERU8pCisgICAgICAgICAgICBDUkVBVEVf
VFJBQ0sodmlkZW8sIFZpZGVvKTsKKyAgICAgICAgZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1f
VFlQRV9URVhUICYmICF1c2VNZWRpYVNvdXJjZSkgeworI2lmIEVOQUJMRShWSURFT19UUkFDSykK
KyAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVy
OjpjcmVhdGUodGV4dFRyYWNrSW5kZXgrKywgc3RyZWFtKTsKKyAgICAgICAgICAgIG1fdGV4dFRy
YWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrLmNvcHlSZWYoKSk7CisgICAgICAgICAgICBtX3BsYXll
ci0+YWRkVGV4dFRyYWNrKHRyYWNrLmdldCgpKTsKKyNlbmRpZgorICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIEdTVF9XQVJOSU5HKCJVbmtub3duIHRyYWNrIHR5cGUgZm91bmQgZm9yIHN0cmVh
bSAlcyIsIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIGlmICgob2xkSGFz
VmlkZW8gIT0gbV9oYXNWaWRlbykgfHwgKG9sZEhhc0F1ZGlvICE9IG1faGFzQXVkaW8pKQorICAg
ICAgICBtX3BsYXllci0+Y2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCk7CisKKyAgICBpZiAobV9oYXNW
aWRlbykKKyAgICAgICAgbV9wbGF5ZXItPnNpemVDaGFuZ2VkKCk7CisKKyAgICBtX3BsYXllci0+
Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNsZWFyVHJhY2tzKCkKK3sKKyNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCisgICAgQ0xFQVJfVFJBQ0tTKG1fYXVkaW9UcmFja3MsIG1fcGxheWVyLT5y
ZW1vdmVBdWRpb1RyYWNrKTsKKyAgICBDTEVBUl9UUkFDS1MobV92aWRlb1RyYWNrcywgbV9wbGF5
ZXItPnJlbW92ZVZpZGVvVHJhY2spOworICAgIENMRUFSX1RSQUNLUyhtX3RleHRUcmFja3MsIG1f
cGxheWVyLT5yZW1vdmVUZXh0VHJhY2spOworI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVvQ2hhbmdlZENhbGxi
YWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQoreworICAgIHBsYXllci0+
bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlZpZGVvQ2hhbmdlZCwg
W3BsYXllcl0geworICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVmlkZW8oKTsKKyAgICB9
KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBpcGVsaW5lKEdz
dEVsZW1lbnQqIHBpcGVsaW5lKQoreworICAgIG1fcGlwZWxpbmUgPSBwaXBlbGluZTsKKworICAg
IEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NU
X1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgZ3N0X2J1c19zZXRfc3luY19oYW5k
bGVyKGJ1cy5nZXQoKSwgW10oR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIg
dXNlckRhdGEpIHsKKyAgICAgICAgYXV0byYgcGxheWVyID0gKnN0YXRpY19jYXN0PE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKKworICAgICAgICBpZiAocGxheWVyLmhh
bmRsZVN5bmNNZXNzYWdlKG1lc3NhZ2UpKSB7CisgICAgICAgICAgICBnc3RfbWVzc2FnZV91bnJl
ZihtZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfQlVTX0RST1A7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gR1NUX0JVU19QQVNTOworICAgIH0sIHRoaXMsIG51bGxwdHIpOwor
fQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2Uo
R3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdl
KSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTiAmJiAhbV9pc0xlZ2FjeVBsYXliaW4p
IHsKKyAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOworICAg
ICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbihtZXNzYWdlLCAmY29sbGVj
dGlvbi5vdXRQdHIoKSk7CisKKyAgICAgICAgaWYgKGNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAg
IG1fc3RyZWFtQ29sbGVjdGlvbi5zd2FwKGNvbGxlY3Rpb24pOworICAgICAgICAgICAgbV9ub3Rp
Zmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlN0cmVhbUNvbGxlY3Rpb25DaGFu
Z2VkLCBbdGhpc10geworICAgICAgICAgICAgICAgIHRoaXMtPnVwZGF0ZVRyYWNrcygpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoR1NUX01FU1NBR0VfVFlQ
RShtZXNzYWdlKSAhPSBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGNvbnN0IGdjaGFyKiBjb250ZXh0VHlwZTsKKyAgICBnc3RfbWVzc2FnZV9w
YXJzZV9jb250ZXh0X3R5cGUobWVzc2FnZSwgJmNvbnRleHRUeXBlKTsKKyAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJIYW5kbGluZyAlcyBuZWVkLWNvbnRleHQgbWVzc2FnZSBmb3Ig
JXMiLCBjb250ZXh0VHlwZSwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOworCisgICAg
aWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUsIFdFQktJVF9XRUJfU1JDX1BMQVlFUl9DT05URVhU
X1RZUEVfTkFNRSkpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRv
cHRHUmVmKGdzdF9jb250ZXh0X25ldyhXRUJLSVRfV0VCX1NSQ19QTEFZRVJfQ09OVEVYVF9UWVBF
X05BTUUsIEZBTFNFKSk7CisgICAgICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9
IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKKworICAgICAg
ICBBU1NFUlQobV9wbGF5ZXIpOworICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3Ry
dWN0dXJlLCAicGxheWVyIiwgR19UWVBFX1BPSU5URVIsIG1fcGxheWVyLCBudWxscHRyKTsKKyAg
ICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JD
KG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBlbGVtZW50
Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0R0xDb250ZXh0KGNvbnRleHRUeXBlKSk7CisgICAg
aWYgKGVsZW1lbnRDb250ZXh0KSB7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdT
VF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyksIGVsZW1lbnRDb250ZXh0LmdldCgpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCisKKyNpZiBF
TkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCAi
ZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCIpKSB7CisgICAgICAgIGlmIChpc01h
aW5UaHJlYWQoKSkgeworICAgICAgICAgICAgR1NUX0VSUk9SKCJjYW4ndCBoYW5kbGUgZHJtLXBy
ZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVkIGNvbnRleHQgbWVzc2FnZSBpbiB0aGUg
bWFpbiB0aHJlYWQiKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgImhhbmRsaW5nIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQg
bmVlZCBjb250ZXh0IG1lc3NhZ2UiKTsKKworICAgICAgICBJbml0RGF0YSBpbml0RGF0YTsKKyAg
ICAgICAgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11dGV4KTsK
KyAgICAgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMgcHJvdGVjdGlvblN5c3RlbUV2ZW50
cyhtZXNzYWdlKTsKKyAgICAgICAgICAgIEdTVF9UUkFDRSgiZm91bmQgJXp1IHByb3RlY3Rpb24g
ZXZlbnRzLCAlenUgZGVjcnlwdG9ycyBhdmFpbGFibGUiLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRz
LmV2ZW50cygpLnNpemUoKSwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5hdmFpbGFibGVTeXN0ZW1z
KCkuc2l6ZSgpKTsKKworICAgICAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IHByb3RlY3Rpb25T
eXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBldmVu
dEtleVN5c3RlbUlkID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBHc3RCdWZmZXIqIGRhdGEg
PSBudWxscHRyOworICAgICAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9wcm90ZWN0aW9uKGV2
ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxwdHIpOworCisgICAgICAg
ICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlkLCBkYXRhfSk7CisgICAg
ICAgICAgICAgICAgbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy5hZGQoR1NUX0VWRU5UX1NFUU5V
TShldmVudC5nZXQoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGluaXRp
YWxpemF0aW9uRGF0YUVuY291bnRlcmVkKFdURk1vdmUoaW5pdERhdGEpKTsKKworICAgICAgICBH
U1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRpbmcgZm9yIGEgQ0RNIGluc3RhbmNlIik7
CisgICAgICAgIGlmIChtX2NkbUF0dGFjaG1lbnRTZW1hcGhvcmUud2FpdEZvcig0X3MpCisgICAg
ICAgICAgICAmJiBtX25vdGlmaWVyLT5pc1ZhbGlkKCkgLy8gQ2hlY2sgdGhlIHBsYXllciBpcyBu
b3QgYmVpbmcgZGVzdHJveWVkLgorICAgICAgICAgICAgJiYgIW1fY2RtSW5zdGFuY2UtPmtleVN5
c3RlbSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogcHJlZmVycmVkS2V5
U3lzdGVtVXVpZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6a2V5U3lzdGVtVG9VdWlkKG1fY2Rt
SW5zdGFuY2UtPmtleVN5c3RlbSgpKTsKKyAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBl
bGluZSgpLCAid29ya2luZyB3aXRoIGtleSBzeXN0ZW0gJXMsIGNvbnRpbnVpbmcgd2l0aCBrZXkg
c3lzdGVtICVzIG9uICVzIiwgbV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVtKCkudXRmOCgpLmRhdGEo
KSwgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkp
OworCisgICAgICAgICAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYo
Z3N0X2NvbnRleHRfbmV3KCJkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIiwgRkFM
U0UpKTsKKyAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0cnVjdHVyZSA9IGdzdF9j
b250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsKKyAgICAgICAgICAgIGdz
dF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJkZWNyeXB0aW9uLXN5c3RlbS1pZCIs
IEdfVFlQRV9TVFJJTkcsIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIG51bGxwdHIpOworICAgICAg
ICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQoR1NUX01FU1NBR0VfU1JD
KG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
R1NUX1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6YWVkIik7CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKK0dzdENvbnRleHQq
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVxdWVzdEdMQ29udGV4dChjb25zdCBjaGFy
KiBjb250ZXh0VHlwZSkKK3sKKyAgICBpZiAoIWVuc3VyZUdzdEdMQ29udGV4dCgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCBHU1Rf
R0xfRElTUExBWV9DT05URVhUX1RZUEUpKSB7CisgICAgICAgIEdzdENvbnRleHQqIGRpc3BsYXlD
b250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KEdTVF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSwgVFJV
RSk7CisgICAgICAgIGdzdF9jb250ZXh0X3NldF9nbF9kaXNwbGF5KGRpc3BsYXlDb250ZXh0LCBn
c3RHTERpc3BsYXkoKSk7CisgICAgICAgIHJldHVybiBkaXNwbGF5Q29udGV4dDsKKyAgICB9CisK
KyAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImdzdC5nbC5hcHBfY29udGV4dCIpKSB7
CisgICAgICAgIEdzdENvbnRleHQqIGFwcENvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoImdzdC5n
bC5hcHBfY29udGV4dCIsIFRSVUUpOworICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShhcHBDb250ZXh0KTsKKyNpZiBHU1RfQ0hF
Q0tfVkVSU0lPTigxLCAxMiwgMCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJl
LCAiY29udGV4dCIsIEdTVF9UWVBFX0dMX0NPTlRFWFQsIGdzdEdMQ29udGV4dCgpLCBudWxscHRy
KTsKKyNlbHNlCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQi
LCBHU1RfR0xfVFlQRV9DT05URVhULCBnc3RHTENvbnRleHQoKSwgbnVsbHB0cik7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIGFwcENvbnRleHQ7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbnN1cmVHc3RHTENvbnRl
eHQoKQoreworICAgIGlmIChtX2dsQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBhdXRvJiBzaGFyZWREaXNwbGF5ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9y
Q29tcG9zaXRpbmcoKTsKKworICAgIC8vIFRoZSBmbG9hdGluZyByZWYgcmVtb3ZhbCBzdXBwb3J0
IHdhcyBhZGRlZCBpbiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQzMDYyLgorICAgIGJvb2wgc2hvdWxkQWRvcHRSZWYgPSB3ZWJraXRHc3RDaGVja1ZlcnNpb24o
MSwgMTQsIDApOworICAgIGlmICghbV9nbERpc3BsYXkpIHsKKyNpZiBQTEFURk9STShYMTEpCisj
aWYgVVNFKEdMWCkKKyAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlz
cGxheSkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNyZWF0
aW5nIFgxMSBzaGFyZWQgR0wgZGlzcGxheSIpOworICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0
UmVmKQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQ
TEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3Jt
RGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlz
cGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNo
YXJlZERpc3BsYXkpLm5hdGl2ZSgpKSk7CisgICAgICAgIH0KKyNlbGlmIFVTRShFR0wpCisgICAg
ICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7CisgICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBYMTEgc2hhcmVkIEVH
TCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAgICAgICAg
ICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3Bs
YXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4o
c2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWds
X25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVk
RGlzcGxheSkuZWdsRGlzcGxheSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorI2VuZGlmCisKKyNp
ZiBQTEFURk9STShXQVlMQU5EKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5V2F5bGFu
ZD4oc2hhcmVkRGlzcGxheSkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxp
bmUoKSwgIkNyZWF0aW5nIFdheWxhbmQgc2hhcmVkIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGlm
IChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1Jl
ZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXko
ZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxh
eSgpKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0g
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRv
d25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXko
KSkpOworICAgICAgICB9CisjZW5kaWYKKworI2lmIFVTRShXUEVfUkVOREVSRVIpCisgICAgICAg
IGlmIChpczxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpKSB7CisgICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBXUEUgc2hhcmVkIEVH
TCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAgICAgICAg
ICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3Bs
YXlfZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheUxpYldQ
RT4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlf
ZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheUxpYldQRT4o
c2hhcmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAg
ICAgIEFTU0VSVChtX2dsRGlzcGxheSk7CisgICAgfQorCisgICAgR0xDb250ZXh0KiB3ZWJraXRD
b250ZXh0ID0gc2hhcmVkRGlzcGxheS5zaGFyaW5nR0xDb250ZXh0KCk7CisgICAgLy8gRUdMIGFu
ZCBHTFggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgbm8gbmVlZCBmb3IgaWZkZWZzIGhlcmUuCisg
ICAgR3N0R0xQbGF0Zm9ybSBnbFBsYXRmb3JtID0gd2Via2l0Q29udGV4dC0+aXNFR0xDb250ZXh0
KCkgPyBHU1RfR0xfUExBVEZPUk1fRUdMIDogR1NUX0dMX1BMQVRGT1JNX0dMWDsKKworI2lmIFVT
RShPUEVOR0xfRVMpCisgICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX0dMRVMyOworI2Vs
aWYgVVNFKE9QRU5HTCkKKyAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9BUElfT1BFTkdMOwor
I2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorCisgICAgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQzRCBjb250ZXh0SGFuZGxlID0gd2Via2l0Q29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0SGFuZGxlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCisgICAgICAgIG1fZ2xDb250ZXh0ID0gYWRvcHRH
UmVmKGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1fZ2xEaXNwbGF5LmdldCgpLCByZWludGVy
cHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpKTsK
KyAgICBlbHNlCisgICAgICAgIG1fZ2xDb250ZXh0ID0gZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBw
ZWQobV9nbERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRI
YW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSk7CisKKyAgICAvLyBBY3RpdmF0ZSBhbmQgZmlsbCB0
aGUgR1N0cmVhbWVyIHdyYXBwZWQgY29udGV4dCB3aXRoIHRoZSBXZWJraXQncyBzaGFyZWQgb25l
LgorICAgIGF1dG8gcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7
CisgICAgd2Via2l0Q29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKGdzdF9n
bF9jb250ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBUUlVFKSkgeworICAgICAgICBH
VW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIGlmICghZ3N0X2dsX2NvbnRleHRf
ZmlsbF9pbmZvKG1fZ2xDb250ZXh0LmdldCgpLCAmZXJyb3Iub3V0UHRyKCkpKQorICAgICAgICAg
ICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBmaWxsIGluIEdTdHJlYW1lciBjb250ZXh0OiAlcyIs
IGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUobV9nbENv
bnRleHQuZ2V0KCksIEZBTFNFKTsKKyAgICB9IGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZh
aWxlZCB0byBhY3RpdmF0ZSBHU3RyZWFtZXIgY29udGV4dCAlIiBHU1RfUFRSX0ZPUk1BVCwgbV9n
bENvbnRleHQuZ2V0KCkpOworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAg
IHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQorCisvLyBSZXR1cm5zIHRo
ZSBzaXplIG9mIHRoZSB2aWRlbworRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6bmF0dXJhbFNpemUoKSBjb25zdAoreworI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQor
ICAgIC8vIFdoZW4gdXNpbmcgdGhlIGhvbGVwdWNoIHdlIG1heSBub3QgYmUgYWJsZSB0byBnZXQg
dGhlIHZpZGVvIGZyYW1lcyBzaXplLCBzbyB3ZSBjYW4ndCB1c2UKKyAgICAvLyBpdC4gQnV0IHdl
IG5lZWQgdG8gcmVwb3J0IHNvbWUgbm9uIGVtcHR5IG5hdHVyYWxTaXplIGZvciB0aGUgcGxheWVy
J3MgR3JhcGhpY3NMYXllcgorICAgIC8vIHRvIGJlIHByb3Blcmx5IGNyZWF0ZWQuCisgICAgcmV0
dXJuIHNfaG9sZVB1bmNoRGVmYXVsdEZyYW1lU2l6ZTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKKyAgICBpZiAoIW1faXNMZWdhY3lQbGF5YmluICYmICFtX2N1cnJlbnRWaWRl
b1N0cmVhbUlkLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVH
U3RyZWFtZXI+IHZpZGVvVHJhY2sgPSBtX3ZpZGVvVHJhY2tzLmdldChtX2N1cnJlbnRWaWRlb1N0
cmVhbUlkKTsKKworICAgICAgICBpZiAodmlkZW9UcmFjaykgeworICAgICAgICAgICAgYXV0byB0
YWdzID0gYWRvcHRHUmVmKGdzdF9zdHJlYW1fZ2V0X3RhZ3ModmlkZW9UcmFjay0+c3RyZWFtKCkp
KTsKKyAgICAgICAgICAgIGdpbnQgd2lkdGgsIGhlaWdodDsKKworICAgICAgICAgICAgaWYgKHRh
Z3MgJiYgZ3N0X3RhZ19saXN0X2dldF9pbnQodGFncy5nZXQoKSwgV0VCS0lUX01FRElBX1RSQUNL
X1RBR19XSURUSCwgJndpZHRoKSAmJiBnc3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLmdldCgpLCBX
RUJLSVRfTUVESUFfVFJBQ0tfVEFHX0hFSUdIVCwgJmhlaWdodCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisgICAgaWYgKCFoYXNWaWRlbygpKQorICAgICAg
ICByZXR1cm4gRmxvYXRTaXplKCk7CisKKyAgICBpZiAoIW1fdmlkZW9TaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIG1fdmlkZW9TaXplOworCisgICAgYXV0byBzYW1wbGVMb2NrZXIgPSBo
b2xkTG9jayhtX3NhbXBsZU11dGV4KTsKKyAgICBpZiAoIUdTVF9JU19TQU1QTEUobV9zYW1wbGUu
Z2V0KCkpKQorICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7CisKKyAgICBHc3RDYXBzKiBjYXBz
ID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyhtX3NhbXBsZS5nZXQoKSk7CisgICAgaWYgKCFjYXBzKQor
ICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7CisKKyAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2li
bGUgY2xlYW4gYXBlcnR1cmUgZGF0YS4gU2VlCisgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5nbm9t
ZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjU3MQorICAgIC8vIFRPRE86IGhhbmRsZSBwb3NzaWJs
ZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIFNlZQorICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25v
bWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTYzMjYKKworICAgIC8vIEdldCB0aGUgdmlkZW8gUEFS
IGFuZCBvcmlnaW5hbCBzaXplLCBpZiB0aGlzIGZhaWxzIHRoZQorICAgIC8vIHZpZGVvLXNpbmsg
aGFzIGxpa2VseSBub3QgeWV0IG5lZ290aWF0ZWQgaXRzIGNhcHMuCisgICAgaW50IHBpeGVsQXNw
ZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlOwor
ICAgIEludFNpemUgb3JpZ2luYWxTaXplOworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKKyAg
ICBpZiAoIWdldFZpZGVvU2l6ZUFuZEZvcm1hdEZyb21DYXBzKGNhcHMsIG9yaWdpbmFsU2l6ZSwg
Zm9ybWF0LCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21p
bmF0b3IsIHN0cmlkZSkpCisgICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKKworI2lmIFVTRShU
RVhUVVJFX01BUFBFUl9HTCkKKyAgICAvLyBXaGVuIHVzaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0
aW5nLCBpZiB0aGUgdmlkZW8gaXMgdGFnZ2VkIGFzIHJvdGF0ZWQgOTAgb3IgMjcwIGRlZ3JlZXMs
IHN3YXAgd2lkdGggYW5kIGhlaWdodC4KKyAgICBpZiAobV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJh
dGVkKSB7CisgICAgICAgIGlmIChtX3ZpZGVvU291cmNlT3JpZW50YXRpb24udXNlc1dpZHRoQXNI
ZWlnaHQoKSkKKyAgICAgICAgICAgIG9yaWdpbmFsU2l6ZSA9IG9yaWdpbmFsU2l6ZS50cmFuc3Bv
c2VkU2l6ZSgpOworICAgIH0KKyNlbmRpZgorCisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiT3JpZ2luYWwgdmlkZW8gc2l6ZTogJWR4JWQiLCBvcmlnaW5hbFNpemUud2lkdGgoKSwg
b3JpZ2luYWxTaXplLmhlaWdodCgpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJQaXhlbCBhc3BlY3QgcmF0aW86ICVkLyVkIiwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwg
cGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKTsKKworICAgIC8vIENhbGN1bGF0ZSBEQVIgYmFz
ZWQgb24gUEFSIGFuZCB2aWRlbyBzaXplLgorICAgIGludCBkaXNwbGF5V2lkdGggPSBvcmlnaW5h
bFNpemUud2lkdGgoKSAqIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3I7CisgICAgaW50IGRpc3Bs
YXlIZWlnaHQgPSBvcmlnaW5hbFNpemUuaGVpZ2h0KCkgKiBwaXhlbEFzcGVjdFJhdGlvRGVub21p
bmF0b3I7CisKKyAgICAvLyBEaXZpZGUgZGlzcGxheSB3aWR0aCBhbmQgaGVpZ2h0IGJ5IHRoZWly
IEdDRCB0byBhdm9pZCBwb3NzaWJsZSBvdmVyZmxvd3MuCisgICAgaW50IGRpc3BsYXlBc3BlY3RS
YXRpb0dDRCA9IGdyZWF0ZXN0Q29tbW9uRGl2aXNvcihkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWln
aHQpOworICAgIGRpc3BsYXlXaWR0aCAvPSBkaXNwbGF5QXNwZWN0UmF0aW9HQ0Q7CisgICAgZGlz
cGxheUhlaWdodCAvPSBkaXNwbGF5QXNwZWN0UmF0aW9HQ0Q7CisKKyAgICAvLyBBcHBseSBEQVIg
dG8gb3JpZ2luYWwgdmlkZW8gc2l6ZS4gVGhpcyBpcyB0aGUgc2FtZSBiZWhhdmlvciBhcyBpbiB4
dmltYWdlc2luaydzIHNldGNhcHMgZnVuY3Rpb24uCisgICAgZ3VpbnQ2NCB3aWR0aCA9IDAsIGhl
aWdodCA9IDA7CisgICAgaWYgKCEob3JpZ2luYWxTaXplLmhlaWdodCgpICUgZGlzcGxheUhlaWdo
dCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiS2VlcGluZyB2aWRl
byBvcmlnaW5hbCBoZWlnaHQiKTsKKyAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2Nh
bGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0
KTsKKyAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhl
aWdodCgpKTsKKyAgICB9IGVsc2UgaWYgKCEob3JpZ2luYWxTaXplLndpZHRoKCkgJSBkaXNwbGF5
V2lkdGgpKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIktlZXBpbmcg
dmlkZW8gb3JpZ2luYWwgd2lkdGgiKTsKKyAgICAgICAgaGVpZ2h0ID0gZ3N0X3V0aWxfdWludDY0
X3NjYWxlX2ludChvcmlnaW5hbFNpemUud2lkdGgoKSwgZGlzcGxheUhlaWdodCwgZGlzcGxheVdp
ZHRoKTsKKyAgICAgICAgd2lkdGggPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUu
d2lkdGgoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiQXBwcm94aW1hdGluZyB3aGlsZSBrZWVwaW5nIG9yaWdpbmFsIHZpZGVvIGhlaWdodCIp
OworICAgICAgICB3aWR0aCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXpl
LmhlaWdodCgpLCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOworICAgICAgICBoZWlnaHQg
PSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOworICAgIH0KKwor
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk5hdHVyYWwgc2l6ZTogJSIgR19HVUlO
VDY0X0ZPUk1BVCAieCUiIEdfR1VJTlQ2NF9GT1JNQVQsIHdpZHRoLCBoZWlnaHQpOworICAgIG1f
dmlkZW9TaXplID0gRmxvYXRTaXplKHN0YXRpY19jYXN0PGludD4od2lkdGgpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGhlaWdodCkpOworICAgIHJldHVybiBtX3ZpZGVvU2l6ZTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCit7CisgICAg
aWYgKCFtX3ZvbHVtZUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgdm9sdW1lOiAlZiIsIHZvbHVtZSk7CisgICAgZ3N0
X3N0cmVhbV92b2x1bWVfc2V0X3ZvbHVtZShtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksIEdTVF9TVFJF
QU1fVk9MVU1FX0ZPUk1BVF9MSU5FQVIsIHN0YXRpY19jYXN0PGRvdWJsZT4odm9sdW1lKSk7Cit9
CisKK2Zsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dm9sdW1lKCkgY29uc3QKK3sK
KyAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gZ3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZShtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksIEdT
VF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9MSU5FQVIpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKQoreworICAgIGlmICgh
bV9wbGF5ZXIgfHwgIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGRvdWJs
ZSB2b2x1bWU7CisgICAgdm9sdW1lID0gZ3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZShtX3Zv
bHVtZUVsZW1lbnQuZ2V0KCksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9MSU5FQVIpOworICAg
IC8vIGdldF92b2x1bWUoKSBjYW4gcmV0dXJuIHZhbHVlcyBzdXBlcmlvciB0byAxLjAgaWYgdGhl
IHVzZXIKKyAgICAvLyBhcHBsaWVzIHNvZnR3YXJlIHVzZXIgZ2FpbiB2aWEgdGhpcmQgcGFydHkg
YXBwbGljYXRpb24gKEdOT01FCisgICAgLy8gdm9sdW1lIGNvbnRyb2wgZm9yIGluc3RhbmNlKS4K
KyAgICB2b2x1bWUgPSBDTEFNUCh2b2x1bWUsIDAuMCwgMS4wKTsKKyAgICBtX3BsYXllci0+dm9s
dW1lQ2hhbmdlZChzdGF0aWNfY2FzdDxmbG9hdD4odm9sdW1lKSk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2b2x1bWVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBt
X3ZvbHVtZUVsZW1lbnQgcmVjZWl2ZXMgdGhlIG5vdGlmeTo6dm9sdW1lIHNpZ25hbC4KKyAgICBH
U1RfREVCVUdfT0JKRUNUKHBsYXllci0+cGlwZWxpbmUoKSwgIlZvbHVtZSBjaGFuZ2VkIHRvOiAl
ZiIsIHBsYXllci0+dm9sdW1lKCkpOworCisgICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnko
TWFpblRocmVhZE5vdGlmaWNhdGlvbjo6Vm9sdW1lQ2hhbmdlZCwgW3BsYXllcl0geworICAgICAg
ICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7CisgICAgfSk7Cit9CisKK01l
ZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXR3
b3JrU3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX25ldHdvcmtTdGF0ZTsKK30KKworTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVN0
YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZWFkeVN0YXRlOworfQorCit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2l6ZUNoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRNdXRlZChi
b29sIG11dGUpCit7CisgICAgaWYgKCFtX3ZvbHVtZUVsZW1lbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIGJvb2wgY3VycmVudFZhbHVlID0gbXV0ZWQoKTsKKyAgICBpZiAoY3VycmVudFZhbHVl
ID09IG11dGUpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGlu
ZSgpLCAiU2V0IG11dGVkIHRvICVzIiwgdG9TdHJpbmcobXV0ZSkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgZ19vYmplY3Rfc2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCBtdXRlLCBudWxs
cHRyKTsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om11dGVkKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZ2Jvb2xlYW4gbXV0ZWQ7CisgICAgZ19vYmplY3RfZ2V0KG1fdm9sdW1lRWxlbWVudC5n
ZXQoKSwgIm11dGUiLCAmbXV0ZWQsIG51bGxwdHIpOworICAgIEdTVF9JTkZPX09CSkVDVChwaXBl
bGluZSgpLCAiUGxheWVyIGlzIG11dGVkOiAlcyIsIHRvU3RyaW5nKHN0YXRpY19jYXN0PGJvb2w+
KG11dGVkKSkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIG11dGVkOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZNdXRlKCkKK3sKKyAgICBp
ZiAoIW1fcGxheWVyIHx8ICFtX3ZvbHVtZUVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IGdib29sZWFuIG11dGVkOworICAgIGdfb2JqZWN0X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCks
ICJtdXRlIiwgJm11dGVkLCBudWxscHRyKTsKKyAgICBtX3BsYXllci0+bXV0ZUNoYW5nZWQoc3Rh
dGljX2Nhc3Q8Ym9vbD4obXV0ZWQpKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om11dGVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBw
bGF5ZXIpCit7CisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBtX3ZvbHVtZUVsZW1lbnQgcmVj
ZWl2ZXMgdGhlIG5vdGlmeTo6bXV0ZSBzaWduYWwuCisgICAgcGxheWVyLT5tX25vdGlmaWVyLT5u
b3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6TXV0ZUNoYW5nZWQsIFtwbGF5ZXJdIHsKKyAg
ICAgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZk11dGUoKTsKKyAgICB9KTsKK30KKwordm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKK3sKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyOworICAgIEdVbmlxdWVPdXRQ
dHI8Z2NoYXI+IGRlYnVnOworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3I7Cisg
ICAgYm9vbCBpc3N1ZUVycm9yID0gdHJ1ZTsKKyAgICBib29sIGF0dGVtcHROZXh0TG9jYXRpb24g
PSBmYWxzZTsKKyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9tZXNzYWdl
X2dldF9zdHJ1Y3R1cmUobWVzc2FnZSk7CisgICAgR3N0U3RhdGUgcmVxdWVzdGVkU3RhdGUsIGN1
cnJlbnRTdGF0ZTsKKworICAgIG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlv
biA9IGZhbHNlOworCisgICAgaWYgKHN0cnVjdHVyZSkgeworICAgICAgICBjb25zdCBnY2hhciog
bWVzc2FnZVR5cGVOYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworCisg
ICAgICAgIC8vIFJlZGlyZWN0IG1lc3NhZ2VzIGFyZSBzZW50IGZyb20gZWxlbWVudHMsIGxpa2Ug
cXRkZW11eCwgdG8KKyAgICAgICAgLy8gbm90aWZ5IG9mIHRoZSBuZXcgbG9jYXRpb24ocykgb2Yg
dGhlIG1lZGlhLgorICAgICAgICBpZiAoIWdfc3RyY21wMChtZXNzYWdlVHlwZU5hbWUsICJyZWRp
cmVjdCIpKSB7CisgICAgICAgICAgICBtZWRpYUxvY2F0aW9uQ2hhbmdlZChtZXNzYWdlKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIGlnbm9yZSBz
dGF0ZSBjaGFuZ2VzIGZyb20gaW50ZXJuYWwgZWxlbWVudHMuIFRoZXkgYXJlIGZvcndhcmRlZCB0
byBwbGF5YmluMiBhbnl3YXkuCisgICAgYm9vbCBtZXNzYWdlU291cmNlSXNQbGF5YmluID0gR1NU
X01FU1NBR0VfU1JDKG1lc3NhZ2UpID09IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0T2JqZWN0Kj4obV9w
aXBlbGluZS5nZXQoKSk7CisKKyAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiTWVzc2Fn
ZSAlcyByZWNlaXZlZCBmcm9tIGVsZW1lbnQgJXMiLCBHU1RfTUVTU0FHRV9UWVBFX05BTUUobWVz
c2FnZSksIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3NhZ2UpKTsKKyAgICBzd2l0Y2ggKEdTVF9N
RVNTQUdFX1RZUEUobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VSUk9SOgorICAg
ICAgICBpZiAobV9yZXNldFBpcGVsaW5lIHx8ICFtX21pc3NpbmdQbHVnaW5DYWxsYmFja3MuaXNF
bXB0eSgpIHx8IG1fZXJyb3JPY2N1cmVkKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGdz
dF9tZXNzYWdlX3BhcnNlX2Vycm9yKG1lc3NhZ2UsICZlcnIub3V0UHRyKCksICZkZWJ1Zy5vdXRQ
dHIoKSk7CisgICAgICAgIEdTVF9FUlJPUigiRXJyb3IgJWQ6ICVzICh1cmw9JXMpIiwgZXJyLT5j
b2RlLCBlcnItPm1lc3NhZ2UsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAg
ICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUu
Z2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsICJ3ZWJraXQtdmlkZW8uZXJyb3IiKTsK
KworICAgICAgICBlcnJvciA9IE1lZGlhUGxheWVyOjpFbXB0eTsKKyAgICAgICAgaWYgKGdfZXJy
b3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9TVFJFQU1fRVJST1IsIEdTVF9TVFJFQU1fRVJST1Jf
Q09ERUNfTk9UX0ZPVU5EKQorICAgICAgICAgICAgfHwgZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQo
KSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9XUk9OR19UWVBFKQorICAgICAg
ICAgICAgfHwgZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NU
X1NUUkVBTV9FUlJPUl9GQUlMRUQpCisgICAgICAgICAgICB8fCBnX2Vycm9yX21hdGNoZXMoZXJy
LmdldCgpLCBHU1RfQ09SRV9FUlJPUiwgR1NUX0NPUkVfRVJST1JfTUlTU0lOR19QTFVHSU4pCisg
ICAgICAgICAgICB8fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfUkVTT1VSQ0VfRVJS
T1IsIEdTVF9SRVNPVVJDRV9FUlJPUl9OT1RfRk9VTkQpKQorICAgICAgICAgICAgZXJyb3IgPSBN
ZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7CisgICAgICAgIGVsc2UgaWYgKGdfZXJyb3JfbWF0Y2hl
cyhlcnIuZ2V0KCksIEdTVF9TVFJFQU1fRVJST1IsIEdTVF9TVFJFQU1fRVJST1JfVFlQRV9OT1Rf
Rk9VTkQpKSB7CisgICAgICAgICAgICAvLyBMZXQgdGhlIG1lZGlhUGxheWVyQ2xpZW50IGhhbmRs
ZSB0aGUgc3RyZWFtIGVycm9yLCBpbgorICAgICAgICAgICAgLy8gdGhpcyBjYXNlIHRoZSBIVE1M
TWVkaWFFbGVtZW50IHdpbGwgZW1pdCBhIHN0YWxsZWQKICAgICAgICAgICAgIC8vIGV2ZW50Lgog
ICAgICAgICAgICAgR1NUX0VSUk9SKCJEZWNvZGUgZXJyb3IsIGxldCB0aGUgTWVkaWEgZWxlbWVu
dCBlbWl0IGEgc3RhbGxlZCBldmVudC4iKTsKICAgICAgICAgICAgIG1fbG9hZGluZ1N0YWxsZWQg
PSB0cnVlOwpAQCAtMTQxOCwxMTQzICsyMzg0LDE2MzggQEAgdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAg
R1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOwogICAgICAgICBnc3RfbWVz
c2FnZV9wYXJzZV9zdHJlYW1zX3NlbGVjdGVkKG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91dFB0cigp
KTsKIAotICAgICAgICBpZiAoIWNvbGxlY3Rpb24pCi0gICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgaWYgKCFjb2xsZWN0aW9uKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbV9zdHJl
YW1Db2xsZWN0aW9uLnN3YXAoY29sbGVjdGlvbik7CisgICAgICAgIG1fY3VycmVudEF1ZGlvU3Ry
ZWFtSWQgPSAiIjsKKyAgICAgICAgbV9jdXJyZW50VmlkZW9TdHJlYW1JZCA9ICIiOworICAgICAg
ICBtX2N1cnJlbnRUZXh0U3RyZWFtSWQgPSAiIjsKKworICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplKG1lc3NhZ2UpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIEdS
ZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0gPSBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dl
dF9zdHJlYW0obWVzc2FnZSwgaSk7CisgICAgICAgICAgICBpZiAoIXN0cmVhbSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgR3N0U3RyZWFtVHlwZSB0eXBlID0gZ3N0
X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtLmdldCgpKTsKKyAgICAgICAgICAgIFN0cmlu
ZyBzdHJlYW1JZChnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7CisKKyAg
ICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNlbGVjdGluZyAlcyB0cmFj
ayB3aXRoIElEOiAlcyIsIGdzdF9zdHJlYW1fdHlwZV9nZXRfbmFtZSh0eXBlKSwgc3RyZWFtSWQu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAvLyBQbGF5YmluMyBjYW4gc2VuZCBtb3JlIHRo
YW4gb25lIHNlbGVjdGVkIHN0cmVhbSBvZiB0aGUgc2FtZSB0eXBlCisgICAgICAgICAgICAvLyBi
dXQgdGhlcmUncyBubyBwcmlvcml0eSBvciBvcmRlcmluZyBzeXN0ZW0gaW4gcGxhY2UsIHNvIHdl
IGFzc3VtZQorICAgICAgICAgICAgLy8gdGhlIHNlbGVjdGVkIHN0cmVhbSBpcyB0aGUgbGFzdCBv
bmUgYXMgcmVwb3J0ZWQgYnkgcGxheWJpbjMuCisgICAgICAgICAgICBpZiAodHlwZSAmIEdTVF9T
VFJFQU1fVFlQRV9BVURJTykgeworICAgICAgICAgICAgICAgIG1fY3VycmVudEF1ZGlvU3RyZWFt
SWQgPSBzdHJlYW1JZDsKKyAgICAgICAgICAgICAgICBhdXRvIHRyYWNrID0gbV9hdWRpb1RyYWNr
cy5nZXQobV9jdXJyZW50QXVkaW9TdHJlYW1JZCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHRy
YWNrKTsKKyAgICAgICAgICAgICAgICB0cmFjay0+bWFya0FzQWN0aXZlKCk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVklERU8pIHsKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkID0gc3RyZWFtSWQ7CisgICAgICAgICAgICAgICAg
YXV0byB0cmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KG1fY3VycmVudFZpZGVvU3RyZWFtSWQpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVCh0cmFjayk7CisgICAgICAgICAgICAgICAgdHJhY2stPm1h
cmtBc0FjdGl2ZSgpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9U
WVBFX1RFWFQpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50VGV4dFN0cmVhbUlkID0gc3RyZWFt
SWQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25v
d24gc3RyZWFtIHR5cGUgd2l0aCBzdHJlYW0taWQgJXMiLCBzdHJlYW1JZC51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVW5oYW5kbGVkIEdTdHJlYW1lciBtZXNz
YWdlIHR5cGU6ICVzIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1lc3NhZ2UpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJv
Y2Vzc0J1ZmZlcmluZ1N0YXRzKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgR3N0QnVmZmVy
aW5nTW9kZSBtb2RlOworICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZ19zdGF0cyhtZXNz
YWdlLCAmbW9kZSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICBpbnQgcGVyY2Vu
dGFnZTsKKyAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcobWVzc2FnZSwgJnBlcmNlbnRh
Z2UpOworCisgICAgdXBkYXRlQnVmZmVyaW5nU3RhdHVzKG1vZGUsIHBlcmNlbnRhZ2UpOworfQor
Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlTWF4VGltZUxvYWRlZChk
b3VibGUgcGVyY2VudGFnZSkKK3sKKyAgICBNZWRpYVRpbWUgbWVkaWFEdXJhdGlvbiA9IGR1cmF0
aW9uTWVkaWFUaW1lKCk7CisgICAgaWYgKCFtZWRpYUR1cmF0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX21heFRpbWVMb2FkZWQgPSBNZWRpYVRpbWUocGVyY2VudGFnZSAqIHN0YXRpY19j
YXN0PGRvdWJsZT4odG9Hc3RVbnNpZ25lZDY0VGltZShtZWRpYUR1cmF0aW9uKSkgLyAxMDAsIEdT
VF9TRUNPTkQpOworICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmdd
IFVwZGF0ZWQgbWF4VGltZUxvYWRlZDogJXMiLCB0b1N0cmluZyhtX21heFRpbWVMb2FkZWQpLnV0
ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBk
YXRlQnVmZmVyaW5nU3RhdHVzKEdzdEJ1ZmZlcmluZ01vZGUgbW9kZSwgZG91YmxlIHBlcmNlbnRh
Z2UpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gbW9k
ZTogJXMsIHN0YXR1czogJWYlJSIsIGVudW1Ub1N0cmluZyhHU1RfVFlQRV9CVUZGRVJJTkdfTU9E
RSwgbW9kZSkuZGF0YSgpLCBwZXJjZW50YWdlKTsKKworICAgIG1fZG93bmxvYWRGaW5pc2hlZCA9
IHBlcmNlbnRhZ2UgPT0gMTAwOworICAgIG1fYnVmZmVyaW5nID0gIW1fZG93bmxvYWRGaW5pc2hl
ZDsKKworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgR1NUX0JVRkZFUklOR19TVFJFQU06
IHsKKyAgICAgICAgdXBkYXRlTWF4VGltZUxvYWRlZChwZXJjZW50YWdlKTsKKworICAgICAgICBt
X2J1ZmZlcmluZ1BlcmNlbnRhZ2UgPSBwZXJjZW50YWdlOworICAgICAgICBpZiAobV9kb3dubG9h
ZEZpbmlzaGVkKQorICAgICAgICAgICAgdXBkYXRlU3RhdGVzKCk7CisKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgR1NUX0JVRkZFUklOR19ET1dOTE9BRDogeworICAgICAgICB1cGRh
dGVNYXhUaW1lTG9hZGVkKHBlcmNlbnRhZ2UpOworCisgICAgICAgIC8vIE1lZGlhIGlzIG5vdyBm
dWxseSBsb2FkZWQuIEl0IHdpbGwgcGxheSBldmVuIGlmIG5ldHdvcmsgY29ubmVjdGlvbiBpcwor
ICAgICAgICAvLyBjdXQuIEJ1ZmZlcmluZyBpcyBkb25lLCByZW1vdmUgdGhlIGZpbGwgc291cmNl
IGZyb20gdGhlIG1haW4gbG9vcC4KKyAgICAgICAgaWYgKG1fZG93bmxvYWRGaW5pc2hlZCkKKyAg
ICAgICAgICAgIG1fZmlsbFRpbWVyLnN0b3AoKTsKKworICAgICAgICB1cGRhdGVTdGF0ZXMoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIlVuaGFuZGxlZCBidWZmZXJpbmcgbW9kZTogJXMiLCBlbnVtVG9T
dHJpbmcoR1NUX1RZUEVfQlVGRkVSSU5HX01PREUsIG1vZGUpLmRhdGEoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYgVVNFKEdTVFJFQU1F
Ul9NUEVHVFMpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc01wZWdU
c1NlY3Rpb24oR3N0TXBlZ3RzU2VjdGlvbiogc2VjdGlvbikKK3sKKyAgICBBU1NFUlQoc2VjdGlv
bik7CisKKyAgICBpZiAoc2VjdGlvbi0+c2VjdGlvbl90eXBlID09IEdTVF9NUEVHVFNfU0VDVElP
Tl9QTVQpIHsKKyAgICAgICAgY29uc3QgR3N0TXBlZ3RzUE1UKiBwbXQgPSBnc3RfbXBlZ3RzX3Nl
Y3Rpb25fZ2V0X3BtdChzZWN0aW9uKTsKKyAgICAgICAgbV9tZXRhZGF0YVRyYWNrcy5jbGVhcigp
OworICAgICAgICBmb3IgKGd1aW50IGkgPSAwOyBpIDwgcG10LT5zdHJlYW1zLT5sZW47ICsraSkg
eworICAgICAgICAgICAgY29uc3QgR3N0TXBlZ3RzUE1UU3RyZWFtKiBzdHJlYW0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBHc3RNcGVndHNQTVRTdHJlYW0qPihnX3B0cl9hcnJheV9pbmRleChwbXQtPnN0
cmVhbXMsIGkpKTsKKyAgICAgICAgICAgIGlmIChzdHJlYW0tPnN0cmVhbV90eXBlID09IDB4MDUg
fHwgc3RyZWFtLT5zdHJlYW1fdHlwZSA+PSAweDgwKSB7CisgICAgICAgICAgICAgICAgQXRvbVN0
cmluZyBwaWQgPSBTdHJpbmc6Om51bWJlcihzdHJlYW0tPnBpZCk7CisgICAgICAgICAgICAgICAg
YXV0byB0cmFjayA9IEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3Jl
YXRlKAorICAgICAgICAgICAgICAgICAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpNZXRhZGF0
YSwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6RGF0YSwgcGlkKTsKKworICAgICAgICAgICAgICAg
IC8vIDQuNy4xMC4xMi4yIFNvdXJjaW5nIGluLWJhbmQgdGV4dCB0cmFja3MKKyAgICAgICAgICAg
ICAgICAvLyBJZiB0aGUgbmV3IHRleHQgdHJhY2sncyBraW5kIGlzIG1ldGFkYXRhLCB0aGVuIHNl
dCB0aGUgdGV4dCB0cmFjayBpbi1iYW5kIG1ldGFkYXRhIHRyYWNrIGRpc3BhdGNoCisgICAgICAg
ICAgICAgICAgLy8gdHlwZSBhcyBmb2xsb3dzLCBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgbWVk
aWEgcmVzb3VyY2U6CisgICAgICAgICAgICAgICAgLy8gTGV0IHN0cmVhbSB0eXBlIGJlIHRoZSB2
YWx1ZSBvZiB0aGUgInN0cmVhbV90eXBlIiBmaWVsZCBkZXNjcmliaW5nIHRoZSB0ZXh0IHRyYWNr
J3MgdHlwZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBmaWxlJ3MgcHJvZ3JhbSBtYXAgc2Vj
dGlvbiwgaW50ZXJwcmV0ZWQgYXMgYW4gOC1iaXQgdW5zaWduZWQgaW50ZWdlci4gTGV0IGxlbmd0
aCBiZSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgICAgICAvLyB0aGUgIkVTX2luZm9fbGVuZ3Ro
IiBmaWVsZCBmb3IgdGhlIHRyYWNrIGluIHRoZSBzYW1lIHBhcnQgb2YgdGhlIHByb2dyYW0gbWFw
IHNlY3Rpb24sIGludGVycHJldGVkCisgICAgICAgICAgICAgICAgLy8gYXMgYW4gaW50ZWdlciBh
cyBkZWZpbmVkIGJ5IHRoZSBNUEVHLTIgc3BlY2lmaWNhdGlvbi4gTGV0IGRlc2NyaXB0b3IgYnl0
ZXMgYmUgdGhlIGxlbmd0aCBieXRlcworICAgICAgICAgICAgICAgIC8vIGZvbGxvd2luZyB0aGUg
IkVTX2luZm9fbGVuZ3RoIiBmaWVsZC4gVGhlIHRleHQgdHJhY2sgaW4tYmFuZCBtZXRhZGF0YSB0
cmFjayBkaXNwYXRjaCB0eXBlIG11c3QgYmUKKyAgICAgICAgICAgICAgICAvLyBzZXQgdG8gdGhl
IGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmVhbSB0eXBlIGJ5dGUgYW5kIHRoZSB6ZXJvIG9yIG1v
cmUgZGVzY3JpcHRvciBieXRlcyBieXRlcywKKyAgICAgICAgICAgICAgICAvLyBleHByZXNzZWQg
aW4gaGV4YWRlY2ltYWwgdXNpbmcgdXBwZXJjYXNlIEFTQ0lJIGhleCBkaWdpdHMuCisgICAgICAg
ICAgICAgICAgU3RyaW5nIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGU7CisgICAgICAg
ICAgICAgICAgYXBwZW5kVW5zaWduZWRBc0hleEZpeGVkU2l6ZShzdHJlYW0tPnN0cmVhbV90eXBl
LCBpbmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlLCAyKTsKKyAgICAgICAgICAgICAgICBm
b3IgKGd1aW50IGogPSAwOyBqIDwgc3RyZWFtLT5kZXNjcmlwdG9ycy0+bGVuOyArK2opIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgR3N0TXBlZ3RzRGVzY3JpcHRvciogZGVzY3JpcHRvciA9
IHN0YXRpY19jYXN0PGNvbnN0IEdzdE1wZWd0c0Rlc2NyaXB0b3IqPihnX3B0cl9hcnJheV9pbmRl
eChzdHJlYW0tPmRlc2NyaXB0b3JzLCBqKSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoZ3Vp
bnQgayA9IDA7IGsgPCBkZXNjcmlwdG9yLT5sZW5ndGg7ICsraykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZEJ5dGVBc0hleChkZXNjcmlwdG9yLT5kYXRhW2tdLCBpbmJhbmRNZXRhZGF0
YVRyYWNrRGlzcGF0Y2hUeXBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
dHJhY2stPnNldEluQmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUoaW5iYW5kTWV0YWRhdGFU
cmFja0Rpc3BhdGNoVHlwZSk7CisKKyAgICAgICAgICAgICAgICBtX21ldGFkYXRhVHJhY2tzLmFk
ZChwaWQsIHRyYWNrKTsKKyAgICAgICAgICAgICAgICBtX3BsYXllci0+YWRkVGV4dFRyYWNrKCp0
cmFjayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBB
dG9tU3RyaW5nIHBpZCA9IFN0cmluZzo6bnVtYmVyKHNlY3Rpb24tPnBpZCk7CisgICAgICAgIFJl
ZlB0cjxJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gbV9t
ZXRhZGF0YVRyYWNrcy5nZXQocGlkKTsKKyAgICAgICAgaWYgKCF0cmFjaykKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBHUmVmUHRyPEdCeXRlcz4gZGF0YSA9IGdzdF9tcGVndHNfc2Vj
dGlvbl9nZXRfZGF0YShzZWN0aW9uKTsKKyAgICAgICAgZ3NpemUgc2l6ZTsKKyAgICAgICAgY29u
c3Qgdm9pZCogYnl0ZXMgPSBnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksICZzaXplKTsKKwor
ICAgICAgICB0cmFjay0+YWRkRGF0YUN1ZShjdXJyZW50TWVkaWFUaW1lKCksIGN1cnJlbnRNZWRp
YVRpbWUoKSwgYnl0ZXMsIHNpemUpOworICAgIH0KK30KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NUYWJs
ZU9mQ29udGVudHMoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBpZiAobV9jaGFwdGVyc1Ry
YWNrKQorICAgICAgICBtX3BsYXllci0+cmVtb3ZlVGV4dFRyYWNrKCptX2NoYXB0ZXJzVHJhY2sp
OworCisgICAgbV9jaGFwdGVyc1RyYWNrID0gSW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRl
R1N0cmVhbWVyOjpjcmVhdGUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6Q2hhcHRlcnMsIEluYmFu
ZFRleHRUcmFja1ByaXZhdGU6OkdlbmVyaWMpOworICAgIG1fcGxheWVyLT5hZGRUZXh0VHJhY2so
Km1fY2hhcHRlcnNUcmFjayk7CisKKyAgICBHUmVmUHRyPEdzdFRvYz4gdG9jOworICAgIGdib29s
ZWFuIHVwZGF0ZWQ7CisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfdG9jKG1lc3NhZ2UsICZ0b2Mub3V0
UHRyKCksICZ1cGRhdGVkKTsKKyAgICBBU1NFUlQodG9jKTsKKworICAgIGZvciAoR0xpc3QqIGkg
PSBnc3RfdG9jX2dldF9lbnRyaWVzKHRvYy5nZXQoKSk7IGk7IGkgPSBpLT5uZXh0KQorICAgICAg
ICBwcm9jZXNzVGFibGVPZkNvbnRlbnRzRW50cnkoc3RhdGljX2Nhc3Q8R3N0VG9jRW50cnkqPihp
LT5kYXRhKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNz
VGFibGVPZkNvbnRlbnRzRW50cnkoR3N0VG9jRW50cnkqIGVudHJ5KQoreworICAgIEFTU0VSVChl
bnRyeSk7CisKKyAgICBhdXRvIGN1ZSA9IEdlbmVyaWNDdWVEYXRhOjpjcmVhdGUoKTsKKworICAg
IGdpbnQ2NCBzdGFydCA9IC0xLCBzdG9wID0gLTE7CisgICAgZ3N0X3RvY19lbnRyeV9nZXRfc3Rh
cnRfc3RvcF90aW1lcyhlbnRyeSwgJnN0YXJ0LCAmc3RvcCk7CisgICAgaWYgKHN0YXJ0ICE9IC0x
KQorICAgICAgICBjdWUtPnNldFN0YXJ0VGltZShNZWRpYVRpbWUoc3RhcnQsIEdTVF9TRUNPTkQp
KTsKKyAgICBpZiAoc3RvcCAhPSAtMSkKKyAgICAgICAgY3VlLT5zZXRFbmRUaW1lKE1lZGlhVGlt
ZShzdG9wLCBHU1RfU0VDT05EKSk7CisKKyAgICBHc3RUYWdMaXN0KiB0YWdzID0gZ3N0X3RvY19l
bnRyeV9nZXRfdGFncyhlbnRyeSk7CisgICAgaWYgKHRhZ3MpIHsKKyAgICAgICAgZ2NoYXIqIHRp
dGxlID0gbnVsbHB0cjsKKyAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcodGFncywgR1NU
X1RBR19USVRMRSwgJnRpdGxlKTsKKyAgICAgICAgaWYgKHRpdGxlKSB7CisgICAgICAgICAgICBj
dWUtPnNldENvbnRlbnQodGl0bGUpOworICAgICAgICAgICAgZ19mcmVlKHRpdGxlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIG1fY2hhcHRlcnNUcmFjay0+YWRkR2VuZXJpY0N1ZShjdWUpOwor
CisgICAgZm9yIChHTGlzdCogaSA9IGdzdF90b2NfZW50cnlfZ2V0X3N1Yl9lbnRyaWVzKGVudHJ5
KTsgaTsgaSA9IGktPm5leHQpCisgICAgICAgIHByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeShz
dGF0aWNfY2FzdDxHc3RUb2NFbnRyeSo+KGktPmRhdGEpKTsKK30KKwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZEF1ZGlvVHJhY2tzKFZlY3RvcjxTdHJpbmc+
IHZhbGlkVHJhY2tJZHMpCit7CisgICAgbV9hdWRpb1RyYWNrcy5yZW1vdmVJZihbdmFsaWRUcmFj
a0lkc10oYXV0byYga2V5QW5kVmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICF2YWxpZFRyYWNrSWRz
LmNvbnRhaW5zKGtleUFuZFZhbHVlLmtleSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRWaWRlb1RyYWNrcyhWZWN0b3I8U3RyaW5n
PiB2YWxpZFRyYWNrSWRzKQoreworICAgIG1fdmlkZW9UcmFja3MucmVtb3ZlSWYoW3ZhbGlkVHJh
Y2tJZHNdKGF1dG8mIGtleUFuZFZhbHVlKSB7CisgICAgICAgIHJldHVybiAhdmFsaWRUcmFja0lk
cy5jb250YWlucyhrZXlBbmRWYWx1ZS5rZXkpOworICAgIH0pOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJbnZhbGlkVGV4dFRyYWNrcyhWZWN0b3I8U3RyaW5n
PiB2YWxpZFRyYWNrSWRzKQoreworICAgIG1fdGV4dFRyYWNrcy5yZW1vdmVJZihbdmFsaWRUcmFj
a0lkc10oYXV0byYga2V5QW5kVmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICF2YWxpZFRyYWNrSWRz
LmNvbnRhaW5zKGtleUFuZFZhbHVlLmtleSk7CisgICAgfSk7Cit9CisjZW5kaWYKIAotICAgICAg
ICBtX3N0cmVhbUNvbGxlY3Rpb24uc3dhcChjb2xsZWN0aW9uKTsKLSAgICAgICAgbV9jdXJyZW50
QXVkaW9TdHJlYW1JZCA9ICIiOwotICAgICAgICBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkID0gIiI7
Ci0gICAgICAgIG1fY3VycmVudFRleHRTdHJlYW1JZCA9ICIiOwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNrKEdzdEJpbiog
YmluLCBHc3RFbGVtZW50KiBlbGVtZW50LCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBs
YXllcikKK3sKKyAgICBpZiAoZ19zdHJjbXAwKEdfT0JKRUNUX1RZUEVfTkFNRShlbGVtZW50KSwg
IkdzdERvd25sb2FkQnVmZmVyIikpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBnc3RfbWVzc2FnZV9zdHJlYW1zX3NlbGVjdGVkX2dldF9zaXplKG1lc3NhZ2Up
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW0gPSBnc3RfbWVzc2FnZV9zdHJlYW1zX3Nl
bGVjdGVkX2dldF9zdHJlYW0obWVzc2FnZSwgaSk7Ci0gICAgICAgICAgICBpZiAoIXN0cmVhbSkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICBwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIg
PSBlbGVtZW50OworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhiaW4s
IHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENhbGxi
YWNrKSwgcGxheWVyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoZWxlbWVudCwgIm5v
dGlmeTo6dGVtcC1sb2NhdGlvbiIsIEdfQ0FMTEJBQ0soZG93bmxvYWRCdWZmZXJGaWxlQ3JlYXRl
ZENhbGxiYWNrKSwgcGxheWVyKTsKIAotICAgICAgICAgICAgR3N0U3RyZWFtVHlwZSB0eXBlID0g
Z3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtLmdldCgpKTsKLSAgICAgICAgICAgIFN0
cmluZyBzdHJlYW1JZChnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7Cisg
ICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBvbGREb3dubG9hZFRlbXBsYXRlOworICAgIGdfb2JqZWN0
X2dldChlbGVtZW50LCAidGVtcC10ZW1wbGF0ZSIsICZvbGREb3dubG9hZFRlbXBsYXRlLm91dFB0
cigpLCBudWxscHRyKTsKIAotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiU2VsZWN0aW5nICVzIHRyYWNrIHdpdGggSUQ6ICVzIiwgZ3N0X3N0cmVhbV90eXBlX2dldF9u
YW1lKHR5cGUpLCBzdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIC8vIFBsYXli
aW4zIGNhbiBzZW5kIG1vcmUgdGhhbiBvbmUgc2VsZWN0ZWQgc3RyZWFtIG9mIHRoZSBzYW1lIHR5
cGUKLSAgICAgICAgICAgIC8vIGJ1dCB0aGVyZSdzIG5vIHByaW9yaXR5IG9yIG9yZGVyaW5nIHN5
c3RlbSBpbiBwbGFjZSwgc28gd2UgYXNzdW1lCi0gICAgICAgICAgICAvLyB0aGUgc2VsZWN0ZWQg
c3RyZWFtIGlzIHRoZSBsYXN0IG9uZSBhcyByZXBvcnRlZCBieSBwbGF5YmluMy4KLSAgICAgICAg
ICAgIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBFX0FVRElPKSB7Ci0gICAgICAgICAgICAgICAg
bV9jdXJyZW50QXVkaW9TdHJlYW1JZCA9IHN0cmVhbUlkOwotICAgICAgICAgICAgICAgIGF1dG8g
dHJhY2sgPSBtX2F1ZGlvVHJhY2tzLmdldChtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKTsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQodHJhY2spOwotICAgICAgICAgICAgICAgIHRyYWNrLT5tYXJrQXNB
Y3RpdmUoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9W
SURFTykgewotICAgICAgICAgICAgICAgIG1fY3VycmVudFZpZGVvU3RyZWFtSWQgPSBzdHJlYW1J
ZDsKLSAgICAgICAgICAgICAgICBhdXRvIHRyYWNrID0gbV92aWRlb1RyYWNrcy5nZXQobV9jdXJy
ZW50VmlkZW9TdHJlYW1JZCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHRyYWNrKTsKLSAgICAg
ICAgICAgICAgICB0cmFjay0+bWFya0FzQWN0aXZlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVEVYVCkKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRU
ZXh0U3RyZWFtSWQgPSBzdHJlYW1JZDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBHU1RfV0FSTklORygiVW5rbm93biBzdHJlYW0gdHlwZSB3aXRoIHN0cmVhbS1pZCAlcyIsIHN0
cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBkZWZhdWx0OgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJVbmhh
bmRsZWQgR1N0cmVhbWVyIG1lc3NhZ2UgdHlwZTogJXMiLCBHU1RfTUVTU0FHRV9UWVBFX05BTUUo
bWVzc2FnZSkpOwotICAgICAgICBicmVhazsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IG5ld0Rvd25s
b2FkVGVtcGxhdGUoZ19idWlsZF9maWxlbmFtZShHX0RJUl9TRVBBUkFUT1JfUywgInZhciIsICJ0
bXAiLCAiV2ViS2l0LU1lZGlhLVhYWFhYWCIsIG51bGxwdHIpKTsKKyAgICBnX29iamVjdF9zZXQo
ZWxlbWVudCwgInRlbXAtdGVtcGxhdGUiLCBuZXdEb3dubG9hZFRlbXBsYXRlLmdldCgpLCBudWxs
cHRyKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBsYXllci0+cGlwZWxpbmUoKSwgIlJlY29uZmln
dXJlZCBmaWxlIGRvd25sb2FkIHRlbXBsYXRlIGZyb20gJyVzJyB0byAnJXMnIiwgb2xkRG93bmxv
YWRUZW1wbGF0ZS5nZXQoKSwgbmV3RG93bmxvYWRUZW1wbGF0ZS5nZXQoKSk7CisKKyAgICBwbGF5
ZXItPnB1cmdlT2xkRG93bmxvYWRGaWxlcyhvbGREb3dubG9hZFRlbXBsYXRlLmdldCgpKTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvd25sb2FkQnVmZmVyRmlsZUNy
ZWF0ZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sKKyAg
ICBBU1NFUlQocGxheWVyLT5tX2Rvd25sb2FkQnVmZmVyKTsKKworICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIuZ2V0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KGRvd25sb2FkQnVmZmVyRmlsZUNyZWF0ZWRDYWxsYmFj
ayksIHBsYXllcik7CisKKyAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IGRvd25sb2FkRmlsZTsKKyAg
ICBnX29iamVjdF9nZXQocGxheWVyLT5tX2Rvd25sb2FkQnVmZmVyLmdldCgpLCAidGVtcC1sb2Nh
dGlvbiIsICZkb3dubG9hZEZpbGUub3V0UHRyKCksIG51bGxwdHIpOworICAgIHBsYXllci0+bV9k
b3dubG9hZEJ1ZmZlciA9IG51bGxwdHI7CisKKyAgICBpZiAoVU5MSUtFTFkoIUZpbGVTeXN0ZW06
OmRlbGV0ZUZpbGUoZG93bmxvYWRGaWxlLmdldCgpKSkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkco
IkNvdWxkbid0IHVubGluayBtZWRpYSB0ZW1wb3JhcnkgZmlsZSAlcyBhZnRlciBjcmVhdGlvbiIs
IGRvd25sb2FkRmlsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBHU1Rf
REVCVUdfT0JKRUNUKHBsYXllci0+cGlwZWxpbmUoKSwgIlVubGlua2VkIG1lZGlhIHRlbXBvcmFy
eSBmaWxlICVzIGFmdGVyIGNyZWF0aW9uIiwgZG93bmxvYWRGaWxlLmdldCgpKTsKIH0KIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NCdWZmZXJpbmdTdGF0cyhHc3RN
ZXNzYWdlKiBtZXNzYWdlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdl
T2xkRG93bmxvYWRGaWxlcyhjb25zdCBjaGFyKiBkb3dubG9hZEZpbGVUZW1wbGF0ZSkKIHsKLSAg
ICBHc3RCdWZmZXJpbmdNb2RlIG1vZGU7Ci0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5n
X3N0YXRzKG1lc3NhZ2UsICZtb2RlLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBp
ZiAoIWRvd25sb2FkRmlsZVRlbXBsYXRlKQorICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgcGVy
Y2VudGFnZTsKLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJpbmcobWVzc2FnZSwgJnBlcmNl
bnRhZ2UpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gdGVtcGxhdGVQYXRoKGdfcGF0aF9nZXRfZGly
bmFtZShkb3dubG9hZEZpbGVUZW1wbGF0ZSkpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gdGVtcGxh
dGVGaWxlKGdfcGF0aF9nZXRfYmFzZW5hbWUoZG93bmxvYWRGaWxlVGVtcGxhdGUpKTsKKyAgICBT
dHJpbmcgdGVtcGxhdGVQYXR0ZXJuID0gU3RyaW5nKHRlbXBsYXRlRmlsZS5nZXQoKSkucmVwbGFj
ZSgiWCIsICI/Iik7CiAKLSAgICB1cGRhdGVCdWZmZXJpbmdTdGF0dXMobW9kZSwgcGVyY2VudGFn
ZSk7CisgICAgZm9yIChhdXRvJiBmaWxlUGF0aCA6IEZpbGVTeXN0ZW06Omxpc3REaXJlY3Rvcnko
dGVtcGxhdGVQYXRoLmdldCgpLCB0ZW1wbGF0ZVBhdHRlcm4pKSB7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShmaWxlUGF0aCkpKSB7CisgICAgICAgICAgICBH
U1RfV0FSTklORygiQ291bGRuJ3QgdW5saW5rIGxlZ2FjeSBtZWRpYSB0ZW1wb3JhcnkgZmlsZTog
JXMiLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgR1NUX1RSQUNFKCJVbmxpbmtlZCBsZWdhY3kgbWVkaWEgdGVtcG9y
YXJ5IGZpbGU6ICVzIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgfQogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlTWF4VGltZUxvYWRlZChkb3VibGUg
cGVyY2VudGFnZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphc3luY1N0YXRl
Q2hhbmdlRG9uZSgpCiB7Ci0gICAgTWVkaWFUaW1lIG1lZGlhRHVyYXRpb24gPSBkdXJhdGlvbk1l
ZGlhVGltZSgpOwotICAgIGlmICghbWVkaWFEdXJhdGlvbikKKyAgICBpZiAoIW1fcGlwZWxpbmUg
fHwgbV9lcnJvck9jY3VyZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbWF4VGltZUxvYWRl
ZCA9IE1lZGlhVGltZShwZXJjZW50YWdlICogc3RhdGljX2Nhc3Q8ZG91YmxlPih0b0dzdFVuc2ln
bmVkNjRUaW1lKG1lZGlhRHVyYXRpb24pKSAvIDEwMCwgR1NUX1NFQ09ORCk7Ci0gICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gVXBkYXRlZCBtYXhUaW1lTG9hZGVk
OiAlcyIsIHRvU3RyaW5nKG1fbWF4VGltZUxvYWRlZCkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYg
KG1fc2Vla2luZykgeworICAgICAgICBpZiAobV9zZWVrSXNQZW5kaW5nKQorICAgICAgICAgICAg
dXBkYXRlU3RhdGVzKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIHNlZWtlZCB0byAlcyIsIHRvU3RyaW5nKG1fc2Vla1Rp
bWUpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAg
ICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOworICAg
ICAgICAgICAgaWYgKG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrICE9IG1fc2Vla1RpbWUgJiYgbV90
aW1lT2ZPdmVybGFwcGluZ1NlZWsuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgc2Vlayht
X3RpbWVPZk92ZXJsYXBwaW5nU2Vlayk7CisgICAgICAgICAgICAgICAgbV90aW1lT2ZPdmVybGFw
cGluZ1NlZWsgPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV90aW1lT2ZPdmVybGFwcGluZ1NlZWsg
PSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBwaXBlbGlu
ZSBjYW4gc3RpbGwgaGF2ZSBhIHBlbmRpbmcgc3RhdGUuIEluIHRoaXMgY2FzZSBhIHBvc2l0aW9u
IHF1ZXJ5IHdpbGwgZmFpbC4KKyAgICAgICAgICAgIC8vIFJpZ2h0IG5vdyB3ZSBjYW4gdXNlIG1f
c2Vla1RpbWUgYXMgYSBmYWxsYmFjay4KKyAgICAgICAgICAgIG1fY2FuRmFsbEJhY2tUb0xhc3RG
aW5pc2hlZFNlZWtQb3NpdGlvbiA9IHRydWU7CisgICAgICAgICAgICB0aW1lQ2hhbmdlZCgpOwor
ICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlQnVmZmVyaW5nU3RhdHVzKEdzdEJ1
ZmZlcmluZ01vZGUgbW9kZSwgZG91YmxlIHBlcmNlbnRhZ2UpCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKCkKIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHBp
cGVsaW5lKCksICJbQnVmZmVyaW5nXSBtb2RlOiAlcywgc3RhdHVzOiAlZiUlIiwgZW51bVRvU3Ry
aW5nKEdTVF9UWVBFX0JVRkZFUklOR19NT0RFLCBtb2RlKS5kYXRhKCksIHBlcmNlbnRhZ2UpOwor
ICAgIGlmICghbV9waXBlbGluZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kb3dubG9hZEZp
bmlzaGVkID0gcGVyY2VudGFnZSA9PSAxMDA7Ci0gICAgbV9idWZmZXJpbmcgPSAhbV9kb3dubG9h
ZEZpbmlzaGVkOworICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHU1RfQlVGRkVSSU5HX1NUUkVBTTogewotICAg
ICAgICB1cGRhdGVNYXhUaW1lTG9hZGVkKHBlcmNlbnRhZ2UpOworICAgIE1lZGlhUGxheWVyOjpO
ZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9uZXR3b3JrU3RhdGU7CisgICAgTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKKyAgICBHc3RT
dGF0ZSBwZW5kaW5nOworICAgIEdzdFN0YXRlIHN0YXRlOworICAgIGJvb2wgc3RhdGVSZWFsbHlD
aGFuZ2VkID0gZmFsc2U7CiAKLSAgICAgICAgbV9idWZmZXJpbmdQZXJjZW50YWdlID0gcGVyY2Vu
dGFnZTsKLSAgICAgICAgaWYgKG1fZG93bmxvYWRGaW5pc2hlZCkKLSAgICAgICAgICAgIHVwZGF0
ZVN0YXRlcygpOworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJnBlbmRpbmcsIDI1
MCAqIEdTVF9OU0VDT05EKTsKKyAgICBpZiAoc3RhdGUgIT0gbV9jdXJyZW50U3RhdGUpIHsKKyAg
ICAgICAgbV9vbGRTdGF0ZSA9IG1fY3VycmVudFN0YXRlOworICAgICAgICBtX2N1cnJlbnRTdGF0
ZSA9IHN0YXRlOworICAgICAgICBzdGF0ZVJlYWxseUNoYW5nZWQgPSB0cnVlOworICAgIH0KKwor
ICAgIGJvb2wgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IGZhbHNlOworICAgIHN3aXRjaCAo
Z2V0U3RhdGVSZXN1bHQpIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzogewor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTdGF0ZTogJXMsIHBlbmRpbmc6
ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisKKyAgICAgICAgLy8gRG8gbm90aGluZyBp
ZiBvbiBFT1MgYW5kIHN0YXRlIGNoYW5nZWQgdG8gUkVBRFkgdG8gYXZvaWQgcmVjcmVhdGluZyB0
aGUgcGxheWVyCisgICAgICAgIC8vIG9uIEhUTUxNZWRpYUVsZW1lbnQgYW5kIHByb3Blcmx5IGdl
bmVyYXRlIHRoZSB2aWRlbyAnZW5kZWQnIGV2ZW50LgorICAgICAgICBpZiAobV9pc0VuZFJlYWNo
ZWQgJiYgbV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gbV9jdXJyZW50U3RhdGUgPD0gR1NUX1NU
QVRFX1JFQURZOworCisgICAgICAgIGJvb2wgZGlkQnVmZmVyaW5nID0gbV9idWZmZXJpbmc7CisK
KyAgICAgICAgLy8gVXBkYXRlIHJlYWR5IGFuZCBuZXR3b3JrIHN0YXRlcy4KKyAgICAgICAgc3dp
dGNoIChtX2N1cnJlbnRTdGF0ZSkgeworICAgICAgICBjYXNlIEdTVF9TVEFURV9OVUxMOgorICAg
ICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RW1wdHk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHU1RfU1RBVEVfUkVBRFk6CisgICAgICAgICAgICBtX3JlYWR5
U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRhOworICAgICAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6RW1wdHk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBHU1RfU1RBVEVfUEFVU0VEOgorICAgICAgICBjYXNlIEdTVF9TVEFURV9QTEFZSU5HOgor
ICAgICAgICAgICAgaWYgKG1fYnVmZmVyaW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYnVm
ZmVyaW5nUGVyY2VudGFnZSA9PSAxMDApIHsKKyAgICAgICAgICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gQ29tcGxldGUuIik7CisgICAgICAgICAg
ICAgICAgICAgIG1fYnVmZmVyaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1fcmVh
ZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBtX2Rvd25sb2FkRmluaXNoZWQgPyBNZWRpYVBsYXllcjo6SWRs
ZSA6IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERh
dGE7CisgICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6Okxv
YWRpbmc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX2Rvd25s
b2FkRmluaXNoZWQpIHsKKyAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXll
cjo6SGF2ZUVub3VnaERhdGE7CisgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRp
YVBsYXllcjo6TG9hZGVkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURhdGE7CisgICAgICAgICAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gU3luYyBzdGF0ZXMgd2hlcmUgbmVlZGVkLgorICAgICAgICBpZiAobV9jdXJyZW50U3Rh
dGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAgaWYgKCFtX3ZvbHVtZUFuZE11
dGVJbml0aWFsaXplZCkgeworICAgICAgICAgICAgICAgIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hh
bmdlKCk7CisgICAgICAgICAgICAgICAgbm90aWZ5UGxheWVyT2ZNdXRlKCk7CisgICAgICAgICAg
ICAgICAgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoZGlkQnVmZmVyaW5nICYmICFtX2J1ZmZlcmluZyAmJiAhbV9wYXVz
ZWQgJiYgbV9wbGF5YmFja1JhdGUpIHsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBSZXN0YXJ0aW5nIHBsYXliYWNrLiIpOworICAgICAg
ICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9Q
TEFZSU5HKSB7CisgICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworCisgICAgICAgICAgICBp
ZiAoKG1fYnVmZmVyaW5nICYmICFpc0xpdmVTdHJlYW0oKSkgfHwgIW1fcGxheWJhY2tSYXRlKSB7
CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmlu
Z10gUGF1c2luZyBzdHJlYW0gZm9yIGJ1ZmZlcmluZy4iKTsKKyAgICAgICAgICAgICAgICBjaGFu
Z2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKKworICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJPbGQgc3RhdGU6ICVzLCBuZXcgc3RhdGU6ICVzIChyZXF1
ZXN0ZWQ6ICVzKSIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fb2xkU3RhdGUpLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRl
X2dldF9uYW1lKG1fcmVxdWVzdGVkU3RhdGUpKTsKKyAgICAgICAgaWYgKG1fcmVxdWVzdGVkU3Rh
dGUgPT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFV
U0VEKSB7CisgICAgICAgICAgICBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKKyAg
ICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiUmVxdWVzdGVkIHN0YXRlIGNo
YW5nZSB0byAlcyB3YXMgY29tcGxldGVkIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9j
dXJyZW50U3RhdGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEVtaXQgcGxheSBzdGF0ZSBj
aGFuZ2Ugbm90aWZpY2F0aW9uIG9ubHkgd2hlbiBnb2luZyB0byBQTEFZSU5HIHNvIHRoYXQKKyAg
ICAgICAgLy8gdGhlIG1lZGlhIGVsZW1lbnQgZ2V0cyBhIGNoYW5jZSB0byBlbmFibGUgaXRzIHBh
Z2Ugc2xlZXAgZGlzYWJsZXIuCisgICAgICAgIC8vIEVtaXR0aW5nIHRoaXMgbm90aWZpY2F0aW9u
IGluIG1vcmUgY2FzZXMgdHJpZ2dlcnMgdW53YW50ZWQgY29kZSBwYXRocworICAgICAgICAvLyBh
bmQgdGVzdCB0aW1lb3V0cy4KKyAgICAgICAgaWYgKHN0YXRlUmVhbGx5Q2hhbmdlZCAmJiAobV9v
bGRTdGF0ZSAhPSBtX2N1cnJlbnRTdGF0ZSkgJiYgKG1fb2xkU3RhdGUgPT0gR1NUX1NUQVRFX1BB
VVNFRCAmJiBtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykpIHsKKyAgICAgICAg
ICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiUGxheWJhY2sgc3RhdGUgY2hhbmdlZCBm
cm9tICVzIHRvICVzLiBOb3RpZnlpbmcgdGhlIG1lZGlhIHBsYXllciBjbGllbnQiLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShtX29sZFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25h
bWUobV9jdXJyZW50U3RhdGUpKTsKKyAgICAgICAgICAgIHNob3VsZFVwZGF0ZVBsYXliYWNrU3Rh
dGUgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
R1NUX1NUQVRFX0NIQU5HRV9BU1lOQzoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiQXN5bmM6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9n
ZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRp
bmcpKTsKKyAgICAgICAgLy8gQ2hhbmdlIGluIHByb2dyZXNzLgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRToKKyAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChwaXBlbGluZSgpLCAiRmFpbHVyZTogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUocGVuZGluZykpOworICAgICAgICAvLyBDaGFuZ2UgZmFpbGVkCisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiTm8gcHJlcm9sbDogU3RhdGU6ICVzLCBwZW5kaW5nOiAl
cyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1l
bnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworCisgICAgICAgIC8vIExpdmUgcGlwZWxpbmVz
IGdvIGluIFBBVVNFRCB3aXRob3V0IHByZXJvbGxpbmcuCisgICAgICAgIG1faXNTdHJlYW1pbmcg
PSB0cnVlOworICAgICAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsKIAotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBHU1RfQlVGRkVSSU5HX0RPV05MT0FEOiB7Ci0gICAg
ICAgIHVwZGF0ZU1heFRpbWVMb2FkZWQocGVyY2VudGFnZSk7CisgICAgICAgIGlmIChtX2N1cnJl
bnRTdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpCisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBN
ZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAgICAgIGVsc2UgaWYgKG1fY3VycmVudFN0YXRl
ID09IEdTVF9TVEFURV9QQVVTRUQpIHsKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICAgICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAg
ICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykKKyAg
ICAgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7CiAKLSAgICAgICAgLy8gTWVkaWEgaXMgbm93IGZ1
bGx5IGxvYWRlZC4gSXQgd2lsbCBwbGF5IGV2ZW4gaWYgbmV0d29yayBjb25uZWN0aW9uIGlzCi0g
ICAgICAgIC8vIGN1dC4gQnVmZmVyaW5nIGlzIGRvbmUsIHJlbW92ZSB0aGUgZmlsbCBzb3VyY2Ug
ZnJvbSB0aGUgbWFpbiBsb29wLgotICAgICAgICBpZiAobV9kb3dubG9hZEZpbmlzaGVkKQotICAg
ICAgICAgICAgbV9maWxsVGltZXIuc3RvcCgpOworICAgICAgICBpZiAoIW1fcGF1c2VkICYmIG1f
cGxheWJhY2tSYXRlKQorICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVf
UExBWUlORyk7CiAKLSAgICAgICAgdXBkYXRlU3RhdGVzKCk7CisgICAgICAgIG1fbmV0d29ya1N0
YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CiAgICAgICAgIGJyZWFrOwotICAgIH0KICAgICBk
ZWZhdWx0OgotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJVbmhhbmRsZWQg
YnVmZmVyaW5nIG1vZGU6ICVzIiwgZW51bVRvU3RyaW5nKEdTVF9UWVBFX0JVRkZFUklOR19NT0RF
LCBtb2RlKS5kYXRhKCkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJF
bHNlIDogJWQiLCBnZXRTdGF0ZVJlc3VsdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLX0KIAot
I2lmIEVOQUJMRShWSURFT19UUkFDSykgJiYgVVNFKEdTVFJFQU1FUl9NUEVHVFMpCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc01wZWdUc1NlY3Rpb24oR3N0TXBlZ3Rz
U2VjdGlvbiogc2VjdGlvbikKLXsKLSAgICBBU1NFUlQoc2VjdGlvbik7CisgICAgbV9yZXF1ZXN0
ZWRTdGF0ZSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7CiAKLSAgICBpZiAoc2VjdGlvbi0+c2Vj
dGlvbl90eXBlID09IEdTVF9NUEVHVFNfU0VDVElPTl9QTVQpIHsKLSAgICAgICAgY29uc3QgR3N0
TXBlZ3RzUE1UKiBwbXQgPSBnc3RfbXBlZ3RzX3NlY3Rpb25fZ2V0X3BtdChzZWN0aW9uKTsKLSAg
ICAgICAgbV9tZXRhZGF0YVRyYWNrcy5jbGVhcigpOwotICAgICAgICBmb3IgKGd1aW50IGkgPSAw
OyBpIDwgcG10LT5zdHJlYW1zLT5sZW47ICsraSkgewotICAgICAgICAgICAgY29uc3QgR3N0TXBl
Z3RzUE1UU3RyZWFtKiBzdHJlYW0gPSBzdGF0aWNfY2FzdDxjb25zdCBHc3RNcGVndHNQTVRTdHJl
YW0qPihnX3B0cl9hcnJheV9pbmRleChwbXQtPnN0cmVhbXMsIGkpKTsKLSAgICAgICAgICAgIGlm
IChzdHJlYW0tPnN0cmVhbV90eXBlID09IDB4MDUgfHwgc3RyZWFtLT5zdHJlYW1fdHlwZSA+PSAw
eDgwKSB7Ci0gICAgICAgICAgICAgICAgQXRvbVN0cmluZyBwaWQgPSBTdHJpbmc6Om51bWJlcihz
dHJlYW0tPnBpZCk7Ci0gICAgICAgICAgICAgICAgYXV0byB0cmFjayA9IEluYmFuZE1ldGFkYXRh
VGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlOjpNZXRhZGF0YSwgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6
RGF0YSwgcGlkKTsKKyAgICBpZiAoc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSkKKyAgICAgICAg
bV9wbGF5ZXItPnBsYXliYWNrU3RhdGVDaGFuZ2VkKCk7CiAKLSAgICAgICAgICAgICAgICAvLyA0
LjcuMTAuMTIuMiBTb3VyY2luZyBpbi1iYW5kIHRleHQgdHJhY2tzCi0gICAgICAgICAgICAgICAg
Ly8gSWYgdGhlIG5ldyB0ZXh0IHRyYWNrJ3Mga2luZCBpcyBtZXRhZGF0YSwgdGhlbiBzZXQgdGhl
IHRleHQgdHJhY2sgaW4tYmFuZCBtZXRhZGF0YSB0cmFjayBkaXNwYXRjaAotICAgICAgICAgICAg
ICAgIC8vIHR5cGUgYXMgZm9sbG93cywgYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIG1lZGlhIHJl
c291cmNlOgotICAgICAgICAgICAgICAgIC8vIExldCBzdHJlYW0gdHlwZSBiZSB0aGUgdmFsdWUg
b2YgdGhlICJzdHJlYW1fdHlwZSIgZmllbGQgZGVzY3JpYmluZyB0aGUgdGV4dCB0cmFjaydzIHR5
cGUgaW4gdGhlCi0gICAgICAgICAgICAgICAgLy8gZmlsZSdzIHByb2dyYW0gbWFwIHNlY3Rpb24s
IGludGVycHJldGVkIGFzIGFuIDgtYml0IHVuc2lnbmVkIGludGVnZXIuIExldCBsZW5ndGggYmUg
dGhlIHZhbHVlIG9mCi0gICAgICAgICAgICAgICAgLy8gdGhlICJFU19pbmZvX2xlbmd0aCIgZmll
bGQgZm9yIHRoZSB0cmFjayBpbiB0aGUgc2FtZSBwYXJ0IG9mIHRoZSBwcm9ncmFtIG1hcCBzZWN0
aW9uLCBpbnRlcnByZXRlZAotICAgICAgICAgICAgICAgIC8vIGFzIGFuIGludGVnZXIgYXMgZGVm
aW5lZCBieSB0aGUgTVBFRy0yIHNwZWNpZmljYXRpb24uIExldCBkZXNjcmlwdG9yIGJ5dGVzIGJl
IHRoZSBsZW5ndGggYnl0ZXMKLSAgICAgICAgICAgICAgICAvLyBmb2xsb3dpbmcgdGhlICJFU19p
bmZvX2xlbmd0aCIgZmllbGQuIFRoZSB0ZXh0IHRyYWNrIGluLWJhbmQgbWV0YWRhdGEgdHJhY2sg
ZGlzcGF0Y2ggdHlwZSBtdXN0IGJlCi0gICAgICAgICAgICAgICAgLy8gc2V0IHRvIHRoZSBjb25j
YXRlbmF0aW9uIG9mIHRoZSBzdHJlYW0gdHlwZSBieXRlIGFuZCB0aGUgemVybyBvciBtb3JlIGRl
c2NyaXB0b3IgYnl0ZXMgYnl0ZXMsCi0gICAgICAgICAgICAgICAgLy8gZXhwcmVzc2VkIGluIGhl
eGFkZWNpbWFsIHVzaW5nIHVwcGVyY2FzZSBBU0NJSSBoZXggZGlnaXRzLgotICAgICAgICAgICAg
ICAgIFN0cmluZyBpbmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlOwotICAgICAgICAgICAg
ICAgIGFwcGVuZFVuc2lnbmVkQXNIZXhGaXhlZFNpemUoc3RyZWFtLT5zdHJlYW1fdHlwZSwgaW5i
YW5kTWV0YWRhdGFUcmFja0Rpc3BhdGNoVHlwZSwgMik7Ci0gICAgICAgICAgICAgICAgZm9yIChn
dWludCBqID0gMDsgaiA8IHN0cmVhbS0+ZGVzY3JpcHRvcnMtPmxlbjsgKytqKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEdzdE1wZWd0c0Rlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBzdGF0
aWNfY2FzdDxjb25zdCBHc3RNcGVndHNEZXNjcmlwdG9yKj4oZ19wdHJfYXJyYXlfaW5kZXgoc3Ry
ZWFtLT5kZXNjcmlwdG9ycywgaikpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGd1aW50IGsg
PSAwOyBrIDwgZGVzY3JpcHRvci0+bGVuZ3RoOyArK2spCi0gICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmRCeXRlQXNIZXgoZGVzY3JpcHRvci0+ZGF0YVtrXSwgaW5iYW5kTWV0YWRhdGFUcmFj
a0Rpc3BhdGNoVHlwZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRyYWNr
LT5zZXRJbkJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlKGluYmFuZE1ldGFkYXRhVHJhY2tE
aXNwYXRjaFR5cGUpOworICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUp
IHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTmV0d29yayBTdGF0ZSBD
aGFuZ2VkIGZyb20gJXMgdG8gJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhvbGROZXR3
b3JrU3RhdGUpLnV0ZjgoKS5kYXRhKCksIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG1fbmV0
d29ya1N0YXRlKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0
ZUNoYW5nZWQoKTsKKyAgICB9CisgICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBvbGRSZWFkeVN0YXRl
KSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlJlYWR5IFN0YXRlIENo
YW5nZWQgZnJvbSAlcyB0byAlcyIsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG9sZFJlYWR5
U3RhdGUpLnV0ZjgoKS5kYXRhKCksIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG1fcmVhZHlT
dGF0ZSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdl
ZCgpOworICAgIH0KIAotICAgICAgICAgICAgICAgIG1fbWV0YWRhdGFUcmFja3MuYWRkKHBpZCwg
dHJhY2spOwotICAgICAgICAgICAgICAgIG1fcGxheWVyLT5hZGRUZXh0VHJhY2soKnRyYWNrKTsK
KyAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTICYmIG1f
Y3VycmVudFN0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpIHsKKyAgICAgICAgdXBkYXRlUGxheWJh
Y2tSYXRlKCk7CisgICAgICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpIHsKKyAgICAgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBjb21taXR0aW5nIHBlbmRpbmcgc2Vl
ayB0byAlcyIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgbV9zZWVrSXNQZW5kaW5nID0gZmFsc2U7CisgICAgICAgICAgICBtX3NlZWtpbmcgPSBkb1Nl
ZWsobV9zZWVrVGltZSwgbV9wbGF5ZXItPnJhdGUoKSwgc3RhdGljX2Nhc3Q8R3N0U2Vla0ZsYWdz
PihHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NFRUtfRkxBR19BQ0NVUkFURSkpOworICAgICAg
ICAgICAgaWYgKCFtX3NlZWtpbmcpIHsKKyAgICAgICAgICAgICAgICBtX2NhY2hlZFBvc2l0aW9u
ID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgICAgICAgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBzZWVraW5nIHRvICVzIGZhaWxlZCIsIHRvU3RyaW5n
KG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgQXRvbVN0cmluZyBwaWQgPSBTdHJpbmc6Om51bWJlcihzZWN0
aW9uLT5waWQpOwotICAgICAgICBSZWZQdHI8SW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRl
R1N0cmVhbWVyPiB0cmFjayA9IG1fbWV0YWRhdGFUcmFja3MuZ2V0KHBpZCk7Ci0gICAgICAgIGlm
ICghdHJhY2spCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgR1JlZlB0cjxHQnl0ZXM+
IGRhdGEgPSBnc3RfbXBlZ3RzX3NlY3Rpb25fZ2V0X2RhdGEoc2VjdGlvbik7Ci0gICAgICAgIGdz
aXplIHNpemU7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGJ5dGVzID0gZ19ieXRlc19nZXRfZGF0YShk
YXRhLmdldCgpLCAmc2l6ZSk7Ci0KLSAgICAgICAgdHJhY2stPmFkZERhdGFDdWUoY3VycmVudE1l
ZGlhVGltZSgpLCBjdXJyZW50TWVkaWFUaW1lKCksIGJ5dGVzLCBzaXplKTsKICAgICB9CiB9Ci0j
ZW5kaWYKIAotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNvbnRlbnRzKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWVkaWFMb2NhdGlvbkNoYW5nZWQoR3N0
TWVzc2FnZSogbWVzc2FnZSkKIHsKLSAgICBpZiAobV9jaGFwdGVyc1RyYWNrKQotICAgICAgICBt
X3BsYXllci0+cmVtb3ZlVGV4dFRyYWNrKCptX2NoYXB0ZXJzVHJhY2spOworICAgIGlmIChtX21l
ZGlhTG9jYXRpb25zKQorICAgICAgICBnc3Rfc3RydWN0dXJlX2ZyZWUobV9tZWRpYUxvY2F0aW9u
cyk7CiAKLSAgICBtX2NoYXB0ZXJzVHJhY2sgPSBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpDaGFwdGVycywgSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZTo6R2VuZXJpYyk7Ci0gICAgbV9wbGF5ZXItPmFkZFRleHRUcmFj
aygqbV9jaGFwdGVyc1RyYWNrKTsKKyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUobWVzc2FnZSk7CisgICAgaWYgKHN0cnVjdHVyZSkg
eworICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjYW4gY29udGFpbjoKKyAgICAgICAgLy8gLSBi
b3RoIGEgbmV3LWxvY2F0aW9uIHN0cmluZyBhbmQgZW1iZWRkZWQgbG9jYXRpb25zIHN0cnVjdHVy
ZQorICAgICAgICAvLyAtIG9yIG9ubHkgYSBuZXctbG9jYXRpb24gc3RyaW5nLgorICAgICAgICBt
X21lZGlhTG9jYXRpb25zID0gZ3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSk7CisgICAgICAg
IGNvbnN0IEdWYWx1ZSogbG9jYXRpb25zID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUobV9tZWRp
YUxvY2F0aW9ucywgImxvY2F0aW9ucyIpOwogCi0gICAgR1JlZlB0cjxHc3RUb2M+IHRvYzsKLSAg
ICBnYm9vbGVhbiB1cGRhdGVkOwotICAgIGdzdF9tZXNzYWdlX3BhcnNlX3RvYyhtZXNzYWdlLCAm
dG9jLm91dFB0cigpLCAmdXBkYXRlZCk7Ci0gICAgQVNTRVJUKHRvYyk7CisgICAgICAgIGlmIChs
b2NhdGlvbnMpCisgICAgICAgICAgICBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXggPSBzdGF0
aWNfY2FzdDxpbnQ+KGdzdF92YWx1ZV9saXN0X2dldF9zaXplKGxvY2F0aW9ucykpIC0xOwogCi0g
ICAgZm9yIChHTGlzdCogaSA9IGdzdF90b2NfZ2V0X2VudHJpZXModG9jLmdldCgpKTsgaTsgaSA9
IGktPm5leHQpCi0gICAgICAgIHByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeShzdGF0aWNfY2Fz
dDxHc3RUb2NFbnRyeSo+KGktPmRhdGEpKTsKKyAgICAgICAgbG9hZE5leHRMb2NhdGlvbigpOwor
ICAgIH0KIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NUYWJs
ZU9mQ29udGVudHNFbnRyeShHc3RUb2NFbnRyeSogZW50cnkpCitib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6bG9hZE5leHRMb2NhdGlvbigpCiB7Ci0gICAgQVNTRVJUKGVudHJ5KTsK
KyAgICBpZiAoIW1fbWVkaWFMb2NhdGlvbnMpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGF1dG8gY3VlID0gR2VuZXJpY0N1ZURhdGE6OmNyZWF0ZSgpOworICAgIGNvbnN0IEdWYWx1ZSog
bG9jYXRpb25zID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUobV9tZWRpYUxvY2F0aW9ucywgImxv
Y2F0aW9ucyIpOworICAgIGNvbnN0IGdjaGFyKiBuZXdMb2NhdGlvbiA9IG51bGxwdHI7CiAKLSAg
ICBnaW50NjQgc3RhcnQgPSAtMSwgc3RvcCA9IC0xOwotICAgIGdzdF90b2NfZW50cnlfZ2V0X3N0
YXJ0X3N0b3BfdGltZXMoZW50cnksICZzdGFydCwgJnN0b3ApOwotICAgIGlmIChzdGFydCAhPSAt
MSkKLSAgICAgICAgY3VlLT5zZXRTdGFydFRpbWUoTWVkaWFUaW1lKHN0YXJ0LCBHU1RfU0VDT05E
KSk7Ci0gICAgaWYgKHN0b3AgIT0gLTEpCi0gICAgICAgIGN1ZS0+c2V0RW5kVGltZShNZWRpYVRp
bWUoc3RvcCwgR1NUX1NFQ09ORCkpOworICAgIGlmICghbG9jYXRpb25zKSB7CisgICAgICAgIC8v
IEZhbGxiYWNrIG9uIG5ldy1sb2NhdGlvbiBzdHJpbmcuCisgICAgICAgIG5ld0xvY2F0aW9uID0g
Z3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKG1fbWVkaWFMb2NhdGlvbnMsICJuZXctbG9jYXRpb24i
KTsKKyAgICAgICAgaWYgKCFuZXdMb2NhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiAKLSAgICBHc3RUYWdMaXN0KiB0YWdzID0gZ3N0X3RvY19lbnRyeV9nZXRfdGFncyhl
bnRyeSk7Ci0gICAgaWYgKHRhZ3MpIHsKLSAgICAgICAgZ2NoYXIqIHRpdGxlID0gbnVsbHB0cjsK
LSAgICAgICAgZ3N0X3RhZ19saXN0X2dldF9zdHJpbmcodGFncywgR1NUX1RBR19USVRMRSwgJnRp
dGxlKTsKLSAgICAgICAgaWYgKHRpdGxlKSB7Ci0gICAgICAgICAgICBjdWUtPnNldENvbnRlbnQo
dGl0bGUpOwotICAgICAgICAgICAgZ19mcmVlKHRpdGxlKTsKKyAgICBpZiAoIW5ld0xvY2F0aW9u
KSB7CisgICAgICAgIGlmIChtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXggPCAwKSB7CisgICAg
ICAgICAgICBtX21lZGlhTG9jYXRpb25zID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEdWYWx1ZSogbG9jYXRpb24gPSBnc3Rf
dmFsdWVfbGlzdF9nZXRfdmFsdWUobG9jYXRpb25zLCBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5k
ZXgpOworICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF92YWx1ZV9n
ZXRfc3RydWN0dXJlKGxvY2F0aW9uKTsKKworICAgICAgICBpZiAoIXN0cnVjdHVyZSkgeworICAg
ICAgICAgICAgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4LS07CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KKworICAgICAgICBuZXdMb2NhdGlvbiA9IGdzdF9zdHJ1Y3R1
cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJuZXctbG9jYXRpb24iKTsKICAgICB9CiAKLSAgICBt
X2NoYXB0ZXJzVHJhY2stPmFkZEdlbmVyaWNDdWUoY3VlKTsKKyAgICBpZiAobmV3TG9jYXRpb24p
IHsKKyAgICAgICAgLy8gRm91bmQgYSBjYW5kaWRhdGUuIG5ldy1sb2NhdGlvbiBpcyBub3QgYWx3
YXlzIGFuIGFic29sdXRlIHVybAorICAgICAgICAvLyB0aG91Z2guIFdlIG5lZWQgdG8gdGFrZSB0
aGUgYmFzZSBvZiB0aGUgY3VycmVudCB1cmwgYW5kCisgICAgICAgIC8vIGFwcGVuZCB0aGUgdmFs
dWUgb2YgbmV3LWxvY2F0aW9uIHRvIGl0LgorICAgICAgICBVUkwgYmFzZVVybCA9IGdzdF91cmlf
aXNfdmFsaWQobmV3TG9jYXRpb24pID8gVVJMKCkgOiBtX3VybDsKKyAgICAgICAgVVJMIG5ld1Vy
bCA9IFVSTChiYXNlVXJsLCBuZXdMb2NhdGlvbik7CiAKLSAgICBmb3IgKEdMaXN0KiBpID0gZ3N0
X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMoZW50cnkpOyBpOyBpID0gaS0+bmV4dCkKLSAgICAg
ICAgcHJvY2Vzc1RhYmxlT2ZDb250ZW50c0VudHJ5KHN0YXRpY19jYXN0PEdzdFRvY0VudHJ5Kj4o
aS0+ZGF0YSkpOwotfQorICAgICAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBwbGF5YmluVXJsU3Ry
OworICAgICAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgImN1cnJlbnQtdXJpIiwg
JnBsYXliaW5VcmxTdHIub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICBVUkwgcGxheWJpblVy
bChVUkwoKSwgcGxheWJpblVybFN0ci5nZXQoKSk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpwdXJnZUludmFsaWRBdWRpb1RyYWNrcyhWZWN0b3I8U3RyaW5nPiB2YWxpZFRy
YWNrSWRzKQotewotICAgIG1fYXVkaW9UcmFja3MucmVtb3ZlSWYoW3ZhbGlkVHJhY2tJZHNdKGF1
dG8mIGtleUFuZFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAhdmFsaWRUcmFja0lkcy5jb250YWlu
cyhrZXlBbmRWYWx1ZS5rZXkpOwotICAgIH0pOwotfQorICAgICAgICBpZiAocGxheWJpblVybCA9
PSBuZXdVcmwpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBs
YXliaW4gYWxyZWFkeSBoYW5kbGVkIHJlZGlyZWN0aW9uLiIpOwogCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJbnZhbGlkVmlkZW9UcmFja3MoVmVjdG9yPFN0cmluZz4g
dmFsaWRUcmFja0lkcykKLXsKLSAgICBtX3ZpZGVvVHJhY2tzLnJlbW92ZUlmKFt2YWxpZFRyYWNr
SWRzXShhdXRvJiBrZXlBbmRWYWx1ZSkgewotICAgICAgICByZXR1cm4gIXZhbGlkVHJhY2tJZHMu
Y29udGFpbnMoa2V5QW5kVmFsdWUua2V5KTsKLSAgICB9KTsKLX0KKyAgICAgICAgICAgIG1fdXJs
ID0gcGxheWJpblVybDsKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdl
SW52YWxpZFRleHRUcmFja3MoVmVjdG9yPFN0cmluZz4gdmFsaWRUcmFja0lkcykKLXsKLSAgICBt
X3RleHRUcmFja3MucmVtb3ZlSWYoW3ZhbGlkVHJhY2tJZHNdKGF1dG8mIGtleUFuZFZhbHVlKSB7
Ci0gICAgICAgIHJldHVybiAhdmFsaWRUcmFja0lkcy5jb250YWlucyhrZXlBbmRWYWx1ZS5rZXkp
OwotICAgIH0pOwotfQotI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZmlsbFRpbWVyRmlyZWQoKQot
ewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBp
cGVsaW5lKCksICJbQnVmZmVyaW5nXSBBbiBlcnJvciBvY2N1cnJlZCwgZGlzYWJsaW5nIHRoZSBm
aWxsIHRpbWVyIik7Ci0gICAgICAgIG1fZmlsbFRpbWVyLnN0b3AoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOwor
ICAgICAgICBhdXRvIHNlY3VyaXR5T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtX3Vy
bCk7CisgICAgICAgIGlmIChzZWN1cml0eU9yaWdpbi0+Y2FuUmVxdWVzdChuZXdVcmwpKSB7Cisg
ICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIk5ldyBtZWRpYSB1cmw6ICVz
IiwgbmV3VXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgR1JlZlB0cjxHc3RRdWVy
eT4gcXVlcnkgPSBhZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcoR1NUX0ZPUk1BVF9Q
RVJDRU5UKSk7Ci0gICAgZG91YmxlIGZpbGxTdGF0dXMgPSAxMDAuMDsKLSAgICBHc3RCdWZmZXJp
bmdNb2RlIG1vZGUgPSBHU1RfQlVGRkVSSU5HX0RPV05MT0FEOworICAgICAgICAgICAgLy8gUmVz
ZXQgcGxheWVyIHN0YXRlcy4KKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5
ZXI6OkxvYWRpbmc7CisgICAgICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgp
OworICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwor
ICAgICAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CiAKLSAgICBpZiAoZ3N0
X2VsZW1lbnRfcXVlcnkobV9zb3VyY2UuZ2V0KCksIHF1ZXJ5LmdldCgpKSkgewotICAgICAgICBn
c3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3N0YXRzKHF1ZXJ5LmdldCgpLCAmbW9kZSwgbnVsbHB0
ciwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgICAgICAvLyBSZXNldCBwaXBlbGluZSBzdGF0
ZS4KKyAgICAgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IHRydWU7CiAKLSAgICAgICAgaW50IHBl
cmNlbnRhZ2U7Ci0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfcGVyY2VudChxdWVy
eS5nZXQoKSwgbnVsbHB0ciwgJnBlcmNlbnRhZ2UpOwotICAgICAgICBmaWxsU3RhdHVzID0gcGVy
Y2VudGFnZTsKLSAgICB9IGVsc2UgaWYgKG1faHR0cFJlc3BvbnNlVG90YWxTaXplKSB7Ci0gICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIFF1ZXJ5IGZhaWxl
ZCwgZmFsbGluZyBiYWNrIHRvIG5ldHdvcmsgcmVhZCBwb3NpdGlvbiBlc3RpbWF0aW9uIik7Ci0g
ICAgICAgIGZpbGxTdGF0dXMgPSAxMDAuMCAqIChzdGF0aWNfY2FzdDxkb3VibGU+KG1fbmV0d29y
a1JlYWRQb3NpdGlvbikgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG1faHR0cFJlc3BvbnNlVG90YWxT
aXplKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiW0J1ZmZlcmluZ10gVW5hYmxlIHRvIGRldGVybWluZSBvbi1kaXNrIGJ1ZmZlcmluZyBzdGF0
dXMiKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgR3N0U3RhdGUgc3RhdGU7CisgICAg
ICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBu
dWxscHRyLCAwKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFkpIHsK
KyAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIG5ldyB1cmkgYW5kIHN0YXJ0IHBsYXlpbmcuCisg
ICAgICAgICAgICAgICAgc2V0UGxheWJpblVSTChuZXdVcmwpOworICAgICAgICAgICAgICAgIGNo
YW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEdT
VF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiTm90IGFsbG93ZWQgdG8gbG9hZCBuZXcgbWVkaWEg
bG9jYXRpb246ICVzIiwgbmV3VXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyAg
ICBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXgtLTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRFbmQoKQoreworICAgIEdTVF9J
TkZPX09CSkVDVChwaXBlbGluZSgpLCAiUGxheWJhY2sgZW5kZWQiKTsKKworICAgIC8vIFN5bmNo
cm9uaXplIHBvc2l0aW9uIGFuZCBkdXJhdGlvbiB2YWx1ZXMgdG8gbm90IGNvbmZ1c2UgdGhlCisg
ICAgLy8gSFRNTE1lZGlhRWxlbWVudC4gSW4gc29tZSBjYXNlcyBsaWtlIHJldmVyc2UgcGxheWJh
Y2sgdGhlCisgICAgLy8gcG9zaXRpb24gaXMgbm90IGFsd2F5cyByZXBvcnRlZCBhcyAwIGZvciBp
bnN0YW5jZS4KKyAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
OworICAgIE1lZGlhVGltZSBub3cgPSBjdXJyZW50TWVkaWFUaW1lKCk7CisgICAgaWYgKG5vdyA+
IE1lZGlhVGltZTo6emVyb1RpbWUoKSAmJiAhbV9zZWVraW5nKSB7CisgICAgICAgIG1fY2FjaGVk
RHVyYXRpb24gPSBub3c7CisgICAgICAgIG1fcGxheWVyLT5kdXJhdGlvbkNoYW5nZWQoKTsKICAg
ICB9CiAKLSAgICB1cGRhdGVCdWZmZXJpbmdTdGF0dXMobW9kZSwgZmlsbFN0YXR1cyk7CisgICAg
bV9pc0VuZFJlYWNoZWQgPSB0cnVlOworCisgICAgaWYgKCFtX3BsYXllci0+Y2xpZW50KCkubWVk
aWFQbGF5ZXJJc0xvb3BpbmcoKSkgeworICAgICAgICBtX3BhdXNlZCA9IHRydWU7CisgICAgICAg
IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1JFQURZKTsKKyAgICAgICAgbV9kb3dubG9h
ZEZpbmlzaGVkID0gZmFsc2U7CisgICAgfQorICAgIHRpbWVDaGFuZ2VkKCk7CiB9CiAKLU1lZGlh
VGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1heE1lZGlhVGltZVNlZWthYmxlKCkg
Y29uc3QKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpnZXRTdXBwb3J0ZWRUeXBl
cyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCiB7Ci0g
ICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiZXJyb3JPY2N1cmVkOiAlcywgaXNMaXZl
U3RyZWFtOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2Vycm9yT2NjdXJlZCksIGJvb2xGb3JQcmlu
dGluZyhpc0xpdmVTdHJlYW0oKSkpOwotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKLSAgICAgICAg
cmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLQotICAgIGlmIChpc0xpdmVTdHJlYW0oKSkK
LSAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLQotICAgIE1lZGlhVGltZSBk
dXJhdGlvbiA9IGR1cmF0aW9uTWVkaWFUaW1lKCk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAibWF4TWVkaWFUaW1lU2Vla2FibGUsIGR1cmF0aW9uOiAlcyIsIHRvU3RyaW5nKGR1
cmF0aW9uKS51dGY4KCkuZGF0YSgpKTsKLSAgICAvLyBpbmZpbml0ZSBkdXJhdGlvbiBtZWFucyBs
aXZlIHN0cmVhbQotICAgIGlmIChkdXJhdGlvbi5pc1Bvc2l0aXZlSW5maW5pdGUoKSkKLSAgICAg
ICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKLQotICAgIHJldHVybiBkdXJhdGlvbjsK
KyAgICBhdXRvJiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHU3RyZWFtZXJSZWdpc3RyeVNjYW5uZXI6
OnNpbmdsZXRvbigpOworICAgIHR5cGVzID0gZ3N0UmVnaXN0cnlTY2FubmVyLm1pbWVUeXBlU2V0
KCk7CiB9CiAKLU1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1heFRpbWVM
b2FkZWQoKSBjb25zdAorTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQogewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKLSAgICAgICAgcmV0
dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKKyAgICBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBl
IHJlc3VsdCA9IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRlZDsKKyNpZiBFTkFCTEUoTUVESUFf
U09VUkNFKQorICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSBpcyBpbiBjaGFy
Z2Ugb2YgbWVkaWFzb3VyY2UgcGxheWJhY2ssIG5vdCB1cy4KKyAgICBpZiAocGFyYW1ldGVycy5p
c01lZGlhU291cmNlKQorICAgICAgICByZXR1cm4gcmVzdWx0OworI2VuZGlmCiAKLSAgICBNZWRp
YVRpbWUgbG9hZGVkID0gbV9tYXhUaW1lTG9hZGVkOwotICAgIGlmIChtX2lzRW5kUmVhY2hlZCkK
LSAgICAgICAgbG9hZGVkID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKLSAgICBHU1RfTE9HX09CSkVD
VChwaXBlbGluZSgpLCAibWF4VGltZUxvYWRlZDogJXMiLCB0b1N0cmluZyhsb2FkZWQpLnV0Zjgo
KS5kYXRhKCkpOwotICAgIHJldHVybiBsb2FkZWQ7Ci19CisjaWYgIUVOQUJMRShNRURJQV9TVFJF
QU0pCisgICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVN0cmVhbSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyNlbmRpZgogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9h
ZGluZ1Byb2dyZXNzKCkgY29uc3QKLXsKLSAgICBpZiAobV9lcnJvck9jY3VyZWQgfHwgbV9sb2Fk
aW5nU3RhbGxlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChwYXJhbWV0ZXJzLnR5
cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgaWYgKFdFQktJVF9J
U19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkgewotICAgICAgICBHU1RfTE9HX09CSkVDVChwaXBl
bGluZSgpLCAiTGFzdCBuZXR3b3JrIHJlYWQgcG9zaXRpb246ICUiIEdfR1VJTlQ2NF9GT1JNQVQg
IiwgY3VycmVudDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgbV9yZWFkUG9zaXRpb25BdExhc3REaWRM
b2FkaW5nUHJvZ3Jlc3MsIG1fbmV0d29ya1JlYWRQb3NpdGlvbik7Ci0gICAgICAgIGJvb2wgZGlk
TG9hZGluZ1Byb2dyZXNzID0gbV9yZWFkUG9zaXRpb25BdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3Mg
PCBtX25ldHdvcmtSZWFkUG9zaXRpb247Ci0gICAgICAgIG1fcmVhZFBvc2l0aW9uQXRMYXN0RGlk
TG9hZGluZ1Byb2dyZXNzID0gbV9uZXR3b3JrUmVhZFBvc2l0aW9uOwotICAgICAgICBHU1RfTE9H
X09CSkVDVChwaXBlbGluZSgpLCAiZGlkTG9hZGluZ1Byb2dyZXNzOiAlcyIsIGJvb2xGb3JQcmlu
dGluZyhkaWRMb2FkaW5nUHJvZ3Jlc3MpKTsKLSAgICAgICAgcmV0dXJuIGRpZExvYWRpbmdQcm9n
cmVzczsKKyAgICBHU1RfREVCVUcoIkNoZWNraW5nIG1pbWUtdHlwZSBcIiVzXCIiLCBwYXJhbWV0
ZXJzLnR5cGUucmF3KCkudXRmOCgpLmRhdGEoKSk7CisgICAgYXV0byBjb250YWluZXJUeXBlID0g
cGFyYW1ldGVycy50eXBlLmNvbnRhaW5lclR5cGUoKTsKKyAgICBhdXRvJiBnc3RSZWdpc3RyeVNj
YW5uZXIgPSBHU3RyZWFtZXJSZWdpc3RyeVNjYW5uZXI6OnNpbmdsZXRvbigpOworICAgIGlmIChn
c3RSZWdpc3RyeVNjYW5uZXIuaXNDb250YWluZXJUeXBlU3VwcG9ydGVkKGNvbnRhaW5lclR5cGUp
KSB7CisgICAgICAgIC8vIFNwZWMgc2F5cyB3ZSBzaG91bGQgbm90IHJldHVybiAicHJvYmFibHki
IGlmIHRoZSBjb2RlY3Mgc3RyaW5nIGlzIGVtcHR5LgorICAgICAgICBWZWN0b3I8U3RyaW5nPiBj
b2RlY3MgPSBwYXJhbWV0ZXJzLnR5cGUuY29kZWNzKCk7CisgICAgICAgIHJlc3VsdCA9IGNvZGVj
cy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQgOiAoZ3N0UmVnaXN0cnlT
Y2FubmVyLmFyZUFsbENvZGVjc1N1cHBvcnRlZChjb2RlY3MpID8gTWVkaWFQbGF5ZXI6OklzU3Vw
cG9ydGVkIDogTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkKTsKICAgICB9CiAKLSAgICBpZiAo
VU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgIWR1cmF0aW9uTWVkaWFUaW1lKCkgfHwgKCFpc01lZGlh
U291cmNlKCkgJiYgIXRvdGFsQnl0ZXMoKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBNZWRpYVRpbWUgY3VycmVudE1heFRpbWVMb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7Ci0gICAg
Ym9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MgPSBjdXJyZW50TWF4VGltZUxvYWRlZCAhPSBtX21heFRp
bWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7Ci0gICAgbV9tYXhUaW1lTG9hZGVkQXRM
YXN0RGlkTG9hZGluZ1Byb2dyZXNzID0gY3VycmVudE1heFRpbWVMb2FkZWQ7Ci0gICAgR1NUX0xP
R19PQkpFQ1QocGlwZWxpbmUoKSwgImRpZExvYWRpbmdQcm9ncmVzczogJXMiLCBib29sRm9yUHJp
bnRpbmcoZGlkTG9hZGluZ1Byb2dyZXNzKSk7Ci0gICAgcmV0dXJuIGRpZExvYWRpbmdQcm9ncmVz
czsKKyAgICBhdXRvIGZpbmFsUmVzdWx0ID0gZXh0ZW5kZWRTdXBwb3J0c1R5cGUocGFyYW1ldGVy
cywgcmVzdWx0KTsKKyAgICBHU1RfREVCVUcoIlN1cHBvcnRlZDogJXMiLCBjb252ZXJ0RW51bWVy
YXRpb25Ub1N0cmluZyhmaW5hbFJlc3VsdCkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGZp
bmFsUmVzdWx0OwogfQogCi11bnNpZ25lZCBsb25nIGxvbmcgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp0b3RhbEJ5dGVzKCkgY29uc3QKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjp1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKQogewotICAgIGlmIChtX2Vycm9yT2Nj
dXJlZCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX3BpcGVsaW5lKQorICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAobV90b3RhbEJ5dGVzKQotICAgICAgICByZXR1cm4gbV90b3RhbEJ5
dGVzOworICAgIHVuc2lnbmVkIGZsYWdzOworICAgIGdfb2JqZWN0X2dldChtX3BpcGVsaW5lLmdl
dCgpLCAiZmxhZ3MiLCAmZmxhZ3MsIG51bGxwdHIpOwogCi0gICAgaWYgKCFtX3NvdXJjZSkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgdW5zaWduZWQgZmxhZ0Rvd25sb2FkID0gZ2V0R3N0UGxheUZs
YWcoImRvd25sb2FkIik7CiAKLSAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCi0gICAgICAgIHJldHVy
biAwOworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3RvcCBkb3dubG9hZGluZyBpZiB3ZSBhbHJl
YWR5IHN0YXJ0ZWQgaXQuCisgICAgaWYgKGZsYWdzICYgZmxhZ0Rvd25sb2FkICYmIG1fcmVhZHlT
dGF0ZSA+IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZyAmJiAhbV9yZXNldFBpcGVsaW5lKSB7Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkRvd25sb2FkIGFscmVhZHkgc3Rh
cnRlZCwgbm90IHN0YXJ0aW5nIGFnYWluIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBHc3RGb3JtYXQgZm10ID0gR1NUX0ZPUk1BVF9CWVRFUzsKLSAgICBnaW50NjQgbGVuZ3RoID0g
MDsKLSAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9zb3VyY2UuZ2V0KCksIGZt
dCwgJmxlbmd0aCkpIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ0b3Rh
bEJ5dGVzICUiIEdfR0lOVDY0X0ZPUk1BVCwgbGVuZ3RoKTsKLSAgICAgICAgbV90b3RhbEJ5dGVz
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihsZW5ndGgpOwotICAgICAgICBtX2lz
U3RyZWFtaW5nID0gIWxlbmd0aDsKLSAgICAgICAgcmV0dXJuIG1fdG90YWxCeXRlczsKKyAgICBi
b29sIHNob3VsZERvd25sb2FkID0gIWlzTGl2ZVN0cmVhbSgpICYmIG1fcHJlbG9hZCA9PSBNZWRp
YVBsYXllcjo6QXV0bzsKKyAgICBpZiAoc2hvdWxkRG93bmxvYWQpIHsKKyAgICAgICAgR1NUX0lO
Rk9fT0JKRUNUKHBpcGVsaW5lKCksICJFbmFibGluZyBvbi1kaXNrIGJ1ZmZlcmluZyIpOworICAg
ICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwgZmxhZ3MgfCBmbGFn
RG93bmxvYWQsIG51bGxwdHIpOworICAgICAgICBtX2ZpbGxUaW1lci5zdGFydFJlcGVhdGluZygy
MDBfbXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgp
LCAiRGlzYWJsaW5nIG9uLWRpc2sgYnVmZmVyaW5nIik7CisgICAgICAgIGdfb2JqZWN0X3NldCht
X3BpcGVsaW5lLmdldCgpLCAiZmxhZ3MiLCBmbGFncyAmIH5mbGFnRG93bmxvYWQsIG51bGxwdHIp
OworICAgICAgICBtX2ZpbGxUaW1lci5zdG9wKCk7CiAgICAgfQorfQogCi0gICAgLy8gRmFsbCBi
YWNrIHRvIHF1ZXJ5aW5nIHRoZSBzb3VyY2UgcGFkcyBtYW51YWxseS4KLSAgICAvLyBTZWUgYWxz
byBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM4NzQ5Ci0gICAg
R3N0SXRlcmF0b3IqIGl0ZXIgPSBnc3RfZWxlbWVudF9pdGVyYXRlX3NyY19wYWRzKG1fc291cmNl
LmdldCgpKTsKLSAgICBib29sIGRvbmUgPSBmYWxzZTsKLSAgICB3aGlsZSAoIWRvbmUpIHsKLSAg
ICAgICAgR1ZhbHVlIGl0ZW0gPSBHX1ZBTFVFX0lOSVQ7Ci0gICAgICAgIHN3aXRjaCAoZ3N0X2l0
ZXJhdG9yX25leHQoaXRlciwgJml0ZW0pKSB7Ci0gICAgICAgIGNhc2UgR1NUX0lURVJBVE9SX09L
OiB7Ci0gICAgICAgICAgICBHc3RQYWQqIHBhZCA9IHN0YXRpY19jYXN0PEdzdFBhZCo+KGdfdmFs
dWVfZ2V0X29iamVjdCgmaXRlbSkpOwotICAgICAgICAgICAgZ2ludDY0IHBhZExlbmd0aCA9IDA7
Ci0gICAgICAgICAgICBpZiAoZ3N0X3BhZF9xdWVyeV9kdXJhdGlvbihwYWQsIGZtdCwgJnBhZExl
bmd0aCkgJiYgcGFkTGVuZ3RoID4gbGVuZ3RoKQotICAgICAgICAgICAgICAgIGxlbmd0aCA9IHBh
ZExlbmd0aDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR1NU
X0lURVJBVE9SX1JFU1lOQzoKLSAgICAgICAgICAgIGdzdF9pdGVyYXRvcl9yZXN5bmMoaXRlcik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRVJST1I6Ci0g
ICAgICAgICAgICBGQUxMVEhST1VHSDsKLSAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfRE9ORToK
LSAgICAgICAgICAgIGRvbmUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBpcGVsaW5lTmFtZSkKK3sKKyAgICBjb25zdCBnY2hh
ciogcGxheWJpbk5hbWUgPSAicGxheWJpbiI7CiAKLSAgICAgICAgZ192YWx1ZV91bnNldCgmaXRl
bSk7Ci0gICAgfQorICAgIC8vIE1TRSBkb2Vzbid0IHN1cHBvcnQgcGxheWJpbjMuIE1lZGlhc3Ry
ZWFtIHJlcXVpcmVzIHBsYXliaW4zLiBSZWd1bGFyCisgICAgLy8gcGxheWJhY2sgY2FuIHVzZSBw
bGF5YmluMyBvbi1kZW1hbmQgd2l0aCB0aGUgV0VCS0lUX0dTVF9VU0VfUExBWUJJTjMKKyAgICAv
LyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKyAgICBpZiAoKCFpc01lZGlhU291cmNlKCkgJiYgZ19n
ZXRlbnYoIldFQktJVF9HU1RfVVNFX1BMQVlCSU4zIikpIHx8IHVybC5wcm90b2NvbElzKCJtZWRp
YXN0cmVhbSIpKQorICAgICAgICBwbGF5YmluTmFtZSA9ICJwbGF5YmluMyI7CiAKLSAgICBnc3Rf
aXRlcmF0b3JfZnJlZShpdGVyKTsKKyAgICBpZiAobV9waXBlbGluZSkgeworICAgICAgICBpZiAo
IWdfc3RyY21wMChHU1RfT0JKRUNUX05BTUUoZ3N0X2VsZW1lbnRfZ2V0X2ZhY3RvcnkobV9waXBl
bGluZS5nZXQoKSkpLCBwbGF5YmluTmFtZSkpIHsKKyAgICAgICAgICAgIEdTVF9JTkZPX09CSkVD
VChwaXBlbGluZSgpLCAiQWxyZWFkeSB1c2luZyAlcyIsIHBsYXliaW5OYW1lKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCks
ICJ0b3RhbEJ5dGVzICUiIEdfR0lOVDY0X0ZPUk1BVCwgbGVuZ3RoKTsKLSAgICBtX3RvdGFsQnl0
ZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGxlbmd0aCk7Ci0gICAgbV9pc1N0
cmVhbWluZyA9ICFsZW5ndGg7Ci0gICAgcmV0dXJuIG1fdG90YWxCeXRlczsKLX0KKyAgICAgICAg
R1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJUZWFyaW5nIGRvd24gYXMgd2UgbmVlZCB0byB1
c2UgJXMgbm93LiIsIHBsYXliaW5OYW1lKTsKKyAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShH
U1RfU1RBVEVfTlVMTCk7CisgICAgICAgIG1fcGlwZWxpbmUgPSBudWxscHRyOworICAgIH0KIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwQ2FsbGJhY2soTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIsIEdzdEVsZW1lbnQqIHNvdXJjZUVsZW1l
bnQpCi17Ci0gICAgcGxheWVyLT5zb3VyY2VTZXR1cChzb3VyY2VFbGVtZW50KTsKLX0KKyAgICBB
U1NFUlQoIW1fcGlwZWxpbmUpOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
dXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2soR3N0QmluKiBiaW4sIEdzdEVsZW1lbnQq
IGVsZW1lbnQsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQotewotICAgIGlm
IChnX3N0cmNtcDAoR19PQkpFQ1RfVFlQRV9OQU1FKGVsZW1lbnQpLCAiR3N0RG93bmxvYWRCdWZm
ZXIiKSkKLSAgICAgICAgcmV0dXJuOworICAgIG1faXNMZWdhY3lQbGF5YmluID0gIWdfc3RyY21w
MChwbGF5YmluTmFtZSwgInBsYXliaW4iKTsKIAotICAgIHBsYXllci0+bV9kb3dubG9hZEJ1ZmZl
ciA9IGVsZW1lbnQ7Ci0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGJp
biwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4odXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2Fs
bGJhY2spLCBwbGF5ZXIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChlbGVtZW50LCAi
bm90aWZ5Ojp0ZW1wLWxvY2F0aW9uIiwgR19DQUxMQkFDSyhkb3dubG9hZEJ1ZmZlckZpbGVDcmVh
dGVkQ2FsbGJhY2spLCBwbGF5ZXIpOworICAgIC8vIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgp
IHJldHVybnMgYSBmbG9hdGluZyByZWZlcmVuY2Ugc28KKyAgICAvLyB3ZSBzaG91bGQgbm90IGFk
b3B0LgorICAgIHN0YXRpYyBBdG9taWM8dWludDMyX3Q+IHBpcGVsaW5lSWQ7CisgICAgc2V0UGlw
ZWxpbmUoZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKHBsYXliaW5OYW1lLAorICAgICAgICAocGlw
ZWxpbmVOYW1lLmlzRW1wdHkoKSA/IG1ha2VTdHJpbmcoIm1lZGlhLXBsYXllci0iLCBwaXBlbGlu
ZUlkLmV4Y2hhbmdlQWRkKDEpKSA6IHBpcGVsaW5lTmFtZSkudXRmOCgpLmRhdGEoKSkpOworICAg
IHNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR1NUX1NUUkVBTV9WT0xVTUUobV9waXBlbGluZS5nZXQo
KSkpOwogCi0gICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBvbGREb3dubG9hZFRlbXBsYXRlOwotICAg
IGdfb2JqZWN0X2dldChlbGVtZW50LCAidGVtcC10ZW1wbGF0ZSIsICZvbGREb3dubG9hZFRlbXBs
YXRlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
IlVzaW5nIGxlZ2FjeSBwbGF5YmluIGVsZW1lbnQ6ICVzIiwgYm9vbEZvclByaW50aW5nKG1faXNM
ZWdhY3lQbGF5YmluKSk7CiAKLSAgICBHVW5pcXVlUHRyPGNoYXI+IG5ld0Rvd25sb2FkVGVtcGxh
dGUoZ19idWlsZF9maWxlbmFtZShHX0RJUl9TRVBBUkFUT1JfUywgInZhciIsICJ0bXAiLCAiV2Vi
S2l0LU1lZGlhLVhYWFhYWCIsIG51bGxwdHIpKTsKLSAgICBnX29iamVjdF9zZXQoZWxlbWVudCwg
InRlbXAtdGVtcGxhdGUiLCBuZXdEb3dubG9hZFRlbXBsYXRlLmdldCgpLCBudWxscHRyKTsKLSAg
ICBHU1RfREVCVUdfT0JKRUNUKHBsYXllci0+cGlwZWxpbmUoKSwgIlJlY29uZmlndXJlZCBmaWxl
IGRvd25sb2FkIHRlbXBsYXRlIGZyb20gJyVzJyB0byAnJXMnIiwgb2xkRG93bmxvYWRUZW1wbGF0
ZS5nZXQoKSwgbmV3RG93bmxvYWRUZW1wbGF0ZS5nZXQoKSk7CisgICAgLy8gTGV0IGFsc28gb3Ro
ZXIgbGlzdGVuZXJzIHN1YnNjcmliZSB0byAoYXBwbGljYXRpb24pIG1lc3NhZ2VzIGluIHRoaXMg
YnVzLgorICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dl
dF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgZ3N0X2J1c19hZGRf
c2lnbmFsX3dhdGNoX2Z1bGwoYnVzLmdldCgpLCBSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJ1bkxv
b3BEaXNwYXRjaGVyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cy5nZXQoKSwgIm1lc3NhZ2Ui
LCBHX0NBTExCQUNLKGJ1c01lc3NhZ2VDYWxsYmFjayksIHRoaXMpOwogCi0gICAgcGxheWVyLT5w
dXJnZU9sZERvd25sb2FkRmlsZXMob2xkRG93bmxvYWRUZW1wbGF0ZS5nZXQoKSk7Ci19CisgICAg
Z19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJtdXRlIiwgbV9wbGF5ZXItPm11dGVkKCks
IG51bGxwdHIpOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG93bmxvYWRC
dWZmZXJGaWxlQ3JlYXRlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxh
eWVyKQotewotICAgIEFTU0VSVChwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCAiZGVlcC1lbGVtZW50
LWFkZGVkIiwgR19DQUxMQkFDSygrW10oR3N0QmluKiwgR3N0QmluKiBzdWJCaW4sIEdzdEVsZW1l
bnQqIGVsZW1lbnQsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKSB7CisgICAg
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmluTmFtZShnc3RfZWxlbWVudF9nZXRfbmFtZShHU1RfRUxF
TUVOVF9DQVNUKHN1YkJpbikpKTsKKyAgICAgICAgaWYgKCFnX3N0cl9oYXNfcHJlZml4KGJpbk5h
bWUuZ2V0KCksICJkZWNvZGViaW4iKSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIu
Z2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KGRvd25sb2FkQnVmZmVyRmlsZUNyZWF0
ZWRDYWxsYmFjayksIHBsYXllcik7CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gZWxlbWVudE5h
bWUoZ3N0X2VsZW1lbnRfZ2V0X25hbWUoZWxlbWVudCkpOworICAgICAgICBpZiAoZ19zdHJfaGFz
X3ByZWZpeChlbGVtZW50TmFtZS5nZXQoKSwgInY0bDIiKSkKKyAgICAgICAgICAgIHBsYXllci0+
bV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9IEdzdFZpZGVvRGVjb2RlclBsYXRmb3JtOjpWaWRlbzRM
aW51eDsKKyAgICAgICAgZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeChlbGVtZW50TmFtZS5nZXQo
KSwgImlteHZwdWRlYyIpKQorICAgICAgICAgICAgcGxheWVyLT5tX3ZpZGVvRGVjb2RlclBsYXRm
b3JtID0gR3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OklteFZQVTsKIAotICAgIEdVbmlxdWVPdXRQ
dHI8Y2hhcj4gZG93bmxvYWRGaWxlOwotICAgIGdfb2JqZWN0X2dldChwbGF5ZXItPm1fZG93bmxv
YWRCdWZmZXIuZ2V0KCksICJ0ZW1wLWxvY2F0aW9uIiwgJmRvd25sb2FkRmlsZS5vdXRQdHIoKSwg
bnVsbHB0cik7Ci0gICAgcGxheWVyLT5tX2Rvd25sb2FkQnVmZmVyID0gbnVsbHB0cjsKKyNpZiBV
U0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgICAgIHBsYXllci0+dXBkYXRlVGV4dHVyZU1hcHBl
ckZsYWdzKCk7CisjZW5kaWYKKyAgICB9KSwgdGhpcyk7CiAKLSAgICBpZiAoVU5MSUtFTFkoIUZp
bGVTeXN0ZW06OmRlbGV0ZUZpbGUoZG93bmxvYWRGaWxlLmdldCgpKSkpIHsKLSAgICAgICAgR1NU
X1dBUk5JTkcoIkNvdWxkbid0IHVubGluayBtZWRpYSB0ZW1wb3JhcnkgZmlsZSAlcyBhZnRlciBj
cmVhdGlvbiIsIGRvd25sb2FkRmlsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBnX3Np
Z25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgInNvdXJjZS1zZXR1cCIsIEdf
Q0FMTEJBQ0soc291cmNlU2V0dXBDYWxsYmFjayksIHRoaXMpOworICAgIGlmIChtX2lzTGVnYWN5
UGxheWJpbikgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5n
ZXQoKSwgInZpZGVvLWNoYW5nZWQiLCBHX0NBTExCQUNLKHZpZGVvQ2hhbmdlZENhbGxiYWNrKSwg
dGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgp
LCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0soYXVkaW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlz
KTsKICAgICB9CiAKLSAgICBHU1RfREVCVUdfT0JKRUNUKHBsYXllci0+cGlwZWxpbmUoKSwgIlVu
bGlua2VkIG1lZGlhIHRlbXBvcmFyeSBmaWxlICVzIGFmdGVyIGNyZWF0aW9uIiwgZG93bmxvYWRG
aWxlLmdldCgpKTsKLX0KKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgaWYgKG1faXNMZWdh
Y3lQbGF5YmluKQorICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5n
ZXQoKSwgInRleHQtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodGV4dENoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VPbGREb3dubG9h
ZEZpbGVzKGNvbnN0IGNoYXIqIGRvd25sb2FkRmlsZVRlbXBsYXRlKQotewotICAgIGlmICghZG93
bmxvYWRGaWxlVGVtcGxhdGUpCi0gICAgICAgIHJldHVybjsKKyAgICBHc3RFbGVtZW50KiB0ZXh0
Q29tYmluZXIgPSB3ZWJraXRUZXh0Q29tYmluZXJOZXcoKTsKKyAgICBBU1NFUlQodGV4dENvbWJp
bmVyKTsKKyAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInRleHQtc3RyZWFtLWNv
bWJpbmVyIiwgdGV4dENvbWJpbmVyLCBudWxscHRyKTsKIAotICAgIEdVbmlxdWVQdHI8Y2hhcj4g
dGVtcGxhdGVQYXRoKGdfcGF0aF9nZXRfZGlybmFtZShkb3dubG9hZEZpbGVUZW1wbGF0ZSkpOwot
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gdGVtcGxhdGVGaWxlKGdfcGF0aF9nZXRfYmFzZW5hbWUoZG93
bmxvYWRGaWxlVGVtcGxhdGUpKTsKLSAgICBTdHJpbmcgdGVtcGxhdGVQYXR0ZXJuID0gU3RyaW5n
KHRlbXBsYXRlRmlsZS5nZXQoKSkucmVwbGFjZSgiWCIsICI/Iik7CisgICAgbV90ZXh0QXBwU2lu
ayA9IHdlYmtpdFRleHRTaW5rTmV3KCk7CisgICAgQVNTRVJUKG1fdGV4dEFwcFNpbmspOwogCi0g
ICAgZm9yIChhdXRvJiBmaWxlUGF0aCA6IEZpbGVTeXN0ZW06Omxpc3REaXJlY3RvcnkodGVtcGxh
dGVQYXRoLmdldCgpLCB0ZW1wbGF0ZVBhdHRlcm4pKSB7Ci0gICAgICAgIGlmIChVTkxJS0VMWSgh
RmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShmaWxlUGF0aCkpKSB7Ci0gICAgICAgICAgICBHU1RfV0FS
TklORygiQ291bGRuJ3QgdW5saW5rIGxlZ2FjeSBtZWRpYSB0ZW1wb3JhcnkgZmlsZTogJXMiLCBm
aWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
CisgICAgbV90ZXh0QXBwU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChtX3RleHRBcHBTaW5rLmdldCgpLCAic2luayIpKTsKKyAgICBBU1NFUlQobV90ZXh0QXBw
U2lua1BhZCk7CiAKLSAgICAgICAgR1NUX1RSQUNFKCJVbmxpbmtlZCBsZWdhY3kgbWVkaWEgdGVt
cG9yYXJ5IGZpbGU6ICVzIiwgZmlsZVBhdGgudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQotfQorICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gdGV4dENhcHM7CisgICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lv
bigxLCAxNCwgMCkpCisgICAgICAgIHRleHRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19l
bXB0eV9zaW1wbGUoImFwcGxpY2F0aW9uL3gtc3VidGl0bGUtdnR0IikpOworICAgIGVsc2UKKyAg
ICAgICAgdGV4dENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidGV4
dC92dHQiKSk7CisgICAgZ19vYmplY3Rfc2V0KG1fdGV4dEFwcFNpbmsuZ2V0KCksICJlbWl0LXNp
Z25hbHMiLCBUUlVFLCAiZW5hYmxlLWxhc3Qtc2FtcGxlIiwgRkFMU0UsICJjYXBzIiwgdGV4dENh
cHMuZ2V0KCksIG51bGxwdHIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3RleHRB
cHBTaW5rLmdldCgpLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0sobmV3VGV4dFNhbXBsZUNhbGxi
YWNrKSwgdGhpcyk7CisKKyAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInRleHQt
c2luayIsIG1fdGV4dEFwcFNpbmsuZ2V0KCksIG51bGxwdHIpOworI2VuZGlmCiAKLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cChHc3RFbGVtZW50KiBzb3VyY2VF
bGVtZW50KQotewotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNvdXJjZSBlbGVt
ZW50IHNldC11cCBmb3IgJXMiLCBHU1RfRUxFTUVOVF9OQU1FKHNvdXJjZUVsZW1lbnQpKTsKKyAg
ICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInZpZGVvLXNpbmsiLCBjcmVhdGVWaWRl
b1NpbmsoKSwgImF1ZGlvLXNpbmsiLCBjcmVhdGVBdWRpb1NpbmsoKSwgbnVsbHB0cik7CiAKLSAg
ICBpZiAoV0VCS0lUX0lTX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpICYmIEdTVF9PQkpFQ1RfUEFS
RU5UKG1fc291cmNlLmdldCgpKSkKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKEdTVF9FTEVNRU5UX1BBUkVOVChtX3NvdXJjZS5nZXQoKSksIHJlaW50ZXJwcmV0
X2Nhc3Q8Z3BvaW50ZXI+KHVyaURlY29kZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNrKSwgdGhpcyk7
CisgICAgY29uZmlndXJlUGxheVNpbmsoKTsKIAotICAgIG1fc291cmNlID0gc291cmNlRWxlbWVu
dDsKKyAgICBpZiAobV9wcmVzZXJ2ZXNQaXRjaCkgeworICAgICAgICBHc3RFbGVtZW50KiBzY2Fs
ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgic2NhbGV0ZW1wbyIsIG51bGxwdHIpOwogCi0g
ICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkgewotICAgICAgICB3ZWJL
aXRXZWJTcmNTZXRNZWRpYVBsYXllcihXRUJLSVRfV0VCX1NSQ19DQVNUKG1fc291cmNlLmdldCgp
KSwgbV9wbGF5ZXIpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KEdTVF9FTEVNRU5UX1BBUkVO
VChtX3NvdXJjZS5nZXQoKSksICJlbGVtZW50LWFkZGVkIiwgR19DQUxMQkFDSyh1cmlEZWNvZGVC
aW5FbGVtZW50QWRkZWRDYWxsYmFjayksIHRoaXMpOwotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
Ci0gICAgfSBlbHNlIGlmIChXRUJLSVRfSVNfTUVESUFfU1RSRUFNX1NSQyhzb3VyY2VFbGVtZW50
KSkgewotICAgICAgICBhdXRvIHN0cmVhbSA9IG1fc3RyZWFtUHJpdmF0ZS5nZXQoKTsKLSAgICAg
ICAgQVNTRVJUKHN0cmVhbSk7Ci0gICAgICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjU2V0U3RyZWFt
KFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKHNvdXJjZUVsZW1lbnQpLCBzdHJlYW0pOwotI2VuZGlm
CisgICAgICAgIGlmICghc2NhbGUpCisgICAgICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRv
IGNyZWF0ZSBzY2FsZXRlbXBvIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdfb2JqZWN0
X3NldChtX3BpcGVsaW5lLmdldCgpLCAiYXVkaW8tZmlsdGVyIiwgc2NhbGUsIG51bGxwdHIpOwor
ICAgIH0KKworICAgIGlmICghbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKSB7CisgICAgICAg
IC8vIElmIG5vdCB1c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgbGV0IEdTdHJlYW1lciBo
YW5kbGUKKyAgICAgICAgLy8gdGhlIGltYWdlLW9yaWVudGF0aW9uIHRhZy4KKyAgICAgICAgR3N0
RWxlbWVudCogdmlkZW9GbGlwID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2aWRlb2ZsaXAi
LCBudWxscHRyKTsKKyAgICAgICAgaWYgKHZpZGVvRmxpcCkgeworICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KHZpZGVvRmxpcCwgIm1ldGhvZCIsIDgsIG51bGxwdHIpOworICAgICAgICAgICAgZ19v
YmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ2aWRlby1maWx0ZXIiLCB2aWRlb0ZsaXAsIG51
bGxwdHIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJUaGUgdmlk
ZW9mbGlwIGVsZW1lbnQgaXMgbWlzc2luZywgdmlkZW8gcm90YXRpb24gc3VwcG9ydCBpcyBub3cg
ZGlzYWJsZWQuIFBsZWFzZSBjaGVjayB5b3VyIGdzdC1wbHVnaW5zLWdvb2QgaW5zdGFsbGF0aW9u
LiIpOwogICAgIH0KKworICAgIEdSZWZQdHI8R3N0UGFkPiB2aWRlb1NpbmtQYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV92aWRlb1NpbmsuZ2V0KCksICJzaW5rIikp
OworICAgIGlmICh2aWRlb1NpbmtQYWQpCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZCh2aWRlb1NpbmtQYWQuZ2V0KCksICJub3RpZnk6OmNhcHMiLCBHX0NBTExCQUNLKHZpZGVvU2lu
a0NhcHNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Omhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3QKK2Jvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRQYXNzQ09SU0FjY2Vzc0NoZWNrKCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fc291cmNlKQorICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5n
ZXQoKSkpCisgICAgICAgIHJldHVybiB3ZWJLaXRTcmNQYXNzZWRDT1JTQWNjZXNzQ2hlY2soV0VC
S0lUX1dFQl9TUkNfQ0FTVChtX3NvdXJjZS5nZXQoKSkpOworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNhblNhdmVNZWRpYURhdGEoKSBj
b25zdAoreworICAgIGlmIChpc0xpdmVTdHJlYW0oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKCFXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkpCisgICAgaWYgKG1f
dXJsLmlzTG9jYWxGaWxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgR1VuaXF1ZU91
dFB0cjxjaGFyPiBvcmlnaW5hbFVSSSwgcmVzb2x2ZWRVUkk7Ci0gICAgZ19vYmplY3RfZ2V0KG1f
c291cmNlLmdldCgpLCAibG9jYXRpb24iLCAmb3JpZ2luYWxVUkkub3V0UHRyKCksICJyZXNvbHZl
ZC1sb2NhdGlvbiIsICZyZXNvbHZlZFVSSS5vdXRQdHIoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFv
cmlnaW5hbFVSSSB8fCAhcmVzb2x2ZWRVUkkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIWdfc3RyY21wMChvcmlnaW5hbFVSSS5nZXQoKSwgcmVzb2x2ZWRVUkkuZ2V0KCkpKQorICAg
IGlmIChtX3VybC5wcm90b2NvbElzSW5IVFRQRmFtaWx5KCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgUmVmPFNlY3VyaXR5T3JpZ2luPiByZXNvbHZlZE9yaWdpbihTZWN1cml0eU9yaWdp
bjo6Y3JlYXRlRnJvbVN0cmluZyhTdHJpbmc6OmZyb21VVEY4KHJlc29sdmVkVVJJLmdldCgpKSkp
OwotICAgIFJlZjxTZWN1cml0eU9yaWdpbj4gcmVxdWVzdGVkT3JpZ2luKFNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGVGcm9tU3RyaW5nKFN0cmluZzo6ZnJvbVVURjgob3JpZ2luYWxVUkkuZ2V0KCkpKSk7
Ci0gICAgcmV0dXJuIHJlc29sdmVkT3JpZ2luLT5pc1NhbWVTY2hlbWVIb3N0UG9ydChyZXF1ZXN0
ZWRPcmlnaW4uZ2V0KCkpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmNhbmNlbExvYWQoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnJlYWR5VGltZXJGaXJlZCgpCiB7Ci0gICAgaWYgKG1fbmV0d29ya1N0YXRlIDwg
TWVkaWFQbGF5ZXI6OkxvYWRpbmcgfHwgbV9uZXR3b3JrU3RhdGUgPT0gTWVkaWFQbGF5ZXI6Okxv
YWRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcGlwZWxpbmUpCi0gICAgICAgIGNo
YW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1JFQURZKTsKKyAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJJbiBSRUFEWSBmb3IgdG9vIGxvbmcuIFJlbGVhc2luZyBwaXBlbGluZSBy
ZXNvdXJjZXMuIik7CisgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfTlVMTCk7CiB9
CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphc3luY1N0YXRlQ2hhbmdlRG9u
ZSgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YWNjZWxlcmF0ZWRSZW5kZXJp
bmdTdGF0ZUNoYW5nZWQoKQogewotICAgIGlmICghbV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJl
ZCkKLSAgICAgICAgcmV0dXJuOworICAgIG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCA9IG1f
cGxheWVyICYmIG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdFbmFibGVkKCk7Cit9CiAKLSAgICBpZiAobV9zZWVraW5nKSB7Ci0gICAgICAgIGlmICht
X3NlZWtJc1BlbmRpbmcpCi0gICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gc2Vl
a2VkIHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSBN
ZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0gICAgICAgICAgICBpZiAobV90aW1lT2ZPdmVybGFw
cGluZ1NlZWsgIT0gbV9zZWVrVGltZSAmJiBtX3RpbWVPZk92ZXJsYXBwaW5nU2Vlay5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgICAgICAgICBzZWVrKG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrKTsKLSAg
ICAgICAgICAgICAgICBtX3RpbWVPZk92ZXJsYXBwaW5nU2VlayA9IE1lZGlhVGltZTo6aW52YWxp
ZFRpbWUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBtX3RpbWVPZk92ZXJsYXBwaW5nU2VlayA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsK
KyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCitQbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworI2lmIFVTRShOSUNPU0lB
KQorICAgIHJldHVybiBtX25pY29zaWFMYXllci5wdHIoKTsKKyNlbHNlCisgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKj4odGhpcyk7CisjZW5kaWYKK30K
IAotICAgICAgICAgICAgLy8gVGhlIHBpcGVsaW5lIGNhbiBzdGlsbCBoYXZlIGEgcGVuZGluZyBz
dGF0ZS4gSW4gdGhpcyBjYXNlIGEgcG9zaXRpb24gcXVlcnkgd2lsbCBmYWlsLgotICAgICAgICAg
ICAgLy8gUmlnaHQgbm93IHdlIGNhbiB1c2UgbV9zZWVrVGltZSBhcyBhIGZhbGxiYWNrLgotICAg
ICAgICAgICAgbV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uID0gdHJ1ZTsK
LSAgICAgICAgICAgIHRpbWVDaGFuZ2VkKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAg
ICAgdXBkYXRlU3RhdGVzKCk7CisjaWYgVVNFKE5JQ09TSUEpCit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCit7CisjaWYgVVNFKEdTVFJFQU1F
Ul9IT0xFUFVOQ0gpCisgICAgcHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsKKyNlbmRpZgorfQor
I2Vsc2UKK1JlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnByb3h5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wbGF0Zm9y
bUxheWVyUHJveHkuY29weVJlZigpOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6dXBkYXRlU3RhdGVzKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
d2FwQnVmZmVyc0lmTmVlZGVkKCkKIHsKLSAgICBpZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIHJl
dHVybjsKKyNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKKyAgICBwdXNoTmV4dEhvbGVQdW5j
aEJ1ZmZlcigpOworI2VuZGlmCit9CisjZW5kaWYKIAotICAgIGlmIChtX2Vycm9yT2NjdXJlZCkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXNoVGV4dHVyZVRvQ29tcG9zaXRv
cigpCit7CisgICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsK
KyAgICBpZiAoIUdTVF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG9sZE5ldHdvcmtTdGF0ZSA9IG1fbmV0
d29ya1N0YXRlOwotICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG9sZFJlYWR5U3RhdGUgPSBt
X3JlYWR5U3RhdGU7Ci0gICAgR3N0U3RhdGUgcGVuZGluZzsKLSAgICBHc3RTdGF0ZSBzdGF0ZTsK
LSAgICBib29sIHN0YXRlUmVhbGx5Q2hhbmdlZCA9IGZhbHNlOwotCi0gICAgR3N0U3RhdGVDaGFu
Z2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGlu
ZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGluZywgMjUwICogR1NUX05TRUNPTkQpOwotICAgIGlmIChz
dGF0ZSAhPSBtX2N1cnJlbnRTdGF0ZSkgewotICAgICAgICBtX29sZFN0YXRlID0gbV9jdXJyZW50
U3RhdGU7Ci0gICAgICAgIG1fY3VycmVudFN0YXRlID0gc3RhdGU7Ci0gICAgICAgIHN0YXRlUmVh
bGx5Q2hhbmdlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRVcGRhdGVQbGF5YmFj
a1N0YXRlID0gZmFsc2U7Ci0gICAgc3dpdGNoIChnZXRTdGF0ZVJlc3VsdCkgewotICAgIGNhc2Ug
R1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOiB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIlN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRf
bmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcp
KTsKLQotICAgICAgICAvLyBEbyBub3RoaW5nIGlmIG9uIEVPUyBhbmQgc3RhdGUgY2hhbmdlZCB0
byBSRUFEWSB0byBhdm9pZCByZWNyZWF0aW5nIHRoZSBwbGF5ZXIKLSAgICAgICAgLy8gb24gSFRN
TE1lZGlhRWxlbWVudCBhbmQgcHJvcGVybHkgZ2VuZXJhdGUgdGhlIHZpZGVvICdlbmRlZCcgZXZl
bnQuCi0gICAgICAgIGlmIChtX2lzRW5kUmVhY2hlZCAmJiBtX2N1cnJlbnRTdGF0ZSA9PSBHU1Rf
U1RBVEVfUkVBRFkpCi0gICAgICAgICAgICBicmVhazsKKyAgICBhdXRvIHByb3h5T3BlcmF0aW9u
ID0KKyAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5
KQorICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkp
OwogCi0gICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IG1fY3VycmVudFN0YXRlIDw9IEdTVF9TVEFU
RV9SRUFEWTsKKyAgICAgICAgICAgIGlmICghcHJveHkuaXNBY3RpdmUoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAgICAgYm9vbCBkaWRCdWZmZXJpbmcgPSBtX2J1ZmZlcmluZzsK
KyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0ZyYW1lSG9sZGVyPiBmcmFtZUhv
bGRlciA9IG1ha2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4obV9zYW1wbGUuZ2V0KCksIG1f
dmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1hcHBlckZsYWdzLCAhbV91c2luZ0ZhbGxi
YWNrVmlkZW9TaW5rKTsKIAotICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdvcmsgc3Rh
dGVzLgotICAgICAgICBzd2l0Y2ggKG1fY3VycmVudFN0YXRlKSB7Ci0gICAgICAgIGNhc2UgR1NU
X1NUQVRFX05VTEw6Ci0gICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZU5vdGhpbmc7Ci0gICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpFbXB0
eTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9TVEFURV9SRUFEWToKLSAg
ICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7Ci0gICAg
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpFbXB0eTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9TVEFURV9QQVVTRUQ6Ci0gICAgICAgIGNhc2UgR1NU
X1NUQVRFX1BMQVlJTkc6Ci0gICAgICAgICAgICBpZiAobV9idWZmZXJpbmcpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobV9idWZmZXJpbmdQZXJjZW50YWdlID09IDEwMCkgewotICAgICAgICAgICAg
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBDb21wbGV0
ZS4iKTsKLSAgICAgICAgICAgICAgICAgICAgbV9idWZmZXJpbmcgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwot
ICAgICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IG1fZG93bmxvYWRGaW5pc2hlZCA/
IE1lZGlhUGxheWVyOjpJZGxlIDogTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5
ZXI6OkhhdmVDdXJyZW50RGF0YTsKLSAgICAgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUg
PSBNZWRpYVBsYXllcjo6TG9hZGluZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKG1fZG93bmxvYWRGaW5pc2hlZCkgewotICAgICAgICAgICAgICAgIG1fcmVhZHlT
dGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YTsKLSAgICAgICAgICAgICAgICBtX25l
dHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7CisgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGxheWVyQnVmZmVyOworICAg
ICAgICAgICAgaWYgKGZyYW1lSG9sZGVyLT5oYXNNYXBwZWRUZXh0dXJlcygpKSB7CisgICAgICAg
ICAgICAgICAgbGF5ZXJCdWZmZXIgPSBmcmFtZUhvbGRlci0+cGxhdGZvcm1MYXllckJ1ZmZlcigp
OworICAgICAgICAgICAgICAgIGlmICghbGF5ZXJCdWZmZXIpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICBsYXllckJ1ZmZlci0+c2V0VW5tYW5hZ2VkQnVmZmVy
RGF0YUhvbGRlcihXVEZNb3ZlKGZyYW1lSG9sZGVyKSk7CiAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0
YTsKLSAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5n
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBTeW5jIHN0YXRlcyB3aGVyZSBuZWVkZWQuCi0gICAgICAg
IGlmIChtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgICAgICBp
ZiAoIW1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgbm90aWZ5
UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKLSAgICAgICAgICAgICAgICBub3RpZnlQbGF5ZXJPZk11
dGUoKTsKLSAgICAgICAgICAgICAgICBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCA9IHRydWU7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkaWRCdWZmZXJpbmcgJiYgIW1fYnVm
ZmVyaW5nICYmICFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkgewotICAgICAgICAgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIFJlc3RhcnRpbmcgcGxh
eWJhY2suIik7Ci0gICAgICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVf
UExBWUlORyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50U3Rh
dGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKLSAgICAgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7
Ci0KLSAgICAgICAgICAgIGlmICgobV9idWZmZXJpbmcgJiYgIWlzTGl2ZVN0cmVhbSgpKSB8fCAh
bV9wbGF5YmFja1JhdGUpIHsKLSAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJbQnVmZmVyaW5nXSBQYXVzaW5nIHN0cmVhbSBmb3IgYnVmZmVyaW5nLiIpOwotICAg
ICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CisgICAg
ICAgICAgICAgICAgbGF5ZXJCdWZmZXIgPSBwcm94eS5nZXRBdmFpbGFibGVCdWZmZXIoZnJhbWVI
b2xkZXItPnNpemUoKSwgR0xfRE9OVF9DQVJFKTsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIWxheWVyQnVmZmVyKSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHRleHR1cmUgPSBC
aXRtYXBUZXh0dXJlR0w6OmNyZWF0ZShUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXM6Omdl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXQoZnJhbWVIb2xkZXItPnNp
emUoKSwgZnJhbWVIb2xkZXItPmhhc0FscGhhQ2hhbm5lbCgpID8gQml0bWFwVGV4dHVyZTo6U3Vw
cG9ydHNBbHBoYSA6IEJpdG1hcFRleHR1cmU6Ok5vRmxhZyk7CisgICAgICAgICAgICAgICAgICAg
IGxheWVyQnVmZmVyID0gbWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
cj4oV1RGTW92ZSh0ZXh0dXJlKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGZyYW1lSG9sZGVyLT51cGRhdGVUZXh0dXJlKGxheWVyQnVmZmVyLT50ZXh0dXJlR0woKSk7Cisg
ICAgICAgICAgICAgICAgbGF5ZXJCdWZmZXItPnNldEV4dHJhRmxhZ3MobV90ZXh0dXJlTWFwcGVy
RmxhZ3MgfCAoZnJhbWVIb2xkZXItPmhhc0FscGhhQ2hhbm5lbCgpID8gVGV4dHVyZU1hcHBlckdM
OjpTaG91bGRCbGVuZCA6IDApKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBtX3BhdXNlZCA9IHRydWU7Ci0KLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiT2xkIHN0YXRlOiAlcywgbmV3IHN0YXRlOiAlcyAocmVxdWVzdGVkOiAlcykiLCBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX29sZFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX3Jl
cXVlc3RlZFN0YXRlKSk7Ci0gICAgICAgIGlmIChtX3JlcXVlc3RlZFN0YXRlID09IEdTVF9TVEFU
RV9QQVVTRUQgJiYgbV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAg
ICAgICAgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICBHU1Rf
SU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlJlcXVlc3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgd2Fz
IGNvbXBsZXRlZCIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBFbWl0IHBsYXkgc3RhdGUgY2hhbmdlIG5vdGlmaWNh
dGlvbiBvbmx5IHdoZW4gZ29pbmcgdG8gUExBWUlORyBzbyB0aGF0Ci0gICAgICAgIC8vIHRoZSBt
ZWRpYSBlbGVtZW50IGdldHMgYSBjaGFuY2UgdG8gZW5hYmxlIGl0cyBwYWdlIHNsZWVwIGRpc2Fi
bGVyLgotICAgICAgICAvLyBFbWl0dGluZyB0aGlzIG5vdGlmaWNhdGlvbiBpbiBtb3JlIGNhc2Vz
IHRyaWdnZXJzIHVud2FudGVkIGNvZGUgcGF0aHMKLSAgICAgICAgLy8gYW5kIHRlc3QgdGltZW91
dHMuCi0gICAgICAgIGlmIChzdGF0ZVJlYWxseUNoYW5nZWQgJiYgKG1fb2xkU3RhdGUgIT0gbV9j
dXJyZW50U3RhdGUpICYmIChtX29sZFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQgJiYgbV9jdXJy
ZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpKSB7Ci0gICAgICAgICAgICBHU1RfSU5GT19P
QkpFQ1QocGlwZWxpbmUoKSwgIlBsYXliYWNrIHN0YXRlIGNoYW5nZWQgZnJvbSAlcyB0byAlcy4g
Tm90aWZ5aW5nIHRoZSBtZWRpYSBwbGF5ZXIgY2xpZW50IiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUobV9vbGRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0
YXRlKSk7Ci0gICAgICAgICAgICBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9TVEFURV9DSEFO
R0VfQVNZTkM6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkFzeW5jOiBT
dGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJy
ZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7Ci0gICAgICAg
IC8vIENoYW5nZSBpbiBwcm9ncmVzcy4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHU1RfU1RB
VEVfQ0hBTkdFX0ZBSUxVUkU6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IkZhaWx1cmU6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRf
bmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcp
KTsKLSAgICAgICAgLy8gQ2hhbmdlIGZhaWxlZAotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBH
U1RfU1RBVEVfQ0hBTkdFX05PX1BSRVJPTEw6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIk5vIHByZXJvbGw6IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVu
dF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9u
YW1lKHBlbmRpbmcpKTsKLQotICAgICAgICAvLyBMaXZlIHBpcGVsaW5lcyBnbyBpbiBQQVVTRUQg
d2l0aG91dCBwcmVyb2xsaW5nLgotICAgICAgICBtX2lzU3RyZWFtaW5nID0gdHJ1ZTsKLSAgICAg
ICAgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdGbGFnKCk7Ci0KLSAgICAgICAgaWYgKG1fY3VycmVu
dFN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZzsKLSAgICAgICAgZWxzZSBpZiAobV9jdXJyZW50U3RhdGUg
PT0gR1NUX1NUQVRFX1BBVVNFRCkgewotICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQ
bGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOwotICAg
ICAgICB9IGVsc2UgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQotICAg
ICAgICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVm
ZmVyKFdURk1vdmUobGF5ZXJCdWZmZXIpKTsKKyAgICAgICAgfTsKIAotICAgICAgICBpZiAoIW1f
cGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKQotICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0
ZShHU1RfU1RBVEVfUExBWUlORyk7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcHJveHlPcGVyYXRp
b24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmlj
b3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICBwcm94eU9wZXJhdGlvbigq
bV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCit9CisjZW5kaWYgLy8gVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQogCi0gICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRp
bmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIkVsc2UgOiAlZCIsIGdldFN0YXRlUmVzdWx0KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnQoKQor
eworICAgIEFTU0VSVChtX3NhbXBsZSk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAot
ICAgIG1fcmVxdWVzdGVkU3RhdGUgPSBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HOworICAgIG1fcGxh
eWVyLT5yZXBhaW50KCk7CiAKLSAgICBpZiAoc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSkKLSAg
ICAgICAgbV9wbGF5ZXItPnBsYXliYWNrU3RhdGVDaGFuZ2VkKCk7CisgICAgTG9ja0hvbGRlciBs
b2NrKG1fZHJhd011dGV4KTsKKyAgICBtX2RyYXdDb25kaXRpb24ubm90aWZ5T25lKCk7Cit9CiAK
LSAgICBpZiAobV9uZXR3b3JrU3RhdGUgIT0gb2xkTmV0d29ya1N0YXRlKSB7Ci0gICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk5ldHdvcmsgU3RhdGUgQ2hhbmdlZCBmcm9tICVz
IHRvICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcob2xkTmV0d29ya1N0YXRlKS51dGY4
KCkuZGF0YSgpLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhtX25ldHdvcmtTdGF0ZSkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Cit2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxl
KiBzYW1wbGUpCit7CisgICAgYm9vbCB0cmlnZ2VyUmVzaXplOworICAgIHsKKyAgICAgICAgYXV0
byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKKyAgICAgICAgdHJpZ2dl
clJlc2l6ZSA9ICFtX3NhbXBsZTsKKyAgICAgICAgbV9zYW1wbGUgPSBzYW1wbGU7CiAgICAgfQot
ICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgewotICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJSZWFkeSBTdGF0ZSBDaGFuZ2VkIGZyb20gJXMgdG8gJXMi
LCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhvbGRSZWFkeVN0YXRlKS51dGY4KCkuZGF0YSgp
LCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhtX3JlYWR5U3RhdGUpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworICAgIGlmICh0cmln
Z2VyUmVzaXplKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkZpcnN0
IHNhbXBsZSByZWFjaGVkIHRoZSBzaW5rLCB0cmlnZ2VyaW5nIHZpZGVvIGRpbWVuc2lvbnMgdXBk
YXRlIik7CisgICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9u
OjpTaXplQ2hhbmdlZCwgW3RoaXNdIHsKKyAgICAgICAgICAgIG1fcGxheWVyLT5zaXplQ2hhbmdl
ZCgpOworICAgICAgICB9KTsKICAgICB9CiAKLSAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0gR1NU
X1NUQVRFX0NIQU5HRV9TVUNDRVNTICYmIG1fY3VycmVudFN0YXRlID49IEdTVF9TVEFURV9QQVVT
RUQpIHsKLSAgICAgICAgdXBkYXRlUGxheWJhY2tSYXRlKCk7Ci0gICAgICAgIGlmIChtX3NlZWtJ
c1BlbmRpbmcpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltT
ZWVrXSBjb21taXR0aW5nIHBlbmRpbmcgc2VlayB0byAlcyIsIHRvU3RyaW5nKG1fc2Vla1RpbWUp
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgbV9zZWVrSXNQZW5kaW5nID0gZmFsc2U7Ci0g
ICAgICAgICAgICBtX3NlZWtpbmcgPSBkb1NlZWsobV9zZWVrVGltZSwgbV9wbGF5ZXItPnJhdGUo
KSwgc3RhdGljX2Nhc3Q8R3N0U2Vla0ZsYWdzPihHU1RfU0VFS19GTEFHX0ZMVVNIIHwgR1NUX1NF
RUtfRkxBR19BQ0NVUkFURSkpOwotICAgICAgICAgICAgaWYgKCFtX3NlZWtpbmcpIHsKLSAgICAg
ICAgICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwot
ICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBzZWVr
aW5nIHRvICVzIGZhaWxlZCIsIHRvU3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgaWYgKCFtX3JlbmRlcmluZ0NhbkJlQWNjZWxl
cmF0ZWQpIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kcmF3TXV0ZXgpOworICAgICAg
ICBpZiAobV9kZXN0cm95aW5nKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2RyYXdU
aW1lci5zdGFydE9uZVNob3QoMF9zKTsKKyAgICAgICAgbV9kcmF3Q29uZGl0aW9uLndhaXQobV9k
cmF3TXV0ZXgpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQorICAgIGlmIChtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmspIHsKKyAgICAgICAgTG9j
a0hvbGRlciBsb2NrKG1fZHJhd011dGV4KTsKKyAgICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9
CisgICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJv
eHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb3h5LnNjaGVkdWxl
VXBkYXRlT25Db21wb3NpdG9yVGhyZWFkKFt0aGlzXSB7IHRoaXMtPnB1c2hUZXh0dXJlVG9Db21w
b3NpdG9yKCk7IH0pOworICAgICAgICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAgICAg
aWYgKCFwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSkpCisgICAgICAgICAg
ICByZXR1cm47CisjZWxzZQorICAgICAgICBpZiAoIXByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3Jt
TGF5ZXJQcm94eSkpCisgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICAgICAgbV9kcmF3
VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CisgICAgICAgIG1fZHJhd0NvbmRpdGlvbi53YWl0KG1f
ZHJhd011dGV4KTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHVzaFRleHR1cmVUb0NvbXBvc2l0b3Io
KTsKKyNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCiB9CiAKLWJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdl
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnRDYWxsYmFjayhNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllciwgR3N0U2FtcGxlKiBzYW1wbGUpCiB7Ci0g
ICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgPT0gR1NUX01FU1NBR0VfU1RSRUFNX0NP
TExFQ1RJT04gJiYgIW1faXNMZWdhY3lQbGF5YmluKSB7Ci0gICAgICAgIEdSZWZQdHI8R3N0U3Ry
ZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKLSAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3Ry
ZWFtX2NvbGxlY3Rpb24obWVzc2FnZSwgJmNvbGxlY3Rpb24ub3V0UHRyKCkpOworICAgIHBsYXll
ci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlKTsKK30KIAotICAgICAgICBpZiAoY29sbGVjdGlvbikg
ewotICAgICAgICAgICAgbV9zdHJlYW1Db2xsZWN0aW9uLnN3YXAoY29sbGVjdGlvbik7Ci0gICAg
ICAgICAgICBtX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6U3RyZWFt
Q29sbGVjdGlvbkNoYW5nZWQsIFt0aGlzXSB7Ci0gICAgICAgICAgICAgICAgdGhpcy0+dXBkYXRl
VHJhY2tzKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNhbmNlbFJlcGFpbnQoYm9vbCBkZXN0cm95aW5nKQoreworICAgIC8v
IFRoZSBnb2FsIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gcmVsZWFzZSB0aGUgR1N0cmVhbWVyIHRo
cmVhZCBmcm9tIG1fZHJhd0NvbmRpdGlvbiBpbiB0cmlnZ2VyUmVwYWludCgpIGluIG5vbi1BQyBj
YXNlLAorICAgIC8vIHRvIGF2b2lkIGEgZGVhZGxvY2sgaWYgdGhlIHBsYXllciBnZXRzIHBhdXNl
ZCB3aGlsZSB3YWl0aW5nIGZvciBkcmF3aW5nIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MDAwMyk6CisgICAgLy8gdGhlIG1haW4gdGhyZWFkIGlzIHdhaXRp
bmcgZm9yIHRoZSBHU3RyZWFtZXIgdGhyZWFkIHRvIHBhdXNlLCBidXQgdGhlIEdTdHJlYW1lciB0
aHJlYWQgaXMgbG9ja2VkIHdhaXRpbmcgZm9yIHRoZQorICAgIC8vIG1haW4gdGhyZWFkIHRvIGRy
YXcuIFRoaXMgZGVhZGxvY2sgZG9lc24ndCBoYXBwZW4gd2hlbiB1c2luZyBBQyBiZWNhdXNlIHRo
ZSBzYW1wbGUgaXMgcHJvY2Vzc2VkIChub3QgcGFpbnRlZCkgaW4gdGhlIGNvbXBvc2l0b3IKKyAg
ICAvLyB0aHJlYWQsIHNvIHRoZSBtYWluIHRocmVhZCBjYW4gcmVxdWVzdCB0aGUgcGF1c2UgYW5k
IHdhaXQgaWYgdGhlIEdTdHJlYW1lciB0aHJlYWQgaXMgd2FpdGluZyBmb3IgdGhlIGNvbXBvc2l0
b3IgdGhyZWFkLgorICAgIC8vCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhbHNvIHVzZWQgd2hl
biBkZXN0cm95aW5nIHRoZSBwbGF5ZXIgKGRlc3Ryb3lpbmcgcGFyYW1ldGVyIGlzIHRydWUpLCB0
byByZWxlYXNlIHRoZSBnc3RyZWFtZXIgdGhyZWFkIGZyb20KKyAgICAvLyBtX2RyYXdDb25kaXRp
b24gYW5kIHRvIGVuc3VyZSB0aGF0IG5ldyB0cmlnZ2VyUmVwYWludCBjYWxscyB3b24ndCB3YWl0
IG9uIG1fZHJhd0NvbmRpdGlvbi4KKyAgICBpZiAoIW1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRl
ZCkgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2RyYXdNdXRleCk7CisgICAgICAgIG1f
ZHJhd1RpbWVyLnN0b3AoKTsKKyAgICAgICAgbV9kZXN0cm95aW5nID0gZGVzdHJveWluZzsKKyAg
ICAgICAgbV9kcmF3Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgIH0KK30KIAotICAgIHJldHVy
biBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVTeW5jTWVzc2FnZShtZXNz
YWdlKTsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZXBhaW50Q2FuY2VsbGVk
Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgcGxh
eWVyLT5jYW5jZWxSZXBhaW50KCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjptZWRpYUxvY2F0aW9uQ2hhbmdlZChHc3RNZXNzYWdlKiBtZXNzYWdlKQorI2lmIFVTRShH
U1RSRUFNRVJfR0wpCitHc3RGbG93UmV0dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bmV3U2FtcGxlQ2FsbGJhY2soR3N0RWxlbWVudCogc2luaywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKiBwbGF5ZXIpCiB7Ci0gICAgaWYgKG1fbWVkaWFMb2NhdGlvbnMpCi0gICAgICAgIGdz
dF9zdHJ1Y3R1cmVfZnJlZShtX21lZGlhTG9jYXRpb25zKTsKKyAgICBHUmVmUHRyPEdzdFNhbXBs
ZT4gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3NhbXBsZShHU1RfQVBQX1NJ
Tksoc2luaykpKTsKKyAgICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7Cisg
ICAgcmV0dXJuIEdTVF9GTE9XX09LOworfQogCi0gICAgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlKG1lc3NhZ2UpOwotICAgIGlmIChzdHJ1
Y3R1cmUpIHsKLSAgICAgICAgLy8gVGhpcyBzdHJ1Y3R1cmUgY2FuIGNvbnRhaW46Ci0gICAgICAg
IC8vIC0gYm90aCBhIG5ldy1sb2NhdGlvbiBzdHJpbmcgYW5kIGVtYmVkZGVkIGxvY2F0aW9ucyBz
dHJ1Y3R1cmUKLSAgICAgICAgLy8gLSBvciBvbmx5IGEgbmV3LWxvY2F0aW9uIHN0cmluZy4KLSAg
ICAgICAgbV9tZWRpYUxvY2F0aW9ucyA9IGdzdF9zdHJ1Y3R1cmVfY29weShzdHJ1Y3R1cmUpOwot
ICAgICAgICBjb25zdCBHVmFsdWUqIGxvY2F0aW9ucyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVl
KG1fbWVkaWFMb2NhdGlvbnMsICJsb2NhdGlvbnMiKTsKK0dzdEZsb3dSZXR1cm4gTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdQcmVyb2xsQ2FsbGJhY2soR3N0RWxlbWVudCogc2luaywg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgR1JlZlB0cjxHc3RT
YW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfcHVsbF9wcmVyb2xsKEdTVF9B
UFBfU0lOSyhzaW5rKSkpOworICAgIHBsYXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlLmdldCgp
KTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CiAKLSAgICAgICAgaWYgKGxvY2F0aW9ucykK
LSAgICAgICAgICAgIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCA9IHN0YXRpY19jYXN0PGlu
dD4oZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUobG9jYXRpb25zKSkgLTE7Cit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6Zmx1c2hDdXJyZW50QnVmZmVyKCkKK3sKKyAgICBhdXRvIHNh
bXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwogCi0gICAgICAgIGxvYWROZXh0
TG9jYXRpb24oKTsKKyAgICBpZiAobV9zYW1wbGUpIHsKKyAgICAgICAgLy8gUmVwbGFjZSBieSBh
IG5ldyBzYW1wbGUgaGF2aW5nIG9ubHkgdGhlIGNhcHMsIHNvIHRoaXMgZHVtbXkgc2FtcGxlIGlz
IHN0aWxsIHVzZWZ1bCB0byBnZXQgdGhlIGRpbWVuc2lvbnMuCisgICAgICAgIC8vIFRoaXMgcHJl
dmVudHMgcmVzaXppbmcgcHJvYmxlbXMgd2hlbiB0aGUgdmlkZW8gY2hhbmdlcyBpdHMgcXVhbGl0
eSBhbmQgYSBEUkFJTiBpcyBwZXJmb3JtZWQuCisgICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSog
aW5mbyA9IGdzdF9zYW1wbGVfZ2V0X2luZm8obV9zYW1wbGUuZ2V0KCkpOworICAgICAgICBtX3Nh
bXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhudWxscHRyLCBnc3Rfc2FtcGxlX2dldF9j
YXBzKG1fc2FtcGxlLmdldCgpKSwKKyAgICAgICAgICAgIGdzdF9zYW1wbGVfZ2V0X3NlZ21lbnQo
bV9zYW1wbGUuZ2V0KCkpLCBpbmZvID8gZ3N0X3N0cnVjdHVyZV9jb3B5KGluZm8pIDogbnVsbHB0
cikpOwogICAgIH0KKworICAgIGJvb2wgc2hvdWxkV2FpdCA9IG1fdmlkZW9EZWNvZGVyUGxhdGZv
cm0gPT0gR3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OlZpZGVvNExpbnV4OworICAgIGF1dG8gcHJv
eHlPcGVyYXRpb24gPSBbc2hvdWxkV2FpdCwgcGlwZWxpbmUgPSBwaXBlbGluZSgpXShUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkgeworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lLCAiRmx1c2hpbmcgdmlkZW8gc2FtcGxlICVzIiwgc2hvdWxkV2FpdCA/ICJz
eW5jaHJvbm91c2x5IiA6ICIiKTsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoIXNob3VsZFdh
aXQgPyAmcHJveHkubG9jaygpIDogbnVsbHB0cik7CisKKyAgICAgICAgaWYgKHByb3h5LmlzQWN0
aXZlKCkpCisgICAgICAgICAgICBwcm94eS5kcm9wQ3VycmVudEJ1ZmZlcldoaWxlUHJlc2Vydmlu
Z1RleHR1cmUoc2hvdWxkV2FpdCk7CisgICAgfTsKKworI2lmIFVTRShOSUNPU0lBKQorICAgIHBy
b3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgcHJveHlP
cGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgogfQorI2VuZGlmCiAKLWJv
b2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9uKCkKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CiB7Ci0gICAgaWYgKCFtX21lZGlhTG9jYXRpb25zKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgbV9zaXplID0gc2l6ZTsKK30KIAotICAgIGNvbnN0IEdWYWx1ZSogbG9jYXRpb25zID0gZ3N0
X3N0cnVjdHVyZV9nZXRfdmFsdWUobV9tZWRpYUxvY2F0aW9ucywgImxvY2F0aW9ucyIpOwotICAg
IGNvbnN0IGdjaGFyKiBuZXdMb2NhdGlvbiA9IG51bGxwdHI7Cit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CisgICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIWxvY2F0aW9ucykgewotICAgICAgICAvLyBGYWxsYmFj
ayBvbiBuZXctbG9jYXRpb24gc3RyaW5nLgotICAgICAgICBuZXdMb2NhdGlvbiA9IGdzdF9zdHJ1
Y3R1cmVfZ2V0X3N0cmluZyhtX21lZGlhTG9jYXRpb25zLCAibmV3LWxvY2F0aW9uIik7Ci0gICAg
ICAgIGlmICghbmV3TG9jYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQor
ICAgIGlmICghbV9wbGF5ZXItPnZpc2libGUoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFuZXdMb2NhdGlvbikgewotICAgICAgICBpZiAobV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4
IDwgMCkgewotICAgICAgICAgICAgbV9tZWRpYUxvY2F0aW9ucyA9IG51bGxwdHI7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhv
bGRMb2NrKG1fc2FtcGxlTXV0ZXgpOworICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5n
ZXQoKSkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBjb25zdCBHVmFsdWUqIGxvY2F0aW9u
ID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlKGxvY2F0aW9ucywgbV9tZWRpYUxvY2F0aW9uQ3Vy
cmVudEluZGV4KTsKLSAgICAgICAgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rf
dmFsdWVfZ2V0X3N0cnVjdHVyZShsb2NhdGlvbik7CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAg
ICAvLyBFbnN1cmUgdGhlIGlucHV0IGlzIFJHQkEuIFdlIGhhbmRsZSBZVVYgdmlkZW8gbmF0aXZl
bHksIHNvIHdlIG5lZWQgdG8gZG8KKyAgICAvLyB0aGlzIGNvbnZlcnNpb24gb24tZGVtYW5kIGhl
cmUuCisgICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIobV9zYW1w
bGUuZ2V0KCkpOworICAgIGlmIChVTkxJS0VMWSghR1NUX0lTX0JVRkZFUihidWZmZXIpKSkKKyAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmICghc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBt
X21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXgtLTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyhtX3NhbXBsZS5nZXQoKSk7
CisKKyAgICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOworICAgIGdzdF92aWRlb19pbmZvX2luaXQo
JnZpZGVvSW5mbyk7CisgICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnZpZGVvSW5m
bywgY2FwcykpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghR1NUX1ZJREVPX0lORk9fSVNf
UkdCKCZ2aWRlb0luZm8pKSB7CisgICAgICAgIGlmICghbV9jb2xvckNvbnZlcnQpIHsKKyAgICAg
ICAgICAgIEdzdE1lbW9yeSogbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeShidWZmZXIsIDAp
OworICAgICAgICAgICAgR3N0R0xDb250ZXh0KiBjb250ZXh0ID0gKChHc3RHTEJhc2VNZW1vcnkq
KW1lbSktPmNvbnRleHQ7CisgICAgICAgICAgICBtX2NvbG9yQ29udmVydCA9IGFkb3B0R1JlZihn
c3RfZ2xfY29sb3JfY29udmVydF9uZXcoY29udGV4dCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
bmV3TG9jYXRpb24gPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAibmV3LWxv
Y2F0aW9uIik7CisgICAgICAgIGlmICghbV9jb2xvckNvbnZlcnRJbnB1dENhcHMgfHwgIWdzdF9j
YXBzX2lzX2VxdWFsKG1fY29sb3JDb252ZXJ0SW5wdXRDYXBzLmdldCgpLCBjYXBzKSkgeworICAg
ICAgICAgICAgbV9jb2xvckNvbnZlcnRJbnB1dENhcHMgPSBjYXBzOworICAgICAgICAgICAgbV9j
b2xvckNvbnZlcnRPdXRwdXRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkoY2FwcykpOwor
I2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICAgICAgICAgIGNvbnN0IGdj
aGFyKiBmb3JtYXRTdHJpbmcgPSBHU1RfVklERU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbykg
PyAiUkdCQSIgOiAiQkdSeCI7CisjZWxzZQorICAgICAgICAgICAgY29uc3QgZ2NoYXIqIGZvcm1h
dFN0cmluZyA9IEdTVF9WSURFT19JTkZPX0hBU19BTFBIQSgmdmlkZW9JbmZvKSA/ICJSR0JBIiA6
ICJSR0J4IjsKKyNlbmRpZgorICAgICAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShtX2NvbG9y
Q29udmVydE91dHB1dENhcHMuZ2V0KCksICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBmb3JtYXRT
dHJpbmcsIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKCFnc3RfZ2xfY29sb3JfY29udmVydF9z
ZXRfY2FwcyhtX2NvbG9yQ29udmVydC5nZXQoKSwgY2FwcywgbV9jb2xvckNvbnZlcnRPdXRwdXRD
YXBzLmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBHUmVmUHRyPEdzdEJ1ZmZlcj4gcmdiQnVmZmVyID0gYWRvcHRHUmVmKGdzdF9nbF9jb2xvcl9j
b252ZXJ0X3BlcmZvcm0obV9jb2xvckNvbnZlcnQuZ2V0KCksIGJ1ZmZlcikpOworICAgICAgICBp
ZiAoVU5MSUtFTFkoIUdTVF9JU19CVUZGRVIocmdiQnVmZmVyLmdldCgpKSkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgY29uc3QgR3N0U3RydWN0dXJlKiBpbmZvID0gZ3N0X3NhbXBs
ZV9nZXRfaW5mbyhtX3NhbXBsZS5nZXQoKSk7CisgICAgICAgIG1fc2FtcGxlID0gYWRvcHRHUmVm
KGdzdF9zYW1wbGVfbmV3KHJnYkJ1ZmZlci5nZXQoKSwgbV9jb2xvckNvbnZlcnRPdXRwdXRDYXBz
LmdldCgpLAorICAgICAgICAgICAgZ3N0X3NhbXBsZV9nZXRfc2VnbWVudChtX3NhbXBsZS5nZXQo
KSksIGluZm8gPyBnc3Rfc3RydWN0dXJlX2NvcHkoaW5mbykgOiBudWxscHRyKSk7CiAgICAgfQor
I2VuZGlmCiAKLSAgICBpZiAobmV3TG9jYXRpb24pIHsKLSAgICAgICAgLy8gRm91bmQgYSBjYW5k
aWRhdGUuIG5ldy1sb2NhdGlvbiBpcyBub3QgYWx3YXlzIGFuIGFic29sdXRlIHVybAotICAgICAg
ICAvLyB0aG91Z2guIFdlIG5lZWQgdG8gdGFrZSB0aGUgYmFzZSBvZiB0aGUgY3VycmVudCB1cmwg
YW5kCi0gICAgICAgIC8vIGFwcGVuZCB0aGUgdmFsdWUgb2YgbmV3LWxvY2F0aW9uIHRvIGl0Lgot
ICAgICAgICBVUkwgYmFzZVVybCA9IGdzdF91cmlfaXNfdmFsaWQobmV3TG9jYXRpb24pID8gVVJM
KCkgOiBtX3VybDsKLSAgICAgICAgVVJMIG5ld1VybCA9IFVSTChiYXNlVXJsLCBuZXdMb2NhdGlv
bik7CisgICAgYXV0byBnc3RJbWFnZSA9IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShtX3Nh
bXBsZS5nZXQoKSk7CisgICAgaWYgKCFnc3RJbWFnZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IHBsYXliaW5VcmxTdHI7Ci0gICAgICAgIGdfb2JqZWN0
X2dldChtX3BpcGVsaW5lLmdldCgpLCAiY3VycmVudC11cmkiLCAmcGxheWJpblVybFN0ci5vdXRQ
dHIoKSwgbnVsbHB0cik7Ci0gICAgICAgIFVSTCBwbGF5YmluVXJsKFVSTCgpLCBwbGF5YmluVXJs
U3RyLmdldCgpKTsKKyAgICBjb250ZXh0LmRyYXdJbWFnZShnc3RJbWFnZS0+aW1hZ2UoKSwgcmVj
dCwgZ3N0SW1hZ2UtPnJlY3QoKSwgeyBDb21wb3NpdGVDb3B5LCBtX3JlbmRlcmluZ0NhbkJlQWNj
ZWxlcmF0ZWQgPyBtX3ZpZGVvU291cmNlT3JpZW50YXRpb24gOiBJbWFnZU9yaWVudGF0aW9uKCkg
fSk7Cit9CiAKLSAgICAgICAgaWYgKHBsYXliaW5VcmwgPT0gbmV3VXJsKSB7Ci0gICAgICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5YmluIGFscmVhZHkgaGFuZGxlZCBy
ZWRpcmVjdGlvbi4iKTsKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCBvdXRwdXRUZXh0dXJlLCBHQzNE
ZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsRm9ybWF0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBmbGlwWSkKK3sKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiAKLSAgICAgICAgICAg
IG1fdXJsID0gcGxheWJpblVybDsKKyAgICBpZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9CisgICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9SRUFEWSk7Ci0gICAgICAgIGF1
dG8gc2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1fdXJsKTsKLSAgICAg
ICAgaWYgKHNlY3VyaXR5T3JpZ2luLT5jYW5SZXF1ZXN0KG5ld1VybCkpIHsKLSAgICAgICAgICAg
IEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiTmV3IG1lZGlhIHVybDogJXMiLCBuZXdVcmwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9j
ayhtX3NhbXBsZU11dGV4KTsKIAotICAgICAgICAgICAgLy8gUmVzZXQgcGxheWVyIHN0YXRlcy4K
LSAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7Ci0gICAg
ICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwotICAgICAgICAgICAgbV9y
ZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICAgICAgbV9wbGF5
ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgaWYgKCFHU1RfSVNfU0FNUExFKG1fc2FtcGxl
LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICAvLyBSZXNldCBw
aXBlbGluZSBzdGF0ZS4KLSAgICAgICAgICAgIG1fcmVzZXRQaXBlbGluZSA9IHRydWU7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVIb2xkZXI+IGZyYW1lSG9sZGVyID0gbWFrZVVu
aXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPihtX3NhbXBsZS5nZXQoKSwgbV92aWRlb0RlY29kZXJQ
bGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3MsIHRydWUpOwogCi0gICAgICAgICAgICBHc3RT
dGF0ZSBzdGF0ZTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5l
LmdldCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOwotICAgICAgICAgICAgaWYgKHN0YXRlIDw9IEdT
VF9TVEFURV9SRUFEWSkgewotICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgbmV3IHVyaSBhbmQg
c3RhcnQgcGxheWluZy4KLSAgICAgICAgICAgICAgICBzZXRQbGF5YmluVVJMKG5ld1VybCk7Ci0g
ICAgICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJOb3QgYWxsb3dlZCB0
byBsb2FkIG5ldyBtZWRpYSBsb2NhdGlvbjogJXMiLCBuZXdVcmwuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgfQotICAgIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleC0tOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJCdWZmZXI+IGxheWVyQnVmZmVyID0gZnJhbWVIb2xkZXItPnBsYXRmb3JtTGF5ZXJCdWZm
ZXIoKTsKKyAgICBpZiAoIWxheWVyQnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkU3RhdGVDaGFuZ2VkKCkKLXsKLSAg
ICB1cGRhdGVTdGF0ZXMoKTsKLX0KKyAgICBhdXRvIHNpemUgPSBmcmFtZUhvbGRlci0+c2l6ZSgp
OworICAgIGlmIChtX3ZpZGVvU291cmNlT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkK
KyAgICAgICAgc2l6ZSA9IHNpemUudHJhbnNwb3NlZFNpemUoKTsKIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnRpbWVDaGFuZ2VkKCkKLXsKLSAgICB1cGRhdGVTdGF0ZXMoKTsK
LSAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKyAgICBpZiAoIW1fdmlkZW9UZXh0dXJlQ29w
aWVyKQorICAgICAgICBtX3ZpZGVvVGV4dHVyZUNvcGllciA9IG1ha2VVbmlxdWU8VmlkZW9UZXh0
dXJlQ29waWVyR1N0cmVhbWVyPihURVhUVVJFX0NPUElFUl9DT0xPUl9DT05WRVJUX0ZMQUcpOwor
CisgICAgZnJhbWVIb2xkZXItPndhaXRGb3JDUFVTeW5jKCk7CisKKyAgICByZXR1cm4gbV92aWRl
b1RleHR1cmVDb3BpZXItPmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSgqbGF5ZXJC
dWZmZXIuZ2V0KCksIHNpemUsIG91dHB1dFRleHR1cmUsIG91dHB1dFRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBtX3ZpZGVvU291cmNlT3JpZW50YXRp
b24pOwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkRW5kKCkKK05h
dGl2ZUltYWdlUHRyIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0aXZlSW1hZ2VGb3JD
dXJyZW50VGltZSgpCiB7Ci0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5YmFj
ayBlbmRlZCIpOworI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKKyAgICBpZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIC8vIFN5bmNocm9uaXplIHBvc2l0aW9uIGFuZCBkdXJhdGlvbiB2YWx1ZXMg
dG8gbm90IGNvbmZ1c2UgdGhlCi0gICAgLy8gSFRNTE1lZGlhRWxlbWVudC4gSW4gc29tZSBjYXNl
cyBsaWtlIHJldmVyc2UgcGxheWJhY2sgdGhlCi0gICAgLy8gcG9zaXRpb24gaXMgbm90IGFsd2F5
cyByZXBvcnRlZCBhcyAwIGZvciBpbnN0YW5jZS4KLSAgICBtX2NhY2hlZFBvc2l0aW9uID0gTWVk
aWFUaW1lOjppbnZhbGlkVGltZSgpOwotICAgIE1lZGlhVGltZSBub3cgPSBjdXJyZW50TWVkaWFU
aW1lKCk7Ci0gICAgaWYgKG5vdyA+IE1lZGlhVGltZTo6emVyb1RpbWUoKSAmJiAhbV9zZWVraW5n
KSB7Ci0gICAgICAgIG1fY2FjaGVkRHVyYXRpb24gPSBub3c7Ci0gICAgICAgIG1fcGxheWVyLT5k
dXJhdGlvbkNoYW5nZWQoKTsKLSAgICB9CisgICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9j
ayhtX3NhbXBsZU11dGV4KTsKIAotICAgIG1faXNFbmRSZWFjaGVkID0gdHJ1ZTsKKyAgICBpZiAo
IUdTVF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIGlmICghbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVySXNMb29waW5nKCkpIHsK
LSAgICAgICAgbV9wYXVzZWQgPSB0cnVlOwotICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdT
VF9TVEFURV9SRUFEWSk7Ci0gICAgICAgIG1fZG93bmxvYWRGaW5pc2hlZCA9IGZhbHNlOwotICAg
IH0KLSAgICB0aW1lQ2hhbmdlZCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0ZyYW1l
SG9sZGVyPiBmcmFtZUhvbGRlciA9IG1ha2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4obV9z
YW1wbGUuZ2V0KCksIG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1hcHBlckZsYWdz
LCB0cnVlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ckJ1ZmZlcj4gbGF5ZXJCdWZmZXIgPSBmcmFtZUhvbGRlci0+cGxhdGZvcm1MYXllckJ1ZmZlcigp
OworICAgIGlmICghbGF5ZXJCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
YXV0byBzaXplID0gZnJhbWVIb2xkZXItPnNpemUoKTsKKyAgICBpZiAobV92aWRlb1NvdXJjZU9y
aWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCisgICAgICAgIHNpemUgPSBzaXplLnRyYW5z
cG9zZWRTaXplKCk7CisKKyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6
OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBj
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmICghbV92aWRlb1RleHR1cmVD
b3BpZXIpCisgICAgICAgIG1fdmlkZW9UZXh0dXJlQ29waWVyID0gbWFrZVVuaXF1ZTxWaWRlb1Rl
eHR1cmVDb3BpZXJHU3RyZWFtZXI+KFRFWFRVUkVfQ09QSUVSX0NPTE9SX0NPTlZFUlRfRkxBRyk7
CisKKyAgICBmcmFtZUhvbGRlci0+d2FpdEZvckNQVVN5bmMoKTsKKworICAgIGlmICghbV92aWRl
b1RleHR1cmVDb3BpZXItPmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSgqbGF5ZXJC
dWZmZXIuZ2V0KCksIHNpemUsIDAsIEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBtX3ZpZGVvU291cmNlT3JpZW50YXRpb24pKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19nbF9zdXJm
YWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05U
RU5UX0NPTE9SX0FMUEhBLCBtX3ZpZGVvVGV4dHVyZUNvcGllci0+cmVzdWx0VGV4dHVyZSgpLCBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKyNlbHNlCisgICAgcmV0dXJuIG51bGxwdHI7
CisjZW5kaWYKIH0KKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzZXRWaWRlb1NvdXJjZU9yaWVudGF0aW9uKEltYWdlT3JpZW50YXRp
b24gb3JpZW50YXRpb24pCiB7Ci0gICAgTWVkaWFUaW1lIHByZXZpb3VzRHVyYXRpb24gPSBkdXJh
dGlvbk1lZGlhVGltZSgpOwotICAgIG1fY2FjaGVkRHVyYXRpb24gPSBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCk7CisgICAgaWYgKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA9PSBvcmllbnRhdGlv
bikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gQXZvaWQgZW1pdGluZyBkdXJhdGlvbmNoYW5n
ZWQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHByZXZpb3VzCi0gICAgLy8gZHVyYXRpb24gd2FzIDAg
YmVjYXVzZSB0aGF0IGNhc2UgaXMgYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZQotICAgIC8vIEhUTUxN
ZWRpYUVsZW1lbnQuCi0gICAgaWYgKHByZXZpb3VzRHVyYXRpb24gJiYgZHVyYXRpb25NZWRpYVRp
bWUoKSAhPSBwcmV2aW91c0R1cmF0aW9uKQotICAgICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFu
Z2VkKCk7CisgICAgbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uID0gb3JpZW50YXRpb247CisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpOwor
I2VuZGlmCiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkaW5nRmFp
bGVkKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya0Vycm9yLCBNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZSByZWFkeVN0YXRlLCBib29sIGZvcmNlTm90aWZpY2F0aW9ucykKKyNpZiBVU0Uo
VEVYVFVSRV9NQVBQRVJfR0wpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBk
YXRlVGV4dHVyZU1hcHBlckZsYWdzKCkKIHsKLSAgICBHU1RfV0FSTklORygiTG9hZGluZyBmYWls
ZWQsIGVycm9yOiAlcyIsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG5ldHdvcmtFcnJvciku
dXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBtX2Vycm9yT2NjdXJlZCA9IHRydWU7Ci0gICAgaWYgKGZv
cmNlTm90aWZpY2F0aW9ucyB8fCBtX25ldHdvcmtTdGF0ZSAhPSBuZXR3b3JrRXJyb3IpIHsKLSAg
ICAgICAgbV9uZXR3b3JrU3RhdGUgPSBuZXR3b3JrRXJyb3I7Ci0gICAgICAgIG1fcGxheWVyLT5u
ZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Ci0gICAgfQotICAgIGlmIChmb3JjZU5vdGlmaWNhdGlvbnMg
fHwgbV9yZWFkeVN0YXRlICE9IHJlYWR5U3RhdGUpIHsKLSAgICAgICAgbV9yZWFkeVN0YXRlID0g
cmVhZHlTdGF0ZTsKLSAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAg
c3dpdGNoIChtX3ZpZGVvU291cmNlT3JpZW50YXRpb24pIHsKKyAgICBjYXNlIEltYWdlT3JpZW50
YXRpb246Ok9yaWdpblRvcExlZnQ6CisgICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gMDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5SaWdodFRv
cDoKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyRmxhZ3MgPSBUZXh0dXJlTWFwcGVyR0w6OlNob3Vs
ZFJvdGF0ZVRleHR1cmU5MDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbWFnZU9yaWVudGF0
aW9uOjpPcmlnaW5Cb3R0b21SaWdodDoKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyRmxhZ3MgPSBU
ZXh0dXJlTWFwcGVyR0w6OlNob3VsZFJvdGF0ZVRleHR1cmUxODA7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luTGVmdEJvdHRvbToKKyAgICAgICAgbV90
ZXh0dXJlTWFwcGVyRmxhZ3MgPSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZFJvdGF0ZVRleHR1cmUy
NzA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgT3JpZ2luVG9wUmlnaHQsIE9yaWdpbkJvdHRvbUxlZnQsIE9yaWdpbkxlZnRUb3AgYW5kIE9y
aWdpblJpZ2h0Qm90dG9tPworICAgICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9IDA7CisgICAg
ICAgIGJyZWFrOwogICAgIH0KLQotICAgIC8vIExvYWRpbmcgZmFpbGVkLCByZW1vdmUgcmVhZHkg
dGltZXIuCi0gICAgbV9yZWFkeVRpbWVySGFuZGxlci5zdG9wKCk7CiB9CisjZW5kaWYKIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmdldFN1cHBvcnRlZFR5cGVzKEhhc2hTZXQ8
U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiB0eXBlcykKK2Jvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAogewotICAgIGF1
dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9IEdTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xl
dG9uKCk7Ci0gICAgdHlwZXMgPSBnc3RSZWdpc3RyeVNjYW5uZXIubWltZVR5cGVTZXQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQ
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQorTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKIHsKLSAgICBNZWRp
YVBsYXllcjo6U3VwcG9ydHNUeXBlIHJlc3VsdCA9IE1lZGlhUGxheWVyOjpJc05vdFN1cHBvcnRl
ZDsKLSNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQotICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRSBpcyBpbiBjaGFyZ2Ugb2YgbWVkaWFzb3VyY2UgcGxheWJhY2ssIG5vdCB1cy4K
LSAgICBpZiAocGFyYW1ldGVycy5pc01lZGlhU291cmNlKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotI2VuZGlmCisgICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhp
bmcpCisgICAgICAgIHJldHVybiBNZWRpYVBsYXllcjo6VW5rbm93bjsKIAotI2lmICFFTkFCTEUo
TUVESUFfU1RSRUFNKQotICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTdHJlYW0pCi0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0jZW5kaWYKKyAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCisgICAgICAg
IHJldHVybiBNZWRpYVBsYXllcjo6TGl2ZVN0cmVhbTsKIAotICAgIGlmIChwYXJhbWV0ZXJzLnR5
cGUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBNZWRpYVBs
YXllcjo6RG93bmxvYWQ7Cit9CiAKLSAgICBHU1RfREVCVUcoIkNoZWNraW5nIG1pbWUtdHlwZSBc
IiVzXCIiLCBwYXJhbWV0ZXJzLnR5cGUucmF3KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgYXV0byBj
b250YWluZXJUeXBlID0gcGFyYW1ldGVycy50eXBlLmNvbnRhaW5lclR5cGUoKTsKLSAgICBhdXRv
JiBnc3RSZWdpc3RyeVNjYW5uZXIgPSBHU3RyZWFtZXJSZWdpc3RyeVNjYW5uZXI6OnNpbmdsZXRv
bigpOwotICAgIGlmIChnc3RSZWdpc3RyeVNjYW5uZXIuaXNDb250YWluZXJUeXBlU3VwcG9ydGVk
KGNvbnRhaW5lclR5cGUpKSB7Ci0gICAgICAgIC8vIFNwZWMgc2F5cyB3ZSBzaG91bGQgbm90IHJl
dHVybiAicHJvYmFibHkiIGlmIHRoZSBjb2RlY3Mgc3RyaW5nIGlzIGVtcHR5LgotICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBjb2RlY3MgPSBwYXJhbWV0ZXJzLnR5cGUuY29kZWNzKCk7Ci0gICAgICAg
IHJlc3VsdCA9IGNvZGVjcy5pc0VtcHR5KCkgPyBNZWRpYVBsYXllcjo6TWF5QmVTdXBwb3J0ZWQg
OiAoZ3N0UmVnaXN0cnlTY2FubmVyLmFyZUFsbENvZGVjc1N1cHBvcnRlZChjb2RlY3MpID8gTWVk
aWFQbGF5ZXI6OklzU3VwcG9ydGVkIDogTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkKTsKLSAg
ICB9CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKK0dzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y3JlYXRlR0xBcHBTaW5rKCkKK3sKKyAgICBHc3RFbGVtZW50KiBhcHBzaW5r
ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzaW5rIiwgIndlYmtpdC1nbC12aWRlby1z
aW5rIik7CisgICAgaWYgKCFhcHBzaW5rKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGdfb2JqZWN0X3NldChhcHBzaW5rLCAiZW5hYmxlLWxhc3Qtc2FtcGxlIiwgRkFMU0UsICJlbWl0
LXNpZ25hbHMiLCBUUlVFLCAibWF4LWJ1ZmZlcnMiLCAxLCBudWxscHRyKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KGFwcHNpbmssICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhuZXdTYW1wbGVDYWxs
YmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoYXBwc2luaywgIm5ldy1wcmVyb2xs
IiwgR19DQUxMQkFDSyhuZXdQcmVyb2xsQ2FsbGJhY2spLCB0aGlzKTsKKworICAgIEdSZWZQdHI8
R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoYXBwc2lu
aywgInNpbmsiKSk7CisgICAgZ3N0X3BhZF9hZGRfcHJvYmUocGFkLmdldCgpLCBzdGF0aWNfY2Fz
dDxHc3RQYWRQcm9iZVR5cGU+KEdTVF9QQURfUFJPQkVfVFlQRV9QVVNIIHwgR1NUX1BBRF9QUk9C
RV9UWVBFX1FVRVJZX0RPV05TVFJFQU0gfCBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0gp
LCBbXSAoR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZvLCAgZ3BvaW50ZXIgdXNlckRhdGEp
IC0+IEdzdFBhZFByb2JlUmV0dXJuIHsKKyAgICAgICAgLy8gSW4gc29tZSBwbGF0Zm9ybXMgKGUu
Zy4gT3Blbk1BWCBvbiB0aGUgUmFzcGJlcnJ5IFBpKSB3aGVuIGEgcmVzb2x1dGlvbiBjaGFuZ2Ug
b2NjdXJzIHRoZQorICAgICAgICAvLyBwaXBlbGluZSBoYXMgdG8gYmUgZHJhaW5lZCBiZWZvcmUg
YSBmcmFtZSB3aXRoIHRoZSBuZXcgcmVzb2x1dGlvbiBjYW4gYmUgZGVjb2RlZC4KKyAgICAgICAg
Ly8gSW4gdGhpcyBjb250ZXh0LCBpdCdzIGltcG9ydGFudCB0aGF0IHdlIGRvbid0IGhvbGQgcmVm
ZXJlbmNlcyB0byBhbnkgcHJldmlvdXMgZnJhbWUKKyAgICAgICAgLy8gKGUuZy4gbV9zYW1wbGUp
IHNvIHRoYXQgZGVjb2RpbmcgY2FuIGNvbnRpbnVlLgorICAgICAgICAvLyBXZSBhcmUgYWxzbyBu
b3Qgc3VwcG9zZWQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgZnJhbWUgYWZ0ZXIgYSBmbHVzaC4KKyAg
ICAgICAgaWYgKGluZm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNUUkVB
TSkgeworICAgICAgICAgICAgaWYgKEdTVF9RVUVSWV9UWVBFKEdTVF9QQURfUFJPQkVfSU5GT19R
VUVSWShpbmZvKSkgIT0gR1NUX1FVRVJZX0RSQUlOKQorICAgICAgICAgICAgICAgIHJldHVybiBH
U1RfUEFEX1BST0JFX09LOworICAgICAgICAgICAgR1NUX0RFQlVHKCJBY3RpbmcgdXBvbiBEUkFJ
TiBxdWVyeSIpOworICAgICAgICB9CisgICAgICAgIGlmIChpbmZvLT50eXBlICYgR1NUX1BBRF9Q
Uk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSB7CisgICAgICAgICAgICBpZiAoR1NUX0VWRU5UX1RZUEUo
R1NUX1BBRF9QUk9CRV9JTkZPX0VWRU5UKGluZm8pKSAhPSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7CisgICAgICAgICAgICBH
U1RfREVCVUcoIkFjdGluZyB1cG9uIGZsdXNoLXN0YXJ0IGV2ZW50Iik7CisgICAgICAgIH0KIAot
ICAgIGF1dG8gZmluYWxSZXN1bHQgPSBleHRlbmRlZFN1cHBvcnRzVHlwZShwYXJhbWV0ZXJzLCBy
ZXN1bHQpOwotICAgIEdTVF9ERUJVRygiU3VwcG9ydGVkOiAlcyIsIGNvbnZlcnRFbnVtZXJhdGlv
blRvU3RyaW5nKGZpbmFsUmVzdWx0KS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gZmluYWxS
ZXN1bHQ7CisgICAgICAgIGF1dG8qIHBsYXllciA9IHN0YXRpY19jYXN0PE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAgcGxheWVyLT5mbHVzaEN1cnJlbnRC
dWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7CisgICAgfSwgdGhpcywg
bnVsbHB0cik7CisKKyAgICByZXR1cm4gYXBwc2luazsKIH0KIAotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpCitHc3RFbGVtZW50
KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2lua0dMKCkKIHsKLSAg
ICBpZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIHJldHVybjsKKyAgICBnYm9vbGVhbiByZXN1bHQg
PSBUUlVFOworICAgIEdzdEVsZW1lbnQqIHZpZGVvU2luayA9IGdzdF9iaW5fbmV3KG51bGxwdHIp
OworICAgIEdzdEVsZW1lbnQqIHVwbG9hZCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZ2x1
cGxvYWQiLCBudWxscHRyKTsKKyAgICBHc3RFbGVtZW50KiBjb2xvcmNvbnZlcnQgPSBnc3RfZWxl
bWVudF9mYWN0b3J5X21ha2UoImdsY29sb3Jjb252ZXJ0IiwgbnVsbHB0cik7CisgICAgR3N0RWxl
bWVudCogYXBwc2luayA9IGNyZWF0ZUdMQXBwU2luaygpOwogCi0gICAgdW5zaWduZWQgZmxhZ3M7
Ci0gICAgZ19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJmbGFncyIsICZmbGFncywgbnVs
bHB0cik7CisgICAgLy8gZ2xzaW5rYmluIGlzIG5vdCB1c2VkIGJlY2F1c2UgaXQgaW5jbHVkZXMg
Z2xjb2xvcmNvbnZlcnQgd2hpY2ggb25seSBwcm9jZXNzIFJHQkEsCisgICAgLy8gYnV0IHdlIGNh
biBkaXNwbGF5IFlVViBmb3JtYXRzIHRvby4KIAotICAgIHVuc2lnbmVkIGZsYWdEb3dubG9hZCA9
IGdldEdzdFBsYXlGbGFnKCJkb3dubG9hZCIpOworICAgIGlmICghYXBwc2luayB8fCAhdXBsb2Fk
IHx8ICFjb2xvcmNvbnZlcnQpIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBjcmVh
dGUgR3N0R0wgZWxlbWVudHMiKTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZih2aWRlb1Npbmsp
OwogCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzdG9wIGRvd25sb2FkaW5nIGlmIHdlIGFscmVh
ZHkgc3RhcnRlZCBpdC4KLSAgICBpZiAoZmxhZ3MgJiBmbGFnRG93bmxvYWQgJiYgbV9yZWFkeVN0
YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nICYmICFtX3Jlc2V0UGlwZWxpbmUpIHsKLSAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRG93bmxvYWQgYWxyZWFkeSBzdGFy
dGVkLCBub3Qgc3RhcnRpbmcgYWdhaW4iKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
dXBsb2FkKQorICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZih1cGxvYWQpOworICAgICAgICBp
ZiAoY29sb3Jjb252ZXJ0KQorICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZihjb2xvcmNvbnZl
cnQpOworICAgICAgICBpZiAoYXBwc2luaykKKyAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYo
YXBwc2luayk7CisKKyAgICAgICAgZ193YXJuaW5nKCJXZWJLaXQgd2Fzbid0IGFibGUgdG8gZmlu
ZCB0aGUgR1N0cmVhbWVyIG9wZW5nbCBwbHVnaW4uIEhhcmR3YXJlLWFjY2VsZXJhdGVkIHplcm8t
Y29weSB2aWRlbyByZW5kZXJpbmcgY2FuJ3QgYmUgZW5hYmxlZCB3aXRob3V0IHRoaXMgcGx1Z2lu
LiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBib29sIHNob3VsZERv
d25sb2FkID0gIWlzTGl2ZVN0cmVhbSgpICYmIG1fcHJlbG9hZCA9PSBNZWRpYVBsYXllcjo6QXV0
bzsKLSAgICBpZiAoc2hvdWxkRG93bmxvYWQpIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBp
cGVsaW5lKCksICJFbmFibGluZyBvbi1kaXNrIGJ1ZmZlcmluZyIpOwotICAgICAgICBnX29iamVj
dF9zZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwgZmxhZ3MgfCBmbGFnRG93bmxvYWQsIG51
bGxwdHIpOwotICAgICAgICBtX2ZpbGxUaW1lci5zdGFydFJlcGVhdGluZygyMDBfbXMpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiRGlzYWJsaW5n
IG9uLWRpc2sgYnVmZmVyaW5nIik7Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdl
dCgpLCAiZmxhZ3MiLCBmbGFncyAmIH5mbGFnRG93bmxvYWQsIG51bGxwdHIpOwotICAgICAgICBt
X2ZpbGxUaW1lci5zdG9wKCk7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKHZpZGVvU2lu
ayksIHVwbG9hZCwgY29sb3Jjb252ZXJ0LCBhcHBzaW5rLCBudWxscHRyKTsKKworICAgIC8vIFdv
cmthcm91bmQgdW50aWwgd2UgY2FuIGRlcGVuZCBvbiBHU3RyZWFtZXIgMS4xNi4yLgorICAgIC8v
IGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFz
ZS9jb21taXQvOGQzMmRlMDkwNTU0Y2YyOWZlMzU5ZjgzYWE0NjAwMGJhNjU4YTY5MworICAgIC8v
IEZvcmNpbmcgYSBjb2xvciBjb252ZXJzaW9uIHRvIFJHQkEgaGVyZSBhbGxvd3MgZ2x1cGxvYWQg
dG8gaW50ZXJuYWxseSB1c2UKKyAgICAvLyBhbiB1cGxvYWRlciB0aGF0IGFkZHMgYSBWaWRlb01l
dGEsIHRocm91Z2ggdGhlIFRleHR1cmVVcGxvYWRNZXRhIGNhcHMKKyAgICAvLyBmZWF0dXJlLCB3
aXRob3V0IG5lZWRpbmcgdGhlIHBhdGNoIGFib3ZlLiBIb3dldmVyIHRoaXMgc3BlY2lmaWMgY2Fw
cworICAgIC8vIGZlYXR1cmUgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCBmcm9tIEdTdHJlYW1lciBz
byBpdCBpcyBjb25zaWRlcmVkIGEKKyAgICAvLyBzaG9ydC10ZXJtIHdvcmthcm91bmQuIFRoaXMg
Y29kZSBwYXRoIG1vc3QgbGlrZWx5IHdpbGwgaGF2ZSBhIG5lZ2F0aXZlCisgICAgLy8gcGVyZm9y
bWFuY2UgaW1wYWN0IG9uIGVtYmVkZGVkIHBsYXRmb3JtcyBhcyB3ZWxsLiBEb3duc3RyZWFtIGVt
YmVkZGVycworICAgIC8vIGFyZSBoaWdobHkgZW5jb3VyYWdlZCB0byBjaGVycnktcGljayB0aGUg
cGF0Y2ggbGlua2VkIGFib3ZlIGluIHRoZWlyIEJTUAorICAgIC8vIGFuZCBzZXQgdGhlIFdFQktJ
VF9HU1RfTk9fUkdCQV9DT05WRVJTSU9OIGVudmlyb25tZW50IHZhcmlhYmxlIHVudGlsCisgICAg
Ly8gR1N0cmVhbWVyIDEuMTYuMiBpcyByZWxlYXNlZC4KKyAgICAvLyBTZWUgYWxzbyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNDIyCisgICAgR1JlZlB0cjxHc3RD
YXBzPiBjYXBzOworICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTYsIDIpIHx8IGdl
dGVudigiV0VCS0lUX0dTVF9OT19SR0JBX0NPTlZFUlNJT04iKSkKKyAgICAgICAgY2FwcyA9IGFk
b3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZygidmlkZW8veC1yYXcsIGZvcm1hdCA9IChzdHJp
bmcpICIgR1NUX0dMX0NBUFNfRk9STUFUKSk7CisgICAgZWxzZSB7CisgICAgICAgIEdTVF9JTkZP
X09CSkVDVChwaXBlbGluZSgpLCAiRm9yY2luZyBSR0JBIGFzIEdTdHJlYW1lciBpcyBub3QgbmV3
IGVub3VnaC4iKTsKKyAgICAgICAgY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0cmlu
ZygidmlkZW8veC1yYXcsIGZvcm1hdCA9IChzdHJpbmcpIFJHQkEiKSk7CiAgICAgfQotfQorICAg
IGdzdF9jYXBzX3NldF9mZWF0dXJlcyhjYXBzLmdldCgpLCAwLCBnc3RfY2Fwc19mZWF0dXJlc19u
ZXcoR1NUX0NBUFNfRkVBVFVSRV9NRU1PUllfR0xfTUVNT1JZLCBudWxscHRyKSk7CisgICAgZ19v
YmplY3Rfc2V0KGFwcHNpbmssICJjYXBzIiwgY2Fwcy5nZXQoKSwgbnVsbHB0cik7CiAKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVs
b2FkIHByZWxvYWQpCi17Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGlu
ZyBwcmVsb2FkIHRvICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcocHJlbG9hZCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgaWYgKHByZWxvYWQgPT0gTWVkaWFQbGF5ZXI6OkF1dG8gJiYgaXNM
aXZlU3RyZWFtKCkpCi0gICAgICAgIHJldHVybjsKKyAgICByZXN1bHQgJj0gZ3N0X2VsZW1lbnRf
bGlua19tYW55KHVwbG9hZCwgY29sb3Jjb252ZXJ0LCBhcHBzaW5rLCBudWxscHRyKTsKIAotICAg
IG1fcHJlbG9hZCA9IHByZWxvYWQ7Ci0gICAgdXBkYXRlRG93bmxvYWRCdWZmZXJpbmdGbGFnKCk7
CisgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZCh1cGxvYWQsICJzaW5rIikpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQodmlkZW9T
aW5rLCBnc3RfZ2hvc3RfcGFkX25ldygic2luayIsIHBhZC5nZXQoKSkpOwogCi0gICAgaWYgKG1f
ZGVsYXlpbmdMb2FkICYmIG1fcHJlbG9hZCAhPSBNZWRpYVBsYXllcjo6Tm9uZSkgewotICAgICAg
ICBtX2RlbGF5aW5nTG9hZCA9IGZhbHNlOwotICAgICAgICBjb21taXRMb2FkKCk7CisgICAgaWYg
KCFyZXN1bHQpIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBsaW5rIEdzdEdMIGVs
ZW1lbnRzIik7CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYodmlkZW9TaW5rKTsKKyAgICAgICAg
dmlkZW9TaW5rID0gbnVsbHB0cjsKICAgICB9CisgICAgcmV0dXJuIHZpZGVvU2luazsKIH0KIAot
R3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVBdWRpb1Npbmso
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmVuc3VyZUdMVmlkZW9TaW5rQ29u
dGV4dCgpCiB7Ci0gICAgbV9hdXRvQXVkaW9TaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJhdXRvYXVkaW9zaW5rIiwgbnVsbHB0cik7Ci0gICAgaWYgKCFtX2F1dG9BdWRpb1NpbmspIHsK
LSAgICAgICAgR1NUX1dBUk5JTkcoIkdTdHJlYW1lcidzIGF1dG9hdWRpb3Npbmsgbm90IGZvdW5k
LiBQbGVhc2UgY2hlY2sgeW91ciBnc3QtcGx1Z2lucy1nb29kIGluc3RhbGxhdGlvbiIpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CisgICAgaWYgKCFtX2dsRGlzcGxheUVsZW1lbnRD
b250ZXh0KQorICAgICAgICBtX2dsRGlzcGxheUVsZW1lbnRDb250ZXh0ID0gYWRvcHRHUmVmKHJl
cXVlc3RHTENvbnRleHQoR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFKSk7CiAKLSAgICBnX3Np
Z25hbF9jb25uZWN0X3N3YXBwZWQobV9hdXRvQXVkaW9TaW5rLmdldCgpLCAiY2hpbGQtYWRkZWQi
LCBHX0NBTExCQUNLKHNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgaWYgKG1fZ2xEaXNwbGF5RWxlbWVudENvbnRleHQpCisgICAgICAgIGdzdF9lbGVtZW50X3Nl
dF9jb250ZXh0KG1fdmlkZW9TaW5rLmdldCgpLCBtX2dsRGlzcGxheUVsZW1lbnRDb250ZXh0Lmdl
dCgpKTsKIAotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0gICAgR3N0RWxlbWVudCogYXVkaW9TaW5r
QmluID0gZ3N0X2Jpbl9uZXcoImF1ZGlvLXNpbmsiKTsKLSAgICBlbnN1cmVBdWRpb1NvdXJjZVBy
b3ZpZGVyKCk7Ci0gICAgbV9hdWRpb1NvdXJjZVByb3ZpZGVyLT5jb25maWd1cmVBdWRpb0Jpbihh
dWRpb1NpbmtCaW4sIG51bGxwdHIpOwotICAgIHJldHVybiBhdWRpb1NpbmtCaW47Ci0jZWxzZQot
ICAgIHJldHVybiBtX2F1dG9BdWRpb1NpbmsuZ2V0KCk7Ci0jZW5kaWYKKyAgICBpZiAoIW1fZ2xB
cHBFbGVtZW50Q29udGV4dCkKKyAgICAgICAgbV9nbEFwcEVsZW1lbnRDb250ZXh0ID0gYWRvcHRH
UmVmKHJlcXVlc3RHTENvbnRleHQoImdzdC5nbC5hcHBfY29udGV4dCIpKTsKKworICAgIGlmICht
X2dsQXBwRWxlbWVudENvbnRleHQpCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KG1f
dmlkZW9TaW5rLmdldCgpLCBtX2dsQXBwRWxlbWVudENvbnRleHQuZ2V0KCkpOwogfQorI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVJfR0wpCiAKLUdzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6YXVkaW9TaW5rKCkgY29uc3QKKyNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkK
K3N0YXRpYyB2b2lkIHNldFJlY3RhbmdsZVRvVmlkZW9TaW5rKEdzdEVsZW1lbnQqIHZpZGVvU2lu
aywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBHc3RFbGVtZW50KiBzaW5rOwotICAgIGdf
b2JqZWN0X2dldChtX3BpcGVsaW5lLmdldCgpLCAiYXVkaW8tc2luayIsICZzaW5rLCBudWxscHRy
KTsKLSAgICByZXR1cm4gc2luazsKKyAgICAvLyBIZXJlIGdvZXMgdGhlIHBsYXRmb3JtLWRlcGVu
ZGFudCBjb2RlIHRvIHNldCB0byB0aGUgdmlkZW9TaW5rIHRoZSBzaXplCisgICAgLy8gYW5kIHBv
c2l0aW9uIG9mIHRoZSB2aWRlbyByZW5kZXJpbmcgd2luZG93LiBNYXJrIHRoZW0gdW51c2VkIGFz
IGRlZmF1bHQuCisgICAgVU5VU0VEX1BBUkFNKHZpZGVvU2luayk7CisgICAgVU5VU0VEX1BBUkFN
KHJlY3QpOwogfQogCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjplbnN1cmVBdWRpb1NvdXJjZVByb3ZpZGVyKCkKK2NsYXNzIEdTdHJlYW1l
ckhvbGVQdW5jaENsaWVudCA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
cjo6SG9sZVB1bmNoQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBHU3RyZWFtZXJIb2xlUHVuY2hDbGll
bnQoR1JlZlB0cjxHc3RFbGVtZW50PiYmIHZpZGVvU2luaykgOiBtX3ZpZGVvU2luayhXVEZNb3Zl
KHZpZGVvU2luaykpIHsgfTsKKyAgICB2b2lkIHNldFZpZGVvUmVjdGFuZ2xlKGNvbnN0IEludFJl
Y3QmIHJlY3QpIGZpbmFsIHsgc2V0UmVjdGFuZ2xlVG9WaWRlb1NpbmsobV92aWRlb1NpbmsuZ2V0
KCksIHJlY3QpOyB9Citwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92aWRlb1Np
bms7Cit9OworCitHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZUhvbGVQdW5jaFZpZGVvU2luaygpCiB7Ci0gICAgaWYgKCFtX2F1ZGlvU291cmNlUHJvdmlkZXIp
Ci0gICAgICAgIG1fYXVkaW9Tb3VyY2VQcm92aWRlciA9IG1ha2VVbmlxdWU8QXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lcj4oKTsKKyAgICAvLyBIZXJlIGdvZXMgdGhlIHBsYXRmb3JtLWRlcGVu
ZGFudCBjb2RlIHRvIGNyZWF0ZSB0aGUgdmlkZW9TaW5rLiBBcyBhIGRlZmF1bHQKKyAgICAvLyB3
ZSB1c2UgYSBmYWtlVmlkZW9TaW5rIHNvIG5vdGhpbmcgaXMgZHJhd24gdG8gdGhlIHBhZ2UuCisg
ICAgR3N0RWxlbWVudCogdmlkZW9TaW5rID0gIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZmFr
ZXZpZGVvc2luayIsIG51bGxwdHIpOworCisgICAgcmV0dXJuIHZpZGVvU2luazsKIH0KIAotQXVk
aW9Tb3VyY2VQcm92aWRlciogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb1NvdXJj
ZVByb3ZpZGVyKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXNoTmV4dEhv
bGVQdW5jaEJ1ZmZlcigpCiB7Ci0gICAgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRlcigpOwotICAg
IHJldHVybiBtX2F1ZGlvU291cmNlUHJvdmlkZXIuZ2V0KCk7CisgICAgYXV0byBwcm94eU9wZXJh
dGlvbiA9CisgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBw
cm94eSkKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9j
aygpKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllckJ1ZmZlcj4gbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyQnVmZmVyPigwLCBtX3NpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkTm90QmxlbmQs
IEdMX0RPTlRfQ0FSRSk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVySG9s
ZVB1bmNoQ2xpZW50PiBob2xlUHVuY2hDbGllbnQgPSBtYWtlVW5pcXVlPEdTdHJlYW1lckhvbGVQ
dW5jaENsaWVudD4obV92aWRlb1NpbmsuZ2V0KCkpOworICAgICAgICAgICAgbGF5ZXJCdWZmZXIt
PnNldEhvbGVQdW5jaENsaWVudChXVEZNb3ZlKGhvbGVQdW5jaENsaWVudCkpOworICAgICAgICAg
ICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1ZmZlcikpOworICAgICAgICB9
OworCisjaWYgVVNFKE5JQ09TSUEpCisgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3Np
YTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkp
LnByb3h5KCkpOworI2Vsc2UKKyAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJv
eHkpOworI2VuZGlmCiB9CiAjZW5kaWYKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGlwZWxp
bmVOYW1lKQorR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVW
aWRlb1NpbmsoKQogewotICAgIGNvbnN0IGdjaGFyKiBwbGF5YmluTmFtZSA9ICJwbGF5YmluIjsK
KyAgICBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpOwogCi0gICAgLy8gTVNFIGRv
ZXNuJ3Qgc3VwcG9ydCBwbGF5YmluMy4gTWVkaWFzdHJlYW0gcmVxdWlyZXMgcGxheWJpbjMuIFJl
Z3VsYXIKLSAgICAvLyBwbGF5YmFjayBjYW4gdXNlIHBsYXliaW4zIG9uLWRlbWFuZCB3aXRoIHRo
ZSBXRUJLSVRfR1NUX1VTRV9QTEFZQklOMwotICAgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlLgot
ICAgIGlmICgoIWlzTWVkaWFTb3VyY2UoKSAmJiBnX2dldGVudigiV0VCS0lUX0dTVF9VU0VfUExB
WUJJTjMiKSkgfHwgdXJsLnByb3RvY29sSXMoIm1lZGlhc3RyZWFtIikpCi0gICAgICAgIHBsYXli
aW5OYW1lID0gInBsYXliaW4zIjsKKyNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKKyAgICBt
X3ZpZGVvU2luayA9IGNyZWF0ZUhvbGVQdW5jaFZpZGVvU2luaygpOworICAgIHB1c2hOZXh0SG9s
ZVB1bmNoQnVmZmVyKCk7CisgICAgcmV0dXJuIG1fdmlkZW9TaW5rLmdldCgpOworI2VuZGlmCiAK
LSAgICBpZiAobV9waXBlbGluZSkgewotICAgICAgICBpZiAoIWdfc3RyY21wMChHU1RfT0JKRUNU
X05BTUUoZ3N0X2VsZW1lbnRfZ2V0X2ZhY3RvcnkobV9waXBlbGluZS5nZXQoKSkpLCBwbGF5Ymlu
TmFtZSkpIHsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiQWxyZWFk
eSB1c2luZyAlcyIsIHBsYXliaW5OYW1lKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQorI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgaWYgKG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVy
YXRlZCkKKyAgICAgICAgbV92aWRlb1NpbmsgPSBjcmVhdGVWaWRlb1NpbmtHTCgpOworI2VuZGlm
CiAKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJUZWFyaW5nIGRvd24gYXMg
d2UgbmVlZCB0byB1c2UgJXMgbm93LiIsIHBsYXliaW5OYW1lKTsKLSAgICAgICAgY2hhbmdlUGlw
ZWxpbmVTdGF0ZShHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICAgIG1fcGlwZWxpbmUgPSBudWxscHRy
OworICAgIGlmICghbV92aWRlb1NpbmspIHsKKyAgICAgICAgbV91c2luZ0ZhbGxiYWNrVmlkZW9T
aW5rID0gdHJ1ZTsKKyAgICAgICAgbV92aWRlb1NpbmsgPSB3ZWJraXRWaWRlb1NpbmtOZXcoKTsK
KyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdmlkZW9TaW5rLmdldCgpLCAicmVw
YWludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKHJlcGFpbnRDYWxsYmFjayksIHRoaXMpOworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92aWRlb1NpbmsuZ2V0KCksICJyZXBhaW50
LWNhbmNlbGxlZCIsIEdfQ0FMTEJBQ0socmVwYWludENhbmNlbGxlZENhbGxiYWNrKSwgdGhpcyk7
CiAgICAgfQogCi0gICAgQVNTRVJUKCFtX3BpcGVsaW5lKTsKKyAgICBHc3RFbGVtZW50KiB2aWRl
b1NpbmsgPSBudWxscHRyOworI2lmIEVOQUJMRShNRURJQV9TVEFUSVNUSUNTKQorICAgIG1fZnBz
U2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZnBzZGlzcGxheXNpbmsiLCAic2luayIp
OworICAgIGlmIChtX2Zwc1NpbmspIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fZnBzU2luay5n
ZXQoKSwgInNpbGVudCIsIFRSVUUgLCBudWxscHRyKTsKIAotICAgIG1faXNMZWdhY3lQbGF5Ymlu
ID0gIWdfc3RyY21wMChwbGF5YmluTmFtZSwgInBsYXliaW4iKTsKKyAgICAgICAgLy8gVHVybiBv
ZmYgdGV4dCBvdmVybGF5IHVubGVzcyB0cmFjaW5nIGlzIGVuYWJsZWQuCisgICAgICAgIGlmIChn
c3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVzaG9sZCh3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVn
KSA8IEdTVF9MRVZFTF9UUkFDRSkKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1Npbmsu
Z2V0KCksICJ0ZXh0LW92ZXJsYXkiLCBGQUxTRSAsIG51bGxwdHIpOwogCi0gICAgLy8gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCkgcmV0dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZSBzbwotICAg
IC8vIHdlIHNob3VsZCBub3QgYWRvcHQuCi0gICAgc3RhdGljIEF0b21pYzx1aW50MzJfdD4gcGlw
ZWxpbmVJZDsKLSAgICBzZXRQaXBlbGluZShnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UocGxheWJp
bk5hbWUsCi0gICAgICAgIChwaXBlbGluZU5hbWUuaXNFbXB0eSgpID8gbWFrZVN0cmluZygibWVk
aWEtcGxheWVyLSIsIHBpcGVsaW5lSWQuZXhjaGFuZ2VBZGQoMSkpIDogcGlwZWxpbmVOYW1lKS51
dGY4KCkuZGF0YSgpKSk7Ci0gICAgc2V0U3RyZWFtVm9sdW1lRWxlbWVudChHU1RfU1RSRUFNX1ZP
TFVNRShtX3BpcGVsaW5lLmdldCgpKSk7CisgICAgICAgIGlmIChnX29iamVjdF9jbGFzc19maW5k
X3Byb3BlcnR5KEdfT0JKRUNUX0dFVF9DTEFTUyhtX2Zwc1NpbmsuZ2V0KCkpLCAidmlkZW8tc2lu
ayIpKSB7CisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLmdldCgpLCAidmlkZW8t
c2luayIsIG1fdmlkZW9TaW5rLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHZpZGVvU2lu
ayA9IG1fZnBzU2luay5nZXQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2Zwc1Np
bmsgPSBudWxscHRyOworICAgIH0KKyNlbmRpZgogCi0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICJVc2luZyBsZWdhY3kgcGxheWJpbiBlbGVtZW50OiAlcyIsIGJvb2xGb3JQcmludGlu
ZyhtX2lzTGVnYWN5UGxheWJpbikpOworICAgIGlmICghbV9mcHNTaW5rKQorICAgICAgICB2aWRl
b1NpbmsgPSBtX3ZpZGVvU2luay5nZXQoKTsKIAotICAgIC8vIExldCBhbHNvIG90aGVyIGxpc3Rl
bmVycyBzdWJzY3JpYmUgdG8gKGFwcGxpY2F0aW9uKSBtZXNzYWdlcyBpbiB0aGlzIGJ1cy4KLSAg
ICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdT
VF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOwotICAgIGdzdF9idXNfYWRkX3NpZ25hbF93
YXRjaF9mdWxsKGJ1cy5nZXQoKSwgUnVuTG9vcFNvdXJjZVByaW9yaXR5OjpSdW5Mb29wRGlzcGF0
Y2hlcik7Ci0gICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0KCksICJtZXNzYWdlIiwgR19DQUxM
QkFDSyhidXNNZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBBU1NFUlQodmlkZW9TaW5rKTsK
IAotICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAibXV0ZSIsIG1fcGxheWVyLT5t
dXRlZCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdmlkZW9TaW5rOworfQogCi0gICAgZ19zaWdu
YWxfY29ubmVjdChHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksICJkZWVwLWVsZW1lbnQt
YWRkZWQiLCBHX0NBTExCQUNLKCtbXShHc3RCaW4qLCBHc3RCaW4qIHN1YkJpbiwgR3N0RWxlbWVu
dCogZWxlbWVudCwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpIHsKLSAgICAg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBiaW5OYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKEdTVF9FTEVN
RU5UX0NBU1Qoc3ViQmluKSkpOwotICAgICAgICBpZiAoIWdfc3RyX2hhc19wcmVmaXgoYmluTmFt
ZS5nZXQoKSwgImRlY29kZWJpbiIpKQotICAgICAgICAgICAgcmV0dXJuOwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR3N0U3RyZWFtVm9s
dW1lKiB2b2x1bWUpCit7CisgICAgQVNTRVJUKCFtX3ZvbHVtZUVsZW1lbnQpOworICAgIG1fdm9s
dW1lRWxlbWVudCA9IHZvbHVtZTsKIAotICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGVsZW1lbnRO
YW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKGVsZW1lbnQpKTsKLSAgICAgICAgaWYgKGdfc3RyX2hh
c19wcmVmaXgoZWxlbWVudE5hbWUuZ2V0KCksICJ2NGwyIikpCi0gICAgICAgICAgICBwbGF5ZXIt
Pm1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gPSBHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6VmlkZW80
TGludXg7Ci0gICAgICAgIGVsc2UgaWYgKGdfc3RyX2hhc19wcmVmaXgoZWxlbWVudE5hbWUuZ2V0
KCksICJpbXh2cHVkZWMiKSkKLSAgICAgICAgICAgIHBsYXllci0+bV92aWRlb0RlY29kZXJQbGF0
Zm9ybSA9IEdzdFZpZGVvRGVjb2RlclBsYXRmb3JtOjpJbXhWUFU7CisgICAgLy8gV2UgZG9uJ3Qg
c2V0IHRoZSBpbml0aWFsIHZvbHVtZSBiZWNhdXNlIHdlIHRydXN0IHRoZSBzaW5rIHRvIGtlZXAg
aXQgZm9yIHVzLiBTZWUKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE4OTc0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgIGlmICghbV9wbGF5ZXItPnBs
YXRmb3JtVm9sdW1lQ29uZmlndXJhdGlvblJlcXVpcmVkKCkpIHsKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyBzdHJlYW0gdm9sdW1lIHRvICVmIiwgbV9wbGF5
ZXItPnZvbHVtZSgpKTsKKyAgICAgICAgZ3N0X3N0cmVhbV92b2x1bWVfc2V0X3ZvbHVtZShtX3Zv
bHVtZUVsZW1lbnQuZ2V0KCksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9MSU5FQVIsIHN0YXRp
Y19jYXN0PGRvdWJsZT4obV9wbGF5ZXItPnZvbHVtZSgpKSk7CisgICAgfSBlbHNlCisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk5vdCBzZXR0aW5nIHN0cmVhbSB2b2x1bWUs
IHRydXN0aW5nIHN5c3RlbSBvbmUiKTsKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAg
ICAgICAgcGxheWVyLT51cGRhdGVUZXh0dXJlTWFwcGVyRmxhZ3MoKTsKLSNlbmRpZgotICAgIH0p
LCB0aGlzKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5nIHN0cmVh
bSBtdXRlZCAlcyIsIHRvU3RyaW5nKG1fcGxheWVyLT5tdXRlZCgpKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBnX29iamVjdF9zZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsIG1fcGxheWVy
LT5tdXRlZCgpLCBudWxscHRyKTsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3Bp
cGVsaW5lLmdldCgpLCAic291cmNlLXNldHVwIiwgR19DQUxMQkFDSyhzb3VyY2VTZXR1cENhbGxi
YWNrKSwgdGhpcyk7Ci0gICAgaWYgKG1faXNMZWdhY3lQbGF5YmluKSB7Ci0gICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8tY2hhbmdlZCIsIEdf
Q0FMTEJBQ0sodmlkZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhhdWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIH0KKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibm90aWZ5Ojp2b2x1bWUiLCBH
X0NBTExCQUNLKHZvbHVtZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nv
bm5lY3Rfc3dhcHBlZChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJub3RpZnk6Om11dGUiLCBHX0NB
TExCQUNLKG11dGVDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKK30KIAotI2lmIEVOQUJMRShWSURF
T19UUkFDSykKLSAgICBpZiAobV9pc0xlZ2FjeVBsYXliaW4pCi0gICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgpLCAidGV4dC1jaGFuZ2VkIiwgR19DQUxMQkFD
Syh0ZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmRlY29kZWRGcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICBndWludDY0IGRl
Y29kZWRGcmFtZXMgPSAwOworICAgIGlmIChtX2Zwc1NpbmspCisgICAgICAgIGdfb2JqZWN0X2dl
dChtX2Zwc1NpbmsuZ2V0KCksICJmcmFtZXMtcmVuZGVyZWQiLCAmZGVjb2RlZEZyYW1lcywgbnVs
bHB0cik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWNvZGVkRnJhbWVzKTsK
K30KIAotICAgIEdzdEVsZW1lbnQqIHRleHRDb21iaW5lciA9IHdlYmtpdFRleHRDb21iaW5lck5l
dygpOwotICAgIEFTU0VSVCh0ZXh0Q29tYmluZXIpOwotICAgIGdfb2JqZWN0X3NldChtX3BpcGVs
aW5lLmdldCgpLCAidGV4dC1zdHJlYW0tY29tYmluZXIiLCB0ZXh0Q29tYmluZXIsIG51bGxwdHIp
OwordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkcm9wcGVkRnJhbWVDb3Vu
dCgpIGNvbnN0Cit7CisgICAgZ3VpbnQ2NCBmcmFtZXNEcm9wcGVkID0gMDsKKyAgICBpZiAobV9m
cHNTaW5rKQorICAgICAgICBnX29iamVjdF9nZXQobV9mcHNTaW5rLmdldCgpLCAiZnJhbWVzLWRy
b3BwZWQiLCAmZnJhbWVzRHJvcHBlZCwgbnVsbHB0cik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihmcmFtZXNEcm9wcGVkKTsKK30KIAotICAgIG1fdGV4dEFwcFNpbmsgPSB3ZWJr
aXRUZXh0U2lua05ldygpOwotICAgIEFTU0VSVChtX3RleHRBcHBTaW5rKTsKK3Vuc2lnbmVkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3QK
K3sKKyAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JN
QVRfQllURVMpOworICAgIGdpbnQ2NCBwb3NpdGlvbiA9IDA7CiAKLSAgICBtX3RleHRBcHBTaW5r
UGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fdGV4dEFwcFNpbmsu
Z2V0KCksICJzaW5rIikpOwotICAgIEFTU0VSVChtX3RleHRBcHBTaW5rUGFkKTsKKyAgICBpZiAo
YXVkaW9TaW5rKCkgJiYgZ3N0X2VsZW1lbnRfcXVlcnkoYXVkaW9TaW5rKCksIHF1ZXJ5KSkKKyAg
ICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwogCi0g
ICAgR1JlZlB0cjxHc3RDYXBzPiB0ZXh0Q2FwczsKLSAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJz
aW9uKDEsIDE0LCAwKSkKLSAgICAgICAgdGV4dENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3
X2VtcHR5X3NpbXBsZSgiYXBwbGljYXRpb24veC1zdWJ0aXRsZS12dHQiKSk7Ci0gICAgZWxzZQot
ICAgICAgICB0ZXh0Q2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ0
ZXh0L3Z0dCIpKTsKLSAgICBnX29iamVjdF9zZXQobV90ZXh0QXBwU2luay5nZXQoKSwgImVtaXQt
c2lnbmFscyIsIFRSVUUsICJlbmFibGUtbGFzdC1zYW1wbGUiLCBGQUxTRSwgImNhcHMiLCB0ZXh0
Q2Fwcy5nZXQoKSwgbnVsbHB0cik7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdGV4
dEFwcFNpbmsuZ2V0KCksICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhuZXdUZXh0U2FtcGxlQ2Fs
bGJhY2spLCB0aGlzKTsKKyAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pOworfQogCi0gICAgZ19vYmplY3Rfc2V0KG1f
cGlwZWxpbmUuZ2V0KCksICJ0ZXh0LXNpbmsiLCBtX3RleHRBcHBTaW5rLmdldCgpLCBudWxscHRy
KTsKLSNlbmRpZgordW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0Rl
Y29kZWRCeXRlQ291bnQoKSBjb25zdAoreworICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVy
eV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9CWVRFUyk7CisgICAgZ2ludDY0IHBvc2l0aW9uID0g
MDsKIAotICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8tc2luayIsIGNy
ZWF0ZVZpZGVvU2luaygpLCAiYXVkaW8tc2luayIsIGNyZWF0ZUF1ZGlvU2luaygpLCBudWxscHRy
KTsKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV92aWRlb1NpbmsuZ2V0KCksIHF1ZXJ5KSkK
KyAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwog
Ci0gICAgY29uZmlndXJlUGxheVNpbmsoKTsKKyAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pOworfQogCi0gICAgaWYg
KG1fcHJlc2VydmVzUGl0Y2gpIHsKLSAgICAgICAgR3N0RWxlbWVudCogc2NhbGUgPSBnc3RfZWxl
bWVudF9mYWN0b3J5X21ha2UoInNjYWxldGVtcG8iLCBudWxscHRyKTsKKyNpZiBFTkFCTEUoRU5D
UllQVEVEX01FRElBKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmluaXRpYWxp
emF0aW9uRGF0YUVuY291bnRlcmVkKEluaXREYXRhJiYgaW5pdERhdGEpCit7CisgICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7CiAKLSAgICAgICAgaWYgKCFzY2FsZSkKLSAgICAgICAgICAgIEdT
VF9XQVJOSU5HKCJGYWlsZWQgdG8gY3JlYXRlIHNjYWxldGVtcG8iKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJhdWRpby1maWx0ZXIi
LCBzY2FsZSwgbnVsbHB0cik7Ci0gICAgfQorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGluaXREYXRhID0gV1RGTW92ZShpbml0RGF0
YSldIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKIAotICAg
IGlmICghbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIC8vIElmIG5vdCB1
c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgbGV0IEdTdHJlYW1lciBoYW5kbGUKLSAgICAg
ICAgLy8gdGhlIGltYWdlLW9yaWVudGF0aW9uIHRhZy4KLSAgICAgICAgR3N0RWxlbWVudCogdmlk
ZW9GbGlwID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2aWRlb2ZsaXAiLCBudWxscHRyKTsK
LSAgICAgICAgaWYgKHZpZGVvRmxpcCkgewotICAgICAgICAgICAgZ19vYmplY3Rfc2V0KHZpZGVv
RmxpcCwgIm1ldGhvZCIsIDgsIG51bGxwdHIpOwotICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1f
cGlwZWxpbmUuZ2V0KCksICJ2aWRlby1maWx0ZXIiLCB2aWRlb0ZsaXAsIG51bGxwdHIpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJUaGUgdmlkZW9mbGlwIGVsZW1l
bnQgaXMgbWlzc2luZywgdmlkZW8gcm90YXRpb24gc3VwcG9ydCBpcyBub3cgZGlzYWJsZWQuIFBs
ZWFzZSBjaGVjayB5b3VyIGdzdC1wbHVnaW5zLWdvb2QgaW5zdGFsbGF0aW9uLiIpOworICAgICAg
ICBHU1RfREVCVUcoInNjaGVkdWxpbmcgaW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQgZXZl
bnQgb2Ygc2l6ZSAlenUiLCBpbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7CisgICAgICAgIEdT
VF9NRU1EVU1QKCJpbml0IGRhdGFzIiwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
aW5pdERhdGEucGF5bG9hZCgpLT5kYXRhKCkpLCBpbml0RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7
CisgICAgICAgIHdlYWtUaGlzLT5tX3BsYXllci0+aW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVy
ZWQoaW5pdERhdGEucGF5bG9hZENvbnRhaW5lclR5cGUoKSwgaW5pdERhdGEucGF5bG9hZCgpLT50
cnlDcmVhdGVBcnJheUJ1ZmZlcigpKTsKKyAgICB9KTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmNkbUluc3RhbmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNl
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAobV9jZG1JbnN0YW5j
ZSA9PSAmaW5zdGFuY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9waXBlbGluZSkg
eworICAgICAgICBHU1RfRVJST1IoIm5vIHBpcGVsaW5lIHlldCIpOworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdSZWZQdHI8R3N0
UGFkPiB2aWRlb1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQo
bV92aWRlb1NpbmsuZ2V0KCksICJzaW5rIikpOwotICAgIGlmICh2aWRlb1NpbmtQYWQpCi0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCh2aWRlb1NpbmtQYWQuZ2V0KCksICJub3RpZnk6
OmNhcHMiLCBHX0NBTExCQUNLKHZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICBtX2NkbUluc3RhbmNlID0gJmluc3RhbmNlOworCisgICAgR1JlZlB0cjxHc3RDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNkbS1pbnN0YW5jZSIs
IEZBTFNFKSk7CisgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3RydWN0dXJlID0gZ3N0X2NvbnRl
eHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOworICAgIGdzdF9zdHJ1Y3R1cmVf
c2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0taW5zdGFuY2UiLCBHX1RZUEVfUE9JTlRFUiwgbV9j
ZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRf
c2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0KCkp
OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ0RNIHByb3h5IGlu
c3RhbmNlICVwIGRpc3BhdGNoZWQgYXMgY29udGV4dCIsIG1fY2RtSW5zdGFuY2UtPnByb3h5Q0RN
KCkuZ2V0KCkpOworCisgICAgbV9jZG1BdHRhY2htZW50U2VtYXBob3JlLnNpZ25hbCgpOwogfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2ltdWxhdGVBdWRpb0ludGVycnVw
dGlvbigpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VEZXRh
Y2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCiB7Ci0gICAgR3N0TWVzc2FnZSogbWVzc2FnZSA9
IGdzdF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlKEdTVF9PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSksIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShtX3Bp
cGVsaW5lLmdldCgpLCBtZXNzYWdlKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisg
ICAgaWYgKG1fY2RtSW5zdGFuY2UgIT0gJmluc3RhbmNlKSB7CisgICAgICAgIEdTVF9XQVJOSU5H
KCJwYXNzZWQgQ0RNSW5zdGFuY2UgJXAgaXMgZGlmZmVyZW50IGZyb20gc3RvcmVkIG9uZSAlcCIs
ICZpbnN0YW5jZSwgbV9jZG1JbnN0YW5jZS5nZXQoKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1fcGlwZWxpbmUp
OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiZGV0YWNoaW5nIENE
TSBpbnN0YW5jZSAlcCwgc2V0dGluZyBlbXB0eSBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS5nZXQo
KSk7CisgICAgbV9jZG1JbnN0YW5jZSA9IG51bGxwdHI7CisKKyAgICBHUmVmUHRyPEdzdENvbnRl
eHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNl
IiwgRkFMU0UpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3Bp
cGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQoKSk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpkaWRQYXNzQ09SU0FjY2Vzc0NoZWNrKCkgY29uc3QKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdHRlbXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKENETUlu
c3RhbmNlJiBpbnN0YW5jZSkKIHsKLSAgICBpZiAoV0VCS0lUX0lTX1dFQl9TUkMobV9zb3VyY2Uu
Z2V0KCkpKQotICAgICAgICByZXR1cm4gd2ViS2l0U3JjUGFzc2VkQ09SU0FjY2Vzc0NoZWNrKFdF
QktJVF9XRUJfU1JDX0NBU1QobV9zb3VyY2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgQVNTRVJUKG1fY2RtSW5zdGFuY2UuZ2V0KCkgPT0gJmluc3RhbmNlKTsKKyAgICBHU1RfVFJB
Q0UoImluc3RhbmNlICVwLCBjdXJyZW50IHN0b3JlZCAlcCIsICZpbnN0YW5jZSwgbV9jZG1JbnN0
YW5jZS5nZXQoKSk7CisgICAgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3RhbmNlKCk7CiB9
CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYW5TYXZlTWVkaWFEYXRhKCkg
Y29uc3QKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdHRlbXB0VG9EZWNyeXB0
V2l0aExvY2FsSW5zdGFuY2UoKQogewotICAgIGlmIChpc0xpdmVTdHJlYW0oKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gZ3N0X2VsZW1lbnRfc2VuZF9l
dmVudChwaXBlbGluZSgpLCBnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRfQ1VTVE9NX0RP
V05TVFJFQU1fT09CLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXR0ZW1wdC10by1kZWNyeXB0
IikpKTsKKyAgICBHU1RfREVCVUcoImF0dGVtcHRpbmcgdG8gZGVjcnlwdCwgZXZlbnQgaGFuZGxl
ZCAlcyIsIGJvb2xGb3JQcmludGluZyhldmVudEhhbmRsZWQpKTsKK30KIAotICAgIGlmIChtX3Vy
bC5pc0xvY2FsRmlsZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpoYW5kbGVQcm90ZWN0aW9uRXZlbnQoR3N0RXZlbnQqIGV2ZW50KQor
eworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11dGV4KTsKKyAg
ICAgICAgaWYgKG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHMuY29udGFpbnMoR1NUX0VWRU5UX1NF
UU5VTShldmVudCkpKSB7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCks
ICJldmVudCAldSBhbHJlYWR5IGhhbmRsZWQiLCBHU1RfRVZFTlRfU0VRTlVNKGV2ZW50KSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgR1NUX0RFQlVHX09CSkVD
VChwaXBlbGluZSgpLCAiaGFuZGxpbmcgZXZlbnQgJXUgZnJvbSBNU0UiLCBHU1RfRVZFTlRfU0VR
TlVNKGV2ZW50KSk7CisgICAgY29uc3QgY2hhciogZXZlbnRLZXlTeXN0ZW1VVUlEID0gbnVsbHB0
cjsKKyAgICBHc3RCdWZmZXIqIGluaXREYXRhID0gbnVsbHB0cjsKKyAgICBnc3RfZXZlbnRfcGFy
c2VfcHJvdGVjdGlvbihldmVudCwgJmV2ZW50S2V5U3lzdGVtVVVJRCwgJmluaXREYXRhLCBudWxs
cHRyKTsKKyAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0ZW1V
VUlELCBpbml0RGF0YX0pOworfQogCi0gICAgaWYgKG1fdXJsLnByb3RvY29sSXNJbkhUVFBGYW1p
bHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6c2V0V2FpdGluZ0ZvcktleShib29sIHdhaXRpbmdGb3JLZXkpCit7CisgICAgLy8gV2Ug
YmFpbCBvdXQgaWYgdmFsdWVzIGRpZCBub3QgY2hhbmdlIG9yIGlmIHdlIGFyZSByZXF1ZXN0ZWQg
dG8gbm90IHdhaXQgYW55bW9yZSBidXQgdGhlcmUgYXJlIHN0aWxsIHdhaXRpbmcgZGVjcnlwdG9y
cy4KKyAgICBHU1RfVFJBQ0UoIndhaXRpbmdGb3JLZXkgJXMsIG1fd2FpdGluZ0ZvcktleSAlcyIs
IGJvb2xGb3JQcmludGluZyh3YWl0aW5nRm9yS2V5KSwgYm9vbEZvclByaW50aW5nKG1fd2FpdGlu
Z0ZvcktleSkpOworICAgIGlmICh3YWl0aW5nRm9yS2V5ID09IG1fd2FpdGluZ0ZvcktleSB8fCAo
IXdhaXRpbmdGb3JLZXkgJiYgdGhpcy0+d2FpdGluZ0ZvcktleSgpKSkKKyAgICAgICAgcmV0dXJu
OwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIG1fd2FpdGluZ0ZvcktleSA9IHdhaXRpbmdGb3JL
ZXk7CisgICAgR1NUX0RFQlVHKCJ3YWl0aW5nIGZvciBrZXkgY2hhbmdlZCAlcyIsIGJvb2xGb3JQ
cmludGluZyhtX3dhaXRpbmdGb3JLZXkpKTsKKyAgICBtX3BsYXllci0+d2FpdGluZ0ZvcktleUNo
YW5nZWQoKTsKIH0KIAotT3B0aW9uYWw8Ym9vbD4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp3b3VsZFRhaW50T3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcmlnaW4pIGNvbnN0Citi
b29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdGluZ0ZvcktleSgpIGNvbnN0CiB7
Ci0gICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxMiwgMCkpIHsKLSAgICAgICAgR1NU
X1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiQ2hlY2tpbmcgJXUgb3JpZ2lucyIsIG1fb3JpZ2lu
cy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHJlc3BvbnNlT3JpZ2luIDogbV9vcmlnaW5z
KSB7Ci0gICAgICAgICAgICBpZiAoIW9yaWdpbi5jYW5BY2Nlc3MoKnJlc3BvbnNlT3JpZ2luKSkg
ewotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkZvdW5kIHJl
YWNoYWJsZSByZXNwb25zZSBvcmlnaW4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJObyB2YWxpZCByZXNwb25zZSBvcmlnaW4gZm91bmQiKTsKKyAgICBpZiAoIW1fcGlw
ZWxpbmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKLSAgICAvLyBHU3RyZWFtZXIg
PCAxLjEyIGhhcyBhbiBpbmNvbXBsZXRlIHVyaWRvd25sb2FkZXIgaW1wbGVtZW50YXRpb24gc28g
d2UKLSAgICAvLyBjYW4ndCB1c2UgV2ViS2l0V2ViU3JjIGZvciBhZGFwdGl2ZSBmcmFnbWVudHMg
ZG93bmxvYWRpbmcgaWYgdGhpcwotICAgIC8vIHZlcnNpb24gaXMgZGV0ZWN0ZWQuCi0gICAgVU5V
U0VEX1BBUkFNKG9yaWdpbik7Ci0gICAgcmV0dXJuIG1faGFzVGFpbnRlZE9yaWdpbjsKKyAgICBH
c3RTdGF0ZSBzdGF0ZTsKKyAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQo
KSwgJnN0YXRlLCBudWxscHRyLCAwKTsKKworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAg
R1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19jdXN0b20o
R1NUX1FVRVJZX0NVU1RPTSwgZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImFueS1kZWNyeXB0b3It
d2FpdGluZy1mb3Ita2V5IikpKTsKKyAgICBpZiAoc3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkg
eworICAgICAgICByZXN1bHQgPSBnc3RfZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgpLCBx
dWVyeS5nZXQoKSk7CisgICAgICAgIEdTVF9UUkFDRSgicXVlcnkgcmVzdWx0ICVzLCBvbiAlcyIs
IGJvb2xGb3JQcmludGluZyhyZXN1bHQpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0
ZSkpOworICAgIH0gZWxzZSBpZiAoc3RhdGUgPj0gR1NUX1NUQVRFX1JFQURZKSB7CisgICAgICAg
IC8vIFJ1bm5pbmcgYSBxdWVyeSBpbiB0aGUgcGlwZWxpbmUgaXMgZWFzaWVyIGJ1dCBpdCBvbmx5
IHdvcmtzIHdoZW4gdGhlIHBpcGVsaW5lIGlzIHNldCB1cCBhbmQgcnVubmluZywgb3RoZXJ3aXNl
IHdlIG5lZWQgdG8gaW5zcGVjdCBpdCBhbmQgYXNrIHRoZSBkZWNyeXB0b3JzIGRpcmVjdGx5Lgor
ICAgICAgICBHVW5pcXVlUHRyPEdzdEl0ZXJhdG9yPiBpdGVyYXRvcihnc3RfYmluX2l0ZXJhdGVf
cmVjdXJzZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgICAgIEdzdEl0ZXJhdG9y
UmVzdWx0IGl0ZXJhdG9yUmVzdWx0OworICAgICAgICBkbyB7CisgICAgICAgICAgICBpdGVyYXRv
clJlc3VsdCA9IGdzdF9pdGVyYXRvcl9mb2xkKGl0ZXJhdG9yLmdldCgpLCBbXShjb25zdCBHVmFs
dWUgKml0ZW0sIEdWYWx1ZSAqLCBncG9pbnRlciBkYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAg
ICAgICAgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IEdTVF9FTEVNRU5UKGdfdmFsdWVfZ2V0X29i
amVjdChpdGVtKSk7CisgICAgICAgICAgICAgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gR1NUX1FVRVJZ
KGRhdGEpOworICAgICAgICAgICAgICAgIHJldHVybiAhV0VCS0lUX0lTX01FRElBX0NFTkNfREVD
UllQVChlbGVtZW50KSB8fCAhZ3N0X2VsZW1lbnRfcXVlcnkoZWxlbWVudCwgcXVlcnkpOworICAg
ICAgICAgICAgfSwgbnVsbHB0ciwgcXVlcnkuZ2V0KCkpOworICAgICAgICAgICAgaWYgKGl0ZXJh
dG9yUmVzdWx0ID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpCisgICAgICAgICAgICAgICAgZ3N0X2l0
ZXJhdG9yX3Jlc3luYyhpdGVyYXRvci5nZXQoKSk7CisgICAgICAgIH0gd2hpbGUgKGl0ZXJhdG9y
UmVzdWx0ID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpOworICAgICAgICBpZiAoaXRlcmF0b3JSZXN1
bHQgPT0gR1NUX0lURVJBVE9SX0VSUk9SKQorICAgICAgICAgICAgR1NUX1dBUk5JTkcoIml0ZXJh
dG9yIHJldHVybmVkIGFuIGVycm9yIik7CisgICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yUmVzdWx0
ID09IEdTVF9JVEVSQVRPUl9PSzsKKyAgICAgICAgR1NUX1RSQUNFKCJpdGVyYXRvciByZXN1bHQg
JWQsIHdhaXRpbmcgJXMiLCBpdGVyYXRvclJlc3VsdCwgYm9vbEZvclByaW50aW5nKHJlc3VsdCkp
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5
U3lzdGVtLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIGJvb2wgcmVzdWx0ID0gZmFs
c2U7CisKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIHJlc3VsdCA9IEdTdHJlYW1l
ckVNRVV0aWxpdGllczo6aXNDbGVhcktleUtleVN5c3RlbShrZXlTeXN0ZW0pOworI2VuZGlmCisK
KyAgICBHU1RfREVCVUcoImNoZWNraW5nIGZvciBLZXlTeXN0ZW0gc3VwcG9ydCB3aXRoICVzIGFu
ZCB0eXBlICVzOiAlcyIsIGtleVN5c3RlbS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCku
ZGF0YSgpLCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmV4dGVuZGVkU3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMsIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgcmVzdWx0KQoreworICAgIFVO
VVNFRF9QQVJBTShwYXJhbWV0ZXJzKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggNTExMzI1ZTQ5
ZmUzMzc5OWRkMGY1NTBhYTU2ZDhlOThkMDY3ODVhZC4uMmFkYjBmZjAyMmRhMzUzM2RlNmFiOTZj
MDY4OGE5M2NkYjAwYWNlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuaApAQCAtMiw5ICsyLDkgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwg
MjAxMSwgMjAxMiwgMjAxMywgMjAxNSwgMjAxNiBJZ2FsaWEgUy5MCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQ2FibGUgVGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHlyaWdodCAo
QykgMjAxNSwgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDE5IElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxOSBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNywyNCArMjcsNzQgQEAK
ICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlICJHU3RyZWFt
ZXJDb21tb24uaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgi
Ci0KKyNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJNYWluVGhy
ZWFkTm90aWZpZXIuaCIKKyNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUxheWVyLmgiCiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KICNpbmNsdWRlIDxnc3QvcGJ1dGlscy9pbnN0YWxsLXBsdWdpbnMuaD4KKyNpbmNsdWRlIDx3
dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
UnVuTG9vcC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAjaW5jbHVk
ZSAiVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21T
dHJpbmdIYXNoLmg+CiAjZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3QgX0dzdE1wZWd0c1NlY3Rpb24g
R3N0TXBlZ3RzU2VjdGlvbjsKIAorI2lmIFVTRShHU1RSRUFNRVJfR0wpCisjaWYgVVNFKExJQkVQ
T1hZKQorLy8gSW5jbHVkZSB0aGUgPGVwb3h5L2dsLmg+IGhlYWRlciBiZWZvcmUgPGdzdC9nbC9n
bC5oPi4KKyNpbmNsdWRlIDxlcG94eS9nbC5oPgorCisvLyBXb3JrYXJvdW5kIGJ1aWxkIGlzc3Vl
IHdpdGggUlBpIHVzZXJsYW5kIEdMRVN2MiBoZWFkZXJzIGFuZCBsaWJlcG94eSA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTg1NjM5PgorI2lmICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNCwgMCkKKyNp
bmNsdWRlIDxnc3QvZ2wvZ3N0Z2xjb25maWcuaD4KKyNpZiBkZWZpbmVkKEdTVF9HTF9IQVZFX1dJ
TkRPV19ESVNQTUFOWCkgJiYgR1NUX0dMX0hBVkVfV0lORE9XX0RJU1BNQU5YCisjZGVmaW5lIF9f
Z2wyX2hfCisjdW5kZWYgR1NUX0dMX0hBVkVfR0xTWU5DCisjZGVmaW5lIEdTVF9HTF9IQVZFX0dM
U1lOQyAxCisjZW5kaWYKKyNlbmRpZiAvLyAhR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTQsIDApCisj
ZW5kaWYgLy8gVVNFKExJQkVQT1hZKQorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisj
aW5jbHVkZSA8Z3N0L2dsL2dsLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNlbmRp
ZgorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJH
TC5oIgorI2lmIFVTRShOSUNPU0lBKQorI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0
dXJlTWFwcGVySW1wbC5oIgorI2Vsc2UKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5UHJvdmlkZXIuaCIKKyNlbmRpZgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9H
c3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9sdW1lOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFZpZGVv
SW5mbyBHc3RWaWRlb0luZm87Cit0eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250ZXh0IEdzdEdMQ29u
dGV4dDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RHTERpc3BsYXkgR3N0R0xEaXNwbGF5OworCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEJpdG1hcFRleHR1cmVHTDsKK2NsYXNzIEdMQ29udGV4
dDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xh
c3MgSW50U2l6ZTsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBWaWRlb1RleHR1cmVDb3BpZXJHU3Ry
ZWFtZXI7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCitjbGFzcyBUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCisKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogY2xh
c3MgQXVkaW9Tb3VyY2VQcm92aWRlcjsKIGNsYXNzIEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFt
ZXI7CkBAIC01NiwyMCArMTA2LDI3IEBAIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3Ry
ZWFtZXI7CiBjbGFzcyBNZWRpYVBsYXllclJlcXVlc3RJbnN0YWxsTWlzc2luZ1BsdWdpbnNDYWxs
YmFjazsKIGNsYXNzIFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOwogCi0jaWYgRU5BQkxFKE1F
RElBX1NPVVJDRSkKLWNsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudDsKLSNlbmRpZgordm9p
ZCByZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CiAKLWNsYXNzIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
IHsKKy8vIFVzZSBlYWdlciBpbml0aWFsaXphdGlvbiBmb3IgdGhlIFdlYWtQdHJGYWN0b3J5IHNp
bmNlIHdlIGNhbGwgbWFrZVdlYWtQdHIoKSBmcm9tIGFub3RoZXIgdGhyZWFkLgorY2xhc3MgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVy
ZmFjZSwgcHVibGljIENhbk1ha2VXZWFrUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciwg
V2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+CisjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQorI2lmIFVTRShOSUNPU0lBKQorICAgICwgcHVibGljIE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKKyNlbHNlCisgICAgLCBwdWJsaWMgUGxhdGZv
cm1MYXllcgorI2VuZGlmCisjZW5kaWYKK3sKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQ
bGF5ZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplRGVidWdDYXRlZ29yeSgpOworCisg
ICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKE1lZGlhUGxheWVyKik7CiAgICAgdmlydHVh
bCB+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCk7CiAKLSAgICBzdGF0aWMgdm9pZCByZWdp
c3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVnaXN0cmFyKTsKICAgICBzdGF0aWMgYm9vbCBp
c0F2YWlsYWJsZSgpOwotCi0gICAgdm9pZCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKLSAg
ICB2b2lkIGhhbmRsZVBsdWdpbkluc3RhbGxlclJlc3VsdChHc3RJbnN0YWxsUGx1Z2luc1JldHVy
bik7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJlZ2lz
dHJhcik7CiAKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9o
YXNWaWRlbzsgfQogICAgIGJvb2wgaGFzQXVkaW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2hhc0F1ZGlvOyB9CkBAIC04Nyw2MyArMTQ0LDMwNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwcmVw
YXJlVG9QbGF5KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwbGF5KCkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBwYXVzZSgpIG92ZXJyaWRlOwotCiAgICAgYm9vbCBwYXVzZWQoKSBjb25zdCBvdmVycmlkZTsK
LSAgICBib29sIHNlZWtpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIHNlZWtpbmcoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3NlZWtpbmc7IH0KKyAgICB2b2lkIHNlZWsoY29uc3Qg
TWVkaWFUaW1lJikgb3ZlcnJpZGU7CiAKICAgICBNZWRpYVRpbWUgcGxhdGZvcm1EdXJhdGlvbigp
IGNvbnN0OwotICAgIE1lZGlhVGltZSBkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZWVrKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRSYXRl
KGZsb2F0KSBvdmVycmlkZTsKICAgICBkb3VibGUgcmF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAg
IHZvaWQgc2V0UHJlc2VydmVzUGl0Y2goYm9vbCkgb3ZlcnJpZGU7Ci0KICAgICB2b2lkIHNldFBy
ZWxvYWQoTWVkaWFQbGF5ZXI6OlByZWxvYWQpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFRpbWVy
RmlyZWQoKTsKIAorICAgIEZsb2F0U2l6ZSBuYXR1cmFsU2l6ZSgpIGNvbnN0IGZpbmFsOworCisg
ICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIG92ZXJyaWRlOworICAgIGZsb2F0IHZvbHVtZSgpIGNv
bnN0IG92ZXJyaWRlOworCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBib29sIGVuc3VyZUdz
dEdMQ29udGV4dCgpOworICAgIEdzdENvbnRleHQqIHJlcXVlc3RHTENvbnRleHQoY29uc3QgY2hh
ciogY29udGV4dFR5cGUpOworI2VuZGlmCisgICAgdm9pZCBzZXRNdXRlZChib29sKSBvdmVycmlk
ZTsKKyAgICBib29sIG11dGVkKCkgY29uc3Q7CisKKyAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0VmlzaWJs
ZShib29sKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92
ZXJyaWRlOworICAgIHZvaWQgc2l6ZUNoYW5nZWQoKTsKKworICAgIC8vIFByZWZlciBNZWRpYVRp
bWUgYmFzZWQgbWV0aG9kcyBvdmVyIGZsb2F0IGJhc2VkLgorCisgICAgZmxvYXQgZHVyYXRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBkdXJhdGlvbk1lZGlhVGltZSgpLnRvRmxvYXQoKTsg
fQorICAgIGRvdWJsZSBkdXJhdGlvbkRvdWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGR1
cmF0aW9uTWVkaWFUaW1lKCkudG9Eb3VibGUoKTsgfQorICAgIE1lZGlhVGltZSBkdXJhdGlvbk1l
ZGlhVGltZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gY3VycmVudE1lZGlhVGltZSgpLnRvRmxvYXQoKTsgfQorICAgIGRv
dWJsZSBjdXJyZW50VGltZURvdWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGN1cnJlbnRN
ZWRpYVRpbWUoKS50b0RvdWJsZSgpOyB9CisgICAgTWVkaWFUaW1lIGN1cnJlbnRNZWRpYVRpbWUo
KSBjb25zdCBvdmVycmlkZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2Vz
PiBidWZmZXJlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2VlayhmbG9hdCB0aW1lKSBv
dmVycmlkZSB7IHNlZWsoTWVkaWFUaW1lOjpjcmVhdGVXaXRoRmxvYXQodGltZSkpOyB9CisgICAg
dm9pZCBzZWVrRG91YmxlKGRvdWJsZSB0aW1lKSBvdmVycmlkZSB7IHNlZWsoTWVkaWFUaW1lOjpj
cmVhdGVXaXRoRG91YmxlKHRpbWUpKTsgfQorCisgICAgZmxvYXQgbWF4VGltZVNlZWthYmxlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbWF4TWVkaWFUaW1lU2Vla2FibGUoKS50b0Zsb2F0KCk7
IH0KICAgICBNZWRpYVRpbWUgbWF4TWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBkb3VibGUgbWluVGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbWlu
TWVkaWFUaW1lU2Vla2FibGUoKS50b0Zsb2F0KCk7IH0KKyAgICBNZWRpYVRpbWUgbWluTWVkaWFU
aW1lU2Vla2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1l
KCk7IH0KKwogICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXMoKSBjb25zdCBvdmVycmlkZTsKLSAgICBN
ZWRpYVRpbWUgbWF4VGltZUxvYWRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBoYXNT
aW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIE9wdGlvbmFsPGJvb2w+
IHdvdWxkVGFpbnRPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIHZvaWQgbG9hZFN0YXRlQ2hhbmdlZCgpOwotICAgIHZvaWQgdGltZUNoYW5nZWQoKTsK
LSAgICB2b2lkIGRpZEVuZCgpOworICAgIHZvaWQgc2ltdWxhdGVBdWRpb0ludGVycnVwdGlvbigp
IG92ZXJyaWRlOworCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICBBdWRpb1NvdXJjZVByb3Zp
ZGVyKiBhdWRpb1NvdXJjZVByb3ZpZGVyKCkgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAg
ICBib29sIHN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTWVkaWFQ
bGF5ZXI6Ok1vdmllTG9hZFR5cGUgbW92aWVMb2FkVHlwZSgpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgTWVkaWFQbGF5ZXIqIG1lZGlhUGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXI7IH0K
KworICAgIHVuc2lnbmVkIGRlY29kZWRGcmFtZUNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dW5zaWduZWQgZHJvcHBlZEZyYW1lQ291bnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB1bnNpZ25l
ZCBhdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB1bnNpZ25lZCB2
aWRlb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgYWNjZWxl
cmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKSBvdmVycmlkZTsKKworI2lmIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3Zl
cnJpZGU7CisjaWYgUExBVEZPUk0oV0lOX0NBSVJPKQorICAgIC8vIEZJWE1FOiBBY2NlbGVyYXRl
ZCByZW5kZXJpbmcgaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIGZvciBXaW5DYWlybyB5ZXQuCisg
ICAgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVyaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZmFsc2U7IH0KKyNlbHNlCisgICAgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkUmVuZGVy
aW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorI2VuZGlmCisjZW5kaWYKKwor
I2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisgICAgdm9pZCBjZG1JbnN0YW5jZUF0dGFjaGVk
KENETUluc3RhbmNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjZG1JbnN0YW5jZURldGFjaGVkKENE
TUluc3RhbmNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBoYW5kbGVQcm90ZWN0aW9uRXZlbnQoR3N0
RXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdpdGhMb2NhbEluc3Rh
bmNlKCk7CisgICAgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aEluc3RhbmNlKENETUluc3RhbmNl
JikgZmluYWw7CisgICAgdm9pZCBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0
YSYmKTsKKyAgICB2b2lkIHNldFdhaXRpbmdGb3JLZXkoYm9vbCk7CisgICAgYm9vbCB3YWl0aW5n
Rm9yS2V5KCkgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKKworICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lzdGVtLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKTsKKyAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBleHRlbmRlZFN1cHBv
cnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJzJiwgTWVkaWFQbGF5ZXI6
OlN1cHBvcnRzVHlwZSk7CisKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIGJvb2wgY29weVZp
ZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0z
RE9iamVjdCwgR0MzRGVudW0sIEdDM0RpbnQsIEdDM0RlbnVtLCBHQzNEZW51bSwgR0MzRGVudW0s
IGJvb2wsIGJvb2wpIG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9y
Q3VycmVudFRpbWUoKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdm9pZCBzZXRWaWRlb1NvdXJj
ZU9yaWVudGF0aW9uKEltYWdlT3JpZW50YXRpb24pOworICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5l
KCkgY29uc3QgeyByZXR1cm4gbV9waXBlbGluZS5nZXQoKTsgfQorICAgIHZvaWQgZW5hYmxlVHJh
Y2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlLCB1bnNpZ25lZCBpbmRleCk7
CisKKyAgICAvLyBBcHBlbmQgcGlwZWxpbmUgaW50ZXJmYWNlCisgICAgYm9vbCBoYW5kbGVTeW5j
TWVzc2FnZShHc3RNZXNzYWdlKik7CisgICAgdm9pZCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2Uq
KTsKKworcHJvdGVjdGVkOgorICAgIGVudW0gTWFpblRocmVhZE5vdGlmaWNhdGlvbiB7CisgICAg
ICAgIFZpZGVvQ2hhbmdlZCA9IDEgPDwgMCwKKyAgICAgICAgVmlkZW9DYXBzQ2hhbmdlZCA9IDEg
PDwgMSwKKyAgICAgICAgQXVkaW9DaGFuZ2VkID0gMSA8PCAyLAorICAgICAgICBWb2x1bWVDaGFu
Z2VkID0gMSA8PCAzLAorICAgICAgICBNdXRlQ2hhbmdlZCA9IDEgPDwgNCwKKyNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCisgICAgICAgIFRleHRDaGFuZ2VkID0gMSA8PCA1LAorI2VuZGlmCisgICAg
ICAgIFNpemVDaGFuZ2VkID0gMSA8PCA2LAorICAgICAgICBTdHJlYW1Db2xsZWN0aW9uQ2hhbmdl
ZCA9IDEgPDwgNworICAgIH07CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNMaXZlU3RyZWFtKCkgY29u
c3QgeyByZXR1cm4gbV9pc1N0cmVhbWluZzsgfQorICAgIE1lZGlhVGltZSBtYXhUaW1lTG9hZGVk
KCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7CisgICAgdmly
dHVhbCB2b2lkIHNvdXJjZVNldHVwKEdzdEVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
ZmlndXJlUGxheVNpbmsoKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2hhbmdlUGlwZWxpbmVTdGF0
ZShHc3RTdGF0ZSk7CisKKworI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQorICAgIEdzdEVs
ZW1lbnQqIGNyZWF0ZUhvbGVQdW5jaFZpZGVvU2luaygpOworICAgIHZvaWQgcHVzaE5leHRIb2xl
UHVuY2hCdWZmZXIoKTsKKyAgICBib29sIHNob3VsZElnbm9yZUludHJpbnNpY1NpemUoKSBmaW5h
bCB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYKKworI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAg
c3RhdGljIEdzdEZsb3dSZXR1cm4gbmV3U2FtcGxlQ2FsbGJhY2soR3N0RWxlbWVudCosIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworICAgIHN0YXRpYyBHc3RGbG93UmV0dXJuIG5ld1By
ZXJvbGxDYWxsYmFjayhHc3RFbGVtZW50KiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7
CisgICAgdm9pZCBmbHVzaEN1cnJlbnRCdWZmZXIoKTsKKyAgICBHc3RFbGVtZW50KiBjcmVhdGVH
TEFwcFNpbmsoKTsKKyAgICBHc3RFbGVtZW50KiBjcmVhdGVWaWRlb1NpbmtHTCgpOworICAgIEdz
dEdMQ29udGV4dCogZ3N0R0xDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9nbENvbnRleHQuZ2V0
KCk7IH0KKyAgICBHc3RHTERpc3BsYXkqIGdzdEdMRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xEaXNwbGF5LmdldCgpOyB9CisgICAgdm9pZCBlbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKTsK
KyNlbmRpZgorCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIHZvaWQgcHVzaFRleHR1
cmVUb0NvbXBvc2l0b3IoKTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICB2b2lkIHN3YXBCdWZmZXJz
SWZOZWVkZWQoKSBvdmVycmlkZTsKKyNlbHNlCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzd2FwQnVm
ZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisjZW5kaWYKKyNlbmRpZgorCisgICAgR3N0RWxlbWVu
dCogdmlkZW9TaW5rKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb1NpbmsuZ2V0KCk7IH0KKworICAg
IHZvaWQgc2V0U3RyZWFtVm9sdW1lRWxlbWVudChHc3RTdHJlYW1Wb2x1bWUqKTsKKworICAgIHZv
aWQgc2V0UGlwZWxpbmUoR3N0RWxlbWVudCopOworCisgICAgdm9pZCB0cmlnZ2VyUmVwYWludChH
c3RTYW1wbGUqKTsKKyAgICB2b2lkIHJlcGFpbnQoKTsKKyAgICB2b2lkIGNhbmNlbFJlcGFpbnQo
Ym9vbCBkZXN0cm95aW5nID0gZmFsc2UpOworCisgICAgc3RhdGljIHZvaWQgcmVwYWludENhbGxi
YWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciosIEdzdFNhbXBsZSopOworICAgIHN0YXRp
YyB2b2lkIHJlcGFpbnRDYW5jZWxsZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIqKTsKKworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKKyAgICB2b2lk
IG5vdGlmeVBsYXllck9mTXV0ZSgpOworCisgICAgc3RhdGljIHZvaWQgdm9sdW1lQ2hhbmdlZENh
bGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworICAgIHN0YXRpYyB2b2lkIG11
dGVDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisKKyAgICAv
LyBGSVhNRTogV2hlcmUgaXMgdGhpcyB1c2VkPworICAgIHZvaWQgaGFuZGxlUGx1Z2luSW5zdGFs
bGVyUmVzdWx0KEdzdEluc3RhbGxQbHVnaW5zUmV0dXJuKTsKKworICAgIHZvaWQgcmVhZHlUaW1l
ckZpcmVkKCk7CisKKyAgICB2b2lkIG5vdGlmeVBsYXllck9mVmlkZW8oKTsKKyAgICB2b2lkIG5v
dGlmeVBsYXllck9mVmlkZW9DYXBzKCk7CisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZkF1ZGlvKCk7
CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlRleHQo
KTsKKyAgICB2b2lkIG5ld1RleHRTYW1wbGUoKTsKKyNlbmRpZgorCisgICAgdm9pZCBlbnN1cmVB
dWRpb1NvdXJjZVByb3ZpZGVyKCk7CisgICAgdm9pZCBzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMo
R09iamVjdCopOworCisgICAgc3RhdGljIHZvaWQgc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzQ2Fs
bGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiwgR09iamVjdCopOworCisgICAgc3Rh
dGljIHZvaWQgc291cmNlU2V0dXBDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIq
LCBHc3RFbGVtZW50Kik7CisgICAgc3RhdGljIHZvaWQgdmlkZW9DaGFuZ2VkQ2FsbGJhY2soTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisgICAgc3RhdGljIHZvaWQgdmlkZW9TaW5rQ2Fw
c0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0
aWMgdm9pZCBhdWRpb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIq
KTsKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgc3RhdGljIHZvaWQgdGV4dENoYW5nZWRD
YWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgR3N0Rmxv
d1JldHVybiBuZXdUZXh0U2FtcGxlQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Kik7CisjZW5kaWYKKworICAgIHZvaWQgdGltZUNoYW5nZWQoKTsKICAgICB2b2lkIGxvYWRpbmdG
YWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcsIGJvb2wgZm9yY2VOb3RpZmljYXRpb25zID0gZmFs
c2UpOworICAgIHZvaWQgbG9hZFN0YXRlQ2hhbmdlZCgpOwogCi0gICAgdmlydHVhbCB2b2lkIHNv
dXJjZVNldHVwKEdzdEVsZW1lbnQqKTsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAg
dm9pZCB1cGRhdGVUZXh0dXJlTWFwcGVyRmxhZ3MoKTsKKyNlbmRpZgogCi0gICAgR3N0RWxlbWVu
dCogYXVkaW9TaW5rKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmZpZ3Vy
ZVBsYXlTaW5rKCkgeyB9CisgICAgUmVmPE1haW5UaHJlYWROb3RpZmllcjxNYWluVGhyZWFkTm90
aWZpY2F0aW9uPj4gbV9ub3RpZmllcjsKKyAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CisgICAg
bXV0YWJsZSBNZWRpYVRpbWUgbV9jYWNoZWRQb3NpdGlvbjsKKyAgICBtdXRhYmxlIE1lZGlhVGlt
ZSBtX2NhY2hlZER1cmF0aW9uOworICAgIGJvb2wgbV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVk
U2Vla1Bvc2l0aW9uIHsgZmFsc2UgfTsKKyAgICBib29sIG1fY2hhbmdpbmdSYXRlIHsgZmFsc2Ug
fTsKKyAgICBib29sIG1fZG93bmxvYWRGaW5pc2hlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2Vy
cm9yT2NjdXJlZCB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBib29sIG1faXNFbmRSZWFjaGVkIHsg
ZmFsc2UgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9pc1N0cmVhbWluZyB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX3BhdXNlZCB7IHRydWUgfTsKKyAgICBmbG9hdCBtX3BsYXliYWNrUmF0ZSB7IDEgfTsK
KyAgICBHc3RTdGF0ZSBtX2N1cnJlbnRTdGF0ZTsKKyAgICBHc3RTdGF0ZSBtX29sZFN0YXRlOwor
ICAgIEdzdFN0YXRlIG1fcmVxdWVzdGVkU3RhdGUgeyBHU1RfU1RBVEVfVk9JRF9QRU5ESU5HIH07
CisgICAgYm9vbCBtX3Jlc2V0UGlwZWxpbmUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zZWVraW5n
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fc2Vla0lzUGVuZGluZyB7IGZhbHNlIH07CisgICAgTWVk
aWFUaW1lIG1fc2Vla1RpbWU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3NvdXJjZSB7IG51
bGxwdHIgfTsKKyAgICBib29sIG1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkIHsgZmFsc2UgfTsK
IAotICAgIHZvaWQgc2ltdWxhdGVBdWRpb0ludGVycnVwdGlvbigpIG92ZXJyaWRlOworI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKKyAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fdGV4dHVy
ZU1hcHBlckZsYWdzOworI2VuZGlmCiAKLSAgICB2aXJ0dWFsIGJvb2wgY2hhbmdlUGlwZWxpbmVT
dGF0ZShHc3RTdGF0ZSk7CisgICAgR1JlZlB0cjxHc3RTdHJlYW1Wb2x1bWU+IG1fdm9sdW1lRWxl
bWVudDsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmlkZW9TaW5rOworICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKIAotI2lmIEVOQUJM
RShXRUJfQVVESU8pCi0gICAgQXVkaW9Tb3VyY2VQcm92aWRlciogYXVkaW9Tb3VyY2VQcm92aWRl
cigpIG92ZXJyaWRlOworICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZSB7
IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZyB9OworICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6Ok5l
dHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZSB7IE1lZGlhUGxheWVyOjpFbXB0eSB9OworCisgICAg
bXV0YWJsZSBMb2NrIG1fc2FtcGxlTXV0ZXg7CisgICAgR1JlZlB0cjxHc3RTYW1wbGU+IG1fc2Ft
cGxlOworCisgICAgbXV0YWJsZSBGbG9hdFNpemUgbV92aWRlb1NpemU7CisgICAgYm9vbCBtX3Vz
aW5nRmFsbGJhY2tWaWRlb1NpbmsgeyBmYWxzZSB9OworICAgIGJvb2wgbV9yZW5kZXJpbmdDYW5C
ZUFjY2VsZXJhdGVkIHsgZmFsc2UgfTsKKworICAgIGJvb2wgbV9kZXN0cm95aW5nIHsgZmFsc2Ug
fTsKKworI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgR1JlZlB0cjxHc3RHTENvbnRleHQ+IG1f
Z2xDb250ZXh0OworICAgIEdSZWZQdHI8R3N0R0xEaXNwbGF5PiBtX2dsRGlzcGxheTsKKyAgICBH
UmVmUHRyPEdzdENvbnRleHQ+IG1fZ2xEaXNwbGF5RWxlbWVudENvbnRleHQ7CisgICAgR1JlZlB0
cjxHc3RDb250ZXh0PiBtX2dsQXBwRWxlbWVudENvbnRleHQ7CisgICAgc3RkOjp1bmlxdWVfcHRy
PFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcj4gbV92aWRlb1RleHR1cmVDb3BpZXI7CisKKyAg
ICBHUmVmUHRyPEdzdEdMQ29sb3JDb252ZXJ0PiBtX2NvbG9yQ29udmVydDsKKyAgICBHUmVmUHRy
PEdzdENhcHM+IG1fY29sb3JDb252ZXJ0SW5wdXRDYXBzOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4g
bV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzOwogI2VuZGlmCiAKLSAgICBib29sIGlzTGl2ZVN0cmVh
bSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNTdHJlYW1pbmc7IH0KKyAgICBJbWFnZU9y
aWVudGF0aW9uIG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbjsKIAotICAgIHZvaWQgZW5hYmxlVHJh
Y2soVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlLCB1bnNpZ25lZCBpbmRleCk7
CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICBCaW5hcnlTZW1hcGhvcmUgbV9jZG1B
dHRhY2htZW50U2VtYXBob3JlOworICAgIFJlZlB0cjxjb25zdCBDRE1JbnN0YW5jZT4gbV9jZG1J
bnN0YW5jZTsKKworICAgIExvY2sgbV9wcm90ZWN0aW9uTXV0ZXg7IC8vIEd1YXJkcyBhY2Nlc3Mg
dG8gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy4KKyAgICBIYXNoU2V0PHVpbnQzMl90PiBtX2hh
bmRsZWRQcm90ZWN0aW9uRXZlbnRzOwogCi0gICAgYm9vbCBoYW5kbGVTeW5jTWVzc2FnZShHc3RN
ZXNzYWdlKikgb3ZlcnJpZGU7CisgICAgYm9vbCBtX3dhaXRpbmdGb3JLZXkgeyBmYWxzZSB9Owor
I2VuZGlmCisKKyAgICBPcHRpb25hbDxHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybT4gbV92aWRlb0Rl
Y29kZXJQbGF0Zm9ybTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIGZpbGxUaW1lckZpcmVkKCk7CisK
KyAgICB2b2lkIGRpZEVuZCgpOworCisKKyAgICBHc3RFbGVtZW50KiBjcmVhdGVWaWRlb1Npbmso
KTsKKyAgICBHc3RFbGVtZW50KiBjcmVhdGVBdWRpb1NpbmsoKTsKKyAgICBHc3RFbGVtZW50KiBh
dWRpb1NpbmsoKSBjb25zdDsKKwogICAgIHN0YXRpYyB2b2lkIGdldFN1cHBvcnRlZFR5cGVzKEhh
c2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+Jik7CiAgICAgc3RhdGljIE1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgc3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3Vw
cG9ydFBhcmFtZXRlcnMmKTsKICAgICB2b2lkIHN5bmNPbkNsb2NrKGJvb2wgc3luYyk7CiAKLSAg
ICBHc3RFbGVtZW50KiBjcmVhdGVBdWRpb1NpbmsoKSBvdmVycmlkZTsKLQogICAgIE1lZGlhVGlt
ZSBwbGF5YmFja1Bvc2l0aW9uKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3Rh
dGVzKCk7CkBAIC0xODgsODEgKzQ4Nyw0MiBAQCBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRlVHJh
Y2tzKCk7CiAgICAgdm9pZCBjbGVhclRyYWNrcygpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBt
X2J1ZmZlcmluZzsKLSAgICBpbnQgbV9idWZmZXJpbmdQZXJjZW50YWdlOwotICAgIG11dGFibGUg
TWVkaWFUaW1lIG1fY2FjaGVkUG9zaXRpb247Ci0gICAgbXV0YWJsZSBNZWRpYVRpbWUgbV9jYWNo
ZWREdXJhdGlvbjsKLSAgICBib29sIG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3Np
dGlvbjsKLSAgICBib29sIG1fY2hhbmdpbmdSYXRlOwotICAgIGJvb2wgbV9kb3dubG9hZEZpbmlz
aGVkOwotICAgIGJvb2wgbV9lcnJvck9jY3VyZWQ7Ci0gICAgbXV0YWJsZSBib29sIG1faXNFbmRS
ZWFjaGVkOwotICAgIG11dGFibGUgYm9vbCBtX2lzU3RyZWFtaW5nOwotICAgIGJvb2wgbV9wYXVz
ZWQ7Ci0gICAgZmxvYXQgbV9wbGF5YmFja1JhdGU7Ci0gICAgR3N0U3RhdGUgbV9jdXJyZW50U3Rh
dGU7Ci0gICAgR3N0U3RhdGUgbV9vbGRTdGF0ZTsKLSAgICBHc3RTdGF0ZSBtX3JlcXVlc3RlZFN0
YXRlOwotICAgIGJvb2wgbV9yZXNldFBpcGVsaW5lOwotICAgIGJvb2wgbV9zZWVraW5nOwotICAg
IGJvb2wgbV9zZWVrSXNQZW5kaW5nOwotICAgIE1lZGlhVGltZSBtX3NlZWtUaW1lOwotICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gbV9zb3VyY2U7Ci0gICAgYm9vbCBtX3ZvbHVtZUFuZE11dGVJbml0
aWFsaXplZDsKLQotICAgIHZvaWQgcmVhZHlUaW1lckZpcmVkKCk7Ci0KLSAgICB2b2lkIG5vdGlm
eVBsYXllck9mVmlkZW8oKTsKLSAgICB2b2lkIG5vdGlmeVBsYXllck9mVmlkZW9DYXBzKCk7Ci0g
ICAgdm9pZCBub3RpZnlQbGF5ZXJPZkF1ZGlvKCk7Ci0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
Ci0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZlRleHQoKTsKLSAgICB2b2lkIG5ld1RleHRTYW1wbGUo
KTsKLSNlbmRpZgotCi0gICAgdm9pZCBlbnN1cmVBdWRpb1NvdXJjZVByb3ZpZGVyKCk7Ci0gICAg
dm9pZCBzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMoR09iamVjdCopOwotCi0gICAgc3RhdGljIHZv
aWQgc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKiwgR09iamVjdCopOwotCi0gICAgc3RhdGljIHZvaWQgc291cmNlU2V0dXBDYWxsYmFj
ayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqLCBHc3RFbGVtZW50Kik7Ci0gICAgc3RhdGlj
IHZvaWQgdmlkZW9DaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7
Ci0gICAgc3RhdGljIHZvaWQgdmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqKTsKLSAgICBzdGF0aWMgdm9pZCBhdWRpb0NoYW5nZWRDYWxsYmFj
ayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
Ci0gICAgc3RhdGljIHZvaWQgdGV4dENoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIqKTsKLSAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdUZXh0U2FtcGxlQ2FsbGJh
Y2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLQog
I2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdGV4dEFw
cFNpbms7CiAgICAgR1JlZlB0cjxHc3RQYWQ+IG1fdGV4dEFwcFNpbmtQYWQ7CiAjZW5kaWYKLSAg
ICBHc3RTdHJ1Y3R1cmUqIG1fbWVkaWFMb2NhdGlvbnM7Ci0gICAgaW50IG1fbWVkaWFMb2NhdGlv
bkN1cnJlbnRJbmRleDsKLSAgICBib29sIG1fcGxheWJhY2tSYXRlUGF1c2U7CisgICAgR3N0U3Ry
dWN0dXJlKiBtX21lZGlhTG9jYXRpb25zIHsgbnVsbHB0ciB9OworICAgIGludCBtX21lZGlhTG9j
YXRpb25DdXJyZW50SW5kZXggeyAwIH07CisgICAgYm9vbCBtX3BsYXliYWNrUmF0ZVBhdXNlIHsg
ZmFsc2UgfTsKICAgICBNZWRpYVRpbWUgbV90aW1lT2ZPdmVybGFwcGluZ1NlZWs7Ci0gICAgZmxv
YXQgbV9sYXN0UGxheWJhY2tSYXRlOworICAgIGZsb2F0IG1fbGFzdFBsYXliYWNrUmF0ZSB7IDEg
fTsKICAgICBUaW1lciBtX2ZpbGxUaW1lcjsKICAgICBNZWRpYVRpbWUgbV9tYXhUaW1lTG9hZGVk
OwogICAgIGJvb2wgbV9sb2FkaW5nU3RhbGxlZCB7IGZhbHNlIH07CiAgICAgTWVkaWFQbGF5ZXI6
OlByZWxvYWQgbV9wcmVsb2FkOwotICAgIGJvb2wgbV9kZWxheWluZ0xvYWQ7CisgICAgYm9vbCBt
X2RlbGF5aW5nTG9hZCB7IGZhbHNlIH07CiAgICAgbXV0YWJsZSBNZWRpYVRpbWUgbV9tYXhUaW1l
TG9hZGVkQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzOwotICAgIGJvb2wgbV9oYXNWaWRlbzsKLSAg
ICBib29sIG1faGFzQXVkaW87CisgICAgYm9vbCBtX2hhc1ZpZGVvIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1faGFzQXVkaW8geyBmYWxzZSB9OworICAgIENvbmRpdGlvbiBtX2RyYXdDb25kaXRpb247
CisgICAgTG9jayBtX2RyYXdNdXRleDsKKyAgICBSdW5Mb29wOjpUaW1lcjxNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI+IG1fZHJhd1RpbWVyOwogICAgIFJ1bkxvb3A6OlRpbWVyPE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcj4gbV9yZWFkeVRpbWVySGFuZGxlcjsKLSAgICBtdXRhYmxlIHVu
c2lnbmVkIGxvbmcgbG9uZyBtX3RvdGFsQnl0ZXM7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQorI2lmIFVTRShOSUNPU0lBKQorICAgIFJlZjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmlj
b3NpYUxheWVyOworI2Vsc2UKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7CisjZW5kaWYKKyNlbmRpZgorICAgIGJvb2wgbV9i
dWZmZXJpbmcgeyBmYWxzZSB9OworICAgIGludCBtX2J1ZmZlcmluZ1BlcmNlbnRhZ2UgeyAwIH07
CisgICAgbXV0YWJsZSB1bnNpZ25lZCBsb25nIGxvbmcgbV90b3RhbEJ5dGVzIHsgMCB9OwogICAg
IFVSTCBtX3VybDsKLSAgICBib29sIG1fcHJlc2VydmVzUGl0Y2g7CisgICAgYm9vbCBtX3ByZXNl
cnZlc1BpdGNoIHsgZmFsc2UgfTsKICAgICBtdXRhYmxlIE9wdGlvbmFsPFNlY29uZHM+IG1fbGFz
dFF1ZXJ5VGltZTsKICAgICBib29sIG1faXNMZWdhY3lQbGF5YmluOwogICAgIEdSZWZQdHI8R3N0
U3RyZWFtQ29sbGVjdGlvbj4gbV9zdHJlYW1Db2xsZWN0aW9uOwotICAgIEZsb2F0U2l6ZSBuYXR1
cmFsU2l6ZSgpIGNvbnN0IGZpbmFsOwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgUmVm
UHRyPE1lZGlhU3RyZWFtUHJpdmF0ZT4gbV9zdHJlYW1Qcml2YXRlOwogI2VuZGlmCkBAIC0yOTIs
OCArNTUyLDkgQEAgcHJpdmF0ZToKIAogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luPj4gbV9vcmlnaW5zOwogICAgIE9wdGlvbmFsPGJvb2w+IG1faGFzVGFpbnRlZE9y
aWdpbiB7IFdURjo6bnVsbG9wdCB9OworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2Zwc1Np
bmsgeyBudWxscHRyIH07CiB9OwogCiB9Ci0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQorI2Vu
ZGlmIC8vIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZGY5YTQ2ODUxZGQxYmQ3MmY5MjU2NGZhZTlhYjBhMTZmYzc1ZjJlZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBDb2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxNSwgMjAxNiBJZ2FsaWEgUy5MCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUsIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIgotCi0j
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQotCi0jaW5jbHVkZSAiR1N0cmVhbWVy
Q29tbW9uLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VH
U3RyZWFtZXIuaCIKLSNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllci5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVy
LmgiCi0jaW5jbHVkZSAiV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSA8d3Rm
L2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
LSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotI2luY2x1ZGUgPGdzdC9hdWRp
by9zdHJlYW12b2x1bWUuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+Ci0K
LSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotI2luY2x1ZGUgIkNETUluc3RhbmNlLmgiCi0j
aW5jbHVkZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotI2RlZmluZSBURVhUVVJFX0NPUElF
Ul9DT0xPUl9DT05WRVJUX0ZMQUcgVmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyOjpDb2xvckNv
bnZlcnNpb246Ok5vQ29udmVydAotI2RlZmluZSBHU1RfR0xfQ0FQU19GT1JNQVQgInsgUkdCeCwg
UkdCQSwgSTQyMCwgWTQ0NCwgWVYxMiwgWTQxQiwgWTQyQiwgTlYxMiwgTlYyMSwgVlVZQSB9Igot
Ci0jaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+Ci0KLSNpbmNsdWRlICJHTENvbnRleHQu
aCIKLSNpZiBVU0UoR0xYKQotI2luY2x1ZGUgIkdMQ29udGV4dEdMWC5oIgotI2luY2x1ZGUgPGdz
dC9nbC94MTEvZ3N0Z2xkaXNwbGF5X3gxMS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoRUdMKQotI2lu
Y2x1ZGUgIkdMQ29udGV4dEVHTC5oIgotI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5
X2VnbC5oPgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShYMTEpCi0jaW5jbHVkZSAiUGxhdGZvcm1E
aXNwbGF5WDExLmgiCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdBWUxBTkQpCi0jaW5jbHVkZSAi
UGxhdGZvcm1EaXNwbGF5V2F5bGFuZC5oIgotI2VuZGlmCi0KLSNpZiBVU0UoV1BFX1JFTkRFUkVS
KQotI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheUxpYldQRS5oIgotI2VuZGlmCi0KLS8vIGdzdGds
YXBpLmggbWF5IGluY2x1ZGUgZWdscGxhdGZvcm0uaCBhbmQgaXQgaW5jbHVkZXMgWC5oLCB3aGlj
aAotLy8gZGVmaW5lcyBOb25lLCBicmVha2luZyBNZWRpYVBsYXllcjo6Tm9uZSBlbnVtCi0jaWYg
UExBVEZPUk0oWDExKSAmJiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKLSN1bmRlZiBOb25lCi0j
ZW5kaWYgLy8gUExBVEZPUk0oWDExKSAmJiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKLSNpbmNs
dWRlICJWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXIuaCIKLSNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSX0dMKQotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotI2luY2x1ZGUgIkJpdG1hcFRl
eHR1cmVHTC5oIgotI2luY2x1ZGUgIkJpdG1hcFRleHR1cmVQb29sLmgiCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5LmgiCi0jaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotI2luY2x1ZGUgPGNhaXJvLWdsLmg+Ci0jZW5kaWYKLSNlbmRpZiAvLyBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpCi0KLUdTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVn
KTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcKLQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBuYW1lc3BhY2Ugc3RkOwotCi0jaWYgVVNFKEdT
VFJFQU1FUl9IT0xFUFVOQ0gpCi1zdGF0aWMgY29uc3QgRmxvYXRTaXplIHNfaG9sZVB1bmNoRGVm
YXVsdEZyYW1lU2l6ZSgxMjgwLCA3MjApOwotI2VuZGlmCi0KLXN0YXRpYyBpbnQgZ3JlYXRlc3RD
b21tb25EaXZpc29yKGludCBhLCBpbnQgYikKLXsKLSAgICB3aGlsZSAoYikgewotICAgICAgICBp
bnQgdGVtcCA9IGE7Ci0gICAgICAgIGEgPSBiOwotICAgICAgICBiID0gdGVtcCAlIGI7Ci0gICAg
fQotCi0gICAgcmV0dXJuIEFCUyhhKTsKLX0KLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkK
LWNsYXNzIEdzdFZpZGVvRnJhbWVIb2xkZXIgOiBwdWJsaWMgVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJCdWZmZXI6OlVubWFuYWdlZEJ1ZmZlckRhdGFIb2xkZXIgewotcHVibGljOgotICAgIGV4
cGxpY2l0IEdzdFZpZGVvRnJhbWVIb2xkZXIoR3N0U2FtcGxlKiBzYW1wbGUsIE9wdGlvbmFsPEdz
dFZpZGVvRGVjb2RlclBsYXRmb3JtPiB2aWRlb0RlY29kZXJQbGF0Zm9ybSwgVGV4dHVyZU1hcHBl
ckdMOjpGbGFncyBmbGFncywgYm9vbCBnc3RHTEVuYWJsZWQpCi0gICAgICAgIDogbV92aWRlb0Rl
Y29kZXJQbGF0Zm9ybSh2aWRlb0RlY29kZXJQbGF0Zm9ybSkKLSAgICB7Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKEdTVF9JU19TQU1QTEUoc2FtcGxlKSk7Ci0KLSAgICAgICAgR3N0VmlkZW9JbmZv
IHZpZGVvSW5mbzsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFnZXRTYW1wbGVWaWRlb0luZm8oc2Ft
cGxlLCB2aWRlb0luZm8pKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX3NpemUg
PSBJbnRTaXplKEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pLCBHU1RfVklERU9fSU5G
T19IRUlHSFQoJnZpZGVvSW5mbykpOwotICAgICAgICBtX2hhc0FscGhhQ2hhbm5lbCA9IEdTVF9W
SURFT19JTkZPX0hBU19BTFBIQSgmdmlkZW9JbmZvKTsKLSAgICAgICAgbV9idWZmZXIgPSBnc3Rf
c2FtcGxlX2dldF9idWZmZXIoc2FtcGxlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCFHU1RfSVNf
QlVGRkVSKG1fYnVmZmVyKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoR1NUUkVB
TUVSX0dMKQotICAgICAgICBtX2ZsYWdzID0gZmxhZ3MgfCAobV9oYXNBbHBoYUNoYW5uZWwgPyBU
ZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMCk7Ci0KLSAgICAgICAgaWYgKGdzdEdMRW5h
YmxlZCkgewotICAgICAgICAgICAgbV9pc01hcHBlZCA9IGdzdF92aWRlb19mcmFtZV9tYXAoJm1f
dmlkZW9GcmFtZSwgJnZpZGVvSW5mbywgbV9idWZmZXIsIHN0YXRpY19jYXN0PEdzdE1hcEZsYWdz
PihHU1RfTUFQX1JFQUQgfCBHU1RfTUFQX0dMKSk7Ci0gICAgICAgICAgICBpZiAobV9pc01hcHBl
ZCkgewotICAgICAgICAgICAgICAgIG1fdGV4dHVyZUlEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8R0x1
aW50Kj4obV92aWRlb0ZyYW1lLmRhdGFbMF0pOwotICAgICAgICAgICAgICAgIG1faGFzTWFwcGVk
VGV4dHVyZXMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSNlbHNlCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShmbGFncyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShnc3RHTEVu
YWJsZWQpOwotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KLSAgICAgICAgewotICAgICAg
ICAgICAgbV90ZXh0dXJlSUQgPSAwOwotICAgICAgICAgICAgbV9pc01hcHBlZCA9IGdzdF92aWRl
b19mcmFtZV9tYXAoJm1fdmlkZW9GcmFtZSwgJnZpZGVvSW5mbywgbV9idWZmZXIsIEdTVF9NQVBf
UkVBRCk7Ci0gICAgICAgICAgICBpZiAobV9pc01hcHBlZCkgewotICAgICAgICAgICAgICAgIC8v
IFJpZ2h0IG5vdyB0aGUgVGV4dHVyZU1hcHBlciBvbmx5IHN1cHBvcnRzIGNocm9tYXMgd2l0aCBv
bmUgcGxhbmUKLSAgICAgICAgICAgICAgICBBU1NFUlQoR1NUX1ZJREVPX0lORk9fTl9QTEFORVMo
JnZpZGVvSW5mbykgPT0gMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIH5Hc3RWaWRlb0ZyYW1lSG9sZGVyKCkKLSAgICB7Ci0gICAgICAgIGlmIChVTkxJ
S0VMWSghbV9pc01hcHBlZCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZ3N0X3Zp
ZGVvX2ZyYW1lX3VubWFwKCZtX3ZpZGVvRnJhbWUpOwotICAgIH0KLQotI2lmIFVTRShHU1RSRUFN
RVJfR0wpCi0gICAgdmlydHVhbCB2b2lkIHdhaXRGb3JDUFVTeW5jKCkKLSAgICB7Ci0gICAgICAg
IEdzdEdMU3luY01ldGEqIG1ldGEgPSBnc3RfYnVmZmVyX2dldF9nbF9zeW5jX21ldGEobV9idWZm
ZXIpOwotICAgICAgICBpZiAobWV0YSkgewotICAgICAgICAgICAgR3N0TWVtb3J5KiBtZW0gPSBn
c3RfYnVmZmVyX3BlZWtfbWVtb3J5KG1fYnVmZmVyLCAwKTsKLSAgICAgICAgICAgIEdzdEdMQ29u
dGV4dCogY29udGV4dCA9ICgoR3N0R0xCYXNlTWVtb3J5KiltZW0pLT5jb250ZXh0OwotICAgICAg
ICAgICAgZ3N0X2dsX3N5bmNfbWV0YV93YWl0X2NwdShtZXRhLCBjb250ZXh0KTsKLSAgICAgICAg
fQotICAgIH0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQotCi0gICAgY29uc3QgSW50U2l6
ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGJvb2wgaGFzQWxwaGFDaGFu
bmVsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYUNoYW5uZWw7IH0KLSAgICBUZXh0dXJlTWFw
cGVyR0w6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFnczsgfQotICAgIEdMdWlu
dCB0ZXh0dXJlSUQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJRDsgfQotICAgIGJvb2wgaGFz
TWFwcGVkVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc01hcHBlZFRleHR1cmVzOyB9Ci0g
ICAgY29uc3QgR3N0VmlkZW9GcmFtZSYgdmlkZW9GcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlk
ZW9GcmFtZTsgfQotCi0gICAgdm9pZCB1cGRhdGVUZXh0dXJlKEJpdG1hcFRleHR1cmVHTCYgdGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV90ZXh0dXJlSUQpOwotICAgICAgICBHc3RW
aWRlb0dMVGV4dHVyZVVwbG9hZE1ldGEqIG1ldGE7Ci0gICAgICAgIGlmIChtX2J1ZmZlciAmJiAo
bWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX2dsX3RleHR1cmVfdXBsb2FkX21ldGEobV9idWZm
ZXIpKSkgewotICAgICAgICAgICAgaWYgKG1ldGEtPm5fdGV4dHVyZXMgPT0gMSkgeyAvLyBCUkd4
ICYgQkdSQSBmb3JtYXRzIHVzZSBvbmx5IG9uZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIGd1
aW50IGlkc1s0XSA9IHsgdGV4dHVyZS5pZCgpLCAwLCAwLCAwIH07Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoZ3N0X3ZpZGVvX2dsX3RleHR1cmVfdXBsb2FkX21ldGFfdXBsb2FkKG1ldGEsIGlkcykp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghbV9pc01hcHBlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBpbnQgc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklERSgmbV92aWRlb0ZyYW1l
LCAwKTsKLSAgICAgICAgY29uc3Qgdm9pZCogc3JjRGF0YSA9IEdTVF9WSURFT19GUkFNRV9QTEFO
RV9EQVRBKCZtX3ZpZGVvRnJhbWUsIDApOwotCi0gICAgICAgIGlmICghc3JjRGF0YSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICB0ZXh0dXJlLnVwZGF0ZUNvbnRlbnRzKHNyY0RhdGEs
IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSks
IFdlYkNvcmU6OkludFBvaW50KDAsIDApLCBzdHJpZGUpOwotICAgIH0KLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gcGxhdGZvcm1MYXllckJ1
ZmZlcigpCi0gICAgewotICAgICAgICBpZiAoIW1faGFzTWFwcGVkVGV4dHVyZXMpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICB1c2luZyBCdWZmZXIgPSBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllckJ1ZmZlcjsKLQotICAgICAgICBpZiAoKEdTVF9WSURFT19JTkZPX0lT
X1JHQigmbV92aWRlb0ZyYW1lLmluZm8pICYmIEdTVF9WSURFT19JTkZPX05fUExBTkVTKCZtX3Zp
ZGVvRnJhbWUuaW5mbykgPT0gMSkpCi0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxCdWZm
ZXI+KEJ1ZmZlcjo6VGV4dHVyZVZhcmlhbnQgeyBCdWZmZXI6OlJHQlRleHR1cmUgeyAqc3RhdGlj
X2Nhc3Q8R0x1aW50Kj4obV92aWRlb0ZyYW1lLmRhdGFbMF0pIH0gfSwgbV9zaXplLCBtX2ZsYWdz
LCBHTF9SR0JBKTsKLQotICAgICAgICBpZiAoR1NUX1ZJREVPX0lORk9fSVNfWVVWKCZtX3ZpZGVv
RnJhbWUuaW5mbykpIHsKLSAgICAgICAgICAgIGlmIChHU1RfVklERU9fSU5GT19OX0NPTVBPTkVO
VFMoJm1fdmlkZW9GcmFtZS5pbmZvKSA8IDMgfHwgR1NUX1ZJREVPX0lORk9fTl9QTEFORVMoJm1f
dmlkZW9GcmFtZS5pbmZvKSA+IDMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgICAgIGlmIChtX3ZpZGVvRGVjb2RlclBsYXRmb3JtICYmICptX3ZpZGVvRGVjb2Rl
clBsYXRmb3JtID09IEdzdFZpZGVvRGVjb2RlclBsYXRmb3JtOjpJbXhWUFUpIHsKLSAgICAgICAg
ICAgICAgICAvLyBJTVggVlBVIGRlY29kZXIgZGVjb2RlcyBZVVYgZGF0YSBvbmx5IGludG8gdGhl
IFkgdGV4dHVyZSBmcm9tIHdoaWNoIHRoZSBzYW1wbGVyCi0gICAgICAgICAgICAgICAgLy8gdGhl
biBkaXJlY3RseSBwcm9kdWNlcyBSR0JBIGRhdGEuIFRleHR1cmVzIGZvciBvdGhlciBwbGFuZXMg
YXJlbid0IHVzZWQsIGJ1dAotICAgICAgICAgICAgICAgIC8vIHRoYXQncyBkZWNvZGVyJ3MgcHJv
YmxlbS4gV2UgaGF2ZSB0byB0cmVhdCB0aGF0IFkgdGV4dHVyZSBhcyBoYXZpbmcgUkdCQSBkYXRh
LgotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEJ1ZmZlcj4oQnVmZmVyOjpUZXh0
dXJlVmFyaWFudCB7IEJ1ZmZlcjo6UkdCVGV4dHVyZSB7ICpzdGF0aWNfY2FzdDxHTHVpbnQqPiht
X3ZpZGVvRnJhbWUuZGF0YVswXSkgfSB9LCBtX3NpemUsIG1fZmxhZ3MsIEdMX1JHQkEpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZlBsYW5lcyA9IEdTVF9W
SURFT19JTkZPX05fUExBTkVTKCZtX3ZpZGVvRnJhbWUuaW5mbyk7Ci0gICAgICAgICAgICBzdGQ6
OmFycmF5PEdMdWludCwgMz4gcGxhbmVzOwotICAgICAgICAgICAgc3RkOjphcnJheTx1bnNpZ25l
ZCwgMz4geXV2UGxhbmU7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVuc2lnbmVkLCAzPiB5dXZQ
bGFuZU9mZnNldDsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJP
ZlBsYW5lczsgKytpKQotICAgICAgICAgICAgICAgIHBsYW5lc1tpXSA9ICpzdGF0aWNfY2FzdDxH
THVpbnQqPihtX3ZpZGVvRnJhbWUuZGF0YVtpXSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgICAgICAgICAgeXV2UGxhbmVbaV0gPSBHU1Rf
VklERU9fSU5GT19DT01QX1BMQU5FKCZtX3ZpZGVvRnJhbWUuaW5mbywgaSk7Ci0gICAgICAgICAg
ICAgICAgeXV2UGxhbmVPZmZzZXRbaV0gPSBHU1RfVklERU9fSU5GT19DT01QX1BPRkZTRVQoJm1f
dmlkZW9GcmFtZS5pbmZvLCBpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RkOjph
cnJheTxHTGZsb2F0LCA5PiB5dXZUb1JnYjsKLSAgICAgICAgICAgIGlmIChnc3RfdmlkZW9fY29s
b3JpbWV0cnlfbWF0Y2hlcygmR1NUX1ZJREVPX0lORk9fQ09MT1JJTUVUUlkoJm1fdmlkZW9GcmFt
ZS5pbmZvKSwgR1NUX1ZJREVPX0NPTE9SSU1FVFJZX0JUNzA5KSkgewotICAgICAgICAgICAgICAg
IHl1dlRvUmdiID0gewotICAgICAgICAgICAgICAgICAgICAxLjE2NGYsICAwLjBmLCAgICAxLjc4
N2YsCi0gICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgLTAuMjEzZiwgLTAuNTMxZiwKLSAgICAg
ICAgICAgICAgICAgICAgMS4xNjRmLCAgMi4xMTJmLCAgMC4wZgotICAgICAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gYnQ2
MDEuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3VyIGFzIEdTdHJlYW1lcidzIGdsY29sb3Jjb252
ZXJ0IGVsZW1lbnQuCi0gICAgICAgICAgICAgICAgeXV2VG9SZ2IgPSB7Ci0gICAgICAgICAgICAg
ICAgICAgIDEuMTY0ZiwgIDAuMGYsICAgIDEuNTk2ZiwKLSAgICAgICAgICAgICAgICAgICAgMS4x
NjRmLCAtMC4zOTFmLCAtMC44MTNmLAotICAgICAgICAgICAgICAgICAgICAxLjE2NGYsICAyLjAx
OGYsICAwLjBmCi0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8QnVmZmVyPiggQnVmZmVyOjpUZXh0dXJlVmFyaWFudCB7IEJ1
ZmZlcjo6WVVWVGV4dHVyZSB7IG51bWJlck9mUGxhbmVzLCBwbGFuZXMsIHl1dlBsYW5lLCB5dXZQ
bGFuZU9mZnNldCwgeXV2VG9SZ2IgfSB9LCBtX3NpemUsIG1fZmxhZ3MsIEdMX1JHQkEpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IEdzdEJ1ZmZlciogbV9idWZmZXI7Ci0gICAgR3N0VmlkZW9GcmFtZSBtX3ZpZGVvRnJhbWUgeyB9
OwotICAgIEludFNpemUgbV9zaXplOwotICAgIGJvb2wgbV9oYXNBbHBoYUNoYW5uZWw7Ci0gICAg
T3B0aW9uYWw8R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm0+IG1fdmlkZW9EZWNvZGVyUGxhdGZvcm07
Ci0gICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX2ZsYWdzIHsgfTsKLSAgICBHTHVpbnQgbV90
ZXh0dXJlSUQgeyAwIH07Ci0gICAgYm9vbCBtX2lzTWFwcGVkIHsgZmFsc2UgfTsKLSAgICBib29s
IG1faGFzTWFwcGVkVGV4dHVyZXMgeyBmYWxzZSB9OwotfTsKLSNlbmRpZgotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmluaXRpYWxpemVEZWJ1Z0NhdGVnb3J5KCkKLXsK
LSAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVnLCAi
d2Via2l0bWVkaWFwbGF5ZXIiLCAwLCAiV2ViS2l0IG1lZGlhIHBsYXllciIpOwotfQotCi1NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCi0gICAgOiBtX25vdGlmaWVyKE1haW5UaHJlYWROb3Rp
ZmllcjxNYWluVGhyZWFkTm90aWZpY2F0aW9uPjo6Y3JlYXRlKCkpCi0gICAgLCBtX3BsYXllcihw
bGF5ZXIpCi0gICAgLCBtX2Zwc1NpbmsobnVsbHB0cikKLSAgICAsIG1fcmVhZHlTdGF0ZShNZWRp
YVBsYXllcjo6SGF2ZU5vdGhpbmcpCi0gICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6
RW1wdHkpCi0gICAgLCBtX2RyYXdUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpyZXBhaW50KQotI2lmIFVTRShURVhUVVJFX01BUFBF
Ul9HTCkKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAsIG1fbmljb3NpYUxheWVyKE5pY29zaWE6OkNv
bnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
OjpjcmVhdGVGYWN0b3J5KCp0aGlzKSkpCi0jZWxzZQotICAgICwgbV9wbGF0Zm9ybUxheWVyUHJv
eHkoYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkoKSkpCi0jZW5k
aWYKLSNlbmRpZgotewotfQotCi1NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp+TWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSgpCi17Ci0jaWYgVVNFKEdTVFJFQU1FUl9HTCkK
LSAgICBpZiAobV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9PSBHc3RWaWRlb0RlY29kZXJQbGF0Zm9y
bTo6VmlkZW80TGludXgpCi0gICAgICAgIGZsdXNoQ3VycmVudEJ1ZmZlcigpOwotI2VuZGlmCi0j
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiBVU0UoTklDT1NJQSkKLSAgICBkb3duY2FzdDxO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmlt
cGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOwotI2VuZGlmCi0KLSAgICBtX25vdGlmaWVyLT5pbnZh
bGlkYXRlKCk7Ci0KLSAgICBpZiAobV92aWRlb1NpbmspIHsKLSAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fdmlkZW9TaW5rLmdldCgpLCBHX1NJR05BTF9NQVRD
SF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLSNpZiBVU0UoR1NUUkVBTUVS
X0dMKQotICAgICAgICBpZiAoR1NUX0lTX0JJTihtX3ZpZGVvU2luay5nZXQoKSkpIHsKLSAgICAg
ICAgICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gYXBwc2luayA9IGFkb3B0R1JlZihnc3RfYmluX2dl
dF9ieV9uYW1lKEdTVF9CSU5fQ0FTVChtX3ZpZGVvU2luay5nZXQoKSksICJ3ZWJraXQtZ2wtdmlk
ZW8tc2luayIpKTsKLSAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlf
ZGF0YShhcHBzaW5rLmdldCgpLCB0aGlzKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0g
ICAgaWYgKG1fdm9sdW1lRWxlbWVudCkKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9tYXRjaGVkKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwg
MCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7Ci0KLSAgICAvLyBUaGlzIHdpbGwgcmVsZWFz
ZSB0aGUgR1N0cmVhbWVyIHRocmVhZCBmcm9tIG1fZHJhd0NvbmRpdGlvbiBpbiBub24gQUMgbW9k
ZSBpbiBjYXNlIHRoZXJlJ3MgYW4gb25nb2luZyB0cmlnZ2VyUmVwYWludCBjYWxsCi0gICAgLy8g
d2FpdGluZyB0aGVyZSwgYW5kIGVuc3VyZSB0aGF0IGFueSB0cmlnZ2VyUmVwYWludCBjYWxsIHJl
YWNoaW5nIHRoZSBsb2NrIHdvbid0IHdhaXQgb24gbV9kcmF3Q29uZGl0aW9uLgotICAgIGNhbmNl
bFJlcGFpbnQodHJ1ZSk7Ci0KLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgIG1fY2Rt
QXR0YWNobWVudFNlbWFwaG9yZS5zaWduYWwoKTsKLSNlbmRpZgotCi0gICAgLy8gVGhlIGNoYW5n
ZSB0byBHU1RfU1RBVEVfTlVMTCBzdGF0ZSBpcyBhbHdheXMgc3luY2hyb25vdXMuIFNvIGFmdGVy
IHRoaXMgZ2V0cyBleGVjdXRlZCB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5Ci0gICAgLy8gYWJvdXQg
aGFuZGxlcnMgcnVubmluZyBpbiB0aGUgR1N0cmVhbWVyIHRocmVhZC4KLSAgICBpZiAobV9waXBl
bGluZSkKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdT
VF9TVEFURV9OVUxMKTsKLQotICAgIG1fcGxheWVyID0gbnVsbHB0cjsKLX0KLQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRQaXBlbGluZShHc3RFbGVtZW50KiBwaXBl
bGluZSkKLXsKLSAgICBtX3BpcGVsaW5lID0gcGlwZWxpbmU7Ci0KLSAgICBHUmVmUHRyPEdzdEJ1
cz4gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3Bp
cGVsaW5lLmdldCgpKSkpOwotICAgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcihidXMuZ2V0KCks
IFtdKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0g
ICAgICAgIGF1dG8mIHBsYXllciA9ICpzdGF0aWNfY2FzdDxNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlKj4odXNlckRhdGEpOwotCi0gICAgICAgIGlmIChwbGF5ZXIuaGFuZGxlU3luY01l
c3NhZ2UobWVzc2FnZSkpIHsKLSAgICAgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmKG1lc3NhZ2Up
OwotICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiBHU1RfQlVTX1BBU1M7Ci0gICAgfSwgdGhpcywgbnVsbHB0cik7Ci19Ci0KLWJvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVz
c2FnZSogbWVzc2FnZSkKLXsKLSAgICBVTlVTRURfUEFSQU0obWVzc2FnZSk7Ci0gICAgaWYgKEdT
VF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgIT0gR1NUX01FU1NBR0VfTkVFRF9DT05URVhUKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBnY2hhciogY29udGV4dFR5cGU7Ci0gICAg
Z3N0X21lc3NhZ2VfcGFyc2VfY29udGV4dF90eXBlKG1lc3NhZ2UsICZjb250ZXh0VHlwZSk7Ci0g
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiSGFuZGxpbmcgJXMgbmVlZC1jb250ZXh0
IG1lc3NhZ2UgZm9yICVzIiwgY29udGV4dFR5cGUsIEdTVF9NRVNTQUdFX1NSQ19OQU1FKG1lc3Nh
Z2UpKTsKLQotICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCBXRUJLSVRfV0VCX1NSQ19Q
TEFZRVJfQ09OVEVYVF9UWVBFX05BTUUpKSB7Ci0gICAgICAgIEdSZWZQdHI8R3N0Q29udGV4dD4g
Y29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoV0VCS0lUX1dFQl9TUkNfUExBWUVS
X0NPTlRFWFRfVFlQRV9OQU1FLCBGQUxTRSkpOwotICAgICAgICBHc3RTdHJ1Y3R1cmUqIGNvbnRl
eHRTdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoY29udGV4dC5nZXQo
KSk7Ci0KLSAgICAgICAgQVNTRVJUKG1fcGxheWVyKTsKLSAgICAgICAgZ3N0X3N0cnVjdHVyZV9z
ZXQoY29udGV4dFN0cnVjdHVyZSwgInBsYXllciIsIEdfVFlQRV9QT0lOVEVSLCBtX3BsYXllciwg
bnVsbHB0cik7Ci0gICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKEdT
VF9NRVNTQUdFX1NSQyhtZXNzYWdlKSksIGNvbnRleHQuZ2V0KCkpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIEdSZWZQdHI8R3N0Q29u
dGV4dD4gZWxlbWVudENvbnRleHQgPSBhZG9wdEdSZWYocmVxdWVzdEdMQ29udGV4dChjb250ZXh0
VHlwZSkpOwotICAgIGlmIChlbGVtZW50Q29udGV4dCkgewotICAgICAgICBnc3RfZWxlbWVudF9z
ZXRfY29udGV4dChHU1RfRUxFTUVOVChtZXNzYWdlLT5zcmMpLCBlbGVtZW50Q29udGV4dC5nZXQo
KSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
X0dMKQotCi0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICBpZiAoIWdfc3RyY21wMChj
b250ZXh0VHlwZSwgImRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQiKSkgewotICAg
ICAgICBpZiAoaXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAgICAgIEdTVF9FUlJPUigiY2FuJ3Qg
aGFuZGxlIGRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQgbmVlZCBjb250ZXh0IG1l
c3NhZ2UgaW4gdGhlIG1haW4gdGhyZWFkIik7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJoYW5kbGluZyBkcm0tcHJlZmVycmVkLWRlY3J5cHRp
b24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNzYWdlIik7Ci0KLSAgICAgICAgSW5pdERhdGEg
aW5pdERhdGE7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExvY2tIb2xkZXIgbG9jayhtX3Byb3Rl
Y3Rpb25NdXRleCk7Ci0gICAgICAgICAgICBQcm90ZWN0aW9uU3lzdGVtRXZlbnRzIHByb3RlY3Rp
b25TeXN0ZW1FdmVudHMobWVzc2FnZSk7Ci0gICAgICAgICAgICBHU1RfVFJBQ0UoImZvdW5kICV6
dSBwcm90ZWN0aW9uIGV2ZW50cywgJXp1IGRlY3J5cHRvcnMgYXZhaWxhYmxlIiwgcHJvdGVjdGlv
blN5c3RlbUV2ZW50cy5ldmVudHMoKS5zaXplKCksIHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuYXZh
aWxhYmxlU3lzdGVtcygpLnNpemUoKSk7Ci0KLSAgICAgICAgICAgIGZvciAoYXV0byYgZXZlbnQg
OiBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgY2hhciogZXZlbnRLZXlTeXN0ZW1JZCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgR3N0
QnVmZmVyKiBkYXRhID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBnc3RfZXZlbnRfcGFyc2Vf
cHJvdGVjdGlvbihldmVudC5nZXQoKSwgJmV2ZW50S2V5U3lzdGVtSWQsICZkYXRhLCBudWxscHRy
KTsKLQotICAgICAgICAgICAgICAgIGluaXREYXRhLmFwcGVuZCh7ZXZlbnRLZXlTeXN0ZW1JZCwg
ZGF0YX0pOwotICAgICAgICAgICAgICAgIG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHMuYWRkKEdT
VF9FVkVOVF9TRVFOVU0oZXZlbnQuZ2V0KCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChXVEZNb3ZlKGluaXREYXRhKSk7
Ci0KLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJ3YWl0aW5nIGZvciBhIENE
TSBpbnN0YW5jZSIpOwotICAgICAgICBpZiAobV9jZG1BdHRhY2htZW50U2VtYXBob3JlLndhaXRG
b3IoNF9zKQotICAgICAgICAgICAgJiYgbV9ub3RpZmllci0+aXNWYWxpZCgpIC8vIENoZWNrIHRo
ZSBwbGF5ZXIgaXMgbm90IGJlaW5nIGRlc3Ryb3llZC4KLSAgICAgICAgICAgICYmICFtX2NkbUlu
c3RhbmNlLT5rZXlTeXN0ZW0oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHByZWZlcnJlZEtleVN5c3RlbVV1aWQgPSBHU3RyZWFtZXJFTUVVdGlsaXRpZXM6OmtleVN5c3Rl
bVRvVXVpZChtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKSk7Ci0gICAgICAgICAgICBHU1RfSU5G
T19PQkpFQ1QocGlwZWxpbmUoKSwgIndvcmtpbmcgd2l0aCBrZXkgc3lzdGVtICVzLCBjb250aW51
aW5nIHdpdGgga2V5IHN5c3RlbSAlcyBvbiAlcyIsIG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgp
LnV0ZjgoKS5kYXRhKCksIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIEdTVF9NRVNTQUdFX1NSQ19O
QU1FKG1lc3NhZ2UpKTsKLQotICAgICAgICAgICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0
ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5
c3RlbS1pZCIsIEZBTFNFKSk7Ci0gICAgICAgICAgICBHc3RTdHJ1Y3R1cmUqIGNvbnRleHRTdHJ1
Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoY29udGV4dC5nZXQoKSk7Ci0g
ICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChjb250ZXh0U3RydWN0dXJlLCAiZGVjcnlwdGlv
bi1zeXN0ZW0taWQiLCBHX1RZUEVfU1RSSU5HLCBwcmVmZXJyZWRLZXlTeXN0ZW1VdWlkLCBudWxs
cHRyKTsKLSAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKEdT
VF9NRVNTQUdFX1NSQyhtZXNzYWdlKSksIGNvbnRleHQuZ2V0KCkpOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJDRE0gaW5zdGFuY2Ugbm90IGluaXRpYWxpemFlZCIp
OwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoRU5DUllQ
VEVEX01FRElBKQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgVVNFKEdTVFJFQU1FUl9H
TCkKLUdzdENvbnRleHQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcXVlc3RH
TENvbnRleHQoY29uc3QgY2hhciogY29udGV4dFR5cGUpCi17Ci0gICAgaWYgKCFlbnN1cmVHc3RH
TENvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIWdfc3RyY21w
MChjb250ZXh0VHlwZSwgR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFKSkgewotICAgICAgICBH
c3RDb250ZXh0KiBkaXNwbGF5Q29udGV4dCA9IGdzdF9jb250ZXh0X25ldyhHU1RfR0xfRElTUExB
WV9DT05URVhUX1RZUEUsIFRSVUUpOwotICAgICAgICBnc3RfY29udGV4dF9zZXRfZ2xfZGlzcGxh
eShkaXNwbGF5Q29udGV4dCwgZ3N0R0xEaXNwbGF5KCkpOwotICAgICAgICByZXR1cm4gZGlzcGxh
eUNvbnRleHQ7Ci0gICAgfQotCi0gICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUsICJnc3Qu
Z2wuYXBwX2NvbnRleHQiKSkgewotICAgICAgICBHc3RDb250ZXh0KiBhcHBDb250ZXh0ID0gZ3N0
X2NvbnRleHRfbmV3KCJnc3QuZ2wuYXBwX2NvbnRleHQiLCBUUlVFKTsKLSAgICAgICAgR3N0U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoYXBwQ29u
dGV4dCk7Ci0jaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgMTIsIDApCi0gICAgICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfVFlQRV9HTF9DT05URVhULCBnc3RH
TENvbnRleHQoKSwgbnVsbHB0cik7Ci0jZWxzZQotICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChz
dHJ1Y3R1cmUsICJjb250ZXh0IiwgR1NUX0dMX1RZUEVfQ09OVEVYVCwgZ3N0R0xDb250ZXh0KCks
IG51bGxwdHIpOwotI2VuZGlmCi0gICAgICAgIHJldHVybiBhcHBDb250ZXh0OwotICAgIH0KLQot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OmVuc3VyZUdzdEdMQ29udGV4dCgpCi17Ci0gICAgaWYgKG1fZ2xDb250ZXh0KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8mIHNoYXJlZERpc3BsYXkgPSBQbGF0Zm9ybURp
c3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpOwotCi0gICAgLy8gVGhlIGZsb2F0
aW5nIHJlZiByZW1vdmFsIHN1cHBvcnQgd2FzIGFkZGVkIGluIGh0dHBzOi8vYnVnemlsbGEuZ25v
bWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDMwNjIuCi0gICAgYm9vbCBzaG91bGRBZG9wdFJlZiA9
IHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxNCwgMCk7Ci0gICAgaWYgKCFtX2dsRGlzcGxheSkg
ewotI2lmIFBMQVRGT1JNKFgxMSkKLSNpZiBVU0UoR0xYKQotICAgICAgICBpZiAoaXM8UGxhdGZv
cm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBHTCBkaXNwbGF5Iik7Ci0gICAg
ICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgICAgICAgICAgbV9nbERpc3BsYXkg
PSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rp
c3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUo
KSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdT
VF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0
PFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKTsKLSAgICAgICAg
fQotI2VsaWYgVVNFKEVHTCkKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oc2hh
cmVkRGlzcGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IkNyZWF0aW5nIFgxMSBzaGFyZWQgRUdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91
bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1Rf
R0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNh
c3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElT
UExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxh
dGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAg
fQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdBWUxBTkQpCi0gICAgICAgIGlmIChp
czxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ3JlYXRpbmcgV2F5bGFuZCBzaGFyZWQgZGlz
cGxheSIpOwotICAgICAgICAgICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAg
IG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2Vn
bF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihz
aGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xf
bmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hh
cmVkRGlzcGxheSkuZWdsRGlzcGxheSgpKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotCi0jaWYgVVNF
KFdQRV9SRU5ERVJFUikKLSAgICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQRT4oc2hh
cmVkRGlzcGxheSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IkNyZWF0aW5nIFdQRSBzaGFyZWQgRUdMIGRpc3BsYXkiKTsKLSAgICAgICAgICAgIGlmIChzaG91
bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1Rf
R0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNh
c3Q8UGxhdGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xf
RElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8
UGxhdGZvcm1EaXNwbGF5TGliV1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAg
ICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgQVNTRVJUKG1fZ2xEaXNwbGF5KTsKLSAgICB9Ci0K
LSAgICBHTENvbnRleHQqIHdlYmtpdENvbnRleHQgPSBzaGFyZWREaXNwbGF5LnNoYXJpbmdHTENv
bnRleHQoKTsKLSAgICAvLyBFR0wgYW5kIEdMWCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBubyBu
ZWVkIGZvciBpZmRlZnMgaGVyZS4KLSAgICBHc3RHTFBsYXRmb3JtIGdsUGxhdGZvcm0gPSB3ZWJr
aXRDb250ZXh0LT5pc0VHTENvbnRleHQoKSA/IEdTVF9HTF9QTEFURk9STV9FR0wgOiBHU1RfR0xf
UExBVEZPUk1fR0xYOwotCi0jaWYgVVNFKE9QRU5HTF9FUykKLSAgICBHc3RHTEFQSSBnbEFQSSA9
IEdTVF9HTF9BUElfR0xFUzI7Ci0jZWxpZiBVU0UoT1BFTkdMKQotICAgIEdzdEdMQVBJIGdsQVBJ
ID0gR1NUX0dMX0FQSV9PUEVOR0w7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I2VuZGlmCi0KLSAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHRIYW5kbGUgPSB3
ZWJraXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHRIYW5kbGUp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAg
ICAgbV9nbENvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQobV9n
bERpc3BsYXkuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUp
LCBnbFBsYXRmb3JtLCBnbEFQSSkpOwotICAgIGVsc2UKLSAgICAgICAgbV9nbENvbnRleHQgPSBn
c3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZChtX2dsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKTsKLQotICAg
IC8vIEFjdGl2YXRlIGFuZCBmaWxsIHRoZSBHU3RyZWFtZXIgd3JhcHBlZCBjb250ZXh0IHdpdGgg
dGhlIFdlYmtpdCdzIHNoYXJlZCBvbmUuCi0gICAgYXV0byBwcmV2aW91c0FjdGl2ZUNvbnRleHQg
PSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICB3ZWJraXRDb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICBpZiAoZ3N0X2dsX2NvbnRleHRfYWN0aXZhdGUobV9nbENvbnRleHQuZ2V0
KCksIFRSVUUpKSB7Ci0gICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAg
ICAgaWYgKCFnc3RfZ2xfY29udGV4dF9maWxsX2luZm8obV9nbENvbnRleHQuZ2V0KCksICZlcnJv
ci5vdXRQdHIoKSkpCi0gICAgICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGZpbGwgaW4g
R1N0cmVhbWVyIGNvbnRleHQ6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICBnc3RfZ2xf
Y29udGV4dF9hY3RpdmF0ZShtX2dsQ29udGV4dC5nZXQoKSwgRkFMU0UpOwotICAgIH0gZWxzZQot
ICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGFjdGl2YXRlIEdTdHJlYW1lciBjb250ZXh0
ICUiIEdTVF9QVFJfRk9STUFULCBtX2dsQ29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKHByZXZpb3Vz
QWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVJfR0wpCi0KLS8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHZpZGVvCi1GbG9hdFNpemUgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmF0dXJhbFNpemUoKSBjb25zdAotewotI2lm
IFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQotICAgIC8vIFdoZW4gdXNpbmcgdGhlIGhvbGVwdWNo
IHdlIG1heSBub3QgYmUgYWJsZSB0byBnZXQgdGhlIHZpZGVvIGZyYW1lcyBzaXplLCBzbyB3ZSBj
YW4ndCB1c2UKLSAgICAvLyBpdC4gQnV0IHdlIG5lZWQgdG8gcmVwb3J0IHNvbWUgbm9uIGVtcHR5
IG5hdHVyYWxTaXplIGZvciB0aGUgcGxheWVyJ3MgR3JhcGhpY3NMYXllcgotICAgIC8vIHRvIGJl
IHByb3Blcmx5IGNyZWF0ZWQuCi0gICAgcmV0dXJuIHNfaG9sZVB1bmNoRGVmYXVsdEZyYW1lU2l6
ZTsKLSNlbmRpZgotCi0gICAgaWYgKCFoYXNWaWRlbygpKQotICAgICAgICByZXR1cm4gRmxvYXRT
aXplKCk7Ci0KLSAgICBpZiAoIW1fdmlkZW9TaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IG1fdmlkZW9TaXplOwotCi0gICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBs
ZU11dGV4KTsKLSAgICBpZiAoIUdTVF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gRmxvYXRTaXplKCk7Ci0KLSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9n
ZXRfY2FwcyhtX3NhbXBsZS5nZXQoKSk7Ci0gICAgaWYgKCFjYXBzKQotICAgICAgICByZXR1cm4g
RmxvYXRTaXplKCk7Ci0KLQotICAgIC8vIFRPRE86IGhhbmRsZSBwb3NzaWJsZSBjbGVhbiBhcGVy
dHVyZSBkYXRhLiBTZWUKLSAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTk2NTcxCi0gICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIHRyYW5zZm9ybWF0
aW9uIG1hdHJpeC4gU2VlCi0gICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19i
dWcuY2dpP2lkPTU5NjMyNgotCi0gICAgLy8gR2V0IHRoZSB2aWRlbyBQQVIgYW5kIG9yaWdpbmFs
IHNpemUsIGlmIHRoaXMgZmFpbHMgdGhlCi0gICAgLy8gdmlkZW8tc2luayBoYXMgbGlrZWx5IG5v
dCB5ZXQgbmVnb3RpYXRlZCBpdHMgY2Fwcy4KLSAgICBpbnQgcGl4ZWxBc3BlY3RSYXRpb051bWVy
YXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGU7Ci0gICAgSW50U2l6ZSBv
cmlnaW5hbFNpemU7Ci0gICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ2V0Vmlk
ZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMoY2Fwcywgb3JpZ2luYWxTaXplLCBmb3JtYXQsIHBpeGVs
QXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3RyaWRl
KSkKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOwotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVS
X0dMKQotICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcsIGlmIHRoZSB2
aWRlbyBpcyB0YWdnZWQgYXMgcm90YXRlZCA5MCBvciAyNzAgZGVncmVlcywgc3dhcCB3aWR0aCBh
bmQgaGVpZ2h0LgotICAgIGlmIChtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQpIHsKLSAgICAg
ICAgaWYgKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKQotICAg
ICAgICAgICAgb3JpZ2luYWxTaXplID0gb3JpZ2luYWxTaXplLnRyYW5zcG9zZWRTaXplKCk7Ci0g
ICAgfQotI2VuZGlmCi0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJPcmlnaW5h
bCB2aWRlbyBzaXplOiAlZHglZCIsIG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBvcmlnaW5hbFNpemUu
aGVpZ2h0KCkpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBpeGVsIGFzcGVj
dCByYXRpbzogJWQvJWQiLCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJh
dGlvRGVub21pbmF0b3IpOwotCi0gICAgLy8gQ2FsY3VsYXRlIERBUiBiYXNlZCBvbiBQQVIgYW5k
IHZpZGVvIHNpemUuCi0gICAgaW50IGRpc3BsYXlXaWR0aCA9IG9yaWdpbmFsU2l6ZS53aWR0aCgp
ICogcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvcjsKLSAgICBpbnQgZGlzcGxheUhlaWdodCA9IG9y
aWdpbmFsU2l6ZS5oZWlnaHQoKSAqIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcjsKLQotICAg
IC8vIERpdmlkZSBkaXNwbGF5IHdpZHRoIGFuZCBoZWlnaHQgYnkgdGhlaXIgR0NEIHRvIGF2b2lk
IHBvc3NpYmxlIG92ZXJmbG93cy4KLSAgICBpbnQgZGlzcGxheUFzcGVjdFJhdGlvR0NEID0gZ3Jl
YXRlc3RDb21tb25EaXZpc29yKGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7Ci0gICAgZGlz
cGxheVdpZHRoIC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKLSAgICBkaXNwbGF5SGVpZ2h0IC89
IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKLQotICAgIC8vIEFwcGx5IERBUiB0byBvcmlnaW5hbCB2
aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGluIHh2aW1hZ2VzaW5rJ3Mg
c2V0Y2FwcyBmdW5jdGlvbi4KLSAgICBndWludDY0IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAg
ICBpZiAoIShvcmlnaW5hbFNpemUuaGVpZ2h0KCkgJSBkaXNwbGF5SGVpZ2h0KSkgewotICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJLZWVwaW5nIHZpZGVvIG9yaWdpbmFsIGhl
aWdodCIpOwotICAgICAgICB3aWR0aCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2lu
YWxTaXplLmhlaWdodCgpLCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOwotICAgICAgICBo
ZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOwotICAg
IH0gZWxzZSBpZiAoIShvcmlnaW5hbFNpemUud2lkdGgoKSAlIGRpc3BsYXlXaWR0aCkpIHsKLSAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiS2VlcGluZyB2aWRlbyBvcmlnaW5h
bCB3aWR0aCIpOwotICAgICAgICBoZWlnaHQgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9y
aWdpbmFsU2l6ZS53aWR0aCgpLCBkaXNwbGF5SGVpZ2h0LCBkaXNwbGF5V2lkdGgpOwotICAgICAg
ICB3aWR0aCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS53aWR0aCgpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJBcHByb3hp
bWF0aW5nIHdoaWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0Iik7Ci0gICAgICAgIHdp
ZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRp
c3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0
PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiTmF0dXJhbCBzaXplOiAlIiBHX0dVSU5UNjRfRk9STUFUICJ4
JSIgR19HVUlOVDY0X0ZPUk1BVCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbV92aWRlb1NpemUgPSBG
bG9hdFNpemUoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCksIHN0YXRpY19jYXN0PGludD4oaGVpZ2h0
KSk7Ci0gICAgcmV0dXJuIG1fdmlkZW9TaXplOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OnNldFZvbHVtZShmbG9hdCB2b2x1bWUpCi17Ci0gICAgaWYgKCFtX3Zv
bHVtZUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIlNldHRpbmcgdm9sdW1lOiAlZiIsIHZvbHVtZSk7Ci0gICAgZ3N0X3N0cmVhbV92
b2x1bWVfc2V0X3ZvbHVtZShtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksIEdTVF9TVFJFQU1fVk9MVU1F
X0ZPUk1BVF9MSU5FQVIsIHN0YXRpY19jYXN0PGRvdWJsZT4odm9sdW1lKSk7Ci19Ci0KLWZsb2F0
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZvbHVtZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3ZvbHVtZUVsZW1lbnQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdz
dF9zdHJlYW1fdm9sdW1lX2dldF92b2x1bWUobV92b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RS
RUFNX1ZPTFVNRV9GT1JNQVRfTElORUFSKTsKLX0KLQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6Om5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCkKLXsKLSAgICBpZiAo
IW1fcGxheWVyIHx8ICFtX3ZvbHVtZUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBkb3Vi
bGUgdm9sdW1lOwotICAgIHZvbHVtZSA9IGdzdF9zdHJlYW1fdm9sdW1lX2dldF92b2x1bWUobV92
b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RSRUFNX1ZPTFVNRV9GT1JNQVRfTElORUFSKTsKLSAg
ICAvLyBnZXRfdm9sdW1lKCkgY2FuIHJldHVybiB2YWx1ZXMgc3VwZXJpb3IgdG8gMS4wIGlmIHRo
ZSB1c2VyCi0gICAgLy8gYXBwbGllcyBzb2Z0d2FyZSB1c2VyIGdhaW4gdmlhIHRoaXJkIHBhcnR5
IGFwcGxpY2F0aW9uIChHTk9NRQotICAgIC8vIHZvbHVtZSBjb250cm9sIGZvciBpbnN0YW5jZSku
Ci0gICAgdm9sdW1lID0gQ0xBTVAodm9sdW1lLCAwLjAsIDEuMCk7Ci0gICAgbV9wbGF5ZXItPnZv
bHVtZUNoYW5nZWQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZvbHVtZSkpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZvbHVtZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCi17Ci0gICAgLy8gVGhpcyBpcyBjYWxs
ZWQgd2hlbiBtX3ZvbHVtZUVsZW1lbnQgcmVjZWl2ZXMgdGhlIG5vdGlmeTo6dm9sdW1lIHNpZ25h
bC4KLSAgICBHU1RfREVCVUdfT0JKRUNUKHBsYXllci0+cGlwZWxpbmUoKSwgIlZvbHVtZSBjaGFu
Z2VkIHRvOiAlZiIsIHBsYXllci0+dm9sdW1lKCkpOwotCi0gICAgcGxheWVyLT5tX25vdGlmaWVy
LT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6Vm9sdW1lQ2hhbmdlZCwgW3BsYXllcl0g
ewotICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7Ci0gICAgfSk7
Ci19Ci0KLU1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6bmV0d29ya1N0YXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9uZXR3b3JrU3Rh
dGU7Ci19Ci0KLU1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6OnJlYWR5U3RhdGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3JlYWR5U3RhdGU7
Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2l6ZUNoYW5nZWQo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6c2V0TXV0ZWQoYm9vbCBtdXRlKQotewotICAgIGlmICghbV92b2x1bWVF
bGVtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGN1cnJlbnRWYWx1ZSA9IG11dGVk
KCk7Ci0gICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBtdXRlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldCBtdXRlZCB0byAlcyIsIHRvU3RyaW5n
KG11dGUpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2JqZWN0X3NldChtX3ZvbHVtZUVsZW1lbnQu
Z2V0KCksICJtdXRlIiwgbXV0ZSwgbnVsbHB0cik7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6bXV0ZWQoKSBjb25zdAotewotICAgIGlmICghbV92b2x1bWVFbGVt
ZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBnYm9vbGVhbiBtdXRlZDsKLSAgICBn
X29iamVjdF9nZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsICZtdXRlZCwgbnVsbHB0
cik7Ci0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5ZXIgaXMgbXV0ZWQ6ICVz
IiwgdG9TdHJpbmcoc3RhdGljX2Nhc3Q8Ym9vbD4obXV0ZWQpKS51dGY4KCkuZGF0YSgpKTsKLSAg
ICByZXR1cm4gbXV0ZWQ7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6bm90aWZ5UGxheWVyT2ZNdXRlKCkKLXsKLSAgICBpZiAoIW1fcGxheWVyIHx8ICFtX3ZvbHVt
ZUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdib29sZWFuIG11dGVkOwotICAgIGdf
b2JqZWN0X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgJm11dGVkLCBudWxscHRy
KTsKLSAgICBtX3BsYXllci0+bXV0ZUNoYW5nZWQoc3RhdGljX2Nhc3Q8Ym9vbD4obXV0ZWQpKTsK
LX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjptdXRlQ2hhbmdlZENh
bGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKLXsKLSAgICAv
LyBUaGlzIGlzIGNhbGxlZCB3aGVuIG1fdm9sdW1lRWxlbWVudCByZWNlaXZlcyB0aGUgbm90aWZ5
OjptdXRlIHNpZ25hbC4KLSAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFk
Tm90aWZpY2F0aW9uOjpNdXRlQ2hhbmdlZCwgW3BsYXllcl0gewotICAgICAgICBwbGF5ZXItPm5v
dGlmeVBsYXllck9mTXV0ZSgpOwotICAgIH0pOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkKLXsKLSAg
ICBtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQgPSBtX3BsYXllciAmJiBtX3BsYXllci0+Y2xp
ZW50KCkubWVkaWFQbGF5ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpOwotfQotCi0j
aWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotUGxhdGZvcm1MYXllciogTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgVVNFKE5JQ09T
SUEpCi0gICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLnB0cigpOwotI2Vsc2UKLSAgICByZXR1cm4g
Y29uc3RfY2FzdDxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKj4odGhpcyk7Ci0jZW5k
aWYKLX0KLQotI2lmIFVTRShOSUNPU0lBKQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKLXsKLSNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQ
VU5DSCkKLSAgICBwdXNoTmV4dEhvbGVQdW5jaEJ1ZmZlcigpOwotI2VuZGlmCi19Ci0jZWxzZQot
UmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxh
eWVyUHJveHkuY29weVJlZigpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBV
TkNIKQotICAgIHB1c2hOZXh0SG9sZVB1bmNoQnVmZmVyKCk7Ci0jZW5kaWYKLX0KLSNlbmRpZgot
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnB1c2hUZXh0dXJlVG9Db21w
b3NpdG9yKCkKLXsKLSAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0
ZXgpOwotICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQotICAgICAgICBbdGhpc10oVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJv
eHkuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0ZyYW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9IG1ha2VVbmlx
dWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4obV9zYW1wbGUuZ2V0KCksIG1fdmlkZW9EZWNvZGVyUGxh
dGZvcm0sIG1fdGV4dHVyZU1hcHBlckZsYWdzLCAhbV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKTsK
LQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyPiBsYXllckJ1ZmZlcjsKLSAgICAgICAgICAgIGlmIChmcmFtZUhvbGRlci0+aGFzTWFw
cGVkVGV4dHVyZXMoKSkgewotICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyID0gZnJhbWVIb2xk
ZXItPnBsYXRmb3JtTGF5ZXJCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWxheWVyQnVm
ZmVyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgbGF5ZXJC
dWZmZXItPnNldFVubWFuYWdlZEJ1ZmZlckRhdGFIb2xkZXIoV1RGTW92ZShmcmFtZUhvbGRlcikp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBsYXllckJ1ZmZlciA9IHBy
b3h5LmdldEF2YWlsYWJsZUJ1ZmZlcihmcmFtZUhvbGRlci0+c2l6ZSgpLCBHTF9ET05UX0NBUkUp
OwotICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghbGF5ZXJCdWZmZXIpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gdGV4dHVyZSA9IEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlKFRleHR1
cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlczo6Z2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLT5yZXNldChmcmFtZUhvbGRlci0+c2l6ZSgpLCBmcmFtZUhvbGRlci0+aGFzQWxwaGFD
aGFubmVsKCkgPyBCaXRtYXBUZXh0dXJlOjpTdXBwb3J0c0FscGhhIDogQml0bWFwVGV4dHVyZTo6
Tm9GbGFnKTsKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihXVEZNb3ZlKHRleHR1cmUpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnJhbWVIb2xkZXItPnVwZGF0ZVRleHR1cmUo
bGF5ZXJCdWZmZXItPnRleHR1cmVHTCgpKTsKLSAgICAgICAgICAgICAgICBsYXllckJ1ZmZlci0+
c2V0RXh0cmFGbGFncyhtX3RleHR1cmVNYXBwZXJGbGFncyB8IChmcmFtZUhvbGRlci0+aGFzQWxw
aGFDaGFubmVsKCkgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1
ZmZlcikpOwotICAgICAgICB9OwotCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgcHJveHlPcGVyYXRp
b24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmlj
b3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICBwcm94eU9wZXJhdGlvbigq
bV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi19Ci0jZW5kaWYgLy8gVVNFKFRFWFRVUkVf
TUFQUEVSX0dMKQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFp
bnQoKQotewotICAgIEFTU0VSVChtX3NhbXBsZSk7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLQotICAgIG1fcGxheWVyLT5yZXBhaW50KCk7Ci0KLSAgICBMb2NrSG9sZGVyIGxvY2sobV9k
cmF3TXV0ZXgpOwotICAgIG1fZHJhd0NvbmRpdGlvbi5ub3RpZnlPbmUoKTsKLX0KLQotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp0cmlnZ2VyUmVwYWludChHc3RTYW1wbGUq
IHNhbXBsZSkKLXsKLSAgICBib29sIHRyaWdnZXJSZXNpemU7Ci0gICAgewotICAgICAgICBhdXRv
IHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOwotICAgICAgICB0cmlnZ2Vy
UmVzaXplID0gIW1fc2FtcGxlOwotICAgICAgICBtX3NhbXBsZSA9IHNhbXBsZTsKLSAgICB9Ci0K
LSAgICBpZiAodHJpZ2dlclJlc2l6ZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJGaXJzdCBzYW1wbGUgcmVhY2hlZCB0aGUgc2luaywgdHJpZ2dlcmluZyB2aWRlbyBk
aW1lbnNpb25zIHVwZGF0ZSIpOwotICAgICAgICBtX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVh
ZE5vdGlmaWNhdGlvbjo6U2l6ZUNoYW5nZWQsIFt0aGlzXSB7Ci0gICAgICAgICAgICBtX3BsYXll
ci0+c2l6ZUNoYW5nZWQoKTsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgaWYgKCFtX3JlbmRl
cmluZ0NhbkJlQWNjZWxlcmF0ZWQpIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kcmF3
TXV0ZXgpOwotICAgICAgICBpZiAobV9kZXN0cm95aW5nKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2RyYXdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICAgICAgbV9kcmF3Q29u
ZGl0aW9uLndhaXQobV9kcmF3TXV0ZXgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIGlmIChtX3VzaW5nRmFsbGJhY2tWaWRlb1Npbmsp
IHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fZHJhd011dGV4KTsKLSAgICAgICAgYXV0byBw
cm94eU9wZXJhdGlvbiA9Ci0gICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eSYgcHJveHkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHByb3h5LnNjaGVkdWxlVXBkYXRlT25Db21wb3NpdG9yVGhyZWFkKFt0aGlzXSB7IHRoaXMtPnB1
c2hUZXh0dXJlVG9Db21wb3NpdG9yKCk7IH0pOwotICAgICAgICAgICAgfTsKLSNpZiBVU0UoTklD
T1NJQSkKLSAgICAgICAgaWYgKCFwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHko
KSkpCi0gICAgICAgICAgICByZXR1cm47Ci0jZWxzZQotICAgICAgICBpZiAoIXByb3h5T3BlcmF0
aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSkpCi0gICAgICAgICAgICByZXR1cm47Ci0jZW5kaWYK
LSAgICAgICAgbV9kcmF3VGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci0gICAgICAgIG1fZHJhd0Nv
bmRpdGlvbi53YWl0KG1fZHJhd011dGV4KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcHVzaFRleHR1
cmVUb0NvbXBvc2l0b3IoKTsKLSNlbmRpZiAvLyBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi19Ci0K
LXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVwYWludENhbGxiYWNrKE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllciwgR3N0U2FtcGxlKiBzYW1wbGUp
Ci17Ci0gICAgcGxheWVyLT50cmlnZ2VyUmVwYWludChzYW1wbGUpOwotfQotCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNhbmNlbFJlcGFpbnQoYm9vbCBkZXN0cm95aW5n
KQotewotICAgIC8vIFRoZSBnb2FsIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gcmVsZWFzZSB0aGUg
R1N0cmVhbWVyIHRocmVhZCBmcm9tIG1fZHJhd0NvbmRpdGlvbiBpbiB0cmlnZ2VyUmVwYWludCgp
IGluIG5vbi1BQyBjYXNlLAotICAgIC8vIHRvIGF2b2lkIGEgZGVhZGxvY2sgaWYgdGhlIHBsYXll
ciBnZXRzIHBhdXNlZCB3aGlsZSB3YWl0aW5nIGZvciBkcmF3aW5nIChzZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MDAwMyk6Ci0gICAgLy8gdGhlIG1haW4gdGhy
ZWFkIGlzIHdhaXRpbmcgZm9yIHRoZSBHU3RyZWFtZXIgdGhyZWFkIHRvIHBhdXNlLCBidXQgdGhl
IEdTdHJlYW1lciB0aHJlYWQgaXMgbG9ja2VkIHdhaXRpbmcgZm9yIHRoZQotICAgIC8vIG1haW4g
dGhyZWFkIHRvIGRyYXcuIFRoaXMgZGVhZGxvY2sgZG9lc24ndCBoYXBwZW4gd2hlbiB1c2luZyBB
QyBiZWNhdXNlIHRoZSBzYW1wbGUgaXMgcHJvY2Vzc2VkIChub3QgcGFpbnRlZCkgaW4gdGhlIGNv
bXBvc2l0b3IKLSAgICAvLyB0aHJlYWQsIHNvIHRoZSBtYWluIHRocmVhZCBjYW4gcmVxdWVzdCB0
aGUgcGF1c2UgYW5kIHdhaXQgaWYgdGhlIEdTdHJlYW1lciB0aHJlYWQgaXMgd2FpdGluZyBmb3Ig
dGhlIGNvbXBvc2l0b3IgdGhyZWFkLgotICAgIC8vCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBh
bHNvIHVzZWQgd2hlbiBkZXN0cm95aW5nIHRoZSBwbGF5ZXIgKGRlc3Ryb3lpbmcgcGFyYW1ldGVy
IGlzIHRydWUpLCB0byByZWxlYXNlIHRoZSBnc3RyZWFtZXIgdGhyZWFkIGZyb20KLSAgICAvLyBt
X2RyYXdDb25kaXRpb24gYW5kIHRvIGVuc3VyZSB0aGF0IG5ldyB0cmlnZ2VyUmVwYWludCBjYWxs
cyB3b24ndCB3YWl0IG9uIG1fZHJhd0NvbmRpdGlvbi4KLSAgICBpZiAoIW1fcmVuZGVyaW5nQ2Fu
QmVBY2NlbGVyYXRlZCkgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2RyYXdNdXRleCk7
Ci0gICAgICAgIG1fZHJhd1RpbWVyLnN0b3AoKTsKLSAgICAgICAgbV9kZXN0cm95aW5nID0gZGVz
dHJveWluZzsKLSAgICAgICAgbV9kcmF3Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwotICAgIH0KLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpyZXBhaW50Q2FuY2VsbGVk
Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQotewotICAg
IHBsYXllci0+Y2FuY2VsUmVwYWludCgpOwotfQotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLUdz
dEZsb3dSZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmV3U2FtcGxlQ2Fs
bGJhY2soR3N0RWxlbWVudCogc2luaywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSog
cGxheWVyKQotewotICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0
X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhzaW5rKSkpOwotICAgIHBsYXllci0+
dHJpZ2dlclJlcGFpbnQoc2FtcGxlLmdldCgpKTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Ci19
Ci0KLUdzdEZsb3dSZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmV3UHJl
cm9sbENhbGxiYWNrKEdzdEVsZW1lbnQqIHNpbmssIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UqIHBsYXllcikKLXsKLSAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRH
UmVmKGdzdF9hcHBfc2lua19wdWxsX3ByZXJvbGwoR1NUX0FQUF9TSU5LKHNpbmspKSk7Ci0gICAg
cGxheWVyLT50cmlnZ2VyUmVwYWludChzYW1wbGUuZ2V0KCkpOwotICAgIHJldHVybiBHU1RfRkxP
V19PSzsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpmbHVzaEN1
cnJlbnRCdWZmZXIoKQotewotICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1w
bGVNdXRleCk7Ci0KLSAgICBpZiAobV9zYW1wbGUpIHsKLSAgICAgICAgLy8gUmVwbGFjZSBieSBh
IG5ldyBzYW1wbGUgaGF2aW5nIG9ubHkgdGhlIGNhcHMsIHNvIHRoaXMgZHVtbXkgc2FtcGxlIGlz
IHN0aWxsIHVzZWZ1bCB0byBnZXQgdGhlIGRpbWVuc2lvbnMuCi0gICAgICAgIC8vIFRoaXMgcHJl
dmVudHMgcmVzaXppbmcgcHJvYmxlbXMgd2hlbiB0aGUgdmlkZW8gY2hhbmdlcyBpdHMgcXVhbGl0
eSBhbmQgYSBEUkFJTiBpcyBwZXJmb3JtZWQuCi0gICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSog
aW5mbyA9IGdzdF9zYW1wbGVfZ2V0X2luZm8obV9zYW1wbGUuZ2V0KCkpOwotICAgICAgICBtX3Nh
bXBsZSA9IGFkb3B0R1JlZihnc3Rfc2FtcGxlX25ldyhudWxscHRyLCBnc3Rfc2FtcGxlX2dldF9j
YXBzKG1fc2FtcGxlLmdldCgpKSwKLSAgICAgICAgICAgIGdzdF9zYW1wbGVfZ2V0X3NlZ21lbnQo
bV9zYW1wbGUuZ2V0KCkpLCBpbmZvID8gZ3N0X3N0cnVjdHVyZV9jb3B5KGluZm8pIDogbnVsbHB0
cikpOwotICAgIH0KLQotICAgIGJvb2wgc2hvdWxkV2FpdCA9IG1fdmlkZW9EZWNvZGVyUGxhdGZv
cm0gPT0gR3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OlZpZGVvNExpbnV4OwotICAgIGF1dG8gcHJv
eHlPcGVyYXRpb24gPSBbc2hvdWxkV2FpdCwgcGlwZWxpbmUgPSBwaXBlbGluZSgpXShUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkgewotICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lLCAiRmx1c2hpbmcgdmlkZW8gc2FtcGxlICVzIiwgc2hvdWxkV2FpdCA/ICJz
eW5jaHJvbm91c2x5IiA6ICIiKTsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIoIXNob3VsZFdh
aXQgPyAmcHJveHkubG9jaygpIDogbnVsbHB0cik7Ci0KLSAgICAgICAgaWYgKHByb3h5LmlzQWN0
aXZlKCkpCi0gICAgICAgICAgICBwcm94eS5kcm9wQ3VycmVudEJ1ZmZlcldoaWxlUHJlc2Vydmlu
Z1RleHR1cmUoc2hvdWxkV2FpdCk7Ci0gICAgfTsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIHBy
b3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKLSNlbHNlCi0gICAgcHJveHlP
cGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0U2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQotewotICAgIG1fc2l6ZSA9IHNpemU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fcGxheWVyLT52aXNpYmxlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRl
eCk7Ci0gICAgaWYgKCFHU1RfSVNfU0FNUExFKG1fc2FtcGxlLmdldCgpKSkKLSAgICAgICAgcmV0
dXJuOwotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICAvLyBFbnN1cmUgdGhlIGlucHV0IGlz
IFJHQkEuIFdlIGhhbmRsZSBZVVYgdmlkZW8gbmF0aXZlbHksIHNvIHdlIG5lZWQgdG8gZG8KLSAg
ICAvLyB0aGlzIGNvbnZlcnNpb24gb24tZGVtYW5kIGhlcmUuCi0gICAgR3N0QnVmZmVyKiBidWZm
ZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIobV9zYW1wbGUuZ2V0KCkpOwotICAgIGlmIChVTkxJ
S0VMWSghR1NUX0lTX0JVRkZFUihidWZmZXIpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3N0
Q2FwcyogY2FwcyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMobV9zYW1wbGUuZ2V0KCkpOwotCi0gICAg
R3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKLSAgICBnc3RfdmlkZW9faW5mb19pbml0KCZ2aWRlb0lu
Zm8pOwotICAgIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZ2aWRlb0luZm8sIGNhcHMp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIUdTVF9WSURFT19JTkZPX0lTX1JHQigmdmlk
ZW9JbmZvKSkgewotICAgICAgICBpZiAoIW1fY29sb3JDb252ZXJ0KSB7Ci0gICAgICAgICAgICBH
c3RNZW1vcnkqIG1lbSA9IGdzdF9idWZmZXJfcGVla19tZW1vcnkoYnVmZmVyLCAwKTsKLSAgICAg
ICAgICAgIEdzdEdMQ29udGV4dCogY29udGV4dCA9ICgoR3N0R0xCYXNlTWVtb3J5KiltZW0pLT5j
b250ZXh0OwotICAgICAgICAgICAgbV9jb2xvckNvbnZlcnQgPSBhZG9wdEdSZWYoZ3N0X2dsX2Nv
bG9yX2NvbnZlcnRfbmV3KGNvbnRleHQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbV9j
b2xvckNvbnZlcnRJbnB1dENhcHMgfHwgIWdzdF9jYXBzX2lzX2VxdWFsKG1fY29sb3JDb252ZXJ0
SW5wdXRDYXBzLmdldCgpLCBjYXBzKSkgewotICAgICAgICAgICAgbV9jb2xvckNvbnZlcnRJbnB1
dENhcHMgPSBjYXBzOwotICAgICAgICAgICAgbV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzID0gYWRv
cHRHUmVmKGdzdF9jYXBzX2NvcHkoY2FwcykpOwotI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRM
RV9FTkRJQU4KLSAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBmb3JtYXRTdHJpbmcgPSBHU1RfVklE
RU9fSU5GT19IQVNfQUxQSEEoJnZpZGVvSW5mbykgPyAiUkdCQSIgOiAiQkdSeCI7Ci0jZWxzZQot
ICAgICAgICAgICAgY29uc3QgZ2NoYXIqIGZvcm1hdFN0cmluZyA9IEdTVF9WSURFT19JTkZPX0hB
U19BTFBIQSgmdmlkZW9JbmZvKSA/ICJSR0JBIiA6ICJSR0J4IjsKLSNlbmRpZgotICAgICAgICAg
ICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShtX2NvbG9yQ29udmVydE91dHB1dENhcHMuZ2V0KCksICJm
b3JtYXQiLCBHX1RZUEVfU1RSSU5HLCBmb3JtYXRTdHJpbmcsIG51bGxwdHIpOwotICAgICAgICAg
ICAgaWYgKCFnc3RfZ2xfY29sb3JfY29udmVydF9zZXRfY2FwcyhtX2NvbG9yQ29udmVydC5nZXQo
KSwgY2FwcywgbV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzLmdldCgpKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gcmdiQnVm
ZmVyID0gYWRvcHRHUmVmKGdzdF9nbF9jb2xvcl9jb252ZXJ0X3BlcmZvcm0obV9jb2xvckNvbnZl
cnQuZ2V0KCksIGJ1ZmZlcikpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIUdTVF9JU19CVUZGRVIo
cmdiQnVmZmVyLmdldCgpKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY29uc3Qg
R3N0U3RydWN0dXJlKiBpbmZvID0gZ3N0X3NhbXBsZV9nZXRfaW5mbyhtX3NhbXBsZS5nZXQoKSk7
Ci0gICAgICAgIG1fc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9zYW1wbGVfbmV3KHJnYkJ1ZmZlci5n
ZXQoKSwgbV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzLmdldCgpLAotICAgICAgICAgICAgZ3N0X3Nh
bXBsZV9nZXRfc2VnbWVudChtX3NhbXBsZS5nZXQoKSksIGluZm8gPyBnc3Rfc3RydWN0dXJlX2Nv
cHkoaW5mbykgOiBudWxscHRyKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBhdXRvIGdzdEltYWdl
ID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fc2FtcGxlLmdldCgpKTsKLSAgICBpZiAo
IWdzdEltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb250ZXh0LmRyYXdJbWFnZShnc3RJ
bWFnZS0+aW1hZ2UoKSwgcmVjdCwgZ3N0SW1hZ2UtPnJlY3QoKSwgeyBDb21wb3NpdGVDb3B5LCBt
X3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQgPyBtX3ZpZGVvU291cmNlT3JpZW50YXRpb24gOiBJ
bWFnZU9yaWVudGF0aW9uKCkgfSk7Ci19Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotYm9vbCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9y
bVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFBsYXRmb3JtM0RPYmplY3Qgb3V0
cHV0VGV4dHVyZSwgR0MzRGVudW0gb3V0cHV0VGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvbnRleHQp
OwotCi0gICAgaWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7Ci0KLSAg
ICBpZiAoIUdTVF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3N0VmlkZW9GcmFtZUhvbGRlcj4gZnJhbWVIb2xk
ZXIgPSBtYWtlVW5pcXVlPEdzdFZpZGVvRnJhbWVIb2xkZXI+KG1fc2FtcGxlLmdldCgpLCBtX3Zp
ZGVvRGVjb2RlclBsYXRmb3JtLCBtX3RleHR1cmVNYXBwZXJGbGFncywgdHJ1ZSk7Ci0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+IGxheWVyQnVm
ZmVyID0gZnJhbWVIb2xkZXItPnBsYXRmb3JtTGF5ZXJCdWZmZXIoKTsKLSAgICBpZiAoIWxheWVy
QnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHNpemUgPSBmcmFtZUhv
bGRlci0+c2l6ZSgpOwotICAgIGlmIChtX3ZpZGVvU291cmNlT3JpZW50YXRpb24udXNlc1dpZHRo
QXNIZWlnaHQoKSkKLSAgICAgICAgc2l6ZSA9IHNpemUudHJhbnNwb3NlZFNpemUoKTsKLQotICAg
IGlmICghbV92aWRlb1RleHR1cmVDb3BpZXIpCi0gICAgICAgIG1fdmlkZW9UZXh0dXJlQ29waWVy
ID0gbWFrZVVuaXF1ZTxWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI+KFRFWFRVUkVfQ09QSUVS
X0NPTE9SX0NPTlZFUlRfRkxBRyk7Ci0KLSAgICBmcmFtZUhvbGRlci0+d2FpdEZvckNQVVN5bmMo
KTsKLQotICAgIHJldHVybiBtX3ZpZGVvVGV4dHVyZUNvcGllci0+Y29weVZpZGVvVGV4dHVyZVRv
UGxhdGZvcm1UZXh0dXJlKCpsYXllckJ1ZmZlci5nZXQoKSwgc2l6ZSwgb3V0cHV0VGV4dHVyZSwg
b3V0cHV0VGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgZmxpcFks
IG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbik7Ci19Ci0KLU5hdGl2ZUltYWdlUHRyIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudFRpbWUoKQotewot
I2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAo
bV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7Ci0KLSAgICBpZiAo
IUdTVF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0ZyYW1lSG9sZGVyPiBmcmFtZUhvbGRlciA9
IG1ha2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4obV9zYW1wbGUuZ2V0KCksIG1fdmlkZW9E
ZWNvZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1hcHBlckZsYWdzLCB0cnVlKTsKLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gbGF5ZXJCdWZmZXIg
PSBmcmFtZUhvbGRlci0+cGxhdGZvcm1MYXllckJ1ZmZlcigpOwotICAgIGlmICghbGF5ZXJCdWZm
ZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBzaXplID0gZnJhbWVIb2xk
ZXItPnNpemUoKTsKLSAgICBpZiAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFz
SGVpZ2h0KCkpCi0gICAgICAgIHNpemUgPSBzaXplLnRyYW5zcG9zZWRTaXplKCk7Ci0KLSAgICBH
TENvbnRleHQqIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21w
b3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotICAgIGlmICghbV92aWRlb1RleHR1cmVDb3BpZXIpCi0gICAgICAgIG1fdmlk
ZW9UZXh0dXJlQ29waWVyID0gbWFrZVVuaXF1ZTxWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI+
KFRFWFRVUkVfQ09QSUVSX0NPTE9SX0NPTlZFUlRfRkxBRyk7Ci0KLSAgICBmcmFtZUhvbGRlci0+
d2FpdEZvckNQVVN5bmMoKTsKLQotICAgIGlmICghbV92aWRlb1RleHR1cmVDb3BpZXItPmNvcHlW
aWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZSgqbGF5ZXJCdWZmZXIuZ2V0KCksIHNpemUsIDAs
IEdMX1RFWFRVUkVfMkQsIDAsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGZh
bHNlLCBtX3ZpZGVvU291cmNlT3JpZW50YXRpb24pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVy
ZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX3Zp
ZGVvVGV4dHVyZUNvcGllci0+cmVzdWx0VGV4dHVyZSgpLCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpKTsKLSNlbHNlCi0gICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKLX0KLSNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSX0dMKQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6OnNldFZpZGVvU291cmNlT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikKLXsKLSAgICBpZiAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uID09IG9yaWVudGF0aW9uKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3ZpZGVvU291cmNlT3JpZW50YXRpb24gPSBvcmllbnRh
dGlvbjsKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgdXBkYXRlVGV4dHVyZU1hcHBl
ckZsYWdzKCk7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dXBkYXRlVGV4dHVyZU1hcHBlckZsYWdz
KCkKLXsKLSAgICBzd2l0Y2ggKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbikgewotICAgIGNhc2Ug
SW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luVG9wTGVmdDoKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVy
RmxhZ3MgPSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEltYWdlT3JpZW50YXRpb246Ok9y
aWdpblJpZ2h0VG9wOgotICAgICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9IFRleHR1cmVNYXBw
ZXJHTDo6U2hvdWxkUm90YXRlVGV4dHVyZTkwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElt
YWdlT3JpZW50YXRpb246Ok9yaWdpbkJvdHRvbVJpZ2h0OgotICAgICAgICBtX3RleHR1cmVNYXBw
ZXJGbGFncyA9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkUm90YXRlVGV4dHVyZTE4MDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5MZWZ0Qm90dG9tOgot
ICAgICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkUm90
YXRlVGV4dHVyZTI3MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8g
RklYTUU6IEhhbmRsZSBPcmlnaW5Ub3BSaWdodCwgT3JpZ2luQm90dG9tTGVmdCwgT3JpZ2luTGVm
dFRvcCBhbmQgT3JpZ2luUmlnaHRCb3R0b20/Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdz
ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotI2VuZGlmCi0KLWJvb2wgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bW92aWVMb2FkVHlwZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KG1fcmVhZHlTdGF0ZSA9PSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCi0gICAgICAgIHJldHVy
biBNZWRpYVBsYXllcjo6VW5rbm93bjsKLQotICAgIGlmIChpc0xpdmVTdHJlYW0oKSkKLSAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtOwotCi0gICAgcmV0dXJuIE1lZGlhUGxh
eWVyOjpEb3dubG9hZDsKLX0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1Hc3RFbGVtZW50KiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjcmVhdGVHTEFwcFNpbmsoKQotewotICAg
IEdzdEVsZW1lbnQqIGFwcHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsi
LCAid2Via2l0LWdsLXZpZGVvLXNpbmsiKTsKLSAgICBpZiAoIWFwcHNpbmspCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgZ19vYmplY3Rfc2V0KGFwcHNpbmssICJlbmFibGUtbGFzdC1z
YW1wbGUiLCBGQUxTRSwgImVtaXQtc2lnbmFscyIsIFRSVUUsICJtYXgtYnVmZmVycyIsIDEsIG51
bGxwdHIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoYXBwc2luaywgIm5ldy1zYW1wbGUiLCBHX0NB
TExCQUNLKG5ld1NhbXBsZUNhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChh
cHBzaW5rLCAibmV3LXByZXJvbGwiLCBHX0NBTExCQUNLKG5ld1ByZXJvbGxDYWxsYmFjayksIHRo
aXMpOwotCi0gICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChhcHBzaW5rLCAic2luayIpKTsKLSAgICBnc3RfcGFkX2FkZF9wcm9iZShw
YWQuZ2V0KCksIHN0YXRpY19jYXN0PEdzdFBhZFByb2JlVHlwZT4oR1NUX1BBRF9QUk9CRV9UWVBF
X1BVU0ggfCBHU1RfUEFEX1BST0JFX1RZUEVfUVVFUllfRE9XTlNUUkVBTSB8IEdTVF9QQURfUFJP
QkVfVFlQRV9FVkVOVF9GTFVTSCksIFtdIChHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8s
ICBncG9pbnRlciB1c2VyRGF0YSkgLT4gR3N0UGFkUHJvYmVSZXR1cm4gewotICAgICAgICAvLyBJ
biBzb21lIHBsYXRmb3JtcyAoZS5nLiBPcGVuTUFYIG9uIHRoZSBSYXNwYmVycnkgUGkpIHdoZW4g
YSByZXNvbHV0aW9uIGNoYW5nZSBvY2N1cnMgdGhlCi0gICAgICAgIC8vIHBpcGVsaW5lIGhhcyB0
byBiZSBkcmFpbmVkIGJlZm9yZSBhIGZyYW1lIHdpdGggdGhlIG5ldyByZXNvbHV0aW9uIGNhbiBi
ZSBkZWNvZGVkLgotICAgICAgICAvLyBJbiB0aGlzIGNvbnRleHQsIGl0J3MgaW1wb3J0YW50IHRo
YXQgd2UgZG9uJ3QgaG9sZCByZWZlcmVuY2VzIHRvIGFueSBwcmV2aW91cyBmcmFtZQotICAgICAg
ICAvLyAoZS5nLiBtX3NhbXBsZSkgc28gdGhhdCBkZWNvZGluZyBjYW4gY29udGludWUuCi0gICAg
ICAgIC8vIFdlIGFyZSBhbHNvIG5vdCBzdXBwb3NlZCB0byBrZWVwIHRoZSBvcmlnaW5hbCBmcmFt
ZSBhZnRlciBhIGZsdXNoLgotICAgICAgICBpZiAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVf
VFlQRV9RVUVSWV9ET1dOU1RSRUFNKSB7Ci0gICAgICAgICAgICBpZiAoR1NUX1FVRVJZX1RZUEUo
R1NUX1BBRF9QUk9CRV9JTkZPX1FVRVJZKGluZm8pKSAhPSBHU1RfUVVFUllfRFJBSU4pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Ci0gICAgICAgICAgICBHU1RfREVC
VUcoIkFjdGluZyB1cG9uIERSQUlOIHF1ZXJ5Iik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlu
Zm8tPnR5cGUgJiBHU1RfUEFEX1BST0JFX1RZUEVfRVZFTlRfRkxVU0gpIHsKLSAgICAgICAgICAg
IGlmIChHU1RfRVZFTlRfVFlQRShHU1RfUEFEX1BST0JFX0lORk9fRVZFTlQoaW5mbykpICE9IEdT
VF9FVkVOVF9GTFVTSF9TVEFSVCkKLSAgICAgICAgICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9C
RV9PSzsKLSAgICAgICAgICAgIEdTVF9ERUJVRygiQWN0aW5nIHVwb24gZmx1c2gtc3RhcnQgZXZl
bnQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8qIHBsYXllciA9IHN0YXRpY19jYXN0PE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqPih1c2VyRGF0YSk7Ci0gICAgICAgIHBsYXll
ci0+Zmx1c2hDdXJyZW50QnVmZmVyKCk7Ci0gICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09L
OwotICAgIH0sIHRoaXMsIG51bGxwdHIpOwotCi0gICAgcmV0dXJuIGFwcHNpbms7Ci19Ci0KLUdz
dEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZVZpZGVvU2lu
a0dMKCkKLXsKLSAgICBnYm9vbGVhbiByZXN1bHQgPSBUUlVFOwotICAgIEdzdEVsZW1lbnQqIHZp
ZGVvU2luayA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOwotICAgIEdzdEVsZW1lbnQqIHVwbG9hZCA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZ2x1cGxvYWQiLCBudWxscHRyKTsKLSAgICBHc3RF
bGVtZW50KiBjb2xvcmNvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImdsY29sb3Jj
b252ZXJ0IiwgbnVsbHB0cik7Ci0gICAgR3N0RWxlbWVudCogYXBwc2luayA9IGNyZWF0ZUdMQXBw
U2luaygpOwotCi0gICAgLy8gZ2xzaW5rYmluIGlzIG5vdCB1c2VkIGJlY2F1c2UgaXQgaW5jbHVk
ZXMgZ2xjb2xvcmNvbnZlcnQgd2hpY2ggb25seSBwcm9jZXNzIFJHQkEsCi0gICAgLy8gYnV0IHdl
IGNhbiBkaXNwbGF5IFlVViBmb3JtYXRzIHRvby4KLQotICAgIGlmICghYXBwc2luayB8fCAhdXBs
b2FkIHx8ICFjb2xvcmNvbnZlcnQpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBj
cmVhdGUgR3N0R0wgZWxlbWVudHMiKTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZih2aWRlb1Np
bmspOwotCi0gICAgICAgIGlmICh1cGxvYWQpCi0gICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVm
KHVwbG9hZCk7Ci0gICAgICAgIGlmIChjb2xvcmNvbnZlcnQpCi0gICAgICAgICAgICBnc3Rfb2Jq
ZWN0X3VucmVmKGNvbG9yY29udmVydCk7Ci0gICAgICAgIGlmIChhcHBzaW5rKQotICAgICAgICAg
ICAgZ3N0X29iamVjdF91bnJlZihhcHBzaW5rKTsKLQotICAgICAgICBnX3dhcm5pbmcoIldlYktp
dCB3YXNuJ3QgYWJsZSB0byBmaW5kIHRoZSBHU3RyZWFtZXIgb3BlbmdsIHBsdWdpbi4gSGFyZHdh
cmUtYWNjZWxlcmF0ZWQgemVyby1jb3B5IHZpZGVvIHJlbmRlcmluZyBjYW4ndCBiZSBlbmFibGVk
IHdpdGhvdXQgdGhpcyBwbHVnaW4uIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTih2aWRlb1NpbmspLCB1cGxvYWQsIGNvbG9y
Y29udmVydCwgYXBwc2luaywgbnVsbHB0cik7Ci0KLSAgICAvLyBXb3JrYXJvdW5kIHVudGlsIHdl
IGNhbiBkZXBlbmQgb24gR1N0cmVhbWVyIDEuMTYuMi4KLSAgICAvLyBodHRwczovL2dpdGxhYi5m
cmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhc2UvY29tbWl0LzhkMzJkZTA5
MDU1NGNmMjlmZTM1OWY4M2FhNDYwMDBiYTY1OGE2OTMKLSAgICAvLyBGb3JjaW5nIGEgY29sb3Ig
Y29udmVyc2lvbiB0byBSR0JBIGhlcmUgYWxsb3dzIGdsdXBsb2FkIHRvIGludGVybmFsbHkgdXNl
Ci0gICAgLy8gYW4gdXBsb2FkZXIgdGhhdCBhZGRzIGEgVmlkZW9NZXRhLCB0aHJvdWdoIHRoZSBU
ZXh0dXJlVXBsb2FkTWV0YSBjYXBzCi0gICAgLy8gZmVhdHVyZSwgd2l0aG91dCBuZWVkaW5nIHRo
ZSBwYXRjaCBhYm92ZS4gSG93ZXZlciB0aGlzIHNwZWNpZmljIGNhcHMKLSAgICAvLyBmZWF0dXJl
IGlzIGdvaW5nIHRvIGJlIHJlbW92ZWQgZnJvbSBHU3RyZWFtZXIgc28gaXQgaXMgY29uc2lkZXJl
ZCBhCi0gICAgLy8gc2hvcnQtdGVybSB3b3JrYXJvdW5kLiBUaGlzIGNvZGUgcGF0aCBtb3N0IGxp
a2VseSB3aWxsIGhhdmUgYSBuZWdhdGl2ZQotICAgIC8vIHBlcmZvcm1hbmNlIGltcGFjdCBvbiBl
bWJlZGRlZCBwbGF0Zm9ybXMgYXMgd2VsbC4gRG93bnN0cmVhbSBlbWJlZGRlcnMKLSAgICAvLyBh
cmUgaGlnaGx5IGVuY291cmFnZWQgdG8gY2hlcnJ5LXBpY2sgdGhlIHBhdGNoIGxpbmtlZCBhYm92
ZSBpbiB0aGVpciBCU1AKLSAgICAvLyBhbmQgc2V0IHRoZSBXRUJLSVRfR1NUX05PX1JHQkFfQ09O
VkVSU0lPTiBlbnZpcm9ubWVudCB2YXJpYWJsZSB1bnRpbAotICAgIC8vIEdTdHJlYW1lciAxLjE2
LjIgaXMgcmVsZWFzZWQuCi0gICAgLy8gU2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwMTQyMgotICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKLSAgICBp
ZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE2LCAyKSB8fCBnZXRlbnYoIldFQktJVF9HU1Rf
Tk9fUkdCQV9DT05WRVJTSU9OIikpCi0gICAgICAgIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNf
ZnJvbV9zdHJpbmcoInZpZGVvL3gtcmF3LCBmb3JtYXQgPSAoc3RyaW5nKSAiIEdTVF9HTF9DQVBT
X0ZPUk1BVCkpOwotICAgIGVsc2UgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUo
KSwgIkZvcmNpbmcgUkdCQSBhcyBHU3RyZWFtZXIgaXMgbm90IG5ldyBlbm91Z2guIik7Ci0gICAg
ICAgIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfZnJvbV9zdHJpbmcoInZpZGVvL3gtcmF3LCBm
b3JtYXQgPSAoc3RyaW5nKSBSR0JBIikpOwotICAgIH0KLQotICAgIGdzdF9jYXBzX3NldF9mZWF0
dXJlcyhjYXBzLmdldCgpLCAwLCBnc3RfY2Fwc19mZWF0dXJlc19uZXcoR1NUX0NBUFNfRkVBVFVS
RV9NRU1PUllfR0xfTUVNT1JZLCBudWxscHRyKSk7Ci0gICAgZ19vYmplY3Rfc2V0KGFwcHNpbmss
ICJjYXBzIiwgY2Fwcy5nZXQoKSwgbnVsbHB0cik7Ci0KLSAgICByZXN1bHQgJj0gZ3N0X2VsZW1l
bnRfbGlua19tYW55KHVwbG9hZCwgY29sb3Jjb252ZXJ0LCBhcHBzaW5rLCBudWxscHRyKTsKLQot
ICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRp
Y19wYWQodXBsb2FkLCAic2luayIpKTsKLSAgICBnc3RfZWxlbWVudF9hZGRfcGFkKHZpZGVvU2lu
aywgZ3N0X2dob3N0X3BhZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKLQotICAgIGlmICghcmVz
dWx0KSB7Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gbGluayBHc3RHTCBlbGVtZW50
cyIpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHZpZGVvU2luayk7Ci0gICAgICAgIHZpZGVv
U2luayA9IG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiB2aWRlb1Npbms7Ci19Ci0KLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZW5zdXJlR0xWaWRlb1NpbmtDb250ZXh0
KCkKLXsKLSAgICBpZiAoIW1fZ2xEaXNwbGF5RWxlbWVudENvbnRleHQpCi0gICAgICAgIG1fZ2xE
aXNwbGF5RWxlbWVudENvbnRleHQgPSBhZG9wdEdSZWYocmVxdWVzdEdMQ29udGV4dChHU1RfR0xf
RElTUExBWV9DT05URVhUX1RZUEUpKTsKLQotICAgIGlmIChtX2dsRGlzcGxheUVsZW1lbnRDb250
ZXh0KQotICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChtX3ZpZGVvU2luay5nZXQoKSwg
bV9nbERpc3BsYXlFbGVtZW50Q29udGV4dC5nZXQoKSk7Ci0KLSAgICBpZiAoIW1fZ2xBcHBFbGVt
ZW50Q29udGV4dCkKLSAgICAgICAgbV9nbEFwcEVsZW1lbnRDb250ZXh0ID0gYWRvcHRHUmVmKHJl
cXVlc3RHTENvbnRleHQoImdzdC5nbC5hcHBfY29udGV4dCIpKTsKLQotICAgIGlmIChtX2dsQXBw
RWxlbWVudENvbnRleHQpCi0gICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KG1fdmlkZW9T
aW5rLmdldCgpLCBtX2dsQXBwRWxlbWVudENvbnRleHQuZ2V0KCkpOwotfQotI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVJfR0wpCi0KLSNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKLXN0YXRpYyB2
b2lkIHNldFJlY3RhbmdsZVRvVmlkZW9TaW5rKEdzdEVsZW1lbnQqIHZpZGVvU2luaywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBIZXJlIGdvZXMgdGhlIHBsYXRmb3JtLWRlcGVuZGFu
dCBjb2RlIHRvIHNldCB0byB0aGUgdmlkZW9TaW5rIHRoZSBzaXplCi0gICAgLy8gYW5kIHBvc2l0
aW9uIG9mIHRoZSB2aWRlbyByZW5kZXJpbmcgd2luZG93LiBNYXJrIHRoZW0gdW51c2VkIGFzIGRl
ZmF1bHQuCi0gICAgVU5VU0VEX1BBUkFNKHZpZGVvU2luayk7Ci0gICAgVU5VU0VEX1BBUkFNKHJl
Y3QpOwotfQotCi1jbGFzcyBHU3RyZWFtZXJIb2xlUHVuY2hDbGllbnQgOiBwdWJsaWMgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI6OkhvbGVQdW5jaENsaWVudCB7Ci1wdWJsaWM6Ci0g
ICAgR1N0cmVhbWVySG9sZVB1bmNoQ2xpZW50KEdSZWZQdHI8R3N0RWxlbWVudD4mJiB2aWRlb1Np
bmspIDogbV92aWRlb1NpbmsoV1RGTW92ZSh2aWRlb1NpbmspKSB7IH07Ci0gICAgdm9pZCBzZXRW
aWRlb1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiByZWN0KSBmaW5hbCB7IHNldFJlY3RhbmdsZVRv
VmlkZW9TaW5rKG1fdmlkZW9TaW5rLmdldCgpLCByZWN0KTsgfQotcHJpdmF0ZToKLSAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IG1fdmlkZW9TaW5rOwotfTsKLQotR3N0RWxlbWVudCogTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlSG9sZVB1bmNoVmlkZW9TaW5rKCkKLXsKLSAg
ICAvLyBIZXJlIGdvZXMgdGhlIHBsYXRmb3JtLWRlcGVuZGFudCBjb2RlIHRvIGNyZWF0ZSB0aGUg
dmlkZW9TaW5rLiBBcyBhIGRlZmF1bHQKLSAgICAvLyB3ZSB1c2UgYSBmYWtlVmlkZW9TaW5rIHNv
IG5vdGhpbmcgaXMgZHJhd24gdG8gdGhlIHBhZ2UuCi0gICAgR3N0RWxlbWVudCogdmlkZW9TaW5r
ID0gIGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZmFrZXZpZGVvc2luayIsIG51bGxwdHIpOwot
Ci0gICAgcmV0dXJuIHZpZGVvU2luazsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpwdXNoTmV4dEhvbGVQdW5jaEJ1ZmZlcigpCi17Ci0gICAgYXV0byBwcm94eU9w
ZXJhdGlvbiA9Ci0gICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
JiBwcm94eSkKLSAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHku
bG9jaygpKTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllckJ1ZmZlcj4gbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyQnVmZmVyPigwLCBtX3NpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkTm90Qmxl
bmQsIEdMX0RPTlRfQ0FSRSk7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVy
SG9sZVB1bmNoQ2xpZW50PiBob2xlUHVuY2hDbGllbnQgPSBtYWtlVW5pcXVlPEdTdHJlYW1lckhv
bGVQdW5jaENsaWVudD4obV92aWRlb1NpbmsuZ2V0KCkpOwotICAgICAgICAgICAgbGF5ZXJCdWZm
ZXItPnNldEhvbGVQdW5jaENsaWVudChXVEZNb3ZlKGhvbGVQdW5jaENsaWVudCkpOwotICAgICAg
ICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIoV1RGTW92ZShsYXllckJ1ZmZlcikpOwotICAgICAg
ICB9OwotCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmlj
b3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBs
KCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVy
UHJveHkpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlkZW9TaW5rKCkKLXsKLSAgICBhY2NlbGVyYXRlZFJl
bmRlcmluZ1N0YXRlQ2hhbmdlZCgpOwotCi0jaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCi0g
ICAgbV92aWRlb1NpbmsgPSBjcmVhdGVIb2xlUHVuY2hWaWRlb1NpbmsoKTsKLSAgICBwdXNoTmV4
dEhvbGVQdW5jaEJ1ZmZlcigpOwotICAgIHJldHVybiBtX3ZpZGVvU2luay5nZXQoKTsKLSNlbmRp
ZgotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBpZiAobV9yZW5kZXJpbmdDYW5CZUFjY2Vs
ZXJhdGVkKQotICAgICAgICBtX3ZpZGVvU2luayA9IGNyZWF0ZVZpZGVvU2lua0dMKCk7Ci0jZW5k
aWYKLQotICAgIGlmICghbV92aWRlb1NpbmspIHsKLSAgICAgICAgbV91c2luZ0ZhbGxiYWNrVmlk
ZW9TaW5rID0gdHJ1ZTsKLSAgICAgICAgbV92aWRlb1NpbmsgPSB3ZWJraXRWaWRlb1NpbmtOZXco
KTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdmlkZW9TaW5rLmdldCgpLCAi
cmVwYWludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKHJlcGFpbnRDYWxsYmFjayksIHRoaXMpOwot
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92aWRlb1NpbmsuZ2V0KCksICJyZXBh
aW50LWNhbmNlbGxlZCIsIEdfQ0FMTEJBQ0socmVwYWludENhbmNlbGxlZENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgfQotCi0gICAgR3N0RWxlbWVudCogdmlkZW9TaW5rID0gbnVsbHB0cjsKLSNpZiBF
TkFCTEUoTUVESUFfU1RBVElTVElDUykKLSAgICBtX2Zwc1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImZwc2Rpc3BsYXlzaW5rIiwgInNpbmsiKTsKLSAgICBpZiAobV9mcHNTaW5rKSB7
Ci0gICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmsuZ2V0KCksICJzaWxlbnQiLCBUUlVFICwg
bnVsbHB0cik7Ci0KLSAgICAgICAgLy8gVHVybiBvZmYgdGV4dCBvdmVybGF5IHVubGVzcyB0cmFj
aW5nIGlzIGVuYWJsZWQuCi0gICAgICAgIGlmIChnc3RfZGVidWdfY2F0ZWdvcnlfZ2V0X3RocmVz
aG9sZCh3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVnKSA8IEdTVF9MRVZFTF9UUkFDRSkKLSAgICAg
ICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmsuZ2V0KCksICJ0ZXh0LW92ZXJsYXkiLCBGQUxT
RSAsIG51bGxwdHIpOwotCi0gICAgICAgIGlmIChnX29iamVjdF9jbGFzc19maW5kX3Byb3BlcnR5
KEdfT0JKRUNUX0dFVF9DTEFTUyhtX2Zwc1NpbmsuZ2V0KCkpLCAidmlkZW8tc2luayIpKSB7Ci0g
ICAgICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5rLmdldCgpLCAidmlkZW8tc2luayIsIG1f
dmlkZW9TaW5rLmdldCgpLCBudWxscHRyKTsKLSAgICAgICAgICAgIHZpZGVvU2luayA9IG1fZnBz
U2luay5nZXQoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2Zwc1NpbmsgPSBudWxs
cHRyOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKCFtX2Zwc1NpbmspCi0gICAgICAgIHZpZGVv
U2luayA9IG1fdmlkZW9TaW5rLmdldCgpOwotCi0gICAgQVNTRVJUKHZpZGVvU2luayk7Ci0KLSAg
ICByZXR1cm4gdmlkZW9TaW5rOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OnNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR3N0U3RyZWFtVm9sdW1lKiB2b2x1bWUpCi17
Ci0gICAgQVNTRVJUKCFtX3ZvbHVtZUVsZW1lbnQpOwotICAgIG1fdm9sdW1lRWxlbWVudCA9IHZv
bHVtZTsKLQotICAgIC8vIFdlIGRvbid0IHNldCB0aGUgaW5pdGlhbCB2b2x1bWUgYmVjYXVzZSB3
ZSB0cnVzdCB0aGUgc2luayB0byBrZWVwIGl0IGZvciB1cy4gU2VlCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODk3NCBmb3IgbW9yZSBpbmZvcm1hdGlv
bi4KLSAgICBpZiAoIW1fcGxheWVyLT5wbGF0Zm9ybVZvbHVtZUNvbmZpZ3VyYXRpb25SZXF1aXJl
ZCgpKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgc3Ry
ZWFtIHZvbHVtZSB0byAlZiIsIG1fcGxheWVyLT52b2x1bWUoKSk7Ci0gICAgICAgIGdzdF9zdHJl
YW1fdm9sdW1lX3NldF92b2x1bWUobV92b2x1bWVFbGVtZW50LmdldCgpLCBHU1RfU1RSRUFNX1ZP
TFVNRV9GT1JNQVRfTElORUFSLCBzdGF0aWNfY2FzdDxkb3VibGU+KG1fcGxheWVyLT52b2x1bWUo
KSkpOwotICAgIH0gZWxzZQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJO
b3Qgc2V0dGluZyBzdHJlYW0gdm9sdW1lLCB0cnVzdGluZyBzeXN0ZW0gb25lIik7Ci0KLSAgICBH
U1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5nIHN0cmVhbSBtdXRlZCAlcyIsIHRv
U3RyaW5nKG1fcGxheWVyLT5tdXRlZCgpKS51dGY4KCkuZGF0YSgpKTsKLSAgICBnX29iamVjdF9z
ZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsIG1fcGxheWVyLT5tdXRlZCgpLCBudWxs
cHRyKTsKLQotICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3ZvbHVtZUVsZW1lbnQuZ2V0
KCksICJub3RpZnk6OnZvbHVtZSIsIEdfQ0FMTEJBQ0sodm9sdW1lQ2hhbmdlZENhbGxiYWNrKSwg
dGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdm9sdW1lRWxlbWVudC5nZXQo
KSwgIm5vdGlmeTo6bXV0ZSIsIEdfQ0FMTEJBQ0sobXV0ZUNoYW5nZWRDYWxsYmFjayksIHRoaXMp
OwotfQotCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpkZWNvZGVk
RnJhbWVDb3VudCgpIGNvbnN0Ci17Ci0gICAgZ3VpbnQ2NCBkZWNvZGVkRnJhbWVzID0gMDsKLSAg
ICBpZiAobV9mcHNTaW5rKQotICAgICAgICBnX29iamVjdF9nZXQobV9mcHNTaW5rLmdldCgpLCAi
ZnJhbWVzLXJlbmRlcmVkIiwgJmRlY29kZWRGcmFtZXMsIG51bGxwdHIpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZGVjb2RlZEZyYW1lcyk7Ci19Ci0KLXVuc2lnbmVkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRyb3BwZWRGcmFtZUNvdW50KCkgY29uc3QKLXsK
LSAgICBndWludDY0IGZyYW1lc0Ryb3BwZWQgPSAwOwotICAgIGlmIChtX2Zwc1NpbmspCi0gICAg
ICAgIGdfb2JqZWN0X2dldChtX2Zwc1NpbmsuZ2V0KCksICJmcmFtZXMtZHJvcHBlZCIsICZmcmFt
ZXNEcm9wcGVkLCBudWxscHRyKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZy
YW1lc0Ryb3BwZWQpOwotfQotCi11bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjphdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25zdAotewotICAgIEdzdFF1ZXJ5KiBxdWVy
eSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZPUk1BVF9CWVRFUyk7Ci0gICAgZ2ludDY0
IHBvc2l0aW9uID0gMDsKLQotICAgIGlmIChhdWRpb1NpbmsoKSAmJiBnc3RfZWxlbWVudF9xdWVy
eShhdWRpb1NpbmsoKSwgcXVlcnkpKQotICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24o
cXVlcnksIDAsICZwb3NpdGlvbik7Ci0KLSAgICBnc3RfcXVlcnlfdW5yZWYocXVlcnkpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24pOwotfQotCi11bnNpZ25lZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp2aWRlb0RlY29kZWRCeXRlQ291bnQoKSBj
b25zdAotewotICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NU
X0ZPUk1BVF9CWVRFUyk7Ci0gICAgZ2ludDY0IHBvc2l0aW9uID0gMDsKLQotICAgIGlmIChnc3Rf
ZWxlbWVudF9xdWVyeShtX3ZpZGVvU2luay5nZXQoKSwgcXVlcnkpKQotICAgICAgICBnc3RfcXVl
cnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3NpdGlvbik7Ci0KLSAgICBnc3RfcXVlcnlf
dW5yZWYocXVlcnkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocG9zaXRpb24p
OwotfQotCi0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6aW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEm
JiBpbml0RGF0YSkKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQotICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGluaXRE
YXRhID0gV1RGTW92ZShpbml0RGF0YSldIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBHU1RfREVCVUcoInNjaGVkdWxpbmcgaW5pdGlhbGl6
YXRpb25EYXRhRW5jb3VudGVyZWQgZXZlbnQgb2Ygc2l6ZSAlenUiLCBpbml0RGF0YS5wYXlsb2Fk
KCktPnNpemUoKSk7Ci0gICAgICAgIEdTVF9NRU1EVU1QKCJpbml0IGRhdGFzIiwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oaW5pdERhdGEucGF5bG9hZCgpLT5kYXRhKCkpLCBpbml0
RGF0YS5wYXlsb2FkKCktPnNpemUoKSk7Ci0gICAgICAgIHdlYWtUaGlzLT5tX3BsYXllci0+aW5p
dGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoaW5pdERhdGEucGF5bG9hZENvbnRhaW5lclR5cGUo
KSwgaW5pdERhdGEucGF5bG9hZCgpLT50cnlDcmVhdGVBcnJheUJ1ZmZlcigpKTsKLSAgICB9KTsK
LX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjZG1JbnN0YW5jZUF0
dGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5jZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotCi0gICAgaWYgKG1fY2RtSW5zdGFuY2UgPT0gJmluc3RhbmNlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fcGlwZWxpbmUpIHsKLSAgICAgICAgR1NUX0VSUk9SKCJubyBwaXBl
bGluZSB5ZXQiKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBtX2NkbUluc3RhbmNlID0gJmluc3RhbmNlOwotCi0gICAgR1JlZlB0
cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldygiZHJtLWNk
bS1pbnN0YW5jZSIsIEZBTFNFKSk7Ci0gICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3RydWN0dXJl
ID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOwotICAgIGdz
dF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJjZG0taW5zdGFuY2UiLCBHX1RZUEVf
UE9JTlRFUiwgbV9jZG1JbnN0YW5jZS0+cHJveHlDRE0oKS5nZXQoKSwgbnVsbHB0cik7Ci0gICAg
Z3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNv
bnRleHQuZ2V0KCkpOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAi
Q0RNIHByb3h5IGluc3RhbmNlICVwIGRpc3BhdGNoZWQgYXMgY29udGV4dCIsIG1fY2RtSW5zdGFu
Y2UtPnByb3h5Q0RNKCkuZ2V0KCkpOwotCi0gICAgbV9jZG1BdHRhY2htZW50U2VtYXBob3JlLnNp
Z25hbCgpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNkbUlu
c3RhbmNlRGV0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0KLSAgICBpZiAobV9jZG1JbnN0YW5jZSAhPSAmaW5zdGFuY2UpIHsKLSAg
ICAgICAgR1NUX1dBUk5JTkcoInBhc3NlZCBDRE1JbnN0YW5jZSAlcCBpcyBkaWZmZXJlbnQgZnJv
bSBzdG9yZWQgb25lICVwIiwgJmluc3RhbmNlLCBtX2NkbUluc3RhbmNlLmdldCgpKTsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQobV9waXBlbGluZSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0
KCksICJkZXRhY2hpbmcgQ0RNIGluc3RhbmNlICVwLCBzZXR0aW5nIGVtcHR5IGNvbnRleHQiLCBt
X2NkbUluc3RhbmNlLmdldCgpKTsKLSAgICBtX2NkbUluc3RhbmNlID0gbnVsbHB0cjsKLQotICAg
IEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXco
ImRybS1jZG0taW5zdGFuY2UiLCBGQUxTRSkpOwotICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0
KEdTVF9FTEVNRU5UKG1fcGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgpKTsKLX0KLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjphdHRlbXB0VG9EZWNyeXB0V2l0aElu
c3RhbmNlKENETUluc3RhbmNlJiBpbnN0YW5jZSkKLXsKLSAgICBBU1NFUlQobV9jZG1JbnN0YW5j
ZS5nZXQoKSA9PSAmaW5zdGFuY2UpOwotICAgIEdTVF9UUkFDRSgiaW5zdGFuY2UgJXAsIGN1cnJl
bnQgc3RvcmVkICVwIiwgJmluc3RhbmNlLCBtX2NkbUluc3RhbmNlLmdldCgpKTsKLSAgICBhdHRl
bXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjphdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKQot
ewotICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gZ3N0X2VsZW1lbnRfc2VuZF9ldmVudChwaXBlbGlu
ZSgpLCBnc3RfZXZlbnRfbmV3X2N1c3RvbShHU1RfRVZFTlRfQ1VTVE9NX0RPV05TVFJFQU1fT09C
LCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXR0ZW1wdC10by1kZWNyeXB0IikpKTsKLSAgICBH
U1RfREVCVUcoImF0dGVtcHRpbmcgdG8gZGVjcnlwdCwgZXZlbnQgaGFuZGxlZCAlcyIsIGJvb2xG
b3JQcmludGluZyhldmVudEhhbmRsZWQpKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJCYXNlOjpoYW5kbGVQcm90ZWN0aW9uRXZlbnQoR3N0RXZlbnQqIGV2ZW50KQotewot
ICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJvdGVjdGlvbk11dGV4KTsKLSAgICAg
ICAgaWYgKG1faGFuZGxlZFByb3RlY3Rpb25FdmVudHMuY29udGFpbnMoR1NUX0VWRU5UX1NFUU5V
TShldmVudCkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJl
dmVudCAldSBhbHJlYWR5IGhhbmRsZWQiLCBHU1RfRVZFTlRfU0VRTlVNKGV2ZW50KSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiaGFuZGxpbmcgZXZlbnQgJXUgZnJvbSBNU0UiLCBHU1RfRVZFTlRfU0VRTlVN
KGV2ZW50KSk7Ci0gICAgY29uc3QgY2hhciogZXZlbnRLZXlTeXN0ZW1VVUlEID0gbnVsbHB0cjsK
LSAgICBHc3RCdWZmZXIqIGluaXREYXRhID0gbnVsbHB0cjsKLSAgICBnc3RfZXZlbnRfcGFyc2Vf
cHJvdGVjdGlvbihldmVudCwgJmV2ZW50S2V5U3lzdGVtVVVJRCwgJmluaXREYXRhLCBudWxscHRy
KTsKLSAgICBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCh7ZXZlbnRLZXlTeXN0ZW1VVUlE
LCBpbml0RGF0YX0pOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6
OnNldFdhaXRpbmdGb3JLZXkoYm9vbCB3YWl0aW5nRm9yS2V5KQotewotICAgIC8vIFdlIGJhaWwg
b3V0IGlmIHZhbHVlcyBkaWQgbm90IGNoYW5nZSBvciBpZiB3ZSBhcmUgcmVxdWVzdGVkIHRvIG5v
dCB3YWl0IGFueW1vcmUgYnV0IHRoZXJlIGFyZSBzdGlsbCB3YWl0aW5nIGRlY3J5cHRvcnMuCi0g
ICAgR1NUX1RSQUNFKCJ3YWl0aW5nRm9yS2V5ICVzLCBtX3dhaXRpbmdGb3JLZXkgJXMiLCBib29s
Rm9yUHJpbnRpbmcod2FpdGluZ0ZvcktleSksIGJvb2xGb3JQcmludGluZyhtX3dhaXRpbmdGb3JL
ZXkpKTsKLSAgICBpZiAod2FpdGluZ0ZvcktleSA9PSBtX3dhaXRpbmdGb3JLZXkgfHwgKCF3YWl0
aW5nRm9yS2V5ICYmIHRoaXMtPndhaXRpbmdGb3JLZXkoKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fd2FpdGluZ0ZvcktleSA9IHdhaXRpbmdGb3JLZXk7Ci0gICAgR1NUX0RFQlVHKCJ3YWl0
aW5nIGZvciBrZXkgY2hhbmdlZCAlcyIsIGJvb2xGb3JQcmludGluZyhtX3dhaXRpbmdGb3JLZXkp
KTsKLSAgICBtX3BsYXllci0+d2FpdGluZ0ZvcktleUNoYW5nZWQoKTsKLX0KLQotYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp3YWl0aW5nRm9yS2V5KCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fcGlwZWxpbmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdzdFN0YXRl
IHN0YXRlOwotICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3Rh
dGUsIG51bGxwdHIsIDApOwotCi0gICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBHUmVmUHRy
PEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihnc3RfcXVlcnlfbmV3X2N1c3RvbShHU1RfUVVF
UllfQ1VTVE9NLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYW55LWRlY3J5cHRvci13YWl0aW5n
LWZvci1rZXkiKSkpOwotICAgIGlmIChzdGF0ZSA+PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAg
ICAgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5Lmdl
dCgpKTsKLSAgICAgICAgR1NUX1RSQUNFKCJxdWVyeSByZXN1bHQgJXMsIG9uICVzIiwgYm9vbEZv
clByaW50aW5nKHJlc3VsdCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSk7Ci0g
ICAgfSBlbHNlIGlmIChzdGF0ZSA+PSBHU1RfU1RBVEVfUkVBRFkpIHsKLSAgICAgICAgLy8gUnVu
bmluZyBhIHF1ZXJ5IGluIHRoZSBwaXBlbGluZSBpcyBlYXNpZXIgYnV0IGl0IG9ubHkgd29ya3Mg
d2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0IHVwIGFuZCBydW5uaW5nLCBvdGhlcndpc2Ugd2UgbmVl
ZCB0byBpbnNwZWN0IGl0IGFuZCBhc2sgdGhlIGRlY3J5cHRvcnMgZGlyZWN0bHkuCi0gICAgICAg
IEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+IGl0ZXJhdG9yKGdzdF9iaW5faXRlcmF0ZV9yZWN1cnNl
KEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpKTsKLSAgICAgICAgR3N0SXRlcmF0b3JSZXN1bHQg
aXRlcmF0b3JSZXN1bHQ7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGl0ZXJhdG9yUmVzdWx0
ID0gZ3N0X2l0ZXJhdG9yX2ZvbGQoaXRlcmF0b3IuZ2V0KCksIFtdKGNvbnN0IEdWYWx1ZSAqaXRl
bSwgR1ZhbHVlICosIGdwb2ludGVyIGRhdGEpIC0+IGdib29sZWFuIHsKLSAgICAgICAgICAgICAg
ICBHc3RFbGVtZW50KiBlbGVtZW50ID0gR1NUX0VMRU1FTlQoZ192YWx1ZV9nZXRfb2JqZWN0KGl0
ZW0pKTsKLSAgICAgICAgICAgICAgICBHc3RRdWVyeSogcXVlcnkgPSBHU1RfUVVFUlkoZGF0YSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFXRUJLSVRfSVNfTUVESUFfQ0VOQ19ERUNSWVBUKGVs
ZW1lbnQpIHx8ICFnc3RfZWxlbWVudF9xdWVyeShlbGVtZW50LCBxdWVyeSk7Ci0gICAgICAgICAg
ICB9LCBudWxscHRyLCBxdWVyeS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlcmF0b3JSZXN1
bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKLSAgICAgICAgICAgICAgICBnc3RfaXRlcmF0b3Jf
cmVzeW5jKGl0ZXJhdG9yLmdldCgpKTsKLSAgICAgICAgfSB3aGlsZSAoaXRlcmF0b3JSZXN1bHQg
PT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7Ci0gICAgICAgIGlmIChpdGVyYXRvclJlc3VsdCA9PSBH
U1RfSVRFUkFUT1JfRVJST1IpCi0gICAgICAgICAgICBHU1RfV0FSTklORygiaXRlcmF0b3IgcmV0
dXJuZWQgYW4gZXJyb3IiKTsKLSAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3JSZXN1bHQgPT0gR1NU
X0lURVJBVE9SX09LOwotICAgICAgICBHU1RfVFJBQ0UoIml0ZXJhdG9yIHJlc3VsdCAlZCwgd2Fp
dGluZyAlcyIsIGl0ZXJhdG9yUmVzdWx0LCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCi1ib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2U6OnN1cHBvcnRzS2V5U3lzdGVtKGNvbnN0IFN0cmluZyYga2V5U3lz
dGVtLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
Ci0KLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgIHJlc3VsdCA9IEdTdHJlYW1lckVN
RVV0aWxpdGllczo6aXNDbGVhcktleUtleVN5c3RlbShrZXlTeXN0ZW0pOwotI2VuZGlmCi0KLSAg
ICBHU1RfREVCVUcoImNoZWNraW5nIGZvciBLZXlTeXN0ZW0gc3VwcG9ydCB3aXRoICVzIGFuZCB0
eXBlICVzOiAlcyIsIGtleVN5c3RlbS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0
YSgpLCBib29sRm9yUHJpbnRpbmcocmVzdWx0KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
TWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
OjpleHRlbmRlZFN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVuZ2luZVN1cHBvcnRQYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHJlc3VsdCkKLXsKLSAgICBV
TlVTRURfUEFSQU0ocGFyYW1ldGVycyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfQotCi0j
ZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjVh
OTNkZjU2YzkxNDUzNTI1OGQzMTRlN2MyZTc0NmE1OTZjZmFmLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwzMjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IENv
bGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwg
MjAxNSwgMjAxNiBJZ2FsaWEgUy5MCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Vf
aAotI2RlZmluZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlX2gKLSNpZiBFTkFCTEUo
VklERU8pICYmIFVTRShHU1RSRUFNRVIpCi0KLSNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIK
LSNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJNYWluVGhyZWFk
Tm90aWZpZXIuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPGdzdC9nc3QuaD4K
LSNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvUnVuTG9vcC5oPgotI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dM
KQotI2lmIFVTRShMSUJFUE9YWSkKLS8vIEluY2x1ZGUgdGhlIDxlcG94eS9nbC5oPiBoZWFkZXIg
YmVmb3JlIDxnc3QvZ2wvZ2wuaD4uCi0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4KLQotLy8gV29ya2Fy
b3VuZCBidWlsZCBpc3N1ZSB3aXRoIFJQaSB1c2VybGFuZCBHTEVTdjIgaGVhZGVycyBhbmQgbGli
ZXBveHkgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE4NTYzOT4KLSNpZiAhR1NUX0NIRUNLX1ZFUlNJ
T04oMSwgMTQsIDApCi0jaW5jbHVkZSA8Z3N0L2dsL2dzdGdsY29uZmlnLmg+Ci0jaWYgZGVmaW5l
ZChHU1RfR0xfSEFWRV9XSU5ET1dfRElTUE1BTlgpICYmIEdTVF9HTF9IQVZFX1dJTkRPV19ESVNQ
TUFOWAotI2RlZmluZSBfX2dsMl9oXwotI3VuZGVmIEdTVF9HTF9IQVZFX0dMU1lOQwotI2RlZmlu
ZSBHU1RfR0xfSEFWRV9HTFNZTkMgMQotI2VuZGlmCi0jZW5kaWYgLy8gIUdTVF9DSEVDS19WRVJT
SU9OKDEsIDE0LCAwKQotI2VuZGlmIC8vIFVTRShMSUJFUE9YWSkKLQotI2RlZmluZSBHU1RfVVNF
X1VOU1RBQkxFX0FQSQotI2luY2x1ZGUgPGdzdC9nbC9nbC5oPgotI3VuZGVmIEdTVF9VU0VfVU5T
VEFCTEVfQVBJCi0jZW5kaWYKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpZiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNvc2lh
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbHNlCi0jaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCi0jZW5kaWYKLSNlbmRpZgotCi10
eXBlZGVmIHN0cnVjdCBfR3N0U3RyZWFtVm9sdW1lIEdzdFN0cmVhbVZvbHVtZTsKLXR5cGVkZWYg
c3RydWN0IF9Hc3RWaWRlb0luZm8gR3N0VmlkZW9JbmZvOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEdM
Q29udGV4dCBHc3RHTENvbnRleHQ7Ci10eXBlZGVmIHN0cnVjdCBfR3N0R0xEaXNwbGF5IEdzdEdM
RGlzcGxheTsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBCaXRtYXBUZXh0dXJlR0w7
Ci1jbGFzcyBHTENvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGlj
c0NvbnRleHQzRDsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgVmlkZW9U
ZXh0dXJlQ29waWVyR1N0cmVhbWVyOwotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotY2xh
c3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKLSNlbmRpZgotCi12b2lkIHJlZ2lz
dGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKTsKLQotLy8gVXNlIGVhZ2VyIGluaXRpYWxpemF0
aW9uIGZvciB0aGUgV2Vha1B0ckZhY3Rvcnkgc2luY2Ugd2UgY2FsbCBtYWtlV2Vha1B0cigpIGZy
b20gYW5vdGhlciB0aHJlYWQuCi1jbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
IDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSwgcHVibGljIENhbk1ha2VXZWFr
UHRyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UsIFdlYWtQdHJGYWN0b3J5SW5pdGlh
bGl6YXRpb246OkVhZ2VyPgotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSNpZiBVU0UoTklD
T1NJQSkKLSAgICAsIHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1w
bDo6Q2xpZW50Ci0jZWxzZQotICAgICwgcHVibGljIFBsYXRmb3JtTGF5ZXIKLSNlbmRpZgotI2Vu
ZGlmCi17Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKTsKLQotICAgIHZpcnR1YWwgfk1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UoKTsKLQotICAgIEZsb2F0U2l6ZSBuYXR1cmFsU2l6ZSgp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQpIG92ZXJyaWRlOwot
ICAgIGZsb2F0IHZvbHVtZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0jaWYgVVNFKEdTVFJFQU1FUl9H
TCkKLSAgICBib29sIGVuc3VyZUdzdEdMQ29udGV4dCgpOwotICAgIEdzdENvbnRleHQqIHJlcXVl
c3RHTENvbnRleHQoY29uc3QgY2hhciogY29udGV4dFR5cGUpOwotI2VuZGlmCi0gICAgdm9pZCBz
ZXRNdXRlZChib29sKSBvdmVycmlkZTsKLSAgICBib29sIG11dGVkKCkgY29uc3Q7Ci0KLSAgICBN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIHZvaWQgc2V0VmlzaWJsZShib29sKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHNldFNp
emUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2l6ZUNoYW5nZWQoKTsKLQot
ICAgIC8vIFByZWZlciBNZWRpYVRpbWUgYmFzZWQgbWV0aG9kcyBvdmVyIGZsb2F0IGJhc2VkLgot
ICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZHVyYXRpb25NZWRp
YVRpbWUoKS50b0Zsb2F0KCk7IH0KLSAgICBkb3VibGUgZHVyYXRpb25Eb3VibGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBkdXJhdGlvbk1lZGlhVGltZSgpLnRvRG91YmxlKCk7IH0KLSAgICBN
ZWRpYVRpbWUgZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBNZWRp
YVRpbWU6Onplcm9UaW1lKCk7IH0KLSAgICBmbG9hdCBjdXJyZW50VGltZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGN1cnJlbnRNZWRpYVRpbWUoKS50b0Zsb2F0KCk7IH0KLSAgICBkb3VibGUg
Y3VycmVudFRpbWVEb3VibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBjdXJyZW50TWVkaWFU
aW1lKCkudG9Eb3VibGUoKTsgfQotICAgIE1lZGlhVGltZSBjdXJyZW50TWVkaWFUaW1lKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9Ci0gICAgdm9pZCBz
ZWVrKGZsb2F0IHRpbWUpIG92ZXJyaWRlIHsgc2VlayhNZWRpYVRpbWU6OmNyZWF0ZVdpdGhGbG9h
dCh0aW1lKSk7IH0KLSAgICB2b2lkIHNlZWtEb3VibGUoZG91YmxlIHRpbWUpIG92ZXJyaWRlIHsg
c2VlayhNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUodGltZSkpOyB9Ci0gICAgdm9pZCBzZWVr
KGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlIHsgfQotICAgIGZsb2F0IG1heFRpbWVTZWVrYWJs
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1heE1lZGlhVGltZVNlZWthYmxlKCkudG9GbG9h
dCgpOyB9Ci0gICAgTWVkaWFUaW1lIG1heE1lZGlhVGltZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9Ci0gICAgZG91YmxlIG1pblRpbWVT
ZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1pbk1lZGlhVGltZVNlZWthYmxlKCku
dG9GbG9hdCgpOyB9Ci0gICAgTWVkaWFUaW1lIG1pbk1lZGlhVGltZVNlZWthYmxlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9Ci0KLSAgICB2b2lkIHBh
aW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotCi0gICAg
Ym9vbCBoYXNTaW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KLSAgICB2aXJ0dWFsIE1lZGlhVGltZSBtYXhUaW1lTG9hZGVkKCkgY29uc3QgeyByZXR1
cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOyB9Ci0KLSAgICBib29sIHN1cHBvcnRzRnVsbHNjcmVl
bigpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgTWVkaWFQbGF5ZXI6Ok1vdmllTG9hZFR5cGUgbW92
aWVMb2FkVHlwZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBpc0xpdmVTdHJl
YW0oKSBjb25zdCA9IDA7Ci0KLSAgICBNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX3BsYXllcjsgfQotCi0gICAgdW5zaWduZWQgZGVjb2RlZEZyYW1lQ291bnQoKSBj
b25zdCBvdmVycmlkZTsKLSAgICB1bnNpZ25lZCBkcm9wcGVkRnJhbWVDb3VudCgpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHVuc2lnbmVkIGF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHVuc2lnbmVkIHZpZGVvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgdm9pZCBhY2NlbGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpIG92ZXJyaWRl
OwotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKLSNpZiBQTEFURk9STShXSU5fQ0FJUk8pCi0gICAg
Ly8gRklYTUU6IEFjY2VsZXJhdGVkIHJlbmRlcmluZyBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQg
Zm9yIFdpbkNhaXJvIHlldC4KLSAgICBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmco
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2Vsc2UKLSAgICBib29sIHN1cHBv
cnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKLSAgICB2b2lk
IGNkbUluc3RhbmNlQXR0YWNoZWQoQ0RNSW5zdGFuY2UmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNk
bUluc3RhbmNlRGV0YWNoZWQoQ0RNSW5zdGFuY2UmKSBvdmVycmlkZTsKLSAgICB2b2lkIGhhbmRs
ZVByb3RlY3Rpb25FdmVudChHc3RFdmVudCopOwotICAgIHZpcnR1YWwgdm9pZCBhdHRlbXB0VG9E
ZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsKLSAgICB2b2lkIGF0dGVtcHRUb0RlY3J5cHRXaXRo
SW5zdGFuY2UoQ0RNSW5zdGFuY2UmKSBmaW5hbDsKLSAgICB2b2lkIGluaXRpYWxpemF0aW9uRGF0
YUVuY291bnRlcmVkKEluaXREYXRhJiYpOwotICAgIHZvaWQgc2V0V2FpdGluZ0ZvcktleShib29s
KTsKLSAgICBib29sIHdhaXRpbmdGb3JLZXkoKSBjb25zdCBvdmVycmlkZTsKLSNlbmRpZgotCi0g
ICAgc3RhdGljIGJvb2wgc3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0s
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9y
dHNUeXBlIGV4dGVuZGVkU3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFt
ZXRlcnMmLCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlKTsKLQotI2lmIFVTRShHU1RSRUFNRVJf
R0wpCi0gICAgYm9vbCBjb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0s
IEdDM0RlbnVtLCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgTmF0aXZlSW1h
Z2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAg
ICB2b2lkIHNldFZpZGVvU291cmNlT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbik7Ci0gICAg
R3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2FnZSopOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZShNZWRpYVBsYXll
ciopOwotICAgIHZpcnR1YWwgR3N0RWxlbWVudCogY3JlYXRlVmlkZW9TaW5rKCk7Ci0KLSNpZiBV
U0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkKLSAgICBHc3RFbGVtZW50KiBjcmVhdGVIb2xlUHVuY2hW
aWRlb1NpbmsoKTsKLSAgICB2b2lkIHB1c2hOZXh0SG9sZVB1bmNoQnVmZmVyKCk7Ci0gICAgYm9v
bCBzaG91bGRJZ25vcmVJbnRyaW5zaWNTaXplKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQotI2Vu
ZGlmCi0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIHN0YXRpYyBHc3RGbG93UmV0dXJuIG5l
d1NhbXBsZUNhbGxiYWNrKEdzdEVsZW1lbnQqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlKik7Ci0gICAgc3RhdGljIEdzdEZsb3dSZXR1cm4gbmV3UHJlcm9sbENhbGxiYWNrKEdzdEVs
ZW1lbnQqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKik7Ci0gICAgdm9pZCBmbHVz
aEN1cnJlbnRCdWZmZXIoKTsKLSAgICBHc3RFbGVtZW50KiBjcmVhdGVHTEFwcFNpbmsoKTsKLSAg
ICBHc3RFbGVtZW50KiBjcmVhdGVWaWRlb1NpbmtHTCgpOwotICAgIEdzdEdMQ29udGV4dCogZ3N0
R0xDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9nbENvbnRleHQuZ2V0KCk7IH0KLSAgICBHc3RH
TERpc3BsYXkqIGdzdEdMRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xEaXNwbGF5LmdldCgp
OyB9Ci0gICAgdm9pZCBlbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKTsKLSNlbmRpZgotCi0jaWYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIHZvaWQgcHVzaFRleHR1cmVUb0NvbXBvc2l0b3Io
KTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVy
cmlkZTsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkg
b3ZlcnJpZGU7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgR3N0RWxlbWVudCogdmlkZW9TaW5rKCkg
Y29uc3QgeyByZXR1cm4gbV92aWRlb1NpbmsuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0U3RyZWFt
Vm9sdW1lRWxlbWVudChHc3RTdHJlYW1Wb2x1bWUqKTsKLSAgICB2aXJ0dWFsIEdzdEVsZW1lbnQq
IGNyZWF0ZUF1ZGlvU2luaygpIHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIEdzdEVsZW1lbnQq
IGF1ZGlvU2luaygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIHZvaWQgc2V0UGlwZWxpbmUo
R3N0RWxlbWVudCopOwotCi0gICAgdm9pZCB0cmlnZ2VyUmVwYWludChHc3RTYW1wbGUqKTsKLSAg
ICB2b2lkIHJlcGFpbnQoKTsKLSAgICB2b2lkIGNhbmNlbFJlcGFpbnQoYm9vbCBkZXN0cm95aW5n
ID0gZmFsc2UpOwotCi0gICAgc3RhdGljIHZvaWQgcmVwYWludENhbGxiYWNrKE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2UqLCBHc3RTYW1wbGUqKTsKLSAgICBzdGF0aWMgdm9pZCByZXBh
aW50Q2FuY2VsbGVkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOwot
Ci0gICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOwotICAgIHZvaWQgbm90aWZ5
UGxheWVyT2ZNdXRlKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCB2b2x1bWVDaGFuZ2VkQ2FsbGJhY2so
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOwotICAgIHN0YXRpYyB2b2lkIG11dGVD
aGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSopOwotCi0jaWYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotICAgIHZvaWQgdXBkYXRlVGV4dHVyZU1hcHBlckZsYWdz
KCk7Ci0gICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX3RleHR1cmVNYXBwZXJGbGFnczsKLSNl
bmRpZgotCi0gICAgZW51bSBNYWluVGhyZWFkTm90aWZpY2F0aW9uIHsKLSAgICAgICAgVmlkZW9D
aGFuZ2VkID0gMSA8PCAwLAotICAgICAgICBWaWRlb0NhcHNDaGFuZ2VkID0gMSA8PCAxLAotICAg
ICAgICBBdWRpb0NoYW5nZWQgPSAxIDw8IDIsCi0gICAgICAgIFZvbHVtZUNoYW5nZWQgPSAxIDw8
IDMsCi0gICAgICAgIE11dGVDaGFuZ2VkID0gMSA8PCA0LAotI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICAgICAgVGV4dENoYW5nZWQgPSAxIDw8IDUsCi0jZW5kaWYKLSAgICAgICAgU2l6ZUNo
YW5nZWQgPSAxIDw8IDYsCi0gICAgICAgIFN0cmVhbUNvbGxlY3Rpb25DaGFuZ2VkID0gMSA8PCA3
Ci0gICAgfTsKLQotICAgIFJlZjxNYWluVGhyZWFkTm90aWZpZXI8TWFpblRocmVhZE5vdGlmaWNh
dGlvbj4+IG1fbm90aWZpZXI7Ci0gICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwotICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKLSAgICBHUmVmUHRyPEdzdFN0cmVhbVZvbHVtZT4g
bV92b2x1bWVFbGVtZW50OwotICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92aWRlb1Npbms7Ci0g
ICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2Zwc1Npbms7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgbV9yZWFkeVN0YXRlOwotICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0
ZSBtX25ldHdvcmtTdGF0ZTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBtdXRhYmxlIExvY2sg
bV9zYW1wbGVNdXRleDsKLSAgICBHUmVmUHRyPEdzdFNhbXBsZT4gbV9zYW1wbGU7Ci0KLSAgICBt
dXRhYmxlIEZsb2F0U2l6ZSBtX3ZpZGVvU2l6ZTsKLSAgICBib29sIG1fdXNpbmdGYWxsYmFja1Zp
ZGVvU2luayB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQg
eyBmYWxzZSB9OwotCi0gICAgQ29uZGl0aW9uIG1fZHJhd0NvbmRpdGlvbjsKLSAgICBMb2NrIG1f
ZHJhd011dGV4OwotICAgIGJvb2wgbV9kZXN0cm95aW5nIHsgZmFsc2UgfTsKLSAgICBSdW5Mb29w
OjpUaW1lcjxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlPiBtX2RyYXdUaW1lcjsKLQot
I2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBSZWY8Tmlj
b3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKLSNlbHNlCi0gICAgUmVmUHRyPFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2Vu
ZGlmCi0jZW5kaWYKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgR1JlZlB0cjxHc3RHTENv
bnRleHQ+IG1fZ2xDb250ZXh0OwotICAgIEdSZWZQdHI8R3N0R0xEaXNwbGF5PiBtX2dsRGlzcGxh
eTsKLSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IG1fZ2xEaXNwbGF5RWxlbWVudENvbnRleHQ7Ci0g
ICAgR1JlZlB0cjxHc3RDb250ZXh0PiBtX2dsQXBwRWxlbWVudENvbnRleHQ7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcj4gbV92aWRlb1RleHR1cmVDb3Bp
ZXI7Ci0KLSAgICBHUmVmUHRyPEdzdEdMQ29sb3JDb252ZXJ0PiBtX2NvbG9yQ29udmVydDsKLSAg
ICBHUmVmUHRyPEdzdENhcHM+IG1fY29sb3JDb252ZXJ0SW5wdXRDYXBzOwotICAgIEdSZWZQdHI8
R3N0Q2Fwcz4gbV9jb2xvckNvbnZlcnRPdXRwdXRDYXBzOwotI2VuZGlmCi0KLSAgICBJbWFnZU9y
aWVudGF0aW9uIG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbjsKLQotI2lmIEVOQUJMRShFTkNSWVBU
RURfTUVESUEpCi0gICAgQmluYXJ5U2VtYXBob3JlIG1fY2RtQXR0YWNobWVudFNlbWFwaG9yZTsK
LSAgICBSZWZQdHI8Y29uc3QgQ0RNSW5zdGFuY2U+IG1fY2RtSW5zdGFuY2U7Ci0KLSAgICBMb2Nr
IG1fcHJvdGVjdGlvbk11dGV4OyAvLyBHdWFyZHMgYWNjZXNzIHRvIG1faGFuZGxlZFByb3RlY3Rp
b25FdmVudHMuCi0gICAgSGFzaFNldDx1aW50MzJfdD4gbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50
czsKLQotICAgIGJvb2wgbV93YWl0aW5nRm9yS2V5IHsgZmFsc2UgfTsKLSNlbmRpZgotCi0gICAg
T3B0aW9uYWw8R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm0+IG1fdmlkZW9EZWNvZGVyUGxhdGZvcm07
Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZWM5YzJjYmI2ZmRkZDJl
Y2RmODY4ZjRmN2RiZTYyZjc5MTg1ZjIzOS4uYjNlNzUxZGZmZDFjMDhlMTI4MGU2ZGE3ZTRlY2Jl
MThhMDZhMjVmMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTExLTE5ICBDaGFybGllIFR1cm5lciAgPGN0dXJu
ZXJAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBGbGF0dGVuIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciBpbnRvIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDM1MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OiBUaGUgYmFzZSBjbGFzcyBubyBsb25nZXIKKyAgICAg
ICAgZXhpc3RzLCBwZXJmb3JtIHRoZSBjaGVjayBvbiB0aGUgcGxheWVyIHByaXZhdGUuCisKIDIw
MTktMTEtMjUgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHVEtdW1dQRV0gbGliZ3BnLWVycm9yIGZhaWxzIHRvIGJ1aWxkIHdpdGggZ2F3ayA1CmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKaW5kZXggOGY3OTU2NzQwZWVjM2VkMTY3
NTNiMmJkMGJhOTUxMjgwMTJiNmYyMC4uNDM0YTYxZWNiMWYwOWE3MDMwYzA4ODU1NzFkNWYwYzlm
NDU1NTViZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vy
LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMTc3
LDcgKzE3Nyw3IEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsKICAgICAoWwogICAgICAgIyBU
byB1c2UgR1N0cmVhbWVyIEdMIHdpdGhvdXQgY29uZmxpY3RzIG9mIEdMIHN5bWJvbHMsCiAgICAg
ICAjIHdlIHNob3VsZCBpbmNsdWRlIGdzdC9nbC9nbC5oIGJlZm9yZSBpbmNsdWRpbmcgT3BlbkdM
W0VTXVNoaW1zCi0gICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3JlJywgJ3BsYXRm
b3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXJCYXNlLmNwcCcpXSwKKyAgICAgIG9zLnBhdGguam9pbignU291cmNlJywgJ1dlYkNvcmUnLCAn
cGxhdGZvcm0nLCAnZ3JhcGhpY3MnLCAnZ3N0cmVhbWVyJywgJ01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAnKV0sCiAgICAgIFsiLWJ1aWxkL2luY2x1ZGVfb3JkZXIiXSksCiAKICAgICAo
Wwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384284</attachid>
            <date>2019-11-25 02:42:13 -0800</date>
            <delta_ts>2019-11-25 03:25:15 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-204352-20191125104212.patch</filename>
            <type>text/plain</type>
            <size>325134</size>
            <attacher name="Charlie Turner">cturner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQ3ZjdmMjhlMzBmMDNk
NjQ2OGI3OWY3YjJhMjI2OWMyNGQ3MWEwYi4uNjI4YzA2OWJjNTBmNGU5ZjZlOGJlMWI1MWRmNTg3
NmZkNWU1NmU2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NiBAQAorMjAxOS0xMS0xOSAgQ2hh
cmxpZSBUdXJuZXIgIDxjdHVybmVyQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0g
RmxhdHRlbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgaW50byBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDQzNTIKKworICAgICAgICBSZXZpZXdlZCBieSBQaGlsaXBwZSBOb3JtYW5kLgor
CisgICAgICAgIFRoZSBpbmhlcml0YW5jZSBsaW5rIGJldHdlZW4gdGhlIGJhc2UgcGxheWVyIGFu
ZCB0aGUgcHJpdmF0ZSBwbGF5ZXIgbm8KKyAgICAgICAgbG9uZ2VyIHNlcnZlcyBhIHB1cnBvc2Uu
IFRoZSBvbmx5IHVzZXIgb2YgdGhlIGJhc2UgY2xhc3MgaXMgdGhlIHByaXZhdGUKKyAgICAgICAg
cGxheWVyLgorCisgICAgICAgIFNxdWFzaGluZyB0aGVzZSB0b2doZXRoZXIgbWFrZXMgaXQgZWFz
eSB0byBkbyBmdXJ0aGVyIHJlZmFjdG9yaW5ncywKKyAgICAgICAgc2luY2UgZXZlcnl0aGluZyBj
YW4gYmUgc2VlbiBpbiBvbmUgcGxhY2UgcmF0aGVyIHRoYW4gYmVpbmcgYXJiaXRyYXJpbHkKKyAg
ICAgICAgc3BsaXQgaW50byB0d28gY2xhc3NlcyBhbmQgaGF2aW5nIHRvIGRvIGRlcml2ZWQtdG8t
YmFzZSBjb252ZXJzaW9ucyBpbgorICAgICAgICB5b3VyIGhlYWQgZm9yIG5vIGdhaW4gaW4gY2xh
cml0eSBlbHNld2hlcmUuCisKKyAgICAgICAgQXNpZGUgZnJvbSBtZXJnaW5nIHRoZSBjbGFzc2Vz
LCB0aGUgb25seSBvdGhlciBjaGFuZ2UgaGVyZSBpcyBzd2l0Y2hpbmcKKyAgICAgICAgdG8gaW4t
Y2xhc3MgaW5pdGlhbGl6YXRpb24gb2YgbWFueSBtZW1iZXIgdmFyaWFibGVzLCByYXRoZXIgdGhh
biBhIGxvbmcKKyAgICAgICAgbGlzdCBvZiBpbml0aWFsaXphdGlvbnMgaW4gdGhlIGNvbnN0cnVj
dG9yIHRoYXQgZ2V0cyBmaWRkbHkgd2l0aAorICAgICAgICAtV3Jlb3JkZXIuCisKKyAgICAgICAg
VGhlc2UgY2xhc3NlcyBhcmUgbXVjaCB0b28gbGFyZ2UgYW5kIGNvdWxkIHVzZSBzb21lIHJlZGVz
aWduLCB0aGlzIGlzCisgICAgICAgIG9ubHkgYSBmaXJzdCBzdGVwIHRvd2FyZCB0aGF0IGdvYWwu
CisKKyAgICAgICAgVGhpcyBpcyBhIHJlZmFjdG9yaW5nLCBob3BlZnVsbHkgd2VsbCBjb3ZlcmVk
IGJ5IG91ciBleGlzdGluZyB0ZXN0cyEKKworICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1lci5j
bWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdyZWF0ZXN0Q29tbW9uRGl2
aXNvcik6CisgICAgICAgIChXZWJDb3JlOjpidXNNZXNzYWdlQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydFRvSW50ZXJuYWxQcm90b2NvbCk6CisgICAgICAgIChXZWJDb3JlOjpH
c3RWaWRlb0ZyYW1lSG9sZGVyOjpHc3RWaWRlb0ZyYW1lSG9sZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6On5Hc3RWaWRlb0ZyYW1lSG9sZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6OndhaXRGb3JDUFVTeW5jKToKKyAgICAgICAg
KFdlYkNvcmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6OnNpemUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3N0VmlkZW9GcmFtZUhvbGRlcjo6aGFzQWxwaGFDaGFubmVsIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6OmZsYWdzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6OnRleHR1cmVJRCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjpoYXNNYXBwZWRUZXh0dXJlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpHc3RWaWRlb0ZyYW1lSG9sZGVyOjp2aWRlb0ZyYW1lIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdzdFZpZGVvRnJhbWVIb2xkZXI6OnVwZGF0ZVRleHR1cmUp
OgorICAgICAgICAoV2ViQ29yZTo6R3N0VmlkZW9GcmFtZUhvbGRlcjo6cGxhdGZvcm1MYXllckJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Omlu
aXRpYWxpemVEZWJ1Z0NhdGVnb3J5KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmlzQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6cmVnaXN0ZXJNZWRpYUVuZ2luZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpjYW5jZWxMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG9TZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxhdGZvcm1EdXJhdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uTWVkaWFU
aW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6Y3VycmVudE1lZGlhVGltZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNldFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpyYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlc2VydmVzUGl0Y2gpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQcmVsb2FkKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YnVmZmVyZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptYXhNZWRpYVRp
bWVTZWVrYWJsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6Om1heFRpbWVMb2FkZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRMb2FkaW5nUHJvZ3Jlc3MgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0b3RhbEJ5dGVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFzU2lu
Z2xlU2VjdXJpdHlPcmlnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp3b3VsZFRhaW50T3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2ltdWxhdGVBdWRpb0ludGVycnVwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmVuc3Vy
ZUF1ZGlvU291cmNlUHJvdmlkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjphdWRpb1NvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlU2V0dXApOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRBdWRpb1N0cmVhbVBy
b3BlcnRpZXNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjaGFuZ2VQaXBlbGluZVN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0
UGxheWJpblVSTCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRTeW5jT25DbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN5bmNPbkNsb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVy
T2ZWaWRlbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvQ2Fwcyk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvQ2hhbmdlZENhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZBdWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnRleHRDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0U2FtcGxlQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0
U2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
ZmlsbFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpsb2FkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6dGltZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkaW5nRmFpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlQXVkaW9TaW5rKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9TaW5rIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJhY2tQ
b3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmVuYWJsZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6dXBkYXRlVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2xlYXJUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb0NoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFBpcGVsaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3Nh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZXF1
ZXN0R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6ZW5zdXJlR3N0R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRWb2x1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2b2x1bWUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZvbHVt
ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnZvbHVtZUNoYW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6Om5ldHdvcmtTdGF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5U3RhdGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzaXplQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldE11dGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bXV0ZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQ
bGF5ZXJPZk11dGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjptdXRlQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NCdWZmZXJpbmdTdGF0cyk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZU1heFRpbWVMb2Fk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRh
dGVCdWZmZXJpbmdTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpwcm9jZXNzTXBlZ1RzU2VjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nlc3NUYWJsZU9mQ29udGVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzVGFibGVPZkNv
bnRlbnRzRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpwdXJnZUludmFsaWRBdWRpb1RyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFZpZGVvVHJhY2tzKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJbnZhbGlkVGV4dFRy
YWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVy
aURlY29kZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG93bmxvYWRCdWZmZXJGaWxlQ3JlYXRlZENhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VP
bGREb3dubG9hZEZpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6YXN5bmNTdGF0ZUNoYW5nZURvbmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptZWRpYUxvY2F0aW9uQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRF
bmQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpnZXRT
dXBwb3J0ZWRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZyk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4pOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRQYXNzQ09SU0Fj
Y2Vzc0NoZWNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6Y2FuU2F2ZU1lZGlhRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmFjY2VsZXJhdGVkUmVuZGVyaW5nU3Rh
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnN3YXBCdWZmZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm94eSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hUZXh0dXJlVG9Db21wb3NpdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRyaWdn
ZXJSZXBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6cmVwYWludENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y2FuY2VsUmVwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnRDYW5jZWxsZWRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1NhbXBsZUNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmV3UHJlcm9s
bENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6Zmx1c2hDdXJyZW50QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0aXZlSW1hZ2VGb3JD
dXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnNldFZpZGVvU291cmNlT3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUZXh0dXJlTWFwcGVyRmxhZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c0Z1bGxzY3Jl
ZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojptb3ZpZUxvYWRUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR0xBcHBTaW5rKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5rR0wpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjplbnN1cmVHTFZpZGVvU2lua0NvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UmVjdGFuZ2xlVG9WaWRlb1NpbmspOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVySG9sZVB1bmNoQ2xpZW50OjpHU3RyZWFtZXJIb2xlUHVuY2hD
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGVIb2xlUHVuY2hWaWRlb1NpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwdXNoTmV4dEhvbGVQdW5jaEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZVZpZGVvU2luayk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFN0cmVhbVZvbHVt
ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpkZWNvZGVkRnJhbWVDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmRyb3BwZWRGcmFtZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9EZWNvZGVkQnl0ZUNvdW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
dmlkZW9EZWNvZGVkQnl0ZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6aW5pdGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjZG1JbnN0YW5jZUF0
dGFjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
Y2RtSW5zdGFuY2VEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OmF0dGVtcHRUb0RlY3J5cHRXaXRoSW5zdGFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdHRlbXB0VG9EZWNyeXB0V2l0aExv
Y2FsSW5zdGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpoYW5kbGVQcm90ZWN0aW9uRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6d2FpdGluZ0ZvcktleSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzS2V5U3lz
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZXh0
ZW5kZWRTdXBwb3J0c1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWVkaWFQbGF5ZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwaXBlbGluZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmlzTGl2ZVN0cmVhbSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNv
bmZpZ3VyZVBsYXlTaW5rKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6Z3N0R0xDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z3N0R0xEaXNwbGF5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9TaW5rIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaDogUmVtb3ZlZC4KKwogMjAxOS0x
MS0yNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVT
U0lPTiAoU2FmYXJpIDEzKTogV2ViU29ja2V0IHBheWxvYWQgaXMgdHJ1bmNhdGVkIHdoZW4geC13
ZWJraXQtZGVmbGF0ZS1mcmFtZSBpcyB1c2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFt
ZXIuY21ha2UKaW5kZXggZjI0MGVjN2FmMTAzYmVjYWIzZTc3NDY5YWUzMDI2YTY5NTE2OTA4ZC4u
MmM5NDFmMGNiNGFlOGFhODYwZDVlNTcxNjViYTJiNTYzOGIwMjFhOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMTQsNyArMTQsNiBAQCBpZiAoRU5BQkxFX1ZJ
REVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9JbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFFbmdpbmVDb25maWd1cmF0aW9uRmFjdG9yeUdTdHJl
YW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBsZUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRDb21iaW5lckdTdHJlYW1lci5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1RleHRTaW5rR1N0cmVhbWVyLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBkMjJhNGZl
MmIxMTJiMzk0OGU1ZDY1ZTY4MjQyMTgzZDI2YWU5NmFhLi44NmUxY2FiMzA0ZTNhOTBkY2YzZGNj
NmE1ZTNjNTc4ODM2Mzg1ZTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcApAQCAtMyw5ICszLDkgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBD
b2xsYWJvcmEgTHRkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rh
dm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCwgMjAxMSwgMjAxMiwgMjAxMywgMjAxNSwgMjAxNiBJZ2FsaWEgUy5MCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQ2FibGUgVGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4KLSAqIENvcHly
aWdodCAoQykgMjAxNSwgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDE5IElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxOSBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCwxNDQgKzI4
LDM3MCBAQAogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCiAjaW5j
bHVkZSAiR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyLmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck5h
bWVzLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIkltYWdlR1N0
cmVhbWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKICNp
bmNsdWRlICJNZWRpYVBsYXllclJlcXVlc3RJbnN0YWxsTWlzc2luZ1BsdWdpbnNDYWxsYmFjay5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5o
IgorI2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1lci5oIgogI2luY2x1ZGUgIldlYktpdFdlYlNv
dXJjZUdTdHJlYW1lci5oIgorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorI2luY2x1ZGUgIkF1
ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiSW5iYW5kTWV0YWRhdGFUZXh0
VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlRleHRDb21iaW5lckdTdHJlYW1lci5oIgorI2luY2x1
ZGUgIlRleHRTaW5rR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuaCIKKyNlbmRpZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmgiCisjZW5k
aWYKKworI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisjaW5jbHVkZSAiTWVkaWFTb3VyY2UuaCIK
KyNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorI2VuZGlmCisKKyNpZiBF
TkFCTEUoRU5DUllQVEVEX01FRElBKQorI2luY2x1ZGUgIkNETUluc3RhbmNlLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyRU1FVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisj
aW5jbHVkZSAiV2ViS2l0Q29tbW9uRW5jcnlwdGlvbkRlY3J5cHRvckdTdHJlYW1lci5oIgorI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlk
ZXJHU3RyZWFtZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdz
dC9hdWRpby9zdHJlYW12b2x1bWUuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CiAjaW5jbHVkZSA8
Z3N0L3BidXRpbHMvbWlzc2luZy1wbHVnaW5zLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZp
ZGVvbWV0YS5oPgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5o
PgorI2luY2x1ZGUgPHd0Zi9nbGliL0dMaWJVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5
Lmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvTWVkaWFUaW1l
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmlu
Z1ByaW50U3RyZWFtLmg+Ci0jaW5jbHVkZSA8d3RmL1VSTC5oPgotI2luY2x1ZGUgPHd0Zi9XYWxs
VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dMaWJVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDx3
dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9t
U3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKLSNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oIgotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCi0jaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXIuaCIKLSNpbmNsdWRlICJJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIu
aCIKLSNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCi0jaW5jbHVk
ZSAiVGV4dENvbWJpbmVyR1N0cmVhbWVyLmgiCi0jaW5jbHVkZSAiVGV4dFNpbmtHU3RyZWFtZXIu
aCIKLSNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgotI2VuZGlmCisjaW5j
bHVkZSA8d3RmL1VSTC5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgogCiAjaWYgRU5BQkxF
KFZJREVPX1RSQUNLKSAmJiBVU0UoR1NUUkVBTUVSX01QRUdUUykKICNkZWZpbmUgR1NUX1VTRV9V
TlNUQUJMRV9BUEkKICNpbmNsdWRlIDxnc3QvbXBlZ3RzL21wZWd0cy5oPgogI3VuZGVmIEdTVF9V
U0VfVU5TVEFCTEVfQVBJCisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBVU0UoR1NU
UkVBTUVSX01QRUdUUykKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyNkZWZpbmUgQ1JFQVRF
X1RSQUNLKHR5cGUsIFR5cGUpIEdfU1RNVF9TVEFSVCB7ICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgbV9oYXMjI1R5cGUgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCF1c2VNZWRpYVNvdXJjZSkgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFJlZlB0
cjxUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI+IHRyYWNrID0gVHlwZSMjVHJhY2tQcml2YXRl
R1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQdHIoKnRoaXMpLCBpLCBzdHJlYW0pOyBcCisgICAg
ICAgICAgICBtXyMjdHlwZSMjVHJhY2tzLmFkZCh0cmFjay0+aWQoKSwgdHJhY2spOyAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICBtX3BsYXllci0+YWRkIyNUeXBlIyNUcmFjaygqdHJh
Y2spOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoZ3N0X3N0cmVh
bV9nZXRfc3RyZWFtX2ZsYWdzKHN0cmVhbS5nZXQoKSkgJiBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNU
KSBcCisgICAgICAgICAgICAgICAgbV9jdXJyZW50IyNUeXBlIyNTdHJlYW1JZCA9IFN0cmluZyhn
c3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7IFwKKyAgICAgICAgfSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICB9IEdfU1RNVF9FTkQKKworI2RlZmluZSBDTEVBUl9UUkFDS1ModHJhY2tzLCBtZXRo
b2QpIFwKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDogdHJhY2tzLnZhbHVlcygpKVwKKyAgICAgICAg
bWV0aG9kKCp0cmFjayk7XAorICAgIHRyYWNrcy5jbGVhcigpOworI2Vsc2UKKyNkZWZpbmUgQ1JF
QVRFX1RSQUNLKHR5cGUsIFR5cGUpIEdfU1RNVF9TVEFSVCB7IFwKKyAgICAgICAgbV9oYXMjI1R5
cGUjIyA9IHRydWU7ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IEdfU1RNVF9FTkQKKyNlbmRp
ZiAvLyBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorI2RlZmlu
ZSBURVhUVVJFX0NPUElFUl9DT0xPUl9DT05WRVJUX0ZMQUcgVmlkZW9UZXh0dXJlQ29waWVyR1N0
cmVhbWVyOjpDb2xvckNvbnZlcnNpb246Ok5vQ29udmVydAorI2RlZmluZSBHU1RfR0xfQ0FQU19G
T1JNQVQgInsgUkdCeCwgUkdCQSwgSTQyMCwgWTQ0NCwgWVYxMiwgWTQxQiwgWTQyQiwgTlYxMiwg
TlYyMSwgVlVZQSB9IgorCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisKKyNpbmNs
dWRlICJHTENvbnRleHQuaCIKKyNpZiBVU0UoR0xYKQorI2luY2x1ZGUgIkdMQ29udGV4dEdMWC5o
IgorI2luY2x1ZGUgPGdzdC9nbC94MTEvZ3N0Z2xkaXNwbGF5X3gxMS5oPgogI2VuZGlmCi0jaW5j
bHVkZSA8Z3N0L2F1ZGlvL3N0cmVhbXZvbHVtZS5oPgogCi0jaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKLSNpbmNsdWRlICJNZWRpYVNvdXJjZS5oIgotI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNl
R1N0cmVhbWVyLmgiCisjaWYgVVNFKEVHTCkKKyNpbmNsdWRlICJHTENvbnRleHRFR0wuaCIKKyNp
bmNsdWRlIDxnc3QvZ2wvZWdsL2dzdGdsZGlzcGxheV9lZ2wuaD4KICNlbmRpZgogCi0jaWYgRU5B
QkxFKFdFQl9BVURJTykKLSNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmgi
CisjaWYgUExBVEZPUk0oWDExKQorI2luY2x1ZGUgIlBsYXRmb3JtRGlzcGxheVgxMS5oIgogI2Vu
ZGlmCiAKLUdTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X21lZGlhX3BsYXllcl9kZWJ1
Zyk7Ci0jZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFfcGxheWVyX2RlYnVnCisj
aWYgUExBVEZPUk0oV0FZTEFORCkKKyNpbmNsdWRlICJQbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmgi
CisjZW5kaWYKKworI2lmIFVTRShXUEVfUkVOREVSRVIpCisjaW5jbHVkZSAiUGxhdGZvcm1EaXNw
bGF5TGliV1BFLmgiCisjZW5kaWYKKworLy8gZ3N0Z2xhcGkuaCBtYXkgaW5jbHVkZSBlZ2xwbGF0
Zm9ybS5oIGFuZCBpdCBpbmNsdWRlcyBYLmgsIHdoaWNoCisvLyBkZWZpbmVzIE5vbmUsIGJyZWFr
aW5nIE1lZGlhUGxheWVyOjpOb25lIGVudW0KKyNpZiBQTEFURk9STShYMTEpICYmIEdTVF9HTF9I
QVZFX1BMQVRGT1JNX0VHTAorI3VuZGVmIE5vbmUKKyNlbmRpZiAvLyBQTEFURk9STShYMTEpICYm
IEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAorI2luY2x1ZGUgIlZpZGVvVGV4dHVyZUNvcGllckdT
dHJlYW1lci5oIgorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCisKKyNpZiBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpCisjaW5jbHVkZSAiQml0bWFwVGV4dHVyZUdMLmgiCisjaW5jbHVkZSAiQml0
bWFwVGV4dHVyZVBvb2wuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0
ZXMuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKyNpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4K
KyNlbmRpZgorI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIAorR1NUX0RFQlVHX0NB
VEVHT1JZKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFV
TFQgd2Via2l0X21lZGlhX3BsYXllcl9kZWJ1ZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCi1zdGF0aWMgdm9pZCBidXNNZXNzYWdlQ2FsbGJhY2soR3N0QnVz
KiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5
ZXIpCisjaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCitzdGF0aWMgY29uc3QgRmxvYXRTaXpl
IHNfaG9sZVB1bmNoRGVmYXVsdEZyYW1lU2l6ZSgxMjgwLCA3MjApOworI2VuZGlmCisKK3N0YXRp
YyBpbnQgZ3JlYXRlc3RDb21tb25EaXZpc29yKGludCBhLCBpbnQgYikKIHsKLSAgICBwbGF5ZXIt
PmhhbmRsZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgd2hpbGUgKGIpIHsKKyAgICAgICAgaW50IHRl
bXAgPSBhOworICAgICAgICBhID0gYjsKKyAgICAgICAgYiA9IHRlbXAgJSBiOworICAgIH0KKwor
ICAgIHJldHVybiBBQlMoYSk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXNDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqIHBsYXllciwgR09iamVjdCogb2JqZWN0KQorc3RhdGljIHZvaWQgYnVzTWVzc2FnZUNh
bGxiYWNrKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lciogcGxheWVyKQogewotICAgIHBsYXllci0+c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVz
KG9iamVjdCk7CisgICAgcGxheWVyLT5oYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzKEdP
YmplY3QqIG9iamVjdCkKK3N0YXRpYyB2b2lkIGNvbnZlcnRUb0ludGVybmFsUHJvdG9jb2woVVJM
JiB1cmwpCiB7Ci0gICAgaWYgKGdfc3RyY21wMChHX09CSkVDVF9UWVBFX05BTUUob2JqZWN0KSwg
IkdzdFB1bHNlU2luayIpKQorICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTIsIDAp
KQogICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBjaGFyKiByb2xlID0gbV9wbGF5ZXItPmNs
aWVudCgpLm1lZGlhUGxheWVySXNWaWRlbygpID8gInZpZGVvIiA6ICJtdXNpYyI7Ci0gICAgR3N0
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldygic3RyZWFtLXByb3BlcnRp
ZXMiLCAibWVkaWEucm9sZSIsIEdfVFlQRV9TVFJJTkcsIHJvbGUsIG51bGxwdHIpOwotICAgIGdf
b2JqZWN0X3NldChvYmplY3QsICJzdHJlYW0tcHJvcGVydGllcyIsIHN0cnVjdHVyZSwgbnVsbHB0
cik7Ci0gICAgZ3N0X3N0cnVjdHVyZV9mcmVlKHN0cnVjdHVyZSk7Ci0gICAgR1VuaXF1ZVB0cjxn
Y2hhcj4gZWxlbWVudE5hbWUoZ3N0X2VsZW1lbnRfZ2V0X25hbWUoR1NUX0VMRU1FTlQob2JqZWN0
KSkpOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldCBtZWRpYS5yb2xlIGFz
ICVzIGF0ICVzIiwgcm9sZSwgZWxlbWVudE5hbWUuZ2V0KCkpOworICAgIGlmICh1cmwucHJvdG9j
b2xJc0luSFRUUEZhbWlseSgpIHx8IHVybC5wcm90b2NvbElzQmxvYigpKQorICAgICAgICB1cmwu
c2V0UHJvdG9jb2woIndlYmtpdCsiICsgdXJsLnByb3RvY29sKCkpOwogfQogCi12b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVnaXN0ZXJNZWRpYUVuZ2luZShNZWRpYUVuZ2luZVJl
Z2lzdHJhciByZWdpc3RyYXIpCi17Ci0gICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6aW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKTsKLSAgICBpZiAoaXNBdmFpbGFibGUoKSkgewot
ICAgICAgICByZWdpc3RyYXIoW10oTWVkaWFQbGF5ZXIqIHBsYXllcikgeyByZXR1cm4gbWFrZVVu
aXF1ZTxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI+KHBsYXllcik7IH0sCi0gICAgICAgICAg
ICBnZXRTdXBwb3J0ZWRUeXBlcywgc3VwcG9ydHNUeXBlLCBudWxscHRyLCBudWxscHRyLCBudWxs
cHRyLCBzdXBwb3J0c0tleVN5c3RlbSk7CisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorY2xh
c3MgR3N0VmlkZW9GcmFtZUhvbGRlciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ckJ1ZmZlcjo6VW5tYW5hZ2VkQnVmZmVyRGF0YUhvbGRlciB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgR3N0VmlkZW9GcmFtZUhvbGRlcihHc3RTYW1wbGUqIHNhbXBsZSwgT3B0aW9uYWw8R3N0Vmlk
ZW9EZWNvZGVyUGxhdGZvcm0+IHZpZGVvRGVjb2RlclBsYXRmb3JtLCBUZXh0dXJlTWFwcGVyR0w6
OkZsYWdzIGZsYWdzLCBib29sIGdzdEdMRW5hYmxlZCkKKyAgICAgICAgOiBtX3ZpZGVvRGVjb2Rl
clBsYXRmb3JtKHZpZGVvRGVjb2RlclBsYXRmb3JtKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoR1NUX0lTX1NBTVBMRShzYW1wbGUpKTsKKworICAgICAgICBHc3RWaWRlb0luZm8gdmlk
ZW9JbmZvOworICAgICAgICBpZiAoVU5MSUtFTFkoIWdldFNhbXBsZVZpZGVvSW5mbyhzYW1wbGUs
IHZpZGVvSW5mbykpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fc2l6ZSA9IElu
dFNpemUoR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyksIEdTVF9WSURFT19JTkZPX0hF
SUdIVCgmdmlkZW9JbmZvKSk7CisgICAgICAgIG1faGFzQWxwaGFDaGFubmVsID0gR1NUX1ZJREVP
X0lORk9fSEFTX0FMUEhBKCZ2aWRlb0luZm8pOworICAgICAgICBtX2J1ZmZlciA9IGdzdF9zYW1w
bGVfZ2V0X2J1ZmZlcihzYW1wbGUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIUdTVF9JU19CVUZG
RVIobV9idWZmZXIpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworI2lmIFVTRShHU1RSRUFNRVJf
R0wpCisgICAgICAgIG1fZmxhZ3MgPSBmbGFncyB8IChtX2hhc0FscGhhQ2hhbm5lbCA/IFRleHR1
cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwKTsKKworICAgICAgICBpZiAoZ3N0R0xFbmFibGVk
KSB7CisgICAgICAgICAgICBtX2lzTWFwcGVkID0gZ3N0X3ZpZGVvX2ZyYW1lX21hcCgmbV92aWRl
b0ZyYW1lLCAmdmlkZW9JbmZvLCBtX2J1ZmZlciwgc3RhdGljX2Nhc3Q8R3N0TWFwRmxhZ3M+KEdT
VF9NQVBfUkVBRCB8IEdTVF9NQVBfR0wpKTsKKyAgICAgICAgICAgIGlmIChtX2lzTWFwcGVkKSB7
CisgICAgICAgICAgICAgICAgbV90ZXh0dXJlSUQgPSAqcmVpbnRlcnByZXRfY2FzdDxHTHVpbnQq
PihtX3ZpZGVvRnJhbWUuZGF0YVswXSk7CisgICAgICAgICAgICAgICAgbV9oYXNNYXBwZWRUZXh0
dXJlcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorI2Vsc2UKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGdzdEdMRW5hYmxl
ZCk7CisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKKworICAgICAgICB7CisgICAgICAgICAg
ICBtX3RleHR1cmVJRCA9IDA7CisgICAgICAgICAgICBtX2lzTWFwcGVkID0gZ3N0X3ZpZGVvX2Zy
YW1lX21hcCgmbV92aWRlb0ZyYW1lLCAmdmlkZW9JbmZvLCBtX2J1ZmZlciwgR1NUX01BUF9SRUFE
KTsKKyAgICAgICAgICAgIGlmIChtX2lzTWFwcGVkKSB7CisgICAgICAgICAgICAgICAgLy8gUmln
aHQgbm93IHRoZSBUZXh0dXJlTWFwcGVyIG9ubHkgc3VwcG9ydHMgY2hyb21hcyB3aXRoIG9uZSBw
bGFuZQorICAgICAgICAgICAgICAgIEFTU0VSVChHU1RfVklERU9fSU5GT19OX1BMQU5FUygmdmlk
ZW9JbmZvKSA9PSAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KLX0KIAotYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmlzQXZhaWxhYmxlKCkKLXsKLSAgICBpZiAo
IWluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB2aXJ0dWFsIH5Hc3RWaWRlb0ZyYW1lSG9sZGVyKCkKKyAgICB7
CisgICAgICAgIGlmIChVTkxJS0VMWSghbV9pc01hcHBlZCkpCisgICAgICAgICAgICByZXR1cm47
CiAKLSAgICBHUmVmUHRyPEdzdEVsZW1lbnRGYWN0b3J5PiBmYWN0b3J5ID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2ZhY3RvcnlfZmluZCgicGxheWJpbiIpKTsKLSAgICByZXR1cm4gZmFjdG9yeTsK
KyAgICAgICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwKCZtX3ZpZGVvRnJhbWUpOworICAgIH0KKwor
I2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JDUFVTeW5jKCkK
KyAgICB7CisgICAgICAgIEdzdEdMU3luY01ldGEqIG1ldGEgPSBnc3RfYnVmZmVyX2dldF9nbF9z
eW5jX21ldGEobV9idWZmZXIpOworICAgICAgICBpZiAobWV0YSkgeworICAgICAgICAgICAgR3N0
TWVtb3J5KiBtZW0gPSBnc3RfYnVmZmVyX3BlZWtfbWVtb3J5KG1fYnVmZmVyLCAwKTsKKyAgICAg
ICAgICAgIEdzdEdMQ29udGV4dCogY29udGV4dCA9ICgoR3N0R0xCYXNlTWVtb3J5KiltZW0pLT5j
b250ZXh0OworICAgICAgICAgICAgZ3N0X2dsX3N5bmNfbWV0YV93YWl0X2NwdShtZXRhLCBjb250
ZXh0KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQorCisg
ICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIGJv
b2wgaGFzQWxwaGFDaGFubmVsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYUNoYW5uZWw7IH0K
KyAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9mbGFn
czsgfQorICAgIEdMdWludCB0ZXh0dXJlSUQoKSBjb25zdCB7IHJldHVybiBtX3RleHR1cmVJRDsg
fQorICAgIGJvb2wgaGFzTWFwcGVkVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc01hcHBl
ZFRleHR1cmVzOyB9CisgICAgY29uc3QgR3N0VmlkZW9GcmFtZSYgdmlkZW9GcmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmlkZW9GcmFtZTsgfQorCisgICAgdm9pZCB1cGRhdGVUZXh0dXJlKEJpdG1h
cFRleHR1cmVHTCYgdGV4dHVyZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV90ZXh0dXJlSUQp
OworICAgICAgICBHc3RWaWRlb0dMVGV4dHVyZVVwbG9hZE1ldGEqIG1ldGE7CisgICAgICAgIGlm
IChtX2J1ZmZlciAmJiAobWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX2dsX3RleHR1cmVfdXBs
b2FkX21ldGEobV9idWZmZXIpKSkgeworICAgICAgICAgICAgaWYgKG1ldGEtPm5fdGV4dHVyZXMg
PT0gMSkgeyAvLyBCUkd4ICYgQkdSQSBmb3JtYXRzIHVzZSBvbmx5IG9uZSB0ZXh0dXJlLgorICAg
ICAgICAgICAgICAgIGd1aW50IGlkc1s0XSA9IHsgdGV4dHVyZS5pZCgpLCAwLCAwLCAwIH07CisK
KyAgICAgICAgICAgICAgICBpZiAoZ3N0X3ZpZGVvX2dsX3RleHR1cmVfdXBsb2FkX21ldGFfdXBs
b2FkKG1ldGEsIGlkcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9pc01hcHBlZCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpbnQgc3RyaWRlID0gR1NUX1ZJREVPX0ZSQU1FX1BMQU5FX1NUUklE
RSgmbV92aWRlb0ZyYW1lLCAwKTsKKyAgICAgICAgY29uc3Qgdm9pZCogc3JjRGF0YSA9IEdTVF9W
SURFT19GUkFNRV9QTEFORV9EQVRBKCZtX3ZpZGVvRnJhbWUsIDApOworCisgICAgICAgIGlmICgh
c3JjRGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0ZXh0dXJlLnVwZGF0ZUNv
bnRlbnRzKHNyY0RhdGEsIFdlYkNvcmU6OkludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSksIFdlYkNvcmU6OkludFBvaW50KDAsIDApLCBzdHJpZGUpOworICAgIH0K
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4g
cGxhdGZvcm1MYXllckJ1ZmZlcigpCisgICAgeworICAgICAgICBpZiAoIW1faGFzTWFwcGVkVGV4
dHVyZXMpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICB1c2luZyBCdWZm
ZXIgPSBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcjsKKworICAgICAgICBpZiAoKEdT
VF9WSURFT19JTkZPX0lTX1JHQigmbV92aWRlb0ZyYW1lLmluZm8pICYmIEdTVF9WSURFT19JTkZP
X05fUExBTkVTKCZtX3ZpZGVvRnJhbWUuaW5mbykgPT0gMSkpCisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZTxCdWZmZXI+KEJ1ZmZlcjo6VGV4dHVyZVZhcmlhbnQgeyBCdWZmZXI6OlJHQlRl
eHR1cmUgeyAqc3RhdGljX2Nhc3Q8R0x1aW50Kj4obV92aWRlb0ZyYW1lLmRhdGFbMF0pIH0gfSwg
bV9zaXplLCBtX2ZsYWdzLCBHTF9SR0JBKTsKKworICAgICAgICBpZiAoR1NUX1ZJREVPX0lORk9f
SVNfWVVWKCZtX3ZpZGVvRnJhbWUuaW5mbykpIHsKKyAgICAgICAgICAgIGlmIChHU1RfVklERU9f
SU5GT19OX0NPTVBPTkVOVFMoJm1fdmlkZW9GcmFtZS5pbmZvKSA8IDMgfHwgR1NUX1ZJREVPX0lO
Rk9fTl9QTEFORVMoJm1fdmlkZW9GcmFtZS5pbmZvKSA+IDMpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIGlmIChtX3ZpZGVvRGVjb2RlclBsYXRmb3JtICYm
ICptX3ZpZGVvRGVjb2RlclBsYXRmb3JtID09IEdzdFZpZGVvRGVjb2RlclBsYXRmb3JtOjpJbXhW
UFUpIHsKKyAgICAgICAgICAgICAgICAvLyBJTVggVlBVIGRlY29kZXIgZGVjb2RlcyBZVVYgZGF0
YSBvbmx5IGludG8gdGhlIFkgdGV4dHVyZSBmcm9tIHdoaWNoIHRoZSBzYW1wbGVyCisgICAgICAg
ICAgICAgICAgLy8gdGhlbiBkaXJlY3RseSBwcm9kdWNlcyBSR0JBIGRhdGEuIFRleHR1cmVzIGZv
ciBvdGhlciBwbGFuZXMgYXJlbid0IHVzZWQsIGJ1dAorICAgICAgICAgICAgICAgIC8vIHRoYXQn
cyBkZWNvZGVyJ3MgcHJvYmxlbS4gV2UgaGF2ZSB0byB0cmVhdCB0aGF0IFkgdGV4dHVyZSBhcyBo
YXZpbmcgUkdCQSBkYXRhLgorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEJ1ZmZl
cj4oQnVmZmVyOjpUZXh0dXJlVmFyaWFudCB7IEJ1ZmZlcjo6UkdCVGV4dHVyZSB7ICpzdGF0aWNf
Y2FzdDxHTHVpbnQqPihtX3ZpZGVvRnJhbWUuZGF0YVswXSkgfSB9LCBtX3NpemUsIG1fZmxhZ3Ms
IEdMX1JHQkEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZlBsYW5lcyA9IEdTVF9WSURFT19JTkZPX05fUExBTkVTKCZtX3ZpZGVvRnJhbWUuaW5mbyk7Cisg
ICAgICAgICAgICBzdGQ6OmFycmF5PEdMdWludCwgMz4gcGxhbmVzOworICAgICAgICAgICAgc3Rk
OjphcnJheTx1bnNpZ25lZCwgMz4geXV2UGxhbmU7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVu
c2lnbmVkLCAzPiB5dXZQbGFuZU9mZnNldDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1iZXJPZlBsYW5lczsgKytpKQorICAgICAgICAgICAgICAgIHBsYW5lc1tpXSA9
ICpzdGF0aWNfY2FzdDxHTHVpbnQqPihtX3ZpZGVvRnJhbWUuZGF0YVtpXSk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgICAgICAgICAgICAgeXV2
UGxhbmVbaV0gPSBHU1RfVklERU9fSU5GT19DT01QX1BMQU5FKCZtX3ZpZGVvRnJhbWUuaW5mbywg
aSk7CisgICAgICAgICAgICAgICAgeXV2UGxhbmVPZmZzZXRbaV0gPSBHU1RfVklERU9fSU5GT19D
T01QX1BPRkZTRVQoJm1fdmlkZW9GcmFtZS5pbmZvLCBpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3RkOjphcnJheTxHTGZsb2F0LCA5PiB5dXZUb1JnYjsKKyAgICAgICAgICAgIGlm
IChnc3RfdmlkZW9fY29sb3JpbWV0cnlfbWF0Y2hlcygmR1NUX1ZJREVPX0lORk9fQ09MT1JJTUVU
UlkoJm1fdmlkZW9GcmFtZS5pbmZvKSwgR1NUX1ZJREVPX0NPTE9SSU1FVFJZX0JUNzA5KSkgewor
ICAgICAgICAgICAgICAgIHl1dlRvUmdiID0geworICAgICAgICAgICAgICAgICAgICAxLjE2NGYs
ICAwLjBmLCAgICAxLjc4N2YsCisgICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgLTAuMjEzZiwg
LTAuNTMxZiwKKyAgICAgICAgICAgICAgICAgICAgMS4xNjRmLCAgMi4xMTJmLCAgMC4wZgorICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8v
IERlZmF1bHQgdG8gYnQ2MDEuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3VyIGFzIEdTdHJlYW1l
cidzIGdsY29sb3Jjb252ZXJ0IGVsZW1lbnQuCisgICAgICAgICAgICAgICAgeXV2VG9SZ2IgPSB7
CisgICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgIDAuMGYsICAgIDEuNTk2ZiwKKyAgICAgICAg
ICAgICAgICAgICAgMS4xNjRmLCAtMC4zOTFmLCAtMC44MTNmLAorICAgICAgICAgICAgICAgICAg
ICAxLjE2NGYsICAyLjAxOGYsICAwLjBmCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8QnVmZmVyPiggQnVmZmVyOjpUZXh0
dXJlVmFyaWFudCB7IEJ1ZmZlcjo6WVVWVGV4dHVyZSB7IG51bWJlck9mUGxhbmVzLCBwbGFuZXMs
IHl1dlBsYW5lLCB5dXZQbGFuZU9mZnNldCwgeXV2VG9SZ2IgfSB9LCBtX3NpemUsIG1fZmxhZ3Ms
IEdMX1JHQkEpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
Citwcml2YXRlOgorICAgIEdzdEJ1ZmZlciogbV9idWZmZXI7CisgICAgR3N0VmlkZW9GcmFtZSBt
X3ZpZGVvRnJhbWUgeyB9OworICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wgbV9oYXNBbHBo
YUNoYW5uZWw7CisgICAgT3B0aW9uYWw8R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm0+IG1fdmlkZW9E
ZWNvZGVyUGxhdGZvcm07CisgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX2ZsYWdzIHsgfTsK
KyAgICBHTHVpbnQgbV90ZXh0dXJlSUQgeyAwIH07CisgICAgYm9vbCBtX2lzTWFwcGVkIHsgZmFs
c2UgfTsKKyAgICBib29sIG1faGFzTWFwcGVkVGV4dHVyZXMgeyBmYWxzZSB9OworfTsKKyNlbmRp
ZgorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aW5pdGlhbGl6ZURlYnVnQ2F0
ZWdvcnkoKQoreworICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9wbGF5
ZXJfZGVidWcsICJ3ZWJraXRtZWRpYXBsYXllciIsIDAsICJXZWJLaXQgbWVkaWEgcGxheWVyIik7
CiB9CiAKIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKE1lZGlhUGxheWVyKiBwbGF5ZXIpCi0gICAgOiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlKHBsYXllcikKLSAgICAsIG1fYnVmZmVyaW5nKGZhbHNlKQotICAgICwgbV9idWZm
ZXJpbmdQZXJjZW50YWdlKDApCisgICAgOiBtX25vdGlmaWVyKE1haW5UaHJlYWROb3RpZmllcjxN
YWluVGhyZWFkTm90aWZpY2F0aW9uPjo6Y3JlYXRlKCkpCisgICAgLCBtX3BsYXllcihwbGF5ZXIp
CiAgICAgLCBtX2NhY2hlZFBvc2l0aW9uKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKICAgICAs
IG1fY2FjaGVkRHVyYXRpb24oTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQotICAgICwgbV9jYW5G
YWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uKGZhbHNlKQotICAgICwgbV9jaGFuZ2lu
Z1JhdGUoZmFsc2UpCi0gICAgLCBtX2Rvd25sb2FkRmluaXNoZWQoZmFsc2UpCi0gICAgLCBtX2Vy
cm9yT2NjdXJlZChmYWxzZSkKLSAgICAsIG1faXNFbmRSZWFjaGVkKGZhbHNlKQotICAgICwgbV9p
c1N0cmVhbWluZyhmYWxzZSkKLSAgICAsIG1fcGF1c2VkKHRydWUpCi0gICAgLCBtX3BsYXliYWNr
UmF0ZSgxKQotICAgICwgbV9yZXF1ZXN0ZWRTdGF0ZShHU1RfU1RBVEVfVk9JRF9QRU5ESU5HKQot
ICAgICwgbV9yZXNldFBpcGVsaW5lKGZhbHNlKQotICAgICwgbV9zZWVraW5nKGZhbHNlKQotICAg
ICwgbV9zZWVrSXNQZW5kaW5nKGZhbHNlKQogICAgICwgbV9zZWVrVGltZShNZWRpYVRpbWU6Omlu
dmFsaWRUaW1lKCkpCi0gICAgLCBtX3NvdXJjZShudWxscHRyKQotICAgICwgbV92b2x1bWVBbmRN
dXRlSW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAgLCBtX21lZGlhTG9jYXRpb25zKG51bGxwdHIpCi0g
ICAgLCBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXgoMCkKLSAgICAsIG1fcGxheWJhY2tSYXRl
UGF1c2UoZmFsc2UpCiAgICAgLCBtX3RpbWVPZk92ZXJsYXBwaW5nU2VlayhNZWRpYVRpbWU6Omlu
dmFsaWRUaW1lKCkpCi0gICAgLCBtX2xhc3RQbGF5YmFja1JhdGUoMSkKICAgICAsIG1fZmlsbFRp
bWVyKCp0aGlzLCAmTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpmaWxsVGltZXJGaXJlZCkK
ICAgICAsIG1fbWF4VGltZUxvYWRlZChNZWRpYVRpbWU6Onplcm9UaW1lKCkpCiAgICAgLCBtX3By
ZWxvYWQocGxheWVyLT5wcmVsb2FkKCkpCi0gICAgLCBtX2RlbGF5aW5nTG9hZChmYWxzZSkKICAg
ICAsIG1fbWF4VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzcyhNZWRpYVRpbWU6Onpl
cm9UaW1lKCkpCi0gICAgLCBtX2hhc1ZpZGVvKGZhbHNlKQotICAgICwgbV9oYXNBdWRpbyhmYWxz
ZSkKLSAgICAsIG1fcmVhZHlUaW1lckhhbmRsZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZWFkeVRpbWVyRmlyZWQpCi0gICAgLCBtX3RvdGFs
Qnl0ZXMoMCkKLSAgICAsIG1fcHJlc2VydmVzUGl0Y2goZmFsc2UpCisgICAgLCBtX2RyYXdUaW1l
cihSdW5Mb29wOjptYWluKCksIHRoaXMsICZNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJl
cGFpbnQpCisgICAgLCBtX3JlYWR5VGltZXJIYW5kbGVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywg
Jk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlUaW1lckZpcmVkCispCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQorI2lmIFVTRShOSUNPU0lBKQorICAgICwgbV9uaWNvc2lhTGF5
ZXIoTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKKyNlbHNlCisgICAgLCBtX3Bs
YXRmb3JtTGF5ZXJQcm94eShhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eSgpKSkKKyNlbmRpZgorI2VuZGlmICAgICAgCiB7CiAjaWYgVVNFKEdMSUIpCiAgICAgbV9y
ZWFkeVRpbWVySGFuZGxlci5zZXRQcmlvcml0eShHX1BSSU9SSVRZX0RFRkFVTFRfSURMRSk7CkBA
IC0yMjIsNTQgKzQ0OCw2NCBAQCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIoKQogICAgICAgICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIo
YnVzLmdldCgpLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKICAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fcGlwZWxpbmUuZ2V0KCksIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwogICAgIH0KLX0KIAotc3Rh
dGljIHZvaWQgY29udmVydFRvSW50ZXJuYWxQcm90b2NvbChVUkwmIHVybCkKLXsKLSAgICBpZiAo
d2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDEyLCAwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICh1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpIHx8IHVybC5wcm90b2NvbElzQmxvYigpKQot
ICAgICAgICB1cmwuc2V0UHJvdG9jb2woIndlYmtpdCsiICsgdXJsLnByb3RvY29sKCkpOwotfQor
I2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgaWYgKG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gPT0g
R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OlZpZGVvNExpbnV4KQorICAgICAgICBmbHVzaEN1cnJl
bnRCdWZmZXIoKTsKKyNlbmRpZgorI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkgJiYgVVNFKE5J
Q09TSUEpCisgICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKKyNlbmRpZgog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UGxheWJpblVSTChjb25zdCBV
UkwmIHVybCkKLXsKLSAgICAvLyBDbGVhbiBvdXQgZXZlcnl0aGluZyBhZnRlciBmaWxlOi8vIHVy
bCBwYXRoLgotICAgIFN0cmluZyBjbGVhblVSTFN0cmluZyh1cmwuc3RyaW5nKCkpOwotICAgIGlm
ICh1cmwuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgY2xlYW5VUkxTdHJpbmcgPSBjbGVhblVSTFN0
cmluZy5zdWJzdHJpbmcoMCwgdXJsLnBhdGhFbmQoKSk7CisgICAgbV9ub3RpZmllci0+aW52YWxp
ZGF0ZSgpOwogCi0gICAgbV91cmwgPSBVUkwoVVJMKCksIGNsZWFuVVJMU3RyaW5nKTsKLSAgICBj
b252ZXJ0VG9JbnRlcm5hbFByb3RvY29sKG1fdXJsKTsKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlw
ZWxpbmUoKSwgIkxvYWQgJXMiLCBtX3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBn
X29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInVyaSIsIG1fdXJsLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIG51bGxwdHIpOwotfQorICAgIGlmIChtX3ZpZGVvU2luaykgeworICAgICAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV92aWRlb1NpbmsuZ2V0KCksIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworI2lmIFVT
RShHU1RSRUFNRVJfR0wpCisgICAgICAgIGlmIChHU1RfSVNfQklOKG1fdmlkZW9TaW5rLmdldCgp
KSkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBhcHBzaW5rID0gYWRvcHRHUmVm
KGdzdF9iaW5fZ2V0X2J5X25hbWUoR1NUX0JJTl9DQVNUKG1fdmlkZW9TaW5rLmdldCgpKSwgIndl
YmtpdC1nbC12aWRlby1zaW5rIikpOworICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9kYXRhKGFwcHNpbmsuZ2V0KCksIHRoaXMpOworICAgICAgICB9CisjZW5kaWYK
KyAgICB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkKGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKQotewotICAgIGxvYWRGdWxsKHVybFN0cmluZywgU3RyaW5nKCkpOwor
ICAgIGlmIChtX3ZvbHVtZUVsZW1lbnQpCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfbWF0Y2hlZChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEs
IDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworCisgICAgLy8gVGhpcyB3aWxsIHJlbGVh
c2UgdGhlIEdTdHJlYW1lciB0aHJlYWQgZnJvbSBtX2RyYXdDb25kaXRpb24gaW4gbm9uIEFDIG1v
ZGUgaW4gY2FzZSB0aGVyZSdzIGFuIG9uZ29pbmcgdHJpZ2dlclJlcGFpbnQgY2FsbAorICAgIC8v
IHdhaXRpbmcgdGhlcmUsIGFuZCBlbnN1cmUgdGhhdCBhbnkgdHJpZ2dlclJlcGFpbnQgY2FsbCBy
ZWFjaGluZyB0aGUgbG9jayB3b24ndCB3YWl0IG9uIG1fZHJhd0NvbmRpdGlvbi4KKyAgICBjYW5j
ZWxSZXBhaW50KHRydWUpOworCisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICBtX2Nk
bUF0dGFjaG1lbnRTZW1hcGhvcmUuc2lnbmFsKCk7CisjZW5kaWYKKworICAgIC8vIFRoZSBjaGFu
Z2UgdG8gR1NUX1NUQVRFX05VTEwgc3RhdGUgaXMgYWx3YXlzIHN5bmNocm9ub3VzLiBTbyBhZnRl
ciB0aGlzIGdldHMgZXhlY3V0ZWQgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeQorICAgIC8vIGFib3V0
IGhhbmRsZXJzIHJ1bm5pbmcgaW4gdGhlIEdTdHJlYW1lciB0aHJlYWQuCisgICAgaWYgKG1fcGlw
ZWxpbmUpCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBH
U1RfU1RBVEVfTlVMTCk7CisKKyAgICBtX3BsYXllciA9IG51bGxwdHI7CiB9CiAKLXN0YXRpYyB2
b2lkIHNldFN5bmNPbkNsb2NrKEdzdEVsZW1lbnQgKmVsZW1lbnQsIGJvb2wgc3luYykKK2Jvb2wg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjppc0F2YWlsYWJsZSgpCiB7Ci0gICAgaWYgKCFH
U1RfSVNfQklOKGVsZW1lbnQpKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldChlbGVtZW50LCAic3lu
YyIsIHN5bmMsIE5VTEwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaW5pdGlh
bGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgR3N0SXRlcmF0b3IqIGl0ID0gZ3N0X2Jpbl9pdGVyYXRlX3NpbmtzKEdT
VF9CSU4oZWxlbWVudCkpOwotICAgIHdoaWxlIChnc3RfaXRlcmF0b3JfZm9yZWFjaChpdCwgKEdz
dEl0ZXJhdG9yRm9yZWFjaEZ1bmN0aW9uKShbXShjb25zdCBHVmFsdWUqIGl0ZW0sIHZvaWQqIHN5
bmNQdHIpIHsKLSAgICAgICAgYm9vbCogc3luYyA9IHN0YXRpY19jYXN0PGJvb2wqPihzeW5jUHRy
KTsKLSAgICAgICAgc2V0U3luY09uQ2xvY2soR1NUX0VMRU1FTlQoZ192YWx1ZV9nZXRfb2JqZWN0
KGl0ZW0pKSwgKnN5bmMpOwotICAgIH0pLCAmc3luYykgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykK
LSAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdCk7Ci0gICAgZ3N0X2l0ZXJhdG9yX2ZyZWUo
aXQpOworICAgIC8vIEZJWE1FOiBUaGlzIGhhcyBub3QgYmVlbiB1cGRhdGVkIGZvciB0aGUgcGxh
eWJpbjMgc3dpdGNoLgorICAgIEdSZWZQdHI8R3N0RWxlbWVudEZhY3Rvcnk+IGZhY3RvcnkgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZmFjdG9yeV9maW5kKCJwbGF5YmluIikpOworICAgIHJldHVy
biBmYWN0b3J5OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3luY09u
Q2xvY2soYm9vbCBzeW5jKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlZ2lz
dGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIgcmVnaXN0cmFyKQogewotICAgIHNl
dFN5bmNPbkNsb2NrKHZpZGVvU2luaygpLCBzeW5jKTsKLSAgICBzZXRTeW5jT25DbG9jayhhdWRp
b1NpbmsoKSwgc3luYyk7CisgICAgaW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKTsKKworICAgIGlm
IChpc0F2YWlsYWJsZSgpKSB7CisgICAgICAgIHJlZ2lzdHJhcihbXShNZWRpYVBsYXllciogcGxh
eWVyKSB7IHJldHVybiBtYWtlVW5pcXVlPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4ocGxh
eWVyKTsgfSwKKyAgICAgICAgICAgIGdldFN1cHBvcnRlZFR5cGVzLCBzdXBwb3J0c1R5cGUsIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIHN1cHBvcnRzS2V5U3lzdGVtKTsKKyAgICB9CiB9CiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVsbChjb25zdCBTdHJpbmcm
IHVybFN0cmluZywgY29uc3QgU3RyaW5nJiBwaXBlbGluZU5hbWUpCkBAIC0zMTQsNiArNTUwLDEx
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkRnVsbChjb25zdCBTdHJp
bmcmIHVybFN0cmluZywgY29uc3QgU3RyaW5nCiAgICAgICAgIGNvbW1pdExvYWQoKTsKIH0KIAor
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWQoY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcpCit7CisgICAgbG9hZEZ1bGwodXJsU3RyaW5nLCBTdHJpbmcoKSk7Cit9CisKICNpZiBF
TkFCTEUoTUVESUFfU09VUkNFKQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Omxv
YWQoY29uc3QgU3RyaW5nJiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KikKIHsKQEAgLTM1Myw4
OCArNTk0LDEzIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjb21taXRMb2Fk
KCkKICAgICB1cGRhdGVTdGF0ZXMoKTsKIH0KIAotTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6cGxheWJhY2tQb3NpdGlvbigpIGNvbnN0Cit2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y2FuY2VsTG9hZCgpCiB7Ci0gICAgR1NUX1RSQUNFX09CSkVDVChwaXBl
bGluZSgpLCAiaXNFbmRSZWFjaGVkOiAlcywgc2Vla2luZzogJXMsIHNlZWtUaW1lOiAlcyIsIGJv
b2xGb3JQcmludGluZyhtX2lzRW5kUmVhY2hlZCksIGJvb2xGb3JQcmludGluZyhtX3NlZWtpbmcp
LCBtX3NlZWtUaW1lLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKG1faXNFbmRS
ZWFjaGVkICYmIG1fc2Vla2luZykKLSAgICAgICAgcmV0dXJuIG1fc2Vla1RpbWU7CisgICAgaWYg
KG1fbmV0d29ya1N0YXRlIDwgTWVkaWFQbGF5ZXI6OkxvYWRpbmcgfHwgbV9uZXR3b3JrU3RhdGUg
PT0gTWVkaWFQbGF5ZXI6OkxvYWRlZCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gVGhpcyBj
b25zdGFudCBzaG91bGQgcmVtYWluIGxvd2VyIHRoYW4gSFRNTE1lZGlhRWxlbWVudCdzIG1heFRp
bWV1cGRhdGVFdmVudEZyZXF1ZW5jeS4KLSAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyBwb3NpdGlv
bkNhY2hlVGhyZXNob2xkID0gMjAwX21zOwotICAgIFNlY29uZHMgbm93ID0gV1RGOjpXYWxsVGlt
ZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKTsKLSAgICBpZiAobV9sYXN0UXVlcnlUaW1lICYm
IChub3cgLSBtX2xhc3RRdWVyeVRpbWUudmFsdWUoKSkgPCBwb3NpdGlvbkNhY2hlVGhyZXNob2xk
ICYmIG1fY2FjaGVkUG9zaXRpb24uaXNWYWxpZCgpKSB7Ci0gICAgICAgIEdTVF9UUkFDRV9PQkpF
Q1QocGlwZWxpbmUoKSwgIlJldHVybmluZyBjYWNoZWQgcG9zaXRpb246ICVzIiwgbV9jYWNoZWRQ
b3NpdGlvbi50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gbV9jYWNo
ZWRQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBtX2xhc3RRdWVyeVRpbWUgPSBub3c7Ci0KLSAgICAv
LyBQb3NpdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiBubyBhc3luYyBzdGF0ZSBjaGFuZ2UgaXMg
Z29pbmcgb24gYW5kIHRoZSBzdGF0ZSBpcyBlaXRoZXIgcGF1c2VkIG9yIHBsYXlpbmcuCi0gICAg
Z2ludDY0IHBvc2l0aW9uID0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKLSAgICBHc3RRdWVyeSogcXVl
cnkgPSBnc3RfcXVlcnlfbmV3X3Bvc2l0aW9uKEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgaWYgKGdz
dF9lbGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCksIHF1ZXJ5KSkKLSAgICAgICAgZ3N0X3F1
ZXJ5X3BhcnNlX3Bvc2l0aW9uKHF1ZXJ5LCAwLCAmcG9zaXRpb24pOwotICAgIGdzdF9xdWVyeV91
bnJlZihxdWVyeSk7Ci0KLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJQb3NpdGlv
biAlIiBHU1RfVElNRV9GT1JNQVQgIiwgY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3Np
dGlvbjogJXMiLCBHU1RfVElNRV9BUkdTKHBvc2l0aW9uKSwgYm9vbEZvclByaW50aW5nKG1fY2Fu
RmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbikpOwotCi0gICAgTWVkaWFUaW1lIHBs
YXliYWNrUG9zaXRpb24gPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7Ci0gICAgR3N0Q2xvY2tUaW1l
IGdzdHJlYW1lclBvc2l0aW9uID0gc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPihwb3NpdGlvbik7
Ci0gICAgaWYgKEdTVF9DTE9DS19USU1FX0lTX1ZBTElEKGdzdHJlYW1lclBvc2l0aW9uKSkKLSAg
ICAgICAgcGxheWJhY2tQb3NpdGlvbiA9IE1lZGlhVGltZShnc3RyZWFtZXJQb3NpdGlvbiwgR1NU
X1NFQ09ORCk7Ci0gICAgZWxzZSBpZiAobV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bv
c2l0aW9uKQotICAgICAgICBwbGF5YmFja1Bvc2l0aW9uID0gbV9zZWVrVGltZTsKLQotICAgIG1f
Y2FjaGVkUG9zaXRpb24gPSBwbGF5YmFja1Bvc2l0aW9uOwotICAgIHJldHVybiBwbGF5YmFja1Bv
c2l0aW9uOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVhZHlUaW1l
ckZpcmVkKCkKLXsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJJbiBSRUFEWSBm
b3IgdG9vIGxvbmcuIFJlbGVhc2luZyBwaXBlbGluZSByZXNvdXJjZXMuIik7Ci0gICAgY2hhbmdl
UGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfTlVMTCk7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlIG5ld1N0YXRlKQotewot
ICAgIEFTU0VSVChtX3BpcGVsaW5lKTsKLQotICAgIEdzdFN0YXRlIGN1cnJlbnRTdGF0ZTsKLSAg
ICBHc3RTdGF0ZSBwZW5kaW5nOwotCi0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxp
bmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nLCAwKTsKLSAgICBpZiAoY3VycmVudFN0
YXRlID09IG5ld1N0YXRlIHx8IHBlbmRpbmcgPT0gbmV3U3RhdGUpIHsKLSAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiUmVqZWN0ZWQgc3RhdGUgY2hhbmdlIHRvICVzIGZyb20g
JXMgd2l0aCAlcyBwZW5kaW5nIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUp
LAotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoY3VycmVudFN0YXRlKSwg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDaGFuZ2luZyBz
dGF0ZSBjaGFuZ2UgdG8gJXMgZnJvbSAlcyB3aXRoICVzIHBlbmRpbmciLCBnc3RfZWxlbWVudF9z
dGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSksCi0gICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9u
YW1lKGN1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsK
LQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgaWYgKGN1cnJlbnRTdGF0ZSA8PSBHU1RfU1RB
VEVfUkVBRFkgJiYgbmV3U3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkKLSAgICAgICAgZW5zdXJl
R0xWaWRlb1NpbmtDb250ZXh0KCk7Ci0jZW5kaWYKLQotICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJu
IHNldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
IG5ld1N0YXRlKTsKLSAgICBHc3RTdGF0ZSBwYXVzZWRPclBsYXlpbmcgPSBuZXdTdGF0ZSA9PSBH
U1RfU1RBVEVfUExBWUlORyA/IEdTVF9TVEFURV9QQVVTRUQgOiBHU1RfU1RBVEVfUExBWUlORzsK
LSAgICBpZiAoY3VycmVudFN0YXRlICE9IHBhdXNlZE9yUGxheWluZyAmJiBzZXRTdGF0ZVJlc3Vs
dCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIENyZWF0ZSBhIHRpbWVyIHdoZW4gZW50ZXJpbmcgdGhlIFJFQURZIHN0YXRlIHNvIHRo
YXQgd2UgY2FuIGZyZWUgcmVzb3VyY2VzCi0gICAgLy8gaWYgd2Ugc3RheSBmb3IgdG9vIGxvbmcg
b24gUkVBRFkuCi0gICAgLy8gQWxzbyBsZXRzIHJlbW92ZSB0aGUgdGltZXIgaWYgd2UgcmVxdWVz
dCBhIHN0YXRlIGNoYW5nZSBmb3IgYW55IHN0YXRlIG90aGVyIHRoYW4gUkVBRFkuCi0gICAgLy8g
U2VlIGFsc28gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzM1NAot
ICAgIGlmIChuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkgJiYgIW1fcmVhZHlUaW1lckhhbmRs
ZXIuaXNBY3RpdmUoKSkgewotICAgICAgICAvLyBNYXggaW50ZXJ2YWwgaW4gc2Vjb25kcyB0byBz
dGF5IGluIHRoZSBSRUFEWSBzdGF0ZSBvbiBtYW51YWwKLSAgICAgICAgLy8gc3RhdGUgY2hhbmdl
IHJlcXVlc3RzLgotICAgICAgICBzdGF0aWMgY29uc3QgU2Vjb25kcyByZWFkeVN0YXRlVGltZXJE
ZWxheSB7IDFfbWluIH07Ci0gICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc3RhcnRPbmVTaG90
KHJlYWR5U3RhdGVUaW1lckRlbGF5KTsKLSAgICB9IGVsc2UgaWYgKG5ld1N0YXRlICE9IEdTVF9T
VEFURV9SRUFEWSkKLSAgICAgICAgbV9yZWFkeVRpbWVySGFuZGxlci5zdG9wKCk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgY2hhbmdlUGlwZWxpbmVT
dGF0ZShHU1RfU1RBVEVfUkVBRFkpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6cHJlcGFyZVRvUGxheSgpCkBAIC00NzgsNTQgKzY0NCw0OCBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UoKQogICAgICAgICBsb2FkaW5nRmFpbGVkKE1lZGlh
UGxheWVyOjpFbXB0eSk7CiB9CiAKLU1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnBsYXRmb3JtRHVyYXRpb24oKSBjb25zdAorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnBhdXNlZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BpcGVsaW5lKQotICAgICAgICBy
ZXR1cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOwotCi0gICAgR1NUX1RSQUNFX09CSkVDVChw
aXBlbGluZSgpLCAiZXJyb3JPY2N1cmVkOiAlcywgcGlwZWxpbmUgc3RhdGU6ICVzIiwgYm9vbEZv
clByaW50aW5nKG1fZXJyb3JPY2N1cmVkKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoR1NU
X1NUQVRFKG1fcGlwZWxpbmUuZ2V0KCkpKSk7Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVkKQotICAg
ICAgICByZXR1cm4gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIC8vIFRoZSBkdXJhdGlvbiBxdWVyeSB3b3VsZCBmYWlsIG9uIGEgbm90LXByZXJv
bGxlZCBwaXBlbGluZS4KLSAgICBpZiAoR1NUX1NUQVRFKG1fcGlwZWxpbmUuZ2V0KCkpIDwgR1NU
X1NUQVRFX1BBVVNFRCkKLSAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsK
KyAgICBpZiAobV9pc0VuZFJlYWNoZWQpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiSWdub3JpbmcgcGF1c2UgYXQgRU9TIik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAotICAgIGludDY0X3QgZHVyYXRpb24gPSAwOwotICAgIGlmICghZ3N0X2VsZW1lbnRf
cXVlcnlfZHVyYXRpb24obV9waXBlbGluZS5nZXQoKSwgR1NUX0ZPUk1BVF9USU1FLCAmZHVyYXRp
b24pIHx8ICFHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRChkdXJhdGlvbikpIHsKLSAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVGltZSBkdXJhdGlvbiBxdWVyeSBmYWlsZWQgZm9y
ICVzIiwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBNZWRp
YVRpbWU6OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7CisgICAgaWYgKG1fcGxheWJhY2tSYXRlUGF1
c2UpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUGxheWJhY2sgcmF0
ZSBpcyAwLCBzaW11bGF0aW5nIFBBVVNFRCBzdGF0ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIkR1cmF0aW9uOiAlIiBH
U1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MoZHVyYXRpb24pKTsKLSAgICByZXR1cm4gTWVk
aWFUaW1lKGR1cmF0aW9uLCBHU1RfU0VDT05EKTsKKyAgICBHc3RTdGF0ZSBzdGF0ZTsKKyAgICBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAw
KTsKKyAgICBib29sIHBhdXNlZCA9IHN0YXRlIDw9IEdTVF9TVEFURV9QQVVTRUQ7CisgICAgR1NU
X0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBhdXNlZDogJXMiLCB0b1N0cmluZyhwYXVzZWQpLnV0
ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBwYXVzZWQ7CiB9CiAKLU1lZGlhVGltZSBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3QKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkb1NlZWsoY29uc3QgTWVkaWFUaW1lJiBwb3NpdGlv
biwgZmxvYXQgcmF0ZSwgR3N0U2Vla0ZsYWdzIHNlZWtUeXBlKQogewotICAgIEdTVF9UUkFDRV9P
QkpFQ1QocGlwZWxpbmUoKSwgIkNhY2hlZCBkdXJhdGlvbjogJXMiLCBtX2NhY2hlZER1cmF0aW9u
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaWYgKG1fY2FjaGVkRHVyYXRpb24uaXNW
YWxpZCgpKQotICAgICAgICByZXR1cm4gbV9jYWNoZWREdXJhdGlvbjsKLQotICAgIE1lZGlhVGlt
ZSBkdXJhdGlvbiA9IHBsYXRmb3JtRHVyYXRpb24oKTsKLSAgICBpZiAoIWR1cmF0aW9uIHx8IGR1
cmF0aW9uLmlzSW52YWxpZCgpKQotICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgp
OwotCi0gICAgbV9jYWNoZWREdXJhdGlvbiA9IGR1cmF0aW9uOwotCi0gICAgcmV0dXJuIG1fY2Fj
aGVkRHVyYXRpb247Ci19CisgICAgLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIHJhdGUgPj0gMC4KKyAg
ICBNZWRpYVRpbWUgc3RhcnRUaW1lID0gcG9zaXRpb24sIGVuZFRpbWUgPSBNZWRpYVRpbWU6Omlu
dmFsaWRUaW1lKCk7CiAKLU1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmN1
cnJlbnRNZWRpYVRpbWUoKSBjb25zdAotewotICAgIGlmICghbV9waXBlbGluZSB8fCBtX2Vycm9y
T2NjdXJlZCkKLSAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICBp
ZiAocmF0ZSA8IDApIHsKKyAgICAgICAgc3RhcnRUaW1lID0gTWVkaWFUaW1lOjp6ZXJvVGltZSgp
OworICAgICAgICAvLyBJZiB3ZSBhcmUgYXQgYmVnaW5uaW5nIG9mIG1lZGlhLCBzdGFydCBmcm9t
IHRoZSBlbmQgdG8KKyAgICAgICAgLy8gYXZvaWQgaW1tZWRpYXRlIEVPUy4KKyAgICAgICAgaWYg
KHBvc2l0aW9uIDwgTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQorICAgICAgICAgICAgZW5kVGltZSA9
IGR1cmF0aW9uTWVkaWFUaW1lKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuZFRpbWUg
PSBwb3NpdGlvbjsKKyAgICB9CiAKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJz
ZWVraW5nOiAlcywgc2Vla1RpbWU6ICVzIiwgYm9vbEZvclByaW50aW5nKG1fc2Vla2luZyksIG1f
c2Vla1RpbWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAobV9zZWVraW5nKQot
ICAgICAgICByZXR1cm4gbV9zZWVrVGltZTsKKyAgICBpZiAoIXJhdGUpCisgICAgICAgIHJhdGUg
PSAxLjA7CiAKLSAgICByZXR1cm4gcGxheWJhY2tQb3NpdGlvbigpOworICAgIHJldHVybiBnc3Rf
ZWxlbWVudF9zZWVrKG1fcGlwZWxpbmUuZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRfVElNRSwgc2Vl
a1R5cGUsCisgICAgICAgIEdTVF9TRUVLX1RZUEVfU0VULCB0b0dzdENsb2NrVGltZShzdGFydFRp
bWUpLCBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoZW5kVGltZSkpOwogfQogCiB2
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayhjb25zdCBNZWRpYVRpbWUmIG1l
ZGlhVGltZSkKQEAgLTU4OCwyOCArNzQ4LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnNlZWsoY29uc3QgTWVkaWFUaW1lJiBtZWRpYVRpbWUpCiAgICAgbV9pc0VuZFJlYWNo
ZWQgPSBmYWxzZTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vl
ayhjb25zdCBNZWRpYVRpbWUmIHBvc2l0aW9uLCBmbG9hdCByYXRlLCBHc3RTZWVrRmxhZ3Mgc2Vl
a1R5cGUpCi17Ci0gICAgLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIHJhdGUgPj0gMC4KLSAgICBNZWRp
YVRpbWUgc3RhcnRUaW1lID0gcG9zaXRpb24sIGVuZFRpbWUgPSBNZWRpYVRpbWU6OmludmFsaWRU
aW1lKCk7Ci0KLSAgICBpZiAocmF0ZSA8IDApIHsKLSAgICAgICAgc3RhcnRUaW1lID0gTWVkaWFU
aW1lOjp6ZXJvVGltZSgpOwotICAgICAgICAvLyBJZiB3ZSBhcmUgYXQgYmVnaW5uaW5nIG9mIG1l
ZGlhLCBzdGFydCBmcm9tIHRoZSBlbmQgdG8KLSAgICAgICAgLy8gYXZvaWQgaW1tZWRpYXRlIEVP
Uy4KLSAgICAgICAgaWYgKHBvc2l0aW9uIDwgTWVkaWFUaW1lOjp6ZXJvVGltZSgpKQotICAgICAg
ICAgICAgZW5kVGltZSA9IGR1cmF0aW9uTWVkaWFUaW1lKCk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGVuZFRpbWUgPSBwb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBpZiAoIXJhdGUpCi0gICAg
ICAgIHJhdGUgPSAxLjA7Ci0KLSAgICByZXR1cm4gZ3N0X2VsZW1lbnRfc2VlayhtX3BpcGVsaW5l
LmdldCgpLCByYXRlLCBHU1RfRk9STUFUX1RJTUUsIHNlZWtUeXBlLAotICAgICAgICBHU1RfU0VF
S19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoc3RhcnRUaW1lKSwgR1NUX1NFRUtfVFlQRV9TRVQs
IHRvR3N0Q2xvY2tUaW1lKGVuZFRpbWUpKTsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCiB7CiAgICAgaWYgKCFtX2NoYW5naW5nUmF0
ZSkKQEAgLTY0NCw1ODAgKzc4MiwxNDA4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjp1cGRhdGVQbGF5YmFja1JhdGUoKQogICAgIG1fcGxheWVyLT5yYXRlQ2hhbmdlZCgpOwog
fQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkKCkgY29uc3QKK01l
ZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXRmb3JtRHVyYXRpb24oKSBj
b25zdAogewogICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAKLSAgICBpZiAobV9pc0VuZFJl
YWNoZWQpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiSWdub3Jpbmcg
cGF1c2UgYXQgRU9TIik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBHU1RfVFJB
Q0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBwaXBlbGluZSBzdGF0ZTog
JXMiLCBib29sRm9yUHJpbnRpbmcobV9lcnJvck9jY3VyZWQpLCBnc3RfZWxlbWVudF9zdGF0ZV9n
ZXRfbmFtZShHU1RfU1RBVEUobV9waXBlbGluZS5nZXQoKSkpKTsKKyAgICBpZiAobV9lcnJvck9j
Y3VyZWQpCisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAKLSAgICBp
ZiAobV9wbGF5YmFja1JhdGVQYXVzZSkgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJQbGF5YmFjayByYXRlIGlzIDAsIHNpbXVsYXRpbmcgUEFVU0VEIHN0YXRlIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBUaGUgZHVyYXRpb24gcXVlcnkgd291bGQgZmFp
bCBvbiBhIG5vdC1wcmVyb2xsZWQgcGlwZWxpbmUuCisgICAgaWYgKEdTVF9TVEFURShtX3BpcGVs
aW5lLmdldCgpKSA8IEdTVF9TVEFURV9QQVVTRUQpCisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6
OmludmFsaWRUaW1lKCk7CisKKyAgICBpbnQ2NF90IGR1cmF0aW9uID0gMDsKKyAgICBpZiAoIWdz
dF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9GT1JNQVRfVElN
RSwgJmR1cmF0aW9uKSB8fCAhR1NUX0NMT0NLX1RJTUVfSVNfVkFMSUQoZHVyYXRpb24pKSB7Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRpbWUgZHVyYXRpb24gcXVlcnkg
ZmFpbGVkIGZvciAlcyIsIG1fdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gTWVkaWFUaW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpOwogICAgIH0KIAotICAgIEdz
dFN0YXRlIHN0YXRlOwotICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgp
LCAmc3RhdGUsIG51bGxwdHIsIDApOwotICAgIGJvb2wgcGF1c2VkID0gc3RhdGUgPD0gR1NUX1NU
QVRFX1BBVVNFRDsKLSAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiUGF1c2VkOiAlcyIs
IHRvU3RyaW5nKHBhdXNlZCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHBhdXNlZDsKKyAg
ICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiRHVyYXRpb246ICUiIEdTVF9USU1FX0ZPUk1B
VCwgR1NUX1RJTUVfQVJHUyhkdXJhdGlvbikpOworICAgIHJldHVybiBNZWRpYVRpbWUoZHVyYXRp
b24sIEdTVF9TRUNPTkQpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
c2Vla2luZygpIGNvbnN0CitNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpk
dXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc2Vla2luZzsKLX0KKyAg
ICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJDYWNoZWQgZHVyYXRpb246ICVzIiwgbV9j
YWNoZWREdXJhdGlvbi50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChtX2NhY2hl
ZER1cmF0aW9uLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVkRHVyYXRpb247CiAK
LSNkZWZpbmUgQ0xFQVJfVFJBQ0tTKHRyYWNrcywgbWV0aG9kKSBcCi0gICAgZm9yIChhdXRvJiB0
cmFjayA6IHRyYWNrcy52YWx1ZXMoKSlcCi0gICAgICAgIG1ldGhvZCgqdHJhY2spO1wKLSAgICB0
cmFja3MuY2xlYXIoKTsKKyAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBwbGF0Zm9ybUR1cmF0aW9u
KCk7CisgICAgaWYgKCFkdXJhdGlvbiB8fCBkdXJhdGlvbi5pc0ludmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNsZWFyVHJhY2tzKCkKLXsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAg
Q0xFQVJfVFJBQ0tTKG1fYXVkaW9UcmFja3MsIG1fcGxheWVyLT5yZW1vdmVBdWRpb1RyYWNrKTsK
LSAgICBDTEVBUl9UUkFDS1MobV92aWRlb1RyYWNrcywgbV9wbGF5ZXItPnJlbW92ZVZpZGVvVHJh
Y2spOwotICAgIENMRUFSX1RSQUNLUyhtX3RleHRUcmFja3MsIG1fcGxheWVyLT5yZW1vdmVUZXh0
VHJhY2spOwotI2VuZGlmIC8vIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBtX2NhY2hlZER1cmF0
aW9uID0gZHVyYXRpb247CisKKyAgICByZXR1cm4gbV9jYWNoZWREdXJhdGlvbjsKIH0KLSN1bmRl
ZiBDTEVBUl9UUkFDS1MKIAotRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bmF0dXJhbFNpemUoKSBjb25zdAorTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0CiB7Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
LSAgICBpZiAoIW1faXNMZWdhY3lQbGF5YmluICYmICFtX2N1cnJlbnRWaWRlb1N0cmVhbUlkLmlz
RW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IHZp
ZGVvVHJhY2sgPSBtX3ZpZGVvVHJhY2tzLmdldChtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKLQot
ICAgICAgICBpZiAodmlkZW9UcmFjaykgewotICAgICAgICAgICAgYXV0byB0YWdzID0gYWRvcHRH
UmVmKGdzdF9zdHJlYW1fZ2V0X3RhZ3ModmlkZW9UcmFjay0+c3RyZWFtKCkpKTsKLSAgICAgICAg
ICAgIGdpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBpZiAoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9j
Y3VyZWQpCisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CiAKLSAgICAg
ICAgICAgIGlmICh0YWdzICYmIGdzdF90YWdfbGlzdF9nZXRfaW50KHRhZ3MuZ2V0KCksIFdFQktJ
VF9NRURJQV9UUkFDS19UQUdfV0lEVEgsICZ3aWR0aCkgJiYgZ3N0X3RhZ19saXN0X2dldF9pbnQo
dGFncy5nZXQoKSwgV0VCS0lUX01FRElBX1RSQUNLX1RBR19IRUlHSFQsICZoZWlnaHQpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBGbG9hdFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBHU1RfVFJBQ0VfT0JK
RUNUKHBpcGVsaW5lKCksICJzZWVraW5nOiAlcywgc2Vla1RpbWU6ICVzIiwgYm9vbEZvclByaW50
aW5nKG1fc2Vla2luZyksIG1fc2Vla1RpbWUudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBpZiAobV9zZWVraW5nKQorICAgICAgICByZXR1cm4gbV9zZWVrVGltZTsKIAotICAgIHJldHVy
biBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuYXR1cmFsU2l6ZSgpOworICAgIHJl
dHVybiBwbGF5YmFja1Bvc2l0aW9uKCk7CiB9CiAKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0j
ZGVmaW5lIENSRUFURV9UUkFDSyh0eXBlLCBUeXBlKSBHX1NUTVRfU1RBUlQgeyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIG1faGFzIyNUeXBlID0gdHJ1ZTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghdXNlTWVkaWFT
b3VyY2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgICBSZWZQdHI8VHlwZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IFR5cGUj
I1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRyKCp0aGlzKSwgaSwgc3Ry
ZWFtKTsgXAotICAgICAgICAgICAgbV8jI3R5cGUjI1RyYWNrcy5hZGQodHJhY2stPmlkKCksIHRy
YWNrKTsgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgbV9wbGF5ZXItPmFkZCMjVHlw
ZSMjVHJhY2soKnRyYWNrKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg
aWYgKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9mbGFncyhzdHJlYW0uZ2V0KCkpICYgR1NUX1NUUkVB
TV9GTEFHX1NFTEVDVCkgXAotICAgICAgICAgICAgICAgIG1fY3VycmVudCMjVHlwZSMjU3RyZWFt
SWQgPSBTdHJpbmcoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lkKHN0cmVhbS5nZXQoKSkpOyBcCi0g
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgfSBHX1NUTVRfRU5ECi0jZWxzZQotI2RlZmluZSBDUkVBVEVf
VFJBQ0sodHlwZSwgVHlwZSkgR19TVE1UX1NUQVJUIHsgXAotICAgICAgICBtX2hhcyMjVHlwZSMj
ID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgXAotICAgIH0gR19TVE1UX0VORAotI2VuZGlmIC8v
IEVOQUJMRShWSURFT19UUkFDSykKLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnVwZGF0ZVRyYWNrcygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0
ZShmbG9hdCByYXRlKQogewotICAgIEFTU0VSVCghbV9pc0xlZ2FjeVBsYXliaW4pOworICAgIC8v
IEhpZ2hlciByYXRlIGNhdXNlcyBjcmFzaC4KKyAgICByYXRlID0gY2xhbXBUbyhyYXRlLCAtMjAu
MCwgMjAuMCk7CiAKLSAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOwot
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZShtX3N0
cmVhbUNvbGxlY3Rpb24uZ2V0KCkpOwotCi0gICAgYm9vbCBvbGRIYXNBdWRpbyA9IG1faGFzQXVk
aW87Ci0gICAgYm9vbCBvbGRIYXNWaWRlbyA9IG1faGFzVmlkZW87Ci0gICAgLy8gTmV3IHN0cmVh
bSBjb2xsZWN0aW9ucyBvdmVycmlkZSBwcmV2aW91cyBvbmVzLgotICAgIGNsZWFyVHJhY2tzKCk7
Ci0gICAgdW5zaWduZWQgdGV4dFRyYWNrSW5kZXggPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4gc3RyZWFt
ID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0obV9zdHJlYW1Db2xsZWN0aW9uLmdl
dCgpLCBpKTsKLSAgICAgICAgU3RyaW5nIHN0cmVhbUlkKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9p
ZChzdHJlYW0uZ2V0KCkpKTsKLSAgICAgICAgR3N0U3RyZWFtVHlwZSB0eXBlID0gZ3N0X3N0cmVh
bV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtLmdldCgpKTsKLQotICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJJbnNwZWN0aW5nICVzIHRyYWNrIHdpdGggSUQgJXMiLCBnc3Rfc3Ry
ZWFtX3R5cGVfZ2V0X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAg
ICBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9BVURJTykKLSAgICAgICAgICAgIENSRUFURV9U
UkFDSyhhdWRpbywgQXVkaW8pOwotICAgICAgICBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9U
WVBFX1ZJREVPKQotICAgICAgICAgICAgQ1JFQVRFX1RSQUNLKHZpZGVvLCBWaWRlbyk7Ci0gICAg
ICAgIGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfVEVYVCAmJiAhdXNlTWVkaWFTb3Vy
Y2UpIHsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgICAgICAgICBhdXRvIHRyYWNrID0g
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKHRleHRUcmFja0luZGV4Kyss
IHN0cmVhbSk7Ci0gICAgICAgICAgICBtX3RleHRUcmFja3MuYWRkKHN0cmVhbUlkLCB0cmFjay5j
b3B5UmVmKCkpOwotICAgICAgICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjayh0cmFjay5nZXQo
KSk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBHU1RfV0FSTklORygiVW5r
bm93biB0cmFjayB0eXBlIGZvdW5kIGZvciBzdHJlYW0gJXMiLCBzdHJlYW1JZC51dGY4KCkuZGF0
YSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoKG9sZEhhc1ZpZGVvICE9IG1faGFzVmlkZW8pIHx8IChv
bGRIYXNBdWRpbyAhPSBtX2hhc0F1ZGlvKSkKLSAgICAgICAgbV9wbGF5ZXItPmNoYXJhY3Rlcmlz
dGljQ2hhbmdlZCgpOwotCi0gICAgaWYgKG1faGFzVmlkZW8pCi0gICAgICAgIG1fcGxheWVyLT5z
aXplQ2hhbmdlZCgpOwotCi0gICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5l
VXBkYXRlZChtX3BsYXllcik7Ci19Ci0KLSN1bmRlZiBDUkVBVEVfVFJBQ0sKKyAgICAvLyBBdm9p
ZCB1c2VsZXNzIHBsYXliYWNrIHJhdGUgdXBkYXRlLgorICAgIGlmIChtX3BsYXliYWNrUmF0ZSA9
PSByYXRlKSB7CisgICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgdGhhdCB1cHBlciBsYXllcnMgd2Vy
ZSBub3RpZmllZCBpZiByYXRlIHdhcyBzZXQKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmVuYWJsZVRyYWNrKFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZSB0
cmFja1R5cGUsIHVuc2lnbmVkIGluZGV4KQotewotICAgIC8vIEZJWE1FOiBSZW1vdmUgaXNNZWRp
YVNvdXJjZSgpIHRlc3QgYmVsb3cgd2hlbiBmaXhpbmcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4MjUzMS4KLSAgICBpZiAoaXNNZWRpYVNvdXJjZSgpKSB7Ci0gICAg
ICAgIEdTVF9GSVhNRV9PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkF1ZGlvL1ZpZGVvL1RleHQg
dHJhY2sgc3dpdGNoaW5nIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IHRoZSBNU0UgYmFja2VuZC4i
KTsKKyAgICAgICAgaWYgKCFtX2NoYW5naW5nUmF0ZSAmJiBtX3BsYXllci0+cmF0ZSgpICE9IG1f
cGxheWJhY2tSYXRlKQorICAgICAgICAgICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWU7Ci0gICAg
Y29uc3QgY2hhciogdHJhY2tUeXBlQXNTdHJpbmc7Ci0gICAgVmVjdG9yPFN0cmluZz4gc2VsZWN0
ZWRTdHJlYW1zOwotICAgIFN0cmluZyBzZWxlY3RlZFN0cmVhbUlkOwotCi0gICAgR3N0U3RyZWFt
KiBzdHJlYW0gPSBudWxscHRyOwotCi0gICAgaWYgKCFtX2lzTGVnYWN5UGxheWJpbikgewotICAg
ICAgICBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbShtX3N0cmVhbUNv
bGxlY3Rpb24uZ2V0KCksIGluZGV4KTsKLSAgICAgICAgaWYgKCFzdHJlYW0pIHsKLSAgICAgICAg
ICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAiTm8gc3RyZWFtIHRvIHNlbGVjdCBh
dCBpbmRleCAldSIsIGluZGV4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBzZWxlY3RlZFN0cmVhbUlkID0gU3RyaW5nOjpmcm9tVVRGOChnc3Rfc3RyZWFtX2dldF9z
dHJlYW1faWQoc3RyZWFtKSk7Ci0gICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQoc2VsZWN0
ZWRTdHJlYW1JZCk7CisgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKSB7CisgICAgICAgIC8vIG5vdGlm
eSB1cHBlciBsYXllcnMgdGhhdCB3ZSBjYW5ub3QgaGFuZGxlIHBhc3NlZCByYXRlLgorICAgICAg
ICBtX2NoYW5naW5nUmF0ZSA9IGZhbHNlOworICAgICAgICBtX3BsYXllci0+cmF0ZUNoYW5nZWQo
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN3aXRjaCAodHJhY2tUeXBlKSB7Ci0g
ICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OkF1ZGlvOgotICAg
ICAgICBwcm9wZXJ0eU5hbWUgPSAiY3VycmVudC1hdWRpbyI7Ci0gICAgICAgIHRyYWNrVHlwZUFz
U3RyaW5nID0gImF1ZGlvIjsKLSAgICAgICAgaWYgKCFzZWxlY3RlZFN0cmVhbUlkLmlzRW1wdHko
KSAmJiBzZWxlY3RlZFN0cmVhbUlkID09IG1fY3VycmVudEF1ZGlvU3RyZWFtSWQpIHsKLSAgICAg
ICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiJXMgc3RyZWFtOiAlcyBhbHJlYWR5
IHNlbGVjdGVkLCBub3QgZG9pbmcgYW55dGhpbmcuIiwgdHJhY2tUeXBlQXNTdHJpbmcsIHNlbGVj
dGVkU3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICBHc3RTdGF0ZSBzdGF0ZTsKKyAgICBHc3RTdGF0ZSBwZW5kaW5nOwogCi0gICAgICAg
IGlmICghbV9jdXJyZW50VGV4dFN0cmVhbUlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNlbGVj
dGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50VGV4dFN0cmVhbUlkKTsKLSAgICAgICAgaWYgKCFt
X2N1cnJlbnRWaWRlb1N0cmVhbUlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNlbGVjdGVkU3Ry
ZWFtcy5hcHBlbmQobV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6VHJhY2tUeXBlOjpWaWRlbzoKLSAgICAg
ICAgcHJvcGVydHlOYW1lID0gImN1cnJlbnQtdmlkZW8iOwotICAgICAgICB0cmFja1R5cGVBc1N0
cmluZyA9ICJ2aWRlbyI7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkg
JiYgc2VsZWN0ZWRTdHJlYW1JZCA9PSBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkKSB7Ci0gICAgICAg
ICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMgYWxyZWFkeSBz
ZWxlY3RlZCwgbm90IGRvaW5nIGFueXRoaW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5nLCBzZWxlY3Rl
ZFN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CisgICAgbV9wbGF5YmFja1JhdGUgPSByYXRlOworICAgIG1fY2hhbmdpbmdSYXRlID0gdHJ1ZTsK
IAotICAgICAgICBpZiAoIW1fY3VycmVudEF1ZGlvU3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKTsKLSAg
ICAgICAgaWYgKCFtX2N1cnJlbnRUZXh0U3RyZWFtSWQuaXNFbXB0eSgpKQotICAgICAgICAgICAg
c2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRUZXh0U3RyZWFtSWQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6VGV4
dDoKLSAgICAgICAgcHJvcGVydHlOYW1lID0gImN1cnJlbnQtdGV4dCI7Ci0gICAgICAgIHRyYWNr
VHlwZUFzU3RyaW5nID0gInRleHQiOwotICAgICAgICBpZiAoIXNlbGVjdGVkU3RyZWFtSWQuaXNF
bXB0eSgpICYmIHNlbGVjdGVkU3RyZWFtSWQgPT0gbV9jdXJyZW50VGV4dFN0cmVhbUlkKSB7Ci0g
ICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIiVzIHN0cmVhbTogJXMgYWxy
ZWFkeSBzZWxlY3RlZCwgbm90IGRvaW5nIGFueXRoaW5nLiIsIHRyYWNrVHlwZUFzU3RyaW5nLCBz
ZWxlY3RlZFN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9CisgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0
ZSwgJnBlbmRpbmcsIDApOwogCi0gICAgICAgIGlmICghbV9jdXJyZW50QXVkaW9TdHJlYW1JZC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBwZW5kKG1fY3VycmVudEF1
ZGlvU3RyZWFtSWQpOwotICAgICAgICBpZiAoIW1fY3VycmVudFZpZGVvU3RyZWFtSWQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZChtX2N1cnJlbnRWaWRlb1N0
cmVhbUlkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUcmFja1ByaXZhdGVCYXNlR1N0cmVh
bWVyOjpUcmFja1R5cGU6OlVua25vd246Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgaWYgKCFyYXRlKSB7CisgICAgICAgIG1fY2hhbmdpbmdSYXRlID0g
ZmFsc2U7CisgICAgICAgIG1fcGxheWJhY2tSYXRlUGF1c2UgPSB0cnVlOworICAgICAgICBpZiAo
c3RhdGUgIT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBwZW5kaW5nICE9IEdTVF9TVEFURV9QQVVTRUQp
CisgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJF
bmFibGluZyAlcyB0cmFjayB3aXRoIGluZGV4OiAldSIsIHRyYWNrVHlwZUFzU3RyaW5nLCBpbmRl
eCk7Ci0gICAgaWYgKG1faXNMZWdhY3lQbGF5YmluKQotICAgICAgICBnX29iamVjdF9zZXQobV9w
aXBlbGluZS5nZXQoKSwgcHJvcGVydHlOYW1lLCBpbmRleCwgbnVsbHB0cik7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIEdMaXN0KiBzZWxlY3RlZFN0cmVhbXNMaXN0ID0gbnVsbHB0cjsKKyAgICBpZiAo
KHN0YXRlICE9IEdTVF9TVEFURV9QTEFZSU5HICYmIHN0YXRlICE9IEdTVF9TVEFURV9QQVVTRUQp
CisgICAgICAgIHx8IChwZW5kaW5nID09IEdTVF9TVEFURV9QQVVTRUQpKQorICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdHJlYW1JZCA6IHNlbGVjdGVkU3RyZWFt
cykKLSAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtc0xpc3QgPSBnX2xpc3RfYXBwZW5kKHNlbGVj
dGVkU3RyZWFtc0xpc3QsIGdfc3RyZHVwKHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICB1
cGRhdGVQbGF5YmFja1JhdGUoKTsKK30KIAotICAgICAgICAvLyBUT0RPOiBNU0UgR3N0U3RyZWFt
IEFQSSBzdXBwb3J0OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgy
NTMxCi0gICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQobV9waXBlbGluZS5nZXQoKSwgZ3N0
X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtcyhzZWxlY3RlZFN0cmVhbXNMaXN0KSk7Ci0gICAgICAg
IGdfbGlzdF9mcmVlX2Z1bGwoc2VsZWN0ZWRTdHJlYW1zTGlzdCwgcmVpbnRlcnByZXRfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZ19mcmVlKSk7Ci0gICAgfQorZG91YmxlIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6cmF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGxheWJhY2tSYXRlOwog
fQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DaGFuZ2VkQ2FsbGJh
Y2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlc2VydmVzUGl0Y2goYm9vbCBwcmVzZXJ2ZXNQaXRjaCkK
IHsKLSAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9u
OjpWaWRlb0NoYW5nZWQsIFtwbGF5ZXJdIHsKLSAgICAgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJP
ZlZpZGVvKCk7Ci0gICAgfSk7CisgICAgbV9wcmVzZXJ2ZXNQaXRjaCA9IHByZXNlcnZlc1BpdGNo
OwogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZW
aWRlbygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UHJlbG9hZChNZWRp
YVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkKQogewotICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGlu
ZSB8fCAhbV9zb3VyY2UpKQorICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRp
bmcgcHJlbG9hZCB0byAlcyIsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKHByZWxvYWQpLnV0
ZjgoKS5kYXRhKCkpOworICAgIGlmIChwcmVsb2FkID09IE1lZGlhUGxheWVyOjpBdXRvICYmIGlz
TGl2ZVN0cmVhbSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9pc0xlZ2FjeVBs
YXliaW4gfHwgaXNNZWRpYVNvdXJjZSgpKTsKLQotICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKLSAg
ICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOwotICAgIEdzdEVsZW1lbnQq
IGVsZW1lbnQgPSB1c2VNZWRpYVNvdXJjZSA/IG1fc291cmNlLmdldCgpIDogbV9waXBlbGluZS5n
ZXQoKTsKLSAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgIm4tdmlkZW8iLCAmbnVtVHJhY2tzLCBu
dWxscHRyKTsKKyAgICBtX3ByZWxvYWQgPSBwcmVsb2FkOworICAgIHVwZGF0ZURvd25sb2FkQnVm
ZmVyaW5nRmxhZygpOwogCi0gICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJNZWRpYSBo
YXMgJWQgdmlkZW8gdHJhY2tzIiwgbnVtVHJhY2tzKTsKKyAgICBpZiAobV9kZWxheWluZ0xvYWQg
JiYgbV9wcmVsb2FkICE9IE1lZGlhUGxheWVyOjpOb25lKSB7CisgICAgICAgIG1fZGVsYXlpbmdM
b2FkID0gZmFsc2U7CisgICAgICAgIGNvbW1pdExvYWQoKTsKKyAgICB9Cit9CiAKLSAgICBib29s
IG9sZEhhc1ZpZGVvID0gbV9oYXNWaWRlbzsKLSAgICBtX2hhc1ZpZGVvID0gbnVtVHJhY2tzID4g
MDsKLSAgICBpZiAob2xkSGFzVmlkZW8gIT0gbV9oYXNWaWRlbykKLSAgICAgICAgbV9wbGF5ZXIt
PmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpOworc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJh
bmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpidWZmZXJlZCgpIGNvbnN0Cit7Cisg
ICAgYXV0byB0aW1lUmFuZ2VzID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybVRpbWVSYW5nZXM+KCk7Cisg
ICAgaWYgKG1fZXJyb3JPY2N1cmVkIHx8IGlzTGl2ZVN0cmVhbSgpKQorICAgICAgICByZXR1cm4g
dGltZVJhbmdlczsKIAotICAgIGlmIChtX2hhc1ZpZGVvKQotICAgICAgICBtX3BsYXllci0+c2l6
ZUNoYW5nZWQoKTsKKyAgICBNZWRpYVRpbWUgbWVkaWFEdXJhdGlvbiA9IGR1cmF0aW9uTWVkaWFU
aW1lKCk7CisgICAgaWYgKCFtZWRpYUR1cmF0aW9uIHx8IG1lZGlhRHVyYXRpb24uaXNQb3NpdGl2
ZUluZmluaXRlKCkpCisgICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOwogCi0gICAgaWYgKHVzZU1l
ZGlhU291cmNlKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRyYWNr
cyBtYW5hZ2VkIGJ5IHNvdXJjZSBlbGVtZW50LiBCYWlsaW5nIG91dCBub3cuIik7Ci0gICAgICAg
IG1fcGxheWVyLT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEdSZWZQdHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRv
cHRHUmVmKGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nKEdTVF9GT1JNQVRfUEVSQ0VOVCkpOwogCi0j
aWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgIFZlY3RvcjxTdHJpbmc+IHZhbGlkVmlkZW9TdHJl
YW1zOwotICAgIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytpKSB7Ci0gICAgICAg
IEdSZWZQdHI8R3N0UGFkPiBwYWQ7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3Bp
cGVsaW5lLmdldCgpLCAiZ2V0LXZpZGVvLXBhZCIsIGksICZwYWQub3V0UHRyKCksIG51bGxwdHIp
OwotICAgICAgICBBU1NFUlQocGFkKTsKKyAgICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5KG1fcGlw
ZWxpbmUuZ2V0KCksIHF1ZXJ5LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXM7CiAK
LSAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIlYiICsgU3RyaW5nOjpudW1iZXIoaSk7Ci0gICAg
ICAgIHZhbGlkVmlkZW9TdHJlYW1zLmFwcGVuZChzdHJlYW1JZCk7Ci0gICAgICAgIGlmIChpIDwg
c3RhdGljX2Nhc3Q8Z2ludD4obV92aWRlb1RyYWNrcy5zaXplKCkpKSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX3ZpZGVv
VHJhY2tzLmdldChzdHJlYW1JZCk7Ci0gICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjaykgewot
ICAgICAgICAgICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOwotICAgICAgICAgICAg
ICAgIGlmIChleGlzdGluZ1RyYWNrLT5wYWQoKSA9PSBwYWQpCi0gICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgfQorICAgIGd1aW50IG51bUJ1ZmZlcmluZ1JhbmdlcyA9
IGdzdF9xdWVyeV9nZXRfbl9idWZmZXJpbmdfcmFuZ2VzKHF1ZXJ5LmdldCgpKTsKKyAgICBmb3Ig
KGd1aW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1CdWZmZXJpbmdSYW5nZXM7IGluZGV4KyspIHsK
KyAgICAgICAgZ2ludDY0IHJhbmdlU3RhcnQgPSAwLCByYW5nZVN0b3AgPSAwOworICAgICAgICBp
ZiAoZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UocXVlcnkuZ2V0KCksIGluZGV4
LCAmcmFuZ2VTdGFydCwgJnJhbmdlU3RvcCkpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHN0YXJ0
VGltZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQodG9Hc3RVbnNpZ25lZDY0VGlt
ZShtZWRpYUR1cmF0aW9uKSwgcmFuZ2VTdGFydCwgR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCk7Cisg
ICAgICAgICAgICB1aW50NjRfdCBzdG9wVGltZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRf
cm91bmQodG9Hc3RVbnNpZ25lZDY0VGltZShtZWRpYUR1cmF0aW9uKSwgcmFuZ2VTdG9wLCBHU1Rf
Rk9STUFUX1BFUkNFTlRfTUFYKTsKKyAgICAgICAgICAgIHRpbWVSYW5nZXMtPmFkZChNZWRpYVRp
bWUoc3RhcnRUaW1lLCBHU1RfU0VDT05EKSwgTWVkaWFUaW1lKHN0b3BUaW1lLCBHU1RfU0VDT05E
KSk7CiAgICAgICAgIH0KLQotICAgICAgICBhdXRvIHRyYWNrID0gVmlkZW9UcmFja1ByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZShtYWtlV2Vha1B0cigqdGhpcyksIGksIHBhZCk7Ci0gICAgICAgIEFT
U0VSVChzdHJlYW1JZCA9PSB0cmFjay0+aWQoKSk7Ci0gICAgICAgIG1fdmlkZW9UcmFja3MuYWRk
KHN0cmVhbUlkLCB0cmFjay5jb3B5UmVmKCkpOwotICAgICAgICBtX3BsYXllci0+YWRkVmlkZW9U
cmFjayh0cmFjay5nZXQoKSk7CiAgICAgfQogCi0gICAgcHVyZ2VJbnZhbGlkVmlkZW9UcmFja3Mo
dmFsaWRWaWRlb1N0cmVhbXMpOwotI2VuZGlmCisgICAgLy8gRmFsbGJhY2sgdG8gdGhlIG1vcmUg
Z2VuZXJhbCBtYXhUaW1lTG9hZGVkKCkgaWYgbm8gcmFuZ2UgaGFzCisgICAgLy8gYmVlbiBmb3Vu
ZC4KKyAgICBpZiAoIXRpbWVSYW5nZXMtPmxlbmd0aCgpKSB7CisgICAgICAgIE1lZGlhVGltZSBs
b2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CisgICAgICAgIGlmIChsb2FkZWQuaXNWYWxpZCgpICYm
IGxvYWRlZCkKKyAgICAgICAgICAgIHRpbWVSYW5nZXMtPmFkZChNZWRpYVRpbWU6Onplcm9UaW1l
KCksIGxvYWRlZCk7CisgICAgfQogCi0gICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVy
RW5naW5lVXBkYXRlZChtX3BsYXllcik7CisgICAgcmV0dXJuIHRpbWVSYW5nZXM7CiB9CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxi
YWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQorTWVkaWFUaW1lIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdAogewot
ICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlZp
ZGVvQ2Fwc0NoYW5nZWQsIFtwbGF5ZXJdIHsKLSAgICAgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJP
ZlZpZGVvQ2FwcygpOwotICAgIH0pOwotfQorICAgIEdTVF9UUkFDRV9PQkpFQ1QocGlwZWxpbmUo
KSwgImVycm9yT2NjdXJlZDogJXMsIGlzTGl2ZVN0cmVhbTogJXMiLCBib29sRm9yUHJpbnRpbmco
bV9lcnJvck9jY3VyZWQpLCBib29sRm9yUHJpbnRpbmcoaXNMaXZlU3RyZWFtKCkpKTsKKyAgICBp
ZiAobV9lcnJvck9jY3VyZWQpCisgICAgICAgIHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7
CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVv
Q2FwcygpCi17Ci0gICAgbV92aWRlb1NpemUgPSBJbnRTaXplKCk7Ci0gICAgbV9wbGF5ZXItPmNs
aWVudCgpLm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7Ci19CisgICAgaWYgKGlz
TGl2ZVN0cmVhbSgpKQorICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9DaGFuZ2VkQ2FsbGJhY2soTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAgcGxheWVyLT5tX25vdGlm
aWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6QXVkaW9DaGFuZ2VkLCBbcGxheWVy
XSB7Ci0gICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZBdWRpbygpOwotICAgIH0pOworICAg
IE1lZGlhVGltZSBkdXJhdGlvbiA9IGR1cmF0aW9uTWVkaWFUaW1lKCk7CisgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAibWF4TWVkaWFUaW1lU2Vla2FibGUsIGR1cmF0aW9uOiAlcyIs
IHRvU3RyaW5nKGR1cmF0aW9uKS51dGY4KCkuZGF0YSgpKTsKKyAgICAvLyBpbmZpbml0ZSBkdXJh
dGlvbiBtZWFucyBsaXZlIHN0cmVhbQorICAgIGlmIChkdXJhdGlvbi5pc1Bvc2l0aXZlSW5maW5p
dGUoKSkKKyAgICAgICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKKworICAgIHJldHVy
biBkdXJhdGlvbjsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlm
eVBsYXllck9mQXVkaW8oKQorTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bWF4VGltZUxvYWRlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8
ICFtX3NvdXJjZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2lzTGVnYWN5UGxh
eWJpbiB8fCBpc01lZGlhU291cmNlKCkpOworICAgIGlmIChtX2Vycm9yT2NjdXJlZCkKKyAgICAg
ICAgcmV0dXJuIE1lZGlhVGltZTo6emVyb1RpbWUoKTsKIAotICAgIGdpbnQgbnVtVHJhY2tzID0g
MDsKLSAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOwotICAgIEdzdEVs
ZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRpYVNvdXJjZSA/IG1fc291cmNlLmdldCgpIDogbV9waXBl
bGluZS5nZXQoKTsKLSAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgIm4tYXVkaW8iLCAmbnVtVHJh
Y2tzLCBudWxscHRyKTsKLQotICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiTWVkaWEg
aGFzICVkIGF1ZGlvIHRyYWNrcyIsIG51bVRyYWNrcyk7Ci0gICAgYm9vbCBvbGRIYXNBdWRpbyA9
IG1faGFzQXVkaW87Ci0gICAgbV9oYXNBdWRpbyA9IG51bVRyYWNrcyA+IDA7Ci0gICAgaWYgKG9s
ZEhhc0F1ZGlvICE9IG1faGFzQXVkaW8pCi0gICAgICAgIG1fcGxheWVyLT5jaGFyYWN0ZXJpc3Rp
Y0NoYW5nZWQoKTsKLQotICAgIGlmICh1c2VNZWRpYVNvdXJjZSkgewotICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJUcmFja3MgbWFuYWdlZCBieSBzb3VyY2UgZWxlbWVudC4g
QmFpbGluZyBvdXQgbm93LiIpOwotICAgICAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5
ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZEF1ZGlvU3RyZWFt
czsKLSAgICBmb3IgKGdpbnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgewotICAgICAgICBH
UmVmUHRyPEdzdFBhZD4gcGFkOwotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9waXBl
bGluZS5nZXQoKSwgImdldC1hdWRpby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsK
LSAgICAgICAgQVNTRVJUKHBhZCk7CisgICAgTWVkaWFUaW1lIGxvYWRlZCA9IG1fbWF4VGltZUxv
YWRlZDsKKyAgICBpZiAobV9pc0VuZFJlYWNoZWQpCisgICAgICAgIGxvYWRlZCA9IGR1cmF0aW9u
TWVkaWFUaW1lKCk7CisgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIm1heFRpbWVMb2Fk
ZWQ6ICVzIiwgdG9TdHJpbmcobG9hZGVkKS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gbG9h
ZGVkOworfQogCi0gICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJBIiArIFN0cmluZzo6bnVtYmVy
KGkpOwotICAgICAgICB2YWxpZEF1ZGlvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOwotICAgICAg
ICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fYXVkaW9UcmFja3Muc2l6ZSgpKSkgewotICAg
ICAgICAgICAgUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNr
ID0gbV9hdWRpb1RyYWNrcy5nZXQoc3RyZWFtSWQpOwotICAgICAgICAgICAgaWYgKGV4aXN0aW5n
VHJhY2spIHsKLSAgICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fZXJyb3JPY2N1cmVkIHx8IG1fbG9hZGluZ1N0YWxsZWQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBhdXRvIHRyYWNrID0gQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZShtYWtlV2Vha1B0cigqdGhpcyksIGksIHBhZCk7Ci0gICAgICAgIEFTU0VSVChz
dHJlYW1JZCA9PSB0cmFjay0+aWQoKSk7Ci0gICAgICAgIG1fYXVkaW9UcmFja3MuYWRkKHN0cmVh
bUlkLCB0cmFjayk7Ci0gICAgICAgIG1fcGxheWVyLT5hZGRBdWRpb1RyYWNrKCp0cmFjayk7Cisg
ICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkgeworICAgICAgICBHU1Rf
TE9HX09CSkVDVChwaXBlbGluZSgpLCAiTGFzdCBuZXR3b3JrIHJlYWQgcG9zaXRpb246ICUiIEdf
R1VJTlQ2NF9GT1JNQVQgIiwgY3VycmVudDogJSIgR19HVUlOVDY0X0ZPUk1BVCwgbV9yZWFkUG9z
aXRpb25BdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MsIG1fbmV0d29ya1JlYWRQb3NpdGlvbik7Cisg
ICAgICAgIGJvb2wgZGlkTG9hZGluZ1Byb2dyZXNzID0gbV9yZWFkUG9zaXRpb25BdExhc3REaWRM
b2FkaW5nUHJvZ3Jlc3MgPCBtX25ldHdvcmtSZWFkUG9zaXRpb247CisgICAgICAgIG1fcmVhZFBv
c2l0aW9uQXRMYXN0RGlkTG9hZGluZ1Byb2dyZXNzID0gbV9uZXR3b3JrUmVhZFBvc2l0aW9uOwor
ICAgICAgICBHU1RfTE9HX09CSkVDVChwaXBlbGluZSgpLCAiZGlkTG9hZGluZ1Byb2dyZXNzOiAl
cyIsIGJvb2xGb3JQcmludGluZyhkaWRMb2FkaW5nUHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJu
IGRpZExvYWRpbmdQcm9ncmVzczsKICAgICB9CiAKLSAgICBwdXJnZUludmFsaWRBdWRpb1RyYWNr
cyh2YWxpZEF1ZGlvU3RyZWFtcyk7Ci0jZW5kaWYKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxp
bmUgfHwgIWR1cmF0aW9uTWVkaWFUaW1lKCkgfHwgKCFpc01lZGlhU291cmNlKCkgJiYgIXRvdGFs
Qnl0ZXMoKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX3BsYXllci0+Y2xpZW50
KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKKyAgICBNZWRpYVRpbWUgY3Vy
cmVudE1heFRpbWVMb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CisgICAgYm9vbCBkaWRMb2FkaW5n
UHJvZ3Jlc3MgPSBjdXJyZW50TWF4VGltZUxvYWRlZCAhPSBtX21heFRpbWVMb2FkZWRBdExhc3RE
aWRMb2FkaW5nUHJvZ3Jlc3M7CisgICAgbV9tYXhUaW1lTG9hZGVkQXRMYXN0RGlkTG9hZGluZ1By
b2dyZXNzID0gY3VycmVudE1heFRpbWVMb2FkZWQ7CisgICAgR1NUX0xPR19PQkpFQ1QocGlwZWxp
bmUoKSwgImRpZExvYWRpbmdQcm9ncmVzczogJXMiLCBib29sRm9yUHJpbnRpbmcoZGlkTG9hZGlu
Z1Byb2dyZXNzKSk7CisgICAgcmV0dXJuIGRpZExvYWRpbmdQcm9ncmVzczsKIH0KIAotI2lmIEVO
QUJMRShWSURFT19UUkFDSykKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0ZXh0
Q2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQordW5z
aWduZWQgbG9uZyBsb25nIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcygp
IGNvbnN0CiB7Ci0gICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlm
aWNhdGlvbjo6VGV4dENoYW5nZWQsIFtwbGF5ZXJdIHsKLSAgICAgICAgcGxheWVyLT5ub3RpZnlQ
bGF5ZXJPZlRleHQoKTsKLSAgICB9KTsKLX0KKyAgICBpZiAobV9lcnJvck9jY3VyZWQpCisgICAg
ICAgIHJldHVybiAwOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5
UGxheWVyT2ZUZXh0KCkKLXsKLSAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgIW1fc291
cmNlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3RvdGFsQnl0ZXMpCisgICAgICAgIHJl
dHVybiBtX3RvdGFsQnl0ZXM7CiAKLSAgICBBU1NFUlQobV9pc0xlZ2FjeVBsYXliaW4gfHwgaXNN
ZWRpYVNvdXJjZSgpKTsKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm4gMDsKIAot
ICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKLSAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRp
YVNvdXJjZSgpOwotICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRpYVNvdXJjZSA/IG1f
c291cmNlLmdldCgpIDogbV9waXBlbGluZS5nZXQoKTsKLSAgICBnX29iamVjdF9nZXQoZWxlbWVu
dCwgIm4tdGV4dCIsICZudW1UcmFja3MsIG51bGxwdHIpOworICAgIGlmIChpc0xpdmVTdHJlYW0o
KSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
Ik1lZGlhIGhhcyAlZCB0ZXh0IHRyYWNrcyIsIG51bVRyYWNrcyk7CisgICAgR3N0Rm9ybWF0IGZt
dCA9IEdTVF9GT1JNQVRfQllURVM7CisgICAgZ2ludDY0IGxlbmd0aCA9IDA7CisgICAgaWYgKGdz
dF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fc291cmNlLmdldCgpLCBmbXQsICZsZW5ndGgpKSB7
CisgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAidG90YWxCeXRlcyAlIiBHX0dJ
TlQ2NF9GT1JNQVQsIGxlbmd0aCk7CisgICAgICAgIG1fdG90YWxCeXRlcyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVuZ3RoKTsKKyAgICAgICAgbV9pc1N0cmVhbWluZyA9ICFs
ZW5ndGg7CisgICAgICAgIHJldHVybiBtX3RvdGFsQnl0ZXM7CisgICAgfQogCi0gICAgaWYgKHVz
ZU1lZGlhU291cmNlKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlRy
YWNrcyBtYW5hZ2VkIGJ5IHNvdXJjZSBlbGVtZW50LiBCYWlsaW5nIG91dCBub3cuIik7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAvLyBGYWxsIGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNvdXJjZSBwYWRz
IG1hbnVhbGx5LgorICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3No
b3dfYnVnLmNnaT9pZD02Mzg3NDkKKyAgICBHc3RJdGVyYXRvciogaXRlciA9IGdzdF9lbGVtZW50
X2l0ZXJhdGVfc3JjX3BhZHMobV9zb3VyY2UuZ2V0KCkpOworICAgIGJvb2wgZG9uZSA9IGZhbHNl
OworICAgIHdoaWxlICghZG9uZSkgeworICAgICAgICBHVmFsdWUgaXRlbSA9IEdfVkFMVUVfSU5J
VDsKKyAgICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dChpdGVyLCAmaXRlbSkpIHsKKyAg
ICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6IHsKKyAgICAgICAgICAgIEdzdFBhZCogcGFkID0g
c3RhdGljX2Nhc3Q8R3N0UGFkKj4oZ192YWx1ZV9nZXRfb2JqZWN0KCZpdGVtKSk7CisgICAgICAg
ICAgICBnaW50NjQgcGFkTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGlmIChnc3RfcGFkX3F1ZXJ5
X2R1cmF0aW9uKHBhZCwgZm10LCAmcGFkTGVuZ3RoKSAmJiBwYWRMZW5ndGggPiBsZW5ndGgpCisg
ICAgICAgICAgICAgICAgbGVuZ3RoID0gcGFkTGVuZ3RoOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfUkVTWU5DOgorICAgICAgICAgICAg
Z3N0X2l0ZXJhdG9yX3Jlc3luYyhpdGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoKKyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAg
ICBjYXNlIEdTVF9JVEVSQVRPUl9ET05FOgorICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGdfdmFsdWVfdW5zZXQoJml0ZW0p
OwogICAgIH0KIAotICAgIFZlY3RvcjxTdHJpbmc+IHZhbGlkVGV4dFN0cmVhbXM7Ci0gICAgZm9y
IChnaW50IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RQ
YWQ+IHBhZDsKLSAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCks
ICJnZXQtdGV4dC1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsKLSAgICAgICAgQVNT
RVJUKHBhZCk7CisgICAgZ3N0X2l0ZXJhdG9yX2ZyZWUoaXRlcik7CiAKLSAgICAgICAgLy8gV2Ug
Y2FuJ3QgYXNzdW1lIHRoZSBwYWQgaGFzIGEgc3RpY2t5IGV2ZW50IGhlcmUgbGlrZSBpbXBsZW1l
bnRlZCBpbgotICAgICAgICAvLyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyIGJlY2F1
c2UgaXQgbWlnaHQgYmUgZW1pdHRlZCBhZnRlciB0aGUKLSAgICAgICAgLy8gdHJhY2sgd2FzIGNy
ZWF0ZWQuIFNvIGZhbGxiYWNrIHRvIGEgZHVtbXkgc3RyZWFtIElEIGxpa2UgaW4gdGhlIEF1ZGlv
Ci0gICAgICAgIC8vIGFuZCBWaWRlbyB0cmFja3MuCi0gICAgICAgIFN0cmluZyBzdHJlYW1JZCA9
ICJUIiArIFN0cmluZzo6bnVtYmVyKGkpOworICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgp
LCAidG90YWxCeXRlcyAlIiBHX0dJTlQ2NF9GT1JNQVQsIGxlbmd0aCk7CisgICAgbV90b3RhbEJ5
dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihsZW5ndGgpOworICAgIG1faXNT
dHJlYW1pbmcgPSAhbGVuZ3RoOworICAgIHJldHVybiBtX3RvdGFsQnl0ZXM7Cit9CiAKLSAgICAg
ICAgdmFsaWRUZXh0U3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOwotICAgICAgICBpZiAoaSA8IHN0
YXRpY19jYXN0PGdpbnQ+KG1fdGV4dFRyYWNrcy5zaXplKCkpKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gZXhpc3RpbmdUcmFjayA9IG1fdGV4
dFRyYWNrcy5nZXQoc3RyZWFtSWQpOwotICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJhY2spIHsK
LSAgICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYXNTaW5nbGVT
ZWN1cml0eU9yaWdpbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBvcmlnaW5h
bFVSSSwgcmVzb2x2ZWRVUkk7CisgICAgZ19vYmplY3RfZ2V0KG1fc291cmNlLmdldCgpLCAibG9j
YXRpb24iLCAmb3JpZ2luYWxVUkkub3V0UHRyKCksICJyZXNvbHZlZC1sb2NhdGlvbiIsICZyZXNv
bHZlZFVSSS5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgaWYgKCFvcmlnaW5hbFVSSSB8fCAhcmVz
b2x2ZWRVUkkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWdfc3RyY21wMChvcmln
aW5hbFVSSS5nZXQoKSwgcmVzb2x2ZWRVUkkuZ2V0KCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIFJlZjxTZWN1cml0eU9yaWdpbj4gcmVzb2x2ZWRPcmlnaW4oU2VjdXJpdHlPcmlnaW46
OmNyZWF0ZUZyb21TdHJpbmcoU3RyaW5nOjpmcm9tVVRGOChyZXNvbHZlZFVSSS5nZXQoKSkpKTsK
KyAgICBSZWY8U2VjdXJpdHlPcmlnaW4+IHJlcXVlc3RlZE9yaWdpbihTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlRnJvbVN0cmluZyhTdHJpbmc6OmZyb21VVEY4KG9yaWdpbmFsVVJJLmdldCgpKSkpOwor
ICAgIHJldHVybiByZXNvbHZlZE9yaWdpbi0+aXNTYW1lU2NoZW1lSG9zdFBvcnQocmVxdWVzdGVk
T3JpZ2luLmdldCgpKTsKK30KKworT3B0aW9uYWw8Ym9vbD4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp3b3VsZFRhaW50T3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcmlnaW4pIGNv
bnN0Cit7CisgICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxMiwgMCkpIHsKKyAgICAg
ICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiQ2hlY2tpbmcgJXUgb3JpZ2lucyIsIG1f
b3JpZ2lucy5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIHJlc3BvbnNlT3JpZ2luIDogbV9v
cmlnaW5zKSB7CisgICAgICAgICAgICBpZiAoIW9yaWdpbi5jYW5BY2Nlc3MoKnJlc3BvbnNlT3Jp
Z2luKSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkZv
dW5kIHJlYWNoYWJsZSByZXNwb25zZSBvcmlnaW4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIGF1dG8gdHJhY2sgPSBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoaSwgcGFkKTsKLSAgICAgICAg
bV90ZXh0VHJhY2tzLmFkZChzdHJlYW1JZCwgdHJhY2suY29weVJlZigpKTsKLSAgICAgICAgbV9w
bGF5ZXItPmFkZFRleHRUcmFjayh0cmFjay5nZXQoKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIk5vIHZhbGlkIHJlc3BvbnNlIG9yaWdpbiBmb3VuZCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcHVyZ2VJbnZhbGlkVGV4dFRyYWNrcyh2YWxp
ZFRleHRTdHJlYW1zKTsKKyAgICAvLyBHU3RyZWFtZXIgPCAxLjEyIGhhcyBhbiBpbmNvbXBsZXRl
IHVyaWRvd25sb2FkZXIgaW1wbGVtZW50YXRpb24gc28gd2UKKyAgICAvLyBjYW4ndCB1c2UgV2Vi
S2l0V2ViU3JjIGZvciBhZGFwdGl2ZSBmcmFnbWVudHMgZG93bmxvYWRpbmcgaWYgdGhpcworICAg
IC8vIHZlcnNpb24gaXMgZGV0ZWN0ZWQuCisgICAgVU5VU0VEX1BBUkFNKG9yaWdpbik7CisgICAg
cmV0dXJuIG1faGFzVGFpbnRlZE9yaWdpbjsKIH0KIAotR3N0Rmxvd1JldHVybiBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6Om5ld1RleHRTYW1wbGVDYWxsYmFjayhNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIqIHBsYXllcikKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpz
aW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9uKCkKIHsKLSAgICBwbGF5ZXItPm5ld1RleHRTYW1wbGUo
KTsKLSAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgR3N0TWVzc2FnZSogbWVzc2FnZSA9IGdz
dF9tZXNzYWdlX25ld19yZXF1ZXN0X3N0YXRlKEdTVF9PQkpFQ1QobV9waXBlbGluZS5nZXQoKSks
IEdTVF9TVEFURV9QQVVTRUQpOworICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShtX3BpcGVs
aW5lLmdldCgpLCBtZXNzYWdlKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6Om5ld1RleHRTYW1wbGUoKQorI2lmIEVOQUJMRShXRUJfQVVESU8pCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRlcigpCiB7Ci0gICAg
aWYgKCFtX3RleHRBcHBTaW5rKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX2F1ZGlvU291
cmNlUHJvdmlkZXIpCisgICAgICAgIG1fYXVkaW9Tb3VyY2VQcm92aWRlciA9IG1ha2VVbmlxdWU8
QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcj4oKTsKK30KIAotICAgIEdSZWZQdHI8R3N0RXZl
bnQ+IHN0cmVhbVN0YXJ0RXZlbnQgPSBhZG9wdEdSZWYoCi0gICAgICAgIGdzdF9wYWRfZ2V0X3N0
aWNreV9ldmVudChtX3RleHRBcHBTaW5rUGFkLmdldCgpLCBHU1RfRVZFTlRfU1RSRUFNX1NUQVJU
LCAwKSk7CitBdWRpb1NvdXJjZVByb3ZpZGVyKiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmF1ZGlvU291cmNlUHJvdmlkZXIoKQoreworICAgIGVuc3VyZUF1ZGlvU291cmNlUHJvdmlkZXIo
KTsKKyAgICByZXR1cm4gbV9hdWRpb1NvdXJjZVByb3ZpZGVyLmdldCgpOworfQorI2VuZGlmCiAK
LSAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShtX3RleHRBcHBTaW5rLmdldCgpLCAicHVsbC1zYW1wbGUiLCAmc2FtcGxlLm91dFB0cigpLCBu
dWxscHRyKTsKLSAgICBBU1NFUlQoc2FtcGxlKTsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQoKQoreworICAgIE1lZGlhVGltZSBwcmV2aW91c0R1cmF0
aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKKyAgICBtX2NhY2hlZER1cmF0aW9uID0gTWVkaWFU
aW1lOjppbnZhbGlkVGltZSgpOwogCi0gICAgaWYgKHN0cmVhbVN0YXJ0RXZlbnQpIHsKLSAgICAg
ICAgYm9vbCBmb3VuZCA9IEZBTFNFOwotICAgICAgICBjb25zdCBnY2hhciogaWQ7Ci0gICAgICAg
IGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fc3RhcnQoc3RyZWFtU3RhcnRFdmVudC5nZXQoKSwgJmlk
KTsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdGV4dFRyYWNrcy52YWx1ZXMoKSkgewot
ICAgICAgICAgICAgaWYgKCFzdHJjbXAodHJhY2stPnN0cmVhbUlkKCkudXRmOCgpLmRhdGEoKSwg
aWQpKSB7Ci0gICAgICAgICAgICAgICAgdHJhY2stPmhhbmRsZVNhbXBsZShzYW1wbGUpOwotICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAgICAgR1NU
X1dBUk5JTkcoIkdvdCBzYW1wbGUgd2l0aCB1bmtub3duIHN0cmVhbSBJRCAlcy4iLCBpZCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIEdTVF9XQVJOSU5HKCJVbmFibGUgdG8gaGFuZGxlIHNhbXBsZSB3
aXRoIG5vIHN0cmVhbSBzdGFydCBldmVudC4iKTsKKyAgICAvLyBBdm9pZCBlbWl0aW5nIGR1cmF0
aW9uY2hhbmdlZCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgcHJldmlvdXMKKyAgICAvLyBkdXJhdGlv
biB3YXMgMCBiZWNhdXNlIHRoYXQgY2FzZSBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgdGhlCisgICAg
Ly8gSFRNTE1lZGlhRWxlbWVudC4KKyAgICBpZiAocHJldmlvdXNEdXJhdGlvbiAmJiBkdXJhdGlv
bk1lZGlhVGltZSgpICE9IHByZXZpb3VzRHVyYXRpb24pCisgICAgICAgIG1fcGxheWVyLT5kdXJh
dGlvbkNoYW5nZWQoKTsKIH0KLSNlbmRpZgogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6c2V0UmF0ZShmbG9hdCByYXRlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnNvdXJjZVNldHVwKEdzdEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQpCiB7Ci0gICAgLy8gSGln
aGVyIHJhdGUgY2F1c2VzIGNyYXNoLgotICAgIHJhdGUgPSBjbGFtcFRvKHJhdGUsIC0yMC4wLCAy
MC4wKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTb3VyY2UgZWxlbWVudCBz
ZXQtdXAgZm9yICVzIiwgR1NUX0VMRU1FTlRfTkFNRShzb3VyY2VFbGVtZW50KSk7CiAKLSAgICAv
LyBBdm9pZCB1c2VsZXNzIHBsYXliYWNrIHJhdGUgdXBkYXRlLgotICAgIGlmIChtX3BsYXliYWNr
UmF0ZSA9PSByYXRlKSB7Ci0gICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgdGhhdCB1cHBlciBsYXll
cnMgd2VyZSBub3RpZmllZCBpZiByYXRlIHdhcyBzZXQKKyAgICBpZiAoV0VCS0lUX0lTX1dFQl9T
UkMobV9zb3VyY2UuZ2V0KCkpICYmIEdTVF9PQkpFQ1RfUEFSRU5UKG1fc291cmNlLmdldCgpKSkK
KyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKEdTVF9FTEVNRU5U
X1BBUkVOVChtX3NvdXJjZS5nZXQoKSksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHVyaURl
Y29kZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNrKSwgdGhpcyk7CiAKLSAgICAgICAgaWYgKCFtX2No
YW5naW5nUmF0ZSAmJiBtX3BsYXllci0+cmF0ZSgpICE9IG1fcGxheWJhY2tSYXRlKQotICAgICAg
ICAgICAgbV9wbGF5ZXItPnJhdGVDaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgbV9zb3VyY2UgPSBzb3VyY2VFbGVtZW50OwogCi0gICAgaWYgKGlzTGl2ZVN0cmVhbSgpKSB7
Ci0gICAgICAgIC8vIG5vdGlmeSB1cHBlciBsYXllcnMgdGhhdCB3ZSBjYW5ub3QgaGFuZGxlIHBh
c3NlZCByYXRlLgotICAgICAgICBtX2NoYW5naW5nUmF0ZSA9IGZhbHNlOwotICAgICAgICBtX3Bs
YXllci0+cmF0ZUNoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChXRUJLSVRfSVNf
V0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkpIHsKKyAgICAgICAgd2ViS2l0V2ViU3JjU2V0TWVkaWFQ
bGF5ZXIoV0VCS0lUX1dFQl9TUkNfQ0FTVChtX3NvdXJjZS5nZXQoKSksIG1fcGxheWVyKTsKKyAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChHU1RfRUxFTUVOVF9QQVJFTlQobV9zb3VyY2UuZ2V0KCkp
LCAiZWxlbWVudC1hZGRlZCIsIEdfQ0FMTEJBQ0sodXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2Fs
bGJhY2spLCB0aGlzKTsKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIH0gZWxzZSBpZiAo
V0VCS0lUX0lTX01FRElBX1NUUkVBTV9TUkMoc291cmNlRWxlbWVudCkpIHsKKyAgICAgICAgYXV0
byBzdHJlYW0gPSBtX3N0cmVhbVByaXZhdGUuZ2V0KCk7CisgICAgICAgIEFTU0VSVChzdHJlYW0p
OworICAgICAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY1NldFN0cmVhbShXRUJLSVRfTUVESUFfU1RS
RUFNX1NSQyhzb3VyY2VFbGVtZW50KSwgc3RyZWFtKTsKKyNlbmRpZgogICAgIH0KK30KIAotICAg
IEdzdFN0YXRlIHN0YXRlOwotICAgIEdzdFN0YXRlIHBlbmRpbmc7Cit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzQ2FsbGJhY2soTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIsIEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBw
bGF5ZXItPnNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyhvYmplY3QpOworfQogCi0gICAgbV9wbGF5
YmFja1JhdGUgPSByYXRlOwotICAgIG1fY2hhbmdpbmdSYXRlID0gdHJ1ZTsKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXMoR09iamVjdCog
b2JqZWN0KQoreworICAgIGlmIChnX3N0cmNtcDAoR19PQkpFQ1RfVFlQRV9OQU1FKG9iamVjdCks
ICJHc3RQdWxzZVNpbmsiKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJnBlbmRpbmcsIDApOworICAgIGNvbnN0
IGNoYXIqIHJvbGUgPSBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJJc1ZpZGVvKCkgPyAi
dmlkZW8iIDogIm11c2ljIjsKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1
Y3R1cmVfbmV3KCJzdHJlYW0tcHJvcGVydGllcyIsICJtZWRpYS5yb2xlIiwgR19UWVBFX1NUUklO
Rywgcm9sZSwgbnVsbHB0cik7CisgICAgZ19vYmplY3Rfc2V0KG9iamVjdCwgInN0cmVhbS1wcm9w
ZXJ0aWVzIiwgc3RydWN0dXJlLCBudWxscHRyKTsKKyAgICBnc3Rfc3RydWN0dXJlX2ZyZWUoc3Ry
dWN0dXJlKTsKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBlbGVtZW50TmFtZShnc3RfZWxlbWVudF9n
ZXRfbmFtZShHU1RfRUxFTUVOVChvYmplY3QpKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiU2V0IG1lZGlhLnJvbGUgYXMgJXMgYXQgJXMiLCByb2xlLCBlbGVtZW50TmFtZS5n
ZXQoKSk7Cit9CiAKLSAgICBpZiAoIXJhdGUpIHsKLSAgICAgICAgbV9jaGFuZ2luZ1JhdGUgPSBm
YWxzZTsKLSAgICAgICAgbV9wbGF5YmFja1JhdGVQYXVzZSA9IHRydWU7Ci0gICAgICAgIGlmIChz
dGF0ZSAhPSBHU1RfU1RBVEVfUEFVU0VEICYmIHBlbmRpbmcgIT0gR1NUX1NUQVRFX1BBVVNFRCkK
LSAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAg
ICAgIHJldHVybjsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1
cENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyLCBHc3RFbGVtZW50
KiBzb3VyY2VFbGVtZW50KQoreworICAgIHBsYXllci0+c291cmNlU2V0dXAoc291cmNlRWxlbWVu
dCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjaGFuZ2VQaXBlbGlu
ZVN0YXRlKEdzdFN0YXRlIG5ld1N0YXRlKQoreworICAgIEFTU0VSVChtX3BpcGVsaW5lKTsKKwor
ICAgIEdzdFN0YXRlIGN1cnJlbnRTdGF0ZTsKKyAgICBHc3RTdGF0ZSBwZW5kaW5nOworCisgICAg
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZw
ZW5kaW5nLCAwKTsKKyAgICBpZiAoY3VycmVudFN0YXRlID09IG5ld1N0YXRlIHx8IHBlbmRpbmcg
PT0gbmV3U3RhdGUpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUmVq
ZWN0ZWQgc3RhdGUgY2hhbmdlIHRvICVzIGZyb20gJXMgd2l0aCAlcyBwZW5kaW5nIiwgZ3N0X2Vs
ZW1lbnRfc3RhdGVfZ2V0X25hbWUobmV3U3RhdGUpLAorICAgICAgICAgICAgZ3N0X2VsZW1lbnRf
c3RhdGVfZ2V0X25hbWUoY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUo
cGVuZGluZykpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoKHN0YXRl
ICE9IEdTVF9TVEFURV9QTEFZSU5HICYmIHN0YXRlICE9IEdTVF9TVEFURV9QQVVTRUQpCi0gICAg
ICAgIHx8IChwZW5kaW5nID09IEdTVF9TVEFURV9QQVVTRUQpKQotICAgICAgICByZXR1cm47Cisg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ2hhbmdpbmcgc3RhdGUgY2hhbmdlIHRv
ICVzIGZyb20gJXMgd2l0aCAlcyBwZW5kaW5nIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUo
bmV3U3RhdGUpLAorICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShjdXJyZW50U3Rh
dGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CiAKLSAgICB1cGRhdGVQ
bGF5YmFja1JhdGUoKTsKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIGlmIChjdXJyZW50U3Rh
dGUgPD0gR1NUX1NUQVRFX1JFQURZICYmIG5ld1N0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpCisg
ICAgICAgIGVuc3VyZUdMVmlkZW9TaW5rQ29udGV4dCgpOworI2VuZGlmCisKKyAgICBHc3RTdGF0
ZUNoYW5nZVJldHVybiBzZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3Bp
cGVsaW5lLmdldCgpLCBuZXdTdGF0ZSk7CisgICAgR3N0U3RhdGUgcGF1c2VkT3JQbGF5aW5nID0g
bmV3U3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcgPyBHU1RfU1RBVEVfUEFVU0VEIDogR1NUX1NU
QVRFX1BMQVlJTkc7CisgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBwYXVzZWRPclBsYXlpbmcgJiYg
c2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBDcmVhdGUgYSB0aW1lciB3aGVuIGVudGVyaW5nIHRoZSBSRUFE
WSBzdGF0ZSBzbyB0aGF0IHdlIGNhbiBmcmVlIHJlc291cmNlcworICAgIC8vIGlmIHdlIHN0YXkg
Zm9yIHRvbyBsb25nIG9uIFJFQURZLgorICAgIC8vIEFsc28gbGV0cyByZW1vdmUgdGhlIHRpbWVy
IGlmIHdlIHJlcXVlc3QgYSBzdGF0ZSBjaGFuZ2UgZm9yIGFueSBzdGF0ZSBvdGhlciB0aGFuIFJF
QURZLgorICAgIC8vIFNlZSBhbHNvIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTczNTQKKyAgICBpZiAobmV3U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZICYmICFtX3Jl
YWR5VGltZXJIYW5kbGVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgLy8gTWF4IGludGVydmFsIGlu
IHNlY29uZHMgdG8gc3RheSBpbiB0aGUgUkVBRFkgc3RhdGUgb24gbWFudWFsCisgICAgICAgIC8v
IHN0YXRlIGNoYW5nZSByZXF1ZXN0cy4KKyAgICAgICAgc3RhdGljIGNvbnN0IFNlY29uZHMgcmVh
ZHlTdGF0ZVRpbWVyRGVsYXkgeyAxX21pbiB9OworICAgICAgICBtX3JlYWR5VGltZXJIYW5kbGVy
LnN0YXJ0T25lU2hvdChyZWFkeVN0YXRlVGltZXJEZWxheSk7CisgICAgfSBlbHNlIGlmIChuZXdT
dGF0ZSAhPSBHU1RfU1RBVEVfUkVBRFkpCisgICAgICAgIG1fcmVhZHlUaW1lckhhbmRsZXIuc3Rv
cCgpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWRvdWJsZSBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnJhdGUoKSBjb25zdAordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnNldFBsYXliaW5VUkwoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIG1fcGxheWJhY2tS
YXRlOworICAgIC8vIENsZWFuIG91dCBldmVyeXRoaW5nIGFmdGVyIGZpbGU6Ly8gdXJsIHBhdGgu
CisgICAgU3RyaW5nIGNsZWFuVVJMU3RyaW5nKHVybC5zdHJpbmcoKSk7CisgICAgaWYgKHVybC5p
c0xvY2FsRmlsZSgpKQorICAgICAgICBjbGVhblVSTFN0cmluZyA9IGNsZWFuVVJMU3RyaW5nLnN1
YnN0cmluZygwLCB1cmwucGF0aEVuZCgpKTsKKworICAgIG1fdXJsID0gVVJMKFVSTCgpLCBjbGVh
blVSTFN0cmluZyk7CisgICAgY29udmVydFRvSW50ZXJuYWxQcm90b2NvbChtX3VybCk7CisgICAg
R1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJMb2FkICVzIiwgbV91cmwuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ1cmkiLCBt
X3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBudWxscHRyKTsKIH0KIAotdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZXNlcnZlc1BpdGNoKGJvb2wgcHJlc2VydmVzUGl0
Y2gpCitzdGF0aWMgdm9pZCBzZXRTeW5jT25DbG9jayhHc3RFbGVtZW50ICplbGVtZW50LCBib29s
IHN5bmMpCiB7Ci0gICAgbV9wcmVzZXJ2ZXNQaXRjaCA9IHByZXNlcnZlc1BpdGNoOworICAgIGlm
ICghR1NUX0lTX0JJTihlbGVtZW50KSkgeworICAgICAgICBnX29iamVjdF9zZXQoZWxlbWVudCwg
InN5bmMiLCBzeW5jLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdzdEl0
ZXJhdG9yKiBpdCA9IGdzdF9iaW5faXRlcmF0ZV9zaW5rcyhHU1RfQklOKGVsZW1lbnQpKTsKKyAg
ICB3aGlsZSAoZ3N0X2l0ZXJhdG9yX2ZvcmVhY2goaXQsIChHc3RJdGVyYXRvckZvcmVhY2hGdW5j
dGlvbikoW10oY29uc3QgR1ZhbHVlKiBpdGVtLCB2b2lkKiBzeW5jUHRyKSB7CisgICAgICAgIGJv
b2wqIHN5bmMgPSBzdGF0aWNfY2FzdDxib29sKj4oc3luY1B0cik7CisgICAgICAgIHNldFN5bmNP
bkNsb2NrKEdTVF9FTEVNRU5UKGdfdmFsdWVfZ2V0X29iamVjdChpdGVtKSksICpzeW5jKTsKKyAg
ICB9KSwgJnN5bmMpID09IEdTVF9JVEVSQVRPUl9SRVNZTkMpCisgICAgICAgIGdzdF9pdGVyYXRv
cl9yZXN5bmMoaXQpOworICAgIGdzdF9pdGVyYXRvcl9mcmVlKGl0KTsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpi
dWZmZXJlZCgpIGNvbnN0Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3luY09u
Q2xvY2soYm9vbCBzeW5jKQogewotICAgIGF1dG8gdGltZVJhbmdlcyA9IG1ha2VVbmlxdWU8UGxh
dGZvcm1UaW1lUmFuZ2VzPigpOwotICAgIGlmIChtX2Vycm9yT2NjdXJlZCB8fCBpc0xpdmVTdHJl
YW0oKSkKLSAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXM7CisgICAgc2V0U3luY09uQ2xvY2sodmlk
ZW9TaW5rKCksIHN5bmMpOworICAgIHNldFN5bmNPbkNsb2NrKGF1ZGlvU2luaygpLCBzeW5jKTsK
K30KIAotICAgIE1lZGlhVGltZSBtZWRpYUR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsK
LSAgICBpZiAoIW1lZGlhRHVyYXRpb24gfHwgbWVkaWFEdXJhdGlvbi5pc1Bvc2l0aXZlSW5maW5p
dGUoKSkKLSAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXM7Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbygpCit7CisgICAgaWYgKFVOTElLRUxZKCFt
X3BpcGVsaW5lIHx8ICFtX3NvdXJjZSkpCisgICAgICAgIHJldHVybjsKIAotICAgIEdSZWZQdHI8
R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9uZXdfYnVmZmVyaW5nKEdTVF9G
T1JNQVRfUEVSQ0VOVCkpOworICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01lZGlh
U291cmNlKCkpOwogCi0gICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3BpcGVsaW5lLmdldCgp
LCBxdWVyeS5nZXQoKSkpCi0gICAgICAgIHJldHVybiB0aW1lUmFuZ2VzOworICAgIGdpbnQgbnVt
VHJhY2tzID0gMDsKKyAgICBib29sIHVzZU1lZGlhU291cmNlID0gaXNNZWRpYVNvdXJjZSgpOwor
ICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSB1c2VNZWRpYVNvdXJjZSA/IG1fc291cmNlLmdldCgp
IDogbV9waXBlbGluZS5nZXQoKTsKKyAgICBnX29iamVjdF9nZXQoZWxlbWVudCwgIm4tdmlkZW8i
LCAmbnVtVHJhY2tzLCBudWxscHRyKTsKIAotICAgIGd1aW50IG51bUJ1ZmZlcmluZ1JhbmdlcyA9
IGdzdF9xdWVyeV9nZXRfbl9idWZmZXJpbmdfcmFuZ2VzKHF1ZXJ5LmdldCgpKTsKLSAgICBmb3Ig
KGd1aW50IGluZGV4ID0gMDsgaW5kZXggPCBudW1CdWZmZXJpbmdSYW5nZXM7IGluZGV4KyspIHsK
LSAgICAgICAgZ2ludDY0IHJhbmdlU3RhcnQgPSAwLCByYW5nZVN0b3AgPSAwOwotICAgICAgICBp
ZiAoZ3N0X3F1ZXJ5X3BhcnNlX250aF9idWZmZXJpbmdfcmFuZ2UocXVlcnkuZ2V0KCksIGluZGV4
LCAmcmFuZ2VTdGFydCwgJnJhbmdlU3RvcCkpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90IHN0YXJ0
VGltZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRfcm91bmQodG9Hc3RVbnNpZ25lZDY0VGlt
ZShtZWRpYUR1cmF0aW9uKSwgcmFuZ2VTdGFydCwgR1NUX0ZPUk1BVF9QRVJDRU5UX01BWCk7Ci0g
ICAgICAgICAgICB1aW50NjRfdCBzdG9wVGltZSA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnRf
cm91bmQodG9Hc3RVbnNpZ25lZDY0VGltZShtZWRpYUR1cmF0aW9uKSwgcmFuZ2VTdG9wLCBHU1Rf
Rk9STUFUX1BFUkNFTlRfTUFYKTsKLSAgICAgICAgICAgIHRpbWVSYW5nZXMtPmFkZChNZWRpYVRp
bWUoc3RhcnRUaW1lLCBHU1RfU0VDT05EKSwgTWVkaWFUaW1lKHN0b3BUaW1lLCBHU1RfU0VDT05E
KSk7Ci0gICAgICAgIH0KKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIk1lZGlhIGhh
cyAlZCB2aWRlbyB0cmFja3MiLCBudW1UcmFja3MpOworCisgICAgYm9vbCBvbGRIYXNWaWRlbyA9
IG1faGFzVmlkZW87CisgICAgbV9oYXNWaWRlbyA9IG51bVRyYWNrcyA+IDA7CisgICAgaWYgKG9s
ZEhhc1ZpZGVvICE9IG1faGFzVmlkZW8pCisgICAgICAgIG1fcGxheWVyLT5jaGFyYWN0ZXJpc3Rp
Y0NoYW5nZWQoKTsKKworICAgIGlmIChtX2hhc1ZpZGVvKQorICAgICAgICBtX3BsYXllci0+c2l6
ZUNoYW5nZWQoKTsKKworICAgIGlmICh1c2VNZWRpYVNvdXJjZSkgeworICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJUcmFja3MgbWFuYWdlZCBieSBzb3VyY2UgZWxlbWVudC4g
QmFpbGluZyBvdXQgbm93LiIpOworICAgICAgICBtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5
ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IC8vIEZhbGxiYWNrIHRvIHRoZSBtb3JlIGdlbmVyYWwgbWF4VGltZUxvYWRlZCgpIGlmIG5vIHJh
bmdlIGhhcwotICAgIC8vIGJlZW4gZm91bmQuCi0gICAgaWYgKCF0aW1lUmFuZ2VzLT5sZW5ndGgo
KSkgewotICAgICAgICBNZWRpYVRpbWUgbG9hZGVkID0gbWF4VGltZUxvYWRlZCgpOwotICAgICAg
ICBpZiAobG9hZGVkLmlzVmFsaWQoKSAmJiBsb2FkZWQpCi0gICAgICAgICAgICB0aW1lUmFuZ2Vz
LT5hZGQoTWVkaWFUaW1lOjp6ZXJvVGltZSgpLCBsb2FkZWQpOworI2lmIEVOQUJMRShWSURFT19U
UkFDSykKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxpZFZpZGVvU3RyZWFtczsKKyAgICBmb3IgKGdp
bnQgaSA9IDA7IGkgPCBudW1UcmFja3M7ICsraSkgeworICAgICAgICBHUmVmUHRyPEdzdFBhZD4g
cGFkOworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9waXBlbGluZS5nZXQoKSwgImdl
dC12aWRlby1wYWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgQVNTRVJU
KHBhZCk7CisKKyAgICAgICAgU3RyaW5nIHN0cmVhbUlkID0gIlYiICsgU3RyaW5nOjpudW1iZXIo
aSk7CisgICAgICAgIHZhbGlkVmlkZW9TdHJlYW1zLmFwcGVuZChzdHJlYW1JZCk7CisgICAgICAg
IGlmIChpIDwgc3RhdGljX2Nhc3Q8Z2ludD4obV92aWRlb1RyYWNrcy5zaXplKCkpKSB7CisgICAg
ICAgICAgICBSZWZQdHI8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sg
PSBtX3ZpZGVvVHJhY2tzLmdldChzdHJlYW1JZCk7CisgICAgICAgICAgICBpZiAoZXhpc3RpbmdU
cmFjaykgeworICAgICAgICAgICAgICAgIGV4aXN0aW5nVHJhY2stPnNldEluZGV4KGkpOworICAg
ICAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrLT5wYWQoKSA9PSBwYWQpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
YXV0byB0cmFjayA9IFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobWFrZVdlYWtQ
dHIoKnRoaXMpLCBpLCBwYWQpOworICAgICAgICBBU1NFUlQoc3RyZWFtSWQgPT0gdHJhY2stPmlk
KCkpOworICAgICAgICBtX3ZpZGVvVHJhY2tzLmFkZChzdHJlYW1JZCwgdHJhY2suY29weVJlZigp
KTsKKyAgICAgICAgbV9wbGF5ZXItPmFkZFZpZGVvVHJhY2sodHJhY2suZ2V0KCkpOwogICAgIH0K
IAotICAgIHJldHVybiB0aW1lUmFuZ2VzOworICAgIHB1cmdlSW52YWxpZFZpZGVvVHJhY2tzKHZh
bGlkVmlkZW9TdHJlYW1zKTsKKyNlbmRpZgorCisgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlh
UGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKIHsKLSAgICBHVW5pcXVlT3V0UHRy
PEdFcnJvcj4gZXJyOwotICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGRlYnVnOwotICAgIE1lZGlh
UGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3I7Ci0gICAgYm9vbCBpc3N1ZUVycm9yID0gdHJ1ZTsK
LSAgICBib29sIGF0dGVtcHROZXh0TG9jYXRpb24gPSBmYWxzZTsKLSAgICBjb25zdCBHc3RTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUobWVzc2FnZSk7Ci0g
ICAgR3N0U3RhdGUgcmVxdWVzdGVkU3RhdGUsIGN1cnJlbnRTdGF0ZTsKKyAgICBwbGF5ZXItPm1f
bm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpWaWRlb0NhcHNDaGFuZ2Vk
LCBbcGxheWVyXSB7CisgICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMoKTsK
KyAgICB9KTsKK30KIAotICAgIG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlv
biA9IGZhbHNlOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXll
ck9mVmlkZW9DYXBzKCkKK3sKKyAgICBtX3ZpZGVvU2l6ZSA9IEludFNpemUoKTsKKyAgICBtX3Bs
YXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKK30KIAot
ICAgIGlmIChzdHJ1Y3R1cmUpIHsKLSAgICAgICAgY29uc3QgZ2NoYXIqIG1lc3NhZ2VUeXBlTmFt
ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlmeShNYWlu
VGhyZWFkTm90aWZpY2F0aW9uOjpBdWRpb0NoYW5nZWQsIFtwbGF5ZXJdIHsKKyAgICAgICAgcGxh
eWVyLT5ub3RpZnlQbGF5ZXJPZkF1ZGlvKCk7CisgICAgfSk7Cit9CiAKLSAgICAgICAgLy8gUmVk
aXJlY3QgbWVzc2FnZXMgYXJlIHNlbnQgZnJvbSBlbGVtZW50cywgbGlrZSBxdGRlbXV4LCB0bwot
ICAgICAgICAvLyBub3RpZnkgb2YgdGhlIG5ldyBsb2NhdGlvbihzKSBvZiB0aGUgbWVkaWEuCi0g
ICAgICAgIGlmICghZ19zdHJjbXAwKG1lc3NhZ2VUeXBlTmFtZSwgInJlZGlyZWN0IikpIHsKLSAg
ICAgICAgICAgIG1lZGlhTG9jYXRpb25DaGFuZ2VkKG1lc3NhZ2UpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5vdGlmeVBsYXllck9mQXVkaW8oKQoreworICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8
fCAhbV9zb3VyY2UpKQorICAgICAgICByZXR1cm47CiAKLSAgICAvLyBXZSBpZ25vcmUgc3RhdGUg
Y2hhbmdlcyBmcm9tIGludGVybmFsIGVsZW1lbnRzLiBUaGV5IGFyZSBmb3J3YXJkZWQgdG8gcGxh
eWJpbjIgYW55d2F5LgotICAgIGJvb2wgbWVzc2FnZVNvdXJjZUlzUGxheWJpbiA9IEdTVF9NRVNT
QUdFX1NSQyhtZXNzYWdlKSA9PSByZWludGVycHJldF9jYXN0PEdzdE9iamVjdCo+KG1fcGlwZWxp
bmUuZ2V0KCkpOworICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNl
KCkpOwogCi0gICAgR1NUX0xPR19PQkpFQ1QocGlwZWxpbmUoKSwgIk1lc3NhZ2UgJXMgcmVjZWl2
ZWQgZnJvbSBlbGVtZW50ICVzIiwgR1NUX01FU1NBR0VfVFlQRV9OQU1FKG1lc3NhZ2UpLCBHU1Rf
TUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7Ci0gICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBF
KG1lc3NhZ2UpKSB7Ci0gICAgY2FzZSBHU1RfTUVTU0FHRV9FUlJPUjoKLSAgICAgICAgaWYgKG1f
cmVzZXRQaXBlbGluZSB8fCAhbV9taXNzaW5nUGx1Z2luQ2FsbGJhY2tzLmlzRW1wdHkoKSB8fCBt
X2Vycm9yT2NjdXJlZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBnc3RfbWVzc2FnZV9w
YXJzZV9lcnJvcihtZXNzYWdlLCAmZXJyLm91dFB0cigpLCAmZGVidWcub3V0UHRyKCkpOwotICAg
ICAgICBHU1RfRVJST1IoIkVycm9yICVkOiAlcyAodXJsPSVzKSIsIGVyci0+Y29kZSwgZXJyLT5t
ZXNzYWdlLCBtX3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBnaW50IG51bVRyYWNr
cyA9IDA7CisgICAgYm9vbCB1c2VNZWRpYVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKKyAgICBH
c3RFbGVtZW50KiBlbGVtZW50ID0gdXNlTWVkaWFTb3VyY2UgPyBtX3NvdXJjZS5nZXQoKSA6IG1f
cGlwZWxpbmUuZ2V0KCk7CisgICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJuLWF1ZGlvIiwgJm51
bVRyYWNrcywgbnVsbHB0cik7CiAKLSAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9X
SVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FM
TCwgIndlYmtpdC12aWRlby5lcnJvciIpOworICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgp
LCAiTWVkaWEgaGFzICVkIGF1ZGlvIHRyYWNrcyIsIG51bVRyYWNrcyk7CisgICAgYm9vbCBvbGRI
YXNBdWRpbyA9IG1faGFzQXVkaW87CisgICAgbV9oYXNBdWRpbyA9IG51bVRyYWNrcyA+IDA7Cisg
ICAgaWYgKG9sZEhhc0F1ZGlvICE9IG1faGFzQXVkaW8pCisgICAgICAgIG1fcGxheWVyLT5jaGFy
YWN0ZXJpc3RpY0NoYW5nZWQoKTsKIAotICAgICAgICBlcnJvciA9IE1lZGlhUGxheWVyOjpFbXB0
eTsKLSAgICAgICAgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9TVFJFQU1fRVJS
T1IsIEdTVF9TVFJFQU1fRVJST1JfQ09ERUNfTk9UX0ZPVU5EKQotICAgICAgICAgICAgfHwgZ19l
cnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJP
Ul9XUk9OR19UWVBFKQotICAgICAgICAgICAgfHwgZ19lcnJvcl9tYXRjaGVzKGVyci5nZXQoKSwg
R1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9GQUlMRUQpCi0gICAgICAgICAgICB8
fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfQ09SRV9FUlJPUiwgR1NUX0NPUkVfRVJS
T1JfTUlTU0lOR19QTFVHSU4pCi0gICAgICAgICAgICB8fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdl
dCgpLCBHU1RfUkVTT1VSQ0VfRVJST1IsIEdTVF9SRVNPVVJDRV9FUlJPUl9OT1RfRk9VTkQpKQot
ICAgICAgICAgICAgZXJyb3IgPSBNZWRpYVBsYXllcjo6Rm9ybWF0RXJyb3I7Ci0gICAgICAgIGVs
c2UgaWYgKGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9TVFJFQU1fRVJST1IsIEdTVF9T
VFJFQU1fRVJST1JfVFlQRV9OT1RfRk9VTkQpKSB7Ci0gICAgICAgICAgICAvLyBMZXQgdGhlIG1l
ZGlhUGxheWVyQ2xpZW50IGhhbmRsZSB0aGUgc3RyZWFtIGVycm9yLCBpbgotICAgICAgICAgICAg
Ly8gdGhpcyBjYXNlIHRoZSBIVE1MTWVkaWFFbGVtZW50IHdpbGwgZW1pdCBhIHN0YWxsZWQKKyAg
ICBpZiAodXNlTWVkaWFTb3VyY2UpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGlu
ZSgpLCAiVHJhY2tzIG1hbmFnZWQgYnkgc291cmNlIGVsZW1lbnQuIEJhaWxpbmcgb3V0IG5vdy4i
KTsKKyAgICAgICAgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZCht
X3BsYXllcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoVklERU9fVFJB
Q0spCisgICAgVmVjdG9yPFN0cmluZz4gdmFsaWRBdWRpb1N0cmVhbXM7CisgICAgZm9yIChnaW50
IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBh
ZDsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCksICJnZXQt
YXVkaW8tcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgIEFTU0VSVChw
YWQpOworCisgICAgICAgIFN0cmluZyBzdHJlYW1JZCA9ICJBIiArIFN0cmluZzo6bnVtYmVyKGkp
OworICAgICAgICB2YWxpZEF1ZGlvU3RyZWFtcy5hcHBlbmQoc3RyZWFtSWQpOworICAgICAgICBp
ZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fYXVkaW9UcmFja3Muc2l6ZSgpKSkgeworICAgICAg
ICAgICAgUmVmUHRyPEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiBleGlzdGluZ1RyYWNrID0g
bV9hdWRpb1RyYWNrcy5nZXQoc3RyZWFtSWQpOworICAgICAgICAgICAgaWYgKGV4aXN0aW5nVHJh
Y2spIHsKKyAgICAgICAgICAgICAgICBleGlzdGluZ1RyYWNrLT5zZXRJbmRleChpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZXhpc3RpbmdUcmFjay0+cGFkKCkgPT0gcGFkKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8gdHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRy
KCp0aGlzKSwgaSwgcGFkKTsKKyAgICAgICAgQVNTRVJUKHN0cmVhbUlkID09IHRyYWNrLT5pZCgp
KTsKKyAgICAgICAgbV9hdWRpb1RyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrKTsKKyAgICAgICAg
bV9wbGF5ZXItPmFkZEF1ZGlvVHJhY2soKnRyYWNrKTsKKyAgICB9CisKKyAgICBwdXJnZUludmFs
aWRBdWRpb1RyYWNrcyh2YWxpZEF1ZGlvU3RyZWFtcyk7CisjZW5kaWYKKworICAgIG1fcGxheWVy
LT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOworfQorCisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRl
eHRDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7
CisgICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6
VGV4dENoYW5nZWQsIFtwbGF5ZXJdIHsKKyAgICAgICAgcGxheWVyLT5ub3RpZnlQbGF5ZXJPZlRl
eHQoKTsKKyAgICB9KTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5v
dGlmeVBsYXllck9mVGV4dCgpCit7CisgICAgaWYgKFVOTElLRUxZKCFtX3BpcGVsaW5lIHx8ICFt
X3NvdXJjZSkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJp
biB8fCBpc01lZGlhU291cmNlKCkpOworCisgICAgZ2ludCBudW1UcmFja3MgPSAwOworICAgIGJv
b2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291cmNlKCk7CisgICAgR3N0RWxlbWVudCogZWxl
bWVudCA9IHVzZU1lZGlhU291cmNlID8gbV9zb3VyY2UuZ2V0KCkgOiBtX3BpcGVsaW5lLmdldCgp
OworICAgIGdfb2JqZWN0X2dldChlbGVtZW50LCAibi10ZXh0IiwgJm51bVRyYWNrcywgbnVsbHB0
cik7CisKKyAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIk1lZGlhIGhhcyAlZCB0ZXh0
IHRyYWNrcyIsIG51bVRyYWNrcyk7CisKKyAgICBpZiAodXNlTWVkaWFTb3VyY2UpIHsKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiVHJhY2tzIG1hbmFnZWQgYnkgc291cmNl
IGVsZW1lbnQuIEJhaWxpbmcgb3V0IG5vdy4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFZlY3RvcjxTdHJpbmc+IHZhbGlkVGV4dFN0cmVhbXM7CisgICAgZm9yIChnaW50IGkgPSAw
OyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZDsKKyAg
ICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGlwZWxpbmUuZ2V0KCksICJnZXQtdGV4dC1w
YWQiLCBpLCAmcGFkLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgQVNTRVJUKHBhZCk7CisK
KyAgICAgICAgLy8gV2UgY2FuJ3QgYXNzdW1lIHRoZSBwYWQgaGFzIGEgc3RpY2t5IGV2ZW50IGhl
cmUgbGlrZSBpbXBsZW1lbnRlZCBpbgorICAgICAgICAvLyBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
R1N0cmVhbWVyIGJlY2F1c2UgaXQgbWlnaHQgYmUgZW1pdHRlZCBhZnRlciB0aGUKKyAgICAgICAg
Ly8gdHJhY2sgd2FzIGNyZWF0ZWQuIFNvIGZhbGxiYWNrIHRvIGEgZHVtbXkgc3RyZWFtIElEIGxp
a2UgaW4gdGhlIEF1ZGlvCisgICAgICAgIC8vIGFuZCBWaWRlbyB0cmFja3MuCisgICAgICAgIFN0
cmluZyBzdHJlYW1JZCA9ICJUIiArIFN0cmluZzo6bnVtYmVyKGkpOworCisgICAgICAgIHZhbGlk
VGV4dFN0cmVhbXMuYXBwZW5kKHN0cmVhbUlkKTsKKyAgICAgICAgaWYgKGkgPCBzdGF0aWNfY2Fz
dDxnaW50PihtX3RleHRUcmFja3Muc2l6ZSgpKSkgeworICAgICAgICAgICAgUmVmUHRyPEluYmFu
ZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI+IGV4aXN0aW5nVHJhY2sgPSBtX3RleHRUcmFja3Mu
Z2V0KHN0cmVhbUlkKTsKKyAgICAgICAgICAgIGlmIChleGlzdGluZ1RyYWNrKSB7CisgICAgICAg
ICAgICAgICAgZXhpc3RpbmdUcmFjay0+c2V0SW5kZXgoaSk7CisgICAgICAgICAgICAgICAgaWYg
KGV4aXN0aW5nVHJhY2stPnBhZCgpID09IHBhZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHRyYWNrID0gSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKGksIHBhZCk7CisgICAgICAgIG1f
dGV4dFRyYWNrcy5hZGQoc3RyZWFtSWQsIHRyYWNrLmNvcHlSZWYoKSk7CisgICAgICAgIG1fcGxh
eWVyLT5hZGRUZXh0VHJhY2sodHJhY2suZ2V0KCkpOworICAgIH0KKworICAgIHB1cmdlSW52YWxp
ZFRleHRUcmFja3ModmFsaWRUZXh0U3RyZWFtcyk7Cit9CisKK0dzdEZsb3dSZXR1cm4gTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuZXdUZXh0U2FtcGxlQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgcGxheWVyLT5uZXdUZXh0U2FtcGxlKCk7
CisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bmV3VGV4dFNhbXBsZSgpCit7CisgICAgaWYgKCFtX3RleHRBcHBTaW5rKQorICAg
ICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEdzdEV2ZW50PiBzdHJlYW1TdGFydEV2ZW50ID0g
YWRvcHRHUmVmKAorICAgICAgICBnc3RfcGFkX2dldF9zdGlja3lfZXZlbnQobV90ZXh0QXBwU2lu
a1BhZC5nZXQoKSwgR1NUX0VWRU5UX1NUUkVBTV9TVEFSVCwgMCkpOworCisgICAgR1JlZlB0cjxH
c3RTYW1wbGU+IHNhbXBsZTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV90ZXh0QXBwU2lu
ay5nZXQoKSwgInB1bGwtc2FtcGxlIiwgJnNhbXBsZS5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAg
QVNTRVJUKHNhbXBsZSk7CisKKyAgICBpZiAoc3RyZWFtU3RhcnRFdmVudCkgeworICAgICAgICBi
b29sIGZvdW5kID0gRkFMU0U7CisgICAgICAgIGNvbnN0IGdjaGFyKiBpZDsKKyAgICAgICAgZ3N0
X2V2ZW50X3BhcnNlX3N0cmVhbV9zdGFydChzdHJlYW1TdGFydEV2ZW50LmdldCgpLCAmaWQpOwor
ICAgICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV90ZXh0VHJhY2tzLnZhbHVlcygpKSB7CisgICAg
ICAgICAgICBpZiAoIXN0cmNtcCh0cmFjay0+c3RyZWFtSWQoKS51dGY4KCkuZGF0YSgpLCBpZCkp
IHsKKyAgICAgICAgICAgICAgICB0cmFjay0+aGFuZGxlU2FtcGxlKHNhbXBsZSk7CisgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICBHU1RfV0FS
TklORygiR290IHNhbXBsZSB3aXRoIHVua25vd24gc3RyZWFtIElEICVzLiIsIGlkKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgR1NUX1dBUk5JTkcoIlVuYWJsZSB0byBoYW5kbGUgc2FtcGxlIHdpdGgg
bm8gc3RyZWFtIHN0YXJ0IGV2ZW50LiIpOworfQorI2VuZGlmCisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpmaWxsVGltZXJGaXJlZCgpCit7CisgICAgaWYgKG1fZXJyb3JPY2N1
cmVkKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmdd
IEFuIGVycm9yIG9jY3VycmVkLCBkaXNhYmxpbmcgdGhlIGZpbGwgdGltZXIiKTsKKyAgICAgICAg
bV9maWxsVGltZXIuc3RvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1JlZlB0
cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19idWZmZXJpbmcoR1NU
X0ZPUk1BVF9QRVJDRU5UKSk7CisgICAgZG91YmxlIGZpbGxTdGF0dXMgPSAxMDAuMDsKKyAgICBH
c3RCdWZmZXJpbmdNb2RlIG1vZGUgPSBHU1RfQlVGRkVSSU5HX0RPV05MT0FEOworCisgICAgaWYg
KGdzdF9lbGVtZW50X3F1ZXJ5KG1fc291cmNlLmdldCgpLCBxdWVyeS5nZXQoKSkpIHsKKyAgICAg
ICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19zdGF0cyhxdWVyeS5nZXQoKSwgJm1vZGUsIG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgICAgIGludCBwZXJjZW50YWdlOworICAg
ICAgICBnc3RfcXVlcnlfcGFyc2VfYnVmZmVyaW5nX3BlcmNlbnQocXVlcnkuZ2V0KCksIG51bGxw
dHIsICZwZXJjZW50YWdlKTsKKyAgICAgICAgZmlsbFN0YXR1cyA9IHBlcmNlbnRhZ2U7CisgICAg
fSBlbHNlIGlmIChtX2h0dHBSZXNwb25zZVRvdGFsU2l6ZSkgeworICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBRdWVyeSBmYWlsZWQsIGZhbGxpbmcgYmFj
ayB0byBuZXR3b3JrIHJlYWQgcG9zaXRpb24gZXN0aW1hdGlvbiIpOworICAgICAgICBmaWxsU3Rh
dHVzID0gMTAwLjAgKiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX25ldHdvcmtSZWFkUG9zaXRpb24p
IC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2h0dHBSZXNwb25zZVRvdGFsU2l6ZSkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmdd
IFVuYWJsZSB0byBkZXRlcm1pbmUgb24tZGlzayBidWZmZXJpbmcgc3RhdHVzIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICB1cGRhdGVCdWZmZXJpbmdTdGF0dXMobW9kZSwgZmlsbFN0
YXR1cyk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpsb2FkU3RhdGVD
aGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnRpbWVDaGFuZ2VkKCkKK3sKKyAgICB1cGRhdGVTdGF0ZXMoKTsKKyAg
ICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3Jr
RXJyb3IsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUsIGJvb2wgZm9yY2VOb3Rp
ZmljYXRpb25zKQoreworICAgIEdTVF9XQVJOSU5HKCJMb2FkaW5nIGZhaWxlZCwgZXJyb3I6ICVz
IiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcobmV0d29ya0Vycm9yKS51dGY4KCkuZGF0YSgp
KTsKKworICAgIG1fZXJyb3JPY2N1cmVkID0gdHJ1ZTsKKyAgICBpZiAoZm9yY2VOb3RpZmljYXRp
b25zIHx8IG1fbmV0d29ya1N0YXRlICE9IG5ldHdvcmtFcnJvcikgeworICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IG5ldHdvcmtFcnJvcjsKKyAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNo
YW5nZWQoKTsKKyAgICB9CisgICAgaWYgKGZvcmNlTm90aWZpY2F0aW9ucyB8fCBtX3JlYWR5U3Rh
dGUgIT0gcmVhZHlTdGF0ZSkgeworICAgICAgICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOwor
ICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICAvLyBM
b2FkaW5nIGZhaWxlZCwgcmVtb3ZlIHJlYWR5IHRpbWVyLgorICAgIG1fcmVhZHlUaW1lckhhbmRs
ZXIuc3RvcCgpOworfQorCitHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZUF1ZGlvU2luaygpCit7CisgICAgbV9hdXRvQXVkaW9TaW5rID0gZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9tYWtlKCJhdXRvYXVkaW9zaW5rIiwgbnVsbHB0cik7CisgICAgaWYgKCFtX2F1dG9B
dWRpb1NpbmspIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIkdTdHJlYW1lcidzIGF1dG9hdWRpb3Np
bmsgbm90IGZvdW5kLiBQbGVhc2UgY2hlY2sgeW91ciBnc3QtcGx1Z2lucy1nb29kIGluc3RhbGxh
dGlvbiIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9hdXRvQXVkaW9TaW5rLmdldCgpLCAiY2hpbGQtYWRkZWQiLCBHX0NB
TExCQUNLKHNldEF1ZGlvU3RyZWFtUHJvcGVydGllc0NhbGxiYWNrKSwgdGhpcyk7CisKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQorICAgIEdzdEVsZW1lbnQqIGF1ZGlvU2lua0JpbiA9IGdzdF9iaW5f
bmV3KCJhdWRpby1zaW5rIik7CisgICAgZW5zdXJlQXVkaW9Tb3VyY2VQcm92aWRlcigpOworICAg
IG1fYXVkaW9Tb3VyY2VQcm92aWRlci0+Y29uZmlndXJlQXVkaW9CaW4oYXVkaW9TaW5rQmluLCBu
dWxscHRyKTsKKyAgICByZXR1cm4gYXVkaW9TaW5rQmluOworI2Vsc2UKKyAgICByZXR1cm4gbV9h
dXRvQXVkaW9TaW5rLmdldCgpOworI2VuZGlmCit9CisKK0dzdEVsZW1lbnQqIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9TaW5rKCkgY29uc3QKK3sKKyAgICBHc3RFbGVtZW50KiBz
aW5rOworICAgIGdfb2JqZWN0X2dldChtX3BpcGVsaW5lLmdldCgpLCAiYXVkaW8tc2luayIsICZz
aW5rLCBudWxscHRyKTsKKyAgICByZXR1cm4gc2luazsKK30KKworTWVkaWFUaW1lIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGxheWJhY2tQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgR1NU
X1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiaXNFbmRSZWFjaGVkOiAlcywgc2Vla2luZzogJXMs
IHNlZWtUaW1lOiAlcyIsIGJvb2xGb3JQcmludGluZyhtX2lzRW5kUmVhY2hlZCksIGJvb2xGb3JQ
cmludGluZyhtX3NlZWtpbmcpLCBtX3NlZWtUaW1lLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIG1fc2Vla2luZykKKyAgICAgICAgcmV0dXJuIG1f
c2Vla1RpbWU7CisKKyAgICAvLyBUaGlzIGNvbnN0YW50IHNob3VsZCByZW1haW4gbG93ZXIgdGhh
biBIVE1MTWVkaWFFbGVtZW50J3MgbWF4VGltZXVwZGF0ZUV2ZW50RnJlcXVlbmN5LgorICAgIHN0
YXRpYyBjb25zdCBTZWNvbmRzIHBvc2l0aW9uQ2FjaGVUaHJlc2hvbGQgPSAyMDBfbXM7CisgICAg
U2Vjb25kcyBub3cgPSBXVEY6OldhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpOwor
ICAgIGlmIChtX2xhc3RRdWVyeVRpbWUgJiYgKG5vdyAtIG1fbGFzdFF1ZXJ5VGltZS52YWx1ZSgp
KSA8IHBvc2l0aW9uQ2FjaGVUaHJlc2hvbGQgJiYgbV9jYWNoZWRQb3NpdGlvbi5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgR1NUX1RSQUNFX09CSkVDVChwaXBlbGluZSgpLCAiUmV0dXJuaW5nIGNhY2hl
ZCBwb3NpdGlvbjogJXMiLCBtX2NhY2hlZFBvc2l0aW9uLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgIHJldHVybiBtX2NhY2hlZFBvc2l0aW9uOworICAgIH0KKworICAgIG1fbGFz
dFF1ZXJ5VGltZSA9IG5vdzsKKworICAgIC8vIFBvc2l0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGlm
IG5vIGFzeW5jIHN0YXRlIGNoYW5nZSBpcyBnb2luZyBvbiBhbmQgdGhlIHN0YXRlIGlzIGVpdGhl
ciBwYXVzZWQgb3IgcGxheWluZy4KKyAgICBnaW50NjQgcG9zaXRpb24gPSBHU1RfQ0xPQ0tfVElN
RV9OT05FOworICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NU
X0ZPUk1BVF9USU1FKTsKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQo
KSwgcXVlcnkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZw
b3NpdGlvbik7CisgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsKKworICAgIEdTVF9UUkFDRV9P
QkpFQ1QocGlwZWxpbmUoKSwgIlBvc2l0aW9uICUiIEdTVF9USU1FX0ZPUk1BVCAiLCBjYW5GYWxs
QmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0aW9uOiAlcyIsIEdTVF9USU1FX0FSR1MocG9zaXRp
b24pLCBib29sRm9yUHJpbnRpbmcobV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0
aW9uKSk7CisKKyAgICBNZWRpYVRpbWUgcGxheWJhY2tQb3NpdGlvbiA9IE1lZGlhVGltZTo6emVy
b1RpbWUoKTsKKyAgICBHc3RDbG9ja1RpbWUgZ3N0cmVhbWVyUG9zaXRpb24gPSBzdGF0aWNfY2Fz
dDxHc3RDbG9ja1RpbWU+KHBvc2l0aW9uKTsKKyAgICBpZiAoR1NUX0NMT0NLX1RJTUVfSVNfVkFM
SUQoZ3N0cmVhbWVyUG9zaXRpb24pKQorICAgICAgICBwbGF5YmFja1Bvc2l0aW9uID0gTWVkaWFU
aW1lKGdzdHJlYW1lclBvc2l0aW9uLCBHU1RfU0VDT05EKTsKKyAgICBlbHNlIGlmIChtX2NhbkZh
bGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24pCisgICAgICAgIHBsYXliYWNrUG9zaXRp
b24gPSBtX3NlZWtUaW1lOworCisgICAgbV9jYWNoZWRQb3NpdGlvbiA9IHBsYXliYWNrUG9zaXRp
b247CisgICAgcmV0dXJuIHBsYXliYWNrUG9zaXRpb247Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjplbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpU
cmFja1R5cGUgdHJhY2tUeXBlLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICAvLyBGSVhNRTogUmVt
b3ZlIGlzTWVkaWFTb3VyY2UoKSB0ZXN0IGJlbG93IHdoZW4gZml4aW5nIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI1MzEuCisgICAgaWYgKGlzTWVkaWFTb3VyY2Uo
KSkgeworICAgICAgICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBdWRpby9W
aWRlby9UZXh0IHRyYWNrIHN3aXRjaGluZyBpcyBub3QgeWV0IHN1cHBvcnRlZCBieSB0aGUgTVNF
IGJhY2tlbmQuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBw
cm9wZXJ0eU5hbWU7CisgICAgY29uc3QgY2hhciogdHJhY2tUeXBlQXNTdHJpbmc7CisgICAgVmVj
dG9yPFN0cmluZz4gc2VsZWN0ZWRTdHJlYW1zOworICAgIFN0cmluZyBzZWxlY3RlZFN0cmVhbUlk
OworCisgICAgR3N0U3RyZWFtKiBzdHJlYW0gPSBudWxscHRyOworCisgICAgaWYgKCFtX2lzTGVn
YWN5UGxheWJpbikgeworICAgICAgICBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0
X3N0cmVhbShtX3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCksIGluZGV4KTsKKyAgICAgICAgaWYgKCFz
dHJlYW0pIHsKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChwaXBlbGluZSgpLCAiTm8g
c3RyZWFtIHRvIHNlbGVjdCBhdCBpbmRleCAldSIsIGluZGV4KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBzZWxlY3RlZFN0cmVhbUlkID0gU3RyaW5nOjpmcm9tVVRG
OChnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtKSk7CisgICAgICAgIHNlbGVjdGVkU3Ry
ZWFtcy5hcHBlbmQoc2VsZWN0ZWRTdHJlYW1JZCk7CisgICAgfQorCisgICAgc3dpdGNoICh0cmFj
a1R5cGUpIHsKKyAgICBjYXNlIFRyYWNrUHJpdmF0ZUJhc2VHU3RyZWFtZXI6OlRyYWNrVHlwZTo6
QXVkaW86CisgICAgICAgIHByb3BlcnR5TmFtZSA9ICJjdXJyZW50LWF1ZGlvIjsKKyAgICAgICAg
dHJhY2tUeXBlQXNTdHJpbmcgPSAiYXVkaW8iOworICAgICAgICBpZiAoIXNlbGVjdGVkU3RyZWFt
SWQuaXNFbXB0eSgpICYmIHNlbGVjdGVkU3RyZWFtSWQgPT0gbV9jdXJyZW50QXVkaW9TdHJlYW1J
ZCkgeworICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICIlcyBzdHJlYW06
ICVzIGFscmVhZHkgc2VsZWN0ZWQsIG5vdCBkb2luZyBhbnl0aGluZy4iLCB0cmFja1R5cGVBc1N0
cmluZywgc2VsZWN0ZWRTdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9jdXJyZW50VGV4dFN0cmVhbUlkLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50VGV4dFN0
cmVhbUlkKTsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRWaWRlb1N0cmVhbUlkLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50VmlkZW9TdHJlYW1J
ZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVHJhY2tQcml2YXRlQmFzZUdTdHJlYW1lcjo6
VHJhY2tUeXBlOjpWaWRlbzoKKyAgICAgICAgcHJvcGVydHlOYW1lID0gImN1cnJlbnQtdmlkZW8i
OworICAgICAgICB0cmFja1R5cGVBc1N0cmluZyA9ICJ2aWRlbyI7CisgICAgICAgIGlmICghc2Vs
ZWN0ZWRTdHJlYW1JZC5pc0VtcHR5KCkgJiYgc2VsZWN0ZWRTdHJlYW1JZCA9PSBtX2N1cnJlbnRW
aWRlb1N0cmVhbUlkKSB7CisgICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwg
IiVzIHN0cmVhbTogJXMgYWxyZWFkeSBzZWxlY3RlZCwgbm90IGRvaW5nIGFueXRoaW5nLiIsIHRy
YWNrVHlwZUFzU3RyaW5nLCBzZWxlY3RlZFN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRBdWRpb1N0
cmVhbUlkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9j
dXJyZW50QXVkaW9TdHJlYW1JZCk7CisgICAgICAgIGlmICghbV9jdXJyZW50VGV4dFN0cmVhbUlk
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNlbGVjdGVkU3RyZWFtcy5hcHBlbmQobV9jdXJyZW50
VGV4dFN0cmVhbUlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmFja1ByaXZhdGVCYXNl
R1N0cmVhbWVyOjpUcmFja1R5cGU6OlRleHQ6CisgICAgICAgIHByb3BlcnR5TmFtZSA9ICJjdXJy
ZW50LXRleHQiOworICAgICAgICB0cmFja1R5cGVBc1N0cmluZyA9ICJ0ZXh0IjsKKyAgICAgICAg
aWYgKCFzZWxlY3RlZFN0cmVhbUlkLmlzRW1wdHkoKSAmJiBzZWxlY3RlZFN0cmVhbUlkID09IG1f
Y3VycmVudFRleHRTdHJlYW1JZCkgeworICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICIlcyBzdHJlYW06ICVzIGFscmVhZHkgc2VsZWN0ZWQsIG5vdCBkb2luZyBhbnl0aGlu
Zy4iLCB0cmFja1R5cGVBc1N0cmluZywgc2VsZWN0ZWRTdHJlYW1JZC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9jdXJyZW50
QXVkaW9TdHJlYW1JZC5pc0VtcHR5KCkpCisgICAgICAgICAgICBzZWxlY3RlZFN0cmVhbXMuYXBw
ZW5kKG1fY3VycmVudEF1ZGlvU3RyZWFtSWQpOworICAgICAgICBpZiAoIW1fY3VycmVudFZpZGVv
U3RyZWFtSWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zLmFwcGVuZCht
X2N1cnJlbnRWaWRlb1N0cmVhbUlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUcmFja1By
aXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGU6OlVua25vd246CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgR1NUX0lORk9fT0JKRUNU
KHBpcGVsaW5lKCksICJFbmFibGluZyAlcyB0cmFjayB3aXRoIGluZGV4OiAldSIsIHRyYWNrVHlw
ZUFzU3RyaW5nLCBpbmRleCk7CisgICAgaWYgKG1faXNMZWdhY3lQbGF5YmluKQorICAgICAgICBn
X29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgcHJvcGVydHlOYW1lLCBpbmRleCwgbnVsbHB0
cik7CisgICAgZWxzZSB7CisgICAgICAgIEdMaXN0KiBzZWxlY3RlZFN0cmVhbXNMaXN0ID0gbnVs
bHB0cjsKKworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0cmVhbUlkIDogc2VsZWN0ZWRTdHJl
YW1zKQorICAgICAgICAgICAgc2VsZWN0ZWRTdHJlYW1zTGlzdCA9IGdfbGlzdF9hcHBlbmQoc2Vs
ZWN0ZWRTdHJlYW1zTGlzdCwgZ19zdHJkdXAoc3RyZWFtSWQudXRmOCgpLmRhdGEoKSkpOworCisg
ICAgICAgIC8vIFRPRE86IE1TRSBHc3RTdHJlYW0gQVBJIHN1cHBvcnQ6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODI1MzEKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2Vu
ZF9ldmVudChtX3BpcGVsaW5lLmdldCgpLCBnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zKHNl
bGVjdGVkU3RyZWFtc0xpc3QpKTsKKyAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChzZWxlY3RlZFN0
cmVhbXNMaXN0LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihnX2ZyZWUpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVUcmFja3Mo
KQoreworICAgIEFTU0VSVCghbV9pc0xlZ2FjeVBsYXliaW4pOworCisgICAgYm9vbCB1c2VNZWRp
YVNvdXJjZSA9IGlzTWVkaWFTb3VyY2UoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBnc3Rfc3Ry
ZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemUobV9zdHJlYW1Db2xsZWN0aW9uLmdldCgpKTsKKworICAg
IGJvb2wgb2xkSGFzQXVkaW8gPSBtX2hhc0F1ZGlvOworICAgIGJvb2wgb2xkSGFzVmlkZW8gPSBt
X2hhc1ZpZGVvOworICAgIC8vIE5ldyBzdHJlYW0gY29sbGVjdGlvbnMgb3ZlcnJpZGUgcHJldmlv
dXMgb25lcy4KKyAgICBjbGVhclRyYWNrcygpOworICAgIHVuc2lnbmVkIHRleHRUcmFja0luZGV4
ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRf
c3RyZWFtKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQoKSwgaSk7CisgICAgICAgIFN0cmluZyBzdHJl
YW1JZChnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtLmdldCgpKSk7CisgICAgICAgIEdz
dFN0cmVhbVR5cGUgdHlwZSA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlKHN0cmVhbS5nZXQo
KSk7CisKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiSW5zcGVjdGluZyAl
cyB0cmFjayB3aXRoIElEICVzIiwgZ3N0X3N0cmVhbV90eXBlX2dldF9uYW1lKHR5cGUpLCBzdHJl
YW1JZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVf
QVVESU8pCisgICAgICAgICAgICBDUkVBVEVfVFJBQ0soYXVkaW8sIEF1ZGlvKTsKKyAgICAgICAg
ZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9WSURFTykKKyAgICAgICAgICAgIENSRUFU
RV9UUkFDSyh2aWRlbywgVmlkZW8pOworICAgICAgICBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVB
TV9UWVBFX1RFWFQgJiYgIXVzZU1lZGlhU291cmNlKSB7CisjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQorICAgICAgICAgICAgYXV0byB0cmFjayA9IEluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZSh0ZXh0VHJhY2tJbmRleCsrLCBzdHJlYW0pOworICAgICAgICAgICAgbV90ZXh0
VHJhY2tzLmFkZChzdHJlYW1JZCwgdHJhY2suY29weVJlZigpKTsKKyAgICAgICAgICAgIG1fcGxh
eWVyLT5hZGRUZXh0VHJhY2sodHJhY2suZ2V0KCkpOworI2VuZGlmCisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVua25vd24gdHJhY2sgdHlwZSBmb3VuZCBmb3Igc3Ry
ZWFtICVzIiwgc3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgaWYgKChvbGRI
YXNWaWRlbyAhPSBtX2hhc1ZpZGVvKSB8fCAob2xkSGFzQXVkaW8gIT0gbV9oYXNBdWRpbykpCisg
ICAgICAgIG1fcGxheWVyLT5jaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKTsKKworICAgIGlmIChtX2hh
c1ZpZGVvKQorICAgICAgICBtX3BsYXllci0+c2l6ZUNoYW5nZWQoKTsKKworICAgIG1fcGxheWVy
LT5jbGllbnQoKS5tZWRpYVBsYXllckVuZ2luZVVwZGF0ZWQobV9wbGF5ZXIpOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2xlYXJUcmFja3MoKQoreworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICBDTEVBUl9UUkFDS1MobV9hdWRpb1RyYWNrcywgbV9wbGF5ZXIt
PnJlbW92ZUF1ZGlvVHJhY2spOworICAgIENMRUFSX1RSQUNLUyhtX3ZpZGVvVHJhY2tzLCBtX3Bs
YXllci0+cmVtb3ZlVmlkZW9UcmFjayk7CisgICAgQ0xFQVJfVFJBQ0tTKG1fdGV4dFRyYWNrcywg
bV9wbGF5ZXItPnJlbW92ZVRleHRUcmFjayk7CisjZW5kaWYgLy8gRU5BQkxFKFZJREVPX1RSQUNL
KQorfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9DaGFuZ2VkQ2Fs
bGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgcGxheWVy
LT5tX25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6VmlkZW9DaGFuZ2Vk
LCBbcGxheWVyXSB7CisgICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWaWRlbygpOworICAg
IH0pOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UGlwZWxpbmUo
R3N0RWxlbWVudCogcGlwZWxpbmUpCit7CisgICAgbV9waXBlbGluZSA9IHBpcGVsaW5lOworCisg
ICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhH
U1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKKyAgICBnc3RfYnVzX3NldF9zeW5jX2hh
bmRsZXIoYnVzLmdldCgpLCBbXShHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRl
ciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvJiBwbGF5ZXIgPSAqc3RhdGljX2Nhc3Q8TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyKj4odXNlckRhdGEpOworCisgICAgICAgIGlmIChwbGF5ZXIu
aGFuZGxlU3luY01lc3NhZ2UobWVzc2FnZSkpIHsKKyAgICAgICAgICAgIGdzdF9tZXNzYWdlX3Vu
cmVmKG1lc3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBHU1RfQlVTX1BBU1M7CisgICAgfSwgdGhpcywgbnVsbHB0cik7
Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2Fn
ZShHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3Nh
Z2UpID09IEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OICYmICFtX2lzTGVnYWN5UGxheWJp
bikgeworICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247Cisg
ICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uKG1lc3NhZ2UsICZjb2xs
ZWN0aW9uLm91dFB0cigpKTsKKworICAgICAgICBpZiAoY29sbGVjdGlvbikgeworICAgICAgICAg
ICAgbV9zdHJlYW1Db2xsZWN0aW9uLnN3YXAoY29sbGVjdGlvbik7CisgICAgICAgICAgICBtX25v
dGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6U3RyZWFtQ29sbGVjdGlvbkNo
YW5nZWQsIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgdGhpcy0+dXBkYXRlVHJhY2tzKCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChHU1RfTUVTU0FHRV9U
WVBFKG1lc3NhZ2UpICE9IEdTVF9NRVNTQUdFX05FRURfQ09OVEVYVCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgY29uc3QgZ2NoYXIqIGNvbnRleHRUeXBlOworICAgIGdzdF9tZXNzYWdl
X3BhcnNlX2NvbnRleHRfdHlwZShtZXNzYWdlLCAmY29udGV4dFR5cGUpOworICAgIEdTVF9ERUJV
R19PQkpFQ1QocGlwZWxpbmUoKSwgIkhhbmRsaW5nICVzIG5lZWQtY29udGV4dCBtZXNzYWdlIGZv
ciAlcyIsIGNvbnRleHRUeXBlLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdlKSk7CisKKyAg
ICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgV0VCS0lUX1dFQl9TUkNfUExBWUVSX0NPTlRF
WFRfVFlQRV9OQU1FKSkgeworICAgICAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBh
ZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KFdFQktJVF9XRUJfU1JDX1BMQVlFUl9DT05URVhUX1RZ
UEVfTkFNRSwgRkFMU0UpKTsKKyAgICAgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3RydWN0dXJl
ID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOworCisgICAg
ICAgIEFTU0VSVChtX3BsYXllcik7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRT
dHJ1Y3R1cmUsICJwbGF5ZXIiLCBHX1RZUEVfUE9JTlRFUiwgbV9wbGF5ZXIsIG51bGxwdHIpOwor
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChHU1RfTUVTU0FHRV9T
UkMobWVzc2FnZSkpLCBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGVsZW1l
bnRDb250ZXh0ID0gYWRvcHRHUmVmKHJlcXVlc3RHTENvbnRleHQoY29udGV4dFR5cGUpKTsKKyAg
ICBpZiAoZWxlbWVudENvbnRleHQpIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQo
R1NUX0VMRU1FTlQobWVzc2FnZS0+c3JjKSwgZWxlbWVudENvbnRleHQuZ2V0KCkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKKworI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUEpCisgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUs
ICJkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIikpIHsKKyAgICAgICAgaWYgKGlz
TWFpblRocmVhZCgpKSB7CisgICAgICAgICAgICBHU1RfRVJST1IoImNhbid0IGhhbmRsZSBkcm0t
cHJlZmVycmVkLWRlY3J5cHRpb24tc3lzdGVtLWlkIG5lZWQgY29udGV4dCBtZXNzYWdlIGluIHRo
ZSBtYWluIHRocmVhZCIpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChwaXBlbGluZSgpLCAiaGFuZGxpbmcgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1p
ZCBuZWVkIGNvbnRleHQgbWVzc2FnZSIpOworCisgICAgICAgIEluaXREYXRhIGluaXREYXRhOwor
ICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90ZWN0aW9uTXV0ZXgp
OworICAgICAgICAgICAgUHJvdGVjdGlvblN5c3RlbUV2ZW50cyBwcm90ZWN0aW9uU3lzdGVtRXZl
bnRzKG1lc3NhZ2UpOworICAgICAgICAgICAgR1NUX1RSQUNFKCJmb3VuZCAlenUgcHJvdGVjdGlv
biBldmVudHMsICV6dSBkZWNyeXB0b3JzIGF2YWlsYWJsZSIsIHByb3RlY3Rpb25TeXN0ZW1FdmVu
dHMuZXZlbnRzKCkuc2l6ZSgpLCBwcm90ZWN0aW9uU3lzdGVtRXZlbnRzLmF2YWlsYWJsZVN5c3Rl
bXMoKS5zaXplKCkpOworCisgICAgICAgICAgICBmb3IgKGF1dG8mIGV2ZW50IDogcHJvdGVjdGlv
blN5c3RlbUV2ZW50cy5ldmVudHMoKSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV2
ZW50S2V5U3lzdGVtSWQgPSBudWxscHRyOworICAgICAgICAgICAgICAgIEdzdEJ1ZmZlciogZGF0
YSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgZ3N0X2V2ZW50X3BhcnNlX3Byb3RlY3Rpb24o
ZXZlbnQuZ2V0KCksICZldmVudEtleVN5c3RlbUlkLCAmZGF0YSwgbnVsbHB0cik7CisKKyAgICAg
ICAgICAgICAgICBpbml0RGF0YS5hcHBlbmQoe2V2ZW50S2V5U3lzdGVtSWQsIGRhdGF9KTsKKyAg
ICAgICAgICAgICAgICBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLmFkZChHU1RfRVZFTlRfU0VR
TlVNKGV2ZW50LmdldCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW5p
dGlhbGl6YXRpb25EYXRhRW5jb3VudGVyZWQoV1RGTW92ZShpbml0RGF0YSkpOworCisgICAgICAg
IEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAid2FpdGluZyBmb3IgYSBDRE0gaW5zdGFuY2Ui
KTsKKyAgICAgICAgaWYgKG1fY2RtQXR0YWNobWVudFNlbWFwaG9yZS53YWl0Rm9yKDRfcykKKyAg
ICAgICAgICAgICYmIG1fbm90aWZpZXItPmlzVmFsaWQoKSAvLyBDaGVjayB0aGUgcGxheWVyIGlz
IG5vdCBiZWluZyBkZXN0cm95ZWQuCisgICAgICAgICAgICAmJiAhbV9jZG1JbnN0YW5jZS0+a2V5
U3lzdGVtKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBwcmVmZXJyZWRL
ZXlTeXN0ZW1VdWlkID0gR1N0cmVhbWVyRU1FVXRpbGl0aWVzOjprZXlTeXN0ZW1Ub1V1aWQobV9j
ZG1JbnN0YW5jZS0+a2V5U3lzdGVtKCkpOworICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBp
cGVsaW5lKCksICJ3b3JraW5nIHdpdGgga2V5IHN5c3RlbSAlcywgY29udGludWluZyB3aXRoIGtl
eSBzeXN0ZW0gJXMgb24gJXMiLCBtX2NkbUluc3RhbmNlLT5rZXlTeXN0ZW0oKS51dGY4KCkuZGF0
YSgpLCBwcmVmZXJyZWRLZXlTeXN0ZW1VdWlkLCBHU1RfTUVTU0FHRV9TUkNfTkFNRShtZXNzYWdl
KSk7CisKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gY29udGV4dCA9IGFkb3B0R1Jl
Zihnc3RfY29udGV4dF9uZXcoImRybS1wcmVmZXJyZWQtZGVjcnlwdGlvbi1zeXN0ZW0taWQiLCBG
QUxTRSkpOworICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBjb250ZXh0U3RydWN0dXJlID0gZ3N0
X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGNvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAg
Z3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImRlY3J5cHRpb24tc3lzdGVtLWlk
IiwgR19UWVBFX1NUUklORywgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgbnVsbHB0cik7CisgICAg
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChHU1RfTUVTU0FHRV9T
UkMobWVzc2FnZSkpLCBjb250ZXh0LmdldCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBHU1RfV0FSTklORygiQ0RNIGluc3RhbmNlIG5vdCBpbml0aWFsaXphZWQiKTsKKworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorR3N0Q29udGV4
dCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpyZXF1ZXN0R0xDb250ZXh0KGNvbnN0IGNo
YXIqIGNvbnRleHRUeXBlKQoreworICAgIGlmICghZW5zdXJlR3N0R0xDb250ZXh0KCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUsIEdT
VF9HTF9ESVNQTEFZX0NPTlRFWFRfVFlQRSkpIHsKKyAgICAgICAgR3N0Q29udGV4dCogZGlzcGxh
eUNvbnRleHQgPSBnc3RfY29udGV4dF9uZXcoR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFLCBU
UlVFKTsKKyAgICAgICAgZ3N0X2NvbnRleHRfc2V0X2dsX2Rpc3BsYXkoZGlzcGxheUNvbnRleHQs
IGdzdEdMRGlzcGxheSgpKTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlDb250ZXh0OworICAgIH0K
KworICAgIGlmICghZ19zdHJjbXAwKGNvbnRleHRUeXBlLCAiZ3N0LmdsLmFwcF9jb250ZXh0Iikp
IHsKKyAgICAgICAgR3N0Q29udGV4dCogYXBwQ29udGV4dCA9IGdzdF9jb250ZXh0X25ldygiZ3N0
LmdsLmFwcF9jb250ZXh0IiwgVFJVRSk7CisgICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGFwcENvbnRleHQpOworI2lmIEdTVF9D
SEVDS19WRVJTSU9OKDEsIDEyLCAwKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1
cmUsICJjb250ZXh0IiwgR1NUX1RZUEVfR0xfQ09OVEVYVCwgZ3N0R0xDb250ZXh0KCksIG51bGxw
dHIpOworI2Vsc2UKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4
dCIsIEdTVF9HTF9UWVBFX0NPTlRFWFQsIGdzdEdMQ29udGV4dCgpLCBudWxscHRyKTsKKyNlbmRp
ZgorICAgICAgICByZXR1cm4gYXBwQ29udGV4dDsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmVuc3VyZUdzdEdMQ29u
dGV4dCgpCit7CisgICAgaWYgKG1fZ2xDb250ZXh0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGF1dG8mIHNoYXJlZERpc3BsYXkgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlG
b3JDb21wb3NpdGluZygpOworCisgICAgLy8gVGhlIGZsb2F0aW5nIHJlZiByZW1vdmFsIHN1cHBv
cnQgd2FzIGFkZGVkIGluIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9p
ZD03NDMwNjIuCisgICAgYm9vbCBzaG91bGRBZG9wdFJlZiA9IHdlYmtpdEdzdENoZWNrVmVyc2lv
bigxLCAxNCwgMCk7CisgICAgaWYgKCFtX2dsRGlzcGxheSkgeworI2lmIFBMQVRGT1JNKFgxMSkK
KyNpZiBVU0UoR0xYKQorICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWRE
aXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQ3Jl
YXRpbmcgWDExIHNoYXJlZCBHTCBkaXNwbGF5Iik7CisgICAgICAgICAgICBpZiAoc2hvdWxkQWRv
cHRSZWYpCisgICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJ
U1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZv
cm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9k
aXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVgxMT4o
c2hhcmVkRGlzcGxheSkubmF0aXZlKCkpKTsKKyAgICAgICAgfQorI2VsaWYgVVNFKEVHTCkKKyAg
ICAgICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheVgxMT4oc2hhcmVkRGlzcGxheSkpIHsKKyAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNyZWF0aW5nIFgxMSBzaGFyZWQg
RUdMIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAg
ICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlz
cGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDEx
PihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9l
Z2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFy
ZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICAgICAgfQorI2VuZGlmCisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKFdBWUxBTkQpCisgICAgICAgIGlmIChpczxQbGF0Zm9ybURpc3BsYXlXYXls
YW5kPihzaGFyZWREaXNwbGF5KSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiQ3JlYXRpbmcgV2F5bGFuZCBzaGFyZWQgZGlzcGxheSIpOworICAgICAgICAgICAg
aWYgKHNob3VsZEFkb3B0UmVmKQorICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRH
UmVmKEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxh
eShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNw
bGF5KCkpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9nbERpc3BsYXkg
PSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXko
ZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5V2F5bGFuZD4oc2hhcmVkRGlzcGxheSkuZWdsRGlzcGxh
eSgpKSk7CisgICAgICAgIH0KKyNlbmRpZgorCisjaWYgVVNFKFdQRV9SRU5ERVJFUikKKyAgICAg
ICAgaWYgKGlzPFBsYXRmb3JtRGlzcGxheUxpYldQRT4oc2hhcmVkRGlzcGxheSkpIHsKKyAgICAg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkNyZWF0aW5nIFdQRSBzaGFyZWQg
RUdMIGRpc3BsYXkiKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAg
ICAgICAgICBtX2dsRGlzcGxheSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlz
cGxheV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5TGli
V1BFPihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxh
eV9lZ2xfbmV3X3dpdGhfZWdsX2Rpc3BsYXkoZG93bmNhc3Q8UGxhdGZvcm1EaXNwbGF5TGliV1BF
PihzaGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAg
ICAgICAgQVNTRVJUKG1fZ2xEaXNwbGF5KTsKKyAgICB9CisKKyAgICBHTENvbnRleHQqIHdlYmtp
dENvbnRleHQgPSBzaGFyZWREaXNwbGF5LnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICAvLyBFR0wg
YW5kIEdMWCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBubyBuZWVkIGZvciBpZmRlZnMgaGVyZS4K
KyAgICBHc3RHTFBsYXRmb3JtIGdsUGxhdGZvcm0gPSB3ZWJraXRDb250ZXh0LT5pc0VHTENvbnRl
eHQoKSA/IEdTVF9HTF9QTEFURk9STV9FR0wgOiBHU1RfR0xfUExBVEZPUk1fR0xYOworCisjaWYg
VVNFKE9QRU5HTF9FUykKKyAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9BUElfR0xFUzI7Cisj
ZWxpZiBVU0UoT1BFTkdMKQorICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9PUEVOR0w7
CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisKKyAgICBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIGNvbnRleHRIYW5kbGUgPSB3ZWJraXRDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHRIYW5kbGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChzaG91bGRBZG9wdFJlZikKKyAgICAgICAgbV9nbENvbnRleHQgPSBhZG9w
dEdSZWYoZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQobV9nbERpc3BsYXkuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBnbEFQSSkp
OworICAgIGVsc2UKKyAgICAgICAgbV9nbENvbnRleHQgPSBnc3RfZ2xfY29udGV4dF9uZXdfd3Jh
cHBlZChtX2dsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4
dEhhbmRsZSksIGdsUGxhdGZvcm0sIGdsQVBJKTsKKworICAgIC8vIEFjdGl2YXRlIGFuZCBmaWxs
IHRoZSBHU3RyZWFtZXIgd3JhcHBlZCBjb250ZXh0IHdpdGggdGhlIFdlYmtpdCdzIHNoYXJlZCBv
bmUuCisgICAgYXV0byBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQo
KTsKKyAgICB3ZWJraXRDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAoZ3N0
X2dsX2NvbnRleHRfYWN0aXZhdGUobV9nbENvbnRleHQuZ2V0KCksIFRSVUUpKSB7CisgICAgICAg
IEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgaWYgKCFnc3RfZ2xfY29udGV4
dF9maWxsX2luZm8obV9nbENvbnRleHQuZ2V0KCksICZlcnJvci5vdXRQdHIoKSkpCisgICAgICAg
ICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGZpbGwgaW4gR1N0cmVhbWVyIGNvbnRleHQ6ICVz
IiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICBnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShtX2ds
Q29udGV4dC5nZXQoKSwgRkFMU0UpOworICAgIH0gZWxzZQorICAgICAgICBHU1RfV0FSTklORygi
RmFpbGVkIHRvIGFjdGl2YXRlIEdTdHJlYW1lciBjb250ZXh0ICUiIEdTVF9QVFJfRk9STUFULCBt
X2dsQ29udGV4dC5nZXQoKSk7CisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAg
ICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCisKKy8vIFJldHVybnMg
dGhlIHNpemUgb2YgdGhlIHZpZGVvCitGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Cit7CisjaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gp
CisgICAgLy8gV2hlbiB1c2luZyB0aGUgaG9sZXB1Y2ggd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGdl
dCB0aGUgdmlkZW8gZnJhbWVzIHNpemUsIHNvIHdlIGNhbid0IHVzZQorICAgIC8vIGl0LiBCdXQg
d2UgbmVlZCB0byByZXBvcnQgc29tZSBub24gZW1wdHkgbmF0dXJhbFNpemUgZm9yIHRoZSBwbGF5
ZXIncyBHcmFwaGljc0xheWVyCisgICAgLy8gdG8gYmUgcHJvcGVybHkgY3JlYXRlZC4KKyAgICBy
ZXR1cm4gc19ob2xlUHVuY2hEZWZhdWx0RnJhbWVTaXplOworI2VuZGlmCisKKyNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQorICAgIGlmICghbV9pc0xlZ2FjeVBsYXliaW4gJiYgIW1fY3VycmVudFZp
ZGVvU3RyZWFtSWQuaXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcj4gdmlkZW9UcmFjayA9IG1fdmlkZW9UcmFja3MuZ2V0KG1fY3VycmVudFZpZGVv
U3RyZWFtSWQpOworCisgICAgICAgIGlmICh2aWRlb1RyYWNrKSB7CisgICAgICAgICAgICBhdXRv
IHRhZ3MgPSBhZG9wdEdSZWYoZ3N0X3N0cmVhbV9nZXRfdGFncyh2aWRlb1RyYWNrLT5zdHJlYW0o
KSkpOworICAgICAgICAgICAgZ2ludCB3aWR0aCwgaGVpZ2h0OworCisgICAgICAgICAgICBpZiAo
dGFncyAmJiBnc3RfdGFnX2xpc3RfZ2V0X2ludCh0YWdzLmdldCgpLCBXRUJLSVRfTUVESUFfVFJB
Q0tfVEFHX1dJRFRILCAmd2lkdGgpICYmIGdzdF90YWdfbGlzdF9nZXRfaW50KHRhZ3MuZ2V0KCks
IFdFQktJVF9NRURJQV9UUkFDS19UQUdfSEVJR0hULCAmaGVpZ2h0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyAgICBpZiAoIWhhc1ZpZGVvKCkpCisgICAg
ICAgIHJldHVybiBGbG9hdFNpemUoKTsKKworICAgIGlmICghbV92aWRlb1NpemUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gbV92aWRlb1NpemU7CisKKyAgICBhdXRvIHNhbXBsZUxvY2tlciA9
IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOworICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBs
ZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKKworICAgIEdzdENhcHMqIGNh
cHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzKG1fc2FtcGxlLmdldCgpKTsKKyAgICBpZiAoIWNhcHMp
CisgICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKKworICAgIC8vIFRPRE86IGhhbmRsZSBwb3Nz
aWJsZSBjbGVhbiBhcGVydHVyZSBkYXRhLiBTZWUKKyAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdu
b21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2NTcxCisgICAgLy8gVE9ETzogaGFuZGxlIHBvc3Np
YmxlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gU2VlCisgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5n
bm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjMyNgorCisgICAgLy8gR2V0IHRoZSB2aWRlbyBQ
QVIgYW5kIG9yaWdpbmFsIHNpemUsIGlmIHRoaXMgZmFpbHMgdGhlCisgICAgLy8gdmlkZW8tc2lu
ayBoYXMgbGlrZWx5IG5vdCB5ZXQgbmVnb3RpYXRlZCBpdHMgY2Fwcy4KKyAgICBpbnQgcGl4ZWxB
c3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGU7
CisgICAgSW50U2l6ZSBvcmlnaW5hbFNpemU7CisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0Owor
ICAgIGlmICghZ2V0VmlkZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMoY2Fwcywgb3JpZ2luYWxTaXpl
LCBmb3JtYXQsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5v
bWluYXRvciwgc3RyaWRlKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOworCisjaWYgVVNF
KFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgY29tcG9z
aXRpbmcsIGlmIHRoZSB2aWRlbyBpcyB0YWdnZWQgYXMgcm90YXRlZCA5MCBvciAyNzAgZGVncmVl
cywgc3dhcCB3aWR0aCBhbmQgaGVpZ2h0LgorICAgIGlmIChtX3JlbmRlcmluZ0NhbkJlQWNjZWxl
cmF0ZWQpIHsKKyAgICAgICAgaWYgKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbi51c2VzV2lkdGhB
c0hlaWdodCgpKQorICAgICAgICAgICAgb3JpZ2luYWxTaXplID0gb3JpZ2luYWxTaXplLnRyYW5z
cG9zZWRTaXplKCk7CisgICAgfQorI2VuZGlmCisKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJPcmlnaW5hbCB2aWRlbyBzaXplOiAlZHglZCIsIG9yaWdpbmFsU2l6ZS53aWR0aCgp
LCBvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgIlBpeGVsIGFzcGVjdCByYXRpbzogJWQvJWQiLCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9y
LCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpOworCisgICAgLy8gQ2FsY3VsYXRlIERBUiBi
YXNlZCBvbiBQQVIgYW5kIHZpZGVvIHNpemUuCisgICAgaW50IGRpc3BsYXlXaWR0aCA9IG9yaWdp
bmFsU2l6ZS53aWR0aCgpICogcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvcjsKKyAgICBpbnQgZGlz
cGxheUhlaWdodCA9IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAqIHBpeGVsQXNwZWN0UmF0aW9EZW5v
bWluYXRvcjsKKworICAgIC8vIERpdmlkZSBkaXNwbGF5IHdpZHRoIGFuZCBoZWlnaHQgYnkgdGhl
aXIgR0NEIHRvIGF2b2lkIHBvc3NpYmxlIG92ZXJmbG93cy4KKyAgICBpbnQgZGlzcGxheUFzcGVj
dFJhdGlvR0NEID0gZ3JlYXRlc3RDb21tb25EaXZpc29yKGRpc3BsYXlXaWR0aCwgZGlzcGxheUhl
aWdodCk7CisgICAgZGlzcGxheVdpZHRoIC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKKyAgICBk
aXNwbGF5SGVpZ2h0IC89IGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKKworICAgIC8vIEFwcGx5IERB
UiB0byBvcmlnaW5hbCB2aWRlbyBzaXplLiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGlu
IHh2aW1hZ2VzaW5rJ3Mgc2V0Y2FwcyBmdW5jdGlvbi4KKyAgICBndWludDY0IHdpZHRoID0gMCwg
aGVpZ2h0ID0gMDsKKyAgICBpZiAoIShvcmlnaW5hbFNpemUuaGVpZ2h0KCkgJSBkaXNwbGF5SGVp
Z2h0KSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJLZWVwaW5nIHZp
ZGVvIG9yaWdpbmFsIGhlaWdodCIpOworICAgICAgICB3aWR0aCA9IGdzdF91dGlsX3VpbnQ2NF9z
Y2FsZV9pbnQob3JpZ2luYWxTaXplLmhlaWdodCgpLCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWln
aHQpOworICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUu
aGVpZ2h0KCkpOworICAgIH0gZWxzZSBpZiAoIShvcmlnaW5hbFNpemUud2lkdGgoKSAlIGRpc3Bs
YXlXaWR0aCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiS2VlcGlu
ZyB2aWRlbyBvcmlnaW5hbCB3aWR0aCIpOworICAgICAgICBoZWlnaHQgPSBnc3RfdXRpbF91aW50
NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBkaXNwbGF5SGVpZ2h0LCBkaXNwbGF5
V2lkdGgpOworICAgICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6
ZS53aWR0aCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJBcHByb3hpbWF0aW5nIHdoaWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0
Iik7CisgICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNp
emUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7CisgICAgICAgIGhlaWdo
dCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgfQor
CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTmF0dXJhbCBzaXplOiAlIiBHX0dV
SU5UNjRfRk9STUFUICJ4JSIgR19HVUlOVDY0X0ZPUk1BVCwgd2lkdGgsIGhlaWdodCk7CisgICAg
bV92aWRlb1NpemUgPSBGbG9hdFNpemUoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCksIHN0YXRpY19j
YXN0PGludD4oaGVpZ2h0KSk7CisgICAgcmV0dXJuIG1fdmlkZW9TaXplOworfQorCit2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKK3sKKyAg
ICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyB2b2x1bWU6ICVmIiwgdm9sdW1lKTsKKyAgICBn
c3Rfc3RyZWFtX3ZvbHVtZV9zZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR1NUX1NU
UkVBTV9WT0xVTUVfRk9STUFUX0xJTkVBUiwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2b2x1bWUpKTsK
K30KKworZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp2b2x1bWUoKSBjb25zdAor
eworICAgIGlmICghbV92b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBnc3Rfc3RyZWFtX3ZvbHVtZV9nZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwg
R1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJTkVBUik7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpCit7CisgICAgaWYg
KCFtX3BsYXllciB8fCAhbV92b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgZG91
YmxlIHZvbHVtZTsKKyAgICB2b2x1bWUgPSBnc3Rfc3RyZWFtX3ZvbHVtZV9nZXRfdm9sdW1lKG1f
dm9sdW1lRWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJTkVBUik7Cisg
ICAgLy8gZ2V0X3ZvbHVtZSgpIGNhbiByZXR1cm4gdmFsdWVzIHN1cGVyaW9yIHRvIDEuMCBpZiB0
aGUgdXNlcgorICAgIC8vIGFwcGxpZXMgc29mdHdhcmUgdXNlciBnYWluIHZpYSB0aGlyZCBwYXJ0
eSBhcHBsaWNhdGlvbiAoR05PTUUKKyAgICAvLyB2b2x1bWUgY29udHJvbCBmb3IgaW5zdGFuY2Up
LgorICAgIHZvbHVtZSA9IENMQU1QKHZvbHVtZSwgMC4wLCAxLjApOworICAgIG1fcGxheWVyLT52
b2x1bWVDaGFuZ2VkKHN0YXRpY19jYXN0PGZsb2F0Pih2b2x1bWUpKTsKK30KKwordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZvbHVtZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVu
IG1fdm9sdW1lRWxlbWVudCByZWNlaXZlcyB0aGUgbm90aWZ5Ojp2b2x1bWUgc2lnbmFsLgorICAg
IEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBlbGluZSgpLCAiVm9sdW1lIGNoYW5nZWQgdG86
ICVmIiwgcGxheWVyLT52b2x1bWUoKSk7CisKKyAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlm
eShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpWb2x1bWVDaGFuZ2VkLCBbcGxheWVyXSB7CisgICAg
ICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKKyAgICB9KTsKK30KKwor
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5l
dHdvcmtTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmV0d29ya1N0YXRlOworfQorCitN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlYWR5
U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlYWR5U3RhdGU7Cit9CisKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzaXplQ2hhbmdlZCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldE11dGVk
KGJvb2wgbXV0ZSkKK3sKKyAgICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBjdXJyZW50VmFsdWUgPSBtdXRlZCgpOworICAgIGlmIChjdXJyZW50VmFs
dWUgPT0gbXV0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVs
aW5lKCksICJTZXQgbXV0ZWQgdG8gJXMiLCB0b1N0cmluZyhtdXRlKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBnX29iamVjdF9zZXQobV92b2x1bWVFbGVtZW50LmdldCgpLCAibXV0ZSIsIG11dGUsIG51
bGxwdHIpOworfQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bXV0ZWQoKSBj
b25zdAoreworICAgIGlmICghbV92b2x1bWVFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBnYm9vbGVhbiBtdXRlZDsKKyAgICBnX29iamVjdF9nZXQobV92b2x1bWVFbGVtZW50
LmdldCgpLCAibXV0ZSIsICZtdXRlZCwgbnVsbHB0cik7CisgICAgR1NUX0lORk9fT0JKRUNUKHBp
cGVsaW5lKCksICJQbGF5ZXIgaXMgbXV0ZWQ6ICVzIiwgdG9TdHJpbmcoc3RhdGljX2Nhc3Q8Ym9v
bD4obXV0ZWQpKS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gbXV0ZWQ7Cit9CisKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZk11dGUoKQoreworICAg
IGlmICghbV9wbGF5ZXIgfHwgIW1fdm9sdW1lRWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ2Jvb2xlYW4gbXV0ZWQ7CisgICAgZ19vYmplY3RfZ2V0KG1fdm9sdW1lRWxlbWVudC5nZXQo
KSwgIm11dGUiLCAmbXV0ZWQsIG51bGxwdHIpOworICAgIG1fcGxheWVyLT5tdXRlQ2hhbmdlZChz
dGF0aWNfY2FzdDxib29sPihtdXRlZCkpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bXV0ZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIq
IHBsYXllcikKK3sKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIG1fdm9sdW1lRWxlbWVudCBy
ZWNlaXZlcyB0aGUgbm90aWZ5OjptdXRlIHNpZ25hbC4KKyAgICBwbGF5ZXItPm1fbm90aWZpZXIt
Pm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpNdXRlQ2hhbmdlZCwgW3BsYXllcl0gewor
ICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mTXV0ZSgpOworICAgIH0pOworfQorCit2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBt
ZXNzYWdlKQoreworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnI7CisgICAgR1VuaXF1ZU91
dFB0cjxnY2hhcj4gZGVidWc7CisgICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcjsK
KyAgICBib29sIGlzc3VlRXJyb3IgPSB0cnVlOworICAgIGJvb2wgYXR0ZW1wdE5leHRMb2NhdGlv
biA9IGZhbHNlOworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3Nh
Z2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKyAgICBHc3RTdGF0ZSByZXF1ZXN0ZWRTdGF0ZSwg
Y3VycmVudFN0YXRlOworCisgICAgbV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bvc2l0
aW9uID0gZmFsc2U7CisKKyAgICBpZiAoc3RydWN0dXJlKSB7CisgICAgICAgIGNvbnN0IGdjaGFy
KiBtZXNzYWdlVHlwZU5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0cnVjdHVyZSk7CisK
KyAgICAgICAgLy8gUmVkaXJlY3QgbWVzc2FnZXMgYXJlIHNlbnQgZnJvbSBlbGVtZW50cywgbGlr
ZSBxdGRlbXV4LCB0bworICAgICAgICAvLyBub3RpZnkgb2YgdGhlIG5ldyBsb2NhdGlvbihzKSBv
ZiB0aGUgbWVkaWEuCisgICAgICAgIGlmICghZ19zdHJjbXAwKG1lc3NhZ2VUeXBlTmFtZSwgInJl
ZGlyZWN0IikpIHsKKyAgICAgICAgICAgIG1lZGlhTG9jYXRpb25DaGFuZ2VkKG1lc3NhZ2UpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgaWdub3Jl
IHN0YXRlIGNoYW5nZXMgZnJvbSBpbnRlcm5hbCBlbGVtZW50cy4gVGhleSBhcmUgZm9yd2FyZGVk
IHRvIHBsYXliaW4yIGFueXdheS4KKyAgICBib29sIG1lc3NhZ2VTb3VyY2VJc1BsYXliaW4gPSBH
U1RfTUVTU0FHRV9TUkMobWVzc2FnZSkgPT0gcmVpbnRlcnByZXRfY2FzdDxHc3RPYmplY3QqPiht
X3BpcGVsaW5lLmdldCgpKTsKKworICAgIEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJNZXNz
YWdlICVzIHJlY2VpdmVkIGZyb20gZWxlbWVudCAlcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRSht
ZXNzYWdlKSwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOworICAgIHN3aXRjaCAoR1NU
X01FU1NBR0VfVFlQRShtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NBR0VfRVJST1I6Cisg
ICAgICAgIGlmIChtX3Jlc2V0UGlwZWxpbmUgfHwgIW1fbWlzc2luZ1BsdWdpbkNhbGxiYWNrcy5p
c0VtcHR5KCkgfHwgbV9lcnJvck9jY3VyZWQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Z3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVyci5vdXRQdHIoKSwgJmRlYnVnLm91
dFB0cigpKTsKKyAgICAgICAgR1NUX0VSUk9SKCJFcnJvciAlZDogJXMgKHVybD0lcykiLCBlcnIt
PmNvZGUsIGVyci0+bWVzc2FnZSwgbV91cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAg
ICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGlu
ZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgIndlYmtpdC12aWRlby5lcnJvciIp
OworCisgICAgICAgIGVycm9yID0gTWVkaWFQbGF5ZXI6OkVtcHR5OworICAgICAgICBpZiAoZ19l
cnJvcl9tYXRjaGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJP
Ul9DT0RFQ19OT1RfRk9VTkQpCisgICAgICAgICAgICB8fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdl
dCgpLCBHU1RfU1RSRUFNX0VSUk9SLCBHU1RfU1RSRUFNX0VSUk9SX1dST05HX1RZUEUpCisgICAg
ICAgICAgICB8fCBnX2Vycm9yX21hdGNoZXMoZXJyLmdldCgpLCBHU1RfU1RSRUFNX0VSUk9SLCBH
U1RfU1RSRUFNX0VSUk9SX0ZBSUxFRCkKKyAgICAgICAgICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhl
cnIuZ2V0KCksIEdTVF9DT1JFX0VSUk9SLCBHU1RfQ09SRV9FUlJPUl9NSVNTSU5HX1BMVUdJTikK
KyAgICAgICAgICAgIHx8IGdfZXJyb3JfbWF0Y2hlcyhlcnIuZ2V0KCksIEdTVF9SRVNPVVJDRV9F
UlJPUiwgR1NUX1JFU09VUkNFX0VSUk9SX05PVF9GT1VORCkpCisgICAgICAgICAgICBlcnJvciA9
IE1lZGlhUGxheWVyOjpGb3JtYXRFcnJvcjsKKyAgICAgICAgZWxzZSBpZiAoZ19lcnJvcl9tYXRj
aGVzKGVyci5nZXQoKSwgR1NUX1NUUkVBTV9FUlJPUiwgR1NUX1NUUkVBTV9FUlJPUl9UWVBFX05P
VF9GT1VORCkpIHsKKyAgICAgICAgICAgIC8vIExldCB0aGUgbWVkaWFQbGF5ZXJDbGllbnQgaGFu
ZGxlIHRoZSBzdHJlYW0gZXJyb3IsIGluCisgICAgICAgICAgICAvLyB0aGlzIGNhc2UgdGhlIEhU
TUxNZWRpYUVsZW1lbnQgd2lsbCBlbWl0IGEgc3RhbGxlZAogICAgICAgICAgICAgLy8gZXZlbnQu
CiAgICAgICAgICAgICBHU1RfRVJST1IoIkRlY29kZSBlcnJvciwgbGV0IHRoZSBNZWRpYSBlbGVt
ZW50IGVtaXQgYSBzdGFsbGVkIGV2ZW50LiIpOwogICAgICAgICAgICAgbV9sb2FkaW5nU3RhbGxl
ZCA9IHRydWU7CkBAIC0xNDE4LDExNDMgKzIzODQsMTYzOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAg
ICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247CiAgICAgICAgIGdzdF9t
ZXNzYWdlX3BhcnNlX3N0cmVhbXNfc2VsZWN0ZWQobWVzc2FnZSwgJmNvbGxlY3Rpb24ub3V0UHRy
KCkpOwogCi0gICAgICAgIGlmICghY29sbGVjdGlvbikKLSAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBpZiAoIWNvbGxlY3Rpb24pCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBtX3N0
cmVhbUNvbGxlY3Rpb24uc3dhcChjb2xsZWN0aW9uKTsKKyAgICAgICAgbV9jdXJyZW50QXVkaW9T
dHJlYW1JZCA9ICIiOworICAgICAgICBtX2N1cnJlbnRWaWRlb1N0cmVhbUlkID0gIiI7CisgICAg
ICAgIG1fY3VycmVudFRleHRTdHJlYW1JZCA9ICIiOworCisgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3NpemUobWVzc2FnZSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAg
R1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRf
Z2V0X3N0cmVhbShtZXNzYWdlLCBpKTsKKyAgICAgICAgICAgIGlmICghc3RyZWFtKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBHc3RTdHJlYW1UeXBlIHR5cGUgPSBn
c3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0uZ2V0KCkpOworICAgICAgICAgICAgU3Ry
aW5nIHN0cmVhbUlkKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpKTsKKwor
ICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiU2VsZWN0aW5nICVzIHRy
YWNrIHdpdGggSUQ6ICVzIiwgZ3N0X3N0cmVhbV90eXBlX2dldF9uYW1lKHR5cGUpLCBzdHJlYW1J
ZC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIC8vIFBsYXliaW4zIGNhbiBzZW5kIG1vcmUg
dGhhbiBvbmUgc2VsZWN0ZWQgc3RyZWFtIG9mIHRoZSBzYW1lIHR5cGUKKyAgICAgICAgICAgIC8v
IGJ1dCB0aGVyZSdzIG5vIHByaW9yaXR5IG9yIG9yZGVyaW5nIHN5c3RlbSBpbiBwbGFjZSwgc28g
d2UgYXNzdW1lCisgICAgICAgICAgICAvLyB0aGUgc2VsZWN0ZWQgc3RyZWFtIGlzIHRoZSBsYXN0
IG9uZSBhcyByZXBvcnRlZCBieSBwbGF5YmluMy4KKyAgICAgICAgICAgIGlmICh0eXBlICYgR1NU
X1NUUkVBTV9UWVBFX0FVRElPKSB7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QXVkaW9TdHJl
YW1JZCA9IHN0cmVhbUlkOworICAgICAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBtX2F1ZGlvVHJh
Y2tzLmdldChtX2N1cnJlbnRBdWRpb1N0cmVhbUlkKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
dHJhY2spOworICAgICAgICAgICAgICAgIHRyYWNrLT5tYXJrQXNBY3RpdmUoKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9WSURFTykgeworICAgICAgICAg
ICAgICAgIG1fY3VycmVudFZpZGVvU3RyZWFtSWQgPSBzdHJlYW1JZDsKKyAgICAgICAgICAgICAg
ICBhdXRvIHRyYWNrID0gbV92aWRlb1RyYWNrcy5nZXQobV9jdXJyZW50VmlkZW9TdHJlYW1JZCk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKHRyYWNrKTsKKyAgICAgICAgICAgICAgICB0cmFjay0+
bWFya0FzQWN0aXZlKCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgJiBHU1RfU1RSRUFN
X1RZUEVfVEVYVCkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRUZXh0U3RyZWFtSWQgPSBzdHJl
YW1JZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBHU1RfV0FSTklORygiVW5r
bm93biBzdHJlYW0gdHlwZSB3aXRoIHN0cmVhbS1pZCAlcyIsIHN0cmVhbUlkLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJVbmhhbmRsZWQgR1N0cmVhbWVyIG1l
c3NhZ2UgdHlwZTogJXMiLCBHU1RfTUVTU0FHRV9UWVBFX05BTUUobWVzc2FnZSkpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpw
cm9jZXNzQnVmZmVyaW5nU3RhdHMoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBHc3RCdWZm
ZXJpbmdNb2RlIG1vZGU7CisgICAgZ3N0X21lc3NhZ2VfcGFyc2VfYnVmZmVyaW5nX3N0YXRzKG1l
c3NhZ2UsICZtb2RlLCBudWxscHRyLCBudWxscHRyLCBudWxscHRyKTsKKworICAgIGludCBwZXJj
ZW50YWdlOworICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyhtZXNzYWdlLCAmcGVyY2Vu
dGFnZSk7CisKKyAgICB1cGRhdGVCdWZmZXJpbmdTdGF0dXMobW9kZSwgcGVyY2VudGFnZSk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVNYXhUaW1lTG9hZGVk
KGRvdWJsZSBwZXJjZW50YWdlKQoreworICAgIE1lZGlhVGltZSBtZWRpYUR1cmF0aW9uID0gZHVy
YXRpb25NZWRpYVRpbWUoKTsKKyAgICBpZiAoIW1lZGlhRHVyYXRpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fbWF4VGltZUxvYWRlZCA9IE1lZGlhVGltZShwZXJjZW50YWdlICogc3RhdGlj
X2Nhc3Q8ZG91YmxlPih0b0dzdFVuc2lnbmVkNjRUaW1lKG1lZGlhRHVyYXRpb24pKSAvIDEwMCwg
R1NUX1NFQ09ORCk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmlu
Z10gVXBkYXRlZCBtYXhUaW1lTG9hZGVkOiAlcyIsIHRvU3RyaW5nKG1fbWF4VGltZUxvYWRlZCku
dXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1
cGRhdGVCdWZmZXJpbmdTdGF0dXMoR3N0QnVmZmVyaW5nTW9kZSBtb2RlLCBkb3VibGUgcGVyY2Vu
dGFnZSkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBt
b2RlOiAlcywgc3RhdHVzOiAlZiUlIiwgZW51bVRvU3RyaW5nKEdTVF9UWVBFX0JVRkZFUklOR19N
T0RFLCBtb2RlKS5kYXRhKCksIHBlcmNlbnRhZ2UpOworCisgICAgbV9kb3dubG9hZEZpbmlzaGVk
ID0gcGVyY2VudGFnZSA9PSAxMDA7CisgICAgbV9idWZmZXJpbmcgPSAhbV9kb3dubG9hZEZpbmlz
aGVkOworCisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBHU1RfQlVGRkVSSU5HX1NUUkVB
TTogeworICAgICAgICB1cGRhdGVNYXhUaW1lTG9hZGVkKHBlcmNlbnRhZ2UpOworCisgICAgICAg
IG1fYnVmZmVyaW5nUGVyY2VudGFnZSA9IHBlcmNlbnRhZ2U7CisgICAgICAgIGlmIChtX2Rvd25s
b2FkRmluaXNoZWQpCisgICAgICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKKworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBHU1RfQlVGRkVSSU5HX0RPV05MT0FEOiB7CisgICAgICAgIHVw
ZGF0ZU1heFRpbWVMb2FkZWQocGVyY2VudGFnZSk7CisKKyAgICAgICAgLy8gTWVkaWEgaXMgbm93
IGZ1bGx5IGxvYWRlZC4gSXQgd2lsbCBwbGF5IGV2ZW4gaWYgbmV0d29yayBjb25uZWN0aW9uIGlz
CisgICAgICAgIC8vIGN1dC4gQnVmZmVyaW5nIGlzIGRvbmUsIHJlbW92ZSB0aGUgZmlsbCBzb3Vy
Y2UgZnJvbSB0aGUgbWFpbiBsb29wLgorICAgICAgICBpZiAobV9kb3dubG9hZEZpbmlzaGVkKQor
ICAgICAgICAgICAgbV9maWxsVGltZXIuc3RvcCgpOworCisgICAgICAgIHVwZGF0ZVN0YXRlcygp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiVW5oYW5kbGVkIGJ1ZmZlcmluZyBtb2RlOiAlcyIsIGVudW1U
b1N0cmluZyhHU1RfVFlQRV9CVUZGRVJJTkdfTU9ERSwgbW9kZSkuZGF0YSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBVU0UoR1NUUkVB
TUVSX01QRUdUUykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzTXBl
Z1RzU2VjdGlvbihHc3RNcGVndHNTZWN0aW9uKiBzZWN0aW9uKQoreworICAgIEFTU0VSVChzZWN0
aW9uKTsKKworICAgIGlmIChzZWN0aW9uLT5zZWN0aW9uX3R5cGUgPT0gR1NUX01QRUdUU19TRUNU
SU9OX1BNVCkgeworICAgICAgICBjb25zdCBHc3RNcGVndHNQTVQqIHBtdCA9IGdzdF9tcGVndHNf
c2VjdGlvbl9nZXRfcG10KHNlY3Rpb24pOworICAgICAgICBtX21ldGFkYXRhVHJhY2tzLmNsZWFy
KCk7CisgICAgICAgIGZvciAoZ3VpbnQgaSA9IDA7IGkgPCBwbXQtPnN0cmVhbXMtPmxlbjsgKytp
KSB7CisgICAgICAgICAgICBjb25zdCBHc3RNcGVndHNQTVRTdHJlYW0qIHN0cmVhbSA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdzdE1wZWd0c1BNVFN0cmVhbSo+KGdfcHRyX2FycmF5X2luZGV4KHBtdC0+
c3RyZWFtcywgaSkpOworICAgICAgICAgICAgaWYgKHN0cmVhbS0+c3RyZWFtX3R5cGUgPT0gMHgw
NSB8fCBzdHJlYW0tPnN0cmVhbV90eXBlID49IDB4ODApIHsKKyAgICAgICAgICAgICAgICBBdG9t
U3RyaW5nIHBpZCA9IFN0cmluZzo6bnVtYmVyKHN0cmVhbS0+cGlkKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHRyYWNrID0gSW5iYW5kTWV0YWRhdGFUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGUoCisgICAgICAgICAgICAgICAgICAgIEluYmFuZFRleHRUcmFja1ByaXZhdGU6Ok1ldGFk
YXRhLCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpEYXRhLCBwaWQpOworCisgICAgICAgICAgICAg
ICAgLy8gNC43LjEwLjEyLjIgU291cmNpbmcgaW4tYmFuZCB0ZXh0IHRyYWNrcworICAgICAgICAg
ICAgICAgIC8vIElmIHRoZSBuZXcgdGV4dCB0cmFjaydzIGtpbmQgaXMgbWV0YWRhdGEsIHRoZW4g
c2V0IHRoZSB0ZXh0IHRyYWNrIGluLWJhbmQgbWV0YWRhdGEgdHJhY2sgZGlzcGF0Y2gKKyAgICAg
ICAgICAgICAgICAvLyB0eXBlIGFzIGZvbGxvd3MsIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBt
ZWRpYSByZXNvdXJjZToKKyAgICAgICAgICAgICAgICAvLyBMZXQgc3RyZWFtIHR5cGUgYmUgdGhl
IHZhbHVlIG9mIHRoZSAic3RyZWFtX3R5cGUiIGZpZWxkIGRlc2NyaWJpbmcgdGhlIHRleHQgdHJh
Y2sncyB0eXBlIGluIHRoZQorICAgICAgICAgICAgICAgIC8vIGZpbGUncyBwcm9ncmFtIG1hcCBz
ZWN0aW9uLCBpbnRlcnByZXRlZCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLiBMZXQgbGVu
Z3RoIGJlIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgIC8vIHRoZSAiRVNfaW5mb19sZW5n
dGgiIGZpZWxkIGZvciB0aGUgdHJhY2sgaW4gdGhlIHNhbWUgcGFydCBvZiB0aGUgcHJvZ3JhbSBt
YXAgc2VjdGlvbiwgaW50ZXJwcmV0ZWQKKyAgICAgICAgICAgICAgICAvLyBhcyBhbiBpbnRlZ2Vy
IGFzIGRlZmluZWQgYnkgdGhlIE1QRUctMiBzcGVjaWZpY2F0aW9uLiBMZXQgZGVzY3JpcHRvciBi
eXRlcyBiZSB0aGUgbGVuZ3RoIGJ5dGVzCisgICAgICAgICAgICAgICAgLy8gZm9sbG93aW5nIHRo
ZSAiRVNfaW5mb19sZW5ndGgiIGZpZWxkLiBUaGUgdGV4dCB0cmFjayBpbi1iYW5kIG1ldGFkYXRh
IHRyYWNrIGRpc3BhdGNoIHR5cGUgbXVzdCBiZQorICAgICAgICAgICAgICAgIC8vIHNldCB0byB0
aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyZWFtIHR5cGUgYnl0ZSBhbmQgdGhlIHplcm8gb3Ig
bW9yZSBkZXNjcmlwdG9yIGJ5dGVzIGJ5dGVzLAorICAgICAgICAgICAgICAgIC8vIGV4cHJlc3Nl
ZCBpbiBoZXhhZGVjaW1hbCB1c2luZyB1cHBlcmNhc2UgQVNDSUkgaGV4IGRpZ2l0cy4KKyAgICAg
ICAgICAgICAgICBTdHJpbmcgaW5iYW5kTWV0YWRhdGFUcmFja0Rpc3BhdGNoVHlwZTsKKyAgICAg
ICAgICAgICAgICBhcHBlbmRVbnNpZ25lZEFzSGV4Rml4ZWRTaXplKHN0cmVhbS0+c3RyZWFtX3R5
cGUsIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUsIDIpOworICAgICAgICAgICAgICAg
IGZvciAoZ3VpbnQgaiA9IDA7IGogPCBzdHJlYW0tPmRlc2NyaXB0b3JzLT5sZW47ICsraikgewor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBHc3RNcGVndHNEZXNjcmlwdG9yKiBkZXNjcmlwdG9y
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR3N0TXBlZ3RzRGVzY3JpcHRvcio+KGdfcHRyX2FycmF5X2lu
ZGV4KHN0cmVhbS0+ZGVzY3JpcHRvcnMsIGopKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChn
dWludCBrID0gMDsgayA8IGRlc2NyaXB0b3ItPmxlbmd0aDsgKytrKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kQnl0ZUFzSGV4KGRlc2NyaXB0b3ItPmRhdGFba10sIGluYmFuZE1ldGFk
YXRhVHJhY2tEaXNwYXRjaFR5cGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB0cmFjay0+c2V0SW5CYW5kTWV0YWRhdGFUcmFja0Rpc3BhdGNoVHlwZShpbmJhbmRNZXRhZGF0
YVRyYWNrRGlzcGF0Y2hUeXBlKTsKKworICAgICAgICAgICAgICAgIG1fbWV0YWRhdGFUcmFja3Mu
YWRkKHBpZCwgdHJhY2spOworICAgICAgICAgICAgICAgIG1fcGxheWVyLT5hZGRUZXh0VHJhY2so
KnRyYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IEF0b21TdHJpbmcgcGlkID0gU3RyaW5nOjpudW1iZXIoc2VjdGlvbi0+cGlkKTsKKyAgICAgICAg
UmVmUHRyPEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBt
X21ldGFkYXRhVHJhY2tzLmdldChwaWQpOworICAgICAgICBpZiAoIXRyYWNrKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIEdSZWZQdHI8R0J5dGVzPiBkYXRhID0gZ3N0X21wZWd0c19z
ZWN0aW9uX2dldF9kYXRhKHNlY3Rpb24pOworICAgICAgICBnc2l6ZSBzaXplOworICAgICAgICBj
b25zdCB2b2lkKiBieXRlcyA9IGdfYnl0ZXNfZ2V0X2RhdGEoZGF0YS5nZXQoKSwgJnNpemUpOwor
CisgICAgICAgIHRyYWNrLT5hZGREYXRhQ3VlKGN1cnJlbnRNZWRpYVRpbWUoKSwgY3VycmVudE1l
ZGlhVGltZSgpLCBieXRlcywgc2l6ZSk7CisgICAgfQorfQorI2VuZGlmCisKKyNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1Rh
YmxlT2ZDb250ZW50cyhHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIGlmIChtX2NoYXB0ZXJz
VHJhY2spCisgICAgICAgIG1fcGxheWVyLT5yZW1vdmVUZXh0VHJhY2soKm1fY2hhcHRlcnNUcmFj
ayk7CisKKyAgICBtX2NoYXB0ZXJzVHJhY2sgPSBJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpDaGFwdGVycywgSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZTo6R2VuZXJpYyk7CisgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFj
aygqbV9jaGFwdGVyc1RyYWNrKTsKKworICAgIEdSZWZQdHI8R3N0VG9jPiB0b2M7CisgICAgZ2Jv
b2xlYW4gdXBkYXRlZDsKKyAgICBnc3RfbWVzc2FnZV9wYXJzZV90b2MobWVzc2FnZSwgJnRvYy5v
dXRQdHIoKSwgJnVwZGF0ZWQpOworICAgIEFTU0VSVCh0b2MpOworCisgICAgZm9yIChHTGlzdCog
aSA9IGdzdF90b2NfZ2V0X2VudHJpZXModG9jLmdldCgpKTsgaTsgaSA9IGktPm5leHQpCisgICAg
ICAgIHByb2Nlc3NUYWJsZU9mQ29udGVudHNFbnRyeShzdGF0aWNfY2FzdDxHc3RUb2NFbnRyeSo+
KGktPmRhdGEpKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnByb2Nl
c3NUYWJsZU9mQ29udGVudHNFbnRyeShHc3RUb2NFbnRyeSogZW50cnkpCit7CisgICAgQVNTRVJU
KGVudHJ5KTsKKworICAgIGF1dG8gY3VlID0gR2VuZXJpY0N1ZURhdGE6OmNyZWF0ZSgpOworCisg
ICAgZ2ludDY0IHN0YXJ0ID0gLTEsIHN0b3AgPSAtMTsKKyAgICBnc3RfdG9jX2VudHJ5X2dldF9z
dGFydF9zdG9wX3RpbWVzKGVudHJ5LCAmc3RhcnQsICZzdG9wKTsKKyAgICBpZiAoc3RhcnQgIT0g
LTEpCisgICAgICAgIGN1ZS0+c2V0U3RhcnRUaW1lKE1lZGlhVGltZShzdGFydCwgR1NUX1NFQ09O
RCkpOworICAgIGlmIChzdG9wICE9IC0xKQorICAgICAgICBjdWUtPnNldEVuZFRpbWUoTWVkaWFU
aW1lKHN0b3AsIEdTVF9TRUNPTkQpKTsKKworICAgIEdzdFRhZ0xpc3QqIHRhZ3MgPSBnc3RfdG9j
X2VudHJ5X2dldF90YWdzKGVudHJ5KTsKKyAgICBpZiAodGFncykgeworICAgICAgICBnY2hhciog
dGl0bGUgPSBudWxscHRyOworICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyh0YWdzLCBH
U1RfVEFHX1RJVExFLCAmdGl0bGUpOworICAgICAgICBpZiAodGl0bGUpIHsKKyAgICAgICAgICAg
IGN1ZS0+c2V0Q29udGVudCh0aXRsZSk7CisgICAgICAgICAgICBnX2ZyZWUodGl0bGUpOworICAg
ICAgICB9CisgICAgfQorCisgICAgbV9jaGFwdGVyc1RyYWNrLT5hZGRHZW5lcmljQ3VlKGN1ZSk7
CisKKyAgICBmb3IgKEdMaXN0KiBpID0gZ3N0X3RvY19lbnRyeV9nZXRfc3ViX2VudHJpZXMoZW50
cnkpOyBpOyBpID0gaS0+bmV4dCkKKyAgICAgICAgcHJvY2Vzc1RhYmxlT2ZDb250ZW50c0VudHJ5
KHN0YXRpY19jYXN0PEdzdFRvY0VudHJ5Kj4oaS0+ZGF0YSkpOworfQorCit2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVyZ2VJbnZhbGlkQXVkaW9UcmFja3MoVmVjdG9yPFN0cmlu
Zz4gdmFsaWRUcmFja0lkcykKK3sKKyAgICBtX2F1ZGlvVHJhY2tzLnJlbW92ZUlmKFt2YWxpZFRy
YWNrSWRzXShhdXRvJiBrZXlBbmRWYWx1ZSkgeworICAgICAgICByZXR1cm4gIXZhbGlkVHJhY2tJ
ZHMuY29udGFpbnMoa2V5QW5kVmFsdWUua2V5KTsKKyAgICB9KTsKK30KKwordm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZFZpZGVvVHJhY2tzKFZlY3RvcjxTdHJp
bmc+IHZhbGlkVHJhY2tJZHMpCit7CisgICAgbV92aWRlb1RyYWNrcy5yZW1vdmVJZihbdmFsaWRU
cmFja0lkc10oYXV0byYga2V5QW5kVmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICF2YWxpZFRyYWNr
SWRzLmNvbnRhaW5zKGtleUFuZFZhbHVlLmtleSk7CisgICAgfSk7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRUZXh0VHJhY2tzKFZlY3RvcjxTdHJp
bmc+IHZhbGlkVHJhY2tJZHMpCit7CisgICAgbV90ZXh0VHJhY2tzLnJlbW92ZUlmKFt2YWxpZFRy
YWNrSWRzXShhdXRvJiBrZXlBbmRWYWx1ZSkgeworICAgICAgICByZXR1cm4gIXZhbGlkVHJhY2tJ
ZHMuY29udGFpbnMoa2V5QW5kVmFsdWUua2V5KTsKKyAgICB9KTsKK30KKyNlbmRpZgogCi0gICAg
ICAgIG1fc3RyZWFtQ29sbGVjdGlvbi5zd2FwKGNvbGxlY3Rpb24pOwotICAgICAgICBtX2N1cnJl
bnRBdWRpb1N0cmVhbUlkID0gIiI7Ci0gICAgICAgIG1fY3VycmVudFZpZGVvU3RyZWFtSWQgPSAi
IjsKLSAgICAgICAgbV9jdXJyZW50VGV4dFN0cmVhbUlkID0gIiI7Cit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6dXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2soR3N0Qmlu
KiBiaW4sIEdzdEVsZW1lbnQqIGVsZW1lbnQsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciog
cGxheWVyKQoreworICAgIGlmIChnX3N0cmNtcDAoR19PQkpFQ1RfVFlQRV9OQU1FKGVsZW1lbnQp
LCAiR3N0RG93bmxvYWRCdWZmZXIiKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IGdzdF9tZXNzYWdlX3N0cmVhbXNfc2VsZWN0ZWRfZ2V0X3NpemUobWVzc2Fn
ZSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAg
ICAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW0+IHN0cmVhbSA9IGdzdF9tZXNzYWdlX3N0cmVhbXNf
c2VsZWN0ZWRfZ2V0X3N0cmVhbShtZXNzYWdlLCBpKTsKLSAgICAgICAgICAgIGlmICghc3RyZWFt
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIHBsYXllci0+bV9kb3dubG9hZEJ1ZmZl
ciA9IGVsZW1lbnQ7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGJp
biwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4odXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2Fs
bGJhY2spLCBwbGF5ZXIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChlbGVtZW50LCAi
bm90aWZ5Ojp0ZW1wLWxvY2F0aW9uIiwgR19DQUxMQkFDSyhkb3dubG9hZEJ1ZmZlckZpbGVDcmVh
dGVkQ2FsbGJhY2spLCBwbGF5ZXIpOwogCi0gICAgICAgICAgICBHc3RTdHJlYW1UeXBlIHR5cGUg
PSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0uZ2V0KCkpOwotICAgICAgICAgICAg
U3RyaW5nIHN0cmVhbUlkKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkpKTsK
KyAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IG9sZERvd25sb2FkVGVtcGxhdGU7CisgICAgZ19vYmpl
Y3RfZ2V0KGVsZW1lbnQsICJ0ZW1wLXRlbXBsYXRlIiwgJm9sZERvd25sb2FkVGVtcGxhdGUub3V0
UHRyKCksIG51bGxwdHIpOwogCi0gICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJTZWxlY3RpbmcgJXMgdHJhY2sgd2l0aCBJRDogJXMiLCBnc3Rfc3RyZWFtX3R5cGVfZ2V0
X25hbWUodHlwZSksIHN0cmVhbUlkLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgLy8gUGxh
eWJpbjMgY2FuIHNlbmQgbW9yZSB0aGFuIG9uZSBzZWxlY3RlZCBzdHJlYW0gb2YgdGhlIHNhbWUg
dHlwZQotICAgICAgICAgICAgLy8gYnV0IHRoZXJlJ3Mgbm8gcHJpb3JpdHkgb3Igb3JkZXJpbmcg
c3lzdGVtIGluIHBsYWNlLCBzbyB3ZSBhc3N1bWUKLSAgICAgICAgICAgIC8vIHRoZSBzZWxlY3Rl
ZCBzdHJlYW0gaXMgdGhlIGxhc3Qgb25lIGFzIHJlcG9ydGVkIGJ5IHBsYXliaW4zLgotICAgICAg
ICAgICAgaWYgKHR5cGUgJiBHU1RfU1RSRUFNX1RZUEVfQVVESU8pIHsKLSAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRBdWRpb1N0cmVhbUlkID0gc3RyZWFtSWQ7Ci0gICAgICAgICAgICAgICAgYXV0
byB0cmFjayA9IG1fYXVkaW9UcmFja3MuZ2V0KG1fY3VycmVudEF1ZGlvU3RyZWFtSWQpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVCh0cmFjayk7Ci0gICAgICAgICAgICAgICAgdHJhY2stPm1hcmtB
c0FjdGl2ZSgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlICYgR1NUX1NUUkVBTV9UWVBF
X1ZJREVPKSB7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50VmlkZW9TdHJlYW1JZCA9IHN0cmVh
bUlkOwotICAgICAgICAgICAgICAgIGF1dG8gdHJhY2sgPSBtX3ZpZGVvVHJhY2tzLmdldChtX2N1
cnJlbnRWaWRlb1N0cmVhbUlkKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQodHJhY2spOwotICAg
ICAgICAgICAgICAgIHRyYWNrLT5tYXJrQXNBY3RpdmUoKTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAodHlwZSAmIEdTVF9TVFJFQU1fVFlQRV9URVhUKQotICAgICAgICAgICAgICAgIG1fY3VycmVu
dFRleHRTdHJlYW1JZCA9IHN0cmVhbUlkOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIEdTVF9XQVJOSU5HKCJVbmtub3duIHN0cmVhbSB0eXBlIHdpdGggc3RyZWFtLWlkICVzIiwg
c3RyZWFtSWQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlVu
aGFuZGxlZCBHU3RyZWFtZXIgbWVzc2FnZSB0eXBlOiAlcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFN
RShtZXNzYWdlKSk7Ci0gICAgICAgIGJyZWFrOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmV3RG93
bmxvYWRUZW1wbGF0ZShnX2J1aWxkX2ZpbGVuYW1lKEdfRElSX1NFUEFSQVRPUl9TLCAidmFyIiwg
InRtcCIsICJXZWJLaXQtTWVkaWEtWFhYWFhYIiwgbnVsbHB0cikpOworICAgIGdfb2JqZWN0X3Nl
dChlbGVtZW50LCAidGVtcC10ZW1wbGF0ZSIsIG5ld0Rvd25sb2FkVGVtcGxhdGUuZ2V0KCksIG51
bGxwdHIpOworICAgIEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBlbGluZSgpLCAiUmVjb25m
aWd1cmVkIGZpbGUgZG93bmxvYWQgdGVtcGxhdGUgZnJvbSAnJXMnIHRvICclcyciLCBvbGREb3du
bG9hZFRlbXBsYXRlLmdldCgpLCBuZXdEb3dubG9hZFRlbXBsYXRlLmdldCgpKTsKKworICAgIHBs
YXllci0+cHVyZ2VPbGREb3dubG9hZEZpbGVzKG9sZERvd25sb2FkVGVtcGxhdGUuZ2V0KCkpOwor
fQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZG93bmxvYWRCdWZmZXJGaWxl
Q3JlYXRlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQorewor
ICAgIEFTU0VSVChwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIpOworCisgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHBsYXllci0+bV9kb3dubG9hZEJ1ZmZlci5nZXQoKSwg
cmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4oZG93bmxvYWRCdWZmZXJGaWxlQ3JlYXRlZENhbGxi
YWNrKSwgcGxheWVyKTsKKworICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gZG93bmxvYWRGaWxlOwor
ICAgIGdfb2JqZWN0X2dldChwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIuZ2V0KCksICJ0ZW1wLWxv
Y2F0aW9uIiwgJmRvd25sb2FkRmlsZS5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcGxheWVyLT5t
X2Rvd25sb2FkQnVmZmVyID0gbnVsbHB0cjsKKworICAgIGlmIChVTkxJS0VMWSghRmlsZVN5c3Rl
bTo6ZGVsZXRlRmlsZShkb3dubG9hZEZpbGUuZ2V0KCkpKSkgeworICAgICAgICBHU1RfV0FSTklO
RygiQ291bGRuJ3QgdW5saW5rIG1lZGlhIHRlbXBvcmFyeSBmaWxlICVzIGFmdGVyIGNyZWF0aW9u
IiwgZG93bmxvYWRGaWxlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEdT
VF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBlbGluZSgpLCAiVW5saW5rZWQgbWVkaWEgdGVtcG9y
YXJ5IGZpbGUgJXMgYWZ0ZXIgY3JlYXRpb24iLCBkb3dubG9hZEZpbGUuZ2V0KCkpOwogfQogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc0J1ZmZlcmluZ1N0YXRzKEdz
dE1lc3NhZ2UqIG1lc3NhZ2UpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVy
Z2VPbGREb3dubG9hZEZpbGVzKGNvbnN0IGNoYXIqIGRvd25sb2FkRmlsZVRlbXBsYXRlKQogewot
ICAgIEdzdEJ1ZmZlcmluZ01vZGUgbW9kZTsKLSAgICBnc3RfbWVzc2FnZV9wYXJzZV9idWZmZXJp
bmdfc3RhdHMobWVzc2FnZSwgJm1vZGUsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpOworICAg
IGlmICghZG93bmxvYWRGaWxlVGVtcGxhdGUpCisgICAgICAgIHJldHVybjsKIAotICAgIGludCBw
ZXJjZW50YWdlOwotICAgIGdzdF9tZXNzYWdlX3BhcnNlX2J1ZmZlcmluZyhtZXNzYWdlLCAmcGVy
Y2VudGFnZSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiB0ZW1wbGF0ZVBhdGgoZ19wYXRoX2dldF9k
aXJuYW1lKGRvd25sb2FkRmlsZVRlbXBsYXRlKSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiB0ZW1w
bGF0ZUZpbGUoZ19wYXRoX2dldF9iYXNlbmFtZShkb3dubG9hZEZpbGVUZW1wbGF0ZSkpOworICAg
IFN0cmluZyB0ZW1wbGF0ZVBhdHRlcm4gPSBTdHJpbmcodGVtcGxhdGVGaWxlLmdldCgpKS5yZXBs
YWNlKCJYIiwgIj8iKTsKIAotICAgIHVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhtb2RlLCBwZXJjZW50
YWdlKTsKKyAgICBmb3IgKGF1dG8mIGZpbGVQYXRoIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9y
eSh0ZW1wbGF0ZVBhdGguZ2V0KCksIHRlbXBsYXRlUGF0dGVybikpIHsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZpbGVQYXRoKSkpIHsKKyAgICAgICAgICAg
IEdTVF9XQVJOSU5HKCJDb3VsZG4ndCB1bmxpbmsgbGVnYWN5IG1lZGlhIHRlbXBvcmFyeSBmaWxl
OiAlcyIsIGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBHU1RfVFJBQ0UoIlVubGlua2VkIGxlZ2FjeSBtZWRpYSB0ZW1w
b3JhcnkgZmlsZTogJXMiLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICB9CiB9CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVNYXhUaW1lTG9hZGVkKGRvdWJs
ZSBwZXJjZW50YWdlKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmFzeW5jU3Rh
dGVDaGFuZ2VEb25lKCkKIHsKLSAgICBNZWRpYVRpbWUgbWVkaWFEdXJhdGlvbiA9IGR1cmF0aW9u
TWVkaWFUaW1lKCk7Ci0gICAgaWYgKCFtZWRpYUR1cmF0aW9uKQorICAgIGlmICghbV9waXBlbGlu
ZSB8fCBtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9tYXhUaW1lTG9h
ZGVkID0gTWVkaWFUaW1lKHBlcmNlbnRhZ2UgKiBzdGF0aWNfY2FzdDxkb3VibGU+KHRvR3N0VW5z
aWduZWQ2NFRpbWUobWVkaWFEdXJhdGlvbikpIC8gMTAwLCBHU1RfU0VDT05EKTsKLSAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBVcGRhdGVkIG1heFRpbWVMb2Fk
ZWQ6ICVzIiwgdG9TdHJpbmcobV9tYXhUaW1lTG9hZGVkKS51dGY4KCkuZGF0YSgpKTsKKyAgICBp
ZiAobV9zZWVraW5nKSB7CisgICAgICAgIGlmIChtX3NlZWtJc1BlbmRpbmcpCisgICAgICAgICAg
ICB1cGRhdGVTdGF0ZXMoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJbU2Vla10gc2Vla2VkIHRvICVzIiwgdG9TdHJpbmcobV9zZWVr
VGltZSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBtX3NlZWtpbmcgPSBmYWxzZTsKKyAg
ICAgICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Cisg
ICAgICAgICAgICBpZiAobV90aW1lT2ZPdmVybGFwcGluZ1NlZWsgIT0gbV9zZWVrVGltZSAmJiBt
X3RpbWVPZk92ZXJsYXBwaW5nU2Vlay5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBzZWVr
KG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrKTsKKyAgICAgICAgICAgICAgICBtX3RpbWVPZk92ZXJs
YXBwaW5nU2VlayA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3RpbWVPZk92ZXJsYXBwaW5nU2Vl
ayA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgICAgICAgICAgLy8gVGhlIHBpcGVs
aW5lIGNhbiBzdGlsbCBoYXZlIGEgcGVuZGluZyBzdGF0ZS4gSW4gdGhpcyBjYXNlIGEgcG9zaXRp
b24gcXVlcnkgd2lsbCBmYWlsLgorICAgICAgICAgICAgLy8gUmlnaHQgbm93IHdlIGNhbiB1c2Ug
bV9zZWVrVGltZSBhcyBhIGZhbGxiYWNrLgorICAgICAgICAgICAgbV9jYW5GYWxsQmFja1RvTGFz
dEZpbmlzaGVkU2Vla1Bvc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIHRpbWVDaGFuZ2VkKCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgdXBkYXRlU3RhdGVzKCk7CiB9CiAKLXZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVCdWZmZXJpbmdTdGF0dXMoR3N0
QnVmZmVyaW5nTW9kZSBtb2RlLCBkb3VibGUgcGVyY2VudGFnZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogewotICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIG1vZGU6ICVzLCBzdGF0dXM6ICVmJSUiLCBlbnVtVG9T
dHJpbmcoR1NUX1RZUEVfQlVGRkVSSU5HX01PREUsIG1vZGUpLmRhdGEoKSwgcGVyY2VudGFnZSk7
CisgICAgaWYgKCFtX3BpcGVsaW5lKQorICAgICAgICByZXR1cm47CiAKLSAgICBtX2Rvd25sb2Fk
RmluaXNoZWQgPSBwZXJjZW50YWdlID09IDEwMDsKLSAgICBtX2J1ZmZlcmluZyA9ICFtX2Rvd25s
b2FkRmluaXNoZWQ7CisgICAgaWYgKG1fZXJyb3JPY2N1cmVkKQorICAgICAgICByZXR1cm47CiAK
LSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdTVF9CVUZGRVJJTkdfU1RSRUFNOiB7Ci0g
ICAgICAgIHVwZGF0ZU1heFRpbWVMb2FkZWQocGVyY2VudGFnZSk7CisgICAgTWVkaWFQbGF5ZXI6
Ok5ldHdvcmtTdGF0ZSBvbGROZXR3b3JrU3RhdGUgPSBtX25ldHdvcmtTdGF0ZTsKKyAgICBNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOworICAgIEdz
dFN0YXRlIHBlbmRpbmc7CisgICAgR3N0U3RhdGUgc3RhdGU7CisgICAgYm9vbCBzdGF0ZVJlYWxs
eUNoYW5nZWQgPSBmYWxzZTsKIAotICAgICAgICBtX2J1ZmZlcmluZ1BlcmNlbnRhZ2UgPSBwZXJj
ZW50YWdlOwotICAgICAgICBpZiAobV9kb3dubG9hZEZpbmlzaGVkKQotICAgICAgICAgICAgdXBk
YXRlU3RhdGVzKCk7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGluZywg
MjUwICogR1NUX05TRUNPTkQpOworICAgIGlmIChzdGF0ZSAhPSBtX2N1cnJlbnRTdGF0ZSkgewor
ICAgICAgICBtX29sZFN0YXRlID0gbV9jdXJyZW50U3RhdGU7CisgICAgICAgIG1fY3VycmVudFN0
YXRlID0gc3RhdGU7CisgICAgICAgIHN0YXRlUmVhbGx5Q2hhbmdlZCA9IHRydWU7CisgICAgfQor
CisgICAgYm9vbCBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gZmFsc2U7CisgICAgc3dpdGNo
IChnZXRTdGF0ZVJlc3VsdCkgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOiB7
CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlN0YXRlOiAlcywgcGVuZGlu
ZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9l
bGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKKworICAgICAgICAvLyBEbyBub3RoaW5n
IGlmIG9uIEVPUyBhbmQgc3RhdGUgY2hhbmdlZCB0byBSRUFEWSB0byBhdm9pZCByZWNyZWF0aW5n
IHRoZSBwbGF5ZXIKKyAgICAgICAgLy8gb24gSFRNTE1lZGlhRWxlbWVudCBhbmQgcHJvcGVybHkg
Z2VuZXJhdGUgdGhlIHZpZGVvICdlbmRlZCcgZXZlbnQuCisgICAgICAgIGlmIChtX2lzRW5kUmVh
Y2hlZCAmJiBtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpCisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBtX3Jlc2V0UGlwZWxpbmUgPSBtX2N1cnJlbnRTdGF0ZSA8PSBHU1Rf
U1RBVEVfUkVBRFk7CisKKyAgICAgICAgYm9vbCBkaWRCdWZmZXJpbmcgPSBtX2J1ZmZlcmluZzsK
KworICAgICAgICAvLyBVcGRhdGUgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgorICAgICAgICBz
d2l0Y2ggKG1fY3VycmVudFN0YXRlKSB7CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX05VTEw6Cisg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7CisgICAg
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpFbXB0eTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdTVF9TVEFURV9SRUFEWToKKyAgICAgICAgICAgIG1fcmVh
ZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTWV0YWRhdGE7CisgICAgICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpFbXB0eTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEdTVF9TVEFURV9QQVVTRUQ6CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX1BMQVlJTkc6
CisgICAgICAgICAgICBpZiAobV9idWZmZXJpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9i
dWZmZXJpbmdQZXJjZW50YWdlID09IDEwMCkgeworICAgICAgICAgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVyaW5nXSBDb21wbGV0ZS4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9idWZmZXJpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbV9y
ZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAgICAg
ICAgICBtX25ldHdvcmtTdGF0ZSA9IG1fZG93bmxvYWRGaW5pc2hlZCA/IE1lZGlhUGxheWVyOjpJ
ZGxlIDogTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50
RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6
TG9hZGluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZG93
bmxvYWRGaW5pc2hlZCkgeworICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxh
eWVyOjpIYXZlRW5vdWdoRGF0YTsKKyAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1l
ZGlhUGxheWVyOjpMb2FkZWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlRnV0dXJlRGF0YTsKKyAgICAgICAgICAg
ICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBTeW5jIHN0YXRlcyB3aGVyZSBuZWVkZWQuCisgICAgICAgIGlmIChtX2N1cnJlbnRT
dGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CisgICAgICAgICAgICBpZiAoIW1fdm9sdW1lQW5k
TXV0ZUluaXRpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgbm90aWZ5UGxheWVyT2ZWb2x1bWVD
aGFuZ2UoKTsKKyAgICAgICAgICAgICAgICBub3RpZnlQbGF5ZXJPZk11dGUoKTsKKyAgICAgICAg
ICAgICAgICBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCA9IHRydWU7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChkaWRCdWZmZXJpbmcgJiYgIW1fYnVmZmVyaW5nICYmICFtX3Bh
dXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIFJlc3RhcnRpbmcgcGxheWJhY2suIik7CisgICAg
ICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRF
X1BMQVlJTkcpIHsKKyAgICAgICAgICAgIG1fcGF1c2VkID0gZmFsc2U7CisKKyAgICAgICAgICAg
IGlmICgobV9idWZmZXJpbmcgJiYgIWlzTGl2ZVN0cmVhbSgpKSB8fCAhbV9wbGF5YmFja1JhdGUp
IHsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJbQnVmZmVy
aW5nXSBQYXVzaW5nIHN0cmVhbSBmb3IgYnVmZmVyaW5nLiIpOworICAgICAgICAgICAgICAgIGNo
YW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOworCisgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk9sZCBzdGF0ZTogJXMsIG5ldyBzdGF0ZTogJXMgKHJl
cXVlc3RlZDogJXMpIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9vbGRTdGF0ZSksIGdz
dF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3Rh
dGVfZ2V0X25hbWUobV9yZXF1ZXN0ZWRTdGF0ZSkpOworICAgICAgICBpZiAobV9yZXF1ZXN0ZWRT
dGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEICYmIG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9Q
QVVTRUQpIHsKKyAgICAgICAgICAgIHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUgPSB0cnVlOwor
ICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJSZXF1ZXN0ZWQgc3RhdGUg
Y2hhbmdlIHRvICVzIHdhcyBjb21wbGV0ZWQiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZSht
X2N1cnJlbnRTdGF0ZSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRW1pdCBwbGF5IHN0YXRl
IGNoYW5nZSBub3RpZmljYXRpb24gb25seSB3aGVuIGdvaW5nIHRvIFBMQVlJTkcgc28gdGhhdAor
ICAgICAgICAvLyB0aGUgbWVkaWEgZWxlbWVudCBnZXRzIGEgY2hhbmNlIHRvIGVuYWJsZSBpdHMg
cGFnZSBzbGVlcCBkaXNhYmxlci4KKyAgICAgICAgLy8gRW1pdHRpbmcgdGhpcyBub3RpZmljYXRp
b24gaW4gbW9yZSBjYXNlcyB0cmlnZ2VycyB1bndhbnRlZCBjb2RlIHBhdGhzCisgICAgICAgIC8v
IGFuZCB0ZXN0IHRpbWVvdXRzLgorICAgICAgICBpZiAoc3RhdGVSZWFsbHlDaGFuZ2VkICYmICht
X29sZFN0YXRlICE9IG1fY3VycmVudFN0YXRlKSAmJiAobV9vbGRTdGF0ZSA9PSBHU1RfU1RBVEVf
UEFVU0VEICYmIG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKSkgeworICAgICAg
ICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5YmFjayBzdGF0ZSBjaGFuZ2Vk
IGZyb20gJXMgdG8gJXMuIE5vdGlmeWluZyB0aGUgbWVkaWEgcGxheWVyIGNsaWVudCIsIGdzdF9l
bGVtZW50X3N0YXRlX2dldF9uYW1lKG1fb2xkU3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRf
bmFtZShtX2N1cnJlbnRTdGF0ZSkpOworICAgICAgICAgICAgc2hvdWxkVXBkYXRlUGxheWJhY2tT
dGF0ZSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVs
aW5lKCksICJBc3luYzogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRl
X2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVu
ZGluZykpOworICAgICAgICAvLyBDaGFuZ2UgaW4gcHJvZ3Jlc3MuCisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOgorICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJGYWlsdXJlOiBTdGF0ZTogJXMsIHBlbmRpbmc6ICVzIiwgZ3N0X2Vs
ZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9n
ZXRfbmFtZShwZW5kaW5nKSk7CisgICAgICAgIC8vIENoYW5nZSBmYWlsZWQKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OT19QUkVST0xMOgorICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJObyBwcmVyb2xsOiBTdGF0ZTogJXMsIHBlbmRpbmc6
ICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUpLCBnc3RfZWxl
bWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CisKKyAgICAgICAgLy8gTGl2ZSBwaXBlbGlu
ZXMgZ28gaW4gUEFVU0VEIHdpdGhvdXQgcHJlcm9sbGluZy4KKyAgICAgICAgbV9pc1N0cmVhbWlu
ZyA9IHRydWU7CisgICAgICAgIHVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpOwogCi0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEdTVF9CVUZGRVJJTkdfRE9XTkxPQUQ6IHsKLSAg
ICAgICAgdXBkYXRlTWF4VGltZUxvYWRlZChwZXJjZW50YWdlKTsKKyAgICAgICAgaWYgKG1fY3Vy
cmVudFN0YXRlID09IEdTVF9TVEFURV9SRUFEWSkKKyAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgZWxzZSBpZiAobV9jdXJyZW50U3Rh
dGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVk
aWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAgICAgICAgbV9wYXVzZWQgPSB0cnVlOwor
ICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKQor
ICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxzZTsKIAotICAgICAgICAvLyBNZWRpYSBpcyBub3cg
ZnVsbHkgbG9hZGVkLiBJdCB3aWxsIHBsYXkgZXZlbiBpZiBuZXR3b3JrIGNvbm5lY3Rpb24gaXMK
LSAgICAgICAgLy8gY3V0LiBCdWZmZXJpbmcgaXMgZG9uZSwgcmVtb3ZlIHRoZSBmaWxsIHNvdXJj
ZSBmcm9tIHRoZSBtYWluIGxvb3AuCi0gICAgICAgIGlmIChtX2Rvd25sb2FkRmluaXNoZWQpCi0g
ICAgICAgICAgICBtX2ZpbGxUaW1lci5zdG9wKCk7CisgICAgICAgIGlmICghbV9wYXVzZWQgJiYg
bV9wbGF5YmFja1JhdGUpCisgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFU
RV9QTEFZSU5HKTsKIAotICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKKyAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlVuaGFuZGxl
ZCBidWZmZXJpbmcgbW9kZTogJXMiLCBlbnVtVG9TdHJpbmcoR1NUX1RZUEVfQlVGRkVSSU5HX01P
REUsIG1vZGUpLmRhdGEoKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
IkVsc2UgOiAlZCIsIGdldFN0YXRlUmVzdWx0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotfQog
Ci0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBVU0UoR1NUUkVBTUVSX01QRUdUUykKLXZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwcm9jZXNzTXBlZ1RzU2VjdGlvbihHc3RNcGVn
dHNTZWN0aW9uKiBzZWN0aW9uKQotewotICAgIEFTU0VSVChzZWN0aW9uKTsKKyAgICBtX3JlcXVl
c3RlZFN0YXRlID0gR1NUX1NUQVRFX1ZPSURfUEVORElORzsKIAotICAgIGlmIChzZWN0aW9uLT5z
ZWN0aW9uX3R5cGUgPT0gR1NUX01QRUdUU19TRUNUSU9OX1BNVCkgewotICAgICAgICBjb25zdCBH
c3RNcGVndHNQTVQqIHBtdCA9IGdzdF9tcGVndHNfc2VjdGlvbl9nZXRfcG10KHNlY3Rpb24pOwot
ICAgICAgICBtX21ldGFkYXRhVHJhY2tzLmNsZWFyKCk7Ci0gICAgICAgIGZvciAoZ3VpbnQgaSA9
IDA7IGkgPCBwbXQtPnN0cmVhbXMtPmxlbjsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBHc3RN
cGVndHNQTVRTdHJlYW0qIHN0cmVhbSA9IHN0YXRpY19jYXN0PGNvbnN0IEdzdE1wZWd0c1BNVFN0
cmVhbSo+KGdfcHRyX2FycmF5X2luZGV4KHBtdC0+c3RyZWFtcywgaSkpOwotICAgICAgICAgICAg
aWYgKHN0cmVhbS0+c3RyZWFtX3R5cGUgPT0gMHgwNSB8fCBzdHJlYW0tPnN0cmVhbV90eXBlID49
IDB4ODApIHsKLSAgICAgICAgICAgICAgICBBdG9tU3RyaW5nIHBpZCA9IFN0cmluZzo6bnVtYmVy
KHN0cmVhbS0+cGlkKTsKLSAgICAgICAgICAgICAgICBhdXRvIHRyYWNrID0gSW5iYW5kTWV0YWRh
dGFUZXh0VHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAg
IEluYmFuZFRleHRUcmFja1ByaXZhdGU6Ok1ldGFkYXRhLCBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
OjpEYXRhLCBwaWQpOworICAgIGlmIChzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlKQorICAgICAg
ICBtX3BsYXllci0+cGxheWJhY2tTdGF0ZUNoYW5nZWQoKTsKIAotICAgICAgICAgICAgICAgIC8v
IDQuNy4xMC4xMi4yIFNvdXJjaW5nIGluLWJhbmQgdGV4dCB0cmFja3MKLSAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgbmV3IHRleHQgdHJhY2sncyBraW5kIGlzIG1ldGFkYXRhLCB0aGVuIHNldCB0
aGUgdGV4dCB0cmFjayBpbi1iYW5kIG1ldGFkYXRhIHRyYWNrIGRpc3BhdGNoCi0gICAgICAgICAg
ICAgICAgLy8gdHlwZSBhcyBmb2xsb3dzLCBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgbWVkaWEg
cmVzb3VyY2U6Ci0gICAgICAgICAgICAgICAgLy8gTGV0IHN0cmVhbSB0eXBlIGJlIHRoZSB2YWx1
ZSBvZiB0aGUgInN0cmVhbV90eXBlIiBmaWVsZCBkZXNjcmliaW5nIHRoZSB0ZXh0IHRyYWNrJ3Mg
dHlwZSBpbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBmaWxlJ3MgcHJvZ3JhbSBtYXAgc2VjdGlv
biwgaW50ZXJwcmV0ZWQgYXMgYW4gOC1iaXQgdW5zaWduZWQgaW50ZWdlci4gTGV0IGxlbmd0aCBi
ZSB0aGUgdmFsdWUgb2YKLSAgICAgICAgICAgICAgICAvLyB0aGUgIkVTX2luZm9fbGVuZ3RoIiBm
aWVsZCBmb3IgdGhlIHRyYWNrIGluIHRoZSBzYW1lIHBhcnQgb2YgdGhlIHByb2dyYW0gbWFwIHNl
Y3Rpb24sIGludGVycHJldGVkCi0gICAgICAgICAgICAgICAgLy8gYXMgYW4gaW50ZWdlciBhcyBk
ZWZpbmVkIGJ5IHRoZSBNUEVHLTIgc3BlY2lmaWNhdGlvbi4gTGV0IGRlc2NyaXB0b3IgYnl0ZXMg
YmUgdGhlIGxlbmd0aCBieXRlcwotICAgICAgICAgICAgICAgIC8vIGZvbGxvd2luZyB0aGUgIkVT
X2luZm9fbGVuZ3RoIiBmaWVsZC4gVGhlIHRleHQgdHJhY2sgaW4tYmFuZCBtZXRhZGF0YSB0cmFj
ayBkaXNwYXRjaCB0eXBlIG11c3QgYmUKLSAgICAgICAgICAgICAgICAvLyBzZXQgdG8gdGhlIGNv
bmNhdGVuYXRpb24gb2YgdGhlIHN0cmVhbSB0eXBlIGJ5dGUgYW5kIHRoZSB6ZXJvIG9yIG1vcmUg
ZGVzY3JpcHRvciBieXRlcyBieXRlcywKLSAgICAgICAgICAgICAgICAvLyBleHByZXNzZWQgaW4g
aGV4YWRlY2ltYWwgdXNpbmcgdXBwZXJjYXNlIEFTQ0lJIGhleCBkaWdpdHMuCi0gICAgICAgICAg
ICAgICAgU3RyaW5nIGluYmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGU7Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kVW5zaWduZWRBc0hleEZpeGVkU2l6ZShzdHJlYW0tPnN0cmVhbV90eXBlLCBp
bmJhbmRNZXRhZGF0YVRyYWNrRGlzcGF0Y2hUeXBlLCAyKTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGd1aW50IGogPSAwOyBqIDwgc3RyZWFtLT5kZXNjcmlwdG9ycy0+bGVuOyArK2opIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgR3N0TXBlZ3RzRGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHN0
YXRpY19jYXN0PGNvbnN0IEdzdE1wZWd0c0Rlc2NyaXB0b3IqPihnX3B0cl9hcnJheV9pbmRleChz
dHJlYW0tPmRlc2NyaXB0b3JzLCBqKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoZ3VpbnQg
ayA9IDA7IGsgPCBkZXNjcmlwdG9yLT5sZW5ndGg7ICsraykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZEJ5dGVBc0hleChkZXNjcmlwdG9yLT5kYXRhW2tdLCBpbmJhbmRNZXRhZGF0YVRy
YWNrRGlzcGF0Y2hUeXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdHJh
Y2stPnNldEluQmFuZE1ldGFkYXRhVHJhY2tEaXNwYXRjaFR5cGUoaW5iYW5kTWV0YWRhdGFUcmFj
a0Rpc3BhdGNoVHlwZSk7CisgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9IG9sZE5ldHdvcmtTdGF0
ZSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJOZXR3b3JrIFN0YXRl
IENoYW5nZWQgZnJvbSAlcyB0byAlcyIsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG9sZE5l
dHdvcmtTdGF0ZSkudXRmOCgpLmRhdGEoKSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcobV9u
ZXR3b3JrU3RhdGUpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBtX3BsYXllci0+bmV0d29ya1N0
YXRlQ2hhbmdlZCgpOworICAgIH0KKyAgICBpZiAobV9yZWFkeVN0YXRlICE9IG9sZFJlYWR5U3Rh
dGUpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUmVhZHkgU3RhdGUg
Q2hhbmdlZCBmcm9tICVzIHRvICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcob2xkUmVh
ZHlTdGF0ZSkudXRmOCgpLmRhdGEoKSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcobV9yZWFk
eVN0YXRlKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgbV9wbGF5ZXItPnJlYWR5U3RhdGVDaGFu
Z2VkKCk7CisgICAgfQogCi0gICAgICAgICAgICAgICAgbV9tZXRhZGF0YVRyYWNrcy5hZGQocGlk
LCB0cmFjayk7Ci0gICAgICAgICAgICAgICAgbV9wbGF5ZXItPmFkZFRleHRUcmFjaygqdHJhY2sp
OworICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYg
bV9jdXJyZW50U3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICB1cGRhdGVQbGF5
YmFja1JhdGUoKTsKKyAgICAgICAgaWYgKG1fc2Vla0lzUGVuZGluZykgeworICAgICAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIGNvbW1pdHRpbmcgcGVuZGluZyBz
ZWVrIHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBtX3NlZWtJc1BlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fc2Vla2luZyA9IGRv
U2VlayhtX3NlZWtUaW1lLCBtX3BsYXllci0+cmF0ZSgpLCBzdGF0aWNfY2FzdDxHc3RTZWVrRmxh
Z3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKSk7CisgICAg
ICAgICAgICBpZiAoIW1fc2Vla2luZykgeworICAgICAgICAgICAgICAgIG1fY2FjaGVkUG9zaXRp
b24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIHNlZWtpbmcgdG8gJXMgZmFpbGVkIiwgdG9TdHJp
bmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICBBdG9tU3RyaW5nIHBpZCA9IFN0cmluZzo6bnVtYmVyKHNl
Y3Rpb24tPnBpZCk7Ci0gICAgICAgIFJlZlB0cjxJbmJhbmRNZXRhZGF0YVRleHRUcmFja1ByaXZh
dGVHU3RyZWFtZXI+IHRyYWNrID0gbV9tZXRhZGF0YVRyYWNrcy5nZXQocGlkKTsKLSAgICAgICAg
aWYgKCF0cmFjaykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBHUmVmUHRyPEdCeXRl
cz4gZGF0YSA9IGdzdF9tcGVndHNfc2VjdGlvbl9nZXRfZGF0YShzZWN0aW9uKTsKLSAgICAgICAg
Z3NpemUgc2l6ZTsKLSAgICAgICAgY29uc3Qgdm9pZCogYnl0ZXMgPSBnX2J5dGVzX2dldF9kYXRh
KGRhdGEuZ2V0KCksICZzaXplKTsKLQotICAgICAgICB0cmFjay0+YWRkRGF0YUN1ZShjdXJyZW50
TWVkaWFUaW1lKCksIGN1cnJlbnRNZWRpYVRpbWUoKSwgYnl0ZXMsIHNpemUpOwogICAgIH0KIH0K
LSNlbmRpZgogCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnByb2Nlc3NUYWJsZU9mQ29udGVudHMoR3N0TWVzc2FnZSogbWVzc2FnZSkK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjptZWRpYUxvY2F0aW9uQ2hhbmdlZChH
c3RNZXNzYWdlKiBtZXNzYWdlKQogewotICAgIGlmIChtX2NoYXB0ZXJzVHJhY2spCi0gICAgICAg
IG1fcGxheWVyLT5yZW1vdmVUZXh0VHJhY2soKm1fY2hhcHRlcnNUcmFjayk7CisgICAgaWYgKG1f
bWVkaWFMb2NhdGlvbnMpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZnJlZShtX21lZGlhTG9jYXRp
b25zKTsKIAotICAgIG1fY2hhcHRlcnNUcmFjayA9IEluYmFuZE1ldGFkYXRhVGV4dFRyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKEluYmFuZFRleHRUcmFja1ByaXZhdGU6OkNoYXB0ZXJzLCBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlOjpHZW5lcmljKTsKLSAgICBtX3BsYXllci0+YWRkVGV4dFRy
YWNrKCptX2NoYXB0ZXJzVHJhY2spOworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKyAgICBpZiAoc3RydWN0dXJl
KSB7CisgICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNhbiBjb250YWluOgorICAgICAgICAvLyAt
IGJvdGggYSBuZXctbG9jYXRpb24gc3RyaW5nIGFuZCBlbWJlZGRlZCBsb2NhdGlvbnMgc3RydWN0
dXJlCisgICAgICAgIC8vIC0gb3Igb25seSBhIG5ldy1sb2NhdGlvbiBzdHJpbmcuCisgICAgICAg
IG1fbWVkaWFMb2NhdGlvbnMgPSBnc3Rfc3RydWN0dXJlX2NvcHkoc3RydWN0dXJlKTsKKyAgICAg
ICAgY29uc3QgR1ZhbHVlKiBsb2NhdGlvbnMgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShtX21l
ZGlhTG9jYXRpb25zLCAibG9jYXRpb25zIik7CiAKLSAgICBHUmVmUHRyPEdzdFRvYz4gdG9jOwot
ICAgIGdib29sZWFuIHVwZGF0ZWQ7Ci0gICAgZ3N0X21lc3NhZ2VfcGFyc2VfdG9jKG1lc3NhZ2Us
ICZ0b2Mub3V0UHRyKCksICZ1cGRhdGVkKTsKLSAgICBBU1NFUlQodG9jKTsKKyAgICAgICAgaWYg
KGxvY2F0aW9ucykKKyAgICAgICAgICAgIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCA9IHN0
YXRpY19jYXN0PGludD4oZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUobG9jYXRpb25zKSkgLTE7CiAK
LSAgICBmb3IgKEdMaXN0KiBpID0gZ3N0X3RvY19nZXRfZW50cmllcyh0b2MuZ2V0KCkpOyBpOyBp
ID0gaS0+bmV4dCkKLSAgICAgICAgcHJvY2Vzc1RhYmxlT2ZDb250ZW50c0VudHJ5KHN0YXRpY19j
YXN0PEdzdFRvY0VudHJ5Kj4oaS0+ZGF0YSkpOworICAgICAgICBsb2FkTmV4dExvY2F0aW9uKCk7
CisgICAgfQogfQogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJvY2Vzc1Rh
YmxlT2ZDb250ZW50c0VudHJ5KEdzdFRvY0VudHJ5KiBlbnRyeSkKK2Jvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpsb2FkTmV4dExvY2F0aW9uKCkKIHsKLSAgICBBU1NFUlQoZW50cnkp
OworICAgIGlmICghbV9tZWRpYUxvY2F0aW9ucykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYXV0byBjdWUgPSBHZW5lcmljQ3VlRGF0YTo6Y3JlYXRlKCk7CisgICAgY29uc3QgR1ZhbHVl
KiBsb2NhdGlvbnMgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShtX21lZGlhTG9jYXRpb25zLCAi
bG9jYXRpb25zIik7CisgICAgY29uc3QgZ2NoYXIqIG5ld0xvY2F0aW9uID0gbnVsbHB0cjsKIAot
ICAgIGdpbnQ2NCBzdGFydCA9IC0xLCBzdG9wID0gLTE7Ci0gICAgZ3N0X3RvY19lbnRyeV9nZXRf
c3RhcnRfc3RvcF90aW1lcyhlbnRyeSwgJnN0YXJ0LCAmc3RvcCk7Ci0gICAgaWYgKHN0YXJ0ICE9
IC0xKQotICAgICAgICBjdWUtPnNldFN0YXJ0VGltZShNZWRpYVRpbWUoc3RhcnQsIEdTVF9TRUNP
TkQpKTsKLSAgICBpZiAoc3RvcCAhPSAtMSkKLSAgICAgICAgY3VlLT5zZXRFbmRUaW1lKE1lZGlh
VGltZShzdG9wLCBHU1RfU0VDT05EKSk7CisgICAgaWYgKCFsb2NhdGlvbnMpIHsKKyAgICAgICAg
Ly8gRmFsbGJhY2sgb24gbmV3LWxvY2F0aW9uIHN0cmluZy4KKyAgICAgICAgbmV3TG9jYXRpb24g
PSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcobV9tZWRpYUxvY2F0aW9ucywgIm5ldy1sb2NhdGlv
biIpOworICAgICAgICBpZiAoIW5ld0xvY2F0aW9uKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KIAotICAgIEdzdFRhZ0xpc3QqIHRhZ3MgPSBnc3RfdG9jX2VudHJ5X2dldF90YWdz
KGVudHJ5KTsKLSAgICBpZiAodGFncykgewotICAgICAgICBnY2hhciogdGl0bGUgPSBudWxscHRy
OwotICAgICAgICBnc3RfdGFnX2xpc3RfZ2V0X3N0cmluZyh0YWdzLCBHU1RfVEFHX1RJVExFLCAm
dGl0bGUpOwotICAgICAgICBpZiAodGl0bGUpIHsKLSAgICAgICAgICAgIGN1ZS0+c2V0Q29udGVu
dCh0aXRsZSk7Ci0gICAgICAgICAgICBnX2ZyZWUodGl0bGUpOworICAgIGlmICghbmV3TG9jYXRp
b24pIHsKKyAgICAgICAgaWYgKG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleCA8IDApIHsKKyAg
ICAgICAgICAgIG1fbWVkaWFMb2NhdGlvbnMgPSBudWxscHRyOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgR1ZhbHVlKiBsb2NhdGlvbiA9IGdz
dF92YWx1ZV9saXN0X2dldF92YWx1ZShsb2NhdGlvbnMsIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJ
bmRleCk7CisgICAgICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVl
X2dldF9zdHJ1Y3R1cmUobG9jYXRpb24pOworCisgICAgICAgIGlmICghc3RydWN0dXJlKSB7Cisg
ICAgICAgICAgICBtX21lZGlhTG9jYXRpb25DdXJyZW50SW5kZXgtLTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQorCisgICAgICAgIG5ld0xvY2F0aW9uID0gZ3N0X3N0cnVj
dHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm5ldy1sb2NhdGlvbiIpOwogICAgIH0KIAotICAg
IG1fY2hhcHRlcnNUcmFjay0+YWRkR2VuZXJpY0N1ZShjdWUpOworICAgIGlmIChuZXdMb2NhdGlv
bikgeworICAgICAgICAvLyBGb3VuZCBhIGNhbmRpZGF0ZS4gbmV3LWxvY2F0aW9uIGlzIG5vdCBh
bHdheXMgYW4gYWJzb2x1dGUgdXJsCisgICAgICAgIC8vIHRob3VnaC4gV2UgbmVlZCB0byB0YWtl
IHRoZSBiYXNlIG9mIHRoZSBjdXJyZW50IHVybCBhbmQKKyAgICAgICAgLy8gYXBwZW5kIHRoZSB2
YWx1ZSBvZiBuZXctbG9jYXRpb24gdG8gaXQuCisgICAgICAgIFVSTCBiYXNlVXJsID0gZ3N0X3Vy
aV9pc192YWxpZChuZXdMb2NhdGlvbikgPyBVUkwoKSA6IG1fdXJsOworICAgICAgICBVUkwgbmV3
VXJsID0gVVJMKGJhc2VVcmwsIG5ld0xvY2F0aW9uKTsKIAotICAgIGZvciAoR0xpc3QqIGkgPSBn
c3RfdG9jX2VudHJ5X2dldF9zdWJfZW50cmllcyhlbnRyeSk7IGk7IGkgPSBpLT5uZXh0KQotICAg
ICAgICBwcm9jZXNzVGFibGVPZkNvbnRlbnRzRW50cnkoc3RhdGljX2Nhc3Q8R3N0VG9jRW50cnkq
PihpLT5kYXRhKSk7Ci19CisgICAgICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IHBsYXliaW5VcmxT
dHI7CisgICAgICAgIGdfb2JqZWN0X2dldChtX3BpcGVsaW5lLmdldCgpLCAiY3VycmVudC11cmki
LCAmcGxheWJpblVybFN0ci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgIFVSTCBwbGF5Ymlu
VXJsKFVSTCgpLCBwbGF5YmluVXJsU3RyLmdldCgpKTsKIAotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnB1cmdlSW52YWxpZEF1ZGlvVHJhY2tzKFZlY3RvcjxTdHJpbmc+IHZhbGlk
VHJhY2tJZHMpCi17Ci0gICAgbV9hdWRpb1RyYWNrcy5yZW1vdmVJZihbdmFsaWRUcmFja0lkc10o
YXV0byYga2V5QW5kVmFsdWUpIHsKLSAgICAgICAgcmV0dXJuICF2YWxpZFRyYWNrSWRzLmNvbnRh
aW5zKGtleUFuZFZhbHVlLmtleSk7Ci0gICAgfSk7Ci19CisgICAgICAgIGlmIChwbGF5YmluVXJs
ID09IG5ld1VybCkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
UGxheWJpbiBhbHJlYWR5IGhhbmRsZWQgcmVkaXJlY3Rpb24uIik7CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZUludmFsaWRWaWRlb1RyYWNrcyhWZWN0b3I8U3RyaW5n
PiB2YWxpZFRyYWNrSWRzKQotewotICAgIG1fdmlkZW9UcmFja3MucmVtb3ZlSWYoW3ZhbGlkVHJh
Y2tJZHNdKGF1dG8mIGtleUFuZFZhbHVlKSB7Ci0gICAgICAgIHJldHVybiAhdmFsaWRUcmFja0lk
cy5jb250YWlucyhrZXlBbmRWYWx1ZS5rZXkpOwotICAgIH0pOwotfQorICAgICAgICAgICAgbV91
cmwgPSBwbGF5YmluVXJsOwogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHVy
Z2VJbnZhbGlkVGV4dFRyYWNrcyhWZWN0b3I8U3RyaW5nPiB2YWxpZFRyYWNrSWRzKQotewotICAg
IG1fdGV4dFRyYWNrcy5yZW1vdmVJZihbdmFsaWRUcmFja0lkc10oYXV0byYga2V5QW5kVmFsdWUp
IHsKLSAgICAgICAgcmV0dXJuICF2YWxpZFRyYWNrSWRzLmNvbnRhaW5zKGtleUFuZFZhbHVlLmtl
eSk7Ci0gICAgfSk7Ci19Ci0jZW5kaWYKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpmaWxsVGltZXJGaXJlZCgp
Ci17Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVkKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIEFuIGVycm9yIG9jY3VycmVkLCBkaXNhYmxpbmcgdGhl
IGZpbGwgdGltZXIiKTsKLSAgICAgICAgbV9maWxsVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9SRUFEWSk7
CisgICAgICAgIGF1dG8gc2VjdXJpdHlPcmlnaW4gPSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1f
dXJsKTsKKyAgICAgICAgaWYgKHNlY3VyaXR5T3JpZ2luLT5jYW5SZXF1ZXN0KG5ld1VybCkpIHsK
KyAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiTmV3IG1lZGlhIHVybDog
JXMiLCBuZXdVcmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBHUmVmUHRyPEdzdFF1
ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhHU1RfRk9STUFU
X1BFUkNFTlQpKTsKLSAgICBkb3VibGUgZmlsbFN0YXR1cyA9IDEwMC4wOwotICAgIEdzdEJ1ZmZl
cmluZ01vZGUgbW9kZSA9IEdTVF9CVUZGRVJJTkdfRE9XTkxPQUQ7CisgICAgICAgICAgICAvLyBS
ZXNldCBwbGF5ZXIgc3RhdGVzLgorICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBs
YXllcjo6TG9hZGluZzsKKyAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2Vk
KCk7CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7
CisgICAgICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKIAotICAgIGlmIChn
c3RfZWxlbWVudF9xdWVyeShtX3NvdXJjZS5nZXQoKSwgcXVlcnkuZ2V0KCkpKSB7Ci0gICAgICAg
IGdzdF9xdWVyeV9wYXJzZV9idWZmZXJpbmdfc3RhdHMocXVlcnkuZ2V0KCksICZtb2RlLCBudWxs
cHRyLCBudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIC8vIFJlc2V0IHBpcGVsaW5lIHN0
YXRlLgorICAgICAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gdHJ1ZTsKIAotICAgICAgICBpbnQg
cGVyY2VudGFnZTsKLSAgICAgICAgZ3N0X3F1ZXJ5X3BhcnNlX2J1ZmZlcmluZ19wZXJjZW50KHF1
ZXJ5LmdldCgpLCBudWxscHRyLCAmcGVyY2VudGFnZSk7Ci0gICAgICAgIGZpbGxTdGF0dXMgPSBw
ZXJjZW50YWdlOwotICAgIH0gZWxzZSBpZiAobV9odHRwUmVzcG9uc2VUb3RhbFNpemUpIHsKLSAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gUXVlcnkgZmFp
bGVkLCBmYWxsaW5nIGJhY2sgdG8gbmV0d29yayByZWFkIHBvc2l0aW9uIGVzdGltYXRpb24iKTsK
LSAgICAgICAgZmlsbFN0YXR1cyA9IDEwMC4wICogKHN0YXRpY19jYXN0PGRvdWJsZT4obV9uZXR3
b3JrUmVhZFBvc2l0aW9uKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4obV9odHRwUmVzcG9uc2VUb3Rh
bFNpemUpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5l
KCksICJbQnVmZmVyaW5nXSBVbmFibGUgdG8gZGV0ZXJtaW5lIG9uLWRpc2sgYnVmZmVyaW5nIHN0
YXR1cyIpOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICBHc3RTdGF0ZSBzdGF0ZTsKKyAg
ICAgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUs
IG51bGxwdHIsIDApOworICAgICAgICAgICAgaWYgKHN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWSkg
eworICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgbmV3IHVyaSBhbmQgc3RhcnQgcGxheWluZy4K
KyAgICAgICAgICAgICAgICBzZXRQbGF5YmluVVJMKG5ld1VybCk7CisgICAgICAgICAgICAgICAg
Y2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
R1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJOb3QgYWxsb3dlZCB0byBsb2FkIG5ldyBtZWRp
YSBsb2NhdGlvbjogJXMiLCBuZXdVcmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgfQor
ICAgIG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleC0tOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZEVuZCgpCit7CisgICAgR1NU
X0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJQbGF5YmFjayBlbmRlZCIpOworCisgICAgLy8gU3lu
Y2hyb25pemUgcG9zaXRpb24gYW5kIGR1cmF0aW9uIHZhbHVlcyB0byBub3QgY29uZnVzZSB0aGUK
KyAgICAvLyBIVE1MTWVkaWFFbGVtZW50LiBJbiBzb21lIGNhc2VzIGxpa2UgcmV2ZXJzZSBwbGF5
YmFjayB0aGUKKyAgICAvLyBwb3NpdGlvbiBpcyBub3QgYWx3YXlzIHJlcG9ydGVkIGFzIDAgZm9y
IGluc3RhbmNlLgorICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1l
KCk7CisgICAgTWVkaWFUaW1lIG5vdyA9IGN1cnJlbnRNZWRpYVRpbWUoKTsKKyAgICBpZiAobm93
ID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYmICFtX3NlZWtpbmcpIHsKKyAgICAgICAgbV9jYWNo
ZWREdXJhdGlvbiA9IG5vdzsKKyAgICAgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOwog
ICAgIH0KIAotICAgIHVwZGF0ZUJ1ZmZlcmluZ1N0YXR1cyhtb2RlLCBmaWxsU3RhdHVzKTsKKyAg
ICBtX2lzRW5kUmVhY2hlZCA9IHRydWU7CisKKyAgICBpZiAoIW1fcGxheWVyLT5jbGllbnQoKS5t
ZWRpYVBsYXllcklzTG9vcGluZygpKSB7CisgICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAgICAg
ICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOworICAgICAgICBtX2Rvd25s
b2FkRmluaXNoZWQgPSBmYWxzZTsKKyAgICB9CisgICAgdGltZUNoYW5nZWQoKTsKIH0KIAotTWVk
aWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4TWVkaWFUaW1lU2Vla2FibGUo
KSBjb25zdAordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmdldFN1cHBvcnRlZFR5
cGVzKEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiB0eXBlcykKIHsK
LSAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJlcnJvck9jY3VyZWQ6ICVzLCBpc0xp
dmVTdHJlYW06ICVzIiwgYm9vbEZvclByaW50aW5nKG1fZXJyb3JPY2N1cmVkKSwgYm9vbEZvclBy
aW50aW5nKGlzTGl2ZVN0cmVhbSgpKSk7Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVkKQotICAgICAg
ICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotCi0gICAgaWYgKGlzTGl2ZVN0cmVhbSgp
KQotICAgICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotCi0gICAgTWVkaWFUaW1l
IGR1cmF0aW9uID0gZHVyYXRpb25NZWRpYVRpbWUoKTsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHBp
cGVsaW5lKCksICJtYXhNZWRpYVRpbWVTZWVrYWJsZSwgZHVyYXRpb246ICVzIiwgdG9TdHJpbmco
ZHVyYXRpb24pLnV0ZjgoKS5kYXRhKCkpOwotICAgIC8vIGluZmluaXRlIGR1cmF0aW9uIG1lYW5z
IGxpdmUgc3RyZWFtCi0gICAgaWYgKGR1cmF0aW9uLmlzUG9zaXRpdmVJbmZpbml0ZSgpKQotICAg
ICAgICByZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOwotCi0gICAgcmV0dXJuIGR1cmF0aW9u
OworICAgIGF1dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9IEdTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5l
cjo6c2luZ2xldG9uKCk7CisgICAgdHlwZXMgPSBnc3RSZWdpc3RyeVNjYW5uZXIubWltZVR5cGVT
ZXQoKTsKIH0KIAotTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bWF4VGlt
ZUxvYWRlZCgpIGNvbnN0CitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMpCiB7Ci0gICAgaWYgKG1fZXJyb3JPY2N1cmVkKQotICAgICAgICBy
ZXR1cm4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpOworICAgIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5
cGUgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9ydGVkOworI2lmIEVOQUJMRShNRURJ
QV9TT1VSQ0UpCisgICAgLy8gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFIGlzIGluIGNo
YXJnZSBvZiBtZWRpYXNvdXJjZSBwbGF5YmFjaywgbm90IHVzLgorICAgIGlmIChwYXJhbWV0ZXJz
LmlzTWVkaWFTb3VyY2UpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKIAotICAgIE1l
ZGlhVGltZSBsb2FkZWQgPSBtX21heFRpbWVMb2FkZWQ7Ci0gICAgaWYgKG1faXNFbmRSZWFjaGVk
KQotICAgICAgICBsb2FkZWQgPSBkdXJhdGlvbk1lZGlhVGltZSgpOwotICAgIEdTVF9MT0dfT0JK
RUNUKHBpcGVsaW5lKCksICJtYXhUaW1lTG9hZGVkOiAlcyIsIHRvU3RyaW5nKGxvYWRlZCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGxvYWRlZDsKLX0KKyNpZiAhRU5BQkxFKE1FRElBX1NU
UkVBTSkKKyAgICBpZiAocGFyYW1ldGVycy5pc01lZGlhU3RyZWFtKQorICAgICAgICByZXR1cm4g
cmVzdWx0OworI2VuZGlmCiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRM
b2FkaW5nUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIGlmIChtX2Vycm9yT2NjdXJlZCB8fCBtX2xv
YWRpbmdTdGFsbGVkKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHBhcmFtZXRlcnMu
dHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBpZiAoV0VCS0lU
X0lTX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpKSB7Ci0gICAgICAgIEdTVF9MT0dfT0JKRUNUKHBp
cGVsaW5lKCksICJMYXN0IG5ldHdvcmsgcmVhZCBwb3NpdGlvbjogJSIgR19HVUlOVDY0X0ZPUk1B
VCAiLCBjdXJyZW50OiAlIiBHX0dVSU5UNjRfRk9STUFULCBtX3JlYWRQb3NpdGlvbkF0TGFzdERp
ZExvYWRpbmdQcm9ncmVzcywgbV9uZXR3b3JrUmVhZFBvc2l0aW9uKTsKLSAgICAgICAgYm9vbCBk
aWRMb2FkaW5nUHJvZ3Jlc3MgPSBtX3JlYWRQb3NpdGlvbkF0TGFzdERpZExvYWRpbmdQcm9ncmVz
cyA8IG1fbmV0d29ya1JlYWRQb3NpdGlvbjsKLSAgICAgICAgbV9yZWFkUG9zaXRpb25BdExhc3RE
aWRMb2FkaW5nUHJvZ3Jlc3MgPSBtX25ldHdvcmtSZWFkUG9zaXRpb247Ci0gICAgICAgIEdTVF9M
T0dfT0JKRUNUKHBpcGVsaW5lKCksICJkaWRMb2FkaW5nUHJvZ3Jlc3M6ICVzIiwgYm9vbEZvclBy
aW50aW5nKGRpZExvYWRpbmdQcm9ncmVzcykpOwotICAgICAgICByZXR1cm4gZGlkTG9hZGluZ1By
b2dyZXNzOworICAgIEdTVF9ERUJVRygiQ2hlY2tpbmcgbWltZS10eXBlIFwiJXNcIiIsIHBhcmFt
ZXRlcnMudHlwZS5yYXcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBhdXRvIGNvbnRhaW5lclR5cGUg
PSBwYXJhbWV0ZXJzLnR5cGUuY29udGFpbmVyVHlwZSgpOworICAgIGF1dG8mIGdzdFJlZ2lzdHJ5
U2Nhbm5lciA9IEdTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xldG9uKCk7CisgICAgaWYg
KGdzdFJlZ2lzdHJ5U2Nhbm5lci5pc0NvbnRhaW5lclR5cGVTdXBwb3J0ZWQoY29udGFpbmVyVHlw
ZSkpIHsKKyAgICAgICAgLy8gU3BlYyBzYXlzIHdlIHNob3VsZCBub3QgcmV0dXJuICJwcm9iYWJs
eSIgaWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkuCisgICAgICAgIFZlY3RvcjxTdHJpbmc+
IGNvZGVjcyA9IHBhcmFtZXRlcnMudHlwZS5jb2RlY3MoKTsKKyAgICAgICAgcmVzdWx0ID0gY29k
ZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRlZCA6IChnc3RSZWdpc3Ry
eVNjYW5uZXIuYXJlQWxsQ29kZWNzU3VwcG9ydGVkKGNvZGVjcykgPyBNZWRpYVBsYXllcjo6SXNT
dXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQpOwogICAgIH0KIAotICAgIGlm
IChVTkxJS0VMWSghbV9waXBlbGluZSB8fCAhZHVyYXRpb25NZWRpYVRpbWUoKSB8fCAoIWlzTWVk
aWFTb3VyY2UoKSAmJiAhdG90YWxCeXRlcygpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIE1lZGlhVGltZSBjdXJyZW50TWF4VGltZUxvYWRlZCA9IG1heFRpbWVMb2FkZWQoKTsKLSAg
ICBib29sIGRpZExvYWRpbmdQcm9ncmVzcyA9IGN1cnJlbnRNYXhUaW1lTG9hZGVkICE9IG1fbWF4
VGltZUxvYWRlZEF0TGFzdERpZExvYWRpbmdQcm9ncmVzczsKLSAgICBtX21heFRpbWVMb2FkZWRB
dExhc3REaWRMb2FkaW5nUHJvZ3Jlc3MgPSBjdXJyZW50TWF4VGltZUxvYWRlZDsKLSAgICBHU1Rf
TE9HX09CSkVDVChwaXBlbGluZSgpLCAiZGlkTG9hZGluZ1Byb2dyZXNzOiAlcyIsIGJvb2xGb3JQ
cmludGluZyhkaWRMb2FkaW5nUHJvZ3Jlc3MpKTsKLSAgICByZXR1cm4gZGlkTG9hZGluZ1Byb2dy
ZXNzOworICAgIGF1dG8gZmluYWxSZXN1bHQgPSBleHRlbmRlZFN1cHBvcnRzVHlwZShwYXJhbWV0
ZXJzLCByZXN1bHQpOworICAgIEdTVF9ERUJVRygiU3VwcG9ydGVkOiAlcyIsIGNvbnZlcnRFbnVt
ZXJhdGlvblRvU3RyaW5nKGZpbmFsUmVzdWx0KS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4g
ZmluYWxSZXN1bHQ7CiB9CiAKLXVuc2lnbmVkIGxvbmcgbG9uZyBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnRvdGFsQnl0ZXMoKSBjb25zdAordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnVwZGF0ZURvd25sb2FkQnVmZmVyaW5nRmxhZygpCiB7Ci0gICAgaWYgKG1fZXJyb3JP
Y2N1cmVkKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fcGlwZWxpbmUpCisgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX3RvdGFsQnl0ZXMpCi0gICAgICAgIHJldHVybiBtX3RvdGFs
Qnl0ZXM7CisgICAgdW5zaWduZWQgZmxhZ3M7CisgICAgZ19vYmplY3RfZ2V0KG1fcGlwZWxpbmUu
Z2V0KCksICJmbGFncyIsICZmbGFncywgbnVsbHB0cik7CiAKLSAgICBpZiAoIW1fc291cmNlKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCBmbGFnRG93bmxvYWQgPSBnZXRHc3RQbGF5
RmxhZygiZG93bmxvYWQiKTsKIAotICAgIGlmIChpc0xpdmVTdHJlYW0oKSkKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzdG9wIGRvd25sb2FkaW5nIGlmIHdlIGFs
cmVhZHkgc3RhcnRlZCBpdC4KKyAgICBpZiAoZmxhZ3MgJiBmbGFnRG93bmxvYWQgJiYgbV9yZWFk
eVN0YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nICYmICFtX3Jlc2V0UGlwZWxpbmUpIHsK
KyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRG93bmxvYWQgYWxyZWFkeSBz
dGFydGVkLCBub3Qgc3RhcnRpbmcgYWdhaW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAot
ICAgIEdzdEZvcm1hdCBmbXQgPSBHU1RfRk9STUFUX0JZVEVTOwotICAgIGdpbnQ2NCBsZW5ndGgg
PSAwOwotICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbihtX3NvdXJjZS5nZXQoKSwg
Zm10LCAmbGVuZ3RoKSkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgInRv
dGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFULCBsZW5ndGgpOwotICAgICAgICBtX3RvdGFsQnl0
ZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGxlbmd0aCk7Ci0gICAgICAgIG1f
aXNTdHJlYW1pbmcgPSAhbGVuZ3RoOwotICAgICAgICByZXR1cm4gbV90b3RhbEJ5dGVzOworICAg
IGJvb2wgc2hvdWxkRG93bmxvYWQgPSAhaXNMaXZlU3RyZWFtKCkgJiYgbV9wcmVsb2FkID09IE1l
ZGlhUGxheWVyOjpBdXRvOworICAgIGlmIChzaG91bGREb3dubG9hZCkgeworICAgICAgICBHU1Rf
SU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIkVuYWJsaW5nIG9uLWRpc2sgYnVmZmVyaW5nIik7Cisg
ICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAiZmxhZ3MiLCBmbGFncyB8IGZs
YWdEb3dubG9hZCwgbnVsbHB0cik7CisgICAgICAgIG1fZmlsbFRpbWVyLnN0YXJ0UmVwZWF0aW5n
KDIwMF9tcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5l
KCksICJEaXNhYmxpbmcgb24tZGlzayBidWZmZXJpbmciKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0
KG1fcGlwZWxpbmUuZ2V0KCksICJmbGFncyIsIGZsYWdzICYgfmZsYWdEb3dubG9hZCwgbnVsbHB0
cik7CisgICAgICAgIG1fZmlsbFRpbWVyLnN0b3AoKTsKICAgICB9Cit9CiAKLSAgICAvLyBGYWxs
IGJhY2sgdG8gcXVlcnlpbmcgdGhlIHNvdXJjZSBwYWRzIG1hbnVhbGx5LgotICAgIC8vIFNlZSBh
bHNvIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02Mzg3NDkKLSAg
ICBHc3RJdGVyYXRvciogaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMobV9zb3Vy
Y2UuZ2V0KCkpOwotICAgIGJvb2wgZG9uZSA9IGZhbHNlOwotICAgIHdoaWxlICghZG9uZSkgewot
ICAgICAgICBHVmFsdWUgaXRlbSA9IEdfVkFMVUVfSU5JVDsKLSAgICAgICAgc3dpdGNoIChnc3Rf
aXRlcmF0b3JfbmV4dChpdGVyLCAmaXRlbSkpIHsKLSAgICAgICAgY2FzZSBHU1RfSVRFUkFUT1Jf
T0s6IHsKLSAgICAgICAgICAgIEdzdFBhZCogcGFkID0gc3RhdGljX2Nhc3Q8R3N0UGFkKj4oZ192
YWx1ZV9nZXRfb2JqZWN0KCZpdGVtKSk7Ci0gICAgICAgICAgICBnaW50NjQgcGFkTGVuZ3RoID0g
MDsKLSAgICAgICAgICAgIGlmIChnc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uKHBhZCwgZm10LCAmcGFk
TGVuZ3RoKSAmJiBwYWRMZW5ndGggPiBsZW5ndGgpCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0g
cGFkTGVuZ3RoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBH
U1RfSVRFUkFUT1JfUkVTWU5DOgotICAgICAgICAgICAgZ3N0X2l0ZXJhdG9yX3Jlc3luYyhpdGVy
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9FUlJPUjoK
LSAgICAgICAgICAgIEZBTExUSFJPVUdIOwotICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9ET05F
OgotICAgICAgICAgICAgZG9uZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcGlwZWxpbmVOYW1lKQoreworICAgIGNvbnN0IGdj
aGFyKiBwbGF5YmluTmFtZSA9ICJwbGF5YmluIjsKIAotICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZp
dGVtKTsKLSAgICB9CisgICAgLy8gTVNFIGRvZXNuJ3Qgc3VwcG9ydCBwbGF5YmluMy4gTWVkaWFz
dHJlYW0gcmVxdWlyZXMgcGxheWJpbjMuIFJlZ3VsYXIKKyAgICAvLyBwbGF5YmFjayBjYW4gdXNl
IHBsYXliaW4zIG9uLWRlbWFuZCB3aXRoIHRoZSBXRUJLSVRfR1NUX1VTRV9QTEFZQklOMworICAg
IC8vIGVudmlyb25tZW50IHZhcmlhYmxlLgorICAgIGlmICgoIWlzTWVkaWFTb3VyY2UoKSAmJiBn
X2dldGVudigiV0VCS0lUX0dTVF9VU0VfUExBWUJJTjMiKSkgfHwgdXJsLnByb3RvY29sSXMoIm1l
ZGlhc3RyZWFtIikpCisgICAgICAgIHBsYXliaW5OYW1lID0gInBsYXliaW4zIjsKIAotICAgIGdz
dF9pdGVyYXRvcl9mcmVlKGl0ZXIpOworICAgIGlmIChtX3BpcGVsaW5lKSB7CisgICAgICAgIGlm
ICghZ19zdHJjbXAwKEdTVF9PQkpFQ1RfTkFNRShnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShtX3Bp
cGVsaW5lLmdldCgpKSksIHBsYXliaW5OYW1lKSkgeworICAgICAgICAgICAgR1NUX0lORk9fT0JK
RUNUKHBpcGVsaW5lKCksICJBbHJlYWR5IHVzaW5nICVzIiwgcGxheWJpbk5hbWUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUo
KSwgInRvdGFsQnl0ZXMgJSIgR19HSU5UNjRfRk9STUFULCBsZW5ndGgpOwotICAgIG1fdG90YWxC
eXRlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obGVuZ3RoKTsKLSAgICBtX2lz
U3RyZWFtaW5nID0gIWxlbmd0aDsKLSAgICByZXR1cm4gbV90b3RhbEJ5dGVzOwotfQorICAgICAg
ICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlRlYXJpbmcgZG93biBhcyB3ZSBuZWVkIHRv
IHVzZSAlcyBub3cuIiwgcGxheWJpbk5hbWUpOworICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRl
KEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgbV9waXBlbGluZSA9IG51bGxwdHI7CisgICAgfQog
Ci12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlU2V0dXBDYWxsYmFjayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllciwgR3N0RWxlbWVudCogc291cmNlRWxl
bWVudCkKLXsKLSAgICBwbGF5ZXItPnNvdXJjZVNldHVwKHNvdXJjZUVsZW1lbnQpOwotfQorICAg
IEFTU0VSVCghbV9waXBlbGluZSk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp1cmlEZWNvZGVCaW5FbGVtZW50QWRkZWRDYWxsYmFjayhHc3RCaW4qIGJpbiwgR3N0RWxlbWVu
dCogZWxlbWVudCwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCi17Ci0gICAg
aWYgKGdfc3RyY21wMChHX09CSkVDVF9UWVBFX05BTUUoZWxlbWVudCksICJHc3REb3dubG9hZEJ1
ZmZlciIpKQotICAgICAgICByZXR1cm47CisgICAgbV9pc0xlZ2FjeVBsYXliaW4gPSAhZ19zdHJj
bXAwKHBsYXliaW5OYW1lLCAicGxheWJpbiIpOwogCi0gICAgcGxheWVyLT5tX2Rvd25sb2FkQnVm
ZmVyID0gZWxlbWVudDsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMo
YmluLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPih1cmlEZWNvZGVCaW5FbGVtZW50QWRkZWRD
YWxsYmFjayksIHBsYXllcik7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGVsZW1lbnQs
ICJub3RpZnk6OnRlbXAtbG9jYXRpb24iLCBHX0NBTExCQUNLKGRvd25sb2FkQnVmZmVyRmlsZUNy
ZWF0ZWRDYWxsYmFjayksIHBsYXllcik7CisgICAgLy8gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCkgcmV0dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZSBzbworICAgIC8vIHdlIHNob3VsZCBub3Qg
YWRvcHQuCisgICAgc3RhdGljIEF0b21pYzx1aW50MzJfdD4gcGlwZWxpbmVJZDsKKyAgICBzZXRQ
aXBlbGluZShnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UocGxheWJpbk5hbWUsCisgICAgICAgIChw
aXBlbGluZU5hbWUuaXNFbXB0eSgpID8gbWFrZVN0cmluZygibWVkaWEtcGxheWVyLSIsIHBpcGVs
aW5lSWQuZXhjaGFuZ2VBZGQoMSkpIDogcGlwZWxpbmVOYW1lKS51dGY4KCkuZGF0YSgpKSk7Cisg
ICAgc2V0U3RyZWFtVm9sdW1lRWxlbWVudChHU1RfU1RSRUFNX1ZPTFVNRShtX3BpcGVsaW5lLmdl
dCgpKSk7CiAKLSAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IG9sZERvd25sb2FkVGVtcGxhdGU7Ci0g
ICAgZ19vYmplY3RfZ2V0KGVsZW1lbnQsICJ0ZW1wLXRlbXBsYXRlIiwgJm9sZERvd25sb2FkVGVt
cGxhdGUub3V0UHRyKCksIG51bGxwdHIpOworICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgp
LCAiVXNpbmcgbGVnYWN5IHBsYXliaW4gZWxlbWVudDogJXMiLCBib29sRm9yUHJpbnRpbmcobV9p
c0xlZ2FjeVBsYXliaW4pKTsKIAotICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmV3RG93bmxvYWRUZW1w
bGF0ZShnX2J1aWxkX2ZpbGVuYW1lKEdfRElSX1NFUEFSQVRPUl9TLCAidmFyIiwgInRtcCIsICJX
ZWJLaXQtTWVkaWEtWFhYWFhYIiwgbnVsbHB0cikpOwotICAgIGdfb2JqZWN0X3NldChlbGVtZW50
LCAidGVtcC10ZW1wbGF0ZSIsIG5ld0Rvd25sb2FkVGVtcGxhdGUuZ2V0KCksIG51bGxwdHIpOwot
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBlbGluZSgpLCAiUmVjb25maWd1cmVkIGZp
bGUgZG93bmxvYWQgdGVtcGxhdGUgZnJvbSAnJXMnIHRvICclcyciLCBvbGREb3dubG9hZFRlbXBs
YXRlLmdldCgpLCBuZXdEb3dubG9hZFRlbXBsYXRlLmdldCgpKTsKKyAgICAvLyBMZXQgYWxzbyBv
dGhlciBsaXN0ZW5lcnMgc3Vic2NyaWJlIHRvIChhcHBsaWNhdGlvbikgbWVzc2FnZXMgaW4gdGhp
cyBidXMuCisgICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVf
Z2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKKyAgICBnc3RfYnVzX2Fk
ZF9zaWduYWxfd2F0Y2hfZnVsbChidXMuZ2V0KCksIFJ1bkxvb3BTb3VyY2VQcmlvcml0eTo6UnVu
TG9vcERpc3BhdGNoZXIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoYnVzLmdldCgpLCAibWVzc2Fn
ZSIsIEdfQ0FMTEJBQ0soYnVzTWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CiAKLSAgICBwbGF5ZXIt
PnB1cmdlT2xkRG93bmxvYWRGaWxlcyhvbGREb3dubG9hZFRlbXBsYXRlLmdldCgpKTsKLX0KKyAg
ICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgIm11dGUiLCBtX3BsYXllci0+bXV0ZWQo
KSwgbnVsbHB0cik7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkb3dubG9h
ZEJ1ZmZlckZpbGVDcmVhdGVkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBw
bGF5ZXIpCi17Ci0gICAgQVNTRVJUKHBsYXllci0+bV9kb3dubG9hZEJ1ZmZlcik7CisgICAgZ19z
aWduYWxfY29ubmVjdChHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksICJkZWVwLWVsZW1l
bnQtYWRkZWQiLCBHX0NBTExCQUNLKCtbXShHc3RCaW4qLCBHc3RCaW4qIHN1YkJpbiwgR3N0RWxl
bWVudCogZWxlbWVudCwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpIHsKKyAg
ICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBiaW5OYW1lKGdzdF9lbGVtZW50X2dldF9uYW1lKEdTVF9F
TEVNRU5UX0NBU1Qoc3ViQmluKSkpOworICAgICAgICBpZiAoIWdfc3RyX2hhc19wcmVmaXgoYmlu
TmFtZS5nZXQoKSwgImRlY29kZWJpbiIpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHBsYXllci0+bV9kb3dubG9hZEJ1ZmZl
ci5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4oZG93bmxvYWRCdWZmZXJGaWxlQ3Jl
YXRlZENhbGxiYWNrKSwgcGxheWVyKTsKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBlbGVtZW50
TmFtZShnc3RfZWxlbWVudF9nZXRfbmFtZShlbGVtZW50KSk7CisgICAgICAgIGlmIChnX3N0cl9o
YXNfcHJlZml4KGVsZW1lbnROYW1lLmdldCgpLCAidjRsMiIpKQorICAgICAgICAgICAgcGxheWVy
LT5tX3ZpZGVvRGVjb2RlclBsYXRmb3JtID0gR3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OlZpZGVv
NExpbnV4OworICAgICAgICBlbHNlIGlmIChnX3N0cl9oYXNfcHJlZml4KGVsZW1lbnROYW1lLmdl
dCgpLCAiaW14dnB1ZGVjIikpCisgICAgICAgICAgICBwbGF5ZXItPm1fdmlkZW9EZWNvZGVyUGxh
dGZvcm0gPSBHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6SW14VlBVOwogCi0gICAgR1VuaXF1ZU91
dFB0cjxjaGFyPiBkb3dubG9hZEZpbGU7Ci0gICAgZ19vYmplY3RfZ2V0KHBsYXllci0+bV9kb3du
bG9hZEJ1ZmZlci5nZXQoKSwgInRlbXAtbG9jYXRpb24iLCAmZG93bmxvYWRGaWxlLm91dFB0cigp
LCBudWxscHRyKTsKLSAgICBwbGF5ZXItPm1fZG93bmxvYWRCdWZmZXIgPSBudWxscHRyOworI2lm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAgICAgICAgcGxheWVyLT51cGRhdGVUZXh0dXJlTWFw
cGVyRmxhZ3MoKTsKKyNlbmRpZgorICAgIH0pLCB0aGlzKTsKIAotICAgIGlmIChVTkxJS0VMWSgh
RmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShkb3dubG9hZEZpbGUuZ2V0KCkpKSkgewotICAgICAgICBH
U1RfV0FSTklORygiQ291bGRuJ3QgdW5saW5rIG1lZGlhIHRlbXBvcmFyeSBmaWxlICVzIGFmdGVy
IGNyZWF0aW9uIiwgZG93bmxvYWRGaWxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5lLmdldCgpLCAic291cmNlLXNldHVwIiwg
R19DQUxMQkFDSyhzb3VyY2VTZXR1cENhbGxiYWNrKSwgdGhpcyk7CisgICAgaWYgKG1faXNMZWdh
Y3lQbGF5YmluKSB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5l
LmdldCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sodmlkZW9DaGFuZ2VkQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0
KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhhdWRpb0NoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwogICAgIH0KIAotICAgIEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBlbGluZSgpLCAi
VW5saW5rZWQgbWVkaWEgdGVtcG9yYXJ5IGZpbGUgJXMgYWZ0ZXIgY3JlYXRpb24iLCBkb3dubG9h
ZEZpbGUuZ2V0KCkpOwotfQorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBpZiAobV9pc0xl
Z2FjeVBsYXliaW4pCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3BpcGVsaW5l
LmdldCgpLCAidGV4dC1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENhbGxiYWNrKSwg
dGhpcyk7CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZU9sZERvd25s
b2FkRmlsZXMoY29uc3QgY2hhciogZG93bmxvYWRGaWxlVGVtcGxhdGUpCi17Ci0gICAgaWYgKCFk
b3dubG9hZEZpbGVUZW1wbGF0ZSkKLSAgICAgICAgcmV0dXJuOworICAgIEdzdEVsZW1lbnQqIHRl
eHRDb21iaW5lciA9IHdlYmtpdFRleHRDb21iaW5lck5ldygpOworICAgIEFTU0VSVCh0ZXh0Q29t
YmluZXIpOworICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidGV4dC1zdHJlYW0t
Y29tYmluZXIiLCB0ZXh0Q29tYmluZXIsIG51bGxwdHIpOwogCi0gICAgR1VuaXF1ZVB0cjxjaGFy
PiB0ZW1wbGF0ZVBhdGgoZ19wYXRoX2dldF9kaXJuYW1lKGRvd25sb2FkRmlsZVRlbXBsYXRlKSk7
Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiB0ZW1wbGF0ZUZpbGUoZ19wYXRoX2dldF9iYXNlbmFtZShk
b3dubG9hZEZpbGVUZW1wbGF0ZSkpOwotICAgIFN0cmluZyB0ZW1wbGF0ZVBhdHRlcm4gPSBTdHJp
bmcodGVtcGxhdGVGaWxlLmdldCgpKS5yZXBsYWNlKCJYIiwgIj8iKTsKKyAgICBtX3RleHRBcHBT
aW5rID0gd2Via2l0VGV4dFNpbmtOZXcoKTsKKyAgICBBU1NFUlQobV90ZXh0QXBwU2luayk7CiAK
LSAgICBmb3IgKGF1dG8mIGZpbGVQYXRoIDogRmlsZVN5c3RlbTo6bGlzdERpcmVjdG9yeSh0ZW1w
bGF0ZVBhdGguZ2V0KCksIHRlbXBsYXRlUGF0dGVybikpIHsKLSAgICAgICAgaWYgKFVOTElLRUxZ
KCFGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGZpbGVQYXRoKSkpIHsKLSAgICAgICAgICAgIEdTVF9X
QVJOSU5HKCJDb3VsZG4ndCB1bmxpbmsgbGVnYWN5IG1lZGlhIHRlbXBvcmFyeSBmaWxlOiAlcyIs
IGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IH0KKyAgICBtX3RleHRBcHBTaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKG1fdGV4dEFwcFNpbmsuZ2V0KCksICJzaW5rIikpOworICAgIEFTU0VSVChtX3RleHRB
cHBTaW5rUGFkKTsKIAotICAgICAgICBHU1RfVFJBQ0UoIlVubGlua2VkIGxlZ2FjeSBtZWRpYSB0
ZW1wb3JhcnkgZmlsZTogJXMiLCBmaWxlUGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci19Cisg
ICAgR1JlZlB0cjxHc3RDYXBzPiB0ZXh0Q2FwczsKKyAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJz
aW9uKDEsIDE0LCAwKSkKKyAgICAgICAgdGV4dENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3
X2VtcHR5X3NpbXBsZSgiYXBwbGljYXRpb24veC1zdWJ0aXRsZS12dHQiKSk7CisgICAgZWxzZQor
ICAgICAgICB0ZXh0Q2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ0
ZXh0L3Z0dCIpKTsKKyAgICBnX29iamVjdF9zZXQobV90ZXh0QXBwU2luay5nZXQoKSwgImVtaXQt
c2lnbmFscyIsIFRSVUUsICJlbmFibGUtbGFzdC1zYW1wbGUiLCBGQUxTRSwgImNhcHMiLCB0ZXh0
Q2Fwcy5nZXQoKSwgbnVsbHB0cik7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdGV4
dEFwcFNpbmsuZ2V0KCksICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhuZXdUZXh0U2FtcGxlQ2Fs
bGJhY2spLCB0aGlzKTsKKworICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidGV4
dC1zaW5rIiwgbV90ZXh0QXBwU2luay5nZXQoKSwgbnVsbHB0cik7CisjZW5kaWYKIAotdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNvdXJjZVNldHVwKEdzdEVsZW1lbnQqIHNvdXJj
ZUVsZW1lbnQpCi17Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiU291cmNlIGVs
ZW1lbnQgc2V0LXVwIGZvciAlcyIsIEdTVF9FTEVNRU5UX05BTUUoc291cmNlRWxlbWVudCkpOwor
ICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8tc2luayIsIGNyZWF0ZVZp
ZGVvU2luaygpLCAiYXVkaW8tc2luayIsIGNyZWF0ZUF1ZGlvU2luaygpLCBudWxscHRyKTsKIAot
ICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkgJiYgR1NUX09CSkVDVF9Q
QVJFTlQobV9zb3VyY2UuZ2V0KCkpKQotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X2J5X2Z1bmMoR1NUX0VMRU1FTlRfUEFSRU5UKG1fc291cmNlLmdldCgpKSwgcmVpbnRlcnBy
ZXRfY2FzdDxncG9pbnRlcj4odXJpRGVjb2RlQmluRWxlbWVudEFkZGVkQ2FsbGJhY2spLCB0aGlz
KTsKKyAgICBjb25maWd1cmVQbGF5U2luaygpOwogCi0gICAgbV9zb3VyY2UgPSBzb3VyY2VFbGVt
ZW50OworICAgIGlmIChtX3ByZXNlcnZlc1BpdGNoKSB7CisgICAgICAgIEdzdEVsZW1lbnQqIHNj
YWxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJzY2FsZXRlbXBvIiwgbnVsbHB0cik7CiAK
LSAgICBpZiAoV0VCS0lUX0lTX1dFQl9TUkMobV9zb3VyY2UuZ2V0KCkpKSB7Ci0gICAgICAgIHdl
YktpdFdlYlNyY1NldE1lZGlhUGxheWVyKFdFQktJVF9XRUJfU1JDX0NBU1QobV9zb3VyY2UuZ2V0
KCkpLCBtX3BsYXllcik7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1NUX0VMRU1FTlRfUEFS
RU5UKG1fc291cmNlLmdldCgpKSwgImVsZW1lbnQtYWRkZWQiLCBHX0NBTExCQUNLKHVyaURlY29k
ZUJpbkVsZW1lbnRBZGRlZENhbGxiYWNrKSwgdGhpcyk7Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKLSAgICB9IGVsc2UgaWYgKFdFQktJVF9JU19NRURJQV9TVFJFQU1fU1JDKHNvdXJjZUVsZW1l
bnQpKSB7Ci0gICAgICAgIGF1dG8gc3RyZWFtID0gbV9zdHJlYW1Qcml2YXRlLmdldCgpOwotICAg
ICAgICBBU1NFUlQoc3RyZWFtKTsKLSAgICAgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNTZXRTdHJl
YW0oV0VCS0lUX01FRElBX1NUUkVBTV9TUkMoc291cmNlRWxlbWVudCksIHN0cmVhbSk7Ci0jZW5k
aWYKKyAgICAgICAgaWYgKCFzY2FsZSkKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQg
dG8gY3JlYXRlIHNjYWxldGVtcG8iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJhdWRpby1maWx0ZXIiLCBzY2FsZSwgbnVsbHB0cik7
CisgICAgfQorCisgICAgaWYgKCFtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQpIHsKKyAgICAg
ICAgLy8gSWYgbm90IHVzaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLCBsZXQgR1N0cmVhbWVy
IGhhbmRsZQorICAgICAgICAvLyB0aGUgaW1hZ2Utb3JpZW50YXRpb24gdGFnLgorICAgICAgICBH
c3RFbGVtZW50KiB2aWRlb0ZsaXAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInZpZGVvZmxp
cCIsIG51bGxwdHIpOworICAgICAgICBpZiAodmlkZW9GbGlwKSB7CisgICAgICAgICAgICBnX29i
amVjdF9zZXQodmlkZW9GbGlwLCAibWV0aG9kIiwgOCwgbnVsbHB0cik7CisgICAgICAgICAgICBn
X29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInZpZGVvLWZpbHRlciIsIHZpZGVvRmxpcCwg
bnVsbHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlRoZSB2
aWRlb2ZsaXAgZWxlbWVudCBpcyBtaXNzaW5nLCB2aWRlbyByb3RhdGlvbiBzdXBwb3J0IGlzIG5v
dyBkaXNhYmxlZC4gUGxlYXNlIGNoZWNrIHlvdXIgZ3N0LXBsdWdpbnMtZ29vZCBpbnN0YWxsYXRp
b24uIik7CiAgICAgfQorCisgICAgR1JlZlB0cjxHc3RQYWQ+IHZpZGVvU2lua1BhZCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3ZpZGVvU2luay5nZXQoKSwgInNpbmsi
KSk7CisgICAgaWYgKHZpZGVvU2lua1BhZCkKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKHZpZGVvU2lua1BhZC5nZXQoKSwgIm5vdGlmeTo6Y2FwcyIsIEdfQ0FMTEJBQ0sodmlkZW9T
aW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogfQogCi1ib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdAorYm9vbCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRpZFBhc3NDT1JTQWNjZXNzQ2hlY2soKSBjb25zdAog
ewotICAgIGlmICghbV9zb3VyY2UpCisgICAgaWYgKFdFQktJVF9JU19XRUJfU1JDKG1fc291cmNl
LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIHdlYktpdFNyY1Bhc3NlZENPUlNBY2Nlc3NDaGVjayhX
RUJLSVRfV0VCX1NSQ19DQVNUKG1fc291cmNlLmdldCgpKSk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuU2F2ZU1lZGlhRGF0YSgp
IGNvbnN0Cit7CisgICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoIVdFQktJVF9JU19XRUJfU1JDKG1fc291cmNlLmdldCgpKSkKKyAgICBpZiAo
bV91cmwuaXNMb2NhbEZpbGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBHVW5pcXVl
T3V0UHRyPGNoYXI+IG9yaWdpbmFsVVJJLCByZXNvbHZlZFVSSTsKLSAgICBnX29iamVjdF9nZXQo
bV9zb3VyY2UuZ2V0KCksICJsb2NhdGlvbiIsICZvcmlnaW5hbFVSSS5vdXRQdHIoKSwgInJlc29s
dmVkLWxvY2F0aW9uIiwgJnJlc29sdmVkVVJJLm91dFB0cigpLCBudWxscHRyKTsKLSAgICBpZiAo
IW9yaWdpbmFsVVJJIHx8ICFyZXNvbHZlZFVSSSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghZ19zdHJjbXAwKG9yaWdpbmFsVVJJLmdldCgpLCByZXNvbHZlZFVSSS5nZXQoKSkpCisg
ICAgaWYgKG1fdXJsLnByb3RvY29sSXNJbkhUVFBGYW1pbHkoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBSZWY8U2VjdXJpdHlPcmlnaW4+IHJlc29sdmVkT3JpZ2luKFNlY3VyaXR5T3Jp
Z2luOjpjcmVhdGVGcm9tU3RyaW5nKFN0cmluZzo6ZnJvbVVURjgocmVzb2x2ZWRVUkkuZ2V0KCkp
KSk7Ci0gICAgUmVmPFNlY3VyaXR5T3JpZ2luPiByZXF1ZXN0ZWRPcmlnaW4oU2VjdXJpdHlPcmln
aW46OmNyZWF0ZUZyb21TdHJpbmcoU3RyaW5nOjpmcm9tVVRGOChvcmlnaW5hbFVSSS5nZXQoKSkp
KTsKLSAgICByZXR1cm4gcmVzb2x2ZWRPcmlnaW4tPmlzU2FtZVNjaGVtZUhvc3RQb3J0KHJlcXVl
c3RlZE9yaWdpbi5nZXQoKSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsTG9hZCgpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6cmVhZHlUaW1lckZpcmVkKCkKIHsKLSAgICBpZiAobV9uZXR3b3JrU3RhdGUg
PCBNZWRpYVBsYXllcjo6TG9hZGluZyB8fCBtX25ldHdvcmtTdGF0ZSA9PSBNZWRpYVBsYXllcjo6
TG9hZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9waXBlbGluZSkKLSAgICAgICAg
Y2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOworICAgIEdTVF9ERUJVR19PQkpF
Q1QocGlwZWxpbmUoKSwgIkluIFJFQURZIGZvciB0b28gbG9uZy4gUmVsZWFzaW5nIHBpcGVsaW5l
IHJlc291cmNlcy4iKTsKKyAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9OVUxMKTsK
IH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VE
b25lKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphY2NlbGVyYXRlZFJlbmRl
cmluZ1N0YXRlQ2hhbmdlZCgpCiB7Ci0gICAgaWYgKCFtX3BpcGVsaW5lIHx8IG1fZXJyb3JPY2N1
cmVkKQotICAgICAgICByZXR1cm47CisgICAgbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJhdGVkID0g
bV9wbGF5ZXIgJiYgbV9wbGF5ZXItPmNsaWVudCgpLm1lZGlhUGxheWVyQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0VuYWJsZWQoKTsKK30KIAotICAgIGlmIChtX3NlZWtpbmcpIHsKLSAgICAgICAgaWYg
KG1fc2Vla0lzUGVuZGluZykKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlcygpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltTZWVrXSBz
ZWVrZWQgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwotICAgICAgICAgICAgbV9jYWNoZWRQb3NpdGlvbiA9
IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKLSAgICAgICAgICAgIGlmIChtX3RpbWVPZk92ZXJs
YXBwaW5nU2VlayAhPSBtX3NlZWtUaW1lICYmIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrLmlzVmFs
aWQoKSkgewotICAgICAgICAgICAgICAgIHNlZWsobV90aW1lT2ZPdmVybGFwcGluZ1NlZWspOwot
ICAgICAgICAgICAgICAgIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrID0gTWVkaWFUaW1lOjppbnZh
bGlkVGltZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG1fdGltZU9mT3ZlcmxhcHBpbmdTZWVrID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
OworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKK1BsYXRmb3JtTGF5ZXIqIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09T
SUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLnB0cigpOworI2Vsc2UKKyAgICByZXR1cm4g
Y29uc3RfY2FzdDxNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqPih0aGlzKTsKKyNlbmRpZgor
fQogCi0gICAgICAgICAgICAvLyBUaGUgcGlwZWxpbmUgY2FuIHN0aWxsIGhhdmUgYSBwZW5kaW5n
IHN0YXRlLiBJbiB0aGlzIGNhc2UgYSBwb3NpdGlvbiBxdWVyeSB3aWxsIGZhaWwuCi0gICAgICAg
ICAgICAvLyBSaWdodCBub3cgd2UgY2FuIHVzZSBtX3NlZWtUaW1lIGFzIGEgZmFsbGJhY2suCi0g
ICAgICAgICAgICBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNoZWRTZWVrUG9zaXRpb24gPSB0cnVl
OwotICAgICAgICAgICAgdGltZUNoYW5nZWQoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAg
ICAgICB1cGRhdGVTdGF0ZXMoKTsKKyNpZiBVU0UoTklDT1NJQSkKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyNpZiBVU0UoR1NUUkVB
TUVSX0hPTEVQVU5DSCkKKyAgICBwdXNoTmV4dEhvbGVQdW5jaEJ1ZmZlcigpOworI2VuZGlmCit9
CisjZWxzZQorUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cHJveHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3BsYXRm
b3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQogewotICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAg
cmV0dXJuOworI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQorICAgIHB1c2hOZXh0SG9sZVB1
bmNoQnVmZmVyKCk7CisjZW5kaWYKK30KKyNlbmRpZgogCi0gICAgaWYgKG1fZXJyb3JPY2N1cmVk
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hUZXh0dXJlVG9Db21wb3Np
dG9yKCkKK3sKKyAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgp
OworICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0YXRlID0gbV9u
ZXR3b3JrU3RhdGU7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVhZHlTdGF0ZSA9
IG1fcmVhZHlTdGF0ZTsKLSAgICBHc3RTdGF0ZSBwZW5kaW5nOwotICAgIEdzdFN0YXRlIHN0YXRl
OwotICAgIGJvb2wgc3RhdGVSZWFsbHlDaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICBHc3RTdGF0ZUNo
YW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCAmc3RhdGUsICZwZW5kaW5nLCAyNTAgKiBHU1RfTlNFQ09ORCk7Ci0gICAgaWYg
KHN0YXRlICE9IG1fY3VycmVudFN0YXRlKSB7Ci0gICAgICAgIG1fb2xkU3RhdGUgPSBtX2N1cnJl
bnRTdGF0ZTsKLSAgICAgICAgbV9jdXJyZW50U3RhdGUgPSBzdGF0ZTsKLSAgICAgICAgc3RhdGVS
ZWFsbHlDaGFuZ2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZFVwZGF0ZVBsYXli
YWNrU3RhdGUgPSBmYWxzZTsKLSAgICBzd2l0Y2ggKGdldFN0YXRlUmVzdWx0KSB7Ci0gICAgY2Fz
ZSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M6IHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGlu
ZykpOwotCi0gICAgICAgIC8vIERvIG5vdGhpbmcgaWYgb24gRU9TIGFuZCBzdGF0ZSBjaGFuZ2Vk
IHRvIFJFQURZIHRvIGF2b2lkIHJlY3JlYXRpbmcgdGhlIHBsYXllcgotICAgICAgICAvLyBvbiBI
VE1MTWVkaWFFbGVtZW50IGFuZCBwcm9wZXJseSBnZW5lcmF0ZSB0aGUgdmlkZW8gJ2VuZGVkJyBl
dmVudC4KLSAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkICYmIG1fY3VycmVudFN0YXRlID09IEdT
VF9TVEFURV9SRUFEWSkKLSAgICAgICAgICAgIGJyZWFrOworICAgIGF1dG8gcHJveHlPcGVyYXRp
b24gPQorICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJv
eHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2so
KSk7CiAKLSAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gbV9jdXJyZW50U3RhdGUgPD0gR1NUX1NU
QVRFX1JFQURZOworICAgICAgICAgICAgaWYgKCFwcm94eS5pc0FjdGl2ZSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBib29sIGRpZEJ1ZmZlcmluZyA9IG1fYnVmZmVyaW5n
OworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVIb2xkZXI+IGZyYW1l
SG9sZGVyID0gbWFrZVVuaXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPihtX3NhbXBsZS5nZXQoKSwg
bV92aWRlb0RlY29kZXJQbGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3MsICFtX3VzaW5nRmFs
bGJhY2tWaWRlb1NpbmspOwogCi0gICAgICAgIC8vIFVwZGF0ZSByZWFkeSBhbmQgbmV0d29yayBz
dGF0ZXMuCi0gICAgICAgIHN3aXRjaCAobV9jdXJyZW50U3RhdGUpIHsKLSAgICAgICAgY2FzZSBH
U1RfU1RBVEVfTlVMTDoKLSAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZzsKLSAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVt
cHR5OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1NUQVRFX1JFQURZOgot
ICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTsKLSAg
ICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVtcHR5OwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR1NUX1NUQVRFX1BBVVNFRDoKLSAgICAgICAgY2FzZSBH
U1RfU1RBVEVfUExBWUlORzoKLSAgICAgICAgICAgIGlmIChtX2J1ZmZlcmluZykgewotICAgICAg
ICAgICAgICAgIGlmIChtX2J1ZmZlcmluZ1BlcmNlbnRhZ2UgPT0gMTAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIltCdWZmZXJpbmddIENvbXBs
ZXRlLiIpOwotICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlcmluZyA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7
Ci0gICAgICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gbV9kb3dubG9hZEZpbmlzaGVk
ID8gTWVkaWFQbGF5ZXI6OklkbGUgOiBNZWRpYVBsYXllcjo6TG9hZGluZzsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBs
YXllcjo6SGF2ZUN1cnJlbnREYXRhOwotICAgICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0
ZSA9IE1lZGlhUGxheWVyOjpMb2FkaW5nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9kb3dubG9hZEZpbmlzaGVkKSB7Ci0gICAgICAgICAgICAgICAgbV9yZWFk
eVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwotICAgICAgICAgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gbGF5ZXJCdWZmZXI7Cisg
ICAgICAgICAgICBpZiAoZnJhbWVIb2xkZXItPmhhc01hcHBlZFRleHR1cmVzKCkpIHsKKyAgICAg
ICAgICAgICAgICBsYXllckJ1ZmZlciA9IGZyYW1lSG9sZGVyLT5wbGF0Zm9ybUxheWVyQnVmZmVy
KCk7CisgICAgICAgICAgICAgICAgaWYgKCFsYXllckJ1ZmZlcikKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyLT5zZXRVbm1hbmFnZWRCdWZm
ZXJEYXRhSG9sZGVyKFdURk1vdmUoZnJhbWVIb2xkZXIpKTsKICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVGdXR1cmVE
YXRhOwotICAgICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRp
bmc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFN5bmMgc3RhdGVzIHdoZXJlIG5lZWRlZC4KLSAgICAg
ICAgaWYgKG1fY3VycmVudFN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAgICAgICAgICAg
IGlmICghbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgICAgICBub3Rp
ZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOwotICAgICAgICAgICAgICAgIG5vdGlmeVBsYXllck9m
TXV0ZSgpOwotICAgICAgICAgICAgICAgIG1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRpZEJ1ZmZlcmluZyAmJiAhbV9i
dWZmZXJpbmcgJiYgIW1fcGF1c2VkICYmIG1fcGxheWJhY2tSYXRlKSB7Ci0gICAgICAgICAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW0J1ZmZlcmluZ10gUmVzdGFydGluZyBw
bGF5YmFjay4iKTsKLSAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFU
RV9QTEFZSU5HKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnRT
dGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgewotICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxz
ZTsKLQotICAgICAgICAgICAgaWYgKChtX2J1ZmZlcmluZyAmJiAhaXNMaXZlU3RyZWFtKCkpIHx8
ICFtX3BsYXliYWNrUmF0ZSkgewotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIltCdWZmZXJpbmddIFBhdXNpbmcgc3RyZWFtIGZvciBidWZmZXJpbmcuIik7Ci0g
ICAgICAgICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VEKTsKKyAg
ICAgICAgICAgICAgICBsYXllckJ1ZmZlciA9IHByb3h5LmdldEF2YWlsYWJsZUJ1ZmZlcihmcmFt
ZUhvbGRlci0+c2l6ZSgpLCBHTF9ET05UX0NBUkUpOworICAgICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWSghbGF5ZXJCdWZmZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gdGV4dHVyZSA9
IEJpdG1hcFRleHR1cmVHTDo6Y3JlYXRlKFRleHR1cmVNYXBwZXJDb250ZXh0QXR0cmlidXRlczo6
Z2V0KCkpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5yZXNldChmcmFtZUhvbGRlci0+
c2l6ZSgpLCBmcmFtZUhvbGRlci0+aGFzQWxwaGFDaGFubmVsKCkgPyBCaXRtYXBUZXh0dXJlOjpT
dXBwb3J0c0FscGhhIDogQml0bWFwVGV4dHVyZTo6Tm9GbGFnKTsKKyAgICAgICAgICAgICAgICAg
ICAgbGF5ZXJCdWZmZXIgPSBtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyPihXVEZNb3ZlKHRleHR1cmUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZnJhbWVIb2xkZXItPnVwZGF0ZVRleHR1cmUobGF5ZXJCdWZmZXItPnRleHR1cmVHTCgpKTsK
KyAgICAgICAgICAgICAgICBsYXllckJ1ZmZlci0+c2V0RXh0cmFGbGFncyhtX3RleHR1cmVNYXBw
ZXJGbGFncyB8IChmcmFtZUhvbGRlci0+aGFzQWxwaGFDaGFubmVsKCkgPyBUZXh0dXJlTWFwcGVy
R0w6OlNob3VsZEJsZW5kIDogMCkpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKLQotICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBp
cGVsaW5lKCksICJPbGQgc3RhdGU6ICVzLCBuZXcgc3RhdGU6ICVzIChyZXF1ZXN0ZWQ6ICVzKSIs
IGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1fb2xkU3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0
ZV9nZXRfbmFtZShtX2N1cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG1f
cmVxdWVzdGVkU3RhdGUpKTsKLSAgICAgICAgaWYgKG1fcmVxdWVzdGVkU3RhdGUgPT0gR1NUX1NU
QVRFX1BBVVNFRCAmJiBtX2N1cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAg
ICAgICAgICBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIEdT
VF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiUmVxdWVzdGVkIHN0YXRlIGNoYW5nZSB0byAlcyB3
YXMgY29tcGxldGVkIiwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50U3RhdGUp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEVtaXQgcGxheSBzdGF0ZSBjaGFuZ2Ugbm90aWZp
Y2F0aW9uIG9ubHkgd2hlbiBnb2luZyB0byBQTEFZSU5HIHNvIHRoYXQKLSAgICAgICAgLy8gdGhl
IG1lZGlhIGVsZW1lbnQgZ2V0cyBhIGNoYW5jZSB0byBlbmFibGUgaXRzIHBhZ2Ugc2xlZXAgZGlz
YWJsZXIuCi0gICAgICAgIC8vIEVtaXR0aW5nIHRoaXMgbm90aWZpY2F0aW9uIGluIG1vcmUgY2Fz
ZXMgdHJpZ2dlcnMgdW53YW50ZWQgY29kZSBwYXRocwotICAgICAgICAvLyBhbmQgdGVzdCB0aW1l
b3V0cy4KLSAgICAgICAgaWYgKHN0YXRlUmVhbGx5Q2hhbmdlZCAmJiAobV9vbGRTdGF0ZSAhPSBt
X2N1cnJlbnRTdGF0ZSkgJiYgKG1fb2xkU3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCAmJiBtX2N1
cnJlbnRTdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykpIHsKLSAgICAgICAgICAgIEdTVF9JTkZP
X09CSkVDVChwaXBlbGluZSgpLCAiUGxheWJhY2sgc3RhdGUgY2hhbmdlZCBmcm9tICVzIHRvICVz
LiBOb3RpZnlpbmcgdGhlIG1lZGlhIHBsYXllciBjbGllbnQiLCBnc3RfZWxlbWVudF9zdGF0ZV9n
ZXRfbmFtZShtX29sZFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUobV9jdXJyZW50
U3RhdGUpKTsKLSAgICAgICAgICAgIHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUgPSB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgR1NUX1NUQVRFX0NI
QU5HRV9BU1lOQzoKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiQXN5bmM6
IFN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShtX2N1
cnJlbnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKLSAgICAg
ICAgLy8gQ2hhbmdlIGluIHByb2dyZXNzLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdTVF9T
VEFURV9DSEFOR0VfRkFJTFVSRToKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiRmFpbHVyZTogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGlu
ZykpOwotICAgICAgICAvLyBDaGFuZ2UgZmFpbGVkCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IEdTVF9TVEFURV9DSEFOR0VfTk9fUFJFUk9MTDoKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiTm8gcHJlcm9sbDogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVt
ZW50X3N0YXRlX2dldF9uYW1lKG1fY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0
X25hbWUocGVuZGluZykpOwotCi0gICAgICAgIC8vIExpdmUgcGlwZWxpbmVzIGdvIGluIFBBVVNF
RCB3aXRob3V0IHByZXJvbGxpbmcuCi0gICAgICAgIG1faXNTdHJlYW1pbmcgPSB0cnVlOwotICAg
ICAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKTsKLQotICAgICAgICBpZiAobV9jdXJy
ZW50U3RhdGUgPT0gR1NUX1NUQVRFX1JFQURZKQotICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0g
TWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOwotICAgICAgICBlbHNlIGlmIChtX2N1cnJlbnRTdGF0
ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7Ci0gICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRp
YVBsYXllcjo6SGF2ZUVub3VnaERhdGE7Ci0gICAgICAgICAgICBtX3BhdXNlZCA9IHRydWU7Ci0g
ICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50U3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcpCi0g
ICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJveHkucHVzaE5leHRC
dWZmZXIoV1RGTW92ZShsYXllckJ1ZmZlcikpOworICAgICAgICB9OwogCi0gICAgICAgIGlmICgh
bV9wYXVzZWQgJiYgbV9wbGF5YmFja1JhdGUpCi0gICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0
YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBwcm94eU9wZXJh
dGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9u
aWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7CisjZWxzZQorICAgIHByb3h5T3BlcmF0aW9u
KCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKK30KKyNlbmRpZiAvLyBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpCiAKLSAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9h
ZGluZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChwaXBlbGluZSgpLCAiRWxzZSA6ICVkIiwgZ2V0U3RhdGVSZXN1bHQpOwotICAgICAgICBi
cmVhazsKLSAgICB9Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVwYWludCgp
Cit7CisgICAgQVNTRVJUKG1fc2FtcGxlKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
Ci0gICAgbV9yZXF1ZXN0ZWRTdGF0ZSA9IEdTVF9TVEFURV9WT0lEX1BFTkRJTkc7CisgICAgbV9w
bGF5ZXItPnJlcGFpbnQoKTsKIAotICAgIGlmIChzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRlKQot
ICAgICAgICBtX3BsYXllci0+cGxheWJhY2tTdGF0ZUNoYW5nZWQoKTsKKyAgICBMb2NrSG9sZGVy
IGxvY2sobV9kcmF3TXV0ZXgpOworICAgIG1fZHJhd0NvbmRpdGlvbi5ub3RpZnlPbmUoKTsKK30K
IAotICAgIGlmIChtX25ldHdvcmtTdGF0ZSAhPSBvbGROZXR3b3JrU3RhdGUpIHsKLSAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTmV0d29yayBTdGF0ZSBDaGFuZ2VkIGZyb20g
JXMgdG8gJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhvbGROZXR3b3JrU3RhdGUpLnV0
ZjgoKS5kYXRhKCksIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG1fbmV0d29ya1N0YXRlKS51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0cmlnZ2VyUmVwYWludChHc3RTYW1w
bGUqIHNhbXBsZSkKK3sKKyAgICBib29sIHRyaWdnZXJSZXNpemU7CisgICAgeworICAgICAgICBh
dXRvIHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2FtcGxlTXV0ZXgpOworICAgICAgICB0cmln
Z2VyUmVzaXplID0gIW1fc2FtcGxlOworICAgICAgICBtX3NhbXBsZSA9IHNhbXBsZTsKICAgICB9
Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBvbGRSZWFkeVN0YXRlKSB7Ci0gICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlJlYWR5IFN0YXRlIENoYW5nZWQgZnJvbSAlcyB0byAl
cyIsIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG9sZFJlYWR5U3RhdGUpLnV0ZjgoKS5kYXRh
KCksIGNvbnZlcnRFbnVtZXJhdGlvblRvU3RyaW5nKG1fcmVhZHlTdGF0ZSkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKHRy
aWdnZXJSZXNpemUpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRmly
c3Qgc2FtcGxlIHJlYWNoZWQgdGhlIHNpbmssIHRyaWdnZXJpbmcgdmlkZW8gZGltZW5zaW9ucyB1
cGRhdGUiKTsKKyAgICAgICAgbV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRp
b246OlNpemVDaGFuZ2VkLCBbdGhpc10geworICAgICAgICAgICAgbV9wbGF5ZXItPnNpemVDaGFu
Z2VkKCk7CisgICAgICAgIH0pOwogICAgIH0KIAotICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBH
U1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgbV9jdXJyZW50U3RhdGUgPj0gR1NUX1NUQVRFX1BB
VVNFRCkgewotICAgICAgICB1cGRhdGVQbGF5YmFja1JhdGUoKTsKLSAgICAgICAgaWYgKG1fc2Vl
a0lzUGVuZGluZykgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAi
W1NlZWtdIGNvbW1pdHRpbmcgcGVuZGluZyBzZWVrIHRvICVzIiwgdG9TdHJpbmcobV9zZWVrVGlt
ZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBtX3NlZWtJc1BlbmRpbmcgPSBmYWxzZTsK
LSAgICAgICAgICAgIG1fc2Vla2luZyA9IGRvU2VlayhtX3NlZWtUaW1lLCBtX3BsYXllci0+cmF0
ZSgpLCBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0ggfCBHU1Rf
U0VFS19GTEFHX0FDQ1VSQVRFKSk7Ci0gICAgICAgICAgICBpZiAoIW1fc2Vla2luZykgewotICAg
ICAgICAgICAgICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7
Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiW1NlZWtdIHNl
ZWtpbmcgdG8gJXMgZmFpbGVkIiwgdG9TdHJpbmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBpZiAoIW1fcmVuZGVyaW5nQ2FuQmVBY2Nl
bGVyYXRlZCkgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2RyYXdNdXRleCk7CisgICAg
ICAgIGlmIChtX2Rlc3Ryb3lpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fZHJh
d1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworICAgICAgICBtX2RyYXdDb25kaXRpb24ud2FpdCht
X2RyYXdNdXRleCk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyNpZiBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpCisgICAgaWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2luaykgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2sobV9kcmF3TXV0ZXgpOworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9u
ID0KKyAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBw
cm94eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJveHkuc2NoZWR1
bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQoW3RoaXNdIHsgdGhpcy0+cHVzaFRleHR1cmVUb0Nv
bXBvc2l0b3IoKTsgfSk7CisgICAgICAgICAgICB9OworI2lmIFVTRShOSUNPU0lBKQorICAgICAg
ICBpZiAoIXByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgIGlmICghcHJveHlPcGVyYXRpb24oKm1fcGxhdGZv
cm1MYXllclByb3h5KSkKKyAgICAgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgICAgICBtX2Ry
YXdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKKyAgICAgICAgbV9kcmF3Q29uZGl0aW9uLndhaXQo
bV9kcmF3TXV0ZXgpOworICAgIH0gZWxzZQorICAgICAgICBwdXNoVGV4dHVyZVRvQ29tcG9zaXRv
cigpOworI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKIH0KIAotYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3Nh
Z2UpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cmVwYWludENhbGxiYWNrKE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyLCBHc3RTYW1wbGUqIHNhbXBsZSkKIHsK
LSAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1f
Q09MTEVDVElPTiAmJiAhbV9pc0xlZ2FjeVBsYXliaW4pIHsKLSAgICAgICAgR1JlZlB0cjxHc3RT
dHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOwotICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9z
dHJlYW1fY29sbGVjdGlvbihtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7CisgICAgcGxh
eWVyLT50cmlnZ2VyUmVwYWludChzYW1wbGUpOworfQogCi0gICAgICAgIGlmIChjb2xsZWN0aW9u
KSB7Ci0gICAgICAgICAgICBtX3N0cmVhbUNvbGxlY3Rpb24uc3dhcChjb2xsZWN0aW9uKTsKLSAg
ICAgICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpTdHJl
YW1Db2xsZWN0aW9uQ2hhbmdlZCwgW3RoaXNdIHsKLSAgICAgICAgICAgICAgICB0aGlzLT51cGRh
dGVUcmFja3MoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Cit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2FuY2VsUmVwYWludChib29sIGRlc3Ryb3lpbmcpCit7CisgICAg
Ly8gVGhlIGdvYWwgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byByZWxlYXNlIHRoZSBHU3RyZWFtZXIg
dGhyZWFkIGZyb20gbV9kcmF3Q29uZGl0aW9uIGluIHRyaWdnZXJSZXBhaW50KCkgaW4gbm9uLUFD
IGNhc2UsCisgICAgLy8gdG8gYXZvaWQgYSBkZWFkbG9jayBpZiB0aGUgcGxheWVyIGdldHMgcGF1
c2VkIHdoaWxlIHdhaXRpbmcgZm9yIGRyYXdpbmcgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMDAzKToKKyAgICAvLyB0aGUgbWFpbiB0aHJlYWQgaXMgd2Fp
dGluZyBmb3IgdGhlIEdTdHJlYW1lciB0aHJlYWQgdG8gcGF1c2UsIGJ1dCB0aGUgR1N0cmVhbWVy
IHRocmVhZCBpcyBsb2NrZWQgd2FpdGluZyBmb3IgdGhlCisgICAgLy8gbWFpbiB0aHJlYWQgdG8g
ZHJhdy4gVGhpcyBkZWFkbG9jayBkb2Vzbid0IGhhcHBlbiB3aGVuIHVzaW5nIEFDIGJlY2F1c2Ug
dGhlIHNhbXBsZSBpcyBwcm9jZXNzZWQgKG5vdCBwYWludGVkKSBpbiB0aGUgY29tcG9zaXRvcgor
ICAgIC8vIHRocmVhZCwgc28gdGhlIG1haW4gdGhyZWFkIGNhbiByZXF1ZXN0IHRoZSBwYXVzZSBh
bmQgd2FpdCBpZiB0aGUgR1N0cmVhbWVyIHRocmVhZCBpcyB3YWl0aW5nIGZvciB0aGUgY29tcG9z
aXRvciB0aHJlYWQuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gdXNlZCB3
aGVuIGRlc3Ryb3lpbmcgdGhlIHBsYXllciAoZGVzdHJveWluZyBwYXJhbWV0ZXIgaXMgdHJ1ZSks
IHRvIHJlbGVhc2UgdGhlIGdzdHJlYW1lciB0aHJlYWQgZnJvbQorICAgIC8vIG1fZHJhd0NvbmRp
dGlvbiBhbmQgdG8gZW5zdXJlIHRoYXQgbmV3IHRyaWdnZXJSZXBhaW50IGNhbGxzIHdvbid0IHdh
aXQgb24gbV9kcmF3Q29uZGl0aW9uLgorICAgIGlmICghbV9yZW5kZXJpbmdDYW5CZUFjY2VsZXJh
dGVkKSB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZHJhd011dGV4KTsKKyAgICAgICAg
bV9kcmF3VGltZXIuc3RvcCgpOworICAgICAgICBtX2Rlc3Ryb3lpbmcgPSBkZXN0cm95aW5nOwor
ICAgICAgICBtX2RyYXdDb25kaXRpb24ubm90aWZ5T25lKCk7CiAgICAgfQorfQogCi0gICAgcmV0
dXJuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmhhbmRsZVN5bmNNZXNzYWdlKG1l
c3NhZ2UpOwordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnJlcGFpbnRDYW5jZWxs
ZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICBw
bGF5ZXItPmNhbmNlbFJlcGFpbnQoKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om1lZGlhTG9jYXRpb25DaGFuZ2VkKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCisjaWYgVVNF
KEdTVFJFQU1FUl9HTCkKK0dzdEZsb3dSZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpuZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50KiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIqIHBsYXllcikKIHsKLSAgICBpZiAobV9tZWRpYUxvY2F0aW9ucykKLSAgICAgICAg
Z3N0X3N0cnVjdHVyZV9mcmVlKG1fbWVkaWFMb2NhdGlvbnMpOworICAgIEdSZWZQdHI8R3N0U2Ft
cGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBf
U0lOSyhzaW5rKSkpOworICAgIHBsYXllci0+dHJpZ2dlclJlcGFpbnQoc2FtcGxlLmdldCgpKTsK
KyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CiAKLSAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUobWVzc2FnZSk7Ci0gICAgaWYgKHN0
cnVjdHVyZSkgewotICAgICAgICAvLyBUaGlzIHN0cnVjdHVyZSBjYW4gY29udGFpbjoKLSAgICAg
ICAgLy8gLSBib3RoIGEgbmV3LWxvY2F0aW9uIHN0cmluZyBhbmQgZW1iZWRkZWQgbG9jYXRpb25z
IHN0cnVjdHVyZQotICAgICAgICAvLyAtIG9yIG9ubHkgYSBuZXctbG9jYXRpb24gc3RyaW5nLgot
ICAgICAgICBtX21lZGlhTG9jYXRpb25zID0gZ3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSk7
Ci0gICAgICAgIGNvbnN0IEdWYWx1ZSogbG9jYXRpb25zID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFs
dWUobV9tZWRpYUxvY2F0aW9ucywgImxvY2F0aW9ucyIpOworR3N0Rmxvd1JldHVybiBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6Om5ld1ByZXJvbGxDYWxsYmFjayhHc3RFbGVtZW50KiBzaW5r
LCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikKK3sKKyAgICBHUmVmUHRyPEdz
dFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3ByZXJvbGwoR1NU
X0FQUF9TSU5LKHNpbmspKSk7CisgICAgcGxheWVyLT50cmlnZ2VyUmVwYWludChzYW1wbGUuZ2V0
KCkpOworICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30KIAotICAgICAgICBpZiAobG9jYXRpb25z
KQotICAgICAgICAgICAgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4ID0gc3RhdGljX2Nhc3Q8
aW50Pihnc3RfdmFsdWVfbGlzdF9nZXRfc2l6ZShsb2NhdGlvbnMpKSAtMTsKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpmbHVzaEN1cnJlbnRCdWZmZXIoKQoreworICAgIGF1dG8g
c2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7CiAKLSAgICAgICAgbG9hZE5l
eHRMb2NhdGlvbigpOworICAgIGlmIChtX3NhbXBsZSkgeworICAgICAgICAvLyBSZXBsYWNlIGJ5
IGEgbmV3IHNhbXBsZSBoYXZpbmcgb25seSB0aGUgY2Fwcywgc28gdGhpcyBkdW1teSBzYW1wbGUg
aXMgc3RpbGwgdXNlZnVsIHRvIGdldCB0aGUgZGltZW5zaW9ucy4KKyAgICAgICAgLy8gVGhpcyBw
cmV2ZW50cyByZXNpemluZyBwcm9ibGVtcyB3aGVuIHRoZSB2aWRlbyBjaGFuZ2VzIGl0cyBxdWFs
aXR5IGFuZCBhIERSQUlOIGlzIHBlcmZvcm1lZC4KKyAgICAgICAgY29uc3QgR3N0U3RydWN0dXJl
KiBpbmZvID0gZ3N0X3NhbXBsZV9nZXRfaW5mbyhtX3NhbXBsZS5nZXQoKSk7CisgICAgICAgIG1f
c2FtcGxlID0gYWRvcHRHUmVmKGdzdF9zYW1wbGVfbmV3KG51bGxwdHIsIGdzdF9zYW1wbGVfZ2V0
X2NhcHMobV9zYW1wbGUuZ2V0KCkpLAorICAgICAgICAgICAgZ3N0X3NhbXBsZV9nZXRfc2VnbWVu
dChtX3NhbXBsZS5nZXQoKSksIGluZm8gPyBnc3Rfc3RydWN0dXJlX2NvcHkoaW5mbykgOiBudWxs
cHRyKSk7CiAgICAgfQorCisgICAgYm9vbCBzaG91bGRXYWl0ID0gbV92aWRlb0RlY29kZXJQbGF0
Zm9ybSA9PSBHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6VmlkZW80TGludXg7CisgICAgYXV0byBw
cm94eU9wZXJhdGlvbiA9IFtzaG91bGRXYWl0LCBwaXBlbGluZSA9IHBpcGVsaW5lKCldKFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KSB7CisgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUsICJGbHVzaGluZyB2aWRlbyBzYW1wbGUgJXMiLCBzaG91bGRXYWl0ID8g
InN5bmNocm9ub3VzbHkiIDogIiIpOworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcighc2hvdWxk
V2FpdCA/ICZwcm94eS5sb2NrKCkgOiBudWxscHRyKTsKKworICAgICAgICBpZiAocHJveHkuaXNB
Y3RpdmUoKSkKKyAgICAgICAgICAgIHByb3h5LmRyb3BDdXJyZW50QnVmZmVyV2hpbGVQcmVzZXJ2
aW5nVGV4dHVyZShzaG91bGRXYWl0KTsKKyAgICB9OworCisjaWYgVVNFKE5JQ09TSUEpCisgICAg
cHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICBwcm94
eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCiB9CisjZW5kaWYKIAot
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9jYXRpb24oKQordm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIHsKLSAgICBpZiAoIW1fbWVkaWFMb2NhdGlvbnMpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBtX3NpemUgPSBzaXplOworfQogCi0gICAgY29uc3QgR1ZhbHVlKiBsb2NhdGlvbnMgPSBn
c3Rfc3RydWN0dXJlX2dldF92YWx1ZShtX21lZGlhTG9jYXRpb25zLCAibG9jYXRpb25zIik7Ci0g
ICAgY29uc3QgZ2NoYXIqIG5ld0xvY2F0aW9uID0gbnVsbHB0cjsKK3ZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghbG9jYXRpb25zKSB7Ci0gICAgICAgIC8vIEZhbGxi
YWNrIG9uIG5ldy1sb2NhdGlvbiBzdHJpbmcuCi0gICAgICAgIG5ld0xvY2F0aW9uID0gZ3N0X3N0
cnVjdHVyZV9nZXRfc3RyaW5nKG1fbWVkaWFMb2NhdGlvbnMsICJuZXctbG9jYXRpb24iKTsKLSAg
ICAgICAgaWYgKCFuZXdMb2NhdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
CisgICAgaWYgKCFtX3BsYXllci0+dmlzaWJsZSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIW5ld0xvY2F0aW9uKSB7Ci0gICAgICAgIGlmIChtX21lZGlhTG9jYXRpb25DdXJyZW50SW5k
ZXggPCAwKSB7Ci0gICAgICAgICAgICBtX21lZGlhTG9jYXRpb25zID0gbnVsbHB0cjsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgIGF1dG8gc2FtcGxlTG9ja2VyID0g
aG9sZExvY2sobV9zYW1wbGVNdXRleCk7CisgICAgaWYgKCFHU1RfSVNfU0FNUExFKG1fc2FtcGxl
LmdldCgpKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGNvbnN0IEdWYWx1ZSogbG9jYXRp
b24gPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFsdWUobG9jYXRpb25zLCBtX21lZGlhTG9jYXRpb25D
dXJyZW50SW5kZXgpOwotICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdz
dF92YWx1ZV9nZXRfc3RydWN0dXJlKGxvY2F0aW9uKTsKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQor
ICAgIC8vIEVuc3VyZSB0aGUgaW5wdXQgaXMgUkdCQS4gV2UgaGFuZGxlIFlVViB2aWRlbyBuYXRp
dmVseSwgc28gd2UgbmVlZCB0byBkbworICAgIC8vIHRoaXMgY29udmVyc2lvbiBvbi1kZW1hbmQg
aGVyZS4KKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihtX3Nh
bXBsZS5nZXQoKSk7CisgICAgaWYgKFVOTElLRUxZKCFHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpKQor
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAg
IG1fbWVkaWFMb2NhdGlvbkN1cnJlbnRJbmRleC0tOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEdzdENhcHMqIGNhcHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzKG1fc2FtcGxlLmdldCgp
KTsKKworICAgIEdzdFZpZGVvSW5mbyB2aWRlb0luZm87CisgICAgZ3N0X3ZpZGVvX2luZm9faW5p
dCgmdmlkZW9JbmZvKTsKKyAgICBpZiAoIWdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9J
bmZvLCBjYXBzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFHU1RfVklERU9fSU5GT19J
U19SR0IoJnZpZGVvSW5mbykpIHsKKyAgICAgICAgaWYgKCFtX2NvbG9yQ29udmVydCkgeworICAg
ICAgICAgICAgR3N0TWVtb3J5KiBtZW0gPSBnc3RfYnVmZmVyX3BlZWtfbWVtb3J5KGJ1ZmZlciwg
MCk7CisgICAgICAgICAgICBHc3RHTENvbnRleHQqIGNvbnRleHQgPSAoKEdzdEdMQmFzZU1lbW9y
eSopbWVtKS0+Y29udGV4dDsKKyAgICAgICAgICAgIG1fY29sb3JDb252ZXJ0ID0gYWRvcHRHUmVm
KGdzdF9nbF9jb2xvcl9jb252ZXJ0X25ldyhjb250ZXh0KSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBuZXdMb2NhdGlvbiA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJuZXct
bG9jYXRpb24iKTsKKyAgICAgICAgaWYgKCFtX2NvbG9yQ29udmVydElucHV0Q2FwcyB8fCAhZ3N0
X2NhcHNfaXNfZXF1YWwobV9jb2xvckNvbnZlcnRJbnB1dENhcHMuZ2V0KCksIGNhcHMpKSB7Cisg
ICAgICAgICAgICBtX2NvbG9yQ29udmVydElucHV0Q2FwcyA9IGNhcHM7CisgICAgICAgICAgICBt
X2NvbG9yQ29udmVydE91dHB1dENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfY29weShjYXBzKSk7
CisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorICAgICAgICAgICAgY29uc3Qg
Z2NoYXIqIGZvcm1hdFN0cmluZyA9IEdTVF9WSURFT19JTkZPX0hBU19BTFBIQSgmdmlkZW9JbmZv
KSA/ICJSR0JBIiA6ICJCR1J4IjsKKyNlbHNlCisgICAgICAgICAgICBjb25zdCBnY2hhciogZm9y
bWF0U3RyaW5nID0gR1NUX1ZJREVPX0lORk9fSEFTX0FMUEhBKCZ2aWRlb0luZm8pID8gIlJHQkEi
IDogIlJHQngiOworI2VuZGlmCisgICAgICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlKG1fY29s
b3JDb252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSwgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsIGZvcm1h
dFN0cmluZywgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoIWdzdF9nbF9jb2xvcl9jb252ZXJ0
X3NldF9jYXBzKG1fY29sb3JDb252ZXJ0LmdldCgpLCBjYXBzLCBtX2NvbG9yQ29udmVydE91dHB1
dENhcHMuZ2V0KCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIEdSZWZQdHI8R3N0QnVmZmVyPiByZ2JCdWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2dsX2NvbG9y
X2NvbnZlcnRfcGVyZm9ybShtX2NvbG9yQ29udmVydC5nZXQoKSwgYnVmZmVyKSk7CisgICAgICAg
IGlmIChVTkxJS0VMWSghR1NUX0lTX0JVRkZFUihyZ2JCdWZmZXIuZ2V0KCkpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIGluZm8gPSBnc3Rfc2Ft
cGxlX2dldF9pbmZvKG1fc2FtcGxlLmdldCgpKTsKKyAgICAgICAgbV9zYW1wbGUgPSBhZG9wdEdS
ZWYoZ3N0X3NhbXBsZV9uZXcocmdiQnVmZmVyLmdldCgpLCBtX2NvbG9yQ29udmVydE91dHB1dENh
cHMuZ2V0KCksCisgICAgICAgICAgICBnc3Rfc2FtcGxlX2dldF9zZWdtZW50KG1fc2FtcGxlLmdl
dCgpKSwgaW5mbyA/IGdzdF9zdHJ1Y3R1cmVfY29weShpbmZvKSA6IG51bGxwdHIpKTsKICAgICB9
CisjZW5kaWYKIAotICAgIGlmIChuZXdMb2NhdGlvbikgewotICAgICAgICAvLyBGb3VuZCBhIGNh
bmRpZGF0ZS4gbmV3LWxvY2F0aW9uIGlzIG5vdCBhbHdheXMgYW4gYWJzb2x1dGUgdXJsCi0gICAg
ICAgIC8vIHRob3VnaC4gV2UgbmVlZCB0byB0YWtlIHRoZSBiYXNlIG9mIHRoZSBjdXJyZW50IHVy
bCBhbmQKLSAgICAgICAgLy8gYXBwZW5kIHRoZSB2YWx1ZSBvZiBuZXctbG9jYXRpb24gdG8gaXQu
Ci0gICAgICAgIFVSTCBiYXNlVXJsID0gZ3N0X3VyaV9pc192YWxpZChuZXdMb2NhdGlvbikgPyBV
UkwoKSA6IG1fdXJsOwotICAgICAgICBVUkwgbmV3VXJsID0gVVJMKGJhc2VVcmwsIG5ld0xvY2F0
aW9uKTsKKyAgICBhdXRvIGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1f
c2FtcGxlLmdldCgpKTsKKyAgICBpZiAoIWdzdEltYWdlKQorICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gcGxheWJpblVybFN0cjsKLSAgICAgICAgZ19vYmpl
Y3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJjdXJyZW50LXVyaSIsICZwbGF5YmluVXJsU3RyLm91
dFB0cigpLCBudWxscHRyKTsKLSAgICAgICAgVVJMIHBsYXliaW5VcmwoVVJMKCksIHBsYXliaW5V
cmxTdHIuZ2V0KCkpOworICAgIGNvbnRleHQuZHJhd0ltYWdlKGdzdEltYWdlLT5pbWFnZSgpLCBy
ZWN0LCBnc3RJbWFnZS0+cmVjdCgpLCB7IENvbXBvc2l0ZUNvcHksIG1fcmVuZGVyaW5nQ2FuQmVB
Y2NlbGVyYXRlZCA/IG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA6IEltYWdlT3JpZW50YXRpb24o
KSB9KTsKK30KIAotICAgICAgICBpZiAocGxheWJpblVybCA9PSBuZXdVcmwpIHsKLSAgICAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXliaW4gYWxyZWFkeSBoYW5kbGVk
IHJlZGlyZWN0aW9uLiIpOworI2lmIFVTRShHU1RSRUFNRVJfR0wpCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBQbGF0Zm9ybTNET2JqZWN0IG91dHB1dFRleHR1cmUsIEdD
M0RlbnVtIG91dHB1dFRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBib29sIGZsaXBZKQoreworICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKIAotICAgICAgICAg
ICAgbV91cmwgPSBwbGF5YmluVXJsOworICAgIGlmIChtX3VzaW5nRmFsbGJhY2tWaWRlb1Npbmsp
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KKyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1JFQURZKTsKLSAgICAgICAg
YXV0byBzZWN1cml0eU9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobV91cmwpOwotICAg
ICAgICBpZiAoc2VjdXJpdHlPcmlnaW4tPmNhblJlcXVlc3QobmV3VXJsKSkgewotICAgICAgICAg
ICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJOZXcgbWVkaWEgdXJsOiAlcyIsIG5ld1Vy
bC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhvbGRM
b2NrKG1fc2FtcGxlTXV0ZXgpOwogCi0gICAgICAgICAgICAvLyBSZXNldCBwbGF5ZXIgc3RhdGVz
LgotICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKLSAg
ICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7Ci0gICAgICAgICAgICBt
X3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmc7Ci0gICAgICAgICAgICBtX3Bs
YXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICBpZiAoIUdTVF9JU19TQU1QTEUobV9zYW1w
bGUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIC8vIFJlc2V0
IHBpcGVsaW5lIHN0YXRlLgotICAgICAgICAgICAgbV9yZXNldFBpcGVsaW5lID0gdHJ1ZTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3N0VmlkZW9GcmFtZUhvbGRlcj4gZnJhbWVIb2xkZXIgPSBtYWtl
VW5pcXVlPEdzdFZpZGVvRnJhbWVIb2xkZXI+KG1fc2FtcGxlLmdldCgpLCBtX3ZpZGVvRGVjb2Rl
clBsYXRmb3JtLCBtX3RleHR1cmVNYXBwZXJGbGFncywgdHJ1ZSk7CiAKLSAgICAgICAgICAgIEdz
dFN0YXRlIHN0YXRlOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxp
bmUuZ2V0KCksICZzdGF0ZSwgbnVsbHB0ciwgMCk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUgPD0g
R1NUX1NUQVRFX1JFQURZKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBuZXcgdXJpIGFu
ZCBzdGFydCBwbGF5aW5nLgotICAgICAgICAgICAgICAgIHNldFBsYXliaW5VUkwobmV3VXJsKTsK
LSAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIk5vdCBhbGxvd2Vk
IHRvIGxvYWQgbmV3IG1lZGlhIGxvY2F0aW9uOiAlcyIsIG5ld1VybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICB9Ci0gICAgbV9tZWRpYUxvY2F0aW9uQ3VycmVudEluZGV4LS07Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllckJ1ZmZlcj4gbGF5ZXJCdWZmZXIgPSBmcmFtZUhvbGRlci0+cGxhdGZvcm1MYXllckJ1
ZmZlcigpOworICAgIGlmICghbGF5ZXJCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRTdGF0ZUNoYW5nZWQoKQotewot
ICAgIHVwZGF0ZVN0YXRlcygpOwotfQorICAgIGF1dG8gc2l6ZSA9IGZyYW1lSG9sZGVyLT5zaXpl
KCk7CisgICAgaWYgKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgp
KQorICAgICAgICBzaXplID0gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOwogCi12b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6dGltZUNoYW5nZWQoKQotewotICAgIHVwZGF0ZVN0YXRlcygp
OwotICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworICAgIGlmICghbV92aWRlb1RleHR1cmVD
b3BpZXIpCisgICAgICAgIG1fdmlkZW9UZXh0dXJlQ29waWVyID0gbWFrZVVuaXF1ZTxWaWRlb1Rl
eHR1cmVDb3BpZXJHU3RyZWFtZXI+KFRFWFRVUkVfQ09QSUVSX0NPTE9SX0NPTlZFUlRfRkxBRyk7
CisKKyAgICBmcmFtZUhvbGRlci0+d2FpdEZvckNQVVN5bmMoKTsKKworICAgIHJldHVybiBtX3Zp
ZGVvVGV4dHVyZUNvcGllci0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCpsYXll
ckJ1ZmZlci5nZXQoKSwgc2l6ZSwgb3V0cHV0VGV4dHVyZSwgb3V0cHV0VGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgZmxpcFksIG1fdmlkZW9Tb3VyY2VPcmllbnRh
dGlvbik7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRFbmQoKQor
TmF0aXZlSW1hZ2VQdHIgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXRpdmVJbWFnZUZv
ckN1cnJlbnRUaW1lKCkKIHsKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXli
YWNrIGVuZGVkIik7CisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQorICAgIGlmIChtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmspCisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgLy8gU3luY2hyb25pemUgcG9zaXRpb24gYW5kIGR1cmF0aW9uIHZhbHVl
cyB0byBub3QgY29uZnVzZSB0aGUKLSAgICAvLyBIVE1MTWVkaWFFbGVtZW50LiBJbiBzb21lIGNh
c2VzIGxpa2UgcmV2ZXJzZSBwbGF5YmFjayB0aGUKLSAgICAvLyBwb3NpdGlvbiBpcyBub3QgYWx3
YXlzIHJlcG9ydGVkIGFzIDAgZm9yIGluc3RhbmNlLgotICAgIG1fY2FjaGVkUG9zaXRpb24gPSBN
ZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7Ci0gICAgTWVkaWFUaW1lIG5vdyA9IGN1cnJlbnRNZWRp
YVRpbWUoKTsKLSAgICBpZiAobm93ID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpICYmICFtX3NlZWtp
bmcpIHsKLSAgICAgICAgbV9jYWNoZWREdXJhdGlvbiA9IG5vdzsKLSAgICAgICAgbV9wbGF5ZXIt
PmR1cmF0aW9uQ2hhbmdlZCgpOwotICAgIH0KKyAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhvbGRM
b2NrKG1fc2FtcGxlTXV0ZXgpOwogCi0gICAgbV9pc0VuZFJlYWNoZWQgPSB0cnVlOworICAgIGlm
ICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgaWYgKCFtX3BsYXllci0+Y2xpZW50KCkubWVkaWFQbGF5ZXJJc0xvb3BpbmcoKSkg
ewotICAgICAgICBtX3BhdXNlZCA9IHRydWU7Ci0gICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUo
R1NUX1NUQVRFX1JFQURZKTsKLSAgICAgICAgbV9kb3dubG9hZEZpbmlzaGVkID0gZmFsc2U7Ci0g
ICAgfQotICAgIHRpbWVDaGFuZ2VkKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJh
bWVIb2xkZXI+IGZyYW1lSG9sZGVyID0gbWFrZVVuaXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPiht
X3NhbXBsZS5nZXQoKSwgbV92aWRlb0RlY29kZXJQbGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxh
Z3MsIHRydWUpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9IGZyYW1lSG9sZGVyLT5wbGF0Zm9ybUxheWVyQnVmZmVy
KCk7CisgICAgaWYgKCFsYXllckJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBhdXRvIHNpemUgPSBmcmFtZUhvbGRlci0+c2l6ZSgpOworICAgIGlmIChtX3ZpZGVvU291cmNl
T3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkKKyAgICAgICAgc2l6ZSA9IHNpemUudHJh
bnNwb3NlZFNpemUoKTsKKworICAgIEdMQ29udGV4dCogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAg
IGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYgKCFtX3ZpZGVvVGV4dHVy
ZUNvcGllcikKKyAgICAgICAgbV92aWRlb1RleHR1cmVDb3BpZXIgPSBtYWtlVW5pcXVlPFZpZGVv
VGV4dHVyZUNvcGllckdTdHJlYW1lcj4oVEVYVFVSRV9DT1BJRVJfQ09MT1JfQ09OVkVSVF9GTEFH
KTsKKworICAgIGZyYW1lSG9sZGVyLT53YWl0Rm9yQ1BVU3luYygpOworCisgICAgaWYgKCFtX3Zp
ZGVvVGV4dHVyZUNvcGllci0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCpsYXll
ckJ1ZmZlci5nZXQoKSwgc2l6ZSwgMCwgR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbikpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2dsX3N1
cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NP
TlRFTlRfQ09MT1JfQUxQSEEsIG1fdmlkZW9UZXh0dXJlQ29waWVyLT5yZXN1bHRUZXh0dXJlKCks
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworI2Vsc2UKKyAgICByZXR1cm4gbnVsbHB0
cjsKKyNlbmRpZgogfQorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNldFZpZGVvU291cmNlT3JpZW50YXRpb24oSW1hZ2VPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikKIHsKLSAgICBNZWRpYVRpbWUgcHJldmlvdXNEdXJhdGlvbiA9IGR1
cmF0aW9uTWVkaWFUaW1lKCk7Ci0gICAgbV9jYWNoZWREdXJhdGlvbiA9IE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKTsKKyAgICBpZiAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uID09IG9yaWVudGF0
aW9uKQorICAgICAgICByZXR1cm47CiAKLSAgICAvLyBBdm9pZCBlbWl0aW5nIGR1cmF0aW9uY2hh
bmdlZCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgcHJldmlvdXMKLSAgICAvLyBkdXJhdGlvbiB3YXMg
MCBiZWNhdXNlIHRoYXQgY2FzZSBpcyBhbHJlYWR5IGhhbmRsZWQgYnkgdGhlCi0gICAgLy8gSFRN
TE1lZGlhRWxlbWVudC4KLSAgICBpZiAocHJldmlvdXNEdXJhdGlvbiAmJiBkdXJhdGlvbk1lZGlh
VGltZSgpICE9IHByZXZpb3VzRHVyYXRpb24pCi0gICAgICAgIG1fcGxheWVyLT5kdXJhdGlvbkNo
YW5nZWQoKTsKKyAgICBtX3ZpZGVvU291cmNlT3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjsKKyNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgdXBkYXRlVGV4dHVyZU1hcHBlckZsYWdzKCk7
CisjZW5kaWYKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWRpbmdG
YWlsZWQoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3b3JrRXJyb3IsIE1lZGlhUGxheWVy
OjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUsIGJvb2wgZm9yY2VOb3RpZmljYXRpb25zKQorI2lmIFVT
RShURVhUVVJFX01BUFBFUl9HTCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1
cGRhdGVUZXh0dXJlTWFwcGVyRmxhZ3MoKQogewotICAgIEdTVF9XQVJOSU5HKCJMb2FkaW5nIGZh
aWxlZCwgZXJyb3I6ICVzIiwgY29udmVydEVudW1lcmF0aW9uVG9TdHJpbmcobmV0d29ya0Vycm9y
KS51dGY4KCkuZGF0YSgpKTsKLQotICAgIG1fZXJyb3JPY2N1cmVkID0gdHJ1ZTsKLSAgICBpZiAo
Zm9yY2VOb3RpZmljYXRpb25zIHx8IG1fbmV0d29ya1N0YXRlICE9IG5ldHdvcmtFcnJvcikgewot
ICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IG5ldHdvcmtFcnJvcjsKLSAgICAgICAgbV9wbGF5ZXIt
Pm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKLSAgICB9Ci0gICAgaWYgKGZvcmNlTm90aWZpY2F0aW9u
cyB8fCBtX3JlYWR5U3RhdGUgIT0gcmVhZHlTdGF0ZSkgewotICAgICAgICBtX3JlYWR5U3RhdGUg
PSByZWFkeVN0YXRlOwotICAgICAgICBtX3BsYXllci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAg
ICBzd2l0Y2ggKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbikgeworICAgIGNhc2UgSW1hZ2VPcmll
bnRhdGlvbjo6T3JpZ2luVG9wTGVmdDoKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyRmxhZ3MgPSAw
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEltYWdlT3JpZW50YXRpb246Ok9yaWdpblJpZ2h0
VG9wOgorICAgICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9IFRleHR1cmVNYXBwZXJHTDo6U2hv
dWxkUm90YXRlVGV4dHVyZTkwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEltYWdlT3JpZW50
YXRpb246Ok9yaWdpbkJvdHRvbVJpZ2h0OgorICAgICAgICBtX3RleHR1cmVNYXBwZXJGbGFncyA9
IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkUm90YXRlVGV4dHVyZTE4MDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5MZWZ0Qm90dG9tOgorICAgICAgICBt
X3RleHR1cmVNYXBwZXJGbGFncyA9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkUm90YXRlVGV4dHVy
ZTI3MDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRklYTUU6IEhh
bmRsZSBPcmlnaW5Ub3BSaWdodCwgT3JpZ2luQm90dG9tTGVmdCwgT3JpZ2luTGVmdFRvcCBhbmQg
T3JpZ2luUmlnaHRCb3R0b20/CisgICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gMDsKKyAg
ICAgICAgYnJlYWs7CiAgICAgfQotCi0gICAgLy8gTG9hZGluZyBmYWlsZWQsIHJlbW92ZSByZWFk
eSB0aW1lci4KLSAgICBtX3JlYWR5VGltZXJIYW5kbGVyLnN0b3AoKTsKIH0KKyNlbmRpZgogCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Z2V0U3VwcG9ydGVkVHlwZXMoSGFzaFNl
dDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mIHR5cGVzKQorYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnN1cHBvcnRzRnVsbHNjcmVlbigpIGNvbnN0CiB7Ci0gICAg
YXV0byYgZ3N0UmVnaXN0cnlTY2FubmVyID0gR1N0cmVhbWVyUmVnaXN0cnlTY2FubmVyOjpzaW5n
bGV0b24oKTsKLSAgICB0eXBlcyA9IGdzdFJlZ2lzdHJ5U2Nhbm5lci5taW1lVHlwZVNldCgpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCi1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9y
dFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCitNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om1vdmllTG9hZFR5cGUoKSBjb25zdAogewotICAgIE1l
ZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgcmVzdWx0ID0gTWVkaWFQbGF5ZXI6OklzTm90U3VwcG9y
dGVkOwotI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCi0gICAgLy8gTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFIGlzIGluIGNoYXJnZSBvZiBtZWRpYXNvdXJjZSBwbGF5YmFjaywgbm90IHVz
LgotICAgIGlmIChwYXJhbWV0ZXJzLmlzTWVkaWFTb3VyY2UpCi0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0jZW5kaWYKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IE1lZGlhUGxheWVyOjpIYXZlTm90
aGluZykKKyAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyOjpVbmtub3duOwogCi0jaWYgIUVOQUJM
RShNRURJQV9TVFJFQU0pCi0gICAgaWYgKHBhcmFtZXRlcnMuaXNNZWRpYVN0cmVhbSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSNlbmRpZgorICAgIGlmIChpc0xpdmVTdHJlYW0oKSkKKyAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyOjpMaXZlU3RyZWFtOwogCi0gICAgaWYgKHBhcmFtZXRlcnMu
dHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIE1lZGlh
UGxheWVyOjpEb3dubG9hZDsKK30KIAotICAgIEdTVF9ERUJVRygiQ2hlY2tpbmcgbWltZS10eXBl
IFwiJXNcIiIsIHBhcmFtZXRlcnMudHlwZS5yYXcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBhdXRv
IGNvbnRhaW5lclR5cGUgPSBwYXJhbWV0ZXJzLnR5cGUuY29udGFpbmVyVHlwZSgpOwotICAgIGF1
dG8mIGdzdFJlZ2lzdHJ5U2Nhbm5lciA9IEdTdHJlYW1lclJlZ2lzdHJ5U2Nhbm5lcjo6c2luZ2xl
dG9uKCk7Ci0gICAgaWYgKGdzdFJlZ2lzdHJ5U2Nhbm5lci5pc0NvbnRhaW5lclR5cGVTdXBwb3J0
ZWQoY29udGFpbmVyVHlwZSkpIHsKLSAgICAgICAgLy8gU3BlYyBzYXlzIHdlIHNob3VsZCBub3Qg
cmV0dXJuICJwcm9iYWJseSIgaWYgdGhlIGNvZGVjcyBzdHJpbmcgaXMgZW1wdHkuCi0gICAgICAg
IFZlY3RvcjxTdHJpbmc+IGNvZGVjcyA9IHBhcmFtZXRlcnMudHlwZS5jb2RlY3MoKTsKLSAgICAg
ICAgcmVzdWx0ID0gY29kZWNzLmlzRW1wdHkoKSA/IE1lZGlhUGxheWVyOjpNYXlCZVN1cHBvcnRl
ZCA6IChnc3RSZWdpc3RyeVNjYW5uZXIuYXJlQWxsQ29kZWNzU3VwcG9ydGVkKGNvZGVjcykgPyBN
ZWRpYVBsYXllcjo6SXNTdXBwb3J0ZWQgOiBNZWRpYVBsYXllcjo6SXNOb3RTdXBwb3J0ZWQpOwot
ICAgIH0KKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpjcmVhdGVHTEFwcFNpbmsoKQoreworICAgIEdzdEVsZW1lbnQqIGFwcHNp
bmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsiLCAid2Via2l0LWdsLXZpZGVv
LXNpbmsiKTsKKyAgICBpZiAoIWFwcHNpbmspCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgZ19vYmplY3Rfc2V0KGFwcHNpbmssICJlbmFibGUtbGFzdC1zYW1wbGUiLCBGQUxTRSwgImVt
aXQtc2lnbmFscyIsIFRSVUUsICJtYXgtYnVmZmVycyIsIDEsIG51bGxwdHIpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QoYXBwc2luaywgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG5ld1NhbXBsZUNh
bGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChhcHBzaW5rLCAibmV3LXByZXJv
bGwiLCBHX0NBTExCQUNLKG5ld1ByZXJvbGxDYWxsYmFjayksIHRoaXMpOworCisgICAgR1JlZlB0
cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChhcHBz
aW5rLCAic2luayIpKTsKKyAgICBnc3RfcGFkX2FkZF9wcm9iZShwYWQuZ2V0KCksIHN0YXRpY19j
YXN0PEdzdFBhZFByb2JlVHlwZT4oR1NUX1BBRF9QUk9CRV9UWVBFX1BVU0ggfCBHU1RfUEFEX1BS
T0JFX1RZUEVfUVVFUllfRE9XTlNUUkVBTSB8IEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVT
SCksIFtdIChHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8sICBncG9pbnRlciB1c2VyRGF0
YSkgLT4gR3N0UGFkUHJvYmVSZXR1cm4geworICAgICAgICAvLyBJbiBzb21lIHBsYXRmb3JtcyAo
ZS5nLiBPcGVuTUFYIG9uIHRoZSBSYXNwYmVycnkgUGkpIHdoZW4gYSByZXNvbHV0aW9uIGNoYW5n
ZSBvY2N1cnMgdGhlCisgICAgICAgIC8vIHBpcGVsaW5lIGhhcyB0byBiZSBkcmFpbmVkIGJlZm9y
ZSBhIGZyYW1lIHdpdGggdGhlIG5ldyByZXNvbHV0aW9uIGNhbiBiZSBkZWNvZGVkLgorICAgICAg
ICAvLyBJbiB0aGlzIGNvbnRleHQsIGl0J3MgaW1wb3J0YW50IHRoYXQgd2UgZG9uJ3QgaG9sZCBy
ZWZlcmVuY2VzIHRvIGFueSBwcmV2aW91cyBmcmFtZQorICAgICAgICAvLyAoZS5nLiBtX3NhbXBs
ZSkgc28gdGhhdCBkZWNvZGluZyBjYW4gY29udGludWUuCisgICAgICAgIC8vIFdlIGFyZSBhbHNv
IG5vdCBzdXBwb3NlZCB0byBrZWVwIHRoZSBvcmlnaW5hbCBmcmFtZSBhZnRlciBhIGZsdXNoLgor
ICAgICAgICBpZiAoaW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dOU1RS
RUFNKSB7CisgICAgICAgICAgICBpZiAoR1NUX1FVRVJZX1RZUEUoR1NUX1BBRF9QUk9CRV9JTkZP
X1FVRVJZKGluZm8pKSAhPSBHU1RfUVVFUllfRFJBSU4pCisgICAgICAgICAgICAgICAgcmV0dXJu
IEdTVF9QQURfUFJPQkVfT0s7CisgICAgICAgICAgICBHU1RfREVCVUcoIkFjdGluZyB1cG9uIERS
QUlOIHF1ZXJ5Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZm8tPnR5cGUgJiBHU1RfUEFE
X1BST0JFX1RZUEVfRVZFTlRfRkxVU0gpIHsKKyAgICAgICAgICAgIGlmIChHU1RfRVZFTlRfVFlQ
RShHU1RfUEFEX1BST0JFX0lORk9fRVZFTlQoaW5mbykpICE9IEdTVF9FVkVOVF9GTFVTSF9TVEFS
VCkKKyAgICAgICAgICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAgICAgICAgICAg
IEdTVF9ERUJVRygiQWN0aW5nIHVwb24gZmx1c2gtc3RhcnQgZXZlbnQiKTsKKyAgICAgICAgfQog
Ci0gICAgYXV0byBmaW5hbFJlc3VsdCA9IGV4dGVuZGVkU3VwcG9ydHNUeXBlKHBhcmFtZXRlcnMs
IHJlc3VsdCk7Ci0gICAgR1NUX0RFQlVHKCJTdXBwb3J0ZWQ6ICVzIiwgY29udmVydEVudW1lcmF0
aW9uVG9TdHJpbmcoZmluYWxSZXN1bHQpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBmaW5h
bFJlc3VsdDsKKyAgICAgICAgYXV0byogcGxheWVyID0gc3RhdGljX2Nhc3Q8TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKj4odXNlckRhdGEpOworICAgICAgICBwbGF5ZXItPmZsdXNoQ3VycmVu
dEJ1ZmZlcigpOworICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAgICB9LCB0aGlz
LCBudWxscHRyKTsKKworICAgIHJldHVybiBhcHBzaW5rOwogfQogCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlRG93bmxvYWRCdWZmZXJpbmdGbGFnKCkKK0dzdEVsZW1l
bnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlVmlkZW9TaW5rR0woKQogewot
ICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuOworICAgIGdib29sZWFuIHJlc3Vs
dCA9IFRSVUU7CisgICAgR3N0RWxlbWVudCogdmlkZW9TaW5rID0gZ3N0X2Jpbl9uZXcobnVsbHB0
cik7CisgICAgR3N0RWxlbWVudCogdXBsb2FkID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJn
bHVwbG9hZCIsIG51bGxwdHIpOworICAgIEdzdEVsZW1lbnQqIGNvbG9yY29udmVydCA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbWFrZSgiZ2xjb2xvcmNvbnZlcnQiLCBudWxscHRyKTsKKyAgICBHc3RF
bGVtZW50KiBhcHBzaW5rID0gY3JlYXRlR0xBcHBTaW5rKCk7CiAKLSAgICB1bnNpZ25lZCBmbGFn
czsKLSAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwgJmZsYWdzLCBu
dWxscHRyKTsKKyAgICAvLyBnbHNpbmtiaW4gaXMgbm90IHVzZWQgYmVjYXVzZSBpdCBpbmNsdWRl
cyBnbGNvbG9yY29udmVydCB3aGljaCBvbmx5IHByb2Nlc3MgUkdCQSwKKyAgICAvLyBidXQgd2Ug
Y2FuIGRpc3BsYXkgWVVWIGZvcm1hdHMgdG9vLgogCi0gICAgdW5zaWduZWQgZmxhZ0Rvd25sb2Fk
ID0gZ2V0R3N0UGxheUZsYWcoImRvd25sb2FkIik7CisgICAgaWYgKCFhcHBzaW5rIHx8ICF1cGxv
YWQgfHwgIWNvbG9yY29udmVydCkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNy
ZWF0ZSBHc3RHTCBlbGVtZW50cyIpOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHZpZGVvU2lu
ayk7CiAKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHN0b3AgZG93bmxvYWRpbmcgaWYgd2UgYWxy
ZWFkeSBzdGFydGVkIGl0LgotICAgIGlmIChmbGFncyAmIGZsYWdEb3dubG9hZCAmJiBtX3JlYWR5
U3RhdGUgPiBNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcgJiYgIW1fcmVzZXRQaXBlbGluZSkgewot
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJEb3dubG9hZCBhbHJlYWR5IHN0
YXJ0ZWQsIG5vdCBzdGFydGluZyBhZ2FpbiIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlm
ICh1cGxvYWQpCisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHVwbG9hZCk7CisgICAgICAg
IGlmIChjb2xvcmNvbnZlcnQpCisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKGNvbG9yY29u
dmVydCk7CisgICAgICAgIGlmIChhcHBzaW5rKQorICAgICAgICAgICAgZ3N0X29iamVjdF91bnJl
ZihhcHBzaW5rKTsKKworICAgICAgICBnX3dhcm5pbmcoIldlYktpdCB3YXNuJ3QgYWJsZSB0byBm
aW5kIHRoZSBHU3RyZWFtZXIgb3BlbmdsIHBsdWdpbi4gSGFyZHdhcmUtYWNjZWxlcmF0ZWQgemVy
by1jb3B5IHZpZGVvIHJlbmRlcmluZyBjYW4ndCBiZSBlbmFibGVkIHdpdGhvdXQgdGhpcyBwbHVn
aW4uIik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGJvb2wgc2hvdWxk
RG93bmxvYWQgPSAhaXNMaXZlU3RyZWFtKCkgJiYgbV9wcmVsb2FkID09IE1lZGlhUGxheWVyOjpB
dXRvOwotICAgIGlmIChzaG91bGREb3dubG9hZCkgewotICAgICAgICBHU1RfSU5GT19PQkpFQ1Qo
cGlwZWxpbmUoKSwgIkVuYWJsaW5nIG9uLWRpc2sgYnVmZmVyaW5nIik7Ci0gICAgICAgIGdfb2Jq
ZWN0X3NldChtX3BpcGVsaW5lLmdldCgpLCAiZmxhZ3MiLCBmbGFncyB8IGZsYWdEb3dubG9hZCwg
bnVsbHB0cik7Ci0gICAgICAgIG1fZmlsbFRpbWVyLnN0YXJ0UmVwZWF0aW5nKDIwMF9tcyk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJEaXNhYmxp
bmcgb24tZGlzayBidWZmZXJpbmciKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUu
Z2V0KCksICJmbGFncyIsIGZsYWdzICYgfmZsYWdEb3dubG9hZCwgbnVsbHB0cik7Ci0gICAgICAg
IG1fZmlsbFRpbWVyLnN0b3AoKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4odmlkZW9T
aW5rKSwgdXBsb2FkLCBjb2xvcmNvbnZlcnQsIGFwcHNpbmssIG51bGxwdHIpOworCisgICAgLy8g
V29ya2Fyb3VuZCB1bnRpbCB3ZSBjYW4gZGVwZW5kIG9uIEdTdHJlYW1lciAxLjE2LjIuCisgICAg
Ly8gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1i
YXNlL2NvbW1pdC84ZDMyZGUwOTA1NTRjZjI5ZmUzNTlmODNhYTQ2MDAwYmE2NThhNjkzCisgICAg
Ly8gRm9yY2luZyBhIGNvbG9yIGNvbnZlcnNpb24gdG8gUkdCQSBoZXJlIGFsbG93cyBnbHVwbG9h
ZCB0byBpbnRlcm5hbGx5IHVzZQorICAgIC8vIGFuIHVwbG9hZGVyIHRoYXQgYWRkcyBhIFZpZGVv
TWV0YSwgdGhyb3VnaCB0aGUgVGV4dHVyZVVwbG9hZE1ldGEgY2FwcworICAgIC8vIGZlYXR1cmUs
IHdpdGhvdXQgbmVlZGluZyB0aGUgcGF0Y2ggYWJvdmUuIEhvd2V2ZXIgdGhpcyBzcGVjaWZpYyBj
YXBzCisgICAgLy8gZmVhdHVyZSBpcyBnb2luZyB0byBiZSByZW1vdmVkIGZyb20gR1N0cmVhbWVy
IHNvIGl0IGlzIGNvbnNpZGVyZWQgYQorICAgIC8vIHNob3J0LXRlcm0gd29ya2Fyb3VuZC4gVGhp
cyBjb2RlIHBhdGggbW9zdCBsaWtlbHkgd2lsbCBoYXZlIGEgbmVnYXRpdmUKKyAgICAvLyBwZXJm
b3JtYW5jZSBpbXBhY3Qgb24gZW1iZWRkZWQgcGxhdGZvcm1zIGFzIHdlbGwuIERvd25zdHJlYW0g
ZW1iZWRkZXJzCisgICAgLy8gYXJlIGhpZ2hseSBlbmNvdXJhZ2VkIHRvIGNoZXJyeS1waWNrIHRo
ZSBwYXRjaCBsaW5rZWQgYWJvdmUgaW4gdGhlaXIgQlNQCisgICAgLy8gYW5kIHNldCB0aGUgV0VC
S0lUX0dTVF9OT19SR0JBX0NPTlZFUlNJT04gZW52aXJvbm1lbnQgdmFyaWFibGUgdW50aWwKKyAg
ICAvLyBHU3RyZWFtZXIgMS4xNi4yIGlzIHJlbGVhc2VkLgorICAgIC8vIFNlZSBhbHNvIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE0MjIKKyAgICBHUmVmUHRyPEdz
dENhcHM+IGNhcHM7CisgICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxNiwgMikgfHwg
Z2V0ZW52KCJXRUJLSVRfR1NUX05PX1JHQkFfQ09OVkVSU0lPTiIpKQorICAgICAgICBjYXBzID0g
YWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3RyaW5nKCJ2aWRlby94LXJhdywgZm9ybWF0ID0gKHN0
cmluZykgIiBHU1RfR0xfQ0FQU19GT1JNQVQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgR1NUX0lO
Rk9fT0JKRUNUKHBpcGVsaW5lKCksICJGb3JjaW5nIFJHQkEgYXMgR1N0cmVhbWVyIGlzIG5vdCBu
ZXcgZW5vdWdoLiIpOworICAgICAgICBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2Zyb21fc3Ry
aW5nKCJ2aWRlby94LXJhdywgZm9ybWF0ID0gKHN0cmluZykgUkdCQSIpKTsKICAgICB9Ci19Cisg
ICAgZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzKGNhcHMuZ2V0KCksIDAsIGdzdF9jYXBzX2ZlYXR1cmVz
X25ldyhHU1RfQ0FQU19GRUFUVVJFX01FTU9SWV9HTF9NRU1PUlksIG51bGxwdHIpKTsKKyAgICBn
X29iamVjdF9zZXQoYXBwc2luaywgImNhcHMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKIAotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFByZWxvYWQoTWVkaWFQbGF5ZXI6OlBy
ZWxvYWQgcHJlbG9hZCkKLXsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0
aW5nIHByZWxvYWQgdG8gJXMiLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhwcmVsb2FkKS51
dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAocHJlbG9hZCA9PSBNZWRpYVBsYXllcjo6QXV0byAmJiBp
c0xpdmVTdHJlYW0oKSkKLSAgICAgICAgcmV0dXJuOworICAgIHJlc3VsdCAmPSBnc3RfZWxlbWVu
dF9saW5rX21hbnkodXBsb2FkLCBjb2xvcmNvbnZlcnQsIGFwcHNpbmssIG51bGxwdHIpOwogCi0g
ICAgbV9wcmVsb2FkID0gcHJlbG9hZDsKLSAgICB1cGRhdGVEb3dubG9hZEJ1ZmZlcmluZ0ZsYWco
KTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKHVwbG9hZCwgInNpbmsiKSk7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZCh2aWRl
b1NpbmssIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgpKSk7CiAKLSAgICBpZiAo
bV9kZWxheWluZ0xvYWQgJiYgbV9wcmVsb2FkICE9IE1lZGlhUGxheWVyOjpOb25lKSB7Ci0gICAg
ICAgIG1fZGVsYXlpbmdMb2FkID0gZmFsc2U7Ci0gICAgICAgIGNvbW1pdExvYWQoKTsKKyAgICBp
ZiAoIXJlc3VsdCkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGxpbmsgR3N0R0wg
ZWxlbWVudHMiKTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZih2aWRlb1NpbmspOworICAgICAg
ICB2aWRlb1NpbmsgPSBudWxscHRyOwogICAgIH0KKyAgICByZXR1cm4gdmlkZW9TaW5rOwogfQog
Ci1Hc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUF1ZGlvU2lu
aygpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR0xWaWRlb1NpbmtD
b250ZXh0KCkKIHsKLSAgICBtX2F1dG9BdWRpb1NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoImF1dG9hdWRpb3NpbmsiLCBudWxscHRyKTsKLSAgICBpZiAoIW1fYXV0b0F1ZGlvU2luaykg
ewotICAgICAgICBHU1RfV0FSTklORygiR1N0cmVhbWVyJ3MgYXV0b2F1ZGlvc2luayBub3QgZm91
bmQuIFBsZWFzZSBjaGVjayB5b3VyIGdzdC1wbHVnaW5zLWdvb2QgaW5zdGFsbGF0aW9uIik7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBpZiAoIW1fZ2xEaXNwbGF5RWxlbWVu
dENvbnRleHQpCisgICAgICAgIG1fZ2xEaXNwbGF5RWxlbWVudENvbnRleHQgPSBhZG9wdEdSZWYo
cmVxdWVzdEdMQ29udGV4dChHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUpKTsKIAotICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2F1dG9BdWRpb1NpbmsuZ2V0KCksICJjaGlsZC1hZGRl
ZCIsIEdfQ0FMTEJBQ0soc2V0QXVkaW9TdHJlYW1Qcm9wZXJ0aWVzQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICBpZiAobV9nbERpc3BsYXlFbGVtZW50Q29udGV4dCkKKyAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X2NvbnRleHQobV92aWRlb1NpbmsuZ2V0KCksIG1fZ2xEaXNwbGF5RWxlbWVudENvbnRleHQu
Z2V0KCkpOwogCi0jaWYgRU5BQkxFKFdFQl9BVURJTykKLSAgICBHc3RFbGVtZW50KiBhdWRpb1Np
bmtCaW4gPSBnc3RfYmluX25ldygiYXVkaW8tc2luayIpOwotICAgIGVuc3VyZUF1ZGlvU291cmNl
UHJvdmlkZXIoKTsKLSAgICBtX2F1ZGlvU291cmNlUHJvdmlkZXItPmNvbmZpZ3VyZUF1ZGlvQmlu
KGF1ZGlvU2lua0JpbiwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIGF1ZGlvU2lua0JpbjsKLSNlbHNl
Ci0gICAgcmV0dXJuIG1fYXV0b0F1ZGlvU2luay5nZXQoKTsKLSNlbmRpZgorICAgIGlmICghbV9n
bEFwcEVsZW1lbnRDb250ZXh0KQorICAgICAgICBtX2dsQXBwRWxlbWVudENvbnRleHQgPSBhZG9w
dEdSZWYocmVxdWVzdEdMQ29udGV4dCgiZ3N0LmdsLmFwcF9jb250ZXh0IikpOworCisgICAgaWYg
KG1fZ2xBcHBFbGVtZW50Q29udGV4dCkKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQo
bV92aWRlb1NpbmsuZ2V0KCksIG1fZ2xBcHBFbGVtZW50Q29udGV4dC5nZXQoKSk7CiB9CisjZW5k
aWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKIAotR3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjphdWRpb1NpbmsoKSBjb25zdAorI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNI
KQorc3RhdGljIHZvaWQgc2V0UmVjdGFuZ2xlVG9WaWRlb1NpbmsoR3N0RWxlbWVudCogdmlkZW9T
aW5rLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEdzdEVsZW1lbnQqIHNpbms7Ci0gICAg
Z19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJhdWRpby1zaW5rIiwgJnNpbmssIG51bGxw
dHIpOwotICAgIHJldHVybiBzaW5rOworICAgIC8vIEhlcmUgZ29lcyB0aGUgcGxhdGZvcm0tZGVw
ZW5kYW50IGNvZGUgdG8gc2V0IHRvIHRoZSB2aWRlb1NpbmsgdGhlIHNpemUKKyAgICAvLyBhbmQg
cG9zaXRpb24gb2YgdGhlIHZpZGVvIHJlbmRlcmluZyB3aW5kb3cuIE1hcmsgdGhlbSB1bnVzZWQg
YXMgZGVmYXVsdC4KKyAgICBVTlVTRURfUEFSQU0odmlkZW9TaW5rKTsKKyAgICBVTlVTRURfUEFS
QU0ocmVjdCk7CiB9CiAKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmVuc3VyZUF1ZGlvU291cmNlUHJvdmlkZXIoKQorY2xhc3MgR1N0cmVh
bWVySG9sZVB1bmNoQ2xpZW50IDogcHVibGljIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyOjpIb2xlUHVuY2hDbGllbnQgeworcHVibGljOgorICAgIEdTdHJlYW1lckhvbGVQdW5jaENs
aWVudChHUmVmUHRyPEdzdEVsZW1lbnQ+JiYgdmlkZW9TaW5rKSA6IG1fdmlkZW9TaW5rKFdURk1v
dmUodmlkZW9TaW5rKSkgeyB9OworICAgIHZvaWQgc2V0VmlkZW9SZWN0YW5nbGUoY29uc3QgSW50
UmVjdCYgcmVjdCkgZmluYWwgeyBzZXRSZWN0YW5nbGVUb1ZpZGVvU2luayhtX3ZpZGVvU2luay5n
ZXQoKSwgcmVjdCk7IH0KK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ZpZGVv
U2luazsKK307CisKK0dzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3Jl
YXRlSG9sZVB1bmNoVmlkZW9TaW5rKCkKIHsKLSAgICBpZiAoIW1fYXVkaW9Tb3VyY2VQcm92aWRl
cikKLSAgICAgICAgbV9hdWRpb1NvdXJjZVByb3ZpZGVyID0gbWFrZVVuaXF1ZTxBdWRpb1NvdXJj
ZVByb3ZpZGVyR1N0cmVhbWVyPigpOworICAgIC8vIEhlcmUgZ29lcyB0aGUgcGxhdGZvcm0tZGVw
ZW5kYW50IGNvZGUgdG8gY3JlYXRlIHRoZSB2aWRlb1NpbmsuIEFzIGEgZGVmYXVsdAorICAgIC8v
IHdlIHVzZSBhIGZha2VWaWRlb1Npbmsgc28gbm90aGluZyBpcyBkcmF3biB0byB0aGUgcGFnZS4K
KyAgICBHc3RFbGVtZW50KiB2aWRlb1NpbmsgPSAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJm
YWtldmlkZW9zaW5rIiwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gdmlkZW9TaW5rOwogfQogCi1B
dWRpb1NvdXJjZVByb3ZpZGVyKiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF1ZGlvU291
cmNlUHJvdmlkZXIoKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnB1c2hOZXh0
SG9sZVB1bmNoQnVmZmVyKCkKIHsKLSAgICBlbnN1cmVBdWRpb1NvdXJjZVByb3ZpZGVyKCk7Ci0g
ICAgcmV0dXJuIG1fYXVkaW9Tb3VyY2VQcm92aWRlci5nZXQoKTsKKyAgICBhdXRvIHByb3h5T3Bl
cmF0aW9uID0KKyAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkm
IHByb3h5KQorICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5s
b2NrKCkpOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJCdWZmZXI+KDAsIG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGROb3RCbGVu
ZCwgR0xfRE9OVF9DQVJFKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJI
b2xlUHVuY2hDbGllbnQ+IGhvbGVQdW5jaENsaWVudCA9IG1ha2VVbmlxdWU8R1N0cmVhbWVySG9s
ZVB1bmNoQ2xpZW50PihtX3ZpZGVvU2luay5nZXQoKSk7CisgICAgICAgICAgICBsYXllckJ1ZmZl
ci0+c2V0SG9sZVB1bmNoQ2xpZW50KFdURk1vdmUoaG9sZVB1bmNoQ2xpZW50KSk7CisgICAgICAg
ICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVyQnVmZmVyKSk7CisgICAgICAg
IH07CisKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwo
KSkucHJveHkoKSk7CisjZWxzZQorICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQ
cm94eSk7CisjZW5kaWYKIH0KICNlbmRpZgogCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6Y3JlYXRlR1NUUGxheUJpbihjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwaXBl
bGluZU5hbWUpCitHc3RFbGVtZW50KiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZVZpZGVvU2luaygpCiB7Ci0gICAgY29uc3QgZ2NoYXIqIHBsYXliaW5OYW1lID0gInBsYXliaW4i
OworICAgIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7CiAKLSAgICAvLyBNU0Ug
ZG9lc24ndCBzdXBwb3J0IHBsYXliaW4zLiBNZWRpYXN0cmVhbSByZXF1aXJlcyBwbGF5YmluMy4g
UmVndWxhcgotICAgIC8vIHBsYXliYWNrIGNhbiB1c2UgcGxheWJpbjMgb24tZGVtYW5kIHdpdGgg
dGhlIFdFQktJVF9HU1RfVVNFX1BMQVlCSU4zCi0gICAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGUu
Ci0gICAgaWYgKCghaXNNZWRpYVNvdXJjZSgpICYmIGdfZ2V0ZW52KCJXRUJLSVRfR1NUX1VTRV9Q
TEFZQklOMyIpKSB8fCB1cmwucHJvdG9jb2xJcygibWVkaWFzdHJlYW0iKSkKLSAgICAgICAgcGxh
eWJpbk5hbWUgPSAicGxheWJpbjMiOworI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQorICAg
IG1fdmlkZW9TaW5rID0gY3JlYXRlSG9sZVB1bmNoVmlkZW9TaW5rKCk7CisgICAgcHVzaE5leHRI
b2xlUHVuY2hCdWZmZXIoKTsKKyAgICByZXR1cm4gbV92aWRlb1NpbmsuZ2V0KCk7CisjZW5kaWYK
IAotICAgIGlmIChtX3BpcGVsaW5lKSB7Ci0gICAgICAgIGlmICghZ19zdHJjbXAwKEdTVF9PQkpF
Q1RfTkFNRShnc3RfZWxlbWVudF9nZXRfZmFjdG9yeShtX3BpcGVsaW5lLmdldCgpKSksIHBsYXli
aW5OYW1lKSkgewotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKHBpcGVsaW5lKCksICJBbHJl
YWR5IHVzaW5nICVzIiwgcGxheWJpbk5hbWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBpZiAobV9yZW5kZXJpbmdDYW5CZUFjY2Vs
ZXJhdGVkKQorICAgICAgICBtX3ZpZGVvU2luayA9IGNyZWF0ZVZpZGVvU2lua0dMKCk7CisjZW5k
aWYKIAotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlRlYXJpbmcgZG93biBh
cyB3ZSBuZWVkIHRvIHVzZSAlcyBub3cuIiwgcGxheWJpbk5hbWUpOwotICAgICAgICBjaGFuZ2VQ
aXBlbGluZVN0YXRlKEdTVF9TVEFURV9OVUxMKTsKLSAgICAgICAgbV9waXBlbGluZSA9IG51bGxw
dHI7CisgICAgaWYgKCFtX3ZpZGVvU2luaykgeworICAgICAgICBtX3VzaW5nRmFsbGJhY2tWaWRl
b1NpbmsgPSB0cnVlOworICAgICAgICBtX3ZpZGVvU2luayA9IHdlYmtpdFZpZGVvU2lua05ldygp
OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92aWRlb1NpbmsuZ2V0KCksICJy
ZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0socmVwYWludENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3ZpZGVvU2luay5nZXQoKSwgInJlcGFp
bnQtY2FuY2VsbGVkIiwgR19DQUxMQkFDSyhyZXBhaW50Q2FuY2VsbGVkQ2FsbGJhY2spLCB0aGlz
KTsKICAgICB9CiAKLSAgICBBU1NFUlQoIW1fcGlwZWxpbmUpOworICAgIEdzdEVsZW1lbnQqIHZp
ZGVvU2luayA9IG51bGxwdHI7CisjaWYgRU5BQkxFKE1FRElBX1NUQVRJU1RJQ1MpCisgICAgbV9m
cHNTaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJmcHNkaXNwbGF5c2luayIsICJzaW5r
Iik7CisgICAgaWYgKG1fZnBzU2luaykgeworICAgICAgICBnX29iamVjdF9zZXQobV9mcHNTaW5r
LmdldCgpLCAic2lsZW50IiwgVFJVRSAsIG51bGxwdHIpOwogCi0gICAgbV9pc0xlZ2FjeVBsYXli
aW4gPSAhZ19zdHJjbXAwKHBsYXliaW5OYW1lLCAicGxheWJpbiIpOworICAgICAgICAvLyBUdXJu
IG9mZiB0ZXh0IG92ZXJsYXkgdW5sZXNzIHRyYWNpbmcgaXMgZW5hYmxlZC4KKyAgICAgICAgaWYg
KGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhyZXNob2xkKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVi
dWcpIDwgR1NUX0xFVkVMX1RSQUNFKQorICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fZnBzU2lu
ay5nZXQoKSwgInRleHQtb3ZlcmxheSIsIEZBTFNFICwgbnVsbHB0cik7CiAKLSAgICAvLyBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoKSByZXR1cm5zIGEgZmxvYXRpbmcgcmVmZXJlbmNlIHNvCi0g
ICAgLy8gd2Ugc2hvdWxkIG5vdCBhZG9wdC4KLSAgICBzdGF0aWMgQXRvbWljPHVpbnQzMl90PiBw
aXBlbGluZUlkOwotICAgIHNldFBpcGVsaW5lKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZShwbGF5
YmluTmFtZSwKLSAgICAgICAgKHBpcGVsaW5lTmFtZS5pc0VtcHR5KCkgPyBtYWtlU3RyaW5nKCJt
ZWRpYS1wbGF5ZXItIiwgcGlwZWxpbmVJZC5leGNoYW5nZUFkZCgxKSkgOiBwaXBlbGluZU5hbWUp
LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KEdTVF9TVFJFQU1f
Vk9MVU1FKG1fcGlwZWxpbmUuZ2V0KCkpKTsKKyAgICAgICAgaWYgKGdfb2JqZWN0X2NsYXNzX2Zp
bmRfcHJvcGVydHkoR19PQkpFQ1RfR0VUX0NMQVNTKG1fZnBzU2luay5nZXQoKSksICJ2aWRlby1z
aW5rIikpIHsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmsuZ2V0KCksICJ2aWRl
by1zaW5rIiwgbV92aWRlb1NpbmsuZ2V0KCksIG51bGxwdHIpOworICAgICAgICAgICAgdmlkZW9T
aW5rID0gbV9mcHNTaW5rLmdldCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fZnBz
U2luayA9IG51bGxwdHI7CisgICAgfQorI2VuZGlmCiAKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlw
ZWxpbmUoKSwgIlVzaW5nIGxlZ2FjeSBwbGF5YmluIGVsZW1lbnQ6ICVzIiwgYm9vbEZvclByaW50
aW5nKG1faXNMZWdhY3lQbGF5YmluKSk7CisgICAgaWYgKCFtX2Zwc1NpbmspCisgICAgICAgIHZp
ZGVvU2luayA9IG1fdmlkZW9TaW5rLmdldCgpOwogCi0gICAgLy8gTGV0IGFsc28gb3RoZXIgbGlz
dGVuZXJzIHN1YnNjcmliZSB0byAoYXBwbGljYXRpb24pIG1lc3NhZ2VzIGluIHRoaXMgYnVzLgot
ICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMo
R1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7Ci0gICAgZ3N0X2J1c19hZGRfc2lnbmFs
X3dhdGNoX2Z1bGwoYnVzLmdldCgpLCBSdW5Mb29wU291cmNlUHJpb3JpdHk6OlJ1bkxvb3BEaXNw
YXRjaGVyKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cy5nZXQoKSwgIm1lc3NhZ2UiLCBHX0NB
TExCQUNLKGJ1c01lc3NhZ2VDYWxsYmFjayksIHRoaXMpOworICAgIEFTU0VSVCh2aWRlb1Npbmsp
OwogCi0gICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJtdXRlIiwgbV9wbGF5ZXIt
Pm11dGVkKCksIG51bGxwdHIpOworICAgIHJldHVybiB2aWRlb1Npbms7Cit9CiAKLSAgICBnX3Np
Z25hbF9jb25uZWN0KEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgImRlZXAtZWxlbWVu
dC1hZGRlZCIsIEdfQ0FMTEJBQ0soK1tdKEdzdEJpbiosIEdzdEJpbiogc3ViQmluLCBHc3RFbGVt
ZW50KiBlbGVtZW50LCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqIHBsYXllcikgewotICAg
ICAgICBHVW5pcXVlUHRyPGNoYXI+IGJpbk5hbWUoZ3N0X2VsZW1lbnRfZ2V0X25hbWUoR1NUX0VM
RU1FTlRfQ0FTVChzdWJCaW4pKSk7Ci0gICAgICAgIGlmICghZ19zdHJfaGFzX3ByZWZpeChiaW5O
YW1lLmdldCgpLCAiZGVjb2RlYmluIikpCi0gICAgICAgICAgICByZXR1cm47Cit2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0U3RyZWFtVm9sdW1lRWxlbWVudChHc3RTdHJlYW1W
b2x1bWUqIHZvbHVtZSkKK3sKKyAgICBBU1NFUlQoIW1fdm9sdW1lRWxlbWVudCk7CisgICAgbV92
b2x1bWVFbGVtZW50ID0gdm9sdW1lOwogCi0gICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gZWxlbWVu
dE5hbWUoZ3N0X2VsZW1lbnRfZ2V0X25hbWUoZWxlbWVudCkpOwotICAgICAgICBpZiAoZ19zdHJf
aGFzX3ByZWZpeChlbGVtZW50TmFtZS5nZXQoKSwgInY0bDIiKSkKLSAgICAgICAgICAgIHBsYXll
ci0+bV92aWRlb0RlY29kZXJQbGF0Zm9ybSA9IEdzdFZpZGVvRGVjb2RlclBsYXRmb3JtOjpWaWRl
bzRMaW51eDsKLSAgICAgICAgZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeChlbGVtZW50TmFtZS5n
ZXQoKSwgImlteHZwdWRlYyIpKQotICAgICAgICAgICAgcGxheWVyLT5tX3ZpZGVvRGVjb2RlclBs
YXRmb3JtID0gR3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OklteFZQVTsKKyAgICAvLyBXZSBkb24n
dCBzZXQgdGhlIGluaXRpYWwgdm9sdW1lIGJlY2F1c2Ugd2UgdHJ1c3QgdGhlIHNpbmsgdG8ga2Vl
cCBpdCBmb3IgdXMuIFNlZQorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTg5NzQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgaWYgKCFtX3BsYXllci0+
cGxhdGZvcm1Wb2x1bWVDb25maWd1cmF0aW9uUmVxdWlyZWQoKSkgeworICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJTZXR0aW5nIHN0cmVhbSB2b2x1bWUgdG8gJWYiLCBtX3Bs
YXllci0+dm9sdW1lKCkpOworICAgICAgICBnc3Rfc3RyZWFtX3ZvbHVtZV9zZXRfdm9sdW1lKG1f
dm9sdW1lRWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xVTUVfRk9STUFUX0xJTkVBUiwgc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtX3BsYXllci0+dm9sdW1lKCkpKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiTm90IHNldHRpbmcgc3RyZWFtIHZvbHVt
ZSwgdHJ1c3Rpbmcgc3lzdGVtIG9uZSIpOwogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQot
ICAgICAgICBwbGF5ZXItPnVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpOwotI2VuZGlmCi0gICAg
fSksIHRoaXMpOworICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgc3Ry
ZWFtIG11dGVkICVzIiwgdG9TdHJpbmcobV9wbGF5ZXItPm11dGVkKCkpLnV0ZjgoKS5kYXRhKCkp
OworICAgIGdfb2JqZWN0X3NldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgbV9wbGF5
ZXItPm11dGVkKCksIG51bGxwdHIpOwogCi0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1f
cGlwZWxpbmUuZ2V0KCksICJzb3VyY2Utc2V0dXAiLCBHX0NBTExCQUNLKHNvdXJjZVNldHVwQ2Fs
bGJhY2spLCB0aGlzKTsKLSAgICBpZiAobV9pc0xlZ2FjeVBsYXliaW4pIHsKLSAgICAgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJ2aWRlby1jaGFuZ2VkIiwg
R19DQUxMQkFDSyh2aWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWNoYW5nZWQiLCBHX0NB
TExCQUNLKGF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgfQorICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJub3RpZnk6OnZvbHVtZSIs
IEdfQ0FMTEJBQ0sodm9sdW1lQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm5vdGlmeTo6bXV0ZSIsIEdf
Q0FMTEJBQ0sobXV0ZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOworfQogCi0jaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQotICAgIGlmIChtX2lzTGVnYWN5UGxheWJpbikKLSAgICAgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fcGlwZWxpbmUuZ2V0KCksICJ0ZXh0LWNoYW5nZWQiLCBHX0NBTExC
QUNLKHRleHRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKK3Vuc2lnbmVkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6ZGVjb2RlZEZyYW1lQ291bnQoKSBjb25zdAoreworICAgIGd1aW50NjQg
ZGVjb2RlZEZyYW1lcyA9IDA7CisgICAgaWYgKG1fZnBzU2luaykKKyAgICAgICAgZ19vYmplY3Rf
Z2V0KG1fZnBzU2luay5nZXQoKSwgImZyYW1lcy1yZW5kZXJlZCIsICZkZWNvZGVkRnJhbWVzLCBu
dWxscHRyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlY29kZWRGcmFtZXMp
OworfQogCi0gICAgR3N0RWxlbWVudCogdGV4dENvbWJpbmVyID0gd2Via2l0VGV4dENvbWJpbmVy
TmV3KCk7Ci0gICAgQVNTRVJUKHRleHRDb21iaW5lcik7Ci0gICAgZ19vYmplY3Rfc2V0KG1fcGlw
ZWxpbmUuZ2V0KCksICJ0ZXh0LXN0cmVhbS1jb21iaW5lciIsIHRleHRDb21iaW5lciwgbnVsbHB0
cik7Cit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRyb3BwZWRGcmFtZUNv
dW50KCkgY29uc3QKK3sKKyAgICBndWludDY0IGZyYW1lc0Ryb3BwZWQgPSAwOworICAgIGlmICht
X2Zwc1NpbmspCisgICAgICAgIGdfb2JqZWN0X2dldChtX2Zwc1NpbmsuZ2V0KCksICJmcmFtZXMt
ZHJvcHBlZCIsICZmcmFtZXNEcm9wcGVkLCBudWxscHRyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGZyYW1lc0Ryb3BwZWQpOworfQogCi0gICAgbV90ZXh0QXBwU2luayA9IHdl
YmtpdFRleHRTaW5rTmV3KCk7Ci0gICAgQVNTRVJUKG1fdGV4dEFwcFNpbmspOwordW5zaWduZWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0RlY29kZWRCeXRlQ291bnQoKSBjb25z
dAoreworICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfcG9zaXRpb24oR1NUX0ZP
Uk1BVF9CWVRFUyk7CisgICAgZ2ludDY0IHBvc2l0aW9uID0gMDsKIAotICAgIG1fdGV4dEFwcFNp
bmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV90ZXh0QXBwU2lu
ay5nZXQoKSwgInNpbmsiKSk7Ci0gICAgQVNTRVJUKG1fdGV4dEFwcFNpbmtQYWQpOworICAgIGlm
IChhdWRpb1NpbmsoKSAmJiBnc3RfZWxlbWVudF9xdWVyeShhdWRpb1NpbmsoKSwgcXVlcnkpKQor
ICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3NpdGlvbik7CiAK
LSAgICBHUmVmUHRyPEdzdENhcHM+IHRleHRDYXBzOwotICAgIGlmICh3ZWJraXRHc3RDaGVja1Zl
cnNpb24oMSwgMTQsIDApKQotICAgICAgICB0ZXh0Q2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19u
ZXdfZW1wdHlfc2ltcGxlKCJhcHBsaWNhdGlvbi94LXN1YnRpdGxlLXZ0dCIpKTsKLSAgICBlbHNl
Ci0gICAgICAgIHRleHRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUo
InRleHQvdnR0IikpOwotICAgIGdfb2JqZWN0X3NldChtX3RleHRBcHBTaW5rLmdldCgpLCAiZW1p
dC1zaWduYWxzIiwgVFJVRSwgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAiY2FwcyIsIHRl
eHRDYXBzLmdldCgpLCBudWxscHRyKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV90
ZXh0QXBwU2luay5nZXQoKSwgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKG5ld1RleHRTYW1wbGVD
YWxsYmFjayksIHRoaXMpOworICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbik7Cit9CiAKLSAgICBnX29iamVjdF9zZXQo
bV9waXBlbGluZS5nZXQoKSwgInRleHQtc2luayIsIG1fdGV4dEFwcFNpbmsuZ2V0KCksIG51bGxw
dHIpOwotI2VuZGlmCit1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnZpZGVv
RGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0Cit7CisgICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1
ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX0JZVEVTKTsKKyAgICBnaW50NjQgcG9zaXRpb24g
PSAwOwogCi0gICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ2aWRlby1zaW5rIiwg
Y3JlYXRlVmlkZW9TaW5rKCksICJhdWRpby1zaW5rIiwgY3JlYXRlQXVkaW9TaW5rKCksIG51bGxw
dHIpOworICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3ZpZGVvU2luay5nZXQoKSwgcXVlcnkp
KQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZwb3NpdGlvbik7
CiAKLSAgICBjb25maWd1cmVQbGF5U2luaygpOworICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbik7Cit9CiAKLSAgICBp
ZiAobV9wcmVzZXJ2ZXNQaXRjaCkgewotICAgICAgICBHc3RFbGVtZW50KiBzY2FsZSA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbWFrZSgic2NhbGV0ZW1wbyIsIG51bGxwdHIpOworI2lmIEVOQUJMRShF
TkNSWVBURURfTUVESUEpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aW5pdGlh
bGl6YXRpb25EYXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJiBpbml0RGF0YSkKK3sKKyAgICBBU1NF
UlQoIWlzTWFpblRocmVhZCgpKTsKIAotICAgICAgICBpZiAoIXNjYWxlKQotICAgICAgICAgICAg
R1NUX1dBUk5JTkcoIkZhaWxlZCB0byBjcmVhdGUgc2NhbGV0ZW1wbyIpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWZpbHRl
ciIsIHNjYWxlLCBudWxscHRyKTsKLSAgICB9CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgaW5pdERhdGEgPSBXVEZNb3ZlKGluaXRE
YXRhKV0geworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKCFtX3JlbmRlcmluZ0NhbkJlQWNjZWxlcmF0ZWQpIHsKLSAgICAgICAgLy8gSWYgbm90
IHVzaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLCBsZXQgR1N0cmVhbWVyIGhhbmRsZQotICAg
ICAgICAvLyB0aGUgaW1hZ2Utb3JpZW50YXRpb24gdGFnLgotICAgICAgICBHc3RFbGVtZW50KiB2
aWRlb0ZsaXAgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInZpZGVvZmxpcCIsIG51bGxwdHIp
OwotICAgICAgICBpZiAodmlkZW9GbGlwKSB7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQodmlk
ZW9GbGlwLCAibWV0aG9kIiwgOCwgbnVsbHB0cik7Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQo
bV9waXBlbGluZS5nZXQoKSwgInZpZGVvLWZpbHRlciIsIHZpZGVvRmxpcCwgbnVsbHB0cik7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlRoZSB2aWRlb2ZsaXAgZWxl
bWVudCBpcyBtaXNzaW5nLCB2aWRlbyByb3RhdGlvbiBzdXBwb3J0IGlzIG5vdyBkaXNhYmxlZC4g
UGxlYXNlIGNoZWNrIHlvdXIgZ3N0LXBsdWdpbnMtZ29vZCBpbnN0YWxsYXRpb24uIik7CisgICAg
ICAgIEdTVF9ERUJVRygic2NoZWR1bGluZyBpbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZCBl
dmVudCBvZiBzaXplICV6dSIsIGluaXREYXRhLnBheWxvYWQoKS0+c2l6ZSgpKTsKKyAgICAgICAg
R1NUX01FTURVTVAoImluaXQgZGF0YXMiLCByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
Pihpbml0RGF0YS5wYXlsb2FkKCktPmRhdGEoKSksIGluaXREYXRhLnBheWxvYWQoKS0+c2l6ZSgp
KTsKKyAgICAgICAgd2Vha1RoaXMtPm1fcGxheWVyLT5pbml0aWFsaXphdGlvbkRhdGFFbmNvdW50
ZXJlZChpbml0RGF0YS5wYXlsb2FkQ29udGFpbmVyVHlwZSgpLCBpbml0RGF0YS5wYXlsb2FkKCkt
PnRyeUNyZWF0ZUFycmF5QnVmZmVyKCkpOworICAgIH0pOworfQorCit2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFu
Y2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmIChtX2NkbUluc3Rh
bmNlID09ICZpbnN0YW5jZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3BpcGVsaW5l
KSB7CisgICAgICAgIEdTVF9FUlJPUigibm8gcGlwZWxpbmUgeWV0Iik7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR1JlZlB0cjxH
c3RQYWQ+IHZpZGVvU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZChtX3ZpZGVvU2luay5nZXQoKSwgInNpbmsiKSk7Ci0gICAgaWYgKHZpZGVvU2lua1BhZCkKLSAg
ICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKHZpZGVvU2lua1BhZC5nZXQoKSwgIm5vdGlm
eTo6Y2FwcyIsIEdfQ0FMTEJBQ0sodmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayksIHRoaXMp
OworICAgIG1fY2RtSW5zdGFuY2UgPSAmaW5zdGFuY2U7CisKKyAgICBHUmVmUHRyPEdzdENvbnRl
eHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tY2RtLWluc3RhbmNl
IiwgRkFMU0UpKTsKKyAgICBHc3RTdHJ1Y3R1cmUqIGNvbnRleHRTdHJ1Y3R1cmUgPSBnc3RfY29u
dGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoY29udGV4dC5nZXQoKSk7CisgICAgZ3N0X3N0cnVjdHVy
ZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNkbS1pbnN0YW5jZSIsIEdfVFlQRV9QT0lOVEVSLCBt
X2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdldCgpLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVu
dF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwgY29udGV4dC5nZXQo
KSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDRE0gcHJveHkg
aW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250ZXh0IiwgbV9jZG1JbnN0YW5jZS0+cHJveHlD
RE0oKS5nZXQoKSk7CisKKyAgICBtX2NkbUF0dGFjaG1lbnRTZW1hcGhvcmUuc2lnbmFsKCk7CiB9
CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzaW11bGF0ZUF1ZGlvSW50ZXJy
dXB0aW9uKCkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjZG1JbnN0YW5jZURl
dGFjaGVkKENETUluc3RhbmNlJiBpbnN0YW5jZSkKIHsKLSAgICBHc3RNZXNzYWdlKiBtZXNzYWdl
ID0gZ3N0X21lc3NhZ2VfbmV3X3JlcXVlc3Rfc3RhdGUoR1NUX09CSkVDVChtX3BpcGVsaW5lLmdl
dCgpKSwgR1NUX1NUQVRFX1BBVVNFRCk7Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKG1f
cGlwZWxpbmUuZ2V0KCksIG1lc3NhZ2UpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisK
KyAgICBpZiAobV9jZG1JbnN0YW5jZSAhPSAmaW5zdGFuY2UpIHsKKyAgICAgICAgR1NUX1dBUk5J
TkcoInBhc3NlZCBDRE1JbnN0YW5jZSAlcCBpcyBkaWZmZXJlbnQgZnJvbSBzdG9yZWQgb25lICVw
IiwgJmluc3RhbmNlLCBtX2NkbUluc3RhbmNlLmdldCgpKTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9waXBlbGlu
ZSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJkZXRhY2hpbmcg
Q0RNIGluc3RhbmNlICVwLCBzZXR0aW5nIGVtcHR5IGNvbnRleHQiLCBtX2NkbUluc3RhbmNlLmdl
dCgpKTsKKyAgICBtX2NkbUluc3RhbmNlID0gbnVsbHB0cjsKKworICAgIEdSZWZQdHI8R3N0Q29u
dGV4dD4gY29udGV4dCA9IGFkb3B0R1JlZihnc3RfY29udGV4dF9uZXcoImRybS1jZG0taW5zdGFu
Y2UiLCBGQUxTRSkpOworICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1f
cGlwZWxpbmUuZ2V0KCkpLCBjb250ZXh0LmdldCgpKTsKIH0KIAotYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmRpZFBhc3NDT1JTQWNjZXNzQ2hlY2soKSBjb25zdAordm9pZCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF0dGVtcHRUb0RlY3J5cHRXaXRoSW5zdGFuY2UoQ0RN
SW5zdGFuY2UmIGluc3RhbmNlKQogewotICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJj
ZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiB3ZWJLaXRTcmNQYXNzZWRDT1JTQWNjZXNzQ2hlY2so
V0VCS0lUX1dFQl9TUkNfQ0FTVChtX3NvdXJjZS5nZXQoKSkpOwotICAgIHJldHVybiBmYWxzZTsK
KyAgICBBU1NFUlQobV9jZG1JbnN0YW5jZS5nZXQoKSA9PSAmaW5zdGFuY2UpOworICAgIEdTVF9U
UkFDRSgiaW5zdGFuY2UgJXAsIGN1cnJlbnQgc3RvcmVkICVwIiwgJmluc3RhbmNlLCBtX2NkbUlu
c3RhbmNlLmdldCgpKTsKKyAgICBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5zdGFuY2UoKTsK
IH0KIAotYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNhblNhdmVNZWRpYURhdGEo
KSBjb25zdAordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmF0dGVtcHRUb0RlY3J5
cHRXaXRoTG9jYWxJbnN0YW5jZSgpCiB7Ci0gICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCBldmVudEhhbmRsZWQgPSBnc3RfZWxlbWVudF9zZW5k
X2V2ZW50KHBpcGVsaW5lKCksIGdzdF9ldmVudF9uZXdfY3VzdG9tKEdTVF9FVkVOVF9DVVNUT01f
RE9XTlNUUkVBTV9PT0IsIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhdHRlbXB0LXRvLWRlY3J5
cHQiKSkpOworICAgIEdTVF9ERUJVRygiYXR0ZW1wdGluZyB0byBkZWNyeXB0LCBldmVudCBoYW5k
bGVkICVzIiwgYm9vbEZvclByaW50aW5nKGV2ZW50SGFuZGxlZCkpOworfQogCi0gICAgaWYgKG1f
dXJsLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZVByb3RlY3Rpb25FdmVudChHc3RFdmVudCogZXZlbnQp
Cit7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90ZWN0aW9uTXV0ZXgpOwor
ICAgICAgICBpZiAobV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy5jb250YWlucyhHU1RfRVZFTlRf
U0VRTlVNKGV2ZW50KSkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUo
KSwgImV2ZW50ICV1IGFscmVhZHkgaGFuZGxlZCIsIEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBHU1RfREVCVUdfT0JK
RUNUKHBpcGVsaW5lKCksICJoYW5kbGluZyBldmVudCAldSBmcm9tIE1TRSIsIEdTVF9FVkVOVF9T
RVFOVU0oZXZlbnQpKTsKKyAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbVVVSUQgPSBudWxs
cHRyOworICAgIEdzdEJ1ZmZlciogaW5pdERhdGEgPSBudWxscHRyOworICAgIGdzdF9ldmVudF9w
YXJzZV9wcm90ZWN0aW9uKGV2ZW50LCAmZXZlbnRLZXlTeXN0ZW1VVUlELCAmaW5pdERhdGEsIG51
bGxwdHIpOworICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKHtldmVudEtleVN5c3Rl
bVVVSUQsIGluaXREYXRhfSk7Cit9CiAKLSAgICBpZiAobV91cmwucHJvdG9jb2xJc0luSFRUUEZh
bWlseSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpzZXRXYWl0aW5nRm9yS2V5KGJvb2wgd2FpdGluZ0ZvcktleSkKK3sKKyAgICAvLyBX
ZSBiYWlsIG91dCBpZiB2YWx1ZXMgZGlkIG5vdCBjaGFuZ2Ugb3IgaWYgd2UgYXJlIHJlcXVlc3Rl
ZCB0byBub3Qgd2FpdCBhbnltb3JlIGJ1dCB0aGVyZSBhcmUgc3RpbGwgd2FpdGluZyBkZWNyeXB0
b3JzLgorICAgIEdTVF9UUkFDRSgid2FpdGluZ0ZvcktleSAlcywgbV93YWl0aW5nRm9yS2V5ICVz
IiwgYm9vbEZvclByaW50aW5nKHdhaXRpbmdGb3JLZXkpLCBib29sRm9yUHJpbnRpbmcobV93YWl0
aW5nRm9yS2V5KSk7CisgICAgaWYgKHdhaXRpbmdGb3JLZXkgPT0gbV93YWl0aW5nRm9yS2V5IHx8
ICghd2FpdGluZ0ZvcktleSAmJiB0aGlzLT53YWl0aW5nRm9yS2V5KCkpKQorICAgICAgICByZXR1
cm47CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgbV93YWl0aW5nRm9yS2V5ID0gd2FpdGluZ0Zv
cktleTsKKyAgICBHU1RfREVCVUcoIndhaXRpbmcgZm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZv
clByaW50aW5nKG1fd2FpdGluZ0ZvcktleSkpOworICAgIG1fcGxheWVyLT53YWl0aW5nRm9yS2V5
Q2hhbmdlZCgpOwogfQogCi1PcHRpb25hbDxib29sPiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9yaWdpbikgY29uc3QK
K2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp3YWl0aW5nRm9yS2V5KCkgY29uc3QK
IHsKLSAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDEyLCAwKSkgewotICAgICAgICBH
U1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJDaGVja2luZyAldSBvcmlnaW5zIiwgbV9vcmln
aW5zLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgcmVzcG9uc2VPcmlnaW4gOiBtX29yaWdp
bnMpIHsKLSAgICAgICAgICAgIGlmICghb3JpZ2luLmNhbkFjY2VzcygqcmVzcG9uc2VPcmlnaW4p
KSB7Ci0gICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiRm91bmQg
cmVhY2hhYmxlIHJlc3BvbnNlIG9yaWdpbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIk5vIHZhbGlkIHJlc3BvbnNlIG9yaWdpbiBmb3VuZCIpOworICAgIGlmICghbV9w
aXBlbGluZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIC8vIEdTdHJlYW1l
ciA8IDEuMTIgaGFzIGFuIGluY29tcGxldGUgdXJpZG93bmxvYWRlciBpbXBsZW1lbnRhdGlvbiBz
byB3ZQotICAgIC8vIGNhbid0IHVzZSBXZWJLaXRXZWJTcmMgZm9yIGFkYXB0aXZlIGZyYWdtZW50
cyBkb3dubG9hZGluZyBpZiB0aGlzCi0gICAgLy8gdmVyc2lvbiBpcyBkZXRlY3RlZC4KLSAgICBV
TlVTRURfUEFSQU0ob3JpZ2luKTsKLSAgICByZXR1cm4gbV9oYXNUYWludGVkT3JpZ2luOworICAg
IEdzdFN0YXRlIHN0YXRlOworICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdl
dCgpLCAmc3RhdGUsIG51bGxwdHIsIDApOworCisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICBHUmVmUHRyPEdzdFF1ZXJ5PiBxdWVyeSA9IGFkb3B0R1JlZihnc3RfcXVlcnlfbmV3X2N1c3Rv
bShHU1RfUVVFUllfQ1VTVE9NLCBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYW55LWRlY3J5cHRv
ci13YWl0aW5nLWZvci1rZXkiKSkpOworICAgIGlmIChzdGF0ZSA+PSBHU1RfU1RBVEVfUEFVU0VE
KSB7CisgICAgICAgIHJlc3VsdCA9IGdzdF9lbGVtZW50X3F1ZXJ5KG1fcGlwZWxpbmUuZ2V0KCks
IHF1ZXJ5LmdldCgpKTsKKyAgICAgICAgR1NUX1RSQUNFKCJxdWVyeSByZXN1bHQgJXMsIG9uICVz
IiwgYm9vbEZvclByaW50aW5nKHJlc3VsdCksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0
YXRlKSk7CisgICAgfSBlbHNlIGlmIChzdGF0ZSA+PSBHU1RfU1RBVEVfUkVBRFkpIHsKKyAgICAg
ICAgLy8gUnVubmluZyBhIHF1ZXJ5IGluIHRoZSBwaXBlbGluZSBpcyBlYXNpZXIgYnV0IGl0IG9u
bHkgd29ya3Mgd2hlbiB0aGUgcGlwZWxpbmUgaXMgc2V0IHVwIGFuZCBydW5uaW5nLCBvdGhlcndp
c2Ugd2UgbmVlZCB0byBpbnNwZWN0IGl0IGFuZCBhc2sgdGhlIGRlY3J5cHRvcnMgZGlyZWN0bHku
CisgICAgICAgIEdVbmlxdWVQdHI8R3N0SXRlcmF0b3I+IGl0ZXJhdG9yKGdzdF9iaW5faXRlcmF0
ZV9yZWN1cnNlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpKTsKKyAgICAgICAgR3N0SXRlcmF0
b3JSZXN1bHQgaXRlcmF0b3JSZXN1bHQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGl0ZXJh
dG9yUmVzdWx0ID0gZ3N0X2l0ZXJhdG9yX2ZvbGQoaXRlcmF0b3IuZ2V0KCksIFtdKGNvbnN0IEdW
YWx1ZSAqaXRlbSwgR1ZhbHVlICosIGdwb2ludGVyIGRhdGEpIC0+IGdib29sZWFuIHsKKyAgICAg
ICAgICAgICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gR1NUX0VMRU1FTlQoZ192YWx1ZV9nZXRf
b2JqZWN0KGl0ZW0pKTsKKyAgICAgICAgICAgICAgICBHc3RRdWVyeSogcXVlcnkgPSBHU1RfUVVF
UlkoZGF0YSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICFXRUJLSVRfSVNfTUVESUFfQ0VOQ19E
RUNSWVBUKGVsZW1lbnQpIHx8ICFnc3RfZWxlbWVudF9xdWVyeShlbGVtZW50LCBxdWVyeSk7Cisg
ICAgICAgICAgICB9LCBudWxscHRyLCBxdWVyeS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoaXRl
cmF0b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQykKKyAgICAgICAgICAgICAgICBnc3Rf
aXRlcmF0b3JfcmVzeW5jKGl0ZXJhdG9yLmdldCgpKTsKKyAgICAgICAgfSB3aGlsZSAoaXRlcmF0
b3JSZXN1bHQgPT0gR1NUX0lURVJBVE9SX1JFU1lOQyk7CisgICAgICAgIGlmIChpdGVyYXRvclJl
c3VsdCA9PSBHU1RfSVRFUkFUT1JfRVJST1IpCisgICAgICAgICAgICBHU1RfV0FSTklORygiaXRl
cmF0b3IgcmV0dXJuZWQgYW4gZXJyb3IiKTsKKyAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3JSZXN1
bHQgPT0gR1NUX0lURVJBVE9SX09LOworICAgICAgICBHU1RfVFJBQ0UoIml0ZXJhdG9yIHJlc3Vs
dCAlZCwgd2FpdGluZyAlcyIsIGl0ZXJhdG9yUmVzdWx0LCBib29sRm9yUHJpbnRpbmcocmVzdWx0
KSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZgorCitib29sIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBr
ZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgYm9vbCByZXN1bHQgPSBm
YWxzZTsKKworI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCisgICAgcmVzdWx0ID0gR1N0cmVh
bWVyRU1FVXRpbGl0aWVzOjppc0NsZWFyS2V5S2V5U3lzdGVtKGtleVN5c3RlbSk7CisjZW5kaWYK
KworICAgIEdTVF9ERUJVRygiY2hlY2tpbmcgZm9yIEtleVN5c3RlbSBzdXBwb3J0IHdpdGggJXMg
YW5kIHR5cGUgJXM6ICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0Zjgo
KS5kYXRhKCksIGJvb2xGb3JQcmludGluZyhyZXN1bHQpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6ZXh0ZW5kZWRTdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFyYW1ldGVy
cyYgcGFyYW1ldGVycywgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSByZXN1bHQpCit7CisgICAg
VU5VU0VEX1BBUkFNKHBhcmFtZXRlcnMpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCA1MTEzMjVl
NDlmZTMzNzk5ZGQwZjU1MGFhNTZkOGU5OGQwNjc4NWFkLi4yYWRiMGZmMDIyZGEzNTMzZGU2YWI5
NmMwNjg4YTkzY2RiMDBhY2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5oCkBAIC0yLDkgKzIsOSBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
Q29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
LCAyMDExLCAyMDEyLCAyMDEzLCAyMDE1LCAyMDE2IElnYWxpYSBTLkwKICAqIENvcHlyaWdodCAo
QykgMjAxNCBDYWJsZSBUZWxldmlzaW9uIExhYm9yYXRvcmllcywgSW5jLgotICogQ29weXJpZ2h0
IChDKSAyMDE1LCAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDksIDIwMTkgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDE1LCAyMDE5IE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDI0ICsyNyw3NCBA
QAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIkdTdHJl
YW1lckNvbW1vbi5oIgotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uu
aCIKLQorI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1haW5U
aHJlYWROb3RpZmllci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8Z3N0L2dz
dC5oPgogI2luY2x1ZGUgPGdzdC9wYnV0aWxzL2luc3RhbGwtcGx1Z2lucy5oPgorI2luY2x1ZGUg
PHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGhy
ZWFkcy9CaW5hcnlTZW1hcGhvcmUuaD4KIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICNpbmNs
dWRlICJUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQXRv
bVN0cmluZ0hhc2guaD4KICNlbmRpZgotCiB0eXBlZGVmIHN0cnVjdCBfR3N0TXBlZ3RzU2VjdGlv
biBHc3RNcGVndHNTZWN0aW9uOwogCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyNpZiBVU0UoTElC
RVBPWFkpCisvLyBJbmNsdWRlIHRoZSA8ZXBveHkvZ2wuaD4gaGVhZGVyIGJlZm9yZSA8Z3N0L2ds
L2dsLmg+LgorI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisKKy8vIFdvcmthcm91bmQgYnVpbGQgaXNz
dWUgd2l0aCBSUGkgdXNlcmxhbmQgR0xFU3YyIGhlYWRlcnMgYW5kIGxpYmVwb3h5IDxodHRwczov
L3dlYmtpdC5vcmcvYi8xODU2Mzk+CisjaWYgIUdTVF9DSEVDS19WRVJTSU9OKDEsIDE0LCAwKQor
I2luY2x1ZGUgPGdzdC9nbC9nc3RnbGNvbmZpZy5oPgorI2lmIGRlZmluZWQoR1NUX0dMX0hBVkVf
V0lORE9XX0RJU1BNQU5YKSAmJiBHU1RfR0xfSEFWRV9XSU5ET1dfRElTUE1BTlgKKyNkZWZpbmUg
X19nbDJfaF8KKyN1bmRlZiBHU1RfR0xfSEFWRV9HTFNZTkMKKyNkZWZpbmUgR1NUX0dMX0hBVkVf
R0xTWU5DIDEKKyNlbmRpZgorI2VuZGlmIC8vICFHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxNCwgMCkK
KyNlbmRpZiAvLyBVU0UoTElCRVBPWFkpCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkK
KyNpbmNsdWRlIDxnc3QvZ2wvZ2wuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2Vu
ZGlmCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckdMLmgiCisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRl
eHR1cmVNYXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHlQcm92aWRlci5oIgorI2VuZGlmCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3Qg
X0dzdFN0cmVhbVZvbHVtZSBHc3RTdHJlYW1Wb2x1bWU7Cit0eXBlZGVmIHN0cnVjdCBfR3N0Vmlk
ZW9JbmZvIEdzdFZpZGVvSW5mbzsKK3R5cGVkZWYgc3RydWN0IF9Hc3RHTENvbnRleHQgR3N0R0xD
b250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0dzdEdMRGlzcGxheSBHc3RHTERpc3BsYXk7CisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQml0bWFwVGV4dHVyZUdMOworY2xhc3MgR0xDb250
ZXh0OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Citj
bGFzcyBJbnRTaXplOworY2xhc3MgSW50UmVjdDsKK2NsYXNzIFZpZGVvVGV4dHVyZUNvcGllckdT
dHJlYW1lcjsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKK2NsYXNzIFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShXRUJfQVVESU8pCiBj
bGFzcyBBdWRpb1NvdXJjZVByb3ZpZGVyOwogY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJl
YW1lcjsKQEAgLTU2LDIwICsxMDYsMjcgQEAgY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdT
dHJlYW1lcjsKIGNsYXNzIE1lZGlhUGxheWVyUmVxdWVzdEluc3RhbGxNaXNzaW5nUGx1Z2luc0Nh
bGxiYWNrOwogY2xhc3MgVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI7CiAKLSNpZiBFTkFCTEUo
TUVESUFfU09VUkNFKQotY2xhc3MgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50OwotI2VuZGlmCit2
b2lkIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKTsKIAotY2xhc3MgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2UgeworLy8gVXNlIGVhZ2VyIGluaXRpYWxpemF0aW9uIGZvciB0aGUgV2Vha1B0ckZhY3Rvcnkg
c2luY2Ugd2UgY2FsbCBtYWtlV2Vha1B0cigpIGZyb20gYW5vdGhlciB0aHJlYWQuCitjbGFzcyBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50
ZXJmYWNlLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4KKyNpZiBVU0UoVEVYVFVSRV9N
QVBQRVJfR0wpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgLCBwdWJsaWMgTmljb3NpYTo6Q29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICAsIHB1YmxpYyBQbGF0
Zm9ybUxheWVyCisjZW5kaWYKKyNlbmRpZgoreworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIGV4cGxpY2l0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcihNZWRp
YVBsYXllciopOworICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVEZWJ1Z0NhdGVnb3J5KCk7CisK
KyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoTWVkaWFQbGF5ZXIqKTsKICAgICB2aXJ0
dWFsIH5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKTsKIAotICAgIHN0YXRpYyB2b2lkIHJl
Z2lzdGVyTWVkaWFFbmdpbmUoTWVkaWFFbmdpbmVSZWdpc3RyYXIpOwogICAgIHN0YXRpYyBib29s
IGlzQXZhaWxhYmxlKCk7Ci0KLSAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOwot
ICAgIHZvaWQgaGFuZGxlUGx1Z2luSW5zdGFsbGVyUmVzdWx0KEdzdEluc3RhbGxQbHVnaW5zUmV0
dXJuKTsKKyAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1lZGlhRW5naW5lUmVn
aXN0cmFyKTsKIAogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2hhc1ZpZGVvOyB9CiAgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1faGFzQXVkaW87IH0KQEAgLTg3LDYzICsxNDQsMzA1IEBAIHB1YmxpYzoKICAgICB2b2lkIHBy
ZXBhcmVUb1BsYXkoKSBvdmVycmlkZTsKICAgICB2b2lkIHBsYXkoKSBvdmVycmlkZTsKICAgICB2
b2lkIHBhdXNlKCkgb3ZlcnJpZGU7Ci0KICAgICBib29sIHBhdXNlZCgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIGJvb2wgc2Vla2luZygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgc2Vla2luZygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2Vla2luZzsgfQorICAgIHZvaWQgc2Vlayhjb25z
dCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKIAogICAgIE1lZGlhVGltZSBwbGF0Zm9ybUR1cmF0aW9u
KCkgY29uc3Q7Ci0gICAgTWVkaWFUaW1lIGR1cmF0aW9uTWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgTWVkaWFUaW1lIGN1cnJlbnRNZWRpYVRpbWUoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICB2b2lkIHNlZWsoY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldFJh
dGUoZmxvYXQpIG92ZXJyaWRlOwogICAgIGRvdWJsZSByYXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzZXRQcmVzZXJ2ZXNQaXRjaChib29sKSBvdmVycmlkZTsKLQogICAgIHZvaWQgc2V0
UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsVGlt
ZXJGaXJlZCgpOwogCisgICAgRmxvYXRTaXplIG5hdHVyYWxTaXplKCkgY29uc3QgZmluYWw7CisK
KyAgICB2b2lkIHNldFZvbHVtZShmbG9hdCkgb3ZlcnJpZGU7CisgICAgZmxvYXQgdm9sdW1lKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIGJvb2wgZW5zdXJl
R3N0R0xDb250ZXh0KCk7CisgICAgR3N0Q29udGV4dCogcmVxdWVzdEdMQ29udGV4dChjb25zdCBj
aGFyKiBjb250ZXh0VHlwZSk7CisjZW5kaWYKKyAgICB2b2lkIHNldE11dGVkKGJvb2wpIG92ZXJy
aWRlOworICAgIGJvb2wgbXV0ZWQoKSBjb25zdDsKKworICAgIE1lZGlhUGxheWVyOjpOZXR3b3Jr
U3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTWVkaWFQbGF5ZXI6OlJl
YWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRWaXNp
YmxlKGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzaXplQ2hhbmdlZCgpOworCisgICAgLy8gUHJlZmVyIE1lZGlh
VGltZSBiYXNlZCBtZXRob2RzIG92ZXIgZmxvYXQgYmFzZWQuCisKKyAgICBmbG9hdCBkdXJhdGlv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGR1cmF0aW9uTWVkaWFUaW1lKCkudG9GbG9hdCgp
OyB9CisgICAgZG91YmxlIGR1cmF0aW9uRG91YmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZHVyYXRpb25NZWRpYVRpbWUoKS50b0RvdWJsZSgpOyB9CisgICAgTWVkaWFUaW1lIGR1cmF0aW9u
TWVkaWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgZmxvYXQgY3VycmVudFRpbWUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBjdXJyZW50TWVkaWFUaW1lKCkudG9GbG9hdCgpOyB9CisgICAg
ZG91YmxlIGN1cnJlbnRUaW1lRG91YmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gY3VycmVu
dE1lZGlhVGltZSgpLnRvRG91YmxlKCk7IH0KKyAgICBNZWRpYVRpbWUgY3VycmVudE1lZGlhVGlt
ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5n
ZXM+IGJ1ZmZlcmVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZWVrKGZsb2F0IHRpbWUp
IG92ZXJyaWRlIHsgc2VlayhNZWRpYVRpbWU6OmNyZWF0ZVdpdGhGbG9hdCh0aW1lKSk7IH0KKyAg
ICB2b2lkIHNlZWtEb3VibGUoZG91YmxlIHRpbWUpIG92ZXJyaWRlIHsgc2VlayhNZWRpYVRpbWU6
OmNyZWF0ZVdpdGhEb3VibGUodGltZSkpOyB9CisKKyAgICBmbG9hdCBtYXhUaW1lU2Vla2FibGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpLnRvRmxvYXQo
KTsgfQogICAgIE1lZGlhVGltZSBtYXhNZWRpYVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRl
OworICAgIGRvdWJsZSBtaW5UaW1lU2Vla2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
aW5NZWRpYVRpbWVTZWVrYWJsZSgpLnRvRmxvYXQoKTsgfQorICAgIE1lZGlhVGltZSBtaW5NZWRp
YVRpbWVTZWVrYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIE1lZGlhVGltZTo6emVyb1Rp
bWUoKTsgfQorCiAgICAgYm9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25zdCBvdmVycmlkZTsK
ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlcygpIGNvbnN0IG92ZXJyaWRlOwotICAg
IE1lZGlhVGltZSBtYXhUaW1lTG9hZGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIGhh
c1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8Ym9v
bD4gd291bGRUYWludE9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7Ci0gICAgdm9pZCB0aW1lQ2hhbmdlZCgp
OwotICAgIHZvaWQgZGlkRW5kKCk7CisgICAgdm9pZCBzaW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9u
KCkgb3ZlcnJpZGU7CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIEF1ZGlvU291cmNlUHJv
dmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdm9p
ZCBwYWludChHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKwor
ICAgIGJvb2wgc3VwcG9ydHNGdWxsc2NyZWVuKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBNZWRp
YVBsYXllcjo6TW92aWVMb2FkVHlwZSBtb3ZpZUxvYWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBNZWRpYVBsYXllciogbWVkaWFQbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllcjsg
fQorCisgICAgdW5zaWduZWQgZGVjb2RlZEZyYW1lQ291bnQoKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB1bnNpZ25lZCBkcm9wcGVkRnJhbWVDb3VudCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHVuc2ln
bmVkIGF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHVuc2lnbmVk
IHZpZGVvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBhY2Nl
bGVyYXRlZFJlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpIG92ZXJyaWRlOworCisjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSX0dMKQorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBv
dmVycmlkZTsKKyNpZiBQTEFURk9STShXSU5fQ0FJUk8pCisgICAgLy8gRklYTUU6IEFjY2VsZXJh
dGVkIHJlbmRlcmluZyBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgZm9yIFdpbkNhaXJvIHlldC4K
KyAgICBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5kZXJpbmcoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorI2Vsc2UKKyAgICBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRSZW5k
ZXJpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYKKyNlbmRpZgor
CisjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKKyAgICB2b2lkIGNkbUluc3RhbmNlQXR0YWNo
ZWQoQ0RNSW5zdGFuY2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIGNkbUluc3RhbmNlRGV0YWNoZWQo
Q0RNSW5zdGFuY2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIGhhbmRsZVByb3RlY3Rpb25FdmVudChH
c3RFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBhdHRlbXB0VG9EZWNyeXB0V2l0aExvY2FsSW5z
dGFuY2UoKTsKKyAgICB2b2lkIGF0dGVtcHRUb0RlY3J5cHRXaXRoSW5zdGFuY2UoQ0RNSW5zdGFu
Y2UmKSBmaW5hbDsKKyAgICB2b2lkIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKEluaXRE
YXRhJiYpOworICAgIHZvaWQgc2V0V2FpdGluZ0ZvcktleShib29sKTsKKyAgICBib29sIHdhaXRp
bmdGb3JLZXkoKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgc3Vw
cG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlTeXN0ZW0sIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpOworICAgIHN0YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIGV4dGVuZGVkU3Vw
cG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRlcnMmLCBNZWRpYVBsYXll
cjo6U3VwcG9ydHNUeXBlKTsKKworI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgYm9vbCBjb3B5
VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9y
bTNET2JqZWN0LCBHQzNEZW51bSwgR0MzRGludCwgR0MzRGVudW0sIEdDM0RlbnVtLCBHQzNEZW51
bSwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VG
b3JDdXJyZW50VGltZSgpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2b2lkIHNldFZpZGVvU291
cmNlT3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbik7CisgICAgR3N0RWxlbWVudCogcGlwZWxp
bmUoKSBjb25zdCB7IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CisgICAgdm9pZCBlbmFibGVU
cmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUsIHVuc2lnbmVkIGluZGV4
KTsKKworICAgIC8vIEFwcGVuZCBwaXBlbGluZSBpbnRlcmZhY2UKKyAgICBib29sIGhhbmRsZVN5
bmNNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKyAgICB2b2lkIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2Fn
ZSopOworCitwcm90ZWN0ZWQ6CisgICAgZW51bSBNYWluVGhyZWFkTm90aWZpY2F0aW9uIHsKKyAg
ICAgICAgVmlkZW9DaGFuZ2VkID0gMSA8PCAwLAorICAgICAgICBWaWRlb0NhcHNDaGFuZ2VkID0g
MSA8PCAxLAorICAgICAgICBBdWRpb0NoYW5nZWQgPSAxIDw8IDIsCisgICAgICAgIFZvbHVtZUNo
YW5nZWQgPSAxIDw8IDMsCisgICAgICAgIE11dGVDaGFuZ2VkID0gMSA8PCA0LAorI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKyAgICAgICAgVGV4dENoYW5nZWQgPSAxIDw8IDUsCisjZW5kaWYKKyAg
ICAgICAgU2l6ZUNoYW5nZWQgPSAxIDw8IDYsCisgICAgICAgIFN0cmVhbUNvbGxlY3Rpb25DaGFu
Z2VkID0gMSA8PCA3CisgICAgfTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0xpdmVTdHJlYW0oKSBj
b25zdCB7IHJldHVybiBtX2lzU3RyZWFtaW5nOyB9CisgICAgTWVkaWFUaW1lIG1heFRpbWVMb2Fk
ZWQoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc291cmNlU2V0dXAoR3N0RWxlbWVudCopOworICAgIHZpcnR1YWwgdm9pZCBj
b25maWd1cmVQbGF5U2luaygpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGFuZ2VQaXBlbGluZVN0
YXRlKEdzdFN0YXRlKTsKKworCisjaWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCisgICAgR3N0
RWxlbWVudCogY3JlYXRlSG9sZVB1bmNoVmlkZW9TaW5rKCk7CisgICAgdm9pZCBwdXNoTmV4dEhv
bGVQdW5jaEJ1ZmZlcigpOworICAgIGJvb2wgc2hvdWxkSWdub3JlSW50cmluc2ljU2l6ZSgpIGZp
bmFsIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAg
ICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdTYW1wbGVDYWxsYmFjayhHc3RFbGVtZW50KiwgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisgICAgc3RhdGljIEdzdEZsb3dSZXR1cm4gbmV3
UHJlcm9sbENhbGxiYWNrKEdzdEVsZW1lbnQqLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIq
KTsKKyAgICB2b2lkIGZsdXNoQ3VycmVudEJ1ZmZlcigpOworICAgIEdzdEVsZW1lbnQqIGNyZWF0
ZUdMQXBwU2luaygpOworICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2lua0dMKCk7CisgICAg
R3N0R0xDb250ZXh0KiBnc3RHTENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2dsQ29udGV4dC5n
ZXQoKTsgfQorICAgIEdzdEdMRGlzcGxheSogZ3N0R0xEaXNwbGF5KCkgY29uc3QgeyByZXR1cm4g
bV9nbERpc3BsYXkuZ2V0KCk7IH0KKyAgICB2b2lkIGVuc3VyZUdMVmlkZW9TaW5rQ29udGV4dCgp
OworI2VuZGlmCisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisgICAgdm9pZCBwdXNoVGV4
dHVyZVRvQ29tcG9zaXRvcigpOworI2lmIFVTRShOSUNPU0lBKQorICAgIHZvaWQgc3dhcEJ1ZmZl
cnNJZk5lZWRlZCgpIG92ZXJyaWRlOworI2Vsc2UKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHN3YXBC
dWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICBHc3RFbGVt
ZW50KiB2aWRlb1NpbmsoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU2luay5nZXQoKTsgfQorCisg
ICAgdm9pZCBzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KEdzdFN0cmVhbVZvbHVtZSopOworCisgICAg
dm9pZCBzZXRQaXBlbGluZShHc3RFbGVtZW50Kik7CisKKyAgICB2b2lkIHRyaWdnZXJSZXBhaW50
KEdzdFNhbXBsZSopOworICAgIHZvaWQgcmVwYWludCgpOworICAgIHZvaWQgY2FuY2VsUmVwYWlu
dChib29sIGRlc3Ryb3lpbmcgPSBmYWxzZSk7CisKKyAgICBzdGF0aWMgdm9pZCByZXBhaW50Q2Fs
bGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKiwgR3N0U2FtcGxlKik7CisgICAgc3Rh
dGljIHZvaWQgcmVwYWludENhbmNlbGxlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lciopOworCisgICAgdm9pZCBub3RpZnlQbGF5ZXJPZlZvbHVtZUNoYW5nZSgpOworICAgIHZv
aWQgbm90aWZ5UGxheWVyT2ZNdXRlKCk7CisKKyAgICBzdGF0aWMgdm9pZCB2b2x1bWVDaGFuZ2Vk
Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKik7CisgICAgc3RhdGljIHZvaWQg
bXV0ZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKworICAg
IC8vIEZJWE1FOiBXaGVyZSBpcyB0aGlzIHVzZWQ/CisgICAgdm9pZCBoYW5kbGVQbHVnaW5JbnN0
YWxsZXJSZXN1bHQoR3N0SW5zdGFsbFBsdWdpbnNSZXR1cm4pOworCisgICAgdm9pZCByZWFkeVRp
bWVyRmlyZWQoKTsKKworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWaWRlbygpOworICAgIHZvaWQg
bm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMoKTsKKyAgICB2b2lkIG5vdGlmeVBsYXllck9mQXVkaW8o
KTsKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICB2b2lkIG5vdGlmeVBsYXllck9mVGV4
dCgpOworICAgIHZvaWQgbmV3VGV4dFNhbXBsZSgpOworI2VuZGlmCisKKyAgICB2b2lkIGVuc3Vy
ZUF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKyAgICB2b2lkIHNldEF1ZGlvU3RyZWFtUHJvcGVydGll
cyhHT2JqZWN0Kik7CisKKyAgICBzdGF0aWMgdm9pZCBzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXND
YWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqLCBHT2JqZWN0Kik7CisKKyAgICBz
dGF0aWMgdm9pZCBzb3VyY2VTZXR1cENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ciosIEdzdEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgdm9pZCB2aWRlb0NoYW5nZWRDYWxsYmFjayhN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKKyAgICBzdGF0aWMgdm9pZCB2aWRlb1NpbmtD
YXBzQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworICAgIHN0
YXRpYyB2b2lkIGF1ZGlvQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ciopOworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBzdGF0aWMgdm9pZCB0ZXh0Q2hhbmdl
ZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOworICAgIHN0YXRpYyBHc3RG
bG93UmV0dXJuIG5ld1RleHRTYW1wbGVDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIqKTsKKyNlbmRpZgorCisgICAgdm9pZCB0aW1lQ2hhbmdlZCgpOwogICAgIHZvaWQgbG9hZGlu
Z0ZhaWxlZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlLCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZywgYm9vbCBmb3JjZU5vdGlmaWNhdGlvbnMgPSBm
YWxzZSk7CisgICAgdm9pZCBsb2FkU3RhdGVDaGFuZ2VkKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
c291cmNlU2V0dXAoR3N0RWxlbWVudCopOworI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKKyAg
ICB2b2lkIHVwZGF0ZVRleHR1cmVNYXBwZXJGbGFncygpOworI2VuZGlmCiAKLSAgICBHc3RFbGVt
ZW50KiBhdWRpb1NpbmsoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY29uZmln
dXJlUGxheVNpbmsoKSB7IH0KKyAgICBSZWY8TWFpblRocmVhZE5vdGlmaWVyPE1haW5UaHJlYWRO
b3RpZmljYXRpb24+PiBtX25vdGlmaWVyOworICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKKyAg
ICBtdXRhYmxlIE1lZGlhVGltZSBtX2NhY2hlZFBvc2l0aW9uOworICAgIG11dGFibGUgTWVkaWFU
aW1lIG1fY2FjaGVkRHVyYXRpb247CisgICAgYm9vbCBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNo
ZWRTZWVrUG9zaXRpb24geyBmYWxzZSB9OworICAgIGJvb2wgbV9jaGFuZ2luZ1JhdGUgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9kb3dubG9hZEZpbmlzaGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
ZXJyb3JPY2N1cmVkIHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIGJvb2wgbV9pc0VuZFJlYWNoZWQg
eyBmYWxzZSB9OworICAgIG11dGFibGUgYm9vbCBtX2lzU3RyZWFtaW5nIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fcGF1c2VkIHsgdHJ1ZSB9OworICAgIGZsb2F0IG1fcGxheWJhY2tSYXRlIHsgMSB9
OworICAgIEdzdFN0YXRlIG1fY3VycmVudFN0YXRlOworICAgIEdzdFN0YXRlIG1fb2xkU3RhdGU7
CisgICAgR3N0U3RhdGUgbV9yZXF1ZXN0ZWRTdGF0ZSB7IEdTVF9TVEFURV9WT0lEX1BFTkRJTkcg
fTsKKyAgICBib29sIG1fcmVzZXRQaXBlbGluZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX3NlZWtp
bmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zZWVrSXNQZW5kaW5nIHsgZmFsc2UgfTsKKyAgICBN
ZWRpYVRpbWUgbV9zZWVrVGltZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc291cmNlIHsg
bnVsbHB0ciB9OworICAgIGJvb2wgbV92b2x1bWVBbmRNdXRlSW5pdGlhbGl6ZWQgeyBmYWxzZSB9
OwogCi0gICAgdm9pZCBzaW11bGF0ZUF1ZGlvSW50ZXJydXB0aW9uKCkgb3ZlcnJpZGU7CisjaWYg
VVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgbV90ZXh0
dXJlTWFwcGVyRmxhZ3M7CisjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBjaGFuZ2VQaXBlbGlu
ZVN0YXRlKEdzdFN0YXRlKTsKKyAgICBHUmVmUHRyPEdzdFN0cmVhbVZvbHVtZT4gbV92b2x1bWVF
bGVtZW50OworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92aWRlb1Npbms7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOworICAgIEludFNpemUgbV9zaXplOwogCi0jaWYgRU5B
QkxFKFdFQl9BVURJTykKLSAgICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBhdWRpb1NvdXJjZVByb3Zp
ZGVyKCkgb3ZlcnJpZGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRl
IHsgTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nIH07CisgICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6
TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlIHsgTWVkaWFQbGF5ZXI6OkVtcHR5IH07CisKKyAg
ICBtdXRhYmxlIExvY2sgbV9zYW1wbGVNdXRleDsKKyAgICBHUmVmUHRyPEdzdFNhbXBsZT4gbV9z
YW1wbGU7CisKKyAgICBtdXRhYmxlIEZsb2F0U2l6ZSBtX3ZpZGVvU2l6ZTsKKyAgICBib29sIG1f
dXNpbmdGYWxsYmFja1ZpZGVvU2luayB7IGZhbHNlIH07CisgICAgYm9vbCBtX3JlbmRlcmluZ0Nh
bkJlQWNjZWxlcmF0ZWQgeyBmYWxzZSB9OworCisgICAgYm9vbCBtX2Rlc3Ryb3lpbmcgeyBmYWxz
ZSB9OworCisjaWYgVVNFKEdTVFJFQU1FUl9HTCkKKyAgICBHUmVmUHRyPEdzdEdMQ29udGV4dD4g
bV9nbENvbnRleHQ7CisgICAgR1JlZlB0cjxHc3RHTERpc3BsYXk+IG1fZ2xEaXNwbGF5OworICAg
IEdSZWZQdHI8R3N0Q29udGV4dD4gbV9nbERpc3BsYXlFbGVtZW50Q29udGV4dDsKKyAgICBHUmVm
UHRyPEdzdENvbnRleHQ+IG1fZ2xBcHBFbGVtZW50Q29udGV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyPiBtX3ZpZGVvVGV4dHVyZUNvcGllcjsKKwor
ICAgIEdSZWZQdHI8R3N0R0xDb2xvckNvbnZlcnQ+IG1fY29sb3JDb252ZXJ0OworICAgIEdSZWZQ
dHI8R3N0Q2Fwcz4gbV9jb2xvckNvbnZlcnRJbnB1dENhcHM7CisgICAgR1JlZlB0cjxHc3RDYXBz
PiBtX2NvbG9yQ29udmVydE91dHB1dENhcHM7CiAjZW5kaWYKIAotICAgIGJvb2wgaXNMaXZlU3Ry
ZWFtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9pc1N0cmVhbWluZzsgfQorICAgIEltYWdl
T3JpZW50YXRpb24gbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uOwogCi0gICAgdm9pZCBlbmFibGVU
cmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUsIHVuc2lnbmVkIGluZGV4
KTsKKyNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQorICAgIEJpbmFyeVNlbWFwaG9yZSBtX2Nk
bUF0dGFjaG1lbnRTZW1hcGhvcmU7CisgICAgUmVmUHRyPGNvbnN0IENETUluc3RhbmNlPiBtX2Nk
bUluc3RhbmNlOworCisgICAgTG9jayBtX3Byb3RlY3Rpb25NdXRleDsgLy8gR3VhcmRzIGFjY2Vz
cyB0byBtX2hhbmRsZWRQcm90ZWN0aW9uRXZlbnRzLgorICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1f
aGFuZGxlZFByb3RlY3Rpb25FdmVudHM7CiAKLSAgICBib29sIGhhbmRsZVN5bmNNZXNzYWdlKEdz
dE1lc3NhZ2UqKSBvdmVycmlkZTsKKyAgICBib29sIG1fd2FpdGluZ0ZvcktleSB7IGZhbHNlIH07
CisjZW5kaWYKKworICAgIE9wdGlvbmFsPEdzdFZpZGVvRGVjb2RlclBsYXRmb3JtPiBtX3ZpZGVv
RGVjb2RlclBsYXRmb3JtOwogCiBwcml2YXRlOgorICAgIHZvaWQgZmlsbFRpbWVyRmlyZWQoKTsK
KworICAgIHZvaWQgZGlkRW5kKCk7CisKKworICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2lu
aygpOworICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUF1ZGlvU2luaygpOworICAgIEdzdEVsZW1lbnQq
IGF1ZGlvU2luaygpIGNvbnN0OworCiAgICAgc3RhdGljIHZvaWQgZ2V0U3VwcG9ydGVkVHlwZXMo
SGFzaFNldDxTdHJpbmcsIEFTQ0lJQ2FzZUluc2Vuc2l0aXZlSGFzaD4mKTsKICAgICBzdGF0aWMg
TWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVT
dXBwb3J0UGFyYW1ldGVycyYpOwogICAgIHZvaWQgc3luY09uQ2xvY2soYm9vbCBzeW5jKTsKIAot
ICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUF1ZGlvU2luaygpIG92ZXJyaWRlOwotCiAgICAgTWVkaWFU
aW1lIHBsYXliYWNrUG9zaXRpb24oKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVT
dGF0ZXMoKTsKQEAgLTE4OCw4MSArNDg3LDQyIEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVU
cmFja3MoKTsKICAgICB2b2lkIGNsZWFyVHJhY2tzKCk7CiAKLXByb3RlY3RlZDoKLSAgICBib29s
IG1fYnVmZmVyaW5nOwotICAgIGludCBtX2J1ZmZlcmluZ1BlcmNlbnRhZ2U7Ci0gICAgbXV0YWJs
ZSBNZWRpYVRpbWUgbV9jYWNoZWRQb3NpdGlvbjsKLSAgICBtdXRhYmxlIE1lZGlhVGltZSBtX2Nh
Y2hlZER1cmF0aW9uOwotICAgIGJvb2wgbV9jYW5GYWxsQmFja1RvTGFzdEZpbmlzaGVkU2Vla1Bv
c2l0aW9uOwotICAgIGJvb2wgbV9jaGFuZ2luZ1JhdGU7Ci0gICAgYm9vbCBtX2Rvd25sb2FkRmlu
aXNoZWQ7Ci0gICAgYm9vbCBtX2Vycm9yT2NjdXJlZDsKLSAgICBtdXRhYmxlIGJvb2wgbV9pc0Vu
ZFJlYWNoZWQ7Ci0gICAgbXV0YWJsZSBib29sIG1faXNTdHJlYW1pbmc7Ci0gICAgYm9vbCBtX3Bh
dXNlZDsKLSAgICBmbG9hdCBtX3BsYXliYWNrUmF0ZTsKLSAgICBHc3RTdGF0ZSBtX2N1cnJlbnRT
dGF0ZTsKLSAgICBHc3RTdGF0ZSBtX29sZFN0YXRlOwotICAgIEdzdFN0YXRlIG1fcmVxdWVzdGVk
U3RhdGU7Ci0gICAgYm9vbCBtX3Jlc2V0UGlwZWxpbmU7Ci0gICAgYm9vbCBtX3NlZWtpbmc7Ci0g
ICAgYm9vbCBtX3NlZWtJc1BlbmRpbmc7Ci0gICAgTWVkaWFUaW1lIG1fc2Vla1RpbWU7Ci0gICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBtX3NvdXJjZTsKLSAgICBib29sIG1fdm9sdW1lQW5kTXV0ZUlu
aXRpYWxpemVkOwotCi0gICAgdm9pZCByZWFkeVRpbWVyRmlyZWQoKTsKLQotICAgIHZvaWQgbm90
aWZ5UGxheWVyT2ZWaWRlbygpOwotICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMoKTsK
LSAgICB2b2lkIG5vdGlmeVBsYXllck9mQXVkaW8oKTsKLQotI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICB2b2lkIG5vdGlmeVBsYXllck9mVGV4dCgpOwotICAgIHZvaWQgbmV3VGV4dFNhbXBs
ZSgpOwotI2VuZGlmCi0KLSAgICB2b2lkIGVuc3VyZUF1ZGlvU291cmNlUHJvdmlkZXIoKTsKLSAg
ICB2b2lkIHNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyhHT2JqZWN0Kik7Ci0KLSAgICBzdGF0aWMg
dm9pZCBzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXNDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIqLCBHT2JqZWN0Kik7Ci0KLSAgICBzdGF0aWMgdm9pZCBzb3VyY2VTZXR1cENhbGxi
YWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciosIEdzdEVsZW1lbnQqKTsKLSAgICBzdGF0
aWMgdm9pZCB2aWRlb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIq
KTsKLSAgICBzdGF0aWMgdm9pZCB2aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lciopOwotICAgIHN0YXRpYyB2b2lkIGF1ZGlvQ2hhbmdlZENhbGxi
YWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwotI2lmIEVOQUJMRShWSURFT19UUkFD
SykKLSAgICBzdGF0aWMgdm9pZCB0ZXh0Q2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lciopOwotICAgIHN0YXRpYyBHc3RGbG93UmV0dXJuIG5ld1RleHRTYW1wbGVDYWxs
YmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIqKTsKLSNlbmRpZgotCi1wcml2YXRlOgot
CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV90ZXh0
QXBwU2luazsKICAgICBHUmVmUHRyPEdzdFBhZD4gbV90ZXh0QXBwU2lua1BhZDsKICNlbmRpZgot
ICAgIEdzdFN0cnVjdHVyZSogbV9tZWRpYUxvY2F0aW9uczsKLSAgICBpbnQgbV9tZWRpYUxvY2F0
aW9uQ3VycmVudEluZGV4OwotICAgIGJvb2wgbV9wbGF5YmFja1JhdGVQYXVzZTsKKyAgICBHc3RT
dHJ1Y3R1cmUqIG1fbWVkaWFMb2NhdGlvbnMgeyBudWxscHRyIH07CisgICAgaW50IG1fbWVkaWFM
b2NhdGlvbkN1cnJlbnRJbmRleCB7IDAgfTsKKyAgICBib29sIG1fcGxheWJhY2tSYXRlUGF1c2Ug
eyBmYWxzZSB9OwogICAgIE1lZGlhVGltZSBtX3RpbWVPZk92ZXJsYXBwaW5nU2VlazsKLSAgICBm
bG9hdCBtX2xhc3RQbGF5YmFja1JhdGU7CisgICAgZmxvYXQgbV9sYXN0UGxheWJhY2tSYXRlIHsg
MSB9OwogICAgIFRpbWVyIG1fZmlsbFRpbWVyOwogICAgIE1lZGlhVGltZSBtX21heFRpbWVMb2Fk
ZWQ7CiAgICAgYm9vbCBtX2xvYWRpbmdTdGFsbGVkIHsgZmFsc2UgfTsKICAgICBNZWRpYVBsYXll
cjo6UHJlbG9hZCBtX3ByZWxvYWQ7Ci0gICAgYm9vbCBtX2RlbGF5aW5nTG9hZDsKKyAgICBib29s
IG1fZGVsYXlpbmdMb2FkIHsgZmFsc2UgfTsKICAgICBtdXRhYmxlIE1lZGlhVGltZSBtX21heFRp
bWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7Ci0gICAgYm9vbCBtX2hhc1ZpZGVvOwot
ICAgIGJvb2wgbV9oYXNBdWRpbzsKKyAgICBib29sIG1faGFzVmlkZW8geyBmYWxzZSB9OworICAg
IGJvb2wgbV9oYXNBdWRpbyB7IGZhbHNlIH07CisgICAgQ29uZGl0aW9uIG1fZHJhd0NvbmRpdGlv
bjsKKyAgICBMb2NrIG1fZHJhd011dGV4OworICAgIFJ1bkxvb3A6OlRpbWVyPE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcj4gbV9kcmF3VGltZXI7CiAgICAgUnVuTG9vcDo6VGltZXI8TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyPiBtX3JlYWR5VGltZXJIYW5kbGVyOwotICAgIG11dGFibGUg
dW5zaWduZWQgbG9uZyBsb25nIG1fdG90YWxCeXRlczsKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVJf
R0wpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgUmVmPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9u
aWNvc2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorI2VuZGlmCisgICAgYm9vbCBt
X2J1ZmZlcmluZyB7IGZhbHNlIH07CisgICAgaW50IG1fYnVmZmVyaW5nUGVyY2VudGFnZSB7IDAg
fTsKKyAgICBtdXRhYmxlIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3RvdGFsQnl0ZXMgeyAwIH07CiAg
ICAgVVJMIG1fdXJsOwotICAgIGJvb2wgbV9wcmVzZXJ2ZXNQaXRjaDsKKyAgICBib29sIG1fcHJl
c2VydmVzUGl0Y2ggeyBmYWxzZSB9OwogICAgIG11dGFibGUgT3B0aW9uYWw8U2Vjb25kcz4gbV9s
YXN0UXVlcnlUaW1lOwogICAgIGJvb2wgbV9pc0xlZ2FjeVBsYXliaW47CiAgICAgR1JlZlB0cjxH
c3RTdHJlYW1Db2xsZWN0aW9uPiBtX3N0cmVhbUNvbGxlY3Rpb247Ci0gICAgRmxvYXRTaXplIG5h
dHVyYWxTaXplKCkgY29uc3QgZmluYWw7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBS
ZWZQdHI8TWVkaWFTdHJlYW1Qcml2YXRlPiBtX3N0cmVhbVByaXZhdGU7CiAjZW5kaWYKQEAgLTI5
Miw4ICs1NTIsOSBAQCBwcml2YXRlOgogCiAgICAgSGFzaFNldDxSZWZQdHI8V2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW4+PiBtX29yaWdpbnM7CiAgICAgT3B0aW9uYWw8Ym9vbD4gbV9oYXNUYWludGVk
T3JpZ2luIHsgV1RGOjpudWxsb3B0IH07CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZnBz
U2luayB7IG51bGxwdHIgfTsKIH07CiAKIH0KLQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCisj
ZW5kaWYgLy8gRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkZjlhNDY4NTFkZDFiZDcyZjkyNTY0ZmFlOWFiMGExNmZjNzVmMmVl
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1NjUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IENvbGxhYm9yYSBMdGQuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDE1LCAyMDE2IElnYWxpYSBTLkwKLSAqIENv
cHlyaWdodCAoQykgMjAxNSwgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWludCB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgiCi0K
LSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCi0KLSNpbmNsdWRlICJHU3RyZWFt
ZXJDb21tb24uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFn
ZUdTdHJlYW1lci5oIgotI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgi
Ci0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFt
ZXIuaCIKLSNpbmNsdWRlICJXZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaCIKLSNpbmNsdWRlIDx3
dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotCi0jaW5jbHVkZSA8Z3N0L2F1
ZGlvL3N0cmVhbXZvbHVtZS5oPgotI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4K
LQotI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0jaW5jbHVkZSAiQ0RNSW5zdGFuY2UuaCIK
LSNpbmNsdWRlICJHU3RyZWFtZXJFTUVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKLSNpbmNsdWRlICJXZWJLaXRDb21tb25FbmNyeXB0aW9uRGVjcnlwdG9yR1N0cmVhbWVy
LmgiCi0jZW5kaWYKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0jZGVmaW5lIFRFWFRVUkVfQ09Q
SUVSX0NPTE9SX0NPTlZFUlRfRkxBRyBWaWRlb1RleHR1cmVDb3BpZXJHU3RyZWFtZXI6OkNvbG9y
Q29udmVyc2lvbjo6Tm9Db252ZXJ0Ci0jZGVmaW5lIEdTVF9HTF9DQVBTX0ZPUk1BVCAieyBSR0J4
LCBSR0JBLCBJNDIwLCBZNDQ0LCBZVjEyLCBZNDFCLCBZNDJCLCBOVjEyLCBOVjIxLCBWVVlBIH0i
Ci0KLSNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KLQotI2luY2x1ZGUgIkdMQ29udGV4
dC5oIgotI2lmIFVTRShHTFgpCi0jaW5jbHVkZSAiR0xDb250ZXh0R0xYLmgiCi0jaW5jbHVkZSA8
Z3N0L2dsL3gxMS9nc3RnbGRpc3BsYXlfeDExLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShFR0wpCi0j
aW5jbHVkZSAiR0xDb250ZXh0RUdMLmgiCi0jaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3RnbGRpc3Bs
YXlfZWdsLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFgxMSkKLSNpbmNsdWRlICJQbGF0Zm9y
bURpc3BsYXlYMTEuaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0FZTEFORCkKLSNpbmNsdWRl
ICJQbGF0Zm9ybURpc3BsYXlXYXlsYW5kLmgiCi0jZW5kaWYKLQotI2lmIFVTRShXUEVfUkVOREVS
RVIpCi0jaW5jbHVkZSAiUGxhdGZvcm1EaXNwbGF5TGliV1BFLmgiCi0jZW5kaWYKLQotLy8gZ3N0
Z2xhcGkuaCBtYXkgaW5jbHVkZSBlZ2xwbGF0Zm9ybS5oIGFuZCBpdCBpbmNsdWRlcyBYLmgsIHdo
aWNoCi0vLyBkZWZpbmVzIE5vbmUsIGJyZWFraW5nIE1lZGlhUGxheWVyOjpOb25lIGVudW0KLSNp
ZiBQTEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAotI3VuZGVmIE5vbmUK
LSNlbmRpZiAvLyBQTEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAotI2lu
Y2x1ZGUgIlZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lci5oIgotI2VuZGlmIC8vIFVTRShHU1RS
RUFNRVJfR0wpCi0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0jaW5jbHVkZSAiQml0bWFw
VGV4dHVyZUdMLmgiCi0jaW5jbHVkZSAiQml0bWFwVGV4dHVyZVBvb2wuaCIKLSNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyQ29udGV4dEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllckJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkuaCIKLSNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCi0jaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KLSNlbmRpZgotI2VuZGlmIC8vIFVTRShURVhUVVJF
X01BUFBFUl9HTCkKLQotR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVi
dWcpOwotI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X21lZGlhX3BsYXllcl9kZWJ1Zwot
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLSNpZiBVU0Uo
R1NUUkVBTUVSX0hPTEVQVU5DSCkKLXN0YXRpYyBjb25zdCBGbG9hdFNpemUgc19ob2xlUHVuY2hE
ZWZhdWx0RnJhbWVTaXplKDEyODAsIDcyMCk7Ci0jZW5kaWYKLQotc3RhdGljIGludCBncmVhdGVz
dENvbW1vbkRpdmlzb3IoaW50IGEsIGludCBiKQotewotICAgIHdoaWxlIChiKSB7Ci0gICAgICAg
IGludCB0ZW1wID0gYTsKLSAgICAgICAgYSA9IGI7Ci0gICAgICAgIGIgPSB0ZW1wICUgYjsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gQUJTKGEpOwotfQotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dM
KQotY2xhc3MgR3N0VmlkZW9GcmFtZUhvbGRlciA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllckJ1ZmZlcjo6VW5tYW5hZ2VkQnVmZmVyRGF0YUhvbGRlciB7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgR3N0VmlkZW9GcmFtZUhvbGRlcihHc3RTYW1wbGUqIHNhbXBsZSwgT3B0aW9uYWw8
R3N0VmlkZW9EZWNvZGVyUGxhdGZvcm0+IHZpZGVvRGVjb2RlclBsYXRmb3JtLCBUZXh0dXJlTWFw
cGVyR0w6OkZsYWdzIGZsYWdzLCBib29sIGdzdEdMRW5hYmxlZCkKLSAgICAgICAgOiBtX3ZpZGVv
RGVjb2RlclBsYXRmb3JtKHZpZGVvRGVjb2RlclBsYXRmb3JtKQotICAgIHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoR1NUX0lTX1NBTVBMRShzYW1wbGUpKTsKLQotICAgICAgICBHc3RWaWRlb0lu
Zm8gdmlkZW9JbmZvOwotICAgICAgICBpZiAoVU5MSUtFTFkoIWdldFNhbXBsZVZpZGVvSW5mbyhz
YW1wbGUsIHZpZGVvSW5mbykpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fc2l6
ZSA9IEludFNpemUoR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyksIEdTVF9WSURFT19J
TkZPX0hFSUdIVCgmdmlkZW9JbmZvKSk7Ci0gICAgICAgIG1faGFzQWxwaGFDaGFubmVsID0gR1NU
X1ZJREVPX0lORk9fSEFTX0FMUEhBKCZ2aWRlb0luZm8pOwotICAgICAgICBtX2J1ZmZlciA9IGdz
dF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIUdTVF9J
U19CVUZGRVIobV9idWZmZXIpKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmIFVTRShHU1RS
RUFNRVJfR0wpCi0gICAgICAgIG1fZmxhZ3MgPSBmbGFncyB8IChtX2hhc0FscGhhQ2hhbm5lbCA/
IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwKTsKLQotICAgICAgICBpZiAoZ3N0R0xF
bmFibGVkKSB7Ci0gICAgICAgICAgICBtX2lzTWFwcGVkID0gZ3N0X3ZpZGVvX2ZyYW1lX21hcCgm
bV92aWRlb0ZyYW1lLCAmdmlkZW9JbmZvLCBtX2J1ZmZlciwgc3RhdGljX2Nhc3Q8R3N0TWFwRmxh
Z3M+KEdTVF9NQVBfUkVBRCB8IEdTVF9NQVBfR0wpKTsKLSAgICAgICAgICAgIGlmIChtX2lzTWFw
cGVkKSB7Ci0gICAgICAgICAgICAgICAgbV90ZXh0dXJlSUQgPSAqcmVpbnRlcnByZXRfY2FzdDxH
THVpbnQqPihtX3ZpZGVvRnJhbWUuZGF0YVswXSk7Ci0gICAgICAgICAgICAgICAgbV9oYXNNYXBw
ZWRUZXh0dXJlcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotI2Vsc2UK
LSAgICAgICAgVU5VU0VEX1BBUkFNKGZsYWdzKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGdzdEdM
RW5hYmxlZCk7Ci0jZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKLQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtX3RleHR1cmVJRCA9IDA7Ci0gICAgICAgICAgICBtX2lzTWFwcGVkID0gZ3N0X3Zp
ZGVvX2ZyYW1lX21hcCgmbV92aWRlb0ZyYW1lLCAmdmlkZW9JbmZvLCBtX2J1ZmZlciwgR1NUX01B
UF9SRUFEKTsKLSAgICAgICAgICAgIGlmIChtX2lzTWFwcGVkKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gUmlnaHQgbm93IHRoZSBUZXh0dXJlTWFwcGVyIG9ubHkgc3VwcG9ydHMgY2hyb21hcyB3aXRo
IG9uZSBwbGFuZQotICAgICAgICAgICAgICAgIEFTU0VSVChHU1RfVklERU9fSU5GT19OX1BMQU5F
UygmdmlkZW9JbmZvKSA9PSAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHZpcnR1YWwgfkdzdFZpZGVvRnJhbWVIb2xkZXIoKQotICAgIHsKLSAgICAgICAgaWYgKFVO
TElLRUxZKCFtX2lzTWFwcGVkKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBnc3Rf
dmlkZW9fZnJhbWVfdW5tYXAoJm1fdmlkZW9GcmFtZSk7Ci0gICAgfQotCi0jaWYgVVNFKEdTVFJF
QU1FUl9HTCkKLSAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvckNQVVN5bmMoKQotICAgIHsKLSAgICAg
ICAgR3N0R0xTeW5jTWV0YSogbWV0YSA9IGdzdF9idWZmZXJfZ2V0X2dsX3N5bmNfbWV0YShtX2J1
ZmZlcik7Ci0gICAgICAgIGlmIChtZXRhKSB7Ci0gICAgICAgICAgICBHc3RNZW1vcnkqIG1lbSA9
IGdzdF9idWZmZXJfcGVla19tZW1vcnkobV9idWZmZXIsIDApOwotICAgICAgICAgICAgR3N0R0xD
b250ZXh0KiBjb250ZXh0ID0gKChHc3RHTEJhc2VNZW1vcnkqKW1lbSktPmNvbnRleHQ7Ci0gICAg
ICAgICAgICBnc3RfZ2xfc3luY19tZXRhX3dhaXRfY3B1KG1ldGEsIGNvbnRleHQpOwotICAgICAg
ICB9Ci0gICAgfQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KLSAgICBjb25zdCBJbnRT
aXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgYm9vbCBoYXNBbHBoYUNo
YW5uZWwoKSBjb25zdCB7IHJldHVybiBtX2hhc0FscGhhQ2hhbm5lbDsgfQotICAgIFRleHR1cmVN
YXBwZXJHTDo6RmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzOyB9Ci0gICAgR0x1
aW50IHRleHR1cmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZUlEOyB9Ci0gICAgYm9vbCBo
YXNNYXBwZWRUZXh0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWFwcGVkVGV4dHVyZXM7IH0K
LSAgICBjb25zdCBHc3RWaWRlb0ZyYW1lJiB2aWRlb0ZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV92
aWRlb0ZyYW1lOyB9Ci0KLSAgICB2b2lkIHVwZGF0ZVRleHR1cmUoQml0bWFwVGV4dHVyZUdMJiB0
ZXh0dXJlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3RleHR1cmVJRCk7Ci0gICAgICAgIEdz
dFZpZGVvR0xUZXh0dXJlVXBsb2FkTWV0YSogbWV0YTsKLSAgICAgICAgaWYgKG1fYnVmZmVyICYm
IChtZXRhID0gZ3N0X2J1ZmZlcl9nZXRfdmlkZW9fZ2xfdGV4dHVyZV91cGxvYWRfbWV0YShtX2J1
ZmZlcikpKSB7Ci0gICAgICAgICAgICBpZiAobWV0YS0+bl90ZXh0dXJlcyA9PSAxKSB7IC8vIEJS
R3ggJiBCR1JBIGZvcm1hdHMgdXNlIG9ubHkgb25lIHRleHR1cmUuCi0gICAgICAgICAgICAgICAg
Z3VpbnQgaWRzWzRdID0geyB0ZXh0dXJlLmlkKCksIDAsIDAsIDAgfTsKLQotICAgICAgICAgICAg
ICAgIGlmIChnc3RfdmlkZW9fZ2xfdGV4dHVyZV91cGxvYWRfbWV0YV91cGxvYWQobWV0YSwgaWRz
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFtX2lzTWFwcGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGludCBzdHJpZGUgPSBHU1RfVklERU9fRlJBTUVfUExBTkVfU1RSSURFKCZtX3ZpZGVvRnJh
bWUsIDApOwotICAgICAgICBjb25zdCB2b2lkKiBzcmNEYXRhID0gR1NUX1ZJREVPX0ZSQU1FX1BM
QU5FX0RBVEEoJm1fdmlkZW9GcmFtZSwgMCk7Ci0KLSAgICAgICAgaWYgKCFzcmNEYXRhKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRleHR1cmUudXBkYXRlQ29udGVudHMoc3JjRGF0
YSwgV2ViQ29yZTo6SW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KSwgV2ViQ29yZTo6SW50UG9pbnQoMCwgMCksIHN0cmlkZSk7Ci0gICAgfQotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBwbGF0Zm9ybUxheWVy
QnVmZmVyKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9oYXNNYXBwZWRUZXh0dXJlcykKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHVzaW5nIEJ1ZmZlciA9IFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyOwotCi0gICAgICAgIGlmICgoR1NUX1ZJREVPX0lORk9f
SVNfUkdCKCZtX3ZpZGVvRnJhbWUuaW5mbykgJiYgR1NUX1ZJREVPX0lORk9fTl9QTEFORVMoJm1f
dmlkZW9GcmFtZS5pbmZvKSA9PSAxKSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEJ1
ZmZlcj4oQnVmZmVyOjpUZXh0dXJlVmFyaWFudCB7IEJ1ZmZlcjo6UkdCVGV4dHVyZSB7ICpzdGF0
aWNfY2FzdDxHTHVpbnQqPihtX3ZpZGVvRnJhbWUuZGF0YVswXSkgfSB9LCBtX3NpemUsIG1fZmxh
Z3MsIEdMX1JHQkEpOwotCi0gICAgICAgIGlmIChHU1RfVklERU9fSU5GT19JU19ZVVYoJm1fdmlk
ZW9GcmFtZS5pbmZvKSkgewotICAgICAgICAgICAgaWYgKEdTVF9WSURFT19JTkZPX05fQ09NUE9O
RU5UUygmbV92aWRlb0ZyYW1lLmluZm8pIDwgMyB8fCBHU1RfVklERU9fSU5GT19OX1BMQU5FUygm
bV92aWRlb0ZyYW1lLmluZm8pID4gMykKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgICAgICAgICAgaWYgKG1fdmlkZW9EZWNvZGVyUGxhdGZvcm0gJiYgKm1fdmlkZW9EZWNv
ZGVyUGxhdGZvcm0gPT0gR3N0VmlkZW9EZWNvZGVyUGxhdGZvcm06OklteFZQVSkgewotICAgICAg
ICAgICAgICAgIC8vIElNWCBWUFUgZGVjb2RlciBkZWNvZGVzIFlVViBkYXRhIG9ubHkgaW50byB0
aGUgWSB0ZXh0dXJlIGZyb20gd2hpY2ggdGhlIHNhbXBsZXIKLSAgICAgICAgICAgICAgICAvLyB0
aGVuIGRpcmVjdGx5IHByb2R1Y2VzIFJHQkEgZGF0YS4gVGV4dHVyZXMgZm9yIG90aGVyIHBsYW5l
cyBhcmVuJ3QgdXNlZCwgYnV0Ci0gICAgICAgICAgICAgICAgLy8gdGhhdCdzIGRlY29kZXIncyBw
cm9ibGVtLiBXZSBoYXZlIHRvIHRyZWF0IHRoYXQgWSB0ZXh0dXJlIGFzIGhhdmluZyBSR0JBIGRh
dGEuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8QnVmZmVyPihCdWZmZXI6OlRl
eHR1cmVWYXJpYW50IHsgQnVmZmVyOjpSR0JUZXh0dXJlIHsgKnN0YXRpY19jYXN0PEdMdWludCo+
KG1fdmlkZW9GcmFtZS5kYXRhWzBdKSB9IH0sIG1fc2l6ZSwgbV9mbGFncywgR0xfUkdCQSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGxhbmVzID0gR1NU
X1ZJREVPX0lORk9fTl9QTEFORVMoJm1fdmlkZW9GcmFtZS5pbmZvKTsKLSAgICAgICAgICAgIHN0
ZDo6YXJyYXk8R0x1aW50LCAzPiBwbGFuZXM7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVuc2ln
bmVkLCAzPiB5dXZQbGFuZTsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dW5zaWduZWQsIDM+IHl1
dlBsYW5lT2Zmc2V0OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJl
ck9mUGxhbmVzOyArK2kpCi0gICAgICAgICAgICAgICAgcGxhbmVzW2ldID0gKnN0YXRpY19jYXN0
PEdMdWludCo+KG1fdmlkZW9GcmFtZS5kYXRhW2ldKTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgICAgICAgICB5dXZQbGFuZVtpXSA9IEdT
VF9WSURFT19JTkZPX0NPTVBfUExBTkUoJm1fdmlkZW9GcmFtZS5pbmZvLCBpKTsKLSAgICAgICAg
ICAgICAgICB5dXZQbGFuZU9mZnNldFtpXSA9IEdTVF9WSURFT19JTkZPX0NPTVBfUE9GRlNFVCgm
bV92aWRlb0ZyYW1lLmluZm8sIGkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGQ6
OmFycmF5PEdMZmxvYXQsIDk+IHl1dlRvUmdiOwotICAgICAgICAgICAgaWYgKGdzdF92aWRlb19j
b2xvcmltZXRyeV9tYXRjaGVzKCZHU1RfVklERU9fSU5GT19DT0xPUklNRVRSWSgmbV92aWRlb0Zy
YW1lLmluZm8pLCBHU1RfVklERU9fQ09MT1JJTUVUUllfQlQ3MDkpKSB7Ci0gICAgICAgICAgICAg
ICAgeXV2VG9SZ2IgPSB7Ci0gICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgIDAuMGYsICAgIDEu
Nzg3ZiwKLSAgICAgICAgICAgICAgICAgICAgMS4xNjRmLCAtMC4yMTNmLCAtMC41MzFmLAotICAg
ICAgICAgICAgICAgICAgICAxLjE2NGYsICAyLjExMmYsICAwLjBmCi0gICAgICAgICAgICAgICAg
fTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBi
dDYwMS4gVGhpcyBpcyB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgR1N0cmVhbWVyJ3MgZ2xjb2xvcmNv
bnZlcnQgZWxlbWVudC4KLSAgICAgICAgICAgICAgICB5dXZUb1JnYiA9IHsKLSAgICAgICAgICAg
ICAgICAgICAgMS4xNjRmLCAgMC4wZiwgICAgMS41OTZmLAotICAgICAgICAgICAgICAgICAgICAx
LjE2NGYsIC0wLjM5MWYsIC0wLjgxM2YsCi0gICAgICAgICAgICAgICAgICAgIDEuMTY0ZiwgIDIu
MDE4ZiwgIDAuMGYKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gbWFrZVVuaXF1ZTxCdWZmZXI+KCBCdWZmZXI6OlRleHR1cmVWYXJpYW50IHsg
QnVmZmVyOjpZVVZUZXh0dXJlIHsgbnVtYmVyT2ZQbGFuZXMsIHBsYW5lcywgeXV2UGxhbmUsIHl1
dlBsYW5lT2Zmc2V0LCB5dXZUb1JnYiB9IH0sIG1fc2l6ZSwgbV9mbGFncywgR0xfUkdCQSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgR3N0QnVmZmVyKiBtX2J1ZmZlcjsKLSAgICBHc3RWaWRlb0ZyYW1lIG1fdmlkZW9GcmFtZSB7
IH07Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgYm9vbCBtX2hhc0FscGhhQ2hhbm5lbDsKLSAg
ICBPcHRpb25hbDxHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybT4gbV92aWRlb0RlY29kZXJQbGF0Zm9y
bTsKLSAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fZmxhZ3MgeyB9OwotICAgIEdMdWludCBt
X3RleHR1cmVJRCB7IDAgfTsKLSAgICBib29sIG1faXNNYXBwZWQgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9oYXNNYXBwZWRUZXh0dXJlcyB7IGZhbHNlIH07Ci19OwotI2VuZGlmCi0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6aW5pdGlhbGl6ZURlYnVnQ2F0ZWdvcnkoKQot
ewotICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcs
ICJ3ZWJraXRtZWRpYXBsYXllciIsIDAsICJXZWJLaXQgbWVkaWEgcGxheWVyIik7Ci19Ci0KLU1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UoTWVkaWFQbGF5ZXIqIHBsYXllcikKLSAgICA6IG1fbm90aWZpZXIoTWFpblRocmVhZE5v
dGlmaWVyPE1haW5UaHJlYWROb3RpZmljYXRpb24+OjpjcmVhdGUoKSkKLSAgICAsIG1fcGxheWVy
KHBsYXllcikKLSAgICAsIG1fZnBzU2luayhudWxscHRyKQotICAgICwgbV9yZWFkeVN0YXRlKE1l
ZGlhUGxheWVyOjpIYXZlTm90aGluZykKLSAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVy
OjpFbXB0eSkKLSAgICAsIG1fZHJhd1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJk1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnQpCi0jaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQotI2lmIFVTRShOSUNPU0lBKQotICAgICwgbV9uaWNvc2lhTGF5ZXIoTmljb3NpYTo6
Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKSkKLSNlbHNlCi0gICAgLCBtX3BsYXRmb3JtTGF5ZXJQ
cm94eShhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSgpKSkKLSNl
bmRpZgotI2VuZGlmCi17Ci19Ci0KLU1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6On5N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKCkKLXsKLSNpZiBVU0UoR1NUUkVBTUVSX0dM
KQotICAgIGlmIChtX3ZpZGVvRGVjb2RlclBsYXRmb3JtID09IEdzdFZpZGVvRGVjb2RlclBsYXRm
b3JtOjpWaWRlbzRMaW51eCkKLSAgICAgICAgZmx1c2hDdXJyZW50QnVmZmVyKCk7Ci0jZW5kaWYK
LSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmIFVTRShOSUNPU0lBKQotICAgIGRvd25jYXN0
PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+
aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7Ci0jZW5kaWYKLQotICAgIG1fbm90aWZpZXItPmlu
dmFsaWRhdGUoKTsKLQotICAgIGlmIChtX3ZpZGVvU2luaykgewotICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV92aWRlb1NpbmsuZ2V0KCksIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwotI2lmIFVTRShHU1RSRUFN
RVJfR0wpCi0gICAgICAgIGlmIChHU1RfSVNfQklOKG1fdmlkZW9TaW5rLmdldCgpKSkgewotICAg
ICAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBhcHBzaW5rID0gYWRvcHRHUmVmKGdzdF9iaW5f
Z2V0X2J5X25hbWUoR1NUX0JJTl9DQVNUKG1fdmlkZW9TaW5rLmdldCgpKSwgIndlYmtpdC1nbC12
aWRlby1zaW5rIikpOwotICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9i
eV9kYXRhKGFwcHNpbmsuZ2V0KCksIHRoaXMpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci0K
LSAgICBpZiAobV92b2x1bWVFbGVtZW50KQotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X21hdGNoZWQobV92b2x1bWVFbGVtZW50LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRB
LCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKLQotICAgIC8vIFRoaXMgd2lsbCByZWxl
YXNlIHRoZSBHU3RyZWFtZXIgdGhyZWFkIGZyb20gbV9kcmF3Q29uZGl0aW9uIGluIG5vbiBBQyBt
b2RlIGluIGNhc2UgdGhlcmUncyBhbiBvbmdvaW5nIHRyaWdnZXJSZXBhaW50IGNhbGwKLSAgICAv
LyB3YWl0aW5nIHRoZXJlLCBhbmQgZW5zdXJlIHRoYXQgYW55IHRyaWdnZXJSZXBhaW50IGNhbGwg
cmVhY2hpbmcgdGhlIGxvY2sgd29uJ3Qgd2FpdCBvbiBtX2RyYXdDb25kaXRpb24uCi0gICAgY2Fu
Y2VsUmVwYWludCh0cnVlKTsKLQotI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0gICAgbV9j
ZG1BdHRhY2htZW50U2VtYXBob3JlLnNpZ25hbCgpOwotI2VuZGlmCi0KLSAgICAvLyBUaGUgY2hh
bmdlIHRvIEdTVF9TVEFURV9OVUxMIHN0YXRlIGlzIGFsd2F5cyBzeW5jaHJvbm91cy4gU28gYWZ0
ZXIgdGhpcyBnZXRzIGV4ZWN1dGVkIHdlIGRvbid0IG5lZWQgdG8gd29ycnkKLSAgICAvLyBhYm91
dCBoYW5kbGVycyBydW5uaW5nIGluIHRoZSBHU3RyZWFtZXIgdGhyZWFkLgotICAgIGlmIChtX3Bp
cGVsaW5lKQotICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwg
R1NUX1NUQVRFX05VTEwpOwotCi0gICAgbV9wbGF5ZXIgPSBudWxscHRyOwotfQotCi12b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNldFBpcGVsaW5lKEdzdEVsZW1lbnQqIHBp
cGVsaW5lKQotewotICAgIG1fcGlwZWxpbmUgPSBwaXBlbGluZTsKLQotICAgIEdSZWZQdHI8R3N0
QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1f
cGlwZWxpbmUuZ2V0KCkpKSk7Ci0gICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQo
KSwgW10oR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsK
LSAgICAgICAgYXV0byYgcGxheWVyID0gKnN0YXRpY19jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UqPih1c2VyRGF0YSk7Ci0KLSAgICAgICAgaWYgKHBsYXllci5oYW5kbGVTeW5j
TWVzc2FnZShtZXNzYWdlKSkgewotICAgICAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2Fn
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gR1NUX0JVU19EUk9QOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcmV0dXJuIEdTVF9CVVNfUEFTUzsKLSAgICB9LCB0aGlzLCBudWxscHRyKTsKLX0KLQotYm9v
bCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVTeW5jTWVzc2FnZShHc3RN
ZXNzYWdlKiBtZXNzYWdlKQotewotICAgIFVOVVNFRF9QQVJBTShtZXNzYWdlKTsKLSAgICBpZiAo
R1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSAhPSBHU1RfTUVTU0FHRV9ORUVEX0NPTlRFWFQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IGdjaGFyKiBjb250ZXh0VHlwZTsKLSAg
ICBnc3RfbWVzc2FnZV9wYXJzZV9jb250ZXh0X3R5cGUobWVzc2FnZSwgJmNvbnRleHRUeXBlKTsK
LSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJIYW5kbGluZyAlcyBuZWVkLWNvbnRl
eHQgbWVzc2FnZSBmb3IgJXMiLCBjb250ZXh0VHlwZSwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVz
c2FnZSkpOwotCi0gICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUsIFdFQktJVF9XRUJfU1JD
X1BMQVlFUl9DT05URVhUX1RZUEVfTkFNRSkpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25ldyhXRUJLSVRfV0VCX1NSQ19QTEFZ
RVJfQ09OVEVYVF9UWVBFX05BTUUsIEZBTFNFKSk7Ci0gICAgICAgIEdzdFN0cnVjdHVyZSogY29u
dGV4dFN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0Lmdl
dCgpKTsKLQotICAgICAgICBBU1NFUlQobV9wbGF5ZXIpOwotICAgICAgICBnc3Rfc3RydWN0dXJl
X3NldChjb250ZXh0U3RydWN0dXJlLCAicGxheWVyIiwgR19UWVBFX1BPSU5URVIsIG1fcGxheWVy
LCBudWxscHRyKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQo
R1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgR1JlZlB0cjxHc3RD
b250ZXh0PiBlbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0R0xDb250ZXh0KGNvbnRl
eHRUeXBlKSk7Ci0gICAgaWYgKGVsZW1lbnRDb250ZXh0KSB7Ci0gICAgICAgIGdzdF9lbGVtZW50
X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyksIGVsZW1lbnRDb250ZXh0Lmdl
dCgpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVJfR0wpCi0KLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgIGlmICghZ19zdHJjbXAw
KGNvbnRleHRUeXBlLCAiZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCIpKSB7Ci0g
ICAgICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAgICAgICAgR1NUX0VSUk9SKCJjYW4n
dCBoYW5kbGUgZHJtLXByZWZlcnJlZC1kZWNyeXB0aW9uLXN5c3RlbS1pZCBuZWVkIGNvbnRleHQg
bWVzc2FnZSBpbiB0aGUgbWFpbiB0aHJlYWQiKTsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgImhhbmRsaW5nIGRybS1wcmVmZXJyZWQtZGVjcnlw
dGlvbi1zeXN0ZW0taWQgbmVlZCBjb250ZXh0IG1lc3NhZ2UiKTsKLQotICAgICAgICBJbml0RGF0
YSBpbml0RGF0YTsKLSAgICAgICAgewotICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrKG1fcHJv
dGVjdGlvbk11dGV4KTsKLSAgICAgICAgICAgIFByb3RlY3Rpb25TeXN0ZW1FdmVudHMgcHJvdGVj
dGlvblN5c3RlbUV2ZW50cyhtZXNzYWdlKTsKLSAgICAgICAgICAgIEdTVF9UUkFDRSgiZm91bmQg
JXp1IHByb3RlY3Rpb24gZXZlbnRzLCAlenUgZGVjcnlwdG9ycyBhdmFpbGFibGUiLCBwcm90ZWN0
aW9uU3lzdGVtRXZlbnRzLmV2ZW50cygpLnNpemUoKSwgcHJvdGVjdGlvblN5c3RlbUV2ZW50cy5h
dmFpbGFibGVTeXN0ZW1zKCkuc2l6ZSgpKTsKLQotICAgICAgICAgICAgZm9yIChhdXRvJiBldmVu
dCA6IHByb3RlY3Rpb25TeXN0ZW1FdmVudHMuZXZlbnRzKCkpIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBldmVudEtleVN5c3RlbUlkID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBH
c3RCdWZmZXIqIGRhdGEgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIGdzdF9ldmVudF9wYXJz
ZV9wcm90ZWN0aW9uKGV2ZW50LmdldCgpLCAmZXZlbnRLZXlTeXN0ZW1JZCwgJmRhdGEsIG51bGxw
dHIpOwotCi0gICAgICAgICAgICAgICAgaW5pdERhdGEuYXBwZW5kKHtldmVudEtleVN5c3RlbUlk
LCBkYXRhfSk7Ci0gICAgICAgICAgICAgICAgbV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy5hZGQo
R1NUX0VWRU5UX1NFUU5VTShldmVudC5nZXQoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKFdURk1vdmUoaW5pdERhdGEp
KTsKLQotICAgICAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIndhaXRpbmcgZm9yIGEg
Q0RNIGluc3RhbmNlIik7Ci0gICAgICAgIGlmIChtX2NkbUF0dGFjaG1lbnRTZW1hcGhvcmUud2Fp
dEZvcig0X3MpCi0gICAgICAgICAgICAmJiBtX25vdGlmaWVyLT5pc1ZhbGlkKCkgLy8gQ2hlY2sg
dGhlIHBsYXllciBpcyBub3QgYmVpbmcgZGVzdHJveWVkLgotICAgICAgICAgICAgJiYgIW1fY2Rt
SW5zdGFuY2UtPmtleVN5c3RlbSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY29uc3QgY2hh
ciogcHJlZmVycmVkS2V5U3lzdGVtVXVpZCA9IEdTdHJlYW1lckVNRVV0aWxpdGllczo6a2V5U3lz
dGVtVG9VdWlkKG1fY2RtSW5zdGFuY2UtPmtleVN5c3RlbSgpKTsKLSAgICAgICAgICAgIEdTVF9J
TkZPX09CSkVDVChwaXBlbGluZSgpLCAid29ya2luZyB3aXRoIGtleSBzeXN0ZW0gJXMsIGNvbnRp
bnVpbmcgd2l0aCBrZXkgc3lzdGVtICVzIG9uICVzIiwgbV9jZG1JbnN0YW5jZS0+a2V5U3lzdGVt
KCkudXRmOCgpLmRhdGEoKSwgcHJlZmVycmVkS2V5U3lzdGVtVXVpZCwgR1NUX01FU1NBR0VfU1JD
X05BTUUobWVzc2FnZSkpOwotCi0gICAgICAgICAgICBHUmVmUHRyPEdzdENvbnRleHQ+IGNvbnRl
eHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0tcHJlZmVycmVkLWRlY3J5cHRpb24t
c3lzdGVtLWlkIiwgRkFMU0UpKTsKLSAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogY29udGV4dFN0
cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShjb250ZXh0LmdldCgpKTsK
LSAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGNvbnRleHRTdHJ1Y3R1cmUsICJkZWNyeXB0
aW9uLXN5c3RlbS1pZCIsIEdfVFlQRV9TVFJJTkcsIHByZWZlcnJlZEtleVN5c3RlbVV1aWQsIG51
bGxwdHIpOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQo
R1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpKSwgY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgR1NUX1dBUk5JTkcoIkNETSBpbnN0YW5jZSBub3QgaW5pdGlhbGl6YWVk
Iik7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShFTkNS
WVBURURfTUVESUEpCi0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBVU0UoR1NUUkVBTUVS
X0dMKQotR3N0Q29udGV4dCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVxdWVz
dEdMQ29udGV4dChjb25zdCBjaGFyKiBjb250ZXh0VHlwZSkKLXsKLSAgICBpZiAoIWVuc3VyZUdz
dEdMQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghZ19zdHJj
bXAwKGNvbnRleHRUeXBlLCBHU1RfR0xfRElTUExBWV9DT05URVhUX1RZUEUpKSB7Ci0gICAgICAg
IEdzdENvbnRleHQqIGRpc3BsYXlDb250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KEdTVF9HTF9ESVNQ
TEFZX0NPTlRFWFRfVFlQRSwgVFJVRSk7Ci0gICAgICAgIGdzdF9jb250ZXh0X3NldF9nbF9kaXNw
bGF5KGRpc3BsYXlDb250ZXh0LCBnc3RHTERpc3BsYXkoKSk7Ci0gICAgICAgIHJldHVybiBkaXNw
bGF5Q29udGV4dDsKLSAgICB9Ci0KLSAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImdz
dC5nbC5hcHBfY29udGV4dCIpKSB7Ci0gICAgICAgIEdzdENvbnRleHQqIGFwcENvbnRleHQgPSBn
c3RfY29udGV4dF9uZXcoImdzdC5nbC5hcHBfY29udGV4dCIsIFRSVUUpOwotICAgICAgICBHc3RT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jb250ZXh0X3dyaXRhYmxlX3N0cnVjdHVyZShhcHBD
b250ZXh0KTsKLSNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCAxMiwgMCkKLSAgICAgICAgZ3N0X3N0
cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4dCIsIEdTVF9UWVBFX0dMX0NPTlRFWFQsIGdz
dEdMQ29udGV4dCgpLCBudWxscHRyKTsKLSNlbHNlCi0gICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfR0xfVFlQRV9DT05URVhULCBnc3RHTENvbnRleHQo
KSwgbnVsbHB0cik7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIGFwcENvbnRleHQ7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6ZW5zdXJlR3N0R0xDb250ZXh0KCkKLXsKLSAgICBpZiAobV9nbENvbnRleHQpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byYgc2hhcmVkRGlzcGxheSA9IFBsYXRmb3Jt
RGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCk7Ci0KLSAgICAvLyBUaGUgZmxv
YXRpbmcgcmVmIHJlbW92YWwgc3VwcG9ydCB3YXMgYWRkZWQgaW4gaHR0cHM6Ly9idWd6aWxsYS5n
bm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzA2Mi4KLSAgICBib29sIHNob3VsZEFkb3B0UmVm
ID0gd2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE0LCAwKTsKLSAgICBpZiAoIW1fZ2xEaXNwbGF5
KSB7Ci0jaWYgUExBVEZPUk0oWDExKQotI2lmIFVTRShHTFgpCi0gICAgICAgIGlmIChpczxQbGF0
Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBYMTEgc2hhcmVkIEdMIGRpc3BsYXkiKTsKLSAg
ICAgICAgICAgIGlmIChzaG91bGRBZG9wdFJlZikKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxh
eSA9IGFkb3B0R1JlZihHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhf
ZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLm5hdGl2
ZSgpKSkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0g
R1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rpc3BsYXkoZG93bmNh
c3Q8UGxhdGZvcm1EaXNwbGF5WDExPihzaGFyZWREaXNwbGF5KS5uYXRpdmUoKSkpOwotICAgICAg
ICB9Ci0jZWxpZiBVU0UoRUdMKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5WDExPihz
aGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiQ3JlYXRpbmcgWDExIHNoYXJlZCBFR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNo
b3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdT
VF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3du
Y2FzdDxQbGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9E
SVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQ
bGF0Zm9ybURpc3BsYXlYMTE+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOwotICAgICAg
ICB9Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0FZTEFORCkKLSAgICAgICAgaWYg
KGlzPFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+KHNoYXJlZERpc3BsYXkpKSB7Ci0gICAgICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJDcmVhdGluZyBXYXlsYW5kIHNoYXJlZCBk
aXNwbGF5Iik7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkQWRvcHRSZWYpCi0gICAgICAgICAgICAg
ICAgbV9nbERpc3BsYXkgPSBhZG9wdEdSZWYoR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlf
ZWdsX25ld193aXRoX2VnbF9kaXNwbGF5KGRvd25jYXN0PFBsYXRmb3JtRGlzcGxheVdheWxhbmQ+
KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2Vn
bF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2FzdDxQbGF0Zm9ybURpc3BsYXlXYXlsYW5kPihz
aGFyZWREaXNwbGF5KS5lZ2xEaXNwbGF5KCkpKTsKLSAgICAgICAgfQotI2VuZGlmCi0KLSNpZiBV
U0UoV1BFX1JFTkRFUkVSKQotICAgICAgICBpZiAoaXM8UGxhdGZvcm1EaXNwbGF5TGliV1BFPihz
aGFyZWREaXNwbGF5KSkgewotICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiQ3JlYXRpbmcgV1BFIHNoYXJlZCBFR0wgZGlzcGxheSIpOwotICAgICAgICAgICAgaWYgKHNo
b3VsZEFkb3B0UmVmKQotICAgICAgICAgICAgICAgIG1fZ2xEaXNwbGF5ID0gYWRvcHRHUmVmKEdT
VF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3du
Y2FzdDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9H
TF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShkb3duY2Fz
dDxQbGF0Zm9ybURpc3BsYXlMaWJXUEU+KHNoYXJlZERpc3BsYXkpLmVnbERpc3BsYXkoKSkpOwot
ICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBBU1NFUlQobV9nbERpc3BsYXkpOwotICAgIH0K
LQotICAgIEdMQ29udGV4dCogd2Via2l0Q29udGV4dCA9IHNoYXJlZERpc3BsYXkuc2hhcmluZ0dM
Q29udGV4dCgpOwotICAgIC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIG5v
IG5lZWQgZm9yIGlmZGVmcyBoZXJlLgotICAgIEdzdEdMUGxhdGZvcm0gZ2xQbGF0Zm9ybSA9IHdl
YmtpdENvbnRleHQtPmlzRUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRGT1JNX0VHTCA6IEdTVF9H
TF9QTEFURk9STV9HTFg7Ci0KLSNpZiBVU0UoT1BFTkdMX0VTKQotICAgIEdzdEdMQVBJIGdsQVBJ
ID0gR1NUX0dMX0FQSV9HTEVTMjsKLSNlbGlmIFVTRShPUEVOR0wpCi0gICAgR3N0R0xBUEkgZ2xB
UEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0jZW5kaWYKLQotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgY29udGV4dEhhbmRsZSA9
IHdlYmtpdENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dEhhbmRs
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHNob3VsZEFkb3B0UmVmKQotICAg
ICAgICBtX2dsQ29udGV4dCA9IGFkb3B0R1JlZihnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZCht
X2dsRGlzcGxheS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRs
ZSksIGdsUGxhdGZvcm0sIGdsQVBJKSk7Ci0gICAgZWxzZQotICAgICAgICBtX2dsQ29udGV4dCA9
IGdzdF9nbF9jb250ZXh0X25ld193cmFwcGVkKG1fZ2xEaXNwbGF5LmdldCgpLCByZWludGVycHJl
dF9jYXN0PGd1aW50cHRyPihjb250ZXh0SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpOwotCi0g
ICAgLy8gQWN0aXZhdGUgYW5kIGZpbGwgdGhlIEdTdHJlYW1lciB3cmFwcGVkIGNvbnRleHQgd2l0
aCB0aGUgV2Via2l0J3Mgc2hhcmVkIG9uZS4KLSAgICBhdXRvIHByZXZpb3VzQWN0aXZlQ29udGV4
dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIHdlYmtpdENvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIGlmIChnc3RfZ2xfY29udGV4dF9hY3RpdmF0ZShtX2dsQ29udGV4dC5n
ZXQoKSwgVFJVRSkpIHsKLSAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAg
ICAgICBpZiAoIWdzdF9nbF9jb250ZXh0X2ZpbGxfaW5mbyhtX2dsQ29udGV4dC5nZXQoKSwgJmVy
cm9yLm91dFB0cigpKSkKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gZmlsbCBp
biBHU3RyZWFtZXIgY29udGV4dDogJXMiLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIGdzdF9n
bF9jb250ZXh0X2FjdGl2YXRlKG1fZ2xDb250ZXh0LmdldCgpLCBGQUxTRSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gYWN0aXZhdGUgR1N0cmVhbWVyIGNvbnRl
eHQgJSIgR1NUX1BUUl9GT1JNQVQsIG1fZ2xDb250ZXh0LmdldCgpKTsKLSAgICBpZiAocHJldmlv
dXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUl9HTCkKLQotLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8KLUZsb2F0U2l6ZSBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0Ci17Ci0j
aWYgVVNFKEdTVFJFQU1FUl9IT0xFUFVOQ0gpCi0gICAgLy8gV2hlbiB1c2luZyB0aGUgaG9sZXB1
Y2ggd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGdldCB0aGUgdmlkZW8gZnJhbWVzIHNpemUsIHNvIHdl
IGNhbid0IHVzZQotICAgIC8vIGl0LiBCdXQgd2UgbmVlZCB0byByZXBvcnQgc29tZSBub24gZW1w
dHkgbmF0dXJhbFNpemUgZm9yIHRoZSBwbGF5ZXIncyBHcmFwaGljc0xheWVyCi0gICAgLy8gdG8g
YmUgcHJvcGVybHkgY3JlYXRlZC4KLSAgICByZXR1cm4gc19ob2xlUHVuY2hEZWZhdWx0RnJhbWVT
aXplOwotI2VuZGlmCi0KLSAgICBpZiAoIWhhc1ZpZGVvKCkpCi0gICAgICAgIHJldHVybiBGbG9h
dFNpemUoKTsKLQotICAgIGlmICghbV92aWRlb1NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbV92aWRlb1NpemU7Ci0KLSAgICBhdXRvIHNhbXBsZUxvY2tlciA9IGhvbGRMb2NrKG1fc2Ft
cGxlTXV0ZXgpOwotICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCi0gICAg
ICAgIHJldHVybiBGbG9hdFNpemUoKTsKLQotICAgIEdzdENhcHMqIGNhcHMgPSBnc3Rfc2FtcGxl
X2dldF9jYXBzKG1fc2FtcGxlLmdldCgpKTsKLSAgICBpZiAoIWNhcHMpCi0gICAgICAgIHJldHVy
biBGbG9hdFNpemUoKTsKLQotCi0gICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIGNsZWFuIGFw
ZXJ0dXJlIGRhdGEuIFNlZQotICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3df
YnVnLmNnaT9pZD01OTY1NzEKLSAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUgdHJhbnNmb3Jt
YXRpb24gbWF0cml4LiBTZWUKLSAgICAvLyBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTk2MzI2Ci0KLSAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3JpZ2lu
YWwgc2l6ZSwgaWYgdGhpcyBmYWlscyB0aGUKLSAgICAvLyB2aWRlby1zaW5rIGhhcyBsaWtlbHkg
bm90IHlldCBuZWdvdGlhdGVkIGl0cyBjYXBzLgotICAgIGludCBwaXhlbEFzcGVjdFJhdGlvTnVt
ZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0cmlkZTsKLSAgICBJbnRTaXpl
IG9yaWdpbmFsU2l6ZTsKLSAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYgKCFnZXRW
aWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhjYXBzLCBvcmlnaW5hbFNpemUsIGZvcm1hdCwgcGl4
ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJp
ZGUpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQ
RVJfR0wpCi0gICAgLy8gV2hlbiB1c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgaWYgdGhl
IHZpZGVvIGlzIHRhZ2dlZCBhcyByb3RhdGVkIDkwIG9yIDI3MCBkZWdyZWVzLCBzd2FwIHdpZHRo
IGFuZCBoZWlnaHQuCi0gICAgaWYgKG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkgewotICAg
ICAgICBpZiAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpCi0g
ICAgICAgICAgICBvcmlnaW5hbFNpemUgPSBvcmlnaW5hbFNpemUudHJhbnNwb3NlZFNpemUoKTsK
LSAgICB9Ci0jZW5kaWYKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIk9yaWdp
bmFsIHZpZGVvIHNpemU6ICVkeCVkIiwgb3JpZ2luYWxTaXplLndpZHRoKCksIG9yaWdpbmFsU2l6
ZS5oZWlnaHQoKSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiUGl4ZWwgYXNw
ZWN0IHJhdGlvOiAlZC8lZCIsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0
UmF0aW9EZW5vbWluYXRvcik7Ci0KLSAgICAvLyBDYWxjdWxhdGUgREFSIGJhc2VkIG9uIFBBUiBh
bmQgdmlkZW8gc2l6ZS4KLSAgICBpbnQgZGlzcGxheVdpZHRoID0gb3JpZ2luYWxTaXplLndpZHRo
KCkgKiBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yOwotICAgIGludCBkaXNwbGF5SGVpZ2h0ID0g
b3JpZ2luYWxTaXplLmhlaWdodCgpICogcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yOwotCi0g
ICAgLy8gRGl2aWRlIGRpc3BsYXkgd2lkdGggYW5kIGhlaWdodCBieSB0aGVpciBHQ0QgdG8gYXZv
aWQgcG9zc2libGUgb3ZlcmZsb3dzLgotICAgIGludCBkaXNwbGF5QXNwZWN0UmF0aW9HQ0QgPSBn
cmVhdGVzdENvbW1vbkRpdmlzb3IoZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICBk
aXNwbGF5V2lkdGggLz0gZGlzcGxheUFzcGVjdFJhdGlvR0NEOwotICAgIGRpc3BsYXlIZWlnaHQg
Lz0gZGlzcGxheUFzcGVjdFJhdGlvR0NEOwotCi0gICAgLy8gQXBwbHkgREFSIHRvIG9yaWdpbmFs
IHZpZGVvIHNpemUuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaW4geHZpbWFnZXNpbmsn
cyBzZXRjYXBzIGZ1bmN0aW9uLgotICAgIGd1aW50NjQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwot
ICAgIGlmICghKG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAlIGRpc3BsYXlIZWlnaHQpKSB7Ci0gICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIktlZXBpbmcgdmlkZW8gb3JpZ2luYWwg
aGVpZ2h0Iik7Ci0gICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmln
aW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7Ci0gICAgICAg
IGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgfSBlbHNlIGlmICghKG9yaWdpbmFsU2l6ZS53aWR0aCgpICUgZGlzcGxheVdpZHRoKSkgewot
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJLZWVwaW5nIHZpZGVvIG9yaWdp
bmFsIHdpZHRoIik7Ci0gICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQo
b3JpZ2luYWxTaXplLndpZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0aCk7Ci0gICAg
ICAgIHdpZHRoID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLndpZHRoKCkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIkFwcHJv
eGltYXRpbmcgd2hpbGUga2VlcGluZyBvcmlnaW5hbCB2aWRlbyBoZWlnaHQiKTsKLSAgICAgICAg
d2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwg
ZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nh
c3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJOYXR1cmFsIHNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQg
InglIiBHX0dVSU5UNjRfRk9STUFULCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBtX3ZpZGVvU2l6ZSA9
IEZsb2F0U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihoZWln
aHQpKTsKLSAgICByZXR1cm4gbV92aWRlb1NpemU7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkKLXsKLSAgICBpZiAoIW1f
dm9sdW1lRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR1NUX0RFQlVHX09CSkVDVChw
aXBlbGluZSgpLCAiU2V0dGluZyB2b2x1bWU6ICVmIiwgdm9sdW1lKTsKLSAgICBnc3Rfc3RyZWFt
X3ZvbHVtZV9zZXRfdm9sdW1lKG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgR1NUX1NUUkVBTV9WT0xV
TUVfRk9STUFUX0xJTkVBUiwgc3RhdGljX2Nhc3Q8ZG91YmxlPih2b2x1bWUpKTsKLX0KLQotZmxv
YXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dm9sdW1lKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fdm9sdW1lRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4g
Z3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZShtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksIEdTVF9T
VFJFQU1fVk9MVU1FX0ZPUk1BVF9MSU5FQVIpOwotfQotCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKQotewotICAgIGlm
ICghbV9wbGF5ZXIgfHwgIW1fdm9sdW1lRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRv
dWJsZSB2b2x1bWU7Ci0gICAgdm9sdW1lID0gZ3N0X3N0cmVhbV92b2x1bWVfZ2V0X3ZvbHVtZSht
X3ZvbHVtZUVsZW1lbnQuZ2V0KCksIEdTVF9TVFJFQU1fVk9MVU1FX0ZPUk1BVF9MSU5FQVIpOwot
ICAgIC8vIGdldF92b2x1bWUoKSBjYW4gcmV0dXJuIHZhbHVlcyBzdXBlcmlvciB0byAxLjAgaWYg
dGhlIHVzZXIKLSAgICAvLyBhcHBsaWVzIHNvZnR3YXJlIHVzZXIgZ2FpbiB2aWEgdGhpcmQgcGFy
dHkgYXBwbGljYXRpb24gKEdOT01FCi0gICAgLy8gdm9sdW1lIGNvbnRyb2wgZm9yIGluc3RhbmNl
KS4KLSAgICB2b2x1bWUgPSBDTEFNUCh2b2x1bWUsIDAuMCwgMS4wKTsKLSAgICBtX3BsYXllci0+
dm9sdW1lQ2hhbmdlZChzdGF0aWNfY2FzdDxmbG9hdD4odm9sdW1lKSk7Ci19Ci0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dm9sdW1lQ2hhbmdlZENhbGxiYWNrKE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqIHBsYXllcikKLXsKLSAgICAvLyBUaGlzIGlzIGNh
bGxlZCB3aGVuIG1fdm9sdW1lRWxlbWVudCByZWNlaXZlcyB0aGUgbm90aWZ5Ojp2b2x1bWUgc2ln
bmFsLgotICAgIEdTVF9ERUJVR19PQkpFQ1QocGxheWVyLT5waXBlbGluZSgpLCAiVm9sdW1lIGNo
YW5nZWQgdG86ICVmIiwgcGxheWVyLT52b2x1bWUoKSk7Ci0KLSAgICBwbGF5ZXItPm1fbm90aWZp
ZXItPm5vdGlmeShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpWb2x1bWVDaGFuZ2VkLCBbcGxheWVy
XSB7Ci0gICAgICAgIHBsYXllci0+bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKLSAgICB9
KTsKLX0KLQotTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjpuZXR3b3JrU3RhdGUoKSBjb25zdAotewotICAgIHJldHVybiBtX25ldHdvcmtT
dGF0ZTsKLX0KLQotTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6cmVhZHlTdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVhZHlTdGF0
ZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzaXplQ2hhbmdl
ZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlOjpzZXRNdXRlZChib29sIG11dGUpCi17Ci0gICAgaWYgKCFtX3ZvbHVt
ZUVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJvb2wgY3VycmVudFZhbHVlID0gbXV0
ZWQoKTsKLSAgICBpZiAoY3VycmVudFZhbHVlID09IG11dGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGluZSgpLCAiU2V0IG11dGVkIHRvICVzIiwgdG9TdHJp
bmcobXV0ZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgZ19vYmplY3Rfc2V0KG1fdm9sdW1lRWxlbWVu
dC5nZXQoKSwgIm11dGUiLCBtdXRlLCBudWxscHRyKTsKLX0KLQotYm9vbCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjptdXRlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZvbHVtZUVs
ZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGdib29sZWFuIG11dGVkOwotICAg
IGdfb2JqZWN0X2dldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgJm11dGVkLCBudWxs
cHRyKTsKLSAgICBHU1RfSU5GT19PQkpFQ1QocGlwZWxpbmUoKSwgIlBsYXllciBpcyBtdXRlZDog
JXMiLCB0b1N0cmluZyhzdGF0aWNfY2FzdDxib29sPihtdXRlZCkpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIHJldHVybiBtdXRlZDsKLX0KLQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJC
YXNlOjpub3RpZnlQbGF5ZXJPZk11dGUoKQotewotICAgIGlmICghbV9wbGF5ZXIgfHwgIW1fdm9s
dW1lRWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2Jvb2xlYW4gbXV0ZWQ7Ci0gICAg
Z19vYmplY3RfZ2V0KG1fdm9sdW1lRWxlbWVudC5nZXQoKSwgIm11dGUiLCAmbXV0ZWQsIG51bGxw
dHIpOwotICAgIG1fcGxheWVyLT5tdXRlQ2hhbmdlZChzdGF0aWNfY2FzdDxib29sPihtdXRlZCkp
OwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om11dGVDaGFuZ2Vk
Q2FsbGJhY2soTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyKQotewotICAg
IC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbV92b2x1bWVFbGVtZW50IHJlY2VpdmVzIHRoZSBub3Rp
Znk6Om11dGUgc2lnbmFsLgotICAgIHBsYXllci0+bV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJl
YWROb3RpZmljYXRpb246Ok11dGVDaGFuZ2VkLCBbcGxheWVyXSB7Ci0gICAgICAgIHBsYXllci0+
bm90aWZ5UGxheWVyT2ZNdXRlKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6YWNjZWxlcmF0ZWRSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKQotewot
ICAgIG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCA9IG1fcGxheWVyICYmIG1fcGxheWVyLT5j
bGllbnQoKS5tZWRpYVBsYXllckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCk7Ci19Ci0K
LSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi1QbGF0Zm9ybUxheWVyKiBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBVU0UoTklD
T1NJQSkKLSAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIucHRyKCk7Ci0jZWxzZQotICAgIHJldHVy
biBjb25zdF9jYXN0PE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqPih0aGlzKTsKLSNl
bmRpZgotfQotCi0jaWYgVVNFKE5JQ09TSUEpCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotI2lmIFVTRShHU1RSRUFNRVJfSE9M
RVBVTkNIKQotICAgIHB1c2hOZXh0SG9sZVB1bmNoQnVmZmVyKCk7Ci0jZW5kaWYKLX0KLSNlbHNl
Ci1SZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6cHJveHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3Jt
TGF5ZXJQcm94eS5jb3B5UmVmKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0jaWYgVVNFKEdTVFJFQU1FUl9IT0xF
UFVOQ0gpCi0gICAgcHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsKLSNlbmRpZgotfQotI2VuZGlm
Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cHVzaFRleHR1cmVUb0Nv
bXBvc2l0b3IoKQotewotICAgIGF1dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVN
dXRleCk7Ci0gICAgaWYgKCFHU1RfSVNfU0FNUExFKG1fc2FtcGxlLmdldCgpKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byBwcm94eU9wZXJhdGlvbiA9Ci0gICAgICAgIFt0aGlzXShUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKLSAgICAgICAgewotICAgICAgICAg
ICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKLQotICAgICAgICAgICAgaWYgKCFw
cm94eS5pc0FjdGl2ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVIb2xkZXI+IGZyYW1lSG9sZGVyID0gbWFrZVVu
aXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPihtX3NhbXBsZS5nZXQoKSwgbV92aWRlb0RlY29kZXJQ
bGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3MsICFtX3VzaW5nRmFsbGJhY2tWaWRlb1Npbmsp
OwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJCdWZmZXI+IGxheWVyQnVmZmVyOwotICAgICAgICAgICAgaWYgKGZyYW1lSG9sZGVyLT5oYXNN
YXBwZWRUZXh0dXJlcygpKSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXJCdWZmZXIgPSBmcmFtZUhv
bGRlci0+cGxhdGZvcm1MYXllckJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGlmICghbGF5ZXJC
dWZmZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBsYXll
ckJ1ZmZlci0+c2V0VW5tYW5hZ2VkQnVmZmVyRGF0YUhvbGRlcihXVEZNb3ZlKGZyYW1lSG9sZGVy
KSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGxheWVyQnVmZmVyID0g
cHJveHkuZ2V0QXZhaWxhYmxlQnVmZmVyKGZyYW1lSG9sZGVyLT5zaXplKCksIEdMX0RPTlRfQ0FS
RSk7Ci0gICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFsYXllckJ1ZmZlcikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byB0ZXh0dXJlID0gQml0bWFwVGV4dHVyZUdMOjpjcmVhdGUoVGV4
dHVyZU1hcHBlckNvbnRleHRBdHRyaWJ1dGVzOjpnZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnJlc2V0KGZyYW1lSG9sZGVyLT5zaXplKCksIGZyYW1lSG9sZGVyLT5oYXNBbHBo
YUNoYW5uZWwoKSA/IEJpdG1hcFRleHR1cmU6OlN1cHBvcnRzQWxwaGEgOiBCaXRtYXBUZXh0dXJl
OjpOb0ZsYWcpOwotICAgICAgICAgICAgICAgICAgICBsYXllckJ1ZmZlciA9IG1ha2VVbmlxdWU8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KFdURk1vdmUodGV4dHVyZSkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmFtZUhvbGRlci0+dXBkYXRlVGV4dHVy
ZShsYXllckJ1ZmZlci0+dGV4dHVyZUdMKCkpOwotICAgICAgICAgICAgICAgIGxheWVyQnVmZmVy
LT5zZXRFeHRyYUZsYWdzKG1fdGV4dHVyZU1hcHBlckZsYWdzIHwgKGZyYW1lSG9sZGVyLT5oYXNB
bHBoYUNoYW5uZWwoKSA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVy
QnVmZmVyKSk7Ci0gICAgICAgIH07Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAgICBwcm94eU9wZXJh
dGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9u
aWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQotICAgIHByb3h5T3BlcmF0aW9u
KCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvLyBVU0UoVEVYVFVS
RV9NQVBQRVJfR0wpCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6cmVw
YWludCgpCi17Ci0gICAgQVNTRVJUKG1fc2FtcGxlKTsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotCi0gICAgbV9wbGF5ZXItPnJlcGFpbnQoKTsKLQotICAgIExvY2tIb2xkZXIgbG9jayht
X2RyYXdNdXRleCk7Ci0gICAgbV9kcmF3Q29uZGl0aW9uLm5vdGlmeU9uZSgpOwotfQotCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnRyaWdnZXJSZXBhaW50KEdzdFNhbXBs
ZSogc2FtcGxlKQotewotICAgIGJvb2wgdHJpZ2dlclJlc2l6ZTsKLSAgICB7Ci0gICAgICAgIGF1
dG8gc2FtcGxlTG9ja2VyID0gaG9sZExvY2sobV9zYW1wbGVNdXRleCk7Ci0gICAgICAgIHRyaWdn
ZXJSZXNpemUgPSAhbV9zYW1wbGU7Ci0gICAgICAgIG1fc2FtcGxlID0gc2FtcGxlOwotICAgIH0K
LQotICAgIGlmICh0cmlnZ2VyUmVzaXplKSB7Ci0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIkZpcnN0IHNhbXBsZSByZWFjaGVkIHRoZSBzaW5rLCB0cmlnZ2VyaW5nIHZpZGVv
IGRpbWVuc2lvbnMgdXBkYXRlIik7Ci0gICAgICAgIG1fbm90aWZpZXItPm5vdGlmeShNYWluVGhy
ZWFkTm90aWZpY2F0aW9uOjpTaXplQ2hhbmdlZCwgW3RoaXNdIHsKLSAgICAgICAgICAgIG1fcGxh
eWVyLT5zaXplQ2hhbmdlZCgpOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVu
ZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCkgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2Ry
YXdNdXRleCk7Ci0gICAgICAgIGlmIChtX2Rlc3Ryb3lpbmcpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIG1fZHJhd1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotICAgICAgICBtX2RyYXdD
b25kaXRpb24ud2FpdChtX2RyYXdNdXRleCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgaWYgKG1fdXNpbmdGYWxsYmFja1ZpZGVvU2lu
aykgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9kcmF3TXV0ZXgpOwotICAgICAgICBhdXRv
IHByb3h5T3BlcmF0aW9uID0KLSAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5JiBwcm94eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gcHJveHkuc2NoZWR1bGVVcGRhdGVPbkNvbXBvc2l0b3JUaHJlYWQoW3RoaXNdIHsgdGhpcy0+
cHVzaFRleHR1cmVUb0NvbXBvc2l0b3IoKTsgfSk7Ci0gICAgICAgICAgICB9OwotI2lmIFVTRShO
SUNPU0lBKQotICAgICAgICBpZiAoIXByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94
eSgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgICAgIGlmICghcHJveHlPcGVy
YXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KSkKLSAgICAgICAgICAgIHJldHVybjsKLSNlbmRp
ZgotICAgICAgICBtX2RyYXdUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLSAgICAgICAgbV9kcmF3
Q29uZGl0aW9uLndhaXQobV9kcmF3TXV0ZXgpOwotICAgIH0gZWxzZQotICAgICAgICBwdXNoVGV4
dHVyZVRvQ29tcG9zaXRvcigpOwotI2VuZGlmIC8vIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLX0K
LQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpyZXBhaW50Q2FsbGJhY2so
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSogcGxheWVyLCBHc3RTYW1wbGUqIHNhbXBs
ZSkKLXsKLSAgICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZSk7Ci19Ci0KLXZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y2FuY2VsUmVwYWludChib29sIGRlc3Ryb3lp
bmcpCi17Ci0gICAgLy8gVGhlIGdvYWwgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byByZWxlYXNlIHRo
ZSBHU3RyZWFtZXIgdGhyZWFkIGZyb20gbV9kcmF3Q29uZGl0aW9uIGluIHRyaWdnZXJSZXBhaW50
KCkgaW4gbm9uLUFDIGNhc2UsCi0gICAgLy8gdG8gYXZvaWQgYSBkZWFkbG9jayBpZiB0aGUgcGxh
eWVyIGdldHMgcGF1c2VkIHdoaWxlIHdhaXRpbmcgZm9yIGRyYXdpbmcgKHNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwMDAzKToKLSAgICAvLyB0aGUgbWFpbiB0
aHJlYWQgaXMgd2FpdGluZyBmb3IgdGhlIEdTdHJlYW1lciB0aHJlYWQgdG8gcGF1c2UsIGJ1dCB0
aGUgR1N0cmVhbWVyIHRocmVhZCBpcyBsb2NrZWQgd2FpdGluZyBmb3IgdGhlCi0gICAgLy8gbWFp
biB0aHJlYWQgdG8gZHJhdy4gVGhpcyBkZWFkbG9jayBkb2Vzbid0IGhhcHBlbiB3aGVuIHVzaW5n
IEFDIGJlY2F1c2UgdGhlIHNhbXBsZSBpcyBwcm9jZXNzZWQgKG5vdCBwYWludGVkKSBpbiB0aGUg
Y29tcG9zaXRvcgotICAgIC8vIHRocmVhZCwgc28gdGhlIG1haW4gdGhyZWFkIGNhbiByZXF1ZXN0
IHRoZSBwYXVzZSBhbmQgd2FpdCBpZiB0aGUgR1N0cmVhbWVyIHRocmVhZCBpcyB3YWl0aW5nIGZv
ciB0aGUgY29tcG9zaXRvciB0aHJlYWQuCi0gICAgLy8KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlz
IGFsc28gdXNlZCB3aGVuIGRlc3Ryb3lpbmcgdGhlIHBsYXllciAoZGVzdHJveWluZyBwYXJhbWV0
ZXIgaXMgdHJ1ZSksIHRvIHJlbGVhc2UgdGhlIGdzdHJlYW1lciB0aHJlYWQgZnJvbQotICAgIC8v
IG1fZHJhd0NvbmRpdGlvbiBhbmQgdG8gZW5zdXJlIHRoYXQgbmV3IHRyaWdnZXJSZXBhaW50IGNh
bGxzIHdvbid0IHdhaXQgb24gbV9kcmF3Q29uZGl0aW9uLgotICAgIGlmICghbV9yZW5kZXJpbmdD
YW5CZUFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZHJhd011dGV4
KTsKLSAgICAgICAgbV9kcmF3VGltZXIuc3RvcCgpOwotICAgICAgICBtX2Rlc3Ryb3lpbmcgPSBk
ZXN0cm95aW5nOwotICAgICAgICBtX2RyYXdDb25kaXRpb24ubm90aWZ5T25lKCk7Ci0gICAgfQot
fQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlcGFpbnRDYW5jZWxs
ZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKiBwbGF5ZXIpCi17Ci0g
ICAgcGxheWVyLT5jYW5jZWxSZXBhaW50KCk7Ci19Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQot
R3N0Rmxvd1JldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuZXdTYW1wbGVD
YWxsYmFjayhHc3RFbGVtZW50KiBzaW5rLCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNl
KiBwbGF5ZXIpCi17Ci0gICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihn
c3RfYXBwX3NpbmtfcHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5LKHNpbmspKSk7Ci0gICAgcGxheWVy
LT50cmlnZ2VyUmVwYWludChzYW1wbGUuZ2V0KCkpOwotICAgIHJldHVybiBHU1RfRkxPV19PSzsK
LX0KLQotR3N0Rmxvd1JldHVybiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuZXdQ
cmVyb2xsQ2FsbGJhY2soR3N0RWxlbWVudCogc2luaywgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZSogcGxheWVyKQotewotICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9w
dEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1RfQVBQX1NJTksoc2luaykpKTsKLSAg
ICBwbGF5ZXItPnRyaWdnZXJSZXBhaW50KHNhbXBsZS5nZXQoKSk7Ci0gICAgcmV0dXJuIEdTVF9G
TE9XX09LOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmZsdXNo
Q3VycmVudEJ1ZmZlcigpCi17Ci0gICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3Nh
bXBsZU11dGV4KTsKLQotICAgIGlmIChtX3NhbXBsZSkgewotICAgICAgICAvLyBSZXBsYWNlIGJ5
IGEgbmV3IHNhbXBsZSBoYXZpbmcgb25seSB0aGUgY2Fwcywgc28gdGhpcyBkdW1teSBzYW1wbGUg
aXMgc3RpbGwgdXNlZnVsIHRvIGdldCB0aGUgZGltZW5zaW9ucy4KLSAgICAgICAgLy8gVGhpcyBw
cmV2ZW50cyByZXNpemluZyBwcm9ibGVtcyB3aGVuIHRoZSB2aWRlbyBjaGFuZ2VzIGl0cyBxdWFs
aXR5IGFuZCBhIERSQUlOIGlzIHBlcmZvcm1lZC4KLSAgICAgICAgY29uc3QgR3N0U3RydWN0dXJl
KiBpbmZvID0gZ3N0X3NhbXBsZV9nZXRfaW5mbyhtX3NhbXBsZS5nZXQoKSk7Ci0gICAgICAgIG1f
c2FtcGxlID0gYWRvcHRHUmVmKGdzdF9zYW1wbGVfbmV3KG51bGxwdHIsIGdzdF9zYW1wbGVfZ2V0
X2NhcHMobV9zYW1wbGUuZ2V0KCkpLAotICAgICAgICAgICAgZ3N0X3NhbXBsZV9nZXRfc2VnbWVu
dChtX3NhbXBsZS5nZXQoKSksIGluZm8gPyBnc3Rfc3RydWN0dXJlX2NvcHkoaW5mbykgOiBudWxs
cHRyKSk7Ci0gICAgfQotCi0gICAgYm9vbCBzaG91bGRXYWl0ID0gbV92aWRlb0RlY29kZXJQbGF0
Zm9ybSA9PSBHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybTo6VmlkZW80TGludXg7Ci0gICAgYXV0byBw
cm94eU9wZXJhdGlvbiA9IFtzaG91bGRXYWl0LCBwaXBlbGluZSA9IHBpcGVsaW5lKCldKFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KSB7Ci0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1QocGlwZWxpbmUsICJGbHVzaGluZyB2aWRlbyBzYW1wbGUgJXMiLCBzaG91bGRXYWl0ID8g
InN5bmNocm9ub3VzbHkiIDogIiIpOwotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcighc2hvdWxk
V2FpdCA/ICZwcm94eS5sb2NrKCkgOiBudWxscHRyKTsKLQotICAgICAgICBpZiAocHJveHkuaXNB
Y3RpdmUoKSkKLSAgICAgICAgICAgIHByb3h5LmRyb3BDdXJyZW50QnVmZmVyV2hpbGVQcmVzZXJ2
aW5nVGV4dHVyZShzaG91bGRXYWl0KTsKLSAgICB9OwotCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAg
cHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICBwcm94
eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRTaXplKGNvbnN0IEludFNp
emUmIHNpemUpCi17Ci0gICAgbV9zaXplID0gc2l6ZTsKLX0KLQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9wbGF5ZXItPnZpc2libGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11
dGV4KTsKLSAgICBpZiAoIUdTVF9JU19TQU1QTEUobV9zYW1wbGUuZ2V0KCkpKQotICAgICAgICBy
ZXR1cm47Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIC8vIEVuc3VyZSB0aGUgaW5wdXQg
aXMgUkdCQS4gV2UgaGFuZGxlIFlVViB2aWRlbyBuYXRpdmVseSwgc28gd2UgbmVlZCB0byBkbwot
ICAgIC8vIHRoaXMgY29udmVyc2lvbiBvbi1kZW1hbmQgaGVyZS4KLSAgICBHc3RCdWZmZXIqIGJ1
ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihtX3NhbXBsZS5nZXQoKSk7Ci0gICAgaWYgKFVO
TElLRUxZKCFHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
c3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyhtX3NhbXBsZS5nZXQoKSk7Ci0KLSAg
ICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOwotICAgIGdzdF92aWRlb19pbmZvX2luaXQoJnZpZGVv
SW5mbyk7Ci0gICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnZpZGVvSW5mbywgY2Fw
cykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghR1NUX1ZJREVPX0lORk9fSVNfUkdCKCZ2
aWRlb0luZm8pKSB7Ci0gICAgICAgIGlmICghbV9jb2xvckNvbnZlcnQpIHsKLSAgICAgICAgICAg
IEdzdE1lbW9yeSogbWVtID0gZ3N0X2J1ZmZlcl9wZWVrX21lbW9yeShidWZmZXIsIDApOwotICAg
ICAgICAgICAgR3N0R0xDb250ZXh0KiBjb250ZXh0ID0gKChHc3RHTEJhc2VNZW1vcnkqKW1lbSkt
PmNvbnRleHQ7Ci0gICAgICAgICAgICBtX2NvbG9yQ29udmVydCA9IGFkb3B0R1JlZihnc3RfZ2xf
Y29sb3JfY29udmVydF9uZXcoY29udGV4dCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFt
X2NvbG9yQ29udmVydElucHV0Q2FwcyB8fCAhZ3N0X2NhcHNfaXNfZXF1YWwobV9jb2xvckNvbnZl
cnRJbnB1dENhcHMuZ2V0KCksIGNhcHMpKSB7Ci0gICAgICAgICAgICBtX2NvbG9yQ29udmVydElu
cHV0Q2FwcyA9IGNhcHM7Ci0gICAgICAgICAgICBtX2NvbG9yQ29udmVydE91dHB1dENhcHMgPSBh
ZG9wdEdSZWYoZ3N0X2NhcHNfY29weShjYXBzKSk7Ci0jaWYgR19CWVRFX09SREVSID09IEdfTElU
VExFX0VORElBTgotICAgICAgICAgICAgY29uc3QgZ2NoYXIqIGZvcm1hdFN0cmluZyA9IEdTVF9W
SURFT19JTkZPX0hBU19BTFBIQSgmdmlkZW9JbmZvKSA/ICJSR0JBIiA6ICJCR1J4IjsKLSNlbHNl
Ci0gICAgICAgICAgICBjb25zdCBnY2hhciogZm9ybWF0U3RyaW5nID0gR1NUX1ZJREVPX0lORk9f
SEFTX0FMUEhBKCZ2aWRlb0luZm8pID8gIlJHQkEiIDogIlJHQngiOwotI2VuZGlmCi0gICAgICAg
ICAgICBnc3RfY2Fwc19zZXRfc2ltcGxlKG1fY29sb3JDb252ZXJ0T3V0cHV0Q2Fwcy5nZXQoKSwg
ImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsIGZvcm1hdFN0cmluZywgbnVsbHB0cik7Ci0gICAgICAg
ICAgICBpZiAoIWdzdF9nbF9jb2xvcl9jb252ZXJ0X3NldF9jYXBzKG1fY29sb3JDb252ZXJ0Lmdl
dCgpLCBjYXBzLCBtX2NvbG9yQ29udmVydE91dHB1dENhcHMuZ2V0KCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEdSZWZQdHI8R3N0QnVmZmVyPiByZ2JC
dWZmZXIgPSBhZG9wdEdSZWYoZ3N0X2dsX2NvbG9yX2NvbnZlcnRfcGVyZm9ybShtX2NvbG9yQ29u
dmVydC5nZXQoKSwgYnVmZmVyKSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghR1NUX0lTX0JVRkZF
UihyZ2JCdWZmZXIuZ2V0KCkpKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjb25z
dCBHc3RTdHJ1Y3R1cmUqIGluZm8gPSBnc3Rfc2FtcGxlX2dldF9pbmZvKG1fc2FtcGxlLmdldCgp
KTsKLSAgICAgICAgbV9zYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X3NhbXBsZV9uZXcocmdiQnVmZmVy
LmdldCgpLCBtX2NvbG9yQ29udmVydE91dHB1dENhcHMuZ2V0KCksCi0gICAgICAgICAgICBnc3Rf
c2FtcGxlX2dldF9zZWdtZW50KG1fc2FtcGxlLmdldCgpKSwgaW5mbyA/IGdzdF9zdHJ1Y3R1cmVf
Y29weShpbmZvKSA6IG51bGxwdHIpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGF1dG8gZ3N0SW1h
Z2UgPSBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UobV9zYW1wbGUuZ2V0KCkpOwotICAgIGlm
ICghZ3N0SW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnRleHQuZHJhd0ltYWdlKGdz
dEltYWdlLT5pbWFnZSgpLCByZWN0LCBnc3RJbWFnZS0+cmVjdCgpLCB7IENvbXBvc2l0ZUNvcHks
IG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCA/IG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA6
IEltYWdlT3JpZW50YXRpb24oKSB9KTsKLX0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1ib29s
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNvcHlWaWRlb1RleHR1cmVUb1BsYXRm
b3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgUGxhdGZvcm0zRE9iamVjdCBv
dXRwdXRUZXh0dXJlLCBHQzNEZW51bSBvdXRwdXRUYXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsRm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSAgICBVTlVTRURfUEFSQU0oY29udGV4
dCk7Ci0KLSAgICBpZiAobV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5rKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKLQot
ICAgIGlmICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHc3RWaWRlb0ZyYW1lSG9sZGVyPiBmcmFtZUhv
bGRlciA9IG1ha2VVbmlxdWU8R3N0VmlkZW9GcmFtZUhvbGRlcj4obV9zYW1wbGUuZ2V0KCksIG1f
dmlkZW9EZWNvZGVyUGxhdGZvcm0sIG1fdGV4dHVyZU1hcHBlckZsYWdzLCB0cnVlKTsKLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4gbGF5ZXJC
dWZmZXIgPSBmcmFtZUhvbGRlci0+cGxhdGZvcm1MYXllckJ1ZmZlcigpOwotICAgIGlmICghbGF5
ZXJCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gc2l6ZSA9IGZyYW1l
SG9sZGVyLT5zaXplKCk7Ci0gICAgaWYgKG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbi51c2VzV2lk
dGhBc0hlaWdodCgpKQotICAgICAgICBzaXplID0gc2l6ZS50cmFuc3Bvc2VkU2l6ZSgpOwotCi0g
ICAgaWYgKCFtX3ZpZGVvVGV4dHVyZUNvcGllcikKLSAgICAgICAgbV92aWRlb1RleHR1cmVDb3Bp
ZXIgPSBtYWtlVW5pcXVlPFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1lcj4oVEVYVFVSRV9DT1BJ
RVJfQ09MT1JfQ09OVkVSVF9GTEFHKTsKLQotICAgIGZyYW1lSG9sZGVyLT53YWl0Rm9yQ1BVU3lu
YygpOwotCi0gICAgcmV0dXJuIG1fdmlkZW9UZXh0dXJlQ29waWVyLT5jb3B5VmlkZW9UZXh0dXJl
VG9QbGF0Zm9ybVRleHR1cmUoKmxheWVyQnVmZmVyLmdldCgpLCBzaXplLCBvdXRwdXRUZXh0dXJl
LCBvdXRwdXRUYXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCBmbGlw
WSwgbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uKTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50VGltZSgpCi17
Ci0jaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlm
IChtX3VzaW5nRmFsbGJhY2tWaWRlb1NpbmspCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgYXV0byBzYW1wbGVMb2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKLQotICAgIGlm
ICghR1NUX0lTX1NBTVBMRShtX3NhbXBsZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdzdFZpZGVvRnJhbWVIb2xkZXI+IGZyYW1lSG9sZGVy
ID0gbWFrZVVuaXF1ZTxHc3RWaWRlb0ZyYW1lSG9sZGVyPihtX3NhbXBsZS5nZXQoKSwgbV92aWRl
b0RlY29kZXJQbGF0Zm9ybSwgbV90ZXh0dXJlTWFwcGVyRmxhZ3MsIHRydWUpOwotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZl
ciA9IGZyYW1lSG9sZGVyLT5wbGF0Zm9ybUxheWVyQnVmZmVyKCk7Ci0gICAgaWYgKCFsYXllckJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNpemUgPSBmcmFtZUhv
bGRlci0+c2l6ZSgpOwotICAgIGlmIChtX3ZpZGVvU291cmNlT3JpZW50YXRpb24udXNlc1dpZHRo
QXNIZWlnaHQoKSkKLSAgICAgICAgc2l6ZSA9IHNpemUudHJhbnNwb3NlZFNpemUoKTsKLQotICAg
IEdMQ29udGV4dCogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNv
bXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwotCi0gICAgaWYgKCFtX3ZpZGVvVGV4dHVyZUNvcGllcikKLSAgICAgICAgbV92
aWRlb1RleHR1cmVDb3BpZXIgPSBtYWtlVW5pcXVlPFZpZGVvVGV4dHVyZUNvcGllckdTdHJlYW1l
cj4oVEVYVFVSRV9DT1BJRVJfQ09MT1JfQ09OVkVSVF9GTEFHKTsKLQotICAgIGZyYW1lSG9sZGVy
LT53YWl0Rm9yQ1BVU3luYygpOwotCi0gICAgaWYgKCFtX3ZpZGVvVGV4dHVyZUNvcGllci0+Y29w
eVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0dXJlKCpsYXllckJ1ZmZlci5nZXQoKSwgc2l6ZSwg
MCwgR0xfVEVYVFVSRV8yRCwgMCwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
ZmFsc2UsIG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbikpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0
dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1f
dmlkZW9UZXh0dXJlQ29waWVyLT5yZXN1bHRUZXh0dXJlKCksIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSkpOwotI2Vsc2UKLSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgotfQotI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
QmFzZTo6c2V0VmlkZW9Tb3VyY2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKQotewotICAgIGlmIChtX3ZpZGVvU291cmNlT3JpZW50YXRpb24gPT0gb3JpZW50YXRpb24p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fdmlkZW9Tb3VyY2VPcmllbnRhdGlvbiA9IG9yaWVu
dGF0aW9uOwotI2lmIFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAgICB1cGRhdGVUZXh0dXJlTWFw
cGVyRmxhZ3MoKTsKLSNlbmRpZgotfQotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjp1cGRhdGVUZXh0dXJlTWFwcGVyRmxh
Z3MoKQotewotICAgIHN3aXRjaCAobV92aWRlb1NvdXJjZU9yaWVudGF0aW9uKSB7Ci0gICAgY2Fz
ZSBJbWFnZU9yaWVudGF0aW9uOjpPcmlnaW5Ub3BMZWZ0OgotICAgICAgICBtX3RleHR1cmVNYXBw
ZXJGbGFncyA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW1hZ2VPcmllbnRhdGlvbjo6
T3JpZ2luUmlnaHRUb3A6Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gVGV4dHVyZU1h
cHBlckdMOjpTaG91bGRSb3RhdGVUZXh0dXJlOTA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SW1hZ2VPcmllbnRhdGlvbjo6T3JpZ2luQm90dG9tUmlnaHQ6Ci0gICAgICAgIG1fdGV4dHVyZU1h
cHBlckZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRSb3RhdGVUZXh0dXJlMTgwOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEltYWdlT3JpZW50YXRpb246Ok9yaWdpbkxlZnRCb3R0b206
Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlckZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRS
b3RhdGVUZXh0dXJlMjcwOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICAv
LyBGSVhNRTogSGFuZGxlIE9yaWdpblRvcFJpZ2h0LCBPcmlnaW5Cb3R0b21MZWZ0LCBPcmlnaW5M
ZWZ0VG9wIGFuZCBPcmlnaW5SaWdodEJvdHRvbT8KLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyRmxh
Z3MgPSAwOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0jZW5kaWYKLQotYm9vbCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzdXBwb3J0c0Z1bGxzY3JlZW4oKSBjb25zdAotewot
ICAgIHJldHVybiB0cnVlOwotfQotCi1NZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjptb3ZpZUxvYWRUeXBlKCkgY29uc3QKLXsKLSAgICBp
ZiAobV9yZWFkeVN0YXRlID09IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKLSAgICAgICAgcmV0
dXJuIE1lZGlhUGxheWVyOjpVbmtub3duOwotCi0gICAgaWYgKGlzTGl2ZVN0cmVhbSgpKQotICAg
ICAgICByZXR1cm4gTWVkaWFQbGF5ZXI6OkxpdmVTdHJlYW07Ci0KLSAgICByZXR1cm4gTWVkaWFQ
bGF5ZXI6OkRvd25sb2FkOwotfQotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLUdzdEVsZW1lbnQq
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNyZWF0ZUdMQXBwU2luaygpCi17Ci0g
ICAgR3N0RWxlbWVudCogYXBwc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc2lu
ayIsICJ3ZWJraXQtZ2wtdmlkZW8tc2luayIpOwotICAgIGlmICghYXBwc2luaykKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBnX29iamVjdF9zZXQoYXBwc2luaywgImVuYWJsZS1sYXN0
LXNhbXBsZSIsIEZBTFNFLCAiZW1pdC1zaWduYWxzIiwgVFJVRSwgIm1heC1idWZmZXJzIiwgMSwg
bnVsbHB0cik7Ci0gICAgZ19zaWduYWxfY29ubmVjdChhcHBzaW5rLCAibmV3LXNhbXBsZSIsIEdf
Q0FMTEJBQ0sobmV3U2FtcGxlQ2FsbGJhY2spLCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KGFwcHNpbmssICJuZXctcHJlcm9sbCIsIEdfQ0FMTEJBQ0sobmV3UHJlcm9sbENhbGxiYWNrKSwg
dGhpcyk7Ci0KLSAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50
X2dldF9zdGF0aWNfcGFkKGFwcHNpbmssICJzaW5rIikpOwotICAgIGdzdF9wYWRfYWRkX3Byb2Jl
KHBhZC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0UGFkUHJvYmVUeXBlPihHU1RfUEFEX1BST0JFX1RZ
UEVfUFVTSCB8IEdTVF9QQURfUFJPQkVfVFlQRV9RVUVSWV9ET1dOU1RSRUFNIHwgR1NUX1BBRF9Q
Uk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSwgW10gKEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5m
bywgIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHc3RQYWRQcm9iZVJldHVybiB7Ci0gICAgICAgIC8v
IEluIHNvbWUgcGxhdGZvcm1zIChlLmcuIE9wZW5NQVggb24gdGhlIFJhc3BiZXJyeSBQaSkgd2hl
biBhIHJlc29sdXRpb24gY2hhbmdlIG9jY3VycyB0aGUKLSAgICAgICAgLy8gcGlwZWxpbmUgaGFz
IHRvIGJlIGRyYWluZWQgYmVmb3JlIGEgZnJhbWUgd2l0aCB0aGUgbmV3IHJlc29sdXRpb24gY2Fu
IGJlIGRlY29kZWQuCi0gICAgICAgIC8vIEluIHRoaXMgY29udGV4dCwgaXQncyBpbXBvcnRhbnQg
dGhhdCB3ZSBkb24ndCBob2xkIHJlZmVyZW5jZXMgdG8gYW55IHByZXZpb3VzIGZyYW1lCi0gICAg
ICAgIC8vIChlLmcuIG1fc2FtcGxlKSBzbyB0aGF0IGRlY29kaW5nIGNhbiBjb250aW51ZS4KLSAg
ICAgICAgLy8gV2UgYXJlIGFsc28gbm90IHN1cHBvc2VkIHRvIGtlZXAgdGhlIG9yaWdpbmFsIGZy
YW1lIGFmdGVyIGEgZmx1c2guCi0gICAgICAgIGlmIChpbmZvLT50eXBlICYgR1NUX1BBRF9QUk9C
RV9UWVBFX1FVRVJZX0RPV05TVFJFQU0pIHsKLSAgICAgICAgICAgIGlmIChHU1RfUVVFUllfVFlQ
RShHU1RfUEFEX1BST0JFX0lORk9fUVVFUlkoaW5mbykpICE9IEdTVF9RVUVSWV9EUkFJTikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKLSAgICAgICAgICAgIEdTVF9E
RUJVRygiQWN0aW5nIHVwb24gRFJBSU4gcXVlcnkiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
aW5mby0+dHlwZSAmIEdTVF9QQURfUFJPQkVfVFlQRV9FVkVOVF9GTFVTSCkgewotICAgICAgICAg
ICAgaWYgKEdTVF9FVkVOVF9UWVBFKEdTVF9QQURfUFJPQkVfSU5GT19FVkVOVChpbmZvKSkgIT0g
R1NUX0VWRU5UX0ZMVVNIX1NUQVJUKQotICAgICAgICAgICAgICAgIHJldHVybiBHU1RfUEFEX1BS
T0JFX09LOwotICAgICAgICAgICAgR1NUX0RFQlVHKCJBY3RpbmcgdXBvbiBmbHVzaC1zdGFydCBl
dmVudCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byogcGxheWVyID0gc3RhdGljX2Nhc3Q8
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSo+KHVzZXJEYXRhKTsKLSAgICAgICAgcGxh
eWVyLT5mbHVzaEN1cnJlbnRCdWZmZXIoKTsKLSAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVf
T0s7Ci0gICAgfSwgdGhpcywgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gYXBwc2luazsKLX0KLQot
R3N0RWxlbWVudCogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y3JlYXRlVmlkZW9T
aW5rR0woKQotewotICAgIGdib29sZWFuIHJlc3VsdCA9IFRSVUU7Ci0gICAgR3N0RWxlbWVudCog
dmlkZW9TaW5rID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7Ci0gICAgR3N0RWxlbWVudCogdXBsb2Fk
ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJnbHVwbG9hZCIsIG51bGxwdHIpOwotICAgIEdz
dEVsZW1lbnQqIGNvbG9yY29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZ2xjb2xv
cmNvbnZlcnQiLCBudWxscHRyKTsKLSAgICBHc3RFbGVtZW50KiBhcHBzaW5rID0gY3JlYXRlR0xB
cHBTaW5rKCk7Ci0KLSAgICAvLyBnbHNpbmtiaW4gaXMgbm90IHVzZWQgYmVjYXVzZSBpdCBpbmNs
dWRlcyBnbGNvbG9yY29udmVydCB3aGljaCBvbmx5IHByb2Nlc3MgUkdCQSwKLSAgICAvLyBidXQg
d2UgY2FuIGRpc3BsYXkgWVVWIGZvcm1hdHMgdG9vLgotCi0gICAgaWYgKCFhcHBzaW5rIHx8ICF1
cGxvYWQgfHwgIWNvbG9yY29udmVydCkgewotICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRv
IGNyZWF0ZSBHc3RHTCBlbGVtZW50cyIpOwotICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHZpZGVv
U2luayk7Ci0KLSAgICAgICAgaWYgKHVwbG9hZCkKLSAgICAgICAgICAgIGdzdF9vYmplY3RfdW5y
ZWYodXBsb2FkKTsKLSAgICAgICAgaWYgKGNvbG9yY29udmVydCkKLSAgICAgICAgICAgIGdzdF9v
YmplY3RfdW5yZWYoY29sb3Jjb252ZXJ0KTsKLSAgICAgICAgaWYgKGFwcHNpbmspCi0gICAgICAg
ICAgICBnc3Rfb2JqZWN0X3VucmVmKGFwcHNpbmspOwotCi0gICAgICAgIGdfd2FybmluZygiV2Vi
S2l0IHdhc24ndCBhYmxlIHRvIGZpbmQgdGhlIEdTdHJlYW1lciBvcGVuZ2wgcGx1Z2luLiBIYXJk
d2FyZS1hY2NlbGVyYXRlZCB6ZXJvLWNvcHkgdmlkZW8gcmVuZGVyaW5nIGNhbid0IGJlIGVuYWJs
ZWQgd2l0aG91dCB0aGlzIHBsdWdpbi4iKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKHZpZGVvU2luayksIHVwbG9hZCwgY29s
b3Jjb252ZXJ0LCBhcHBzaW5rLCBudWxscHRyKTsKLQotICAgIC8vIFdvcmthcm91bmQgdW50aWwg
d2UgY2FuIGRlcGVuZCBvbiBHU3RyZWFtZXIgMS4xNi4yLgotICAgIC8vIGh0dHBzOi8vZ2l0bGFi
LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFzZS9jb21taXQvOGQzMmRl
MDkwNTU0Y2YyOWZlMzU5ZjgzYWE0NjAwMGJhNjU4YTY5MwotICAgIC8vIEZvcmNpbmcgYSBjb2xv
ciBjb252ZXJzaW9uIHRvIFJHQkEgaGVyZSBhbGxvd3MgZ2x1cGxvYWQgdG8gaW50ZXJuYWxseSB1
c2UKLSAgICAvLyBhbiB1cGxvYWRlciB0aGF0IGFkZHMgYSBWaWRlb01ldGEsIHRocm91Z2ggdGhl
IFRleHR1cmVVcGxvYWRNZXRhIGNhcHMKLSAgICAvLyBmZWF0dXJlLCB3aXRob3V0IG5lZWRpbmcg
dGhlIHBhdGNoIGFib3ZlLiBIb3dldmVyIHRoaXMgc3BlY2lmaWMgY2FwcwotICAgIC8vIGZlYXR1
cmUgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCBmcm9tIEdTdHJlYW1lciBzbyBpdCBpcyBjb25zaWRl
cmVkIGEKLSAgICAvLyBzaG9ydC10ZXJtIHdvcmthcm91bmQuIFRoaXMgY29kZSBwYXRoIG1vc3Qg
bGlrZWx5IHdpbGwgaGF2ZSBhIG5lZ2F0aXZlCi0gICAgLy8gcGVyZm9ybWFuY2UgaW1wYWN0IG9u
IGVtYmVkZGVkIHBsYXRmb3JtcyBhcyB3ZWxsLiBEb3duc3RyZWFtIGVtYmVkZGVycwotICAgIC8v
IGFyZSBoaWdobHkgZW5jb3VyYWdlZCB0byBjaGVycnktcGljayB0aGUgcGF0Y2ggbGlua2VkIGFi
b3ZlIGluIHRoZWlyIEJTUAotICAgIC8vIGFuZCBzZXQgdGhlIFdFQktJVF9HU1RfTk9fUkdCQV9D
T05WRVJTSU9OIGVudmlyb25tZW50IHZhcmlhYmxlIHVudGlsCi0gICAgLy8gR1N0cmVhbWVyIDEu
MTYuMiBpcyByZWxlYXNlZC4KLSAgICAvLyBTZWUgYWxzbyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNDIyCi0gICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzOwotICAg
IGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTYsIDIpIHx8IGdldGVudigiV0VCS0lUX0dT
VF9OT19SR0JBX0NPTlZFUlNJT04iKSkKLSAgICAgICAgY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fw
c19mcm9tX3N0cmluZygidmlkZW8veC1yYXcsIGZvcm1hdCA9IChzdHJpbmcpICIgR1NUX0dMX0NB
UFNfRk9STUFUKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEdTVF9JTkZPX09CSkVDVChwaXBlbGlu
ZSgpLCAiRm9yY2luZyBSR0JBIGFzIEdTdHJlYW1lciBpcyBub3QgbmV3IGVub3VnaC4iKTsKLSAg
ICAgICAgY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19mcm9tX3N0cmluZygidmlkZW8veC1yYXcs
IGZvcm1hdCA9IChzdHJpbmcpIFJHQkEiKSk7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNfc2V0X2Zl
YXR1cmVzKGNhcHMuZ2V0KCksIDAsIGdzdF9jYXBzX2ZlYXR1cmVzX25ldyhHU1RfQ0FQU19GRUFU
VVJFX01FTU9SWV9HTF9NRU1PUlksIG51bGxwdHIpKTsKLSAgICBnX29iamVjdF9zZXQoYXBwc2lu
aywgImNhcHMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKLQotICAgIHJlc3VsdCAmPSBnc3RfZWxl
bWVudF9saW5rX21hbnkodXBsb2FkLCBjb2xvcmNvbnZlcnQsIGFwcHNpbmssIG51bGxwdHIpOwot
Ci0gICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZCh1cGxvYWQsICJzaW5rIikpOwotICAgIGdzdF9lbGVtZW50X2FkZF9wYWQodmlkZW9T
aW5rLCBnc3RfZ2hvc3RfcGFkX25ldygic2luayIsIHBhZC5nZXQoKSkpOwotCi0gICAgaWYgKCFy
ZXN1bHQpIHsKLSAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBsaW5rIEdzdEdMIGVsZW1l
bnRzIik7Ci0gICAgICAgIGdzdF9vYmplY3RfdW5yZWYodmlkZW9TaW5rKTsKLSAgICAgICAgdmlk
ZW9TaW5rID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIHZpZGVvU2luazsKLX0KLQotdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjplbnN1cmVHTFZpZGVvU2lua0NvbnRl
eHQoKQotewotICAgIGlmICghbV9nbERpc3BsYXlFbGVtZW50Q29udGV4dCkKLSAgICAgICAgbV9n
bERpc3BsYXlFbGVtZW50Q29udGV4dCA9IGFkb3B0R1JlZihyZXF1ZXN0R0xDb250ZXh0KEdTVF9H
TF9ESVNQTEFZX0NPTlRFWFRfVFlQRSkpOwotCi0gICAgaWYgKG1fZ2xEaXNwbGF5RWxlbWVudENv
bnRleHQpCi0gICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KG1fdmlkZW9TaW5rLmdldCgp
LCBtX2dsRGlzcGxheUVsZW1lbnRDb250ZXh0LmdldCgpKTsKLQotICAgIGlmICghbV9nbEFwcEVs
ZW1lbnRDb250ZXh0KQotICAgICAgICBtX2dsQXBwRWxlbWVudENvbnRleHQgPSBhZG9wdEdSZWYo
cmVxdWVzdEdMQ29udGV4dCgiZ3N0LmdsLmFwcF9jb250ZXh0IikpOwotCi0gICAgaWYgKG1fZ2xB
cHBFbGVtZW50Q29udGV4dCkKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQobV92aWRl
b1NpbmsuZ2V0KCksIG1fZ2xBcHBFbGVtZW50Q29udGV4dC5nZXQoKSk7Ci19Ci0jZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUl9HTCkKLQotI2lmIFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQotc3RhdGlj
IHZvaWQgc2V0UmVjdGFuZ2xlVG9WaWRlb1NpbmsoR3N0RWxlbWVudCogdmlkZW9TaW5rLCBjb25z
dCBJbnRSZWN0JiByZWN0KQotewotICAgIC8vIEhlcmUgZ29lcyB0aGUgcGxhdGZvcm0tZGVwZW5k
YW50IGNvZGUgdG8gc2V0IHRvIHRoZSB2aWRlb1NpbmsgdGhlIHNpemUKLSAgICAvLyBhbmQgcG9z
aXRpb24gb2YgdGhlIHZpZGVvIHJlbmRlcmluZyB3aW5kb3cuIE1hcmsgdGhlbSB1bnVzZWQgYXMg
ZGVmYXVsdC4KLSAgICBVTlVTRURfUEFSQU0odmlkZW9TaW5rKTsKLSAgICBVTlVTRURfUEFSQU0o
cmVjdCk7Ci19Ci0KLWNsYXNzIEdTdHJlYW1lckhvbGVQdW5jaENsaWVudCA6IHB1YmxpYyBUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcjo6SG9sZVB1bmNoQ2xpZW50IHsKLXB1YmxpYzoK
LSAgICBHU3RyZWFtZXJIb2xlUHVuY2hDbGllbnQoR1JlZlB0cjxHc3RFbGVtZW50PiYmIHZpZGVv
U2luaykgOiBtX3ZpZGVvU2luayhXVEZNb3ZlKHZpZGVvU2luaykpIHsgfTsKLSAgICB2b2lkIHNl
dFZpZGVvUmVjdGFuZ2xlKGNvbnN0IEludFJlY3QmIHJlY3QpIGZpbmFsIHsgc2V0UmVjdGFuZ2xl
VG9WaWRlb1NpbmsobV92aWRlb1NpbmsuZ2V0KCksIHJlY3QpOyB9Ci1wcml2YXRlOgotICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gbV92aWRlb1Npbms7Ci19OwotCi1Hc3RFbGVtZW50KiBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpjcmVhdGVIb2xlUHVuY2hWaWRlb1NpbmsoKQotewot
ICAgIC8vIEhlcmUgZ29lcyB0aGUgcGxhdGZvcm0tZGVwZW5kYW50IGNvZGUgdG8gY3JlYXRlIHRo
ZSB2aWRlb1NpbmsuIEFzIGEgZGVmYXVsdAotICAgIC8vIHdlIHVzZSBhIGZha2VWaWRlb1Npbmsg
c28gbm90aGluZyBpcyBkcmF3biB0byB0aGUgcGFnZS4KLSAgICBHc3RFbGVtZW50KiB2aWRlb1Np
bmsgPSAgZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJmYWtldmlkZW9zaW5rIiwgbnVsbHB0cik7
Ci0KLSAgICByZXR1cm4gdmlkZW9TaW5rOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2U6OnB1c2hOZXh0SG9sZVB1bmNoQnVmZmVyKCkKLXsKLSAgICBhdXRvIHByb3h5
T3BlcmF0aW9uID0KLSAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkmIHByb3h5KQotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94
eS5sb2NrKCkpOwotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyQnVmZmVyPiBsYXllckJ1ZmZlciA9IG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJCdWZmZXI+KDAsIG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGROb3RC
bGVuZCwgR0xfRE9OVF9DQVJFKTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFt
ZXJIb2xlUHVuY2hDbGllbnQ+IGhvbGVQdW5jaENsaWVudCA9IG1ha2VVbmlxdWU8R1N0cmVhbWVy
SG9sZVB1bmNoQ2xpZW50PihtX3ZpZGVvU2luay5nZXQoKSk7Ci0gICAgICAgICAgICBsYXllckJ1
ZmZlci0+c2V0SG9sZVB1bmNoQ2xpZW50KFdURk1vdmUoaG9sZVB1bmNoQ2xpZW50KSk7Ci0gICAg
ICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihXVEZNb3ZlKGxheWVyQnVmZmVyKSk7Ci0gICAg
ICAgIH07Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmlt
cGwoKSkucHJveHkoKSk7Ci0jZWxzZQotICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5
ZXJQcm94eSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi1Hc3RFbGVtZW50KiBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjpjcmVhdGVWaWRlb1NpbmsoKQotewotICAgIGFjY2VsZXJhdGVk
UmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCk7Ci0KLSNpZiBVU0UoR1NUUkVBTUVSX0hPTEVQVU5DSCkK
LSAgICBtX3ZpZGVvU2luayA9IGNyZWF0ZUhvbGVQdW5jaFZpZGVvU2luaygpOwotICAgIHB1c2hO
ZXh0SG9sZVB1bmNoQnVmZmVyKCk7Ci0gICAgcmV0dXJuIG1fdmlkZW9TaW5rLmdldCgpOwotI2Vu
ZGlmCi0KLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGlmIChtX3JlbmRlcmluZ0NhbkJlQWNj
ZWxlcmF0ZWQpCi0gICAgICAgIG1fdmlkZW9TaW5rID0gY3JlYXRlVmlkZW9TaW5rR0woKTsKLSNl
bmRpZgotCi0gICAgaWYgKCFtX3ZpZGVvU2luaykgewotICAgICAgICBtX3VzaW5nRmFsbGJhY2tW
aWRlb1NpbmsgPSB0cnVlOwotICAgICAgICBtX3ZpZGVvU2luayA9IHdlYmtpdFZpZGVvU2lua05l
dygpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92aWRlb1NpbmsuZ2V0KCks
ICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0socmVwYWludENhbGxiYWNrKSwgdGhpcyk7
Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3ZpZGVvU2luay5nZXQoKSwgInJl
cGFpbnQtY2FuY2VsbGVkIiwgR19DQUxMQkFDSyhyZXBhaW50Q2FuY2VsbGVkQ2FsbGJhY2spLCB0
aGlzKTsKLSAgICB9Ci0KLSAgICBHc3RFbGVtZW50KiB2aWRlb1NpbmsgPSBudWxscHRyOwotI2lm
IEVOQUJMRShNRURJQV9TVEFUSVNUSUNTKQotICAgIG1fZnBzU2luayA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbWFrZSgiZnBzZGlzcGxheXNpbmsiLCAic2luayIpOwotICAgIGlmIChtX2Zwc1Npbmsp
IHsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fZnBzU2luay5nZXQoKSwgInNpbGVudCIsIFRSVUUg
LCBudWxscHRyKTsKLQotICAgICAgICAvLyBUdXJuIG9mZiB0ZXh0IG92ZXJsYXkgdW5sZXNzIHRy
YWNpbmcgaXMgZW5hYmxlZC4KLSAgICAgICAgaWYgKGdzdF9kZWJ1Z19jYXRlZ29yeV9nZXRfdGhy
ZXNob2xkKHdlYmtpdF9tZWRpYV9wbGF5ZXJfZGVidWcpIDwgR1NUX0xFVkVMX1RSQUNFKQotICAg
ICAgICAgICAgZ19vYmplY3Rfc2V0KG1fZnBzU2luay5nZXQoKSwgInRleHQtb3ZlcmxheSIsIEZB
TFNFICwgbnVsbHB0cik7Ci0KLSAgICAgICAgaWYgKGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVy
dHkoR19PQkpFQ1RfR0VUX0NMQVNTKG1fZnBzU2luay5nZXQoKSksICJ2aWRlby1zaW5rIikpIHsK
LSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmsuZ2V0KCksICJ2aWRlby1zaW5rIiwg
bV92aWRlb1NpbmsuZ2V0KCksIG51bGxwdHIpOwotICAgICAgICAgICAgdmlkZW9TaW5rID0gbV9m
cHNTaW5rLmdldCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZnBzU2luayA9IG51
bGxwdHI7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAoIW1fZnBzU2luaykKLSAgICAgICAgdmlk
ZW9TaW5rID0gbV92aWRlb1NpbmsuZ2V0KCk7Ci0KLSAgICBBU1NFUlQodmlkZW9TaW5rKTsKLQot
ICAgIHJldHVybiB2aWRlb1Npbms7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZTo6c2V0U3RyZWFtVm9sdW1lRWxlbWVudChHc3RTdHJlYW1Wb2x1bWUqIHZvbHVtZSkK
LXsKLSAgICBBU1NFUlQoIW1fdm9sdW1lRWxlbWVudCk7Ci0gICAgbV92b2x1bWVFbGVtZW50ID0g
dm9sdW1lOwotCi0gICAgLy8gV2UgZG9uJ3Qgc2V0IHRoZSBpbml0aWFsIHZvbHVtZSBiZWNhdXNl
IHdlIHRydXN0IHRoZSBzaW5rIHRvIGtlZXAgaXQgZm9yIHVzLiBTZWUKLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4OTc0IGZvciBtb3JlIGluZm9ybWF0
aW9uLgotICAgIGlmICghbV9wbGF5ZXItPnBsYXRmb3JtVm9sdW1lQ29uZmlndXJhdGlvblJlcXVp
cmVkKCkpIHsKLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgpLCAiU2V0dGluZyBz
dHJlYW0gdm9sdW1lIHRvICVmIiwgbV9wbGF5ZXItPnZvbHVtZSgpKTsKLSAgICAgICAgZ3N0X3N0
cmVhbV92b2x1bWVfc2V0X3ZvbHVtZShtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksIEdTVF9TVFJFQU1f
Vk9MVU1FX0ZPUk1BVF9MSU5FQVIsIHN0YXRpY19jYXN0PGRvdWJsZT4obV9wbGF5ZXItPnZvbHVt
ZSgpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
Ik5vdCBzZXR0aW5nIHN0cmVhbSB2b2x1bWUsIHRydXN0aW5nIHN5c3RlbSBvbmUiKTsKLQotICAg
IEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgc3RyZWFtIG11dGVkICVzIiwg
dG9TdHJpbmcobV9wbGF5ZXItPm11dGVkKCkpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2JqZWN0
X3NldChtX3ZvbHVtZUVsZW1lbnQuZ2V0KCksICJtdXRlIiwgbV9wbGF5ZXItPm11dGVkKCksIG51
bGxwdHIpOwotCi0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fdm9sdW1lRWxlbWVudC5n
ZXQoKSwgIm5vdGlmeTo6dm9sdW1lIiwgR19DQUxMQkFDSyh2b2x1bWVDaGFuZ2VkQ2FsbGJhY2sp
LCB0aGlzKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV92b2x1bWVFbGVtZW50Lmdl
dCgpLCAibm90aWZ5OjptdXRlIiwgR19DQUxMQkFDSyhtdXRlQ2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmRlY29k
ZWRGcmFtZUNvdW50KCkgY29uc3QKLXsKLSAgICBndWludDY0IGRlY29kZWRGcmFtZXMgPSAwOwot
ICAgIGlmIChtX2Zwc1NpbmspCi0gICAgICAgIGdfb2JqZWN0X2dldChtX2Zwc1NpbmsuZ2V0KCks
ICJmcmFtZXMtcmVuZGVyZWQiLCAmZGVjb2RlZEZyYW1lcywgbnVsbHB0cik7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWNvZGVkRnJhbWVzKTsKLX0KLQotdW5zaWduZWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6ZHJvcHBlZEZyYW1lQ291bnQoKSBjb25zdAot
ewotICAgIGd1aW50NjQgZnJhbWVzRHJvcHBlZCA9IDA7Ci0gICAgaWYgKG1fZnBzU2luaykKLSAg
ICAgICAgZ19vYmplY3RfZ2V0KG1fZnBzU2luay5nZXQoKSwgImZyYW1lcy1kcm9wcGVkIiwgJmZy
YW1lc0Ryb3BwZWQsIG51bGxwdHIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZnJhbWVzRHJvcHBlZCk7Ci19Ci0KLXVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2U6OmF1ZGlvRGVjb2RlZEJ5dGVDb3VudCgpIGNvbnN0Ci17Ci0gICAgR3N0UXVlcnkqIHF1
ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihHU1RfRk9STUFUX0JZVEVTKTsKLSAgICBnaW50
NjQgcG9zaXRpb24gPSAwOwotCi0gICAgaWYgKGF1ZGlvU2luaygpICYmIGdzdF9lbGVtZW50X3F1
ZXJ5KGF1ZGlvU2luaygpLCBxdWVyeSkpCi0gICAgICAgIGdzdF9xdWVyeV9wYXJzZV9wb3NpdGlv
bihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKLQotICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlvbik7Ci19Ci0KLXVuc2lnbmVk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnZpZGVvRGVjb2RlZEJ5dGVDb3VudCgp
IGNvbnN0Ci17Ci0gICAgR3N0UXVlcnkqIHF1ZXJ5ID0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlvbihH
U1RfRk9STUFUX0JZVEVTKTsKLSAgICBnaW50NjQgcG9zaXRpb24gPSAwOwotCi0gICAgaWYgKGdz
dF9lbGVtZW50X3F1ZXJ5KG1fdmlkZW9TaW5rLmdldCgpLCBxdWVyeSkpCi0gICAgICAgIGdzdF9x
dWVyeV9wYXJzZV9wb3NpdGlvbihxdWVyeSwgMCwgJnBvc2l0aW9uKTsKLQotICAgIGdzdF9xdWVy
eV91bnJlZihxdWVyeSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihwb3NpdGlv
bik7Ci19Ci0KLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJCYXNlOjppbml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChJbml0RGF0
YSYmIGluaXREYXRhKQotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotCi0gICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgaW5p
dERhdGEgPSBXVEZNb3ZlKGluaXREYXRhKV0gewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEdTVF9ERUJVRygic2NoZWR1bGluZyBpbml0aWFs
aXphdGlvbkRhdGFFbmNvdW50ZXJlZCBldmVudCBvZiBzaXplICV6dSIsIGluaXREYXRhLnBheWxv
YWQoKS0+c2l6ZSgpKTsKLSAgICAgICAgR1NUX01FTURVTVAoImluaXQgZGF0YXMiLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihpbml0RGF0YS5wYXlsb2FkKCktPmRhdGEoKSksIGlu
aXREYXRhLnBheWxvYWQoKS0+c2l6ZSgpKTsKLSAgICAgICAgd2Vha1RoaXMtPm1fcGxheWVyLT5p
bml0aWFsaXphdGlvbkRhdGFFbmNvdW50ZXJlZChpbml0RGF0YS5wYXlsb2FkQ29udGFpbmVyVHlw
ZSgpLCBpbml0RGF0YS5wYXlsb2FkKCktPnRyeUNyZWF0ZUFycmF5QnVmZmVyKCkpOwotICAgIH0p
OwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmNkbUluc3RhbmNl
QXR0YWNoZWQoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQotewotICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0KLSAgICBpZiAobV9jZG1JbnN0YW5jZSA9PSAmaW5zdGFuY2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9waXBlbGluZSkgewotICAgICAgICBHU1RfRVJST1IoIm5vIHBp
cGVsaW5lIHlldCIpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fY2RtSW5zdGFuY2UgPSAmaW5zdGFuY2U7Ci0KLSAgICBHUmVm
UHRyPEdzdENvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3N0X2NvbnRleHRfbmV3KCJkcm0t
Y2RtLWluc3RhbmNlIiwgRkFMU0UpKTsKLSAgICBHc3RTdHJ1Y3R1cmUqIGNvbnRleHRTdHJ1Y3R1
cmUgPSBnc3RfY29udGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoY29udGV4dC5nZXQoKSk7Ci0gICAg
Z3N0X3N0cnVjdHVyZV9zZXQoY29udGV4dFN0cnVjdHVyZSwgImNkbS1pbnN0YW5jZSIsIEdfVFlQ
RV9QT0lOVEVSLCBtX2NkbUluc3RhbmNlLT5wcm94eUNETSgpLmdldCgpLCBudWxscHRyKTsKLSAg
ICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtX3BpcGVsaW5lLmdldCgpKSwg
Y29udGV4dC5nZXQoKSk7Ci0KLSAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJDRE0gcHJveHkgaW5zdGFuY2UgJXAgZGlzcGF0Y2hlZCBhcyBjb250ZXh0IiwgbV9jZG1JbnN0
YW5jZS0+cHJveHlDRE0oKS5nZXQoKSk7Ci0KLSAgICBtX2NkbUF0dGFjaG1lbnRTZW1hcGhvcmUu
c2lnbmFsKCk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6Y2Rt
SW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYgaW5zdGFuY2UpCi17Ci0gICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLQotICAgIGlmIChtX2NkbUluc3RhbmNlICE9ICZpbnN0YW5jZSkgewot
ICAgICAgICBHU1RfV0FSTklORygicGFzc2VkIENETUluc3RhbmNlICVwIGlzIGRpZmZlcmVudCBm
cm9tIHN0b3JlZCBvbmUgJXAiLCAmaW5zdGFuY2UsIG1fY2RtSW5zdGFuY2UuZ2V0KCkpOwotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChtX3BpcGVsaW5lKTsKLQotICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5n
ZXQoKSwgImRldGFjaGluZyBDRE0gaW5zdGFuY2UgJXAsIHNldHRpbmcgZW1wdHkgY29udGV4dCIs
IG1fY2RtSW5zdGFuY2UuZ2V0KCkpOwotICAgIG1fY2RtSW5zdGFuY2UgPSBudWxscHRyOwotCi0g
ICAgR1JlZlB0cjxHc3RDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKGdzdF9jb250ZXh0X25l
dygiZHJtLWNkbS1pbnN0YW5jZSIsIEZBTFNFKSk7Ci0gICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRl
eHQoR1NUX0VMRU1FTlQobV9waXBlbGluZS5nZXQoKSksIGNvbnRleHQuZ2V0KCkpOwotfQotCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OmF0dGVtcHRUb0RlY3J5cHRXaXRo
SW5zdGFuY2UoQ0RNSW5zdGFuY2UmIGluc3RhbmNlKQotewotICAgIEFTU0VSVChtX2NkbUluc3Rh
bmNlLmdldCgpID09ICZpbnN0YW5jZSk7Ci0gICAgR1NUX1RSQUNFKCJpbnN0YW5jZSAlcCwgY3Vy
cmVudCBzdG9yZWQgJXAiLCAmaW5zdGFuY2UsIG1fY2RtSW5zdGFuY2UuZ2V0KCkpOwotICAgIGF0
dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwotfQotCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OmF0dGVtcHRUb0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgp
Ci17Ci0gICAgYm9vbCBldmVudEhhbmRsZWQgPSBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KHBpcGVs
aW5lKCksIGdzdF9ldmVudF9uZXdfY3VzdG9tKEdTVF9FVkVOVF9DVVNUT01fRE9XTlNUUkVBTV9P
T0IsIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhdHRlbXB0LXRvLWRlY3J5cHQiKSkpOwotICAg
IEdTVF9ERUJVRygiYXR0ZW1wdGluZyB0byBkZWNyeXB0LCBldmVudCBoYW5kbGVkICVzIiwgYm9v
bEZvclByaW50aW5nKGV2ZW50SGFuZGxlZCkpOwotfQotCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmhhbmRsZVByb3RlY3Rpb25FdmVudChHc3RFdmVudCogZXZlbnQpCi17
Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2sobV9wcm90ZWN0aW9uTXV0ZXgpOwotICAg
ICAgICBpZiAobV9oYW5kbGVkUHJvdGVjdGlvbkV2ZW50cy5jb250YWlucyhHU1RfRVZFTlRfU0VR
TlVNKGV2ZW50KSkpIHsKLSAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwg
ImV2ZW50ICV1IGFscmVhZHkgaGFuZGxlZCIsIEdTVF9FVkVOVF9TRVFOVU0oZXZlbnQpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJoYW5kbGluZyBldmVudCAldSBmcm9tIE1TRSIsIEdTVF9FVkVOVF9TRVFO
VU0oZXZlbnQpKTsKLSAgICBjb25zdCBjaGFyKiBldmVudEtleVN5c3RlbVVVSUQgPSBudWxscHRy
OwotICAgIEdzdEJ1ZmZlciogaW5pdERhdGEgPSBudWxscHRyOwotICAgIGdzdF9ldmVudF9wYXJz
ZV9wcm90ZWN0aW9uKGV2ZW50LCAmZXZlbnRLZXlTeXN0ZW1VVUlELCAmaW5pdERhdGEsIG51bGxw
dHIpOwotICAgIGluaXRpYWxpemF0aW9uRGF0YUVuY291bnRlcmVkKHtldmVudEtleVN5c3RlbVVV
SUQsIGluaXREYXRhfSk7Ci19Ci0KLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZTo6c2V0V2FpdGluZ0ZvcktleShib29sIHdhaXRpbmdGb3JLZXkpCi17Ci0gICAgLy8gV2UgYmFp
bCBvdXQgaWYgdmFsdWVzIGRpZCBub3QgY2hhbmdlIG9yIGlmIHdlIGFyZSByZXF1ZXN0ZWQgdG8g
bm90IHdhaXQgYW55bW9yZSBidXQgdGhlcmUgYXJlIHN0aWxsIHdhaXRpbmcgZGVjcnlwdG9ycy4K
LSAgICBHU1RfVFJBQ0UoIndhaXRpbmdGb3JLZXkgJXMsIG1fd2FpdGluZ0ZvcktleSAlcyIsIGJv
b2xGb3JQcmludGluZyh3YWl0aW5nRm9yS2V5KSwgYm9vbEZvclByaW50aW5nKG1fd2FpdGluZ0Zv
cktleSkpOwotICAgIGlmICh3YWl0aW5nRm9yS2V5ID09IG1fd2FpdGluZ0ZvcktleSB8fCAoIXdh
aXRpbmdGb3JLZXkgJiYgdGhpcy0+d2FpdGluZ0ZvcktleSgpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV93YWl0aW5nRm9yS2V5ID0gd2FpdGluZ0ZvcktleTsKLSAgICBHU1RfREVCVUcoIndh
aXRpbmcgZm9yIGtleSBjaGFuZ2VkICVzIiwgYm9vbEZvclByaW50aW5nKG1fd2FpdGluZ0Zvcktl
eSkpOwotICAgIG1fcGxheWVyLT53YWl0aW5nRm9yS2V5Q2hhbmdlZCgpOwotfQotCi1ib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OndhaXRpbmdGb3JLZXkoKSBjb25zdAotewot
ICAgIGlmICghbV9waXBlbGluZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR3N0U3Rh
dGUgc3RhdGU7Ci0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZz
dGF0ZSwgbnVsbHB0ciwgMCk7Ci0KLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIEdSZWZQ
dHI8R3N0UXVlcnk+IHF1ZXJ5ID0gYWRvcHRHUmVmKGdzdF9xdWVyeV9uZXdfY3VzdG9tKEdTVF9R
VUVSWV9DVVNUT00sIGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhbnktZGVjcnlwdG9yLXdhaXRp
bmctZm9yLWtleSIpKSk7Ci0gICAgaWYgKHN0YXRlID49IEdTVF9TVEFURV9QQVVTRUQpIHsKLSAg
ICAgICAgcmVzdWx0ID0gZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQoKSwgcXVlcnku
Z2V0KCkpOwotICAgICAgICBHU1RfVFJBQ0UoInF1ZXJ5IHJlc3VsdCAlcywgb24gJXMiLCBib29s
Rm9yUHJpbnRpbmcocmVzdWx0KSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoc3RhdGUpKTsK
LSAgICB9IGVsc2UgaWYgKHN0YXRlID49IEdTVF9TVEFURV9SRUFEWSkgewotICAgICAgICAvLyBS
dW5uaW5nIGEgcXVlcnkgaW4gdGhlIHBpcGVsaW5lIGlzIGVhc2llciBidXQgaXQgb25seSB3b3Jr
cyB3aGVuIHRoZSBwaXBlbGluZSBpcyBzZXQgdXAgYW5kIHJ1bm5pbmcsIG90aGVyd2lzZSB3ZSBu
ZWVkIHRvIGluc3BlY3QgaXQgYW5kIGFzayB0aGUgZGVjcnlwdG9ycyBkaXJlY3RseS4KLSAgICAg
ICAgR1VuaXF1ZVB0cjxHc3RJdGVyYXRvcj4gaXRlcmF0b3IoZ3N0X2Jpbl9pdGVyYXRlX3JlY3Vy
c2UoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSkpOwotICAgICAgICBHc3RJdGVyYXRvclJlc3Vs
dCBpdGVyYXRvclJlc3VsdDsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgaXRlcmF0b3JSZXN1
bHQgPSBnc3RfaXRlcmF0b3JfZm9sZChpdGVyYXRvci5nZXQoKSwgW10oY29uc3QgR1ZhbHVlICpp
dGVtLCBHVmFsdWUgKiwgZ3BvaW50ZXIgZGF0YSkgLT4gZ2Jvb2xlYW4gewotICAgICAgICAgICAg
ICAgIEdzdEVsZW1lbnQqIGVsZW1lbnQgPSBHU1RfRUxFTUVOVChnX3ZhbHVlX2dldF9vYmplY3Qo
aXRlbSkpOwotICAgICAgICAgICAgICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IEdTVF9RVUVSWShkYXRh
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gIVdFQktJVF9JU19NRURJQV9DRU5DX0RFQ1JZUFQo
ZWxlbWVudCkgfHwgIWdzdF9lbGVtZW50X3F1ZXJ5KGVsZW1lbnQsIHF1ZXJ5KTsKLSAgICAgICAg
ICAgIH0sIG51bGxwdHIsIHF1ZXJ5LmdldCgpKTsKLSAgICAgICAgICAgIGlmIChpdGVyYXRvclJl
c3VsdCA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKQotICAgICAgICAgICAgICAgIGdzdF9pdGVyYXRv
cl9yZXN5bmMoaXRlcmF0b3IuZ2V0KCkpOwotICAgICAgICB9IHdoaWxlIChpdGVyYXRvclJlc3Vs
dCA9PSBHU1RfSVRFUkFUT1JfUkVTWU5DKTsKLSAgICAgICAgaWYgKGl0ZXJhdG9yUmVzdWx0ID09
IEdTVF9JVEVSQVRPUl9FUlJPUikKLSAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJpdGVyYXRvciBy
ZXR1cm5lZCBhbiBlcnJvciIpOwotICAgICAgICByZXN1bHQgPSBpdGVyYXRvclJlc3VsdCA9PSBH
U1RfSVRFUkFUT1JfT0s7Ci0gICAgICAgIEdTVF9UUkFDRSgiaXRlcmF0b3IgcmVzdWx0ICVkLCB3
YWl0aW5nICVzIiwgaXRlcmF0b3JSZXN1bHQsIGJvb2xGb3JQcmludGluZyhyZXN1bHQpKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotI2VuZGlmCi0KLWJvb2wgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6c3VwcG9ydHNLZXlTeXN0ZW0oY29uc3QgU3RyaW5nJiBrZXlT
eXN0ZW0sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxz
ZTsKLQotI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCi0gICAgcmVzdWx0ID0gR1N0cmVhbWVy
RU1FVXRpbGl0aWVzOjppc0NsZWFyS2V5S2V5U3lzdGVtKGtleVN5c3RlbSk7Ci0jZW5kaWYKLQot
ICAgIEdTVF9ERUJVRygiY2hlY2tpbmcgZm9yIEtleVN5c3RlbSBzdXBwb3J0IHdpdGggJXMgYW5k
IHR5cGUgJXM6ICVzIiwga2V5U3lzdGVtLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0ZjgoKS5k
YXRhKCksIGJvb2xGb3JQcmludGluZyhyZXN1bHQpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1NZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6OmV4dGVuZGVkU3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW5naW5lU3VwcG9ydFBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMsIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgcmVzdWx0KQotewotICAg
IFVOVVNFRF9QQVJBTShwYXJhbWV0ZXJzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19Ci0K
LSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFi
NWE5M2RmNTZjOTE0NTM1MjU4ZDMxNGU3YzJlNzQ2YTU5NmNmYWYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaAorKysgL2Rl
di9udWxsCkBAIC0xLDMyNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA5
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
Q29sbGFib3JhIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
LCAyMDE1LCAyMDE2IElnYWxpYSBTLkwKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZV9oCi0jZGVmaW5lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2VfaAotI2lmIEVOQUJM
RShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKLQotI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5o
IgotI2luY2x1ZGUgIkdTdHJlYW1lckVNRVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIk1haW5UaHJl
YWROb3RpZmllci5oIgotI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z3N0L2dzdC5o
PgotI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1hcGhvcmUuaD4KLQotI2lmIFVTRShHU1RSRUFNRVJf
R0wpCi0jaWYgVVNFKExJQkVQT1hZKQotLy8gSW5jbHVkZSB0aGUgPGVwb3h5L2dsLmg+IGhlYWRl
ciBiZWZvcmUgPGdzdC9nbC9nbC5oPi4KLSNpbmNsdWRlIDxlcG94eS9nbC5oPgotCi0vLyBXb3Jr
YXJvdW5kIGJ1aWxkIGlzc3VlIHdpdGggUlBpIHVzZXJsYW5kIEdMRVN2MiBoZWFkZXJzIGFuZCBs
aWJlcG94eSA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTg1NjM5PgotI2lmICFHU1RfQ0hFQ0tfVkVS
U0lPTigxLCAxNCwgMCkKLSNpbmNsdWRlIDxnc3QvZ2wvZ3N0Z2xjb25maWcuaD4KLSNpZiBkZWZp
bmVkKEdTVF9HTF9IQVZFX1dJTkRPV19ESVNQTUFOWCkgJiYgR1NUX0dMX0hBVkVfV0lORE9XX0RJ
U1BNQU5YCi0jZGVmaW5lIF9fZ2wyX2hfCi0jdW5kZWYgR1NUX0dMX0hBVkVfR0xTWU5DCi0jZGVm
aW5lIEdTVF9HTF9IQVZFX0dMU1lOQyAxCi0jZW5kaWYKLSNlbmRpZiAvLyAhR1NUX0NIRUNLX1ZF
UlNJT04oMSwgMTQsIDApCi0jZW5kaWYgLy8gVVNFKExJQkVQT1hZKQotCi0jZGVmaW5lIEdTVF9V
U0VfVU5TVEFCTEVfQVBJCi0jaW5jbHVkZSA8Z3N0L2dsL2dsLmg+Ci0jdW5kZWYgR1NUX1VTRV9V
TlNUQUJMRV9BUEkKLSNlbmRpZgotCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotI2lmIFVTRShOSUNPU0lBKQotI2luY2x1ZGUgIk5pY29z
aWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgotI2Vsc2UKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIKLSNlbmRpZgotI2VuZGlmCi0K
LXR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9sdW1lOwotdHlwZWRl
ZiBzdHJ1Y3QgX0dzdFZpZGVvSW5mbyBHc3RWaWRlb0luZm87Ci10eXBlZGVmIHN0cnVjdCBfR3N0
R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKLXR5cGVkZWYgc3RydWN0IF9Hc3RHTERpc3BsYXkgR3N0
R0xEaXNwbGF5OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpdG1hcFRleHR1cmVH
TDsKLWNsYXNzIEdMQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBWaWRl
b1RleHR1cmVDb3BpZXJHU3RyZWFtZXI7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi1j
bGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0KLXZvaWQgcmVn
aXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVtZW50cygpOwotCi0vLyBVc2UgZWFnZXIgaW5pdGlhbGl6
YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBzaW5jZSB3ZSBjYWxsIG1ha2VXZWFrUHRyKCkg
ZnJvbSBhbm90aGVyIHRocmVhZC4KLWNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2UgOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlLCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSwgV2Vha1B0ckZhY3RvcnlJbml0
aWFsaXphdGlvbjo6RWFnZXI+Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotI2lmIFVTRShO
SUNPU0lBKQotICAgICwgcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsOjpDbGllbnQKLSNlbHNlCi0gICAgLCBwdWJsaWMgUGxhdGZvcm1MYXllcgotI2VuZGlmCi0j
ZW5kaWYKLXsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgdm9pZCBpbml0aWFsaXplRGVidWdDYXRlZ29yeSgpOwotCi0gICAgdmlydHVhbCB+TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSgpOwotCi0gICAgRmxvYXRTaXplIG5hdHVyYWxTaXpl
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldFZvbHVtZShmbG9hdCkgb3ZlcnJpZGU7
Ci0gICAgZmxvYXQgdm9sdW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSNpZiBVU0UoR1NUUkVBTUVS
X0dMKQotICAgIGJvb2wgZW5zdXJlR3N0R0xDb250ZXh0KCk7Ci0gICAgR3N0Q29udGV4dCogcmVx
dWVzdEdMQ29udGV4dChjb25zdCBjaGFyKiBjb250ZXh0VHlwZSk7Ci0jZW5kaWYKLSAgICB2b2lk
IHNldE11dGVkKGJvb2wpIG92ZXJyaWRlOwotICAgIGJvb2wgbXV0ZWQoKSBjb25zdDsKLQotICAg
IE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgc2V0
U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaXplQ2hhbmdlZCgpOwot
Ci0gICAgLy8gUHJlZmVyIE1lZGlhVGltZSBiYXNlZCBtZXRob2RzIG92ZXIgZmxvYXQgYmFzZWQu
Ci0gICAgZmxvYXQgZHVyYXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBkdXJhdGlvbk1l
ZGlhVGltZSgpLnRvRmxvYXQoKTsgfQotICAgIGRvdWJsZSBkdXJhdGlvbkRvdWJsZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGR1cmF0aW9uTWVkaWFUaW1lKCkudG9Eb3VibGUoKTsgfQotICAg
IE1lZGlhVGltZSBkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIE1l
ZGlhVGltZTo6emVyb1RpbWUoKTsgfQotICAgIGZsb2F0IGN1cnJlbnRUaW1lKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gY3VycmVudE1lZGlhVGltZSgpLnRvRmxvYXQoKTsgfQotICAgIGRvdWJs
ZSBjdXJyZW50VGltZURvdWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGN1cnJlbnRNZWRp
YVRpbWUoKS50b0RvdWJsZSgpOyB9Ci0gICAgTWVkaWFUaW1lIGN1cnJlbnRNZWRpYVRpbWUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7IH0KLSAgICB2b2lk
IHNlZWsoZmxvYXQgdGltZSkgb3ZlcnJpZGUgeyBzZWVrKE1lZGlhVGltZTo6Y3JlYXRlV2l0aEZs
b2F0KHRpbWUpKTsgfQotICAgIHZvaWQgc2Vla0RvdWJsZShkb3VibGUgdGltZSkgb3ZlcnJpZGUg
eyBzZWVrKE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSh0aW1lKSk7IH0KLSAgICB2b2lkIHNl
ZWsoY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGUgeyB9Ci0gICAgZmxvYXQgbWF4VGltZVNlZWth
YmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbWF4TWVkaWFUaW1lU2Vla2FibGUoKS50b0Zs
b2F0KCk7IH0KLSAgICBNZWRpYVRpbWUgbWF4TWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7IH0KLSAgICBkb3VibGUgbWluVGlt
ZVNlZWthYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbWluTWVkaWFUaW1lU2Vla2FibGUo
KS50b0Zsb2F0KCk7IH0KLSAgICBNZWRpYVRpbWUgbWluTWVkaWFUaW1lU2Vla2FibGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7IH0KLQotICAgIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAg
ICBib29sIGhhc1NpbmdsZVNlY3VyaXR5T3JpZ2luKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgTWVkaWFUaW1lIG1heFRpbWVMb2FkZWQoKSBjb25zdCB7IHJl
dHVybiBNZWRpYVRpbWU6Onplcm9UaW1lKCk7IH0KLQotICAgIGJvb2wgc3VwcG9ydHNGdWxsc2Ny
ZWVuKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBNZWRpYVBsYXllcjo6TW92aWVMb2FkVHlwZSBt
b3ZpZUxvYWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGlzTGl2ZVN0
cmVhbSgpIGNvbnN0ID0gMDsKLQotICAgIE1lZGlhUGxheWVyKiBtZWRpYVBsYXllcigpIGNvbnN0
IHsgcmV0dXJuIG1fcGxheWVyOyB9Ci0KLSAgICB1bnNpZ25lZCBkZWNvZGVkRnJhbWVDb3VudCgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHVuc2lnbmVkIGRyb3BwZWRGcmFtZUNvdW50KCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdW5zaWduZWQgYXVkaW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdW5zaWduZWQgdmlkZW9EZWNvZGVkQnl0ZUNvdW50KCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGFjY2VsZXJhdGVkUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgb3ZlcnJp
ZGU7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOwotI2lmIFBMQVRGT1JNKFdJTl9DQUlSTykKLSAg
ICAvLyBGSVhNRTogQWNjZWxlcmF0ZWQgcmVuZGVyaW5nIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRl
ZCBmb3IgV2luQ2Fpcm8geWV0LgotICAgIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZFJlbmRlcmlu
ZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZWxzZQotICAgIGJvb2wgc3Vw
cG9ydHNBY2NlbGVyYXRlZFJlbmRlcmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQotICAgIHZv
aWQgY2RtSW5zdGFuY2VBdHRhY2hlZChDRE1JbnN0YW5jZSYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y2RtSW5zdGFuY2VEZXRhY2hlZChDRE1JbnN0YW5jZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgaGFu
ZGxlUHJvdGVjdGlvbkV2ZW50KEdzdEV2ZW50Kik7Ci0gICAgdmlydHVhbCB2b2lkIGF0dGVtcHRU
b0RlY3J5cHRXaXRoTG9jYWxJbnN0YW5jZSgpOwotICAgIHZvaWQgYXR0ZW1wdFRvRGVjcnlwdFdp
dGhJbnN0YW5jZShDRE1JbnN0YW5jZSYpIGZpbmFsOwotICAgIHZvaWQgaW5pdGlhbGl6YXRpb25E
YXRhRW5jb3VudGVyZWQoSW5pdERhdGEmJik7Ci0gICAgdm9pZCBzZXRXYWl0aW5nRm9yS2V5KGJv
b2wpOwotICAgIGJvb2wgd2FpdGluZ0ZvcktleSgpIGNvbnN0IG92ZXJyaWRlOwotI2VuZGlmCi0K
LSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c0tleVN5c3RlbShjb25zdCBTdHJpbmcmIGtleVN5c3Rl
bSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgc3RhdGljIE1lZGlhUGxheWVyOjpTdXBw
b3J0c1R5cGUgZXh0ZW5kZWRTdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbmdpbmVTdXBwb3J0UGFy
YW1ldGVycyYsIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUpOwotCi0jaWYgVVNFKEdTVFJFQU1F
Ul9HTCkKLSAgICBib29sIGNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBHQzNEaW50LCBHQzNEZW51
bSwgR0MzRGVudW0sIEdDM0RlbnVtLCBib29sLCBib29sKSBvdmVycmlkZTsKLSAgICBOYXRpdmVJ
bWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRUaW1lKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLQot
ICAgIHZvaWQgc2V0VmlkZW9Tb3VyY2VPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uKTsKLSAg
ICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0KCk7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVTeW5jTWVzc2FnZShHc3RNZXNzYWdlKik7Ci0K
LXByb3RlY3RlZDoKLSAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKE1lZGlhUGxh
eWVyKik7Ci0gICAgdmlydHVhbCBHc3RFbGVtZW50KiBjcmVhdGVWaWRlb1NpbmsoKTsKLQotI2lm
IFVTRShHU1RSRUFNRVJfSE9MRVBVTkNIKQotICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUhvbGVQdW5j
aFZpZGVvU2luaygpOwotICAgIHZvaWQgcHVzaE5leHRIb2xlUHVuY2hCdWZmZXIoKTsKLSAgICBi
b29sIHNob3VsZElnbm9yZUludHJpbnNpY1NpemUoKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0j
ZW5kaWYKLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0gICAgc3RhdGljIEdzdEZsb3dSZXR1cm4g
bmV3U2FtcGxlQ2FsbGJhY2soR3N0RWxlbWVudCosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UqKTsKLSAgICBzdGF0aWMgR3N0Rmxvd1JldHVybiBuZXdQcmVyb2xsQ2FsbGJhY2soR3N0
RWxlbWVudCosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UqKTsKLSAgICB2b2lkIGZs
dXNoQ3VycmVudEJ1ZmZlcigpOwotICAgIEdzdEVsZW1lbnQqIGNyZWF0ZUdMQXBwU2luaygpOwot
ICAgIEdzdEVsZW1lbnQqIGNyZWF0ZVZpZGVvU2lua0dMKCk7Ci0gICAgR3N0R0xDb250ZXh0KiBn
c3RHTENvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2dsQ29udGV4dC5nZXQoKTsgfQotICAgIEdz
dEdMRGlzcGxheSogZ3N0R0xEaXNwbGF5KCkgY29uc3QgeyByZXR1cm4gbV9nbERpc3BsYXkuZ2V0
KCk7IH0KLSAgICB2b2lkIGVuc3VyZUdMVmlkZW9TaW5rQ29udGV4dCgpOwotI2VuZGlmCi0KLSNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgdm9pZCBwdXNoVGV4dHVyZVRvQ29tcG9zaXRv
cigpOwotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92
ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQo
KSBvdmVycmlkZTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICBHc3RFbGVtZW50KiB2aWRlb1Npbmso
KSBjb25zdCB7IHJldHVybiBtX3ZpZGVvU2luay5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRTdHJl
YW1Wb2x1bWVFbGVtZW50KEdzdFN0cmVhbVZvbHVtZSopOwotICAgIHZpcnR1YWwgR3N0RWxlbWVu
dCogY3JlYXRlQXVkaW9TaW5rKCkgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgR3N0RWxlbWVu
dCogYXVkaW9TaW5rKCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgdm9pZCBzZXRQaXBlbGlu
ZShHc3RFbGVtZW50Kik7Ci0KLSAgICB2b2lkIHRyaWdnZXJSZXBhaW50KEdzdFNhbXBsZSopOwot
ICAgIHZvaWQgcmVwYWludCgpOwotICAgIHZvaWQgY2FuY2VsUmVwYWludChib29sIGRlc3Ryb3lp
bmcgPSBmYWxzZSk7Ci0KLSAgICBzdGF0aWMgdm9pZCByZXBhaW50Q2FsbGJhY2soTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSosIEdzdFNhbXBsZSopOwotICAgIHN0YXRpYyB2b2lkIHJl
cGFpbnRDYW5jZWxsZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKik7
Ci0KLSAgICB2b2lkIG5vdGlmeVBsYXllck9mVm9sdW1lQ2hhbmdlKCk7Ci0gICAgdm9pZCBub3Rp
ZnlQbGF5ZXJPZk11dGUoKTsKLQotICAgIHN0YXRpYyB2b2lkIHZvbHVtZUNoYW5nZWRDYWxsYmFj
ayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKik7Ci0gICAgc3RhdGljIHZvaWQgbXV0
ZUNoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlKik7Ci0KLSNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCi0gICAgdm9pZCB1cGRhdGVUZXh0dXJlTWFwcGVyRmxh
Z3MoKTsKLSAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIG1fdGV4dHVyZU1hcHBlckZsYWdzOwot
I2VuZGlmCi0KLSAgICBlbnVtIE1haW5UaHJlYWROb3RpZmljYXRpb24gewotICAgICAgICBWaWRl
b0NoYW5nZWQgPSAxIDw8IDAsCi0gICAgICAgIFZpZGVvQ2Fwc0NoYW5nZWQgPSAxIDw8IDEsCi0g
ICAgICAgIEF1ZGlvQ2hhbmdlZCA9IDEgPDwgMiwKLSAgICAgICAgVm9sdW1lQ2hhbmdlZCA9IDEg
PDwgMywKLSAgICAgICAgTXV0ZUNoYW5nZWQgPSAxIDw8IDQsCi0jaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQotICAgICAgICBUZXh0Q2hhbmdlZCA9IDEgPDwgNSwKLSNlbmRpZgotICAgICAgICBTaXpl
Q2hhbmdlZCA9IDEgPDwgNiwKLSAgICAgICAgU3RyZWFtQ29sbGVjdGlvbkNoYW5nZWQgPSAxIDw8
IDcKLSAgICB9OwotCi0gICAgUmVmPE1haW5UaHJlYWROb3RpZmllcjxNYWluVGhyZWFkTm90aWZp
Y2F0aW9uPj4gbV9ub3RpZmllcjsKLSAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7Ci0gICAgR1Jl
ZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOwotICAgIEdSZWZQdHI8R3N0U3RyZWFtVm9sdW1l
PiBtX3ZvbHVtZUVsZW1lbnQ7Ci0gICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ZpZGVvU2luazsK
LSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZnBzU2luazsKLSAgICBNZWRpYVBsYXllcjo6UmVh
ZHlTdGF0ZSBtX3JlYWR5U3RhdGU7Ci0gICAgbXV0YWJsZSBNZWRpYVBsYXllcjo6TmV0d29ya1N0
YXRlIG1fbmV0d29ya1N0YXRlOwotICAgIEludFNpemUgbV9zaXplOwotICAgIG11dGFibGUgTG9j
ayBtX3NhbXBsZU11dGV4OwotICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBtX3NhbXBsZTsKLQotICAg
IG11dGFibGUgRmxvYXRTaXplIG1fdmlkZW9TaXplOwotICAgIGJvb2wgbV91c2luZ0ZhbGxiYWNr
VmlkZW9TaW5rIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRl
ZCB7IGZhbHNlIH07Ci0KLSAgICBDb25kaXRpb24gbV9kcmF3Q29uZGl0aW9uOwotICAgIExvY2sg
bV9kcmF3TXV0ZXg7Ci0gICAgYm9vbCBtX2Rlc3Ryb3lpbmcgeyBmYWxzZSB9OwotICAgIFJ1bkxv
b3A6OlRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U+IG1fZHJhd1RpbWVyOwot
Ci0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJlZjxO
aWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7Ci0j
ZW5kaWYKLSNlbmRpZgotCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBHUmVmUHRyPEdzdEdM
Q29udGV4dD4gbV9nbENvbnRleHQ7Ci0gICAgR1JlZlB0cjxHc3RHTERpc3BsYXk+IG1fZ2xEaXNw
bGF5OwotICAgIEdSZWZQdHI8R3N0Q29udGV4dD4gbV9nbERpc3BsYXlFbGVtZW50Q29udGV4dDsK
LSAgICBHUmVmUHRyPEdzdENvbnRleHQ+IG1fZ2xBcHBFbGVtZW50Q29udGV4dDsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8VmlkZW9UZXh0dXJlQ29waWVyR1N0cmVhbWVyPiBtX3ZpZGVvVGV4dHVyZUNv
cGllcjsKLQotICAgIEdSZWZQdHI8R3N0R0xDb2xvckNvbnZlcnQ+IG1fY29sb3JDb252ZXJ0Owot
ICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9jb2xvckNvbnZlcnRJbnB1dENhcHM7Ci0gICAgR1JlZlB0
cjxHc3RDYXBzPiBtX2NvbG9yQ29udmVydE91dHB1dENhcHM7Ci0jZW5kaWYKLQotICAgIEltYWdl
T3JpZW50YXRpb24gbV92aWRlb1NvdXJjZU9yaWVudGF0aW9uOwotCi0jaWYgRU5BQkxFKEVOQ1JZ
UFRFRF9NRURJQSkKLSAgICBCaW5hcnlTZW1hcGhvcmUgbV9jZG1BdHRhY2htZW50U2VtYXBob3Jl
OwotICAgIFJlZlB0cjxjb25zdCBDRE1JbnN0YW5jZT4gbV9jZG1JbnN0YW5jZTsKLQotICAgIExv
Y2sgbV9wcm90ZWN0aW9uTXV0ZXg7IC8vIEd1YXJkcyBhY2Nlc3MgdG8gbV9oYW5kbGVkUHJvdGVj
dGlvbkV2ZW50cy4KLSAgICBIYXNoU2V0PHVpbnQzMl90PiBtX2hhbmRsZWRQcm90ZWN0aW9uRXZl
bnRzOwotCi0gICAgYm9vbCBtX3dhaXRpbmdGb3JLZXkgeyBmYWxzZSB9OwotI2VuZGlmCi0KLSAg
ICBPcHRpb25hbDxHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybT4gbV92aWRlb0RlY29kZXJQbGF0Zm9y
bTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlYzljMmNiYjZmZGRk
MmVjZGY4NjhmNGY3ZGJlNjJmNzkxODVmMjM5Li40YjVjYWM3M2VjMzU4NmUyNjY0YzQ2NDBjOWEx
MTMzMDYxYzU2NmRhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMTEtMTkgIENoYXJsaWUgVHVybmVyICA8Y3R1
cm5lckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEZsYXR0ZW4gTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyIGludG8gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0MzUyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgUGhpbGlwcGUgTm9ybWFuZC4KKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weTogVGhlIGJhc2UgY2xhc3Mgbm8gbG9uZ2VyCisg
ICAgICAgIGV4aXN0cywgcGVyZm9ybSB0aGUgY2hlY2sgb24gdGhlIHBsYXllciBwcml2YXRlLgor
CiAyMDE5LTExLTI1ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR1RLXVtXUEVdIGxpYmdwZy1lcnJvciBmYWlscyB0byBidWlsZCB3aXRoIGdhd2sgNQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IDhmNzk1Njc0MGVlYzNl
ZDE2NzUzYjJiZDBiYTk1MTI4MDEyYjZmMjAuLjQzNGE2MWVjYjFmMDlhNzAzMGMwODg1NTcxZDVm
MGM5ZjQ1NTU1YmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAg
LTE3Nyw3ICsxNzcsNyBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgKFsKICAgICAg
ICMgVG8gdXNlIEdTdHJlYW1lciBHTCB3aXRob3V0IGNvbmZsaWN0cyBvZiBHTCBzeW1ib2xzLAog
ICAgICAgIyB3ZSBzaG91bGQgaW5jbHVkZSBnc3QvZ2wvZ2wuaCBiZWZvcmUgaW5jbHVkaW5nIE9w
ZW5HTFtFU11TaGltcwotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdw
bGF0Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZS5jcHAnKV0sCisgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3Jl
JywgJ3BsYXRmb3JtJywgJ2dyYXBoaWNzJywgJ2dzdHJlYW1lcicsICdNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwJyldLAogICAgICBbIi1idWlsZC9pbmNsdWRlX29yZGVyIl0pLAogCiAg
ICAgKFsK
</data>

          </attachment>
      

    </bug>

</bugzilla>