<?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>162874</bug_id>
          
          <creation_ts>2016-10-03 12:06:24 -0700</creation_ts>
          <short_desc>[GStreamer][MSE][EME] Append Pipeline</short_desc>
          <delta_ts>2016-10-26 01:40:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local 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>157314</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrique Ocaña">eocanha</reporter>
          <assigned_to name="Enrique Ocaña">eocanha</assigned_to>
          <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1235842</commentid>
    <comment_count>0</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-03 12:06:24 -0700</bug_when>
    <thetext>Add specific class to manage the processing of SourceBuffer data appending on the GStreamer platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235848</commentid>
    <comment_count>1</comment_count>
      <attachid>290503</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-03 12:18:35 -0700</bug_when>
    <thetext>Created attachment 290503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235852</commentid>
    <comment_count>2</comment_count>
      <attachid>290504</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-03 12:22:45 -0700</bug_when>
    <thetext>Created attachment 290504
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236127</commentid>
    <comment_count>3</comment_count>
      <attachid>290504</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-10-04 03:41:03 -0700</bug_when>
    <thetext>Comment on attachment 290504
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:41
&gt; +

Remove extra line

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:93
&gt; +static void appendPipelineElementMessageCallback(GstBus*, GstMessage* message, AppendPipeline* ap)
&gt; +{
&gt; +    ap-&gt;handleElementMessage(message);

ap -&gt; appendPipeline

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:330
&gt; +#ifndef DEBUG_APPEND_PIPELINE_PADS

It looks like this is !LOG_DISABLED now.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:357
&gt; +        totalAudio++;
&gt; +        m_id = totalAudio;
&gt; +        break;
&gt; +    case Video:
&gt; +        totalVideo++;
&gt; +        m_id = totalVideo;
&gt; +        break;
&gt; +    case Text:
&gt; +        totalText++;
&gt; +        m_id = totalText;

remove totalAudio++ and replace m_id = ++totalAudio;

Applies also to video and text

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:362
&gt; +        GST_DEBUG(&quot;Trying to get id for a pipeline of Unknown/Invalid type&quot;);
&gt; +        ASSERT_NOT_REACHED();

If we are asserting here, this should be at least a GST_WARNING or a GST_ERROR

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:384
&gt; +    bool ok = false;

Move this after the if (to the latest place where it can be declared.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:532
&gt; +    GstStructure* structure = gst_caps_get_structure(m_demuxerSrcPadCaps.get(), 0);
&gt; +    const gchar* structureName = gst_structure_get_name(structure);
&gt; +    GstVideoInfo info;
&gt; +    bool sizeConfigured = false;

structure and sizeConfigured should be moved to after setting m_streamType (latest place of declaration)

structureName and info should be moved to inside if (!sizeConfigured) {

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:538
&gt; +        const gchar* originalMediaType = gst_structure_get_string(structure, &quot;original-media-type&quot;);

This can be moved to just before it is used (and therefore we assert first, which is always useful)

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:606
&gt; +    // This means that we&apos;re right after a new track has appeared. Otherwise, it&apos;s a caps change inside the same track.
&gt; +    bool previousCapsWereNull = !m_appsinkCaps;

I think we can move this to just before the gst_caps_replace if.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:707
&gt; +    // Ignored. Operation completion will be managed by the Aborting-&gt;NotStarted transition.
&gt; +    case Aborting:
&gt; +        return;
&gt; +    // Finish Ongoing and Sampling states.
&gt; +    case Ongoing:
&gt; +        setAppendState(DataStarve);
&gt; +        break;
&gt; +    case Sampling:
&gt; +        setAppendState(LastSample);
&gt; +        break;

Move these comments to inside their corresponding case statements.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:739
&gt; +        GST_DEBUG(&quot;Unsupported or unknown stream type&quot;);
&gt; +        ASSERT_NOT_REACHED();

If we are asserting here, this should be at least a GST_WARNING or a GST_ERROR

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:865
&gt; +        GST_DEBUG(&quot;AppendPipeline has been disabled, ignoring this sample&quot;);
&gt; +        return GST_FLOW_ERROR;

This also looks look like GST_WARNING or similar.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:868
&gt; +    m_newSampleLock.lock();
&gt; +    bool invalid = !m_playerPrivate || m_appendState == Invalid;
&gt; +    m_newSampleLock.unlock();
&gt; +
&gt; +    // Even if we&apos;re disabled, it&apos;s important to pull the sample out anyway to
&gt; +    // avoid deadlocks when changing to GST_STATE_NULL having a non empty appsink.
&gt; +    GRefPtr&lt;GstSample&gt; sample = adoptGRef(gst_app_sink_pull_sample(GST_APP_SINK(appsink)));
&gt; +
&gt; +    if (invalid) {
&gt; +        GST_DEBUG(&quot;AppendPipeline has been disabled, ignoring this sample&quot;);
&gt; +        return GST_FLOW_ERROR;
&gt; +    }
&gt; +
&gt; +    LockHolder locker(m_newSampleLock);

I think it would make sense to move getting the sample to the first place (after the assertion) and then we could apply the LockHolder to the whole function. This happens if gst_app_sink_pull_sample does generate deadlocks with m_newSampleLock, otherwise we could lock the whole function with the LockHolder.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:877
&gt; +        // an exceptional condition (entered in Invalid state, destructor, etc.)

This sentence lacks a period at the end.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:893
&gt; +    // Only one Stream per demuxer is supported.

Why is Stream capitalized?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:938
&gt; +#if (ENABLE(ENCRYPTED_MEDIA) || ENABLE(ENCRYPTED_MEDIA_V2))

I think this ENCRYPTED_MEDIA is gone, you need to rebase.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:943
&gt; +            GRefPtr&lt;GstPad&gt; decryptorSrcPad = adoptGRef(gst_element_get_static_pad(m_decryptor.get(), &quot;src&quot;));

This var is just used for the second link and can be declared just before that, right?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:968
&gt; +    // Only one Stream per demuxer is supported.

Stream capitalized?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:978
&gt; +#if (!(LOG_DISABLED || GST_DISABLE_GST_DEBUG))

We use GST_ log only so we can avoid checking for LOG_DISABLED

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:1007
&gt; +        GST_DEBUG(&quot;(no data)&quot;);
&gt; +        GST_DEBUG(&quot;received all pending samples&quot;);

collapse these two messages: GST_DEBUG(&quot;no data, received all pending samples&quot;);

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.h:32
&gt; +

Remove this extra line

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.h:110
&gt; +    // The demuxer has one src Stream only, so only one appsink is needed and linked to it.

Why is Stream capitalized?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.h:125
&gt; +#ifdef DEBUG_APPEND_PIPELINE_PADS

It looks like this is !LOG_DISABLED now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1236128</commentid>
    <comment_count>4</comment_count>
      <attachid>290504</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2016-10-04 03:43:31 -0700</bug_when>
    <thetext>Comment on attachment 290504
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:115
&gt; +    GST_DEBUG(&quot;%p&quot;, this);

Please remove this or make the message significant :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237969</commentid>
    <comment_count>5</comment_count>
      <attachid>290504</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-10-08 07:36:38 -0700</bug_when>
    <thetext>Comment on attachment 290504
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:540
&gt; +        // Any previous decriptor should have been removed from the pipeline by disconnectFromAppSinkFromStreamingThread()

decriptor -&gt; decryptor and period at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240749</commentid>
    <comment_count>6</comment_count>
      <attachid>291756</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-16 11:35:31 -0700</bug_when>
    <thetext>Created attachment 291756
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240750</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-16 11:36:23 -0700</bug_when>
    <thetext>Attachment 291756 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.h:21:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240756</commentid>
    <comment_count>8</comment_count>
      <attachid>291757</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-16 12:03:07 -0700</bug_when>
    <thetext>Created attachment 291757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240950</commentid>
    <comment_count>9</comment_count>
      <attachid>291757</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2016-10-17 07:50:19 -0700</bug_when>
    <thetext>Comment on attachment 291757
Patch

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

Apart from these two nits, LGTM. As I wrote part of this code I guess somebody else will have to give it a look and r+.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:338
&gt; +    static gint totalAudio = 0;
&gt; +    static gint totalVideo = 0;
&gt; +    static gint totalText = 0;

These variables can be moved to after the first if.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:529
&gt; +        // Any previous decriptor should have been removed from the pipeline by disconnectFromAppSinkFromStreamingThread()

decriptor -&gt; decryptor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1241367</commentid>
    <comment_count>10</comment_count>
      <attachid>291757</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-10-18 00:57:03 -0700</bug_when>
    <thetext>Comment on attachment 291757
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:98
&gt; +AppendPipeline::AppendPipeline(PassRefPtr&lt;MediaSourceClientGStreamerMSE&gt; mediaSourceClient, PassRefPtr&lt;SourceBufferPrivateGStreamer&gt; sourceBufferPrivate, MediaPlayerPrivateGStreamerMSE* playerPrivate)

The parameter types should be adjusted to the nullness of the arguments being passed. RefPtr&lt;&gt; if the first two are possibly null, Ref&lt;&gt; if they&apos;re definitely not (but PassRefPtr&lt;&gt; should not be used).

Same for playerPrivate -- if it&apos;s not null, then pass it as a reference, even if in the class you have to store it as a pointer because it&apos;s nulled out before the destruction.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:171
&gt; +    m_newSampleLock.lock();
&gt; +    setAppendState(Invalid);
&gt; +    m_newSampleCondition.notifyOne();
&gt; +    m_newSampleLock.unlock();

Use a scope and a lock holder inside it.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:176
&gt; +    m_padAddRemoveLock.lock();
&gt; +    m_playerPrivate = nullptr;
&gt; +    m_padAddRemoveCondition.notifyOne();
&gt; +    m_padAddRemoveLock.unlock();

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:218
&gt; +    if (m_appsinkCaps)
&gt; +        m_appsinkCaps = nullptr;

Don&apos;t null-check it, just wreck it.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:221
&gt; +    if (m_demuxerSrcPadCaps)
&gt; +        m_demuxerSrcPadCaps = nullptr;

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:236
&gt; +    m_newSampleLock.lock();
&gt; +    // Make sure that AppendPipeline won&apos;t process more data from now on and
&gt; +    // instruct handleNewSample to abort itself from now on as well.
&gt; +    setAppendState(Invalid);
&gt; +
&gt; +    // Awake any pending handleNewSample operation in the streaming thread.
&gt; +    m_newSampleCondition.notifyOne();
&gt; +    m_newSampleLock.unlock();

Scope + lock holder.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:241
&gt; +    m_padAddRemoveLock.lock();
&gt; +    m_playerPrivate = nullptr;
&gt; +    m_padAddRemoveCondition.notifyOne();
&gt; +    m_padAddRemoveLock.unlock();

Scope + lock holder.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:338
&gt;&gt; +    static gint totalText = 0;
&gt; 
&gt; These variables can be moved to after the first if.

Prepend them with &apos;s_&apos; to denote they are static.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:546
&gt; +            gst_structure_get_int(structure, &quot;width&quot;, &amp;width);
&gt; +            if (gst_structure_get_int(structure, &quot;height&quot;, &amp;height)) {

The return value for both of these should be tested.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:548
&gt; +                gint ratioNumerator = 1;
&gt; +                gint ratioDenominator = 1;

Use int instead of gint.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:568
&gt; +        const gchar* structureName = gst_structure_get_name(structure);

const char*.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:643
&gt; +    m_newSampleLock.lock();

Scope + lock holder ...

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:654
&gt; +    // Ignore samples if we&apos;re not expecting them. Refuse processing if we&apos;re in Invalid state.
&gt; +    if (m_appendState != Ongoing &amp;&amp; m_appendState != Sampling) {
&gt; +        GST_WARNING(&quot;Unexpected sample, appendState=%s&quot;, dumpAppendState(m_appendState));
&gt; +        // FIXME: Return ERROR and find a more robust way to detect that all the
&gt; +        // data has been processed, so we don&apos;t need to resort to these hacks.
&gt; +        // All in all, return OK, even if it&apos;s not the proper thing to do. We don&apos;t want to break the demuxer.
&gt; +        m_flowReturn = GST_FLOW_OK;
&gt; +        m_newSampleCondition.notifyOne();
&gt; +        return;
&gt; +    }

... and here&apos;s the reason why you should prefer that -- you&apos;re not unlocking m_newSampleLock here.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:667
&gt; +        m_newSampleCondition.notifyOne();
&gt; +        return;

And here.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:761
&gt; +    m_newSampleLock.lock();
&gt; +    m_newSampleCondition.notifyOne();
&gt; +    gst_element_set_state(m_pipeline.get(), GST_STATE_READY);
&gt; +    gst_element_get_state(m_pipeline.get(), nullptr, nullptr, 0);
&gt; +    m_newSampleLock.unlock();

Scope + lock holder.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:801
&gt; +    m_pendingBuffer.clear();

m_pendingBuffer = nullptr;

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:859
&gt; +    if (!(!m_playerPrivate || m_appendState == Invalid)) {

This test should be simplified.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:881
&gt; +    GRefPtr&lt;GstPad&gt; sinkSinkPad = adoptGRef(gst_element_get_static_pad(m_appsink.get(), &quot;sink&quot;));

sinkSinkPad?

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:886
&gt; +    gint64 timeLength = 0;

OK, I don&apos;t know at this point. The GLib typedefs are considered a mistake, that&apos;s clear. But I don&apos;t know to what degree we should be using them in this GStreamer-specific code.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:897
&gt; +        LockHolder locker(m_padAddRemoveLock);

YES

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:922
&gt; +    // Must be done in the thread we were called from (usually streaming thread).
&gt; +    bool isData = false;
&gt; +
&gt; +    switch (m_streamType) {
&gt; +    case WebCore::MediaSourceStreamTypeGStreamer::Audio:
&gt; +    case WebCore::MediaSourceStreamTypeGStreamer::Video:
&gt; +    case WebCore::MediaSourceStreamTypeGStreamer::Text:
&gt; +        isData = true;
&gt; +        break;
&gt; +    default:
&gt; +        break;
&gt; +    }
&gt; +
&gt; +    if (isData) {

This could all just be folded into a larger if test, like `if (m_streamType == ... || m_streamType == ... || m_streamType == ...)`. Or at least initialize isData directly through the || expressions.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:957
&gt; +    LockHolder locker(m_padAddRemoveLock);

YES

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:1035
&gt; +    gsize bufferSize = gst_buffer_get_size(buffer);

I guess it&apos;s fine.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.h:37
&gt; +    enum AppendState { Invalid, NotStarted, Ongoing, KeyNegotiation, DataStarve, Sampling, LastSample, Aborting };

This should be an enum class I think.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.h:91
&gt; +    RefPtr&lt;MediaSourceClientGStreamerMSE&gt; m_mediaSourceClient;
&gt; +    RefPtr&lt;SourceBufferPrivateGStreamer&gt; m_sourceBufferPrivate;
&gt; +    MediaPlayerPrivateGStreamerMSE* m_playerPrivate;

Extending the comment on the constructor parameter types:
- m_mediaSourceClient and m_sourceBufferPrivate are never expected to be null, so the constructor parameter types for these two should be Ref&lt;&gt;, as well as the types of these two members.
- m_playerPrivate can be nulled out, so a pointer type for the member is fine. I don&apos;t think the argument passed to the constructor can be null, so I&apos;d propose using a reference for that parameter type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1242577</commentid>
    <comment_count>11</comment_count>
      <attachid>292248</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-20 13:53:12 -0700</bug_when>
    <thetext>Created attachment 292248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243087</commentid>
    <comment_count>12</comment_count>
      <attachid>292401</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-21 14:20:23 -0700</bug_when>
    <thetext>Created attachment 292401
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1243684</commentid>
    <comment_count>13</comment_count>
      <attachid>292401</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-10-24 06:05:41 -0700</bug_when>
    <thetext>Comment on attachment 292401
Patch

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

LGTM.

&gt; Source/WebCore/platform/graphics/gstreamer/mse/AppendPipeline.cpp:337
&gt; +
&gt; +

One newline is enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244157</commentid>
    <comment_count>14</comment_count>
      <attachid>292738</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-25 02:00:11 -0700</bug_when>
    <thetext>Created attachment 292738
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244670</commentid>
    <comment_count>15</comment_count>
      <attachid>292888</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:18:27 -0700</bug_when>
    <thetext>Created attachment 292888
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244698</commentid>
    <comment_count>16</comment_count>
      <attachid>292888</attachid>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:40:44 -0700</bug_when>
    <thetext>Comment on attachment 292888
Patch

Clearing flags on attachment: 292888

Committed r207875: &lt;http://trac.webkit.org/changeset/207875&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244699</commentid>
    <comment_count>17</comment_count>
    <who name="Enrique Ocaña">eocanha</who>
    <bug_when>2016-10-26 01:40:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290503</attachid>
            <date>2016-10-03 12:18:35 -0700</date>
            <delta_ts>2016-10-03 12:22:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162874-20161003191525.patch</filename>
            <type>text/plain</type>
            <size>46426</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2VmNjdmNWI3ZGZjNmZk
NGQxN2NlNzAwM2JhYzlhYTMxNzNjMWZmYi4uNzE5NDU2NzIzMWI3YWY1ZmM4YTA1YmNkODM3MGE3
NThmZDJiY2NhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE2IEBACiAyMDE2LTEwLTAzICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgTWlz
c2luZyBpbmNsdWRlIGluIE1lZGlhRGVzY3JpcHRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjg3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG1pc3NpbmcgaGVhZGVyLgorCisgICAgICAg
ICogcGxhdGZvcm0vTWVkaWFEZXNjcmlwdGlvbi5oOgorCisyMDE2LTEwLTAzICBFbnJpcXVlIE9j
YcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dTdHJlYW1l
cl0gRHJhaW4gcXVlcnkgc3VwcG9ydAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYyODcyCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGMwODFiMjFmY2ZmZmMyMzQzYTA4ZTU0MmZhOTA4ZDVhYTA5YWQ5OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEsMTEwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAy
MDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXBwZW5kUGlwZWxp
bmUuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYgRU5BQkxFKE1F
RElBX1NPVVJDRSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiQXVkaW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyTWVkaWFEZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lck1l
ZGlhU2FtcGxlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlhRGVzY3Jp
cHRpb24uaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAv
Z3N0YXBwc2luay5oPgorI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVkZSA8
Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KKyNpbmNsdWRlIDxn
c3QvdmlkZW8vdmlkZW8uaD4KKworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKwordXNpbmcg
bmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIUxPR19ESVNBQkxF
RAorc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24geworICAgIEFwcGVuZFBpcGVsaW5lKiBhcHBl
bmRQaXBlbGluZTsKKyAgICBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbjsKKyAgICBndWxvbmcgcHJv
YmVJZDsKK307CisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBBcHBlbmRTdGF0ZShB
cHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGUgYXBwZW5kU3RhdGUpCit7CisgICAgc3dpdGNoIChh
cHBlbmRTdGF0ZSkgeworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpJbnZh
bGlkOgorICAgICAgICByZXR1cm4gIkludmFsaWQiOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6
OkFwcGVuZFN0YXRlOjpOb3RTdGFydGVkOgorICAgICAgICByZXR1cm4gIk5vdFN0YXJ0ZWQiOwor
ICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpPbmdvaW5nOgorICAgICAgICBy
ZXR1cm4gIk9uZ29pbmciOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpL
ZXlOZWdvdGlhdGlvbjoKKyAgICAgICAgcmV0dXJuICJLZXlOZWdvdGlhdGlvbiI7CisgICAgY2Fz
ZSBBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OkRhdGFTdGFydmU6CisgICAgICAgIHJldHVy
biAiRGF0YVN0YXJ2ZSI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OlNh
bXBsaW5nOgorICAgICAgICByZXR1cm4gIlNhbXBsaW5nIjsKKyAgICBjYXNlIEFwcGVuZFBpcGVs
aW5lOjpBcHBlbmRTdGF0ZTo6TGFzdFNhbXBsZToKKyAgICAgICAgcmV0dXJuICJMYXN0U2FtcGxl
IjsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6QWJvcnRpbmc6CisgICAg
ICAgIHJldHVybiAiQWJvcnRpbmciOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiKHVu
a25vd24pIjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwc3JjTmVl
ZERhdGEoR3N0QXBwU3JjKiwgZ3VpbnQsIEFwcGVuZFBpcGVsaW5lKik7CitzdGF0aWMgdm9pZCBh
cHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZChHc3RFbGVtZW50KiwgR3N0UGFkKiwgQXBwZW5k
UGlwZWxpbmUqKTsKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lRGVtdXhlclBhZFJlbW92ZWQo
R3N0RWxlbWVudCosIEdzdFBhZCosIEFwcGVuZFBpcGVsaW5lKik7CitzdGF0aWMgdm9pZCBhcHBl
bmRQaXBlbGluZUFwcHNpbmtDYXBzQ2hhbmdlZChHT2JqZWN0KiwgR1BhcmFtU3BlYyosIEFwcGVu
ZFBpcGVsaW5lKik7CitzdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxpbmVBcHBz
cmNEYXRhTGVhdmluZyhHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qLCBBcHBlbmRQaXBlbGluZSop
OworI2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBHc3RQYWRQcm9iZVJldHVybiBhcHBlbmRQaXBl
bGluZVBhZFByb2JlRGVidWdJbmZvcm1hdGlvbihHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qLCBz
dHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiopOworI2VuZGlmCitzdGF0aWMgR3N0Rmxvd1JldHVy
biBhcHBlbmRQaXBlbGluZUFwcHNpbmtOZXdTYW1wbGUoR3N0RWxlbWVudCosIEFwcGVuZFBpcGVs
aW5lKik7CitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUFwcHNpbmtFT1MoR3N0RWxlbWVudCos
IEFwcGVuZFBpcGVsaW5lKik7CisKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lRWxlbWVudE1l
c3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBBcHBlbmRQaXBlbGlu
ZSogYXApCit7CisgICAgYXAtPmhhbmRsZUVsZW1lbnRNZXNzYWdlKG1lc3NhZ2UpOworfQorCitz
dGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUFwcGxpY2F0aW9uTWVzc2FnZUNhbGxiYWNrKEdzdEJ1
cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkK
K3sKKyAgICBhcHBlbmRQaXBlbGluZS0+aGFuZGxlQXBwbGljYXRpb25NZXNzYWdlKG1lc3NhZ2Up
OworfQorCitBcHBlbmRQaXBlbGluZTo6QXBwZW5kUGlwZWxpbmUoUGFzc1JlZlB0cjxNZWRpYVNv
dXJjZUNsaWVudEdTdHJlYW1lck1TRT4gbWVkaWFTb3VyY2VDbGllbnQsIFBhc3NSZWZQdHI8U291
cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFKiBwbGF5ZXJQcml2YXRlKQorICAgIDogbV9tZWRpYVNvdXJj
ZUNsaWVudChtZWRpYVNvdXJjZUNsaWVudCkKKyAgICAsIG1fc291cmNlQnVmZmVyUHJpdmF0ZShz
b3VyY2VCdWZmZXJQcml2YXRlKQorICAgICwgbV9wbGF5ZXJQcml2YXRlKHBsYXllclByaXZhdGUp
CisgICAgLCBtX2lkKDApCisgICAgLCBtX2FwcHNyY0F0TGVhc3RBQnVmZmVyTGVmdChmYWxzZSkK
KyAgICAsIG1fYXBwc3JjTmVlZERhdGFSZWNlaXZlZChmYWxzZSkKKyAgICAsIG1fYXBwc3JjRGF0
YUxlYXZpbmdQcm9iZUlkKDApCisgICAgLCBtX2FwcGVuZFN0YXRlKE5vdFN0YXJ0ZWQpCisgICAg
LCBtX2Fib3J0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fc3RyZWFtVHlwZShVbmtub3duKQorewor
ICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIEdTVF9ERUJVRygiJXAiLCB0
aGlzKTsKKworICAgIC8vIEZJWE1FOiBnaXZlIGEgbmFtZSB0byB0aGUgcGlwZWxpbmUsIG1heWJl
IHJlbGF0ZWQgd2l0aCB0aGUgdHJhY2sgaXQncyBtYW5hZ2luZy4KKyAgICAvLyBUaGUgdHJhY2sg
bmFtZSBpcyBzdGlsbCB1bmtub3duIGF0IHRoaXMgdGltZSwgdGhvdWdoLgorICAgIG1fcGlwZWxp
bmUgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX25ldyhudWxscHRyKSk7CisKKyAgICBtX2J1cyA9
IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5n
ZXQoKSkpKTsKKyAgICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2gobV9idXMuZ2V0KCkpOworICAg
IGdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbihtX2J1cy5nZXQoKSk7CisKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fYnVzLmdldCgpLCAic3luYy1tZXNzYWdlOjplbGVtZW50Iiwg
R19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZUVsZW1lbnRNZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KG1fYnVzLmdldCgpLCAibWVzc2FnZTo6YXBwbGljYXRpb24i
LCBHX0NBTExCQUNLKGFwcGVuZFBpcGVsaW5lQXBwbGljYXRpb25NZXNzYWdlQ2FsbGJhY2spLCB0
aGlzKTsKKworICAgIC8vIFdlIGFzc2lnbiB0aGUgY3JlYXRlZCBpbnN0YW5jZXMgaGVyZSBpbnN0
ZWFkIG9mIGFkb3B0UmVmKCkgYmVjYXVzZSBnc3RfYmluX2FkZF9tYW55KCkKKyAgICAvLyBiZWxv
dyB3aWxsIGFscmVhZHkgdGFrZSB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYW5kIHdlIG5lZWQgYW4g
YWRkaXRpb25hbCBvbmUgZm9yIHVzLgorICAgIG1fYXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJhcHBzcmMiLCBudWxscHRyKTsKKyAgICBtX2RlbXV4ID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJxdGRlbXV4IiwgbnVsbHB0cik7CisgICAgbV9hcHBzaW5rID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJhcHBzaW5rIiwgbnVsbHB0cik7CisKKyAgICBnX29iamVjdF9zZXQo
R19PQkpFQ1QobV9kZW11eC5nZXQoKSksICJhbHdheXMtaG9ub3ItdGZkdCIsIFRSVUUsIG51bGxw
dHIpOworICAgIGdzdF9hcHBfc2lua19zZXRfZW1pdF9zaWduYWxzKEdTVF9BUFBfU0lOSyhtX2Fw
cHNpbmsuZ2V0KCkpLCBUUlVFKTsKKyAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jKEdTVF9CQVNF
X1NJTksobV9hcHBzaW5rLmdldCgpKSwgRkFMU0UpOworCisgICAgR1JlZlB0cjxHc3RQYWQ+IGFw
cHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5r
LmdldCgpLCAic2luayIpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGFwcHNpbmtQYWQuZ2V0KCks
ICJub3RpZnk6OmNhcHMiLCBHX0NBTExCQUNLKGFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFu
Z2VkKSwgdGhpcyk7CisKKyAgICBzZXRBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgR1JlZlB0cjxHc3RQYWQ+IGRlbXV4ZXJQYWQgPSBhZG9wdEdSZWYo
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9kZW11eC5nZXQoKSwgInNpbmsiKSk7CisgICAg
bV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5hcHBlbmRQaXBlbGluZSA9
IHRoaXM7CisgICAgbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5kZXNj
cmlwdGlvbiA9ICJkZW11eGVyIGRhdGEgZW50ZXJpbmciOworICAgIG1fZGVtdXhlckRhdGFFbnRl
cmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2JlKGRlbXV4
ZXJQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8
R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRp
b24pLCAmbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7
CisgICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5hcHBlbmRQaXBl
bGluZSA9IHRoaXM7CisgICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlv
bi5kZXNjcmlwdGlvbiA9ICJhcHBzaW5rIGRhdGEgZW50ZXJpbmciOworICAgIG1fYXBwc2lua0Rh
dGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2Jl
KGFwcHNpbmtQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0
X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5m
b3JtYXRpb24pLCAmbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbiwgbnVs
bHB0cik7CisjZW5kaWYKKworICAgIC8vIFRoZXNlIHNpZ25hbHMgd29uJ3QgYmUgY29ubmVjdGVk
IG91dHNpZGUgb2YgdGhlIGxpZmV0aW1lIG9mICJ0aGlzIi4KKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1fYXBwc3JjLmdldCgpLCAibmVlZC1kYXRhIiwgR19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZUFw
cHNyY05lZWREYXRhKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2RlbXV4LmdldCgp
LCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZCks
IHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kZW11eC5nZXQoKSwgInBhZC1yZW1vdmVk
IiwgR19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKSwgdGhpcyk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdChtX2FwcHNpbmsuZ2V0KCksICJuZXctc2FtcGxlIiwgR19DQUxM
QkFDSyhhcHBlbmRQaXBlbGluZUFwcHNpbmtOZXdTYW1wbGUpLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KG1fYXBwc2luay5nZXQoKSwgImVvcyIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxp
bmVBcHBzaW5rRU9TKSwgdGhpcyk7CisKKyAgICAvLyBBZGRfbWFueSB3aWxsIHRha2Ugb3duZXJz
aGlwIG9mIGEgcmVmZXJlbmNlLiBUaGF0J3Mgd2h5IHdlIHVzZWQgYW4gYXNzaWdubWVudCBiZWZv
cmUuCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX2Fw
cHNyYy5nZXQoKSwgbV9kZW11eC5nZXQoKSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfbGlu
ayhtX2FwcHNyYy5nZXQoKSwgbV9kZW11eC5nZXQoKSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRf
c3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKK307CisKK0FwcGVuZFBp
cGVsaW5lOjp+QXBwZW5kUGlwZWxpbmUoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKworICAgIG1fbmV3U2FtcGxlTG9jay5sb2NrKCk7CisgICAgc2V0QXBwZW5kU3RhdGUo
SW52YWxpZCk7CisgICAgbV9uZXdTYW1wbGVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgbV9u
ZXdTYW1wbGVMb2NrLnVubG9jaygpOworCisgICAgbV9wYWRBZGRSZW1vdmVMb2NrLmxvY2soKTsK
KyAgICBtX3BsYXllclByaXZhdGUgPSBudWxscHRyOworICAgIG1fcGFkQWRkUmVtb3ZlQ29uZGl0
aW9uLm5vdGlmeU9uZSgpOworICAgIG1fcGFkQWRkUmVtb3ZlTG9jay51bmxvY2soKTsKKworICAg
IEdTVF9ERUJVRygiJXAiLCB0aGlzKTsKKworICAgIC8vIEZJWE1FOiBNYXliZSBub3RpZnkgYXBw
ZW5kQ29tcGxldGUgaGVyZT8KKworICAgIGlmIChtX3BpcGVsaW5lKSB7CisgICAgICAgIEFTU0VS
VChtX2J1cyk7CisgICAgICAgIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaChtX2J1cy5nZXQo
KSk7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1Rf
U1RBVEVfTlVMTCk7CisgICAgICAgIG1fcGlwZWxpbmUgPSBudWxscHRyOworICAgIH0KKworICAg
IGlmIChtX2FwcHNyYykgeworICAgICAgICByZW1vdmVBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7
CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNyYy5n
ZXQoKSwgdGhpcyk7CisgICAgICAgIG1fYXBwc3JjID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBp
ZiAobV9kZW11eCkgeworI2lmICFMT0dfRElTQUJMRUQKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+
IGRlbXV4ZXJQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9kZW11
eC5nZXQoKSwgInNpbmsiKSk7CisgICAgICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKGRlbXV4ZXJQ
YWQuZ2V0KCksIG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJ
ZCk7CisjZW5kaWYKKworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Rh
dGEobV9kZW11eC5nZXQoKSwgdGhpcyk7CisgICAgICAgIG1fZGVtdXggPSBudWxscHRyOworICAg
IH0KKworICAgIGlmIChtX2FwcHNpbmspIHsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNp
bmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdl
dCgpLCAic2luayIpKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9k
YXRhKGFwcHNpbmtQYWQuZ2V0KCksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2RhdGEobV9hcHBzaW5rLmdldCgpLCB0aGlzKTsKKworI2lmICFMT0dfRElT
QUJMRUQKKyAgICAgICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUoYXBwc2lua1BhZC5nZXQoKSwgbV9h
cHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5wcm9iZUlkKTsKKyNlbmRpZgor
CisgICAgICAgIG1fYXBwc2luayA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fYXBwc2lu
a0NhcHMpCisgICAgICAgIG1fYXBwc2lua0NhcHMgPSBudWxscHRyOworCisgICAgaWYgKG1fZGVt
dXhlclNyY1BhZENhcHMpCisgICAgICAgIG1fZGVtdXhlclNyY1BhZENhcHMgPSBudWxscHRyOwor
fTsKKwordm9pZCBBcHBlbmRQaXBlbGluZTo6Y2xlYXJQbGF5ZXJQcml2YXRlKCkKK3sKKyAgICBB
U1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgR1NUX0RFQlVHKCJjbGVhbmluZyBwcml2
YXRlIHBsYXllciIpOworCisgICAgbV9uZXdTYW1wbGVMb2NrLmxvY2soKTsKKyAgICAvLyBNYWtl
IHN1cmUgdGhhdCBBcHBlbmRQaXBlbGluZSB3b24ndCBwcm9jZXNzIG1vcmUgZGF0YSBmcm9tIG5v
dyBvbiBhbmQKKyAgICAvLyBpbnN0cnVjdCBoYW5kbGVOZXdTYW1wbGUgdG8gYWJvcnQgaXRzZWxm
IGZyb20gbm93IG9uIGFzIHdlbGwuCisgICAgc2V0QXBwZW5kU3RhdGUoSW52YWxpZCk7CisKKyAg
ICAvLyBBd2FrZSBhbnkgcGVuZGluZyBoYW5kbGVOZXdTYW1wbGUgb3BlcmF0aW9uIGluIHRoZSBz
dHJlYW1pbmcgdGhyZWFkLgorICAgIG1fbmV3U2FtcGxlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwor
ICAgIG1fbmV3U2FtcGxlTG9jay51bmxvY2soKTsKKworICAgIG1fcGFkQWRkUmVtb3ZlTG9jay5s
b2NrKCk7CisgICAgbV9wbGF5ZXJQcml2YXRlID0gbnVsbHB0cjsKKyAgICBtX3BhZEFkZFJlbW92
ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICBtX3BhZEFkZFJlbW92ZUxvY2sudW5sb2NrKCk7
CisKKyAgICAvLyBBbmQgbm93IHRoYXQgbm8gaGFuZGxlTmV3U2FtcGxlIG9wZXJhdGlvbnMgd2ls
bCByZW1haW4gc3RhbGxlZCB3YWl0aW5nCisgICAgLy8gZm9yIHRoZSBtYWluIHRocmVhZCwgc3Rv
cCB0aGUgcGlwZWxpbmUuCisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIGdzdF9lbGVtZW50
X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7Cit9CisKK3ZvaWQg
QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVsZW1lbnRNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2Up
Cit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgY29uc3QgR3N0U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlKG1lc3NhZ2UpOwor
ICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRybS1rZXktbmVlZGVk
IikpCisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6
S2V5TmVnb3RpYXRpb24pOworCisgICAgLy8gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZSB3aWxsIHRha2UgY2FyZSBvZiBzZXR0aW5nIHVwIGVuY3J5cHRpb24uCisgICAgaWYgKG1fcGxh
eWVyUHJpdmF0ZSkKKyAgICAgICAgbV9wbGF5ZXJQcml2YXRlLT5oYW5kbGVTeW5jTWVzc2FnZSht
ZXNzYWdlKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6aGFuZGxlQXBwbGljYXRpb25NZXNz
YWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFk
KCkpOworCisgICAgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9n
ZXRfc3RydWN0dXJlKG1lc3NhZ2UpOworCisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUo
c3RydWN0dXJlLCAiYXBwc3JjLW5lZWQtZGF0YSIpKSB7CisgICAgICAgIGhhbmRsZUFwcHNyY05l
ZWREYXRhUmVjZWl2ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnc3Rf
c3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcHNyYy1idWZmZXItbGVmdCIpKSB7Cisg
ICAgICAgIGhhbmRsZUFwcHNyY0F0TGVhc3RBQnVmZmVyTGVmdCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiZGVt
dXhlci1jb25uZWN0LXRvLWFwcHNpbmsiKSkgeworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gZGVt
dXhlclNyY1BhZDsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQoc3RydWN0dXJlLCAiZGVtdXhl
ci1zcmMtcGFkIiwgR19UWVBFX09CSkVDVCwgJmRlbXV4ZXJTcmNQYWQub3V0UHRyKCksIG51bGxw
dHIpOworICAgICAgICBBU1NFUlQoZGVtdXhlclNyY1BhZCk7CisgICAgICAgIGNvbm5lY3REZW11
eGVyU3JjUGFkVG9BcHBzaW5rKGRlbXV4ZXJTcmNQYWQuZ2V0KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiYXBw
c2luay1jYXBzLWNoYW5nZWQiKSkgeworICAgICAgICBhcHBzaW5rQ2Fwc0NoYW5nZWQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0
cnVjdHVyZSwgImFwcHNpbmstbmV3LXNhbXBsZSIpKSB7CisgICAgICAgIEdSZWZQdHI8R3N0U2Ft
cGxlPiBuZXdTYW1wbGU7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0cnVjdHVyZSwgIm5l
dy1zYW1wbGUiLCBHU1RfVFlQRV9TQU1QTEUsICZuZXdTYW1wbGUub3V0UHRyKCksIG51bGxwdHIp
OworCisgICAgICAgIGFwcHNpbmtOZXdTYW1wbGUobmV3U2FtcGxlLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVy
ZSwgImFwcHNpbmstZW9zIikpIHsKKyAgICAgICAgYXBwc2lua0VPUygpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQXBwZW5k
UGlwZWxpbmU6OmhhbmRsZUFwcHNyY05lZWREYXRhUmVjZWl2ZWQoKQoreworICAgIGlmICghbV9h
cHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQpIHsKKyAgICAgICAgR1NUX1RSQUNFKCJkaXNjYXJkaW5n
IHVudGlsIGF0IGxlYXN0IGEgYnVmZmVyIGxlYXZlcyBhcHBzcmMiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEFTU0VSVChtX2FwcGVuZFN0YXRlID09IE9uZ29pbmcgfHwgbV9hcHBl
bmRTdGF0ZSA9PSBTYW1wbGluZyk7CisgICAgQVNTRVJUKCFtX2FwcHNyY05lZWREYXRhUmVjZWl2
ZWQpOworCisgICAgR1NUX1RSQUNFKCJyZWNlaXZlZCBuZWVkLWRhdGEgZnJvbSBhcHBzcmMiKTsK
KworICAgIG1fYXBwc3JjTmVlZERhdGFSZWNlaXZlZCA9IHRydWU7CisgICAgY2hlY2tFbmRPZkFw
cGVuZCgpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBzcmNBdExlYXN0QUJ1
ZmZlckxlZnQoKQoreworICAgIG1fYXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0ID0gdHJ1ZTsKKyAg
ICBHU1RfVFJBQ0UoInJlY2VpdmVkIGJ1ZmZlci1sZWZ0IGZyb20gYXBwc3JjIik7CisjaWZuZGVm
IERFQlVHX0FQUEVORF9QSVBFTElORV9QQURTCisgICAgcmVtb3ZlQXBwc3JjRGF0YUxlYXZpbmdQ
cm9iZSgpOworI2VuZGlmCit9CisKK2dpbnQgQXBwZW5kUGlwZWxpbmU6OmlkKCkKK3sKKyAgICBB
U1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBzdGF0aWMgZ2ludCB0b3RhbEF1ZGlv
ID0gMDsKKyAgICBzdGF0aWMgZ2ludCB0b3RhbFZpZGVvID0gMDsKKyAgICBzdGF0aWMgZ2ludCB0
b3RhbFRleHQgPSAwOworCisgICAgaWYgKG1faWQpCisgICAgICAgIHJldHVybiBtX2lkOworCisg
ICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKKyAgICBjYXNlIEF1ZGlvOgorICAgICAgICB0b3Rh
bEF1ZGlvKys7CisgICAgICAgIG1faWQgPSB0b3RhbEF1ZGlvOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFZpZGVvOgorICAgICAgICB0b3RhbFZpZGVvKys7CisgICAgICAgIG1faWQgPSB0b3Rh
bFZpZGVvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRleHQ6CisgICAgICAgIHRvdGFsVGV4
dCsrOworICAgICAgICBtX2lkID0gdG90YWxUZXh0OworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFVua25vd246CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBHU1RfREVCVUcoIlRyeWluZyB0
byBnZXQgaWQgZm9yIGEgcGlwZWxpbmUgb2YgVW5rbm93bi9JbnZhbGlkIHR5cGUiKTsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEdT
VF9ERUJVRygic3RyZWFtVHlwZT0lZCwgaWQ9JWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG1fc3RyZWFt
VHlwZSksIG1faWQpOworCisgICAgcmV0dXJuIG1faWQ7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxp
bmU6OnNldEFwcGVuZFN0YXRlKEFwcGVuZFN0YXRlIG5ld0FwcGVuZFN0YXRlKQoreworICAgIEFT
U0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBWYWxpZCB0cmFuc2l0aW9uczoKKyAg
ICAvLyBOb3RTdGFydGVkLS0+T25nb2luZy0tPkRhdGFTdGFydmUtLT5Ob3RTdGFydGVkCisgICAg
Ly8gICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgYC0+QWJvcnRpbmctLT5Ob3RTdGFy
dGVkCisgICAgLy8gICAgICAgICAgIHwgICAgICAgICBgLT5TYW1wbGluZy3Ct8K3wrctPlNhbXBs
aW5nLS0+TGFzdFNhbXBsZS0tPk5vdFN0YXJ0ZWQKKyAgICAvLyAgICAgICAgICAgfCAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC0+QWJvcnRpbmctLT5Ob3RT
dGFydGVkCisgICAgLy8gICAgICAgICAgIHwgICAgICAgICBgLT5LZXlOZWdvdGlhdGlvbi0tPk9u
Z29pbmctLT5bLi4uXQorICAgIC8vICAgICAgICAgICBgLT5BYm9ydGluZy0tPk5vdFN0YXJ0ZWQK
KyAgICBBcHBlbmRTdGF0ZSBvbGRBcHBlbmRTdGF0ZSA9IG1fYXBwZW5kU3RhdGU7CisgICAgQXBw
ZW5kU3RhdGUgbmV4dEFwcGVuZFN0YXRlID0gSW52YWxpZDsKKworICAgIGJvb2wgb2sgPSBmYWxz
ZTsKKworICAgIGlmIChvbGRBcHBlbmRTdGF0ZSAhPSBuZXdBcHBlbmRTdGF0ZSkKKyAgICAgICAg
R1NUX1RSQUNFKCIlcyAtLT4gJXMiLCBkdW1wQXBwZW5kU3RhdGUob2xkQXBwZW5kU3RhdGUpLCBk
dW1wQXBwZW5kU3RhdGUobmV3QXBwZW5kU3RhdGUpKTsKKworICAgIHN3aXRjaCAob2xkQXBwZW5k
U3RhdGUpIHsKKyAgICBjYXNlIE5vdFN0YXJ0ZWQ6CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5k
U3RhdGUpIHsKKyAgICAgICAgY2FzZSBPbmdvaW5nOgorICAgICAgICAgICAgb2sgPSB0cnVlOwor
ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9T
VEFURV9QTEFZSU5HKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vdFN0YXJ0
ZWQ6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBpZiAobV9wZW5kaW5nQnVm
ZmVyKSB7CisgICAgICAgICAgICAgICAgR1NUX1RSQUNFKCJwdXNoaW5nIHBlbmRpbmcgYnVmZmVy
ICVwIiwgbV9wZW5kaW5nQnVmZmVyLmdldCgpKTsKKyAgICAgICAgICAgICAgICBnc3RfYXBwX3Ny
Y19wdXNoX2J1ZmZlcihHU1RfQVBQX1NSQyhhcHBzcmMoKSksIG1fcGVuZGluZ0J1ZmZlci5sZWFr
UmVmKCkpOworICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IE9uZ29pbmc7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBYm9ydGluZzoKKyAg
ICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IE5vdFN0
YXJ0ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAg
ICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEtl
eU5lZ290aWF0aW9uOgorICAgICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0YXRlKSB7CisgICAgICAg
IGNhc2UgT25nb2luZzoKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0
cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIE9uZ29pbmc6CisgICAg
ICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAgICAgICAgY2FzZSBLZXlOZWdvdGlhdGlv
bjoKKyAgICAgICAgY2FzZSBTYW1wbGluZzoKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAg
ICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0YVN0
YXJ2ZToKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIEdTVF9ERUJVRygicmVj
ZWl2ZWQgYWxsIHBlbmRpbmcgc2FtcGxlcyIpOworICAgICAgICAgICAgbV9zb3VyY2VCdWZmZXJQ
cml2YXRlLT5kaWRSZWNlaXZlQWxsUGVuZGluZ1NhbXBsZXMoKTsKKyAgICAgICAgICAgIGlmICht
X2Fib3J0UGVuZGluZykKKyAgICAgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBBYm9ydGlu
ZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBO
b3RTdGFydGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIERhdGFTdGFy
dmU6CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAgICAgICAgY2FzZSBOb3RT
dGFydGVkOgorICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICBvayA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBYm9ydGluZzoKKyAgICAgICAgICAgIG9r
ID0gdHJ1ZTsKKyAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IE5vdFN0YXJ0ZWQ7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2FtcGxpbmc6CisgICAgICAgIHN3aXRj
aCAobmV3QXBwZW5kU3RhdGUpIHsKKyAgICAgICAgY2FzZSBTYW1wbGluZzoKKyAgICAgICAgY2Fz
ZSBJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTGFzdFNhbXBsZToKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAg
ICAgIEdTVF9ERUJVRygicmVjZWl2ZWQgYWxsIHBlbmRpbmcgc2FtcGxlcyIpOworICAgICAgICAg
ICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLT5kaWRSZWNlaXZlQWxsUGVuZGluZ1NhbXBsZXMoKTsK
KyAgICAgICAgICAgIGlmIChtX2Fib3J0UGVuZGluZykKKyAgICAgICAgICAgICAgICBuZXh0QXBw
ZW5kU3RhdGUgPSBBYm9ydGluZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBu
ZXh0QXBwZW5kU3RhdGUgPSBOb3RTdGFydGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBjYXNlIExhc3RTYW1wbGU6CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsK
KyAgICAgICAgY2FzZSBOb3RTdGFydGVkOgorICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAg
ICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBYm9ydGlu
ZzoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9
IE5vdFN0YXJ0ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWJvcnRp
bmc6CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAgICAgICAgY2FzZSBOb3RT
dGFydGVkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgcmVzZXRQaXBlbGlu
ZSgpOworICAgICAgICAgICAgbV9hYm9ydFBlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG5l
eHRBcHBlbmRTdGF0ZSA9IE5vdFN0YXJ0ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgaWYgKG9rKQorICAgICAgICBtX2FwcGVuZFN0YXRlID0gbmV3
QXBwZW5kU3RhdGU7CisgICAgZWxzZQorICAgICAgICBHU1RfRVJST1IoIkludmFsaWQgYXBwZW5k
IHN0YXRlIHRyYW5zaXRpb24gJXMgLS0+ICVzIiwgZHVtcEFwcGVuZFN0YXRlKG9sZEFwcGVuZFN0
YXRlKSwgZHVtcEFwcGVuZFN0YXRlKG5ld0FwcGVuZFN0YXRlKSk7CisKKyAgICBBU1NFUlQob2sp
OworCisgICAgaWYgKG5leHRBcHBlbmRTdGF0ZSAhPSBJbnZhbGlkKQorICAgICAgICBzZXRBcHBl
bmRTdGF0ZShuZXh0QXBwZW5kU3RhdGUpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpwYXJz
ZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRDYXBzKQoreworICAgIEFT
U0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIG1fZGVtdXhlclNyY1BhZENhcHMgPSBh
ZG9wdEdSZWYoZGVtdXhlclNyY1BhZENhcHMpOworCisgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIDAp
OworICAgIGNvbnN0IGdjaGFyKiBzdHJ1Y3R1cmVOYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFt
ZShzdHJ1Y3R1cmUpOworICAgIEdzdFZpZGVvSW5mbyBpbmZvOworICAgIGJvb2wgc2l6ZUNvbmZp
Z3VyZWQgPSBmYWxzZTsKKworICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNl
U3RyZWFtVHlwZUdTdHJlYW1lcjo6VW5rbm93bjsKKworI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEs
IDUsIDMpICYmIChFTkFCTEUoRU5DUllQVEVEX01FRElBKSB8fCBFTkFCTEUoRU5DUllQVEVEX01F
RElBX1YyKSkKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBs
aWNhdGlvbi94LWNlbmMiKSkgeworICAgICAgICBjb25zdCBnY2hhciogb3JpZ2luYWxNZWRpYVR5
cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAib3JpZ2luYWwtbWVkaWEt
dHlwZSIpOworCisgICAgICAgIC8vIEFueSBwcmV2aW91cyBkZWNyaXB0b3Igc2hvdWxkIGhhdmUg
YmVlbiByZW1vdmVkIGZyb20gdGhlIHBpcGVsaW5lIGJ5IGRpc2Nvbm5lY3RGcm9tQXBwU2lua0Zy
b21TdHJlYW1pbmdUaHJlYWQoKQorICAgICAgICBBU1NFUlQoIW1fZGVjcnlwdG9yKTsKKworICAg
ICAgICBtX2RlY3J5cHRvciA9IGFkb3B0R1JlZihXZWJDb3JlOjpjcmVhdGVHc3REZWNyeXB0b3Io
Z3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgInByb3RlY3Rpb24tc3lzdGVtIikp
KTsKKyAgICAgICAgaWYgKCFtX2RlY3J5cHRvcikgeworICAgICAgICAgICAgR1NUX0VSUk9SKCJk
ZWNyeXB0b3Igbm90IGZvdW5kIGZvciBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbV9kZW11eGVy
U3JjUGFkQ2Fwcy5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeChvcmlnaW5hbE1lZGlhVHlwZSwgInZpZGVvLyIpKSB7
CisgICAgICAgICAgICBpbnQgd2lkdGggPSAwOworICAgICAgICAgICAgaW50IGhlaWdodCA9IDA7
CisgICAgICAgICAgICBmbG9hdCBmaW5hbEhlaWdodCA9IDA7CisKKyAgICAgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJ3aWR0aCIsICZ3aWR0aCk7CisgICAgICAgICAg
ICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgImhlaWdodCIsICZoZWlnaHQp
KSB7CisgICAgICAgICAgICAgICAgZ2ludCByYXRpb051bWVyYXRvciA9IDE7CisgICAgICAgICAg
ICAgICAgZ2ludCByYXRpb0Rlbm9taW5hdG9yID0gMTsKKworICAgICAgICAgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uKHN0cnVjdHVyZSwgInBpeGVsLWFzcGVjdC1yYXRpbyIsICZy
YXRpb051bWVyYXRvciwgJnJhdGlvRGVub21pbmF0b3IpOworICAgICAgICAgICAgICAgIGZpbmFs
SGVpZ2h0ID0gaGVpZ2h0ICogKChmbG9hdCkgcmF0aW9EZW5vbWluYXRvciAvIChmbG9hdCkgcmF0
aW9OdW1lcmF0b3IpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX3ByZXNlbnRhdGlv
blNpemUgPSBXZWJDb3JlOjpGbG9hdFNpemUod2lkdGgsIGZpbmFsSGVpZ2h0KTsKKyAgICAgICAg
ICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1l
cjo6VmlkZW87CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNp
emUgPSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIGlmIChnX3N0cl9oYXNfcHJl
Zml4KG9yaWdpbmFsTWVkaWFUeXBlLCAiYXVkaW8vIikpCisgICAgICAgICAgICAgICAgbV9zdHJl
YW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpBdWRpbzsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGdfc3RyX2hhc19wcmVmaXgob3JpZ2luYWxNZWRpYVR5cGUs
ICJ0ZXh0LyIpKQorICAgICAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlh
U291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDsKKyAgICAgICAgfQorICAgICAgICBzaXpl
Q29uZmlndXJlZCA9IHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoIXNpemVDb25maWd1
cmVkKSB7CisgICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KHN0cnVjdHVyZU5hbWUsICJ2aWRl
by8iKSAmJiBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJmluZm8sIGRlbXV4ZXJTcmNQYWRDYXBz
KSkgeworICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGhlaWdodDsKKworICAgICAgICAgICAgd2lk
dGggPSBpbmZvLndpZHRoOworICAgICAgICAgICAgaGVpZ2h0ID0gaW5mby5oZWlnaHQgKiAoKGZs
b2F0KSBpbmZvLnBhcl9kIC8gKGZsb2F0KSBpbmZvLnBhcl9uKTsKKworICAgICAgICAgICAgbV9w
cmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICAgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0
cmVhbWVyOjpWaWRlbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcHJlc2VudGF0
aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOworICAgICAgICAgICAgaWYgKGdfc3RyX2hh
c19wcmVmaXgoc3RydWN0dXJlTmFtZSwgImF1ZGlvLyIpKQorICAgICAgICAgICAgICAgIG1fc3Ry
ZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW87
CisgICAgICAgICAgICBlbHNlIGlmIChnX3N0cl9oYXNfcHJlZml4KHN0cnVjdHVyZU5hbWUsICJ0
ZXh0LyIpKQorICAgICAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291
cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lua0NhcHNDaGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQoV1RG
Ojppc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fYXBwc2luaykKKyAgICAgICAgcmV0dXJu
OworCisgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0KCksICJzaW5rIikpOworICAgIEdSZWZQdHI8R3N0Q2Fw
cz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMocGFkLmdldCgpKSk7
CisKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UncmUgcmlnaHQgYWZ0ZXIgYSBuZXcgdHJhY2sg
aGFzIGFwcGVhcmVkLiBPdGhlcndpc2UsIGl0J3MgYSBjYXBzIGNoYW5nZSBpbnNpZGUgdGhlIHNh
bWUgdHJhY2suCisgICAgYm9vbCBwcmV2aW91c0NhcHNXZXJlTnVsbCA9ICFtX2FwcHNpbmtDYXBz
OworCisgICAgaWYgKCFjYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZ3N0X2NhcHNf
cmVwbGFjZSgmbV9hcHBzaW5rQ2Fwcy5vdXRQdHIoKSwgY2Fwcy5nZXQoKSkpIHsKKyAgICAgICAg
aWYgKG1fcGxheWVyUHJpdmF0ZSAmJiBwcmV2aW91c0NhcHNXZXJlTnVsbCkKKyAgICAgICAgICAg
IG1fcGxheWVyUHJpdmF0ZS0+dHJhY2tEZXRlY3RlZCh0aGlzLCBtX29sZFRyYWNrLCBtX3RyYWNr
KTsKKyAgICAgICAgZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCgpOworICAgICAgICBn
c3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJTkcp
OworICAgIH0KK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6Y2hlY2tFbmRPZkFwcGVuZCgpCit7
CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX2FwcHNyY05l
ZWREYXRhUmVjZWl2ZWQgfHwgKG1fYXBwZW5kU3RhdGUgIT0gT25nb2luZyAmJiBtX2FwcGVuZFN0
YXRlICE9IFNhbXBsaW5nKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX1RSQUNFKCJlbmQg
b2YgYXBwZW5kIGRhdGEgbWFyayB3YXMgcmVjZWl2ZWQiKTsKKworICAgIHN3aXRjaCAobV9hcHBl
bmRTdGF0ZSkgeworICAgIGNhc2UgT25nb2luZzoKKyAgICAgICAgR1NUX1RSQUNFKCJEYXRhU3Rh
cnZlIik7CisgICAgICAgIG1fYXBwc3JjTmVlZERhdGFSZWNlaXZlZCA9IGZhbHNlOworICAgICAg
ICBzZXRBcHBlbmRTdGF0ZShEYXRhU3RhcnZlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBT
YW1wbGluZzoKKyAgICAgICAgR1NUX1RSQUNFKCJMYXN0U2FtcGxlIik7CisgICAgICAgIG1fYXBw
c3JjTmVlZERhdGFSZWNlaXZlZCA9IGZhbHNlOworICAgICAgICBzZXRBcHBlbmRTdGF0ZShMYXN0
U2FtcGxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBBcHBlbmRQaXBl
bGluZTo6YXBwc2lua05ld1NhbXBsZShHc3RTYW1wbGUqIHNhbXBsZSkKK3sKKyAgICBBU1NFUlQo
V1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBtX25ld1NhbXBsZUxvY2subG9jaygpOworCisg
ICAgLy8gSWdub3JlIHNhbXBsZXMgaWYgd2UncmUgbm90IGV4cGVjdGluZyB0aGVtLiBSZWZ1c2Ug
cHJvY2Vzc2luZyBpZiB3ZSdyZSBpbiBJbnZhbGlkIHN0YXRlLgorICAgIGlmIChtX2FwcGVuZFN0
YXRlICE9IE9uZ29pbmcgJiYgbV9hcHBlbmRTdGF0ZSAhPSBTYW1wbGluZykgeworICAgICAgICBH
U1RfV0FSTklORygiVW5leHBlY3RlZCBzYW1wbGUsIGFwcGVuZFN0YXRlPSVzIiwgZHVtcEFwcGVu
ZFN0YXRlKG1fYXBwZW5kU3RhdGUpKTsKKyAgICAgICAgLy8gRklYTUU6IFJldHVybiBFUlJPUiBh
bmQgZmluZCBhIG1vcmUgcm9idXN0IHdheSB0byBkZXRlY3QgdGhhdCBhbGwgdGhlCisgICAgICAg
IC8vIGRhdGEgaGFzIGJlZW4gcHJvY2Vzc2VkLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlc29ydCB0
byB0aGVzZSBoYWNrcy4KKyAgICAgICAgLy8gQWxsIGluIGFsbCwgcmV0dXJuIE9LLCBldmVuIGlm
IGl0J3Mgbm90IHRoZSBwcm9wZXIgdGhpbmcgdG8gZG8uIFdlIGRvbid0IHdhbnQgdG8gYnJlYWsg
dGhlIGRlbXV4ZXIuCisgICAgICAgIG1fZmxvd1JldHVybiA9IEdTVF9GTE9XX09LOworICAgICAg
ICBtX25ld1NhbXBsZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJlZlB0cjxHU3RyZWFtZXJNZWRpYVNhbXBsZT4gbWVkaWFTYW1wbGUgPSBXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYVNhbXBsZTo6Y3JlYXRlKHNhbXBsZSwgbV9wcmVzZW50YXRpb25T
aXplLCB0cmFja0lkKCkpOworCisgICAgR1NUX1RSQUNFKCJhcHBlbmQ6IHRyYWNrSWQ9JXMgUFRT
PSVmIHByZXNlbnRhdGlvblNpemU9JS4wZnglLjBmIiwgbWVkaWFTYW1wbGUtPnRyYWNrSUQoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpLnRv
RmxvYXQoKSwgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblNpemUoKS53aWR0aCgpLCBtZWRpYVNh
bXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgpLmhlaWdodCgpKTsKKworICAgIC8vIElmIHdlJ3JlIGJl
eW9uZCB0aGUgZHVyYXRpb24sIGlnbm9yZSB0aGlzIHNhbXBsZSBhbmQgdGhlIHJlbWFpbmluZyBv
bmVzLgorICAgIE1lZGlhVGltZSBkdXJhdGlvbiA9IG1fbWVkaWFTb3VyY2VDbGllbnQtPmR1cmF0
aW9uKCk7CisgICAgaWYgKGR1cmF0aW9uLmlzVmFsaWQoKSAmJiAhZHVyYXRpb24uaW5kZWZpbml0
ZVRpbWUoKSAmJiBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpID4gZHVyYXRpb24pIHsK
KyAgICAgICAgR1NUX0RFQlVHKCJEZXRlY3RlZCBzYW1wbGUgKCVmKSBiZXlvbmQgdGhlIGR1cmF0
aW9uICglZiksIGRlY2xhcmluZyBMYXN0U2FtcGxlIiwgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlv
blRpbWUoKS50b0Zsb2F0KCksIGR1cmF0aW9uLnRvRmxvYXQoKSk7CisgICAgICAgIHNldEFwcGVu
ZFN0YXRlKExhc3RTYW1wbGUpOworICAgICAgICBtX2Zsb3dSZXR1cm4gPSBHU1RfRkxPV19PSzsK
KyAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBBZGQgYSBnYXAgc2FtcGxlIGlmIGEgZ2FwIGlzIGRldGVjdGVk
IGJlZm9yZSB0aGUgZmlyc3Qgc2FtcGxlLgorICAgIGlmIChtZWRpYVNhbXBsZS0+ZGVjb2RlVGlt
ZSgpID09IE1lZGlhVGltZTo6emVyb1RpbWUoKQorICAgICAgICAmJiBtZWRpYVNhbXBsZS0+cHJl
c2VudGF0aW9uVGltZSgpID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpCisgICAgICAgICYmIG1lZGlh
U2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkgPD0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91Ymxl
KDAuMSkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJBZGRpbmcgZ2FwIG9mZnNldCIpOworICAgICAg
ICBtZWRpYVNhbXBsZS0+YXBwbHlQdHNPZmZzZXQoTWVkaWFUaW1lOjp6ZXJvVGltZSgpKTsKKyAg
ICB9CisKKyAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPmRpZFJlY2VpdmVTYW1wbGUobWVkaWFT
YW1wbGUpOworICAgIHNldEFwcGVuZFN0YXRlKFNhbXBsaW5nKTsKKyAgICBtX2Zsb3dSZXR1cm4g
PSBHU1RfRkxPV19PSzsKKyAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAg
ICBtX25ld1NhbXBsZUxvY2sudW5sb2NrKCk7CisKKyAgICBjaGVja0VuZE9mQXBwZW5kKCk7Cit9
CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtFT1MoKQoreworICAgIEFTU0VSVChXVEY6
OmlzTWFpblRocmVhZCgpKTsKKworICAgIHN3aXRjaCAobV9hcHBlbmRTdGF0ZSkgeworICAgIC8v
IElnbm9yZWQuIE9wZXJhdGlvbiBjb21wbGV0aW9uIHdpbGwgYmUgbWFuYWdlZCBieSB0aGUgQWJv
cnRpbmctPk5vdFN0YXJ0ZWQgdHJhbnNpdGlvbi4KKyAgICBjYXNlIEFib3J0aW5nOgorICAgICAg
ICByZXR1cm47CisgICAgLy8gRmluaXNoIE9uZ29pbmcgYW5kIFNhbXBsaW5nIHN0YXRlcy4KKyAg
ICBjYXNlIE9uZ29pbmc6CisgICAgICAgIHNldEFwcGVuZFN0YXRlKERhdGFTdGFydmUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNhbXBsaW5nOgorICAgICAgICBzZXRBcHBlbmRTdGF0ZShM
YXN0U2FtcGxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0RF
QlVHKCJVbmV4cGVjdGVkIEVPUyIpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQg
QXBwZW5kUGlwZWxpbmU6OmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoKQoreworICAg
IEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
clByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCBpbml0aWFsaXphdGlvblNlZ21l
bnQ7CisKKyAgICBHU1RfREVCVUcoIk5vdGlmeWluZyBTb3VyY2VCdWZmZXIgZm9yIHRyYWNrICVz
IiwgbV90cmFjay0+aWQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpbml0aWFsaXph
dGlvblNlZ21lbnQuZHVyYXRpb24gPSBtX21lZGlhU291cmNlQ2xpZW50LT5kdXJhdGlvbigpOwor
ICAgIHN3aXRjaCAobV9zdHJlYW1UeXBlKSB7CisgICAgY2FzZSBBdWRpbzogeworICAgICAgICBX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6
OkF1ZGlvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOworICAgICAgICBpbmZvLnRyYWNrID0gc3RhdGlj
X2Nhc3Q8QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPihtX3RyYWNrLmdldCgpKTsKKyAgICAg
ICAgaW5mby5kZXNjcmlwdGlvbiA9IFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb246
OmNyZWF0ZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKKyAgICAgICAgaW5pdGlhbGl6YXRp
b25TZWdtZW50LmF1ZGlvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgVmlkZW86IHsKKyAgICAgICAgV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0
ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpWaWRlb1RyYWNrSW5mb3JtYXRpb24gaW5m
bzsKKyAgICAgICAgaW5mby50cmFjayA9IHN0YXRpY19jYXN0PFZpZGVvVHJhY2tQcml2YXRlR1N0
cmVhbWVyKj4obV90cmFjay5nZXQoKSk7CisgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUobV9kZW11eGVyU3JjUGFkQ2Fw
cy5nZXQoKSk7CisgICAgICAgIGluaXRpYWxpemF0aW9uU2VnbWVudC52aWRlb1RyYWNrcy5hcHBl
bmQoaW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBH
U1RfREVCVUcoIlVuc3VwcG9ydGVkIG9yIHVua25vd24gc3RyZWFtIHR5cGUiKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fc291
cmNlQnVmZmVyUHJpdmF0ZS0+ZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChpbml0aWFs
aXphdGlvblNlZ21lbnQpOworfQorCitBdG9taWNTdHJpbmcgQXBwZW5kUGlwZWxpbmU6OnRyYWNr
SWQoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV90
cmFjaykKKyAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZygpOworCisgICAgcmV0dXJuIG1fdHJh
Y2stPmlkKCk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OnJlc2V0UGlwZWxpbmUoKQorewor
ICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBHU1RfREVCVUcoInJlc2V0dGlu
ZyBwaXBlbGluZSIpOworICAgIG1fYXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0ID0gZmFsc2U7Cisg
ICAgc2V0QXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgpOworCisgICAgbV9uZXdTYW1wbGVMb2NrLmxv
Y2soKTsKKyAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICBnc3RfZWxl
bWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgICBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwg
MCk7CisgICAgbV9uZXdTYW1wbGVMb2NrLnVubG9jaygpOworCisjaWYgKCEoTE9HX0RJU0FCTEVE
IHx8IEdTVF9ESVNBQkxFX0dTVF9ERUJVRykpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGhl
cmUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gSXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBoYXZl
IGl0IGFzIGNsYXNzIG1lbWJlci4KKyAgICAgICAgV1RGOjpTdHJpbmcgIGRvdEZpbGVOYW1lID0g
U3RyaW5nOjpmb3JtYXQoInJlc2V0LXBpcGVsaW5lLSVkIiwgKytpKTsKKyAgICAgICAgZ3N0X2Rl
YnVnX2Jpbl90b19kb3RfZmlsZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdf
R1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyNlbmRp
ZgorCit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OnNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUo
KQoreworICAgIGlmIChtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgR1NUX1RSQUNFKCJzZXR0aW5nIGFwcHNyYyBkYXRhIGxlYXZpbmcgcHJvYmUiKTsK
KworICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQobV9hcHBzcmMuZ2V0KCksICJzcmMiKSk7CisgICAgbV9hcHBzcmNEYXRh
TGVhdmluZ1Byb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzcmNQYWQuZ2V0KCksIEdTVF9Q
QURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFj
az4oYXBwZW5kUGlwZWxpbmVBcHBzcmNEYXRhTGVhdmluZyksIHRoaXMsIG51bGxwdHIpOworfQor
Cit2b2lkIEFwcGVuZFBpcGVsaW5lOjpyZW1vdmVBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCkKK3sK
KyAgICBpZiAoIW1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkKQorICAgICAgICByZXR1cm47CisK
KyAgICBHU1RfVFJBQ0UoInJlbW92aW5nIGFwcHNyYyBkYXRhIGxlYXZpbmcgcHJvYmUiKTsKKwor
ICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQobV9hcHBzcmMuZ2V0KCksICJzcmMiKSk7CisgICAgZ3N0X3BhZF9yZW1vdmVf
cHJvYmUoYXBwc3JjUGFkLmdldCgpLCBtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCk7CisgICAg
bV9hcHBzcmNEYXRhTGVhdmluZ1Byb2JlSWQgPSAwOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5l
OjphYm9ydCgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9E
RUJVRygiYWJvcnRpbmciKTsKKworICAgIG1fcGVuZGluZ0J1ZmZlci5jbGVhcigpOworCisgICAg
Ly8gQWJvcnQgYWxyZWFkeSBvbmdvaW5nLgorICAgIGlmIChtX2Fib3J0UGVuZGluZykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9hYm9ydFBlbmRpbmcgPSB0cnVlOworICAgIGlmIChtX2FwcGVu
ZFN0YXRlID09IE5vdFN0YXJ0ZWQpCisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFib3J0aW5nKTsK
KyAgICAvLyBFbHNlLCB0aGUgYXV0b21hdGljIHN0YXRlIHRyYW5zaXRpb25zIHdpbGwgdGFrZSBj
YXJlIHdoZW4gdGhlIG9uZ29pbmcgYXBwZW5kIGZpbmlzaGVzLgorfQorCitHc3RGbG93UmV0dXJu
IEFwcGVuZFBpcGVsaW5lOjpwdXNoTmV3QnVmZmVyKEdzdEJ1ZmZlciogYnVmZmVyKQoreworICAg
IEdzdEZsb3dSZXR1cm4gcmVzdWx0OworCisgICAgaWYgKG1fYWJvcnRQZW5kaW5nKSB7CisgICAg
ICAgIG1fcGVuZGluZ0J1ZmZlciA9IGFkb3B0R1JlZihidWZmZXIpOworICAgICAgICByZXN1bHQg
PSBHU1RfRkxPV19PSzsKKyAgICB9IGVsc2UgeworICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBl
bmRQaXBlbGluZTo6T25nb2luZyk7CisgICAgICAgIEdTVF9UUkFDRSgicHVzaGluZyBuZXcgYnVm
ZmVyICVwIiwgYnVmZmVyKTsKKyAgICAgICAgcmVzdWx0ID0gZ3N0X2FwcF9zcmNfcHVzaF9idWZm
ZXIoR1NUX0FQUF9TUkMoYXBwc3JjKCkpLCBidWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OnJlcG9ydEFwcHNyY0F0TGVhc3RBQnVm
ZmVyTGVmdCgpCit7CisgICAgR1NUX1RSQUNFKCJidWZmZXIgbGVmdCBhcHBzcmMsIHJlcG9zdGlu
ZyB0byBidXMiKTsKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVf
bmV3X2VtcHR5KCJhcHBzcmMtYnVmZmVyLWxlZnQiKTsKKyAgICBHc3RNZXNzYWdlKiBtZXNzYWdl
ID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdTVF9PQkpFQ1QobV9hcHBzcmMuZ2V0KCkp
LCBzdHJ1Y3R1cmUpOworICAgIGdzdF9idXNfcG9zdChtX2J1cy5nZXQoKSwgbWVzc2FnZSk7Cit9
CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQoKQor
eworICAgIEdTVF9UUkFDRSgicmVjZWl2ZWQgbmVlZC1kYXRhIHNpZ25hbCBhdCBhcHBzcmMsIHJl
cG9zdGluZyB0byBidXMiKTsKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1
Y3R1cmVfbmV3X2VtcHR5KCJhcHBzcmMtbmVlZC1kYXRhIik7CisgICAgR3N0TWVzc2FnZSogbWVz
c2FnZSA9IGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbihHU1RfT0JKRUNUKG1fYXBwc3JjLmdl
dCgpKSwgc3RydWN0dXJlKTsKKyAgICBnc3RfYnVzX3Bvc3QobV9idXMuZ2V0KCksIG1lc3NhZ2Up
OworfQorCitHc3RGbG93UmV0dXJuIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVOZXdBcHBzaW5rU2Ft
cGxlKEdzdEVsZW1lbnQqIGFwcHNpbmspCit7CisgICAgQVNTRVJUKCFXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKworICAgIG1fbmV3U2FtcGxlTG9jay5sb2NrKCk7CisgICAgYm9vbCBpbnZhbGlkID0g
IW1fcGxheWVyUHJpdmF0ZSB8fCBtX2FwcGVuZFN0YXRlID09IEludmFsaWQ7CisgICAgbV9uZXdT
YW1wbGVMb2NrLnVubG9jaygpOworCisgICAgLy8gRXZlbiBpZiB3ZSdyZSBkaXNhYmxlZCwgaXQn
cyBpbXBvcnRhbnQgdG8gcHVsbCB0aGUgc2FtcGxlIG91dCBhbnl3YXkgdG8KKyAgICAvLyBhdm9p
ZCBkZWFkbG9ja3Mgd2hlbiBjaGFuZ2luZyB0byBHU1RfU1RBVEVfTlVMTCBoYXZpbmcgYSBub24g
ZW1wdHkgYXBwc2luay4KKyAgICBHUmVmUHRyPEdzdFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVm
KGdzdF9hcHBfc2lua19wdWxsX3NhbXBsZShHU1RfQVBQX1NJTksoYXBwc2luaykpKTsKKworICAg
IGlmIChpbnZhbGlkKSB7CisgICAgICAgIEdTVF9ERUJVRygiQXBwZW5kUGlwZWxpbmUgaGFzIGJl
ZW4gZGlzYWJsZWQsIGlnbm9yaW5nIHRoaXMgc2FtcGxlIik7CisgICAgICAgIHJldHVybiBHU1Rf
RkxPV19FUlJPUjsKKyAgICB9CisKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX25ld1NhbXBsZUxv
Y2spOworICAgIGlmICghKCFtX3BsYXllclByaXZhdGUgfHwgbV9hcHBlbmRTdGF0ZSA9PSBJbnZh
bGlkKSkgeworICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVf
bmV3KCJhcHBzaW5rLW5ldy1zYW1wbGUiLCAibmV3LXNhbXBsZSIsIEdTVF9UWVBFX1NBTVBMRSwg
c2FtcGxlLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgR3N0TWVzc2FnZSogbWVzc2FnZSA9IGdz
dF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbihHU1RfT0JKRUNUKGFwcHNpbmspLCBzdHJ1Y3R1cmUp
OworICAgICAgICBnc3RfYnVzX3Bvc3QobV9idXMuZ2V0KCksIG1lc3NhZ2UpOworICAgICAgICBH
U1RfVFJBQ0UoImFwcHNpbmstbmV3LXNhbXBsZSBtZXNzYWdlIHBvc3RlZCB0byBidXMiKTsKKwor
ICAgICAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi53YWl0KG1fbmV3U2FtcGxlTG9jayk7CisgICAg
ICAgIC8vIFdlJ3ZlIGJlZW4gYXdha2VuIGJlY2F1c2UgdGhlIHNhbXBsZSB3YXMgcHJvY2Vzc2Vk
IG9yIGJlY2F1c2Ugb2YKKyAgICAgICAgLy8gYW4gZXhjZXB0aW9uYWwgY29uZGl0aW9uIChlbnRl
cmVkIGluIEludmFsaWQgc3RhdGUsIGRlc3RydWN0b3IsIGV0Yy4pCisgICAgICAgIC8vIFdlIGNh
bid0IHJlbGlhYmx5IGRlbGV0ZSBpbmZvIGhlcmUsIGFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1Nh
bXBsZU1haW5UaHJlYWQgd2lsbCBkbyBpdC4KKyAgICB9CisKKyAgICByZXR1cm4gbV9mbG93UmV0
dXJuOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBw
c2lua0Zyb21BbnlUaHJlYWQoR3N0UGFkKiBkZW11eGVyU3JjUGFkKQoreworICAgIGlmICghbV9h
cHBzaW5rKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoImNvbm5lY3RpbmcgdG8g
YXBwc2luayIpOworCisgICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtTaW5rUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisK
KyAgICAvLyBPbmx5IG9uZSBTdHJlYW0gcGVyIGRlbXV4ZXIgaXMgc3VwcG9ydGVkLgorICAgIEFT
U0VSVCghZ3N0X3BhZF9pc19saW5rZWQoc2lua1NpbmtQYWQuZ2V0KCkpKTsKKworICAgIGdpbnQ2
NCB0aW1lTGVuZ3RoID0gMDsKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9k
ZW11eC5nZXQoKSwgR1NUX0ZPUk1BVF9USU1FLCAmdGltZUxlbmd0aCkKKyAgICAgICAgJiYgc3Rh
dGljX2Nhc3Q8Z3VpbnQ2ND4odGltZUxlbmd0aCkgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkKKyAg
ICAgICAgbV9pbml0aWFsRHVyYXRpb24gPSBNZWRpYVRpbWUoR1NUX1RJTUVfQVNfVVNFQ09ORFMo
dGltZUxlbmd0aCksIEdfVVNFQ19QRVJfU0VDKTsKKyAgICBlbHNlCisgICAgICAgIG1faW5pdGlh
bER1cmF0aW9uID0gTWVkaWFUaW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpOworCisgICAgaWYg
KFdURjo6aXNNYWluVGhyZWFkKCkpCisgICAgICAgIGNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBz
aW5rKGRlbXV4ZXJTcmNQYWQpOworICAgIGVsc2UgeworICAgICAgICAvLyBDYWxsIGNvbm5lY3RE
ZW11eGVyU3JjUGFkVG9BcHBzaW5rKCkgaW4gdGhlIG1haW4gdGhyZWFkIGFuZCB3YWl0LgorICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhZEFkZFJlbW92ZUxvY2spOworICAgICAgICBpZiAo
IW1fcGxheWVyUHJpdmF0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBHc3RTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3KCJkZW11eGVyLWNvbm5lY3QtdG8t
YXBwc2luayIsICJkZW11eGVyLXNyYy1wYWQiLCBHX1RZUEVfT0JKRUNULCBkZW11eGVyU3JjUGFk
LCBudWxscHRyKTsKKyAgICAgICAgR3N0TWVzc2FnZSogbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25l
d19hcHBsaWNhdGlvbihHU1RfT0JKRUNUKG1fZGVtdXguZ2V0KCkpLCBzdHJ1Y3R1cmUpOworICAg
ICAgICBnc3RfYnVzX3Bvc3QobV9idXMuZ2V0KCksIG1lc3NhZ2UpOworICAgICAgICBHU1RfVFJB
Q0UoImRlbXV4ZXItY29ubmVjdC10by1hcHBzaW5rIG1lc3NhZ2UgcG9zdGVkIHRvIGJ1cyIpOwor
CisgICAgICAgIG1fcGFkQWRkUmVtb3ZlQ29uZGl0aW9uLndhaXQobV9wYWRBZGRSZW1vdmVMb2Nr
KTsKKyAgICB9CisKKyAgICAvLyBNdXN0IGJlIGRvbmUgaW4gdGhlIHRocmVhZCB3ZSB3ZXJlIGNh
bGxlZCBmcm9tICh1c3VhbGx5IHN0cmVhbWluZyB0aHJlYWQpLgorICAgIGJvb2wgaXNEYXRhID0g
ZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fc3RyZWFtVHlwZSkgeworICAgIGNhc2UgV2ViQ29yZTo6
TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpBdWRpbzoKKyAgICBjYXNlIFdlYkNvcmU6
Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW86CisgICAgY2FzZSBXZWJDb3Jl
OjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQ6CisgICAgICAgIGlzRGF0YSA9
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGlmIChpc0RhdGEpIHsKKyAgICAgICAgLy8gRklYTUU6IE9ubHkgYWRkIGFwcHNp
bmsgb25lIHRpbWUuIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcy4KKyAg
ICAgICAgR1JlZlB0cjxHc3RPYmplY3Q+IHBhcmVudCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfcGFyZW50KG1fYXBwc2luay5nZXQoKSkpOworICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAg
ICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1fYXBwc2luay5n
ZXQoKSk7CisKKyNpZiAoRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgfHwgRU5BQkxFKEVOQ1JZUFRF
RF9NRURJQV9WMikpCisgICAgICAgIGlmIChtX2RlY3J5cHRvcikgeworICAgICAgICAgICAgZ3N0
X29iamVjdF9yZWYobV9kZWNyeXB0b3IuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2Jpbl9hZGQo
R1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgbV9kZWNyeXB0b3IuZ2V0KCkpOworCisgICAgICAg
ICAgICBHUmVmUHRyPEdzdFBhZD4gZGVjcnlwdG9yU3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKG1fZGVjcnlwdG9yLmdldCgpLCAic3JjIikpOworICAgICAgICAg
ICAgR1JlZlB0cjxHc3RQYWQ+IGRlY3J5cHRvclNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRpY19wYWQobV9kZWNyeXB0b3IuZ2V0KCksICJzaW5rIikpOworICAgICAgICAg
ICAgZ3N0X3BhZF9saW5rKGRlbXV4ZXJTcmNQYWQsIGRlY3J5cHRvclNpbmtQYWQuZ2V0KCkpOwor
ICAgICAgICAgICAgZ3N0X3BhZF9saW5rKGRlY3J5cHRvclNyY1BhZC5nZXQoKSwgc2lua1NpbmtQ
YWQuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVu
dChtX2FwcHNpbmsuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93
aXRoX3BhcmVudChtX2RlY3J5cHRvci5nZXQoKSk7CisgICAgICAgIH0gZWxzZSB7CisjZW5kaWYK
KyAgICAgICAgICAgIGdzdF9wYWRfbGluayhkZW11eGVyU3JjUGFkLCBzaW5rU2lua1BhZC5nZXQo
KSk7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fYXBw
c2luay5nZXQoKSk7CisjaWYgKEVOQUJMRShFTkNSWVBURURfTUVESUEpIHx8IEVOQUJMRShFTkNS
WVBURURfTUVESUFfVjIpKQorICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QQVVTRUQpOworICAgIH0KK30K
Kwordm9pZCBBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0
UGFkKiBkZW11eGVyU3JjUGFkKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsK
KyAgICBHU1RfREVCVUcoIkNvbm5lY3RpbmcgdG8gYXBwc2luayIpOworCisgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9wYWRBZGRSZW1vdmVMb2NrKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1Np
bmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdl
dCgpLCAic2luayIpKTsKKworICAgIC8vIE9ubHkgb25lIFN0cmVhbSBwZXIgZGVtdXhlciBpcyBz
dXBwb3J0ZWQuCisgICAgQVNTRVJUKCFnc3RfcGFkX2lzX2xpbmtlZChzaW5rU2lua1BhZC5nZXQo
KSkpOworCisgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0
X2N1cnJlbnRfY2FwcyhHU1RfUEFEKGRlbXV4ZXJTcmNQYWQpKSk7CisKKyAgICBpZiAoIWNhcHMg
fHwgbV9hcHBlbmRTdGF0ZSA9PSBJbnZhbGlkIHx8ICFtX3BsYXllclByaXZhdGUpIHsKKyAgICAg
ICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyNpZiAoIShMT0dfRElTQUJMRUQgfHwgR1NUX0RJU0FCTEVfR1NUX0RFQlVHKSkK
KyAgICB7CisgICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHN0cmNhcHMoZ3N0X2NhcHNfdG9fc3Ry
aW5nKGNhcHMuZ2V0KCkpKTsKKyAgICAgICAgR1NUX0RFQlVHKCIlcyIsIHN0cmNhcHMuZ2V0KCkp
OworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKG1faW5pdGlhbER1cmF0aW9uID4gbV9tZWRpYVNv
dXJjZUNsaWVudC0+ZHVyYXRpb24oKSkKKyAgICAgICAgbV9tZWRpYVNvdXJjZUNsaWVudC0+ZHVy
YXRpb25DaGFuZ2VkKG1faW5pdGlhbER1cmF0aW9uKTsKKworICAgIG1fb2xkVHJhY2sgPSBtX3Ry
YWNrOworCisgICAgcGFyc2VEZW11eGVyU3JjUGFkQ2Fwcyhnc3RfY2Fwc19yZWYoY2Fwcy5nZXQo
KSkpOworCisgICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKKyAgICBjYXNlIFdlYkNvcmU6Ok1l
ZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW86CisgICAgICAgIGlmIChtX3BsYXll
clByaXZhdGUpCisgICAgICAgICAgICBtX3RyYWNrID0gV2ViQ29yZTo6QXVkaW9UcmFja1ByaXZh
dGVHU3RyZWFtZXI6OmNyZWF0ZShtX3BsYXllclByaXZhdGUtPnBpcGVsaW5lKCksIGlkKCksIHNp
bmtTaW5rUGFkLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJDb3JlOjpNZWRp
YVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvOgorICAgICAgICBpZiAobV9wbGF5ZXJQ
cml2YXRlKQorICAgICAgICAgICAgbV90cmFjayA9IFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRl
R1N0cmVhbWVyOjpjcmVhdGUobV9wbGF5ZXJQcml2YXRlLT5waXBlbGluZSgpLCBpZCgpLCBzaW5r
U2lua1BhZC5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFT
b3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OgorICAgICAgICBtX3RyYWNrID0gV2ViQ29y
ZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKGlkKCksIHNpbmtTaW5r
UGFkLmdldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gTm8g
dXNlZnVsIGRhdGEsIGJ1dCBub3RpZnkgYW55d2F5IHRvIGNvbXBsZXRlIHRoZSBhcHBlbmQgb3Bl
cmF0aW9uLgorICAgICAgICBHU1RfREVCVUcoIihubyBkYXRhKSIpOworICAgICAgICBHU1RfREVC
VUcoInJlY2VpdmVkIGFsbCBwZW5kaW5nIHNhbXBsZXMiKTsKKyAgICAgICAgbV9zb3VyY2VCdWZm
ZXJQcml2YXRlLT5kaWRSZWNlaXZlQWxsUGVuZGluZ1NhbXBsZXMoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90aWZ5T25lKCk7Cit9CisK
K3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtG
cm9tQW55VGhyZWFkKCkKK3sKKyAgICBHU1RfREVCVUcoIkRpc2Nvbm5lY3RpbmcgYXBwc2luayIp
OworCisgICAgLy8gTXVzdCBiZSBkb25lIGluIHRoZSB0aHJlYWQgd2Ugd2VyZSBjYWxsZWQgZnJv
bSAodXN1YWxseSBzdHJlYW1pbmcgdGhyZWFkKS4KKyNpZiAoRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkgfHwgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikpCisgICAgaWYgKG1fZGVjcnlwdG9yKSB7
CisgICAgICAgIGdzdF9lbGVtZW50X3VubGluayhtX2RlY3J5cHRvci5nZXQoKSwgbV9hcHBzaW5r
LmdldCgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rKG1fZGVtdXguZ2V0KCksIG1fZGVj
cnlwdG9yLmdldCgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fZGVjcnlwdG9y
LmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4o
bV9waXBlbGluZS5nZXQoKSksIG1fZGVjcnlwdG9yLmdldCgpKTsKKyAgICB9IGVsc2UKKyNlbmRp
ZgorICAgICAgICBnc3RfZWxlbWVudF91bmxpbmsobV9kZW11eC5nZXQoKSwgbV9hcHBzaW5rLmdl
dCgpKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzaW5rQ2Fwc0NoYW5nZWQo
R09iamVjdCogYXBwc2lua1BhZCwgR1BhcmFtU3BlYyosIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQ
aXBlbGluZSkKK3sKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVf
bmV3X2VtcHR5KCJhcHBzaW5rLWNhcHMtY2hhbmdlZCIpOworICAgIEdzdE1lc3NhZ2UqIG1lc3Nh
Z2UgPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChhcHBzaW5rUGFkKSwg
c3RydWN0dXJlKTsKKyAgICBnc3RfYnVzX3Bvc3QoYXBwZW5kUGlwZWxpbmUtPmJ1cygpLCBtZXNz
YWdlKTsKKyAgICBHU1RfVFJBQ0UoImFwcHNpbmstY2Fwcy1jaGFuZ2VkIG1lc3NhZ2UgcG9zdGVk
IHRvIGJ1cyIpOworfQorCitzdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxpbmVB
cHBzcmNEYXRhTGVhdmluZyhHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8sIEFwcGVuZFBp
cGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICBBU1NFUlQoR1NUX1BBRF9QUk9CRV9JTkZP
X1RZUEUoaW5mbykgJiBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSKTsKKworICAgIEdzdEJ1ZmZl
ciogYnVmZmVyID0gR1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUihpbmZvKTsKKyAgICBnc2l6ZSBi
dWZmZXJTaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpOworCisgICAgR1NUX1RSQUNF
KCJidWZmZXIgb2Ygc2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIGdvaW5nIHRocnUiLCBidWZmZXJT
aXplKTsKKworICAgIGFwcGVuZFBpcGVsaW5lLT5yZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxl
ZnQoKTsKKworICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOworfQorCisjaWYgIUxPR19ESVNB
QkxFRAorc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuIGFwcGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1
Z0luZm9ybWF0aW9uKEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5mbywgc3RydWN0IFBhZFBy
b2JlSW5mb3JtYXRpb24qIHBhZFByb2JlSW5mb3JtYXRpb24pCit7CisgICAgQVNTRVJUKEdTVF9Q
QURfUFJPQkVfSU5GT19UWVBFKGluZm8pICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUik7Cisg
ICAgR3N0QnVmZmVyKiBidWZmZXIgPSBHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSKGluZm8pOwor
ICAgIEdTVF9UUkFDRSgiJXM6IGJ1ZmZlciBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFUICIgZ29p
bmcgdGhydSIsIHBhZFByb2JlSW5mb3JtYXRpb24tPmRlc2NyaXB0aW9uLCBnc3RfYnVmZmVyX2dl
dF9zaXplKGJ1ZmZlcikpOworICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOworfQorI2VuZGlm
CisKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwc3JjTmVlZERhdGEoR3N0QXBwU3JjKiwg
Z3VpbnQsIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICBhcHBlbmRQaXBl
bGluZS0+cmVwb3J0QXBwc3JjTmVlZERhdGFSZWNlaXZlZCgpOworfQorCitzdGF0aWMgdm9pZCBh
cHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZChHc3RFbGVtZW50KiwgR3N0UGFkKiBkZW11eGVy
U3JjUGFkLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgYXBwZW5kUGlw
ZWxpbmUtPmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbUFueVRocmVhZChkZW11eGVy
U3JjUGFkKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVEZW11eGVyUGFkUmVtb3Zl
ZChHc3RFbGVtZW50KiwgR3N0UGFkKiwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKQor
eworICAgIGFwcGVuZFBpcGVsaW5lLT5kaXNjb25uZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5r
RnJvbUFueVRocmVhZCgpOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybiBhcHBlbmRQaXBlbGlu
ZUFwcHNpbmtOZXdTYW1wbGUoR3N0RWxlbWVudCogYXBwc2luaywgQXBwZW5kUGlwZWxpbmUqIGFw
cGVuZFBpcGVsaW5lKQoreworICAgIHJldHVybiBhcHBlbmRQaXBlbGluZS0+aGFuZGxlTmV3QXBw
c2lua1NhbXBsZShhcHBzaW5rKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBz
aW5rRU9TKEdzdEVsZW1lbnQqLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7Cisg
ICAgaWYgKFdURjo6aXNNYWluVGhyZWFkKCkpCisgICAgICAgIGFwcGVuZFBpcGVsaW5lLT5hcHBz
aW5rRU9TKCk7CisgICAgZWxzZSB7CisgICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImFwcHNpbmstZW9zIik7CisgICAgICAgIEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChhcHBl
bmRQaXBlbGluZS0+YXBwc2luaygpKSwgc3RydWN0dXJlKTsKKyAgICAgICAgZ3N0X2J1c19wb3N0
KGFwcGVuZFBpcGVsaW5lLT5idXMoKSwgbWVzc2FnZSk7CisgICAgICAgIEdTVF9UUkFDRSgiYXBw
c2luay1lb3MgbWVzc2FnZSBwb3N0ZWQgdG8gYnVzIik7CisgICAgfQorCisgICAgR1NUX0RFQlVH
KCIlcyBtYWluIHRocmVhZCIsIChXVEY6OmlzTWFpblRocmVhZCgpKSA/ICJJcyIgOiAiTm90Iik7
Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgorCisjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODA3MDhmYmU1
MjFlOWI4OTUwZmQ0YzZiYmM3MGRlZDA3MTZiODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5o
CkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQXBw
ZW5kUGlwZWxpbmVfaAorI2RlZmluZSBBcHBlbmRQaXBlbGluZV9oCisKKyNpZiBFTkFCTEUoVklE
RU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShW
SURFT19UUkFDSykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaCIKKyNpbmNsdWRlICJNZWRpYVNvdXJjZUNs
aWVudEdTdHJlYW1lck1TRS5oIgorI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXIuaCIKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBcHBlbmRQaXBlbGluZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBcHBlbmRQaXBlbGluZT4geworcHVibGljOgorICAgIGVu
dW0gQXBwZW5kU3RhdGUgeyBJbnZhbGlkLCBOb3RTdGFydGVkLCBPbmdvaW5nLCBLZXlOZWdvdGlh
dGlvbiwgRGF0YVN0YXJ2ZSwgU2FtcGxpbmcsIExhc3RTYW1wbGUsIEFib3J0aW5nIH07CisKKyAg
ICBBcHBlbmRQaXBlbGluZShQYXNzUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNF
PiwgUGFzc1JlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiwgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyTVNFKik7CisgICAgdmlydHVhbCB+QXBwZW5kUGlwZWxpbmUoKTsKKwor
ICAgIHZvaWQgaGFuZGxlRWxlbWVudE1lc3NhZ2UoR3N0TWVzc2FnZSopOworICAgIHZvaWQgaGFu
ZGxlQXBwbGljYXRpb25NZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKworICAgIGdpbnQgaWQoKTsKKyAg
ICBBcHBlbmRTdGF0ZSBhcHBlbmRTdGF0ZSgpIHsgcmV0dXJuIG1fYXBwZW5kU3RhdGU7IH0KKyAg
ICB2b2lkIHNldEFwcGVuZFN0YXRlKEFwcGVuZFN0YXRlKTsKKworICAgIEdzdEZsb3dSZXR1cm4g
aGFuZGxlTmV3QXBwc2lua1NhbXBsZShHc3RFbGVtZW50Kik7CisgICAgR3N0Rmxvd1JldHVybiBw
dXNoTmV3QnVmZmVyKEdzdEJ1ZmZlciopOworCisgICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIGNh
cHMuCisgICAgdm9pZCBwYXJzZURlbXV4ZXJTcmNQYWRDYXBzKEdzdENhcHMqKTsKKyAgICB2b2lk
IGFwcHNpbmtDYXBzQ2hhbmdlZCgpOworICAgIHZvaWQgYXBwc2lua05ld1NhbXBsZShHc3RTYW1w
bGUqKTsKKyAgICB2b2lkIGFwcHNpbmtFT1MoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbml0aWFs
aXphdGlvblNlZ21lbnQoKTsKKyAgICBBdG9taWNTdHJpbmcgdHJhY2tJZCgpOworICAgIHZvaWQg
YWJvcnQoKTsKKworICAgIHZvaWQgY2xlYXJQbGF5ZXJQcml2YXRlKCk7CisgICAgUmVmUHRyPE1l
ZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPiBtZWRpYVNvdXJjZUNsaWVudCgpIHsgcmV0dXJu
IG1fbWVkaWFTb3VyY2VDbGllbnQ7IH0KKyAgICBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSgpIHsgcmV0dXJuIG1fc291cmNlQnVmZmVyUHJp
dmF0ZTsgfQorICAgIEdzdEJ1cyogYnVzKCkgeyByZXR1cm4gbV9idXMuZ2V0KCk7IH0KKyAgICBH
c3RFbGVtZW50KiBwaXBlbGluZSgpIHsgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0KCk7IH0KKyAgICBH
c3RFbGVtZW50KiBhcHBzcmMoKSB7IHJldHVybiBtX2FwcHNyYy5nZXQoKTsgfQorICAgIEdzdEVs
ZW1lbnQqIGFwcHNpbmsoKSB7IHJldHVybiBtX2FwcHNpbmsuZ2V0KCk7IH0KKyAgICBHc3RDYXBz
KiBkZW11eGVyU3JjUGFkQ2FwcygpIHsgcmV0dXJuIG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCk7
IH0KKyAgICBHc3RDYXBzKiBhcHBzaW5rQ2FwcygpIHsgcmV0dXJuIG1fYXBwc2lua0NhcHMuZ2V0
KCk7IH0KKyAgICBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gdHJhY2soKSB7IHJl
dHVybiBtX3RyYWNrOyB9CisgICAgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVh
bWVyIHN0cmVhbVR5cGUoKSB7IHJldHVybiBtX3N0cmVhbVR5cGU7IH0KKworICAgIHZvaWQgZGlz
Y29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBwc2lua0Zyb21BbnlUaHJlYWQoKTsKKyAgICB2b2lk
IGNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbUFueVRocmVhZChHc3RQYWQqKTsKKyAg
ICB2b2lkIGNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKEdzdFBhZCopOworCisgICAgdm9p
ZCByZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKTsKKyAgICB2b2lkIHJlcG9ydEFwcHNy
Y05lZWREYXRhUmVjZWl2ZWQoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHJlc2V0UGlwZWxpbmUo
KTsKKyAgICB2b2lkIGNoZWNrRW5kT2ZBcHBlbmQoKTsKKyAgICB2b2lkIGhhbmRsZUFwcHNyY0F0
TGVhc3RBQnVmZmVyTGVmdCgpOworICAgIHZvaWQgaGFuZGxlQXBwc3JjTmVlZERhdGFSZWNlaXZl
ZCgpOworICAgIHZvaWQgcmVtb3ZlQXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgpOworICAgIHZvaWQg
c2V0QXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgpOworCitwcml2YXRlOgorICAgIFJlZlB0cjxNZWRp
YVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4gbV9tZWRpYVNvdXJjZUNsaWVudDsKKyAgICBSZWZQ
dHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gbV9zb3VyY2VCdWZmZXJQcml2YXRlOwor
ICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogbV9wbGF5ZXJQcml2YXRlOworCisg
ICAgLy8gKG1fbWVkaWFUeXBlLCBtX2lkKSBpcyB1bmlxdWUuCisgICAgZ2ludCBtX2lkOworCisg
ICAgTWVkaWFUaW1lIG1faW5pdGlhbER1cmF0aW9uOworCisgICAgR3N0Rmxvd1JldHVybiBtX2Zs
b3dSZXR1cm47CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGlwZWxpbmU7CisgICAgR1Jl
ZlB0cjxHc3RCdXM+IG1fYnVzOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hcHBzcmM7Cisg
ICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2RlbXV4OworI2lmIChFTkFCTEUoRU5DUllQVEVEX01F
RElBKSB8fCBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKSkKKyAgICBHUmVmUHRyPEdzdEVsZW1l
bnQ+IG1fZGVjcnlwdG9yOworI2VuZGlmCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2FwcHNp
bms7CisgICAgLy8gVGhlIGRlbXV4ZXIgaGFzIG9uZSBzcmMgU3RyZWFtIG9ubHksIHNvIG9ubHkg
b25lIGFwcHNpbmsgaXMgbmVlZGVkIGFuZCBsaW5rZWQgdG8gaXQuCisKKyAgICBMb2NrIG1fbmV3
U2FtcGxlTG9jazsKKyAgICBDb25kaXRpb24gbV9uZXdTYW1wbGVDb25kaXRpb247CisgICAgTG9j
ayBtX3BhZEFkZFJlbW92ZUxvY2s7CisgICAgQ29uZGl0aW9uIG1fcGFkQWRkUmVtb3ZlQ29uZGl0
aW9uOworCisgICAgR1JlZlB0cjxHc3RDYXBzPiBtX2FwcHNpbmtDYXBzOworICAgIEdSZWZQdHI8
R3N0Q2Fwcz4gbV9kZW11eGVyU3JjUGFkQ2FwczsKKyAgICBGbG9hdFNpemUgbV9wcmVzZW50YXRp
b25TaXplOworCisgICAgYm9vbCBtX2FwcHNyY0F0TGVhc3RBQnVmZmVyTGVmdDsKKyAgICBib29s
IG1fYXBwc3JjTmVlZERhdGFSZWNlaXZlZDsKKworICAgIGd1bG9uZyBtX2FwcHNyY0RhdGFMZWF2
aW5nUHJvYmVJZDsKKyNpZmRlZiBERUJVR19BUFBFTkRfUElQRUxJTkVfUEFEUworICAgIHN0cnVj
dCBQYWRQcm9iZUluZm9ybWF0aW9uIG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3Jt
YXRpb247CisgICAgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gbV9hcHBzaW5rRGF0YUVudGVy
aW5nUGFkUHJvYmVJbmZvcm1hdGlvbjsKKyNlbmRpZgorCisgICAgLy8gS2VlcHMgdHJhY2sgb2Yg
dGhlIHN0YXRlcyBvZiBhcHBlbmQgcHJvY2Vzc2luZywgdG8gYXZvaWQgcGVyZm9ybWluZyBhY3Rp
b25zIGluYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IHN0YXRlCisgICAgLy8gKGVnOiBwcm9j
ZXNzaW5nIG1vcmUgc2FtcGxlcyB3aGVuIHRoZSBsYXN0IG9uZSBoYXMgYmVlbiBkZXRlY3RlZCwg
ZXRjLikuIFNlZSBzZXRBcHBlbmRTdGF0ZSgpIGZvciB2YWxpZAorICAgIC8vIHRyYW5zaXRpb25z
LgorICAgIEFwcGVuZFN0YXRlIG1fYXBwZW5kU3RhdGU7CisKKyAgICAvLyBBYm9ydHMgY2FuIG9u
bHkgYmUgY29tcGxldGVkIHdoZW4gdGhlIG5vcm1hbCBzYW1wbGUgZGV0ZWN0aW9uIGhhcyBmaW5p
c2hlZC4gTWVhbndoaWxlLCB0aGUgd2lsbGluZyB0byBhYm9ydCBpcworICAgIC8vIGV4cHJlc3Nl
ZCBpbiB0aGlzIGZpZWxkLgorICAgIGJvb2wgbV9hYm9ydFBlbmRpbmc7CisKKyAgICBXZWJDb3Jl
OjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXIgbV9zdHJlYW1UeXBlOworICAgIFJlZlB0
cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBtX29sZFRyYWNrOworICAgIFJlZlB0cjxXZWJD
b3JlOjpUcmFja1ByaXZhdGVCYXNlPiBtX3RyYWNrOworCisgICAgR1JlZlB0cjxHc3RCdWZmZXI+
IG1fcGVuZGluZ0J1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUuCisKKyNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSKQorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290504</attachid>
            <date>2016-10-03 12:22:45 -0700</date>
            <delta_ts>2016-10-16 11:35:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162874-20161003191935.patch</filename>
            <type>text/plain</type>
            <size>49415</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA2NTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzE5NDU2NzIzMWI3YWY1
ZmM4YTA1YmNkODM3MGE3NThmZDJiY2NhNy4uOWY1MzNlMjdhYmRhMDRmZWY2NTRmNTYzNWE5Yzlh
NDU4NzQ2NzU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY4IEBACiAyMDE2LTEwLTAzICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIEFwcGVuZCBQaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRo
IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiAoZGF0YSBzdGFy
dmUKKyAgICAgICAgYW5kIGxhc3Qgc2FtcGxlIGRldGVjdGlvbiwgZGVidWcgZmVhdHVyZXMpIGFu
ZCBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPiAoRU1FCisgICAgICAgIHN1cHBv
cnQpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQ
aXBlbGluZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZHVtcEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lRWxlbWVudE1lc3NhZ2VDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRQaXBlbGluZUFwcGxpY2F0aW9uTWVzc2FnZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6fkFwcGVuZFBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpjbGVhclBsYXllclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVsZW1lbnRNZXNzYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBsaWNhdGlvbk1lc3NhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNyY05lZWREYXRh
UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNy
Y0F0TGVhc3RBQnVmZmVyTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
aWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnNldEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNoZWNrRW5kT2ZBcHBlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtFT1MpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnRyYWNrSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlc2V0UGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwZW5kUGlwZWxpbmU6OnNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGVuZFBpcGVsaW5lOjpwdXNoTmV3QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVu
ZFBpcGVsaW5lOjpyZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9B
cHBzaW5rRnJvbUFueVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1NhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjphcHBl
bmRQaXBlbGluZUFwcHNpbmtFT1MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBl
bmRQaXBlbGluZTo6YXBwZW5kU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxp
bmU6Om1lZGlhU291cmNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
Ojpzb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
OjpidXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzcmMpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlw
ZWxpbmU6OmRlbXV4ZXJTcmNQYWRDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVs
aW5lOjphcHBzaW5rQ2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6dHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnN0cmVhbVR5cGUpOgorCisy
MDE2LTEwLTAzICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+
CisKICAgICAgICAgTWlzc2luZyBpbmNsdWRlIGluIE1lZGlhRGVzY3JpcHRpb24KICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjg3MwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVu
ZFBpcGVsaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjMDgxYjIxZmNmZmZjMjM0M2Ew
OGU1NDJmYTkwOGQ1YWEwOWFkOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcApAQCAtMCww
ICsxLDExMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFwcGVuZFBpcGVsaW5lLmgiCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVT
RShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpICYmIEVOQUJMRShWSURFT19UUkFD
SykKKworI2luY2x1ZGUgIkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb24u
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVNhbXBsZS5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
clV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJNZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVy
UHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVy
LmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KKyNpbmNsdWRlIDxnc3QvYXBw
L2dzdGFwcHNyYy5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvcGJ1dGls
cy9wYnV0aWxzLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNpbmNsdWRlIDx3
dGYvQ29uZGl0aW9uLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworI2lmICFMT0dfRElTQUJMRUQKK3N0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIHsK
KyAgICBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmU7CisgICAgY29uc3QgY2hhciogZGVz
Y3JpcHRpb247CisgICAgZ3Vsb25nIHByb2JlSWQ7Cit9OworI2VuZGlmCisKK3N0YXRpYyBjb25z
dCBjaGFyKiBkdW1wQXBwZW5kU3RhdGUoQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlIGFwcGVu
ZFN0YXRlKQoreworICAgIHN3aXRjaCAoYXBwZW5kU3RhdGUpIHsKKyAgICBjYXNlIEFwcGVuZFBp
cGVsaW5lOjpBcHBlbmRTdGF0ZTo6SW52YWxpZDoKKyAgICAgICAgcmV0dXJuICJJbnZhbGlkIjsK
KyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6Tm90U3RhcnRlZDoKKyAgICAg
ICAgcmV0dXJuICJOb3RTdGFydGVkIjsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRT
dGF0ZTo6T25nb2luZzoKKyAgICAgICAgcmV0dXJuICJPbmdvaW5nIjsKKyAgICBjYXNlIEFwcGVu
ZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6S2V5TmVnb3RpYXRpb246CisgICAgICAgIHJldHVybiAi
S2V5TmVnb3RpYXRpb24iOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpE
YXRhU3RhcnZlOgorICAgICAgICByZXR1cm4gIkRhdGFTdGFydmUiOworICAgIGNhc2UgQXBwZW5k
UGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpTYW1wbGluZzoKKyAgICAgICAgcmV0dXJuICJTYW1wbGlu
ZyI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6Okxhc3RTYW1wbGU6Cisg
ICAgICAgIHJldHVybiAiTGFzdFNhbXBsZSI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBw
ZW5kU3RhdGU6OkFib3J0aW5nOgorICAgICAgICByZXR1cm4gIkFib3J0aW5nIjsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gIih1bmtub3duKSI7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCBhcHBlbmRQaXBlbGluZUFwcHNyY05lZWREYXRhKEdzdEFwcFNyYyosIGd1aW50LCBBcHBlbmRQ
aXBlbGluZSopOworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVEZW11eGVyUGFkQWRkZWQoR3N0
RWxlbWVudCosIEdzdFBhZCosIEFwcGVuZFBpcGVsaW5lKik7CitzdGF0aWMgdm9pZCBhcHBlbmRQ
aXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKEdzdEVsZW1lbnQqLCBHc3RQYWQqLCBBcHBlbmRQaXBl
bGluZSopOworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzaW5rQ2Fwc0NoYW5nZWQoR09i
amVjdCosIEdQYXJhbVNwZWMqLCBBcHBlbmRQaXBlbGluZSopOworc3RhdGljIEdzdFBhZFByb2Jl
UmV0dXJuIGFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcoR3N0UGFkKiwgR3N0UGFkUHJv
YmVJbmZvKiwgQXBwZW5kUGlwZWxpbmUqKTsKKyNpZiAhTE9HX0RJU0FCTEVECitzdGF0aWMgR3N0
UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24oR3N0
UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiwgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24qKTsKKyNl
bmRpZgorc3RhdGljIEdzdEZsb3dSZXR1cm4gYXBwZW5kUGlwZWxpbmVBcHBzaW5rTmV3U2FtcGxl
KEdzdEVsZW1lbnQqLCBBcHBlbmRQaXBlbGluZSopOworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxp
bmVBcHBzaW5rRU9TKEdzdEVsZW1lbnQqLCBBcHBlbmRQaXBlbGluZSopOworCitzdGF0aWMgdm9p
ZCBhcHBlbmRQaXBlbGluZUVsZW1lbnRNZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2Fn
ZSogbWVzc2FnZSwgQXBwZW5kUGlwZWxpbmUqIGFwKQoreworICAgIGFwLT5oYW5kbGVFbGVtZW50
TWVzc2FnZShtZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBsaWNh
dGlvbk1lc3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBBcHBlbmRQ
aXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgYXBwZW5kUGlwZWxpbmUtPmhhbmRsZUFw
cGxpY2F0aW9uTWVzc2FnZShtZXNzYWdlKTsKK30KKworQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFBp
cGVsaW5lKFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IG1lZGlhU291
cmNlQ2xpZW50LCBQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJj
ZUJ1ZmZlclByaXZhdGUsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogcGxheWVyUHJp
dmF0ZSkKKyAgICA6IG1fbWVkaWFTb3VyY2VDbGllbnQobWVkaWFTb3VyY2VDbGllbnQpCisgICAg
LCBtX3NvdXJjZUJ1ZmZlclByaXZhdGUoc291cmNlQnVmZmVyUHJpdmF0ZSkKKyAgICAsIG1fcGxh
eWVyUHJpdmF0ZShwbGF5ZXJQcml2YXRlKQorICAgICwgbV9pZCgwKQorICAgICwgbV9hcHBzcmNB
dExlYXN0QUJ1ZmZlckxlZnQoZmFsc2UpCisgICAgLCBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQo
ZmFsc2UpCisgICAgLCBtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCgwKQorICAgICwgbV9hcHBl
bmRTdGF0ZShOb3RTdGFydGVkKQorICAgICwgbV9hYm9ydFBlbmRpbmcoZmFsc2UpCisgICAgLCBt
X3N0cmVhbVR5cGUoVW5rbm93bikKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7
CisKKyAgICBHU1RfREVCVUcoIiVwIiwgdGhpcyk7CisKKyAgICAvLyBGSVhNRTogZ2l2ZSBhIG5h
bWUgdG8gdGhlIHBpcGVsaW5lLCBtYXliZSByZWxhdGVkIHdpdGggdGhlIHRyYWNrIGl0J3MgbWFu
YWdpbmcuCisgICAgLy8gVGhlIHRyYWNrIG5hbWUgaXMgc3RpbGwgdW5rbm93biBhdCB0aGlzIHRp
bWUsIHRob3VnaC4KKyAgICBtX3BpcGVsaW5lID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9uZXco
bnVsbHB0cikpOworCisgICAgbV9idXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMo
R1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgZ3N0X2J1c19hZGRfc2lnbmFs
X3dhdGNoKG1fYnVzLmdldCgpKTsKKyAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1p
c3Npb24obV9idXMuZ2V0KCkpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX2J1cy5nZXQoKSwg
InN5bmMtbWVzc2FnZTo6ZWxlbWVudCIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVFbGVtZW50
TWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2J1cy5nZXQo
KSwgIm1lc3NhZ2U6OmFwcGxpY2F0aW9uIiwgR19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZUFwcGxp
Y2F0aW9uTWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CisKKyAgICAvLyBXZSBhc3NpZ24gdGhlIGNy
ZWF0ZWQgaW5zdGFuY2VzIGhlcmUgaW5zdGVhZCBvZiBhZG9wdFJlZigpIGJlY2F1c2UgZ3N0X2Jp
bl9hZGRfbWFueSgpCisgICAgLy8gYmVsb3cgd2lsbCBhbHJlYWR5IHRha2UgdGhlIGluaXRpYWwg
cmVmZXJlbmNlIGFuZCB3ZSBuZWVkIGFuIGFkZGl0aW9uYWwgb25lIGZvciB1cy4KKyAgICBtX2Fw
cHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwgbnVsbHB0cik7CisgICAg
bV9kZW11eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXRkZW11eCIsIG51bGxwdHIpOwor
ICAgIG1fYXBwc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc2luayIsIG51bGxw
dHIpOworCisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKG1fZGVtdXguZ2V0KCkpLCAiYWx3YXlz
LWhvbm9yLXRmZHQiLCBUUlVFLCBudWxscHRyKTsKKyAgICBnc3RfYXBwX3Npbmtfc2V0X2VtaXRf
c2lnbmFscyhHU1RfQVBQX1NJTksobV9hcHBzaW5rLmdldCgpKSwgVFJVRSk7CisgICAgZ3N0X2Jh
c2Vfc2lua19zZXRfc3luYyhHU1RfQkFTRV9TSU5LKG1fYXBwc2luay5nZXQoKSksIEZBTFNFKTsK
KworICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50
X2dldF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChhcHBzaW5rUGFkLmdldCgpLCAibm90aWZ5OjpjYXBzIiwgR19DQUxMQkFDSyhhcHBl
bmRQaXBlbGluZUFwcHNpbmtDYXBzQ2hhbmdlZCksIHRoaXMpOworCisgICAgc2V0QXBwc3JjRGF0
YUxlYXZpbmdQcm9iZSgpOworCisjaWYgIUxPR19ESVNBQkxFRAorICAgIEdSZWZQdHI8R3N0UGFk
PiBkZW11eGVyUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fZGVt
dXguZ2V0KCksICJzaW5rIikpOworICAgIG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFByb2JlSW5m
b3JtYXRpb24uYXBwZW5kUGlwZWxpbmUgPSB0aGlzOworICAgIG1fZGVtdXhlckRhdGFFbnRlcmlu
Z1BhZFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAiZGVtdXhlciBkYXRhIGVudGVyaW5n
IjsKKyAgICBtX2RlbXV4ZXJEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9uLnByb2JlSWQg
PSBnc3RfcGFkX2FkZF9wcm9iZShkZW11eGVyUGFkLmdldCgpLCBHU1RfUEFEX1BST0JFX1RZUEVf
QlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJhY2s+KGFwcGVuZFBpcGVs
aW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9uKSwgJm1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFBy
b2JlSW5mb3JtYXRpb24sIG51bGxwdHIpOworICAgIG1fYXBwc2lua0RhdGFFbnRlcmluZ1BhZFBy
b2JlSW5mb3JtYXRpb24uYXBwZW5kUGlwZWxpbmUgPSB0aGlzOworICAgIG1fYXBwc2lua0RhdGFF
bnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAiYXBwc2luayBkYXRhIGVu
dGVyaW5nIjsKKyAgICBtX2FwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9uLnBy
b2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBHU1RfUEFEX1BST0JF
X1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJhY2s+KGFwcGVu
ZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9uKSwgJm1fYXBwc2lua0RhdGFFbnRlcmlu
Z1BhZFByb2JlSW5mb3JtYXRpb24sIG51bGxwdHIpOworI2VuZGlmCisKKyAgICAvLyBUaGVzZSBz
aWduYWxzIHdvbid0IGJlIGNvbm5lY3RlZCBvdXRzaWRlIG9mIHRoZSBsaWZldGltZSBvZiAidGhp
cyIuCisgICAgZ19zaWduYWxfY29ubmVjdChtX2FwcHNyYy5nZXQoKSwgIm5lZWQtZGF0YSIsIEdf
Q0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YSksIHRoaXMpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9kZW11eC5nZXQoKSwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0soYXBwZW5k
UGlwZWxpbmVEZW11eGVyUGFkQWRkZWQpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1f
ZGVtdXguZ2V0KCksICJwYWQtcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVEZW11
eGVyUGFkUmVtb3ZlZCksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9hcHBzaW5rLmdl
dCgpLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVBcHBzaW5rTmV3U2Ft
cGxlKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2FwcHNpbmsuZ2V0KCksICJlb3Mi
LCBHX0NBTExCQUNLKGFwcGVuZFBpcGVsaW5lQXBwc2lua0VPUyksIHRoaXMpOworCisgICAgLy8g
QWRkX21hbnkgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiBhIHJlZmVyZW5jZS4gVGhhdCdzIHdoeSB3
ZSB1c2VkIGFuIGFzc2lnbm1lbnQgYmVmb3JlLgorICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJ
TihtX3BpcGVsaW5lLmdldCgpKSwgbV9hcHBzcmMuZ2V0KCksIG1fZGVtdXguZ2V0KCksIG51bGxw
dHIpOworICAgIGdzdF9lbGVtZW50X2xpbmsobV9hcHBzcmMuZ2V0KCksIG1fZGVtdXguZ2V0KCkp
OworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFU
RV9SRUFEWSk7Cit9OworCitBcHBlbmRQaXBlbGluZTo6fkFwcGVuZFBpcGVsaW5lKCkKK3sKKyAg
ICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBtX25ld1NhbXBsZUxvY2subG9j
aygpOworICAgIHNldEFwcGVuZFN0YXRlKEludmFsaWQpOworICAgIG1fbmV3U2FtcGxlQ29uZGl0
aW9uLm5vdGlmeU9uZSgpOworICAgIG1fbmV3U2FtcGxlTG9jay51bmxvY2soKTsKKworICAgIG1f
cGFkQWRkUmVtb3ZlTG9jay5sb2NrKCk7CisgICAgbV9wbGF5ZXJQcml2YXRlID0gbnVsbHB0cjsK
KyAgICBtX3BhZEFkZFJlbW92ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICBtX3BhZEFkZFJl
bW92ZUxvY2sudW5sb2NrKCk7CisKKyAgICBHU1RfREVCVUcoIiVwIiwgdGhpcyk7CisKKyAgICAv
LyBGSVhNRTogTWF5YmUgbm90aWZ5IGFwcGVuZENvbXBsZXRlIGhlcmU/CisKKyAgICBpZiAobV9w
aXBlbGluZSkgeworICAgICAgICBBU1NFUlQobV9idXMpOworICAgICAgICBnc3RfYnVzX3JlbW92
ZV9zaWduYWxfd2F0Y2gobV9idXMuZ2V0KCkpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3Rh
dGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgICAgICBtX3BpcGVsaW5l
ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9hcHBzcmMpIHsKKyAgICAgICAgcmVtb3Zl
QXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X2J5X2RhdGEobV9hcHBzcmMuZ2V0KCksIHRoaXMpOworICAgICAgICBtX2FwcHNyYyA9
IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fZGVtdXgpIHsKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBkZW11eGVyUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKG1fZGVtdXguZ2V0KCksICJzaW5rIikpOworICAgICAgICBnc3Rf
cGFkX3JlbW92ZV9wcm9iZShkZW11eGVyUGFkLmdldCgpLCBtX2RlbXV4ZXJEYXRhRW50ZXJpbmdQ
YWRQcm9iZUluZm9ybWF0aW9uLnByb2JlSWQpOworI2VuZGlmCisKKyAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fZGVtdXguZ2V0KCksIHRoaXMpOworICAgICAg
ICBtX2RlbXV4ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9hcHBzaW5rKSB7CisgICAg
ICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisgICAgICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShhcHBzaW5rUGFkLmdldCgpLCB0aGlzKTsKKyAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fYXBwc2luay5nZXQo
KSwgdGhpcyk7CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAgIGdzdF9wYWRfcmVtb3ZlX3By
b2JlKGFwcHNpbmtQYWQuZ2V0KCksIG1fYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3Jt
YXRpb24ucHJvYmVJZCk7CisjZW5kaWYKKworICAgICAgICBtX2FwcHNpbmsgPSBudWxscHRyOwor
ICAgIH0KKworICAgIGlmIChtX2FwcHNpbmtDYXBzKQorICAgICAgICBtX2FwcHNpbmtDYXBzID0g
bnVsbHB0cjsKKworICAgIGlmIChtX2RlbXV4ZXJTcmNQYWRDYXBzKQorICAgICAgICBtX2RlbXV4
ZXJTcmNQYWRDYXBzID0gbnVsbHB0cjsKK307CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNsZWFy
UGxheWVyUHJpdmF0ZSgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAg
IEdTVF9ERUJVRygiY2xlYW5pbmcgcHJpdmF0ZSBwbGF5ZXIiKTsKKworICAgIG1fbmV3U2FtcGxl
TG9jay5sb2NrKCk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgQXBwZW5kUGlwZWxpbmUgd29uJ3Qg
cHJvY2VzcyBtb3JlIGRhdGEgZnJvbSBub3cgb24gYW5kCisgICAgLy8gaW5zdHJ1Y3QgaGFuZGxl
TmV3U2FtcGxlIHRvIGFib3J0IGl0c2VsZiBmcm9tIG5vdyBvbiBhcyB3ZWxsLgorICAgIHNldEFw
cGVuZFN0YXRlKEludmFsaWQpOworCisgICAgLy8gQXdha2UgYW55IHBlbmRpbmcgaGFuZGxlTmV3
U2FtcGxlIG9wZXJhdGlvbiBpbiB0aGUgc3RyZWFtaW5nIHRocmVhZC4KKyAgICBtX25ld1NhbXBs
ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICBtX25ld1NhbXBsZUxvY2sudW5sb2NrKCk7CisK
KyAgICBtX3BhZEFkZFJlbW92ZUxvY2subG9jaygpOworICAgIG1fcGxheWVyUHJpdmF0ZSA9IG51
bGxwdHI7CisgICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgbV9w
YWRBZGRSZW1vdmVMb2NrLnVubG9jaygpOworCisgICAgLy8gQW5kIG5vdyB0aGF0IG5vIGhhbmRs
ZU5ld1NhbXBsZSBvcGVyYXRpb25zIHdpbGwgcmVtYWluIHN0YWxsZWQgd2FpdGluZworICAgIC8v
IGZvciB0aGUgbWFpbiB0aHJlYWQsIHN0b3AgdGhlIHBpcGVsaW5lLgorICAgIGlmIChtX3BpcGVs
aW5lKQorICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NU
X1NUQVRFX05VTEwpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVFbGVtZW50TWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2Vf
Z2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShz
dHJ1Y3R1cmUsICJkcm0ta2V5LW5lZWRlZCIpKQorICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBl
bmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OktleU5lZ290aWF0aW9uKTsKKworICAgIC8vIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Ugd2lsbCB0YWtlIGNhcmUgb2Ygc2V0dGluZyB1cCBl
bmNyeXB0aW9uLgorICAgIGlmIChtX3BsYXllclByaXZhdGUpCisgICAgICAgIG1fcGxheWVyUHJp
dmF0ZS0+aGFuZGxlU3luY01lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxp
bmU6OmhhbmRsZUFwcGxpY2F0aW9uTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAg
IEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSog
c3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKworICAgIGlm
IChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcHNyYy1uZWVkLWRhdGEiKSkg
eworICAgICAgICBoYW5kbGVBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJh
cHBzcmMtYnVmZmVyLWxlZnQiKSkgeworICAgICAgICBoYW5kbGVBcHBzcmNBdExlYXN0QUJ1ZmZl
ckxlZnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJl
X2hhc19uYW1lKHN0cnVjdHVyZSwgImRlbXV4ZXItY29ubmVjdC10by1hcHBzaW5rIikpIHsKKyAg
ICAgICAgR1JlZlB0cjxHc3RQYWQ+IGRlbXV4ZXJTcmNQYWQ7CisgICAgICAgIGdzdF9zdHJ1Y3R1
cmVfZ2V0KHN0cnVjdHVyZSwgImRlbXV4ZXItc3JjLXBhZCIsIEdfVFlQRV9PQkpFQ1QsICZkZW11
eGVyU3JjUGFkLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgQVNTRVJUKGRlbXV4ZXJTcmNQ
YWQpOworICAgICAgICBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayhkZW11eGVyU3JjUGFk
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJl
X2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcHNpbmstY2Fwcy1jaGFuZ2VkIikpIHsKKyAgICAgICAg
YXBwc2lua0NhcHNDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
Z3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBzaW5rLW5ldy1zYW1wbGUiKSkg
eworICAgICAgICBHUmVmUHRyPEdzdFNhbXBsZT4gbmV3U2FtcGxlOworICAgICAgICBnc3Rfc3Ry
dWN0dXJlX2dldChzdHJ1Y3R1cmUsICJuZXctc2FtcGxlIiwgR1NUX1RZUEVfU0FNUExFLCAmbmV3
U2FtcGxlLm91dFB0cigpLCBudWxscHRyKTsKKworICAgICAgICBhcHBzaW5rTmV3U2FtcGxlKG5l
d1NhbXBsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0
cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBzaW5rLWVvcyIpKSB7CisgICAgICAgIGFw
cHNpbmtFT1MoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBzcmNOZWVkRGF0YVJl
Y2VpdmVkKCkKK3sKKyAgICBpZiAoIW1fYXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KSB7CisgICAg
ICAgIEdTVF9UUkFDRSgiZGlzY2FyZGluZyB1bnRpbCBhdCBsZWFzdCBhIGJ1ZmZlciBsZWF2ZXMg
YXBwc3JjIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9hcHBlbmRT
dGF0ZSA9PSBPbmdvaW5nIHx8IG1fYXBwZW5kU3RhdGUgPT0gU2FtcGxpbmcpOworICAgIEFTU0VS
VCghbV9hcHBzcmNOZWVkRGF0YVJlY2VpdmVkKTsKKworICAgIEdTVF9UUkFDRSgicmVjZWl2ZWQg
bmVlZC1kYXRhIGZyb20gYXBwc3JjIik7CisKKyAgICBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQg
PSB0cnVlOworICAgIGNoZWNrRW5kT2ZBcHBlbmQoKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGlu
ZTo6aGFuZGxlQXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KCkKK3sKKyAgICBtX2FwcHNyY0F0TGVh
c3RBQnVmZmVyTGVmdCA9IHRydWU7CisgICAgR1NUX1RSQUNFKCJyZWNlaXZlZCBidWZmZXItbGVm
dCBmcm9tIGFwcHNyYyIpOworI2lmbmRlZiBERUJVR19BUFBFTkRfUElQRUxJTkVfUEFEUworICAg
IHJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKTsKKyNlbmRpZgorfQorCitnaW50IEFwcGVu
ZFBpcGVsaW5lOjppZCgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisg
ICAgc3RhdGljIGdpbnQgdG90YWxBdWRpbyA9IDA7CisgICAgc3RhdGljIGdpbnQgdG90YWxWaWRl
byA9IDA7CisgICAgc3RhdGljIGdpbnQgdG90YWxUZXh0ID0gMDsKKworICAgIGlmIChtX2lkKQor
ICAgICAgICByZXR1cm4gbV9pZDsKKworICAgIHN3aXRjaCAobV9zdHJlYW1UeXBlKSB7CisgICAg
Y2FzZSBBdWRpbzoKKyAgICAgICAgdG90YWxBdWRpbysrOworICAgICAgICBtX2lkID0gdG90YWxB
dWRpbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWaWRlbzoKKyAgICAgICAgdG90YWxWaWRl
bysrOworICAgICAgICBtX2lkID0gdG90YWxWaWRlbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBUZXh0OgorICAgICAgICB0b3RhbFRleHQrKzsKKyAgICAgICAgbV9pZCA9IHRvdGFsVGV4dDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbmtub3duOgorICAgIGNhc2UgSW52YWxpZDoKKyAg
ICAgICAgR1NUX0RFQlVHKCJUcnlpbmcgdG8gZ2V0IGlkIGZvciBhIHBpcGVsaW5lIG9mIFVua25v
d24vSW52YWxpZCB0eXBlIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBHU1RfREVCVUcoInN0cmVhbVR5cGU9JWQsIGlkPSVkIiwg
c3RhdGljX2Nhc3Q8aW50PihtX3N0cmVhbVR5cGUpLCBtX2lkKTsKKworICAgIHJldHVybiBtX2lk
OworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZSBu
ZXdBcHBlbmRTdGF0ZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAg
Ly8gVmFsaWQgdHJhbnNpdGlvbnM6CisgICAgLy8gTm90U3RhcnRlZC0tPk9uZ29pbmctLT5EYXRh
U3RhcnZlLS0+Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAg
ICAgIGAtPkFib3J0aW5nLS0+Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAgICAg
YC0+U2FtcGxpbmctwrfCt8K3LT5TYW1wbGluZy0tPkxhc3RTYW1wbGUtLT5Ob3RTdGFydGVkCisg
ICAgLy8gICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGAtPkFib3J0aW5nLS0+Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAg
ICAgYC0+S2V5TmVnb3RpYXRpb24tLT5PbmdvaW5nLS0+Wy4uLl0KKyAgICAvLyAgICAgICAgICAg
YC0+QWJvcnRpbmctLT5Ob3RTdGFydGVkCisgICAgQXBwZW5kU3RhdGUgb2xkQXBwZW5kU3RhdGUg
PSBtX2FwcGVuZFN0YXRlOworICAgIEFwcGVuZFN0YXRlIG5leHRBcHBlbmRTdGF0ZSA9IEludmFs
aWQ7CisKKyAgICBib29sIG9rID0gZmFsc2U7CisKKyAgICBpZiAob2xkQXBwZW5kU3RhdGUgIT0g
bmV3QXBwZW5kU3RhdGUpCisgICAgICAgIEdTVF9UUkFDRSgiJXMgLS0+ICVzIiwgZHVtcEFwcGVu
ZFN0YXRlKG9sZEFwcGVuZFN0YXRlKSwgZHVtcEFwcGVuZFN0YXRlKG5ld0FwcGVuZFN0YXRlKSk7
CisKKyAgICBzd2l0Y2ggKG9sZEFwcGVuZFN0YXRlKSB7CisgICAgY2FzZSBOb3RTdGFydGVkOgor
ICAgICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0YXRlKSB7CisgICAgICAgIGNhc2UgT25nb2luZzoK
KyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0
ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBOb3RTdGFydGVkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAg
ICAgICAgICAgaWYgKG1fcGVuZGluZ0J1ZmZlcikgeworICAgICAgICAgICAgICAgIEdTVF9UUkFD
RSgicHVzaGluZyBwZW5kaW5nIGJ1ZmZlciAlcCIsIG1fcGVuZGluZ0J1ZmZlci5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoR1NUX0FQUF9TUkMoYXBwc3Jj
KCkpLCBtX3BlbmRpbmdCdWZmZXIubGVha1JlZigpKTsKKyAgICAgICAgICAgICAgICBuZXh0QXBw
ZW5kU3RhdGUgPSBPbmdvaW5nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQWJvcnRpbmc6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAg
ICBuZXh0QXBwZW5kU3RhdGUgPSBOb3RTdGFydGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBLZXlOZWdvdGlhdGlvbjoKKyAgICAgICAgc3dpdGNoIChu
ZXdBcHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIE9uZ29pbmc6CisgICAgICAgIGNhc2UgSW52
YWxpZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBPbmdvaW5nOgorICAgICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0YXRlKSB7Cisg
ICAgICAgIGNhc2UgS2V5TmVnb3RpYXRpb246CisgICAgICAgIGNhc2UgU2FtcGxpbmc6CisgICAg
ICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIERhdGFTdGFydmU6CisgICAgICAgICAgICBvayA9IHRydWU7Cisg
ICAgICAgICAgICBHU1RfREVCVUcoInJlY2VpdmVkIGFsbCBwZW5kaW5nIHNhbXBsZXMiKTsKKyAg
ICAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+ZGlkUmVjZWl2ZUFsbFBlbmRpbmdTYW1w
bGVzKCk7CisgICAgICAgICAgICBpZiAobV9hYm9ydFBlbmRpbmcpCisgICAgICAgICAgICAgICAg
bmV4dEFwcGVuZFN0YXRlID0gQWJvcnRpbmc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbmV4dEFwcGVuZFN0YXRlID0gTm90U3RhcnRlZDsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBEYXRhU3RhcnZlOgorICAgICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0
YXRlKSB7CisgICAgICAgIGNhc2UgTm90U3RhcnRlZDoKKyAgICAgICAgY2FzZSBJbnZhbGlkOgor
ICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
QWJvcnRpbmc6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBuZXh0QXBwZW5k
U3RhdGUgPSBOb3RTdGFydGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNhbXBsaW5nOgorICAgICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0YXRlKSB7CisgICAgICAgIGNh
c2UgU2FtcGxpbmc6CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIG9rID0gdHJ1
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExhc3RTYW1wbGU6CisgICAgICAg
ICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBHU1RfREVCVUcoInJlY2VpdmVkIGFsbCBwZW5k
aW5nIHNhbXBsZXMiKTsKKyAgICAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+ZGlkUmVj
ZWl2ZUFsbFBlbmRpbmdTYW1wbGVzKCk7CisgICAgICAgICAgICBpZiAobV9hYm9ydFBlbmRpbmcp
CisgICAgICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gQWJvcnRpbmc7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gTm90U3RhcnRlZDsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMYXN0U2FtcGxlOgorICAgICAgICBz
d2l0Y2ggKG5ld0FwcGVuZFN0YXRlKSB7CisgICAgICAgIGNhc2UgTm90U3RhcnRlZDoKKyAgICAg
ICAgY2FzZSBJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQWJvcnRpbmc6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAg
ICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBOb3RTdGFydGVkOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFib3J0aW5nOgorICAgICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0
YXRlKSB7CisgICAgICAgIGNhc2UgTm90U3RhcnRlZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsK
KyAgICAgICAgICAgIHJlc2V0UGlwZWxpbmUoKTsKKyAgICAgICAgICAgIG1fYWJvcnRQZW5kaW5n
ID0gZmFsc2U7CisgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBOb3RTdGFydGVkOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIG9rID0g
dHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnZhbGlkOgorICAg
ICAgICBvayA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChvaykKKyAg
ICAgICAgbV9hcHBlbmRTdGF0ZSA9IG5ld0FwcGVuZFN0YXRlOworICAgIGVsc2UKKyAgICAgICAg
R1NUX0VSUk9SKCJJbnZhbGlkIGFwcGVuZCBzdGF0ZSB0cmFuc2l0aW9uICVzIC0tPiAlcyIsIGR1
bXBBcHBlbmRTdGF0ZShvbGRBcHBlbmRTdGF0ZSksIGR1bXBBcHBlbmRTdGF0ZShuZXdBcHBlbmRT
dGF0ZSkpOworCisgICAgQVNTRVJUKG9rKTsKKworICAgIGlmIChuZXh0QXBwZW5kU3RhdGUgIT0g
SW52YWxpZCkKKyAgICAgICAgc2V0QXBwZW5kU3RhdGUobmV4dEFwcGVuZFN0YXRlKTsKK30KKwor
dm9pZCBBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2FwcyhHc3RDYXBzKiBkZW11
eGVyU3JjUGFkQ2FwcykKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAg
ICBtX2RlbXV4ZXJTcmNQYWRDYXBzID0gYWRvcHRHUmVmKGRlbXV4ZXJTcmNQYWRDYXBzKTsKKwor
ICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShtX2Rl
bXV4ZXJTcmNQYWRDYXBzLmdldCgpLCAwKTsKKyAgICBjb25zdCBnY2hhciogc3RydWN0dXJlTmFt
ZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKKyAgICBHc3RWaWRlb0luZm8g
aW5mbzsKKyAgICBib29sIHNpemVDb25maWd1cmVkID0gZmFsc2U7CisKKyAgICBtX3N0cmVhbVR5
cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlVua25vd247CisK
KyNpZiBHU1RfQ0hFQ0tfVkVSU0lPTigxLCA1LCAzKSAmJiAoRU5BQkxFKEVOQ1JZUFRFRF9NRURJ
QSkgfHwgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikpCisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVf
aGFzX25hbWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1jZW5jIikpIHsKKyAgICAgICAgY29u
c3QgZ2NoYXIqIG9yaWdpbmFsTWVkaWFUeXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0
cnVjdHVyZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKTsKKworICAgICAgICAvLyBBbnkgcHJldmlv
dXMgZGVjcmlwdG9yIHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwaXBlbGluZSBi
eSBkaXNjb25uZWN0RnJvbUFwcFNpbmtGcm9tU3RyZWFtaW5nVGhyZWFkKCkKKyAgICAgICAgQVNT
RVJUKCFtX2RlY3J5cHRvcik7CisKKyAgICAgICAgbV9kZWNyeXB0b3IgPSBhZG9wdEdSZWYoV2Vi
Q29yZTo6Y3JlYXRlR3N0RGVjcnlwdG9yKGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1
cmUsICJwcm90ZWN0aW9uLXN5c3RlbSIpKSk7CisgICAgICAgIGlmICghbV9kZWNyeXB0b3IpIHsK
KyAgICAgICAgICAgIEdTVF9FUlJPUigiZGVjcnlwdG9yIG5vdCBmb3VuZCBmb3IgY2FwczogJSIg
R1NUX1BUUl9GT1JNQVQsIG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgob3JpZ2lu
YWxNZWRpYVR5cGUsICJ2aWRlby8iKSkgeworICAgICAgICAgICAgaW50IHdpZHRoID0gMDsKKyAg
ICAgICAgICAgIGludCBoZWlnaHQgPSAwOworICAgICAgICAgICAgZmxvYXQgZmluYWxIZWlnaHQg
PSAwOworCisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAid2lk
dGgiLCAmd2lkdGgpOworICAgICAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1
Y3R1cmUsICJoZWlnaHQiLCAmaGVpZ2h0KSkgeworICAgICAgICAgICAgICAgIGdpbnQgcmF0aW9O
dW1lcmF0b3IgPSAxOworICAgICAgICAgICAgICAgIGdpbnQgcmF0aW9EZW5vbWluYXRvciA9IDE7
CisKKyAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbihzdHJ1Y3R1cmUs
ICJwaXhlbC1hc3BlY3QtcmF0aW8iLCAmcmF0aW9OdW1lcmF0b3IsICZyYXRpb0Rlbm9taW5hdG9y
KTsKKyAgICAgICAgICAgICAgICBmaW5hbEhlaWdodCA9IGhlaWdodCAqICgoZmxvYXQpIHJhdGlv
RGVub21pbmF0b3IgLyAoZmxvYXQpIHJhdGlvTnVtZXJhdG9yKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKHdpZHRo
LCBmaW5hbEhlaWdodCk7CisgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRp
YVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKCk7CisgICAg
ICAgICAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeChvcmlnaW5hbE1lZGlhVHlwZSwgImF1ZGlvLyIp
KQorICAgICAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3Ry
ZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW87CisgICAgICAgICAgICBlbHNlIGlmIChnX3N0cl9oYXNf
cHJlZml4KG9yaWdpbmFsTWVkaWFUeXBlLCAidGV4dC8iKSkKKyAgICAgICAgICAgICAgICBtX3N0
cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQ7
CisgICAgICAgIH0KKyAgICAgICAgc2l6ZUNvbmZpZ3VyZWQgPSB0cnVlOworICAgIH0KKyNlbmRp
ZgorCisgICAgaWYgKCFzaXplQ29uZmlndXJlZCkgeworICAgICAgICBpZiAoZ19zdHJfaGFzX3By
ZWZpeChzdHJ1Y3R1cmVOYW1lLCAidmlkZW8vIikgJiYgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBz
KCZpbmZvLCBkZW11eGVyU3JjUGFkQ2FwcykpIHsKKyAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBo
ZWlnaHQ7CisKKyAgICAgICAgICAgIHdpZHRoID0gaW5mby53aWR0aDsKKyAgICAgICAgICAgIGhl
aWdodCA9IGluZm8uaGVpZ2h0ICogKChmbG9hdCkgaW5mby5wYXJfZCAvIChmbG9hdCkgaW5mby5w
YXJfbik7CisKKyAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6
Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW87CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBXZWJDb3JlOjpGbG9hdFNpemUoKTsK
KyAgICAgICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KHN0cnVjdHVyZU5hbWUsICJhdWRpby8i
KSkKKyAgICAgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0
cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOworICAgICAgICAgICAgZWxzZSBpZiAoZ19zdHJfaGFz
X3ByZWZpeChzdHJ1Y3R1cmVOYW1lLCAidGV4dC8iKSkKKyAgICAgICAgICAgICAgICBtX3N0cmVh
bVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQ7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtDYXBzQ2hh
bmdlZCgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFt
X2FwcHNpbmspCisgICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2lu
ayIpKTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRf
Y3VycmVudF9jYXBzKHBhZC5nZXQoKSkpOworCisgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlJ3Jl
IHJpZ2h0IGFmdGVyIGEgbmV3IHRyYWNrIGhhcyBhcHBlYXJlZC4gT3RoZXJ3aXNlLCBpdCdzIGEg
Y2FwcyBjaGFuZ2UgaW5zaWRlIHRoZSBzYW1lIHRyYWNrLgorICAgIGJvb2wgcHJldmlvdXNDYXBz
V2VyZU51bGwgPSAhbV9hcHBzaW5rQ2FwczsKKworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGdzdF9jYXBzX3JlcGxhY2UoJm1fYXBwc2lua0NhcHMub3V0UHRyKCks
IGNhcHMuZ2V0KCkpKSB7CisgICAgICAgIGlmIChtX3BsYXllclByaXZhdGUgJiYgcHJldmlvdXND
YXBzV2VyZU51bGwpCisgICAgICAgICAgICBtX3BsYXllclByaXZhdGUtPnRyYWNrRGV0ZWN0ZWQo
dGhpcywgbV9vbGRUcmFjaywgbV90cmFjayk7CisgICAgICAgIGRpZFJlY2VpdmVJbml0aWFsaXph
dGlvblNlZ21lbnQoKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUu
Z2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICB9Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxp
bmU6OmNoZWNrRW5kT2ZBcHBlbmQoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgp
KTsKKworICAgIGlmICghbV9hcHBzcmNOZWVkRGF0YVJlY2VpdmVkIHx8IChtX2FwcGVuZFN0YXRl
ICE9IE9uZ29pbmcgJiYgbV9hcHBlbmRTdGF0ZSAhPSBTYW1wbGluZykpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdTVF9UUkFDRSgiZW5kIG9mIGFwcGVuZCBkYXRhIG1hcmsgd2FzIHJlY2VpdmVk
Iik7CisKKyAgICBzd2l0Y2ggKG1fYXBwZW5kU3RhdGUpIHsKKyAgICBjYXNlIE9uZ29pbmc6Cisg
ICAgICAgIEdTVF9UUkFDRSgiRGF0YVN0YXJ2ZSIpOworICAgICAgICBtX2FwcHNyY05lZWREYXRh
UmVjZWl2ZWQgPSBmYWxzZTsKKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoRGF0YVN0YXJ2ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU2FtcGxpbmc6CisgICAgICAgIEdTVF9UUkFDRSgiTGFz
dFNhbXBsZSIpOworICAgICAgICBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQgPSBmYWxzZTsKKyAg
ICAgICAgc2V0QXBwZW5kU3RhdGUoTGFzdFNhbXBsZSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUoR3N0U2FtcGxl
KiBzYW1wbGUpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgbV9u
ZXdTYW1wbGVMb2NrLmxvY2soKTsKKworICAgIC8vIElnbm9yZSBzYW1wbGVzIGlmIHdlJ3JlIG5v
dCBleHBlY3RpbmcgdGhlbS4gUmVmdXNlIHByb2Nlc3NpbmcgaWYgd2UncmUgaW4gSW52YWxpZCBz
dGF0ZS4KKyAgICBpZiAobV9hcHBlbmRTdGF0ZSAhPSBPbmdvaW5nICYmIG1fYXBwZW5kU3RhdGUg
IT0gU2FtcGxpbmcpIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIlVuZXhwZWN0ZWQgc2FtcGxlLCBh
cHBlbmRTdGF0ZT0lcyIsIGR1bXBBcHBlbmRTdGF0ZShtX2FwcGVuZFN0YXRlKSk7CisgICAgICAg
IC8vIEZJWE1FOiBSZXR1cm4gRVJST1IgYW5kIGZpbmQgYSBtb3JlIHJvYnVzdCB3YXkgdG8gZGV0
ZWN0IHRoYXQgYWxsIHRoZQorICAgICAgICAvLyBkYXRhIGhhcyBiZWVuIHByb2Nlc3NlZCwgc28g
d2UgZG9uJ3QgbmVlZCB0byByZXNvcnQgdG8gdGhlc2UgaGFja3MuCisgICAgICAgIC8vIEFsbCBp
biBhbGwsIHJldHVybiBPSywgZXZlbiBpZiBpdCdzIG5vdCB0aGUgcHJvcGVyIHRoaW5nIHRvIGRv
LiBXZSBkb24ndCB3YW50IHRvIGJyZWFrIHRoZSBkZW11eGVyLgorICAgICAgICBtX2Zsb3dSZXR1
cm4gPSBHU1RfRkxPV19PSzsKKyAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRpb24ubm90aWZ5T25l
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8R1N0cmVhbWVyTWVkaWFT
YW1wbGU+IG1lZGlhU2FtcGxlID0gV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFTYW1wbGU6OmNyZWF0
ZShzYW1wbGUsIG1fcHJlc2VudGF0aW9uU2l6ZSwgdHJhY2tJZCgpKTsKKworICAgIEdTVF9UUkFD
RSgiYXBwZW5kOiB0cmFja0lkPSVzIFBUUz0lZiBwcmVzZW50YXRpb25TaXplPSUuMGZ4JS4wZiIs
IG1lZGlhU2FtcGxlLT50cmFja0lEKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbWVkaWFTYW1w
bGUtPnByZXNlbnRhdGlvblRpbWUoKS50b0Zsb2F0KCksIG1lZGlhU2FtcGxlLT5wcmVzZW50YXRp
b25TaXplKCkud2lkdGgoKSwgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblNpemUoKS5oZWlnaHQo
KSk7CisKKyAgICAvLyBJZiB3ZSdyZSBiZXlvbmQgdGhlIGR1cmF0aW9uLCBpZ25vcmUgdGhpcyBz
YW1wbGUgYW5kIHRoZSByZW1haW5pbmcgb25lcy4KKyAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBt
X21lZGlhU291cmNlQ2xpZW50LT5kdXJhdGlvbigpOworICAgIGlmIChkdXJhdGlvbi5pc1ZhbGlk
KCkgJiYgIWR1cmF0aW9uLmluZGVmaW5pdGVUaW1lKCkgJiYgbWVkaWFTYW1wbGUtPnByZXNlbnRh
dGlvblRpbWUoKSA+IGR1cmF0aW9uKSB7CisgICAgICAgIEdTVF9ERUJVRygiRGV0ZWN0ZWQgc2Ft
cGxlICglZikgYmV5b25kIHRoZSBkdXJhdGlvbiAoJWYpLCBkZWNsYXJpbmcgTGFzdFNhbXBsZSIs
IG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkudG9GbG9hdCgpLCBkdXJhdGlvbi50b0Zs
b2F0KCkpOworICAgICAgICBzZXRBcHBlbmRTdGF0ZShMYXN0U2FtcGxlKTsKKyAgICAgICAgbV9m
bG93UmV0dXJuID0gR1NUX0ZMT1dfT0s7CisgICAgICAgIG1fbmV3U2FtcGxlQ29uZGl0aW9uLm5v
dGlmeU9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQWRkIGEgZ2FwIHNh
bXBsZSBpZiBhIGdhcCBpcyBkZXRlY3RlZCBiZWZvcmUgdGhlIGZpcnN0IHNhbXBsZS4KKyAgICBp
ZiAobWVkaWFTYW1wbGUtPmRlY29kZVRpbWUoKSA9PSBNZWRpYVRpbWU6Onplcm9UaW1lKCkKKyAg
ICAgICAgJiYgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKSA+IE1lZGlhVGltZTo6emVy
b1RpbWUoKQorICAgICAgICAmJiBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpIDw9IE1l
ZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSgwLjEpKSB7CisgICAgICAgIEdTVF9ERUJVRygiQWRk
aW5nIGdhcCBvZmZzZXQiKTsKKyAgICAgICAgbWVkaWFTYW1wbGUtPmFwcGx5UHRzT2Zmc2V0KE1l
ZGlhVGltZTo6emVyb1RpbWUoKSk7CisgICAgfQorCisgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRl
LT5kaWRSZWNlaXZlU2FtcGxlKG1lZGlhU2FtcGxlKTsKKyAgICBzZXRBcHBlbmRTdGF0ZShTYW1w
bGluZyk7CisgICAgbV9mbG93UmV0dXJuID0gR1NUX0ZMT1dfT0s7CisgICAgbV9uZXdTYW1wbGVD
b25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgbV9uZXdTYW1wbGVMb2NrLnVubG9jaygpOworCisg
ICAgY2hlY2tFbmRPZkFwcGVuZCgpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjphcHBzaW5r
RU9TKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBzd2l0Y2gg
KG1fYXBwZW5kU3RhdGUpIHsKKyAgICAvLyBJZ25vcmVkLiBPcGVyYXRpb24gY29tcGxldGlvbiB3
aWxsIGJlIG1hbmFnZWQgYnkgdGhlIEFib3J0aW5nLT5Ob3RTdGFydGVkIHRyYW5zaXRpb24uCisg
ICAgY2FzZSBBYm9ydGluZzoKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEZpbmlzaCBPbmdvaW5n
IGFuZCBTYW1wbGluZyBzdGF0ZXMuCisgICAgY2FzZSBPbmdvaW5nOgorICAgICAgICBzZXRBcHBl
bmRTdGF0ZShEYXRhU3RhcnZlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTYW1wbGluZzoK
KyAgICAgICAgc2V0QXBwZW5kU3RhdGUoTGFzdFNhbXBsZSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdTVF9ERUJVRygiVW5leHBlY3RlZCBFT1MiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpkaWRSZWNlaXZlSW5pdGlh
bGl6YXRpb25TZWdtZW50KCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisK
KyAgICBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNl
Z21lbnQgaW5pdGlhbGl6YXRpb25TZWdtZW50OworCisgICAgR1NUX0RFQlVHKCJOb3RpZnlpbmcg
U291cmNlQnVmZmVyIGZvciB0cmFjayAlcyIsIG1fdHJhY2stPmlkKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LmR1cmF0aW9uID0gbV9tZWRpYVNv
dXJjZUNsaWVudC0+ZHVyYXRpb24oKTsKKyAgICBzd2l0Y2ggKG1fc3RyZWFtVHlwZSkgeworICAg
IGNhc2UgQXVkaW86IHsKKyAgICAgICAgV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVu
dDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKKyAg
ICAgICAgaW5mby50cmFjayA9IHN0YXRpY19jYXN0PEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVy
Kj4obV90cmFjay5nZXQoKSk7CisgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQo
KSk7CisgICAgICAgIGluaXRpYWxpemF0aW9uU2VnbWVudC5hdWRpb1RyYWNrcy5hcHBlbmQoaW5m
byk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFZpZGVvOiB7CisgICAgICAgIFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6
VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87CisgICAgICAgIGluZm8udHJhY2sgPSBzdGF0aWNf
Y2FzdDxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KG1fdHJhY2suZ2V0KCkpOworICAgICAg
ICBpbmZvLmRlc2NyaXB0aW9uID0gV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFEZXNjcmlwdGlvbjo6
Y3JlYXRlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCkpOworICAgICAgICBpbml0aWFsaXphdGlv
blNlZ21lbnQudmlkZW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVHKCJVbnN1cHBvcnRlZCBvciB1bmtub3du
IHN0cmVhbSB0eXBlIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPmRpZFJlY2VpdmVJbml0
aWFsaXphdGlvblNlZ21lbnQoaW5pdGlhbGl6YXRpb25TZWdtZW50KTsKK30KKworQXRvbWljU3Ry
aW5nIEFwcGVuZFBpcGVsaW5lOjp0cmFja0lkKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5U
aHJlYWQoKSk7CisKKyAgICBpZiAoIW1fdHJhY2spCisgICAgICAgIHJldHVybiBBdG9taWNTdHJp
bmcoKTsKKworICAgIHJldHVybiBtX3RyYWNrLT5pZCgpOworfQorCit2b2lkIEFwcGVuZFBpcGVs
aW5lOjpyZXNldFBpcGVsaW5lKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7
CisgICAgR1NUX0RFQlVHKCJyZXNldHRpbmcgcGlwZWxpbmUiKTsKKyAgICBtX2FwcHNyY0F0TGVh
c3RBQnVmZmVyTGVmdCA9IGZhbHNlOworICAgIHNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKTsK
KworICAgIG1fbmV3U2FtcGxlTG9jay5sb2NrKCk7CisgICAgbV9uZXdTYW1wbGVDb25kaXRpb24u
bm90aWZ5T25lKCk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
IEdTVF9TVEFURV9SRUFEWSk7CisgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUu
Z2V0KCksIG51bGxwdHIsIG51bGxwdHIsIDApOworICAgIG1fbmV3U2FtcGxlTG9jay51bmxvY2so
KTsKKworI2lmICghKExPR19ESVNBQkxFRCB8fCBHU1RfRElTQUJMRV9HU1RfREVCVUcpKQorICAg
IHsKKyAgICAgICAgLy8gVGhpcyBpcyBoZXJlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIEl0IGRv
ZXMgbm90IG1ha2Ugc2Vuc2UgdG8gaGF2ZSBpdCBhcyBjbGFzcyBtZW1iZXIuCisgICAgICAgIFdU
Rjo6U3RyaW5nICBkb3RGaWxlTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJyZXNldC1waXBlbGluZS0l
ZCIsICsraSk7CisgICAgICAgIGdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGUoR1NUX0JJTihtX3Bp
cGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkb3RGaWxlTmFtZS51dGY4
KCkuZGF0YSgpKTsKKyAgICB9CisjZW5kaWYKKworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpz
ZXRBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCkKK3sKKyAgICBpZiAobV9hcHBzcmNEYXRhTGVhdmlu
Z1Byb2JlSWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9UUkFDRSgic2V0dGluZyBhcHBz
cmMgZGF0YSBsZWF2aW5nIHByb2JlIik7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gYXBwc3JjUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc3JjLmdldCgpLCAi
c3JjIikpOworICAgIG1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkID0gZ3N0X3BhZF9hZGRfcHJv
YmUoYXBwc3JjUGFkLmdldCgpLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJl
dF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJhY2s+KGFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZp
bmcpLCB0aGlzLCBudWxscHRyKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6cmVtb3ZlQXBw
c3JjRGF0YUxlYXZpbmdQcm9iZSgpCit7CisgICAgaWYgKCFtX2FwcHNyY0RhdGFMZWF2aW5nUHJv
YmVJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX1RSQUNFKCJyZW1vdmluZyBhcHBzcmMg
ZGF0YSBsZWF2aW5nIHByb2JlIik7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gYXBwc3JjUGFkID0g
YWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc3JjLmdldCgpLCAic3Jj
IikpOworICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKGFwcHNyY1BhZC5nZXQoKSwgbV9hcHBzcmNE
YXRhTGVhdmluZ1Byb2JlSWQpOworICAgIG1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkID0gMDsK
K30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6YWJvcnQoKQoreworICAgIEFTU0VSVChXVEY6Omlz
TWFpblRocmVhZCgpKTsKKyAgICBHU1RfREVCVUcoImFib3J0aW5nIik7CisKKyAgICBtX3BlbmRp
bmdCdWZmZXIuY2xlYXIoKTsKKworICAgIC8vIEFib3J0IGFscmVhZHkgb25nb2luZy4KKyAgICBp
ZiAobV9hYm9ydFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYWJvcnRQZW5kaW5n
ID0gdHJ1ZTsKKyAgICBpZiAobV9hcHBlbmRTdGF0ZSA9PSBOb3RTdGFydGVkKQorICAgICAgICBz
ZXRBcHBlbmRTdGF0ZShBYm9ydGluZyk7CisgICAgLy8gRWxzZSwgdGhlIGF1dG9tYXRpYyBzdGF0
ZSB0cmFuc2l0aW9ucyB3aWxsIHRha2UgY2FyZSB3aGVuIHRoZSBvbmdvaW5nIGFwcGVuZCBmaW5p
c2hlcy4KK30KKworR3N0Rmxvd1JldHVybiBBcHBlbmRQaXBlbGluZTo6cHVzaE5ld0J1ZmZlcihH
c3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBHc3RGbG93UmV0dXJuIHJlc3VsdDsKKworICAgIGlm
IChtX2Fib3J0UGVuZGluZykgeworICAgICAgICBtX3BlbmRpbmdCdWZmZXIgPSBhZG9wdEdSZWYo
YnVmZmVyKTsKKyAgICAgICAgcmVzdWx0ID0gR1NUX0ZMT1dfT0s7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgc2V0QXBwZW5kU3RhdGUoQXBwZW5kUGlwZWxpbmU6Ok9uZ29pbmcpOworICAgICAgICBH
U1RfVFJBQ0UoInB1c2hpbmcgbmV3IGJ1ZmZlciAlcCIsIGJ1ZmZlcik7CisgICAgICAgIHJlc3Vs
dCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKEdTVF9BUFBfU1JDKGFwcHNyYygpKSwgYnVmZmVy
KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5l
OjpyZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKQoreworICAgIEdTVF9UUkFDRSgiYnVm
ZmVyIGxlZnQgYXBwc3JjLCByZXBvc3RpbmcgdG8gYnVzIik7CisgICAgR3N0U3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXBwc3JjLWJ1ZmZlci1sZWZ0Iik7
CisgICAgR3N0TWVzc2FnZSogbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbihH
U1RfT0JKRUNUKG1fYXBwc3JjLmdldCgpKSwgc3RydWN0dXJlKTsKKyAgICBnc3RfYnVzX3Bvc3Qo
bV9idXMuZ2V0KCksIG1lc3NhZ2UpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpyZXBvcnRB
cHBzcmNOZWVkRGF0YVJlY2VpdmVkKCkKK3sKKyAgICBHU1RfVFJBQ0UoInJlY2VpdmVkIG5lZWQt
ZGF0YSBzaWduYWwgYXQgYXBwc3JjLCByZXBvc3RpbmcgdG8gYnVzIik7CisgICAgR3N0U3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXBwc3JjLW5lZWQtZGF0
YSIpOworICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRp
b24oR1NUX09CSkVDVChtX2FwcHNyYy5nZXQoKSksIHN0cnVjdHVyZSk7CisgICAgZ3N0X2J1c19w
b3N0KG1fYnVzLmdldCgpLCBtZXNzYWdlKTsKK30KKworR3N0Rmxvd1JldHVybiBBcHBlbmRQaXBl
bGluZTo6aGFuZGxlTmV3QXBwc2lua1NhbXBsZShHc3RFbGVtZW50KiBhcHBzaW5rKQoreworICAg
IEFTU0VSVCghV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBtX25ld1NhbXBsZUxvY2subG9j
aygpOworICAgIGJvb2wgaW52YWxpZCA9ICFtX3BsYXllclByaXZhdGUgfHwgbV9hcHBlbmRTdGF0
ZSA9PSBJbnZhbGlkOworICAgIG1fbmV3U2FtcGxlTG9jay51bmxvY2soKTsKKworICAgIC8vIEV2
ZW4gaWYgd2UncmUgZGlzYWJsZWQsIGl0J3MgaW1wb3J0YW50IHRvIHB1bGwgdGhlIHNhbXBsZSBv
dXQgYW55d2F5IHRvCisgICAgLy8gYXZvaWQgZGVhZGxvY2tzIHdoZW4gY2hhbmdpbmcgdG8gR1NU
X1NUQVRFX05VTEwgaGF2aW5nIGEgbm9uIGVtcHR5IGFwcHNpbmsuCisgICAgR1JlZlB0cjxHc3RT
YW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfcHVsbF9zYW1wbGUoR1NUX0FQ
UF9TSU5LKGFwcHNpbmspKSk7CisKKyAgICBpZiAoaW52YWxpZCkgeworICAgICAgICBHU1RfREVC
VUcoIkFwcGVuZFBpcGVsaW5lIGhhcyBiZWVuIGRpc2FibGVkLCBpZ25vcmluZyB0aGlzIHNhbXBs
ZSIpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgICAgfQorCisgICAgTG9ja0hv
bGRlciBsb2NrZXIobV9uZXdTYW1wbGVMb2NrKTsKKyAgICBpZiAoISghbV9wbGF5ZXJQcml2YXRl
IHx8IG1fYXBwZW5kU3RhdGUgPT0gSW52YWxpZCkpIHsKKyAgICAgICAgR3N0U3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldygiYXBwc2luay1uZXctc2FtcGxlIiwgIm5ldy1z
YW1wbGUiLCBHU1RfVFlQRV9TQU1QTEUsIHNhbXBsZS5nZXQoKSwgbnVsbHB0cik7CisgICAgICAg
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09C
SkVDVChhcHBzaW5rKSwgc3RydWN0dXJlKTsKKyAgICAgICAgZ3N0X2J1c19wb3N0KG1fYnVzLmdl
dCgpLCBtZXNzYWdlKTsKKyAgICAgICAgR1NUX1RSQUNFKCJhcHBzaW5rLW5ldy1zYW1wbGUgbWVz
c2FnZSBwb3N0ZWQgdG8gYnVzIik7CisKKyAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRpb24ud2Fp
dChtX25ld1NhbXBsZUxvY2spOworICAgICAgICAvLyBXZSd2ZSBiZWVuIGF3YWtlbiBiZWNhdXNl
IHRoZSBzYW1wbGUgd2FzIHByb2Nlc3NlZCBvciBiZWNhdXNlIG9mCisgICAgICAgIC8vIGFuIGV4
Y2VwdGlvbmFsIGNvbmRpdGlvbiAoZW50ZXJlZCBpbiBJbnZhbGlkIHN0YXRlLCBkZXN0cnVjdG9y
LCBldGMuKQorICAgICAgICAvLyBXZSBjYW4ndCByZWxpYWJseSBkZWxldGUgaW5mbyBoZXJlLCBh
cHBlbmRQaXBlbGluZUFwcHNpbmtOZXdTYW1wbGVNYWluVGhyZWFkIHdpbGwgZG8gaXQuCisgICAg
fQorCisgICAgcmV0dXJuIG1fZmxvd1JldHVybjsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6
Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCogZGVtdXhl
clNyY1BhZCkKK3sKKyAgICBpZiAoIW1fYXBwc2luaykKKyAgICAgICAgcmV0dXJuOworCisgICAg
R1NUX0RFQlVHKCJjb25uZWN0aW5nIHRvIGFwcHNpbmsiKTsKKworICAgIEdSZWZQdHI8R3N0UGFk
PiBzaW5rU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2Fw
cHNpbmsuZ2V0KCksICJzaW5rIikpOworCisgICAgLy8gT25seSBvbmUgU3RyZWFtIHBlciBkZW11
eGVyIGlzIHN1cHBvcnRlZC4KKyAgICBBU1NFUlQoIWdzdF9wYWRfaXNfbGlua2VkKHNpbmtTaW5r
UGFkLmdldCgpKSk7CisKKyAgICBnaW50NjQgdGltZUxlbmd0aCA9IDA7CisgICAgaWYgKGdzdF9l
bGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fZGVtdXguZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJnRp
bWVMZW5ndGgpCisgICAgICAgICYmIHN0YXRpY19jYXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpICE9
IEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICAgIG1faW5pdGlhbER1cmF0aW9uID0gTWVkaWFU
aW1lKEdTVF9USU1FX0FTX1VTRUNPTkRTKHRpbWVMZW5ndGgpLCBHX1VTRUNfUEVSX1NFQyk7Cisg
ICAgZWxzZQorICAgICAgICBtX2luaXRpYWxEdXJhdGlvbiA9IE1lZGlhVGltZTo6cG9zaXRpdmVJ
bmZpbml0ZVRpbWUoKTsKKworICAgIGlmIChXVEY6OmlzTWFpblRocmVhZCgpKQorICAgICAgICBj
b25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayhkZW11eGVyU3JjUGFkKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gQ2FsbCBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luaygpIGluIHRoZSBt
YWluIHRocmVhZCBhbmQgd2FpdC4KKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYWRBZGRS
ZW1vdmVMb2NrKTsKKyAgICAgICAgaWYgKCFtX3BsYXllclByaXZhdGUpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJl
X25ldygiZGVtdXhlci1jb25uZWN0LXRvLWFwcHNpbmsiLCAiZGVtdXhlci1zcmMtcGFkIiwgR19U
WVBFX09CSkVDVCwgZGVtdXhlclNyY1BhZCwgbnVsbHB0cik7CisgICAgICAgIEdzdE1lc3NhZ2Uq
IG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChtX2RlbXV4
LmdldCgpKSwgc3RydWN0dXJlKTsKKyAgICAgICAgZ3N0X2J1c19wb3N0KG1fYnVzLmdldCgpLCBt
ZXNzYWdlKTsKKyAgICAgICAgR1NUX1RSQUNFKCJkZW11eGVyLWNvbm5lY3QtdG8tYXBwc2luayBt
ZXNzYWdlIHBvc3RlZCB0byBidXMiKTsKKworICAgICAgICBtX3BhZEFkZFJlbW92ZUNvbmRpdGlv
bi53YWl0KG1fcGFkQWRkUmVtb3ZlTG9jayk7CisgICAgfQorCisgICAgLy8gTXVzdCBiZSBkb25l
IGluIHRoZSB0aHJlYWQgd2Ugd2VyZSBjYWxsZWQgZnJvbSAodXN1YWxseSBzdHJlYW1pbmcgdGhy
ZWFkKS4KKyAgICBib29sIGlzRGF0YSA9IGZhbHNlOworCisgICAgc3dpdGNoIChtX3N0cmVhbVR5
cGUpIHsKKyAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6
QXVkaW86CisgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6
OlZpZGVvOgorICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpUZXh0OgorICAgICAgICBpc0RhdGEgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaXNEYXRhKSB7CisgICAgICAg
IC8vIEZJWE1FOiBPbmx5IGFkZCBhcHBzaW5rIG9uZSB0aW1lLiBUaGlzIG1ldGhvZCBjYW4gYmUg
Y2FsbGVkIHNldmVyYWwgdGltZXMuCisgICAgICAgIEdSZWZQdHI8R3N0T2JqZWN0PiBwYXJlbnQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudChtX2FwcHNpbmsuZ2V0KCkpKTsKKyAg
ICAgICAgaWYgKCFwYXJlbnQpCisgICAgICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOKG1fcGlw
ZWxpbmUuZ2V0KCkpLCBtX2FwcHNpbmsuZ2V0KCkpOworCisjaWYgKEVOQUJMRShFTkNSWVBURURf
TUVESUEpIHx8IEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpKQorICAgICAgICBpZiAobV9kZWNy
eXB0b3IpIHsKKyAgICAgICAgICAgIGdzdF9vYmplY3RfcmVmKG1fZGVjcnlwdG9yLmdldCgpKTsK
KyAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1fZGVj
cnlwdG9yLmdldCgpKTsKKworICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGRlY3J5cHRvclNy
Y1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2RlY3J5cHRvci5n
ZXQoKSwgInNyYyIpKTsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBkZWNyeXB0b3JTaW5r
UGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fZGVjcnlwdG9yLmdl
dCgpLCAic2luayIpKTsKKyAgICAgICAgICAgIGdzdF9wYWRfbGluayhkZW11eGVyU3JjUGFkLCBk
ZWNyeXB0b3JTaW5rUGFkLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9wYWRfbGluayhkZWNyeXB0
b3JTcmNQYWQuZ2V0KCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9lbGVt
ZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV9hcHBzaW5rLmdldCgpKTsKKyAgICAgICAgICAg
IGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV9kZWNyeXB0b3IuZ2V0KCkpOwor
ICAgICAgICB9IGVsc2UgeworI2VuZGlmCisgICAgICAgICAgICBnc3RfcGFkX2xpbmsoZGVtdXhl
clNyY1BhZCwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3lu
Y19zdGF0ZV93aXRoX3BhcmVudChtX2FwcHNpbmsuZ2V0KCkpOworI2lmIChFTkFCTEUoRU5DUllQ
VEVEX01FRElBKSB8fCBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKSkKKyAgICAgICAgfQorI2Vu
ZGlmCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1Rf
U1RBVEVfUEFVU0VEKTsKKyAgICB9Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbm5lY3RE
ZW11eGVyU3JjUGFkVG9BcHBzaW5rKEdzdFBhZCogZGVtdXhlclNyY1BhZCkKK3sKKyAgICBBU1NF
UlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgR1NUX0RFQlVHKCJDb25uZWN0aW5nIHRvIGFw
cHNpbmsiKTsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFkQWRkUmVtb3ZlTG9jayk7Cisg
ICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtTaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisKKyAgICAvLyBPbmx5IG9u
ZSBTdHJlYW0gcGVyIGRlbXV4ZXIgaXMgc3VwcG9ydGVkLgorICAgIEFTU0VSVCghZ3N0X3BhZF9p
c19saW5rZWQoc2lua1NpbmtQYWQuZ2V0KCkpKTsKKworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2Fw
cyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMoR1NUX1BBRChkZW11eGVyU3Jj
UGFkKSkpOworCisgICAgaWYgKCFjYXBzIHx8IG1fYXBwZW5kU3RhdGUgPT0gSW52YWxpZCB8fCAh
bV9wbGF5ZXJQcml2YXRlKSB7CisgICAgICAgIG1fcGFkQWRkUmVtb3ZlQ29uZGl0aW9uLm5vdGlm
eU9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgKCEoTE9HX0RJU0FCTEVEIHx8
IEdTVF9ESVNBQkxFX0dTVF9ERUJVRykpCisgICAgeworICAgICAgICBHVW5pcXVlUHRyPGdjaGFy
PiBzdHJjYXBzKGdzdF9jYXBzX3RvX3N0cmluZyhjYXBzLmdldCgpKSk7CisgICAgICAgIEdTVF9E
RUJVRygiJXMiLCBzdHJjYXBzLmdldCgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChtX2lu
aXRpYWxEdXJhdGlvbiA+IG1fbWVkaWFTb3VyY2VDbGllbnQtPmR1cmF0aW9uKCkpCisgICAgICAg
IG1fbWVkaWFTb3VyY2VDbGllbnQtPmR1cmF0aW9uQ2hhbmdlZChtX2luaXRpYWxEdXJhdGlvbik7
CisKKyAgICBtX29sZFRyYWNrID0gbV90cmFjazsKKworICAgIHBhcnNlRGVtdXhlclNyY1BhZENh
cHMoZ3N0X2NhcHNfcmVmKGNhcHMuZ2V0KCkpKTsKKworICAgIHN3aXRjaCAobV9zdHJlYW1UeXBl
KSB7CisgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1
ZGlvOgorICAgICAgICBpZiAobV9wbGF5ZXJQcml2YXRlKQorICAgICAgICAgICAgbV90cmFjayA9
IFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9wbGF5ZXJQcml2
YXRlLT5waXBlbGluZSgpLCBpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRl
bzoKKyAgICAgICAgaWYgKG1fcGxheWVyUHJpdmF0ZSkKKyAgICAgICAgICAgIG1fdHJhY2sgPSBX
ZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1fcGxheWVyUHJpdmF0
ZS0+cGlwZWxpbmUoKSwgaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDoK
KyAgICAgICAgbV90cmFjayA9IFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZShpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIC8vIE5vIHVzZWZ1bCBkYXRhLCBidXQgbm90aWZ5IGFueXdheSB0
byBjb21wbGV0ZSB0aGUgYXBwZW5kIG9wZXJhdGlvbi4KKyAgICAgICAgR1NUX0RFQlVHKCIobm8g
ZGF0YSkiKTsKKyAgICAgICAgR1NUX0RFQlVHKCJyZWNlaXZlZCBhbGwgcGVuZGluZyBzYW1wbGVz
Iik7CisgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+ZGlkUmVjZWl2ZUFsbFBlbmRpbmdT
YW1wbGVzKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fcGFkQWRkUmVtb3ZlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpkaXNjb25uZWN0
RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZCgpCit7CisgICAgR1NUX0RFQlVH
KCJEaXNjb25uZWN0aW5nIGFwcHNpbmsiKTsKKworICAgIC8vIE11c3QgYmUgZG9uZSBpbiB0aGUg
dGhyZWFkIHdlIHdlcmUgY2FsbGVkIGZyb20gKHVzdWFsbHkgc3RyZWFtaW5nIHRocmVhZCkuCisj
aWYgKEVOQUJMRShFTkNSWVBURURfTUVESUEpIHx8IEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIp
KQorICAgIGlmIChtX2RlY3J5cHRvcikgeworICAgICAgICBnc3RfZWxlbWVudF91bmxpbmsobV9k
ZWNyeXB0b3IuZ2V0KCksIG1fYXBwc2luay5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X3Vu
bGluayhtX2RlbXV4LmdldCgpLCBtX2RlY3J5cHRvci5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVt
ZW50X3NldF9zdGF0ZShtX2RlY3J5cHRvci5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgICAg
ICBnc3RfYmluX3JlbW92ZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX2RlY3J5cHRvci5n
ZXQoKSk7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rKG1f
ZGVtdXguZ2V0KCksIG1fYXBwc2luay5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZFBp
cGVsaW5lQXBwc2lua0NhcHNDaGFuZ2VkKEdPYmplY3QqIGFwcHNpbmtQYWQsIEdQYXJhbVNwZWMq
LCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgR3N0U3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXBwc2luay1jYXBzLWNoYW5nZWQi
KTsKKyAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9u
KEdTVF9PQkpFQ1QoYXBwc2lua1BhZCksIHN0cnVjdHVyZSk7CisgICAgZ3N0X2J1c19wb3N0KGFw
cGVuZFBpcGVsaW5lLT5idXMoKSwgbWVzc2FnZSk7CisgICAgR1NUX1RSQUNFKCJhcHBzaW5rLWNh
cHMtY2hhbmdlZCBtZXNzYWdlIHBvc3RlZCB0byBidXMiKTsKK30KKworc3RhdGljIEdzdFBhZFBy
b2JlUmV0dXJuIGFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcoR3N0UGFkKiwgR3N0UGFk
UHJvYmVJbmZvKiBpbmZvLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAg
QVNTRVJUKEdTVF9QQURfUFJPQkVfSU5GT19UWVBFKGluZm8pICYgR1NUX1BBRF9QUk9CRV9UWVBF
X0JVRkZFUik7CisKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IEdTVF9QQURfUFJPQkVfSU5GT19C
VUZGRVIoaW5mbyk7CisgICAgZ3NpemUgYnVmZmVyU2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUo
YnVmZmVyKTsKKworICAgIEdTVF9UUkFDRSgiYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JN
QVQgIiBnb2luZyB0aHJ1IiwgYnVmZmVyU2l6ZSk7CisKKyAgICBhcHBlbmRQaXBlbGluZS0+cmVw
b3J0QXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KCk7CisKKyAgICByZXR1cm4gR1NUX1BBRF9QUk9C
RV9PSzsKK30KKworI2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBHc3RQYWRQcm9iZVJldHVybiBh
cHBlbmRQaXBlbGluZVBhZFByb2JlRGVidWdJbmZvcm1hdGlvbihHc3RQYWQqLCBHc3RQYWRQcm9i
ZUluZm8qIGluZm8sIHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uKiBwYWRQcm9iZUluZm9ybWF0
aW9uKQoreworICAgIEFTU0VSVChHU1RfUEFEX1BST0JFX0lORk9fVFlQRShpbmZvKSAmIEdTVF9Q
QURfUFJPQkVfVFlQRV9CVUZGRVIpOworICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gR1NUX1BBRF9Q
Uk9CRV9JTkZPX0JVRkZFUihpbmZvKTsKKyAgICBHU1RfVFJBQ0UoIiVzOiBidWZmZXIgb2Ygc2l6
ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIGdvaW5nIHRocnUiLCBwYWRQcm9iZUluZm9ybWF0aW9uLT5k
ZXNjcmlwdGlvbiwgZ3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpKTsKKyAgICByZXR1cm4gR1NU
X1BBRF9QUk9CRV9PSzsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUFw
cHNyY05lZWREYXRhKEdzdEFwcFNyYyosIGd1aW50LCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlw
ZWxpbmUpCit7CisgICAgYXBwZW5kUGlwZWxpbmUtPnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2
ZWQoKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVEZW11eGVyUGFkQWRkZWQoR3N0
RWxlbWVudCosIEdzdFBhZCogZGVtdXhlclNyY1BhZCwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBp
cGVsaW5lKQoreworICAgIGFwcGVuZFBpcGVsaW5lLT5jb25uZWN0RGVtdXhlclNyY1BhZFRvQXBw
c2lua0Zyb21BbnlUaHJlYWQoZGVtdXhlclNyY1BhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVu
ZFBpcGVsaW5lRGVtdXhlclBhZFJlbW92ZWQoR3N0RWxlbWVudCosIEdzdFBhZCosIEFwcGVuZFBp
cGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICBhcHBlbmRQaXBlbGluZS0+ZGlzY29ubmVj
dERlbXV4ZXJTcmNQYWRGcm9tQXBwc2lua0Zyb21BbnlUaHJlYWQoKTsKK30KKworc3RhdGljIEdz
dEZsb3dSZXR1cm4gYXBwZW5kUGlwZWxpbmVBcHBzaW5rTmV3U2FtcGxlKEdzdEVsZW1lbnQqIGFw
cHNpbmssIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICByZXR1cm4gYXBw
ZW5kUGlwZWxpbmUtPmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoYXBwc2luayk7Cit9CisKK3N0YXRp
YyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwc2lua0VPUyhHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxp
bmUqIGFwcGVuZFBpcGVsaW5lKQoreworICAgIGlmIChXVEY6OmlzTWFpblRocmVhZCgpKQorICAg
ICAgICBhcHBlbmRQaXBlbGluZS0+YXBwc2lua0VPUygpOworICAgIGVsc2UgeworICAgICAgICBH
c3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhcHBzaW5r
LWVvcyIpOworICAgICAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2Fw
cGxpY2F0aW9uKEdTVF9PQkpFQ1QoYXBwZW5kUGlwZWxpbmUtPmFwcHNpbmsoKSksIHN0cnVjdHVy
ZSk7CisgICAgICAgIGdzdF9idXNfcG9zdChhcHBlbmRQaXBlbGluZS0+YnVzKCksIG1lc3NhZ2Up
OworICAgICAgICBHU1RfVFJBQ0UoImFwcHNpbmstZW9zIG1lc3NhZ2UgcG9zdGVkIHRvIGJ1cyIp
OworICAgIH0KKworICAgIEdTVF9ERUJVRygiJXMgbWFpbiB0aHJlYWQiLCAoV1RGOjppc01haW5U
aHJlYWQoKSkgPyAiSXMiIDogIk5vdCIpOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZS4KKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5l
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjgwNzA4ZmJlNTIxZTliODk1MGZkNGM2YmJjNzBkZWQwNzE2Yjg1NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAy
MDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIEFwcGVuZFBpcGVsaW5lX2gKKyNkZWZpbmUgQXBwZW5kUGlw
ZWxpbmVfaAorCisjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUo
TUVESUFfU09VUkNFKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJHUmVmUHRy
R1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgi
CisjaW5jbHVkZSAiTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuaCIKKyNpbmNsdWRlICJT
b3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisK
KyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQXBwZW5kUGlwZWxpbmUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QXBwZW5kUGlw
ZWxpbmU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIEFwcGVuZFN0YXRlIHsgSW52YWxpZCwgTm90U3Rh
cnRlZCwgT25nb2luZywgS2V5TmVnb3RpYXRpb24sIERhdGFTdGFydmUsIFNhbXBsaW5nLCBMYXN0
U2FtcGxlLCBBYm9ydGluZyB9OworCisgICAgQXBwZW5kUGlwZWxpbmUoUGFzc1JlZlB0cjxNZWRp
YVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4sIFBhc3NSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0
ZUdTdHJlYW1lcj4sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSopOworICAgIHZpcnR1
YWwgfkFwcGVuZFBpcGVsaW5lKCk7CisKKyAgICB2b2lkIGhhbmRsZUVsZW1lbnRNZXNzYWdlKEdz
dE1lc3NhZ2UqKTsKKyAgICB2b2lkIGhhbmRsZUFwcGxpY2F0aW9uTWVzc2FnZShHc3RNZXNzYWdl
Kik7CisKKyAgICBnaW50IGlkKCk7CisgICAgQXBwZW5kU3RhdGUgYXBwZW5kU3RhdGUoKSB7IHJl
dHVybiBtX2FwcGVuZFN0YXRlOyB9CisgICAgdm9pZCBzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0
ZSk7CisKKyAgICBHc3RGbG93UmV0dXJuIGhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoR3N0RWxlbWVu
dCopOworICAgIEdzdEZsb3dSZXR1cm4gcHVzaE5ld0J1ZmZlcihHc3RCdWZmZXIqKTsKKworICAg
IC8vIFRha2VzIG93bmVyc2hpcCBvZiBjYXBzLgorICAgIHZvaWQgcGFyc2VEZW11eGVyU3JjUGFk
Q2FwcyhHc3RDYXBzKik7CisgICAgdm9pZCBhcHBzaW5rQ2Fwc0NoYW5nZWQoKTsKKyAgICB2b2lk
IGFwcHNpbmtOZXdTYW1wbGUoR3N0U2FtcGxlKik7CisgICAgdm9pZCBhcHBzaW5rRU9TKCk7Cisg
ICAgdm9pZCBkaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KCk7CisgICAgQXRvbWljU3Ry
aW5nIHRyYWNrSWQoKTsKKyAgICB2b2lkIGFib3J0KCk7CisKKyAgICB2b2lkIGNsZWFyUGxheWVy
UHJpdmF0ZSgpOworICAgIFJlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4gbWVk
aWFTb3VyY2VDbGllbnQoKSB7IHJldHVybiBtX21lZGlhU291cmNlQ2xpZW50OyB9CisgICAgUmVm
UHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZlclByaXZhdGUoKSB7
IHJldHVybiBtX3NvdXJjZUJ1ZmZlclByaXZhdGU7IH0KKyAgICBHc3RCdXMqIGJ1cygpIHsgcmV0
dXJuIG1fYnVzLmdldCgpOyB9CisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSB7IHJldHVybiBt
X3BpcGVsaW5lLmdldCgpOyB9CisgICAgR3N0RWxlbWVudCogYXBwc3JjKCkgeyByZXR1cm4gbV9h
cHBzcmMuZ2V0KCk7IH0KKyAgICBHc3RFbGVtZW50KiBhcHBzaW5rKCkgeyByZXR1cm4gbV9hcHBz
aW5rLmdldCgpOyB9CisgICAgR3N0Q2FwcyogZGVtdXhlclNyY1BhZENhcHMoKSB7IHJldHVybiBt
X2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpOyB9CisgICAgR3N0Q2FwcyogYXBwc2lua0NhcHMoKSB7
IHJldHVybiBtX2FwcHNpbmtDYXBzLmdldCgpOyB9CisgICAgUmVmUHRyPFdlYkNvcmU6OlRyYWNr
UHJpdmF0ZUJhc2U+IHRyYWNrKCkgeyByZXR1cm4gbV90cmFjazsgfQorICAgIFdlYkNvcmU6Ok1l
ZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciBzdHJlYW1UeXBlKCkgeyByZXR1cm4gbV9zdHJl
YW1UeXBlOyB9CisKKyAgICB2b2lkIGRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtG
cm9tQW55VGhyZWFkKCk7CisgICAgdm9pZCBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lua0Zy
b21BbnlUaHJlYWQoR3N0UGFkKik7CisgICAgdm9pZCBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBw
c2luayhHc3RQYWQqKTsKKworICAgIHZvaWQgcmVwb3J0QXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0
KCk7CisgICAgdm9pZCByZXBvcnRBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCByZXNldFBpcGVsaW5lKCk7CisgICAgdm9pZCBjaGVja0VuZE9mQXBwZW5kKCk7
CisgICAgdm9pZCBoYW5kbGVBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKTsKKyAgICB2b2lkIGhh
bmRsZUFwcHNyY05lZWREYXRhUmVjZWl2ZWQoKTsKKyAgICB2b2lkIHJlbW92ZUFwcHNyY0RhdGFM
ZWF2aW5nUHJvYmUoKTsKKyAgICB2b2lkIHNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKTsKKwor
cHJpdmF0ZToKKyAgICBSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IG1fbWVk
aWFTb3VyY2VDbGllbnQ7CisgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+
IG1fc291cmNlQnVmZmVyUHJpdmF0ZTsKKyAgICBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0UqIG1fcGxheWVyUHJpdmF0ZTsKKworICAgIC8vIChtX21lZGlhVHlwZSwgbV9pZCkgaXMgdW5p
cXVlLgorICAgIGdpbnQgbV9pZDsKKworICAgIE1lZGlhVGltZSBtX2luaXRpYWxEdXJhdGlvbjsK
KworICAgIEdzdEZsb3dSZXR1cm4gbV9mbG93UmV0dXJuOworCisgICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiBtX3BpcGVsaW5lOworICAgIEdSZWZQdHI8R3N0QnVzPiBtX2J1czsKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fYXBwc3JjOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9kZW11eDsK
KyNpZiAoRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkgfHwgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9W
MikpCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2RlY3J5cHRvcjsKKyNlbmRpZgorICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gbV9hcHBzaW5rOworICAgIC8vIFRoZSBkZW11eGVyIGhhcyBvbmUg
c3JjIFN0cmVhbSBvbmx5LCBzbyBvbmx5IG9uZSBhcHBzaW5rIGlzIG5lZWRlZCBhbmQgbGlua2Vk
IHRvIGl0LgorCisgICAgTG9jayBtX25ld1NhbXBsZUxvY2s7CisgICAgQ29uZGl0aW9uIG1fbmV3
U2FtcGxlQ29uZGl0aW9uOworICAgIExvY2sgbV9wYWRBZGRSZW1vdmVMb2NrOworICAgIENvbmRp
dGlvbiBtX3BhZEFkZFJlbW92ZUNvbmRpdGlvbjsKKworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9h
cHBzaW5rQ2FwczsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fZGVtdXhlclNyY1BhZENhcHM7Cisg
ICAgRmxvYXRTaXplIG1fcHJlc2VudGF0aW9uU2l6ZTsKKworICAgIGJvb2wgbV9hcHBzcmNBdExl
YXN0QUJ1ZmZlckxlZnQ7CisgICAgYm9vbCBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQ7CisKKyAg
ICBndWxvbmcgbV9hcHBzcmNEYXRhTGVhdmluZ1Byb2JlSWQ7CisjaWZkZWYgREVCVUdfQVBQRU5E
X1BJUEVMSU5FX1BBRFMKKyAgICBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiBtX2RlbXV4ZXJE
YXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9uOworICAgIHN0cnVjdCBQYWRQcm9iZUluZm9y
bWF0aW9uIG1fYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb247CisjZW5kaWYK
KworICAgIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBzdGF0ZXMgb2YgYXBwZW5kIHByb2Nlc3Npbmcs
IHRvIGF2b2lkIHBlcmZvcm1pbmcgYWN0aW9ucyBpbmFwcHJvcHJpYXRlIGZvciB0aGUgY3VycmVu
dCBzdGF0ZQorICAgIC8vIChlZzogcHJvY2Vzc2luZyBtb3JlIHNhbXBsZXMgd2hlbiB0aGUgbGFz
dCBvbmUgaGFzIGJlZW4gZGV0ZWN0ZWQsIGV0Yy4pLiBTZWUgc2V0QXBwZW5kU3RhdGUoKSBmb3Ig
dmFsaWQKKyAgICAvLyB0cmFuc2l0aW9ucy4KKyAgICBBcHBlbmRTdGF0ZSBtX2FwcGVuZFN0YXRl
OworCisgICAgLy8gQWJvcnRzIGNhbiBvbmx5IGJlIGNvbXBsZXRlZCB3aGVuIHRoZSBub3JtYWwg
c2FtcGxlIGRldGVjdGlvbiBoYXMgZmluaXNoZWQuIE1lYW53aGlsZSwgdGhlIHdpbGxpbmcgdG8g
YWJvcnQgaXMKKyAgICAvLyBleHByZXNzZWQgaW4gdGhpcyBmaWVsZC4KKyAgICBib29sIG1fYWJv
cnRQZW5kaW5nOworCisgICAgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
IG1fc3RyZWFtVHlwZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gbV9v
bGRUcmFjazsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4gbV90cmFjazsK
KworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBtX3BlbmRpbmdCdWZmZXI7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlLgorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291756</attachid>
            <date>2016-10-16 11:35:31 -0700</date>
            <delta_ts>2016-10-16 12:02:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162874-20161016183159.patch</filename>
            <type>text/plain</type>
            <size>49132</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTA5ZGFhMDBmOGZhMDYw
MDUwY2ExYmVhMTJiNDE3MjIyNTJjNjNmMC4uMTBkODI2ZjkyMWZhNTRiNDJjMGQ4YTU1OTc5NzAy
YzRkZjhmYWFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY4IEBACiAyMDE2LTEwLTAzICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIEFwcGVuZCBQaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRo
IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiAoZGF0YSBzdGFy
dmUKKyAgICAgICAgYW5kIGxhc3Qgc2FtcGxlIGRldGVjdGlvbiwgZGVidWcgZmVhdHVyZXMpIGFu
ZCBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPiAoRU1FCisgICAgICAgIHN1cHBv
cnQpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQ
aXBlbGluZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZHVtcEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lRWxlbWVudE1lc3NhZ2VDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRQaXBlbGluZUFwcGxpY2F0aW9uTWVzc2FnZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6fkFwcGVuZFBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpjbGVhclBsYXllclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVsZW1lbnRNZXNzYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBsaWNhdGlvbk1lc3NhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNyY05lZWREYXRh
UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNy
Y0F0TGVhc3RBQnVmZmVyTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
aWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnNldEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNoZWNrRW5kT2ZBcHBlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtFT1MpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnRyYWNrSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlc2V0UGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwZW5kUGlwZWxpbmU6OnNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGVuZFBpcGVsaW5lOjpwdXNoTmV3QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVu
ZFBpcGVsaW5lOjpyZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9B
cHBzaW5rRnJvbUFueVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1NhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjphcHBl
bmRQaXBlbGluZUFwcHNpbmtFT1MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBl
bmRQaXBlbGluZTo6YXBwZW5kU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxp
bmU6Om1lZGlhU291cmNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
Ojpzb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
OjpidXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzcmMpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlw
ZWxpbmU6OmRlbXV4ZXJTcmNQYWRDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVs
aW5lOjphcHBzaW5rQ2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6dHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnN0cmVhbVR5cGUpOgorCisy
MDE2LTEwLTAzICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+
CisKICAgICAgICAgW0dTdHJlYW1lcl0gRHJhaW4gcXVlcnkgc3VwcG9ydAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODcyCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlw
ZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9BcHBlbmRQaXBlbGluZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjkwZTgyYjk0N2Y0MWMyNjcyMTBlYjIz
ZDA2N2Q1ZTAyNGNhOGExNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEs
MTA5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQXBwZW5kUGlwZWxpbmUuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQor
CisjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHUmVm
UHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFEZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhU2FtcGxlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgor
I2luY2x1ZGUgIk1lZGlhRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2
YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIK
KworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgorI2luY2x1ZGUgPGdzdC9hcHAvZ3N0
YXBwc3JjLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3Bi
dXRpbHMuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNsdWRlIDx3dGYvQ29u
ZGl0aW9uLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFMT0dfRElTQUJMRUQKK3N0
cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIHsKKyAgICBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlw
ZWxpbmU7CisgICAgY29uc3QgY2hhciogZGVzY3JpcHRpb247CisgICAgZ3Vsb25nIHByb2JlSWQ7
Cit9OworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyKiBkdW1wQXBwZW5kU3RhdGUoQXBwZW5k
UGlwZWxpbmU6OkFwcGVuZFN0YXRlIGFwcGVuZFN0YXRlKQoreworICAgIHN3aXRjaCAoYXBwZW5k
U3RhdGUpIHsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6SW52YWxpZDoK
KyAgICAgICAgcmV0dXJuICJJbnZhbGlkIjsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBl
bmRTdGF0ZTo6Tm90U3RhcnRlZDoKKyAgICAgICAgcmV0dXJuICJOb3RTdGFydGVkIjsKKyAgICBj
YXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6T25nb2luZzoKKyAgICAgICAgcmV0dXJu
ICJPbmdvaW5nIjsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6S2V5TmVn
b3RpYXRpb246CisgICAgICAgIHJldHVybiAiS2V5TmVnb3RpYXRpb24iOworICAgIGNhc2UgQXBw
ZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpEYXRhU3RhcnZlOgorICAgICAgICByZXR1cm4gIkRh
dGFTdGFydmUiOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpTYW1wbGlu
ZzoKKyAgICAgICAgcmV0dXJuICJTYW1wbGluZyI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6
QXBwZW5kU3RhdGU6Okxhc3RTYW1wbGU6CisgICAgICAgIHJldHVybiAiTGFzdFNhbXBsZSI7Cisg
ICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OkFib3J0aW5nOgorICAgICAgICBy
ZXR1cm4gIkFib3J0aW5nIjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gIih1bmtub3du
KSI7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUFwcHNyY05lZWREYXRh
KEdzdEFwcFNyYyosIGd1aW50LCBBcHBlbmRQaXBlbGluZSopOworc3RhdGljIHZvaWQgYXBwZW5k
UGlwZWxpbmVEZW11eGVyUGFkQWRkZWQoR3N0RWxlbWVudCosIEdzdFBhZCosIEFwcGVuZFBpcGVs
aW5lKik7CitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKEdzdEVs
ZW1lbnQqLCBHc3RQYWQqLCBBcHBlbmRQaXBlbGluZSopOworc3RhdGljIHZvaWQgYXBwZW5kUGlw
ZWxpbmVBcHBzaW5rQ2Fwc0NoYW5nZWQoR09iamVjdCosIEdQYXJhbVNwZWMqLCBBcHBlbmRQaXBl
bGluZSopOworc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuIGFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0
YUxlYXZpbmcoR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiwgQXBwZW5kUGlwZWxpbmUqKTsKKyNp
ZiAhTE9HX0RJU0FCTEVECitzdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxpbmVQ
YWRQcm9iZURlYnVnSW5mb3JtYXRpb24oR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiwgc3RydWN0
IFBhZFByb2JlSW5mb3JtYXRpb24qKTsKKyNlbmRpZgorc3RhdGljIEdzdEZsb3dSZXR1cm4gYXBw
ZW5kUGlwZWxpbmVBcHBzaW5rTmV3U2FtcGxlKEdzdEVsZW1lbnQqLCBBcHBlbmRQaXBlbGluZSop
Oworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzaW5rRU9TKEdzdEVsZW1lbnQqLCBBcHBl
bmRQaXBlbGluZSopOworCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUVsZW1lbnRNZXNzYWdl
Q2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgQXBwZW5kUGlwZWxpbmUqIGFw
cGVuZFBpcGVsaW5lKQoreworICAgIGFwcGVuZFBpcGVsaW5lLT5oYW5kbGVFbGVtZW50TWVzc2Fn
ZShtZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBsaWNhdGlvbk1l
c3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBBcHBlbmRQaXBlbGlu
ZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgYXBwZW5kUGlwZWxpbmUtPmhhbmRsZUFwcGxpY2F0
aW9uTWVzc2FnZShtZXNzYWdlKTsKK30KKworQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFBpcGVsaW5l
KFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IG1lZGlhU291cmNlQ2xp
ZW50LCBQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZl
clByaXZhdGUsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogcGxheWVyUHJpdmF0ZSkK
KyAgICA6IG1fbWVkaWFTb3VyY2VDbGllbnQobWVkaWFTb3VyY2VDbGllbnQpCisgICAgLCBtX3Nv
dXJjZUJ1ZmZlclByaXZhdGUoc291cmNlQnVmZmVyUHJpdmF0ZSkKKyAgICAsIG1fcGxheWVyUHJp
dmF0ZShwbGF5ZXJQcml2YXRlKQorICAgICwgbV9pZCgwKQorICAgICwgbV9hcHBzcmNBdExlYXN0
QUJ1ZmZlckxlZnQoZmFsc2UpCisgICAgLCBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQoZmFsc2Up
CisgICAgLCBtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCgwKQorICAgICwgbV9hcHBlbmRTdGF0
ZShOb3RTdGFydGVkKQorICAgICwgbV9hYm9ydFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX3N0cmVh
bVR5cGUoVW5rbm93bikKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAg
ICBHU1RfVFJBQ0UoIkNyZWF0aW5nIEFwcGVuZFBpcGVsaW5lICglcCkiLCB0aGlzKTsKKworICAg
IC8vIEZJWE1FOiBnaXZlIGEgbmFtZSB0byB0aGUgcGlwZWxpbmUsIG1heWJlIHJlbGF0ZWQgd2l0
aCB0aGUgdHJhY2sgaXQncyBtYW5hZ2luZy4KKyAgICAvLyBUaGUgdHJhY2sgbmFtZSBpcyBzdGls
bCB1bmtub3duIGF0IHRoaXMgdGltZSwgdGhvdWdoLgorICAgIG1fcGlwZWxpbmUgPSBhZG9wdEdS
ZWYoZ3N0X3BpcGVsaW5lX25ldyhudWxscHRyKSk7CisKKyAgICBtX2J1cyA9IGFkb3B0R1JlZihn
c3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKKyAg
ICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2gobV9idXMuZ2V0KCkpOworICAgIGdzdF9idXNfZW5h
YmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbihtX2J1cy5nZXQoKSk7CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0KG1fYnVzLmdldCgpLCAic3luYy1tZXNzYWdlOjplbGVtZW50IiwgR19DQUxMQkFDSyhh
cHBlbmRQaXBlbGluZUVsZW1lbnRNZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KG1fYnVzLmdldCgpLCAibWVzc2FnZTo6YXBwbGljYXRpb24iLCBHX0NBTExCQUNL
KGFwcGVuZFBpcGVsaW5lQXBwbGljYXRpb25NZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKKworICAg
IC8vIFdlIGFzc2lnbiB0aGUgY3JlYXRlZCBpbnN0YW5jZXMgaGVyZSBpbnN0ZWFkIG9mIGFkb3B0
UmVmKCkgYmVjYXVzZSBnc3RfYmluX2FkZF9tYW55KCkKKyAgICAvLyBiZWxvdyB3aWxsIGFscmVh
ZHkgdGFrZSB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYW5kIHdlIG5lZWQgYW4gYWRkaXRpb25hbCBv
bmUgZm9yIHVzLgorICAgIG1fYXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBz
cmMiLCBudWxscHRyKTsKKyAgICBtX2RlbXV4ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJx
dGRlbXV4IiwgbnVsbHB0cik7CisgICAgbV9hcHBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJhcHBzaW5rIiwgbnVsbHB0cik7CisKKyAgICBnX29iamVjdF9zZXQoR19PQkpFQ1QobV9k
ZW11eC5nZXQoKSksICJhbHdheXMtaG9ub3ItdGZkdCIsIFRSVUUsIG51bGxwdHIpOworICAgIGdz
dF9hcHBfc2lua19zZXRfZW1pdF9zaWduYWxzKEdTVF9BUFBfU0lOSyhtX2FwcHNpbmsuZ2V0KCkp
LCBUUlVFKTsKKyAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jKEdTVF9CQVNFX1NJTksobV9hcHBz
aW5rLmdldCgpKSwgRkFMU0UpOworCisgICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNpbmtQYWQgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2lu
ayIpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGFwcHNpbmtQYWQuZ2V0KCksICJub3RpZnk6OmNh
cHMiLCBHX0NBTExCQUNLKGFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2VkKSwgdGhpcyk7
CisKKyAgICBzZXRBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgR1JlZlB0cjxHc3RQYWQ+IGRlbXV4ZXJQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQobV9kZW11eC5nZXQoKSwgInNpbmsiKSk7CisgICAgbV9kZW11eGVyRGF0
YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5hcHBlbmRQaXBlbGluZSA9IHRoaXM7CisgICAg
bV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbiA9ICJk
ZW11eGVyIGRhdGEgZW50ZXJpbmciOworICAgIG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFByb2Jl
SW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2JlKGRlbXV4ZXJQYWQuZ2V0KCks
IEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVD
YWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pLCAmbV9kZW11
eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7CisgICAgbV9hcHBz
aW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5hcHBlbmRQaXBlbGluZSA9IHRoaXM7
CisgICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5kZXNjcmlwdGlv
biA9ICJhcHBzaW5rIGRhdGEgZW50ZXJpbmciOworICAgIG1fYXBwc2lua0RhdGFFbnRlcmluZ1Bh
ZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2JlKGFwcHNpbmtQYWQu
Z2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFk
UHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pLCAm
bV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7CisjZW5k
aWYKKworICAgIC8vIFRoZXNlIHNpZ25hbHMgd29uJ3QgYmUgY29ubmVjdGVkIG91dHNpZGUgb2Yg
dGhlIGxpZmV0aW1lIG9mICJ0aGlzIi4KKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fYXBwc3JjLmdl
dCgpLCAibmVlZC1kYXRhIiwgR19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZUFwcHNyY05lZWREYXRh
KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2RlbXV4LmdldCgpLCAicGFkLWFkZGVk
IiwgR19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZCksIHRoaXMpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9kZW11eC5nZXQoKSwgInBhZC1yZW1vdmVkIiwgR19DQUxMQkFD
SyhhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChtX2FwcHNpbmsuZ2V0KCksICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhhcHBlbmRQ
aXBlbGluZUFwcHNpbmtOZXdTYW1wbGUpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1f
YXBwc2luay5nZXQoKSwgImVvcyIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVBcHBzaW5rRU9T
KSwgdGhpcyk7CisKKyAgICAvLyBBZGRfbWFueSB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIGEgcmVm
ZXJlbmNlLiBUaGF0J3Mgd2h5IHdlIHVzZWQgYW4gYXNzaWdubWVudCBiZWZvcmUuCisgICAgZ3N0
X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX2FwcHNyYy5nZXQoKSwg
bV9kZW11eC5nZXQoKSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfbGluayhtX2FwcHNyYy5n
ZXQoKSwgbV9kZW11eC5nZXQoKSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKK307CisKK0FwcGVuZFBpcGVsaW5lOjp+QXBw
ZW5kUGlwZWxpbmUoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAg
IG1fbmV3U2FtcGxlTG9jay5sb2NrKCk7CisgICAgc2V0QXBwZW5kU3RhdGUoSW52YWxpZCk7Cisg
ICAgbV9uZXdTYW1wbGVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgbV9uZXdTYW1wbGVMb2Nr
LnVubG9jaygpOworCisgICAgbV9wYWRBZGRSZW1vdmVMb2NrLmxvY2soKTsKKyAgICBtX3BsYXll
clByaXZhdGUgPSBudWxscHRyOworICAgIG1fcGFkQWRkUmVtb3ZlQ29uZGl0aW9uLm5vdGlmeU9u
ZSgpOworICAgIG1fcGFkQWRkUmVtb3ZlTG9jay51bmxvY2soKTsKKworICAgIEdTVF9UUkFDRSgi
RGVzdHJveWluZyBBcHBlbmRQaXBlbGluZSAoJXApIiwgdGhpcyk7CisKKyAgICAvLyBGSVhNRTog
TWF5YmUgbm90aWZ5IGFwcGVuZENvbXBsZXRlIGhlcmU/CisKKyAgICBpZiAobV9waXBlbGluZSkg
eworICAgICAgICBBU1NFUlQobV9idXMpOworICAgICAgICBnc3RfYnVzX3JlbW92ZV9zaWduYWxf
d2F0Y2gobV9idXMuZ2V0KCkpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgICAgICBtX3BpcGVsaW5lID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBpZiAobV9hcHBzcmMpIHsKKyAgICAgICAgcmVtb3ZlQXBwc3JjRGF0
YUxlYXZpbmdQcm9iZSgpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2RhdGEobV9hcHBzcmMuZ2V0KCksIHRoaXMpOworICAgICAgICBtX2FwcHNyYyA9IG51bGxwdHI7
CisgICAgfQorCisgICAgaWYgKG1fZGVtdXgpIHsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAg
IEdSZWZQdHI8R3N0UGFkPiBkZW11eGVyUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKG1fZGVtdXguZ2V0KCksICJzaW5rIikpOworICAgICAgICBnc3RfcGFkX3JlbW92
ZV9wcm9iZShkZW11eGVyUGFkLmdldCgpLCBtX2RlbXV4ZXJEYXRhRW50ZXJpbmdQYWRQcm9iZUlu
Zm9ybWF0aW9uLnByb2JlSWQpOworI2VuZGlmCisKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9ieV9kYXRhKG1fZGVtdXguZ2V0KCksIHRoaXMpOworICAgICAgICBtX2RlbXV4
ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9hcHBzaW5rKSB7CisgICAgICAgIEdSZWZQ
dHI8R3N0UGFkPiBhcHBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJz
X2Rpc2Nvbm5lY3RfYnlfZGF0YShhcHBzaW5rUGFkLmdldCgpLCB0aGlzKTsKKyAgICAgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fYXBwc2luay5nZXQoKSwgdGhpcyk7
CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKGFwcHNp
bmtQYWQuZ2V0KCksIG1fYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJv
YmVJZCk7CisjZW5kaWYKKworICAgICAgICBtX2FwcHNpbmsgPSBudWxscHRyOworICAgIH0KKwor
ICAgIGlmIChtX2FwcHNpbmtDYXBzKQorICAgICAgICBtX2FwcHNpbmtDYXBzID0gbnVsbHB0cjsK
KworICAgIGlmIChtX2RlbXV4ZXJTcmNQYWRDYXBzKQorICAgICAgICBtX2RlbXV4ZXJTcmNQYWRD
YXBzID0gbnVsbHB0cjsKK307CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNsZWFyUGxheWVyUHJp
dmF0ZSgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9ERUJV
RygiY2xlYW5pbmcgcHJpdmF0ZSBwbGF5ZXIiKTsKKworICAgIG1fbmV3U2FtcGxlTG9jay5sb2Nr
KCk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgQXBwZW5kUGlwZWxpbmUgd29uJ3QgcHJvY2VzcyBt
b3JlIGRhdGEgZnJvbSBub3cgb24gYW5kCisgICAgLy8gaW5zdHJ1Y3QgaGFuZGxlTmV3U2FtcGxl
IHRvIGFib3J0IGl0c2VsZiBmcm9tIG5vdyBvbiBhcyB3ZWxsLgorICAgIHNldEFwcGVuZFN0YXRl
KEludmFsaWQpOworCisgICAgLy8gQXdha2UgYW55IHBlbmRpbmcgaGFuZGxlTmV3U2FtcGxlIG9w
ZXJhdGlvbiBpbiB0aGUgc3RyZWFtaW5nIHRocmVhZC4KKyAgICBtX25ld1NhbXBsZUNvbmRpdGlv
bi5ub3RpZnlPbmUoKTsKKyAgICBtX25ld1NhbXBsZUxvY2sudW5sb2NrKCk7CisKKyAgICBtX3Bh
ZEFkZFJlbW92ZUxvY2subG9jaygpOworICAgIG1fcGxheWVyUHJpdmF0ZSA9IG51bGxwdHI7Cisg
ICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgbV9wYWRBZGRSZW1v
dmVMb2NrLnVubG9jaygpOworCisgICAgLy8gQW5kIG5vdyB0aGF0IG5vIGhhbmRsZU5ld1NhbXBs
ZSBvcGVyYXRpb25zIHdpbGwgcmVtYWluIHN0YWxsZWQgd2FpdGluZworICAgIC8vIGZvciB0aGUg
bWFpbiB0aHJlYWQsIHN0b3AgdGhlIHBpcGVsaW5lLgorICAgIGlmIChtX3BpcGVsaW5lKQorICAg
ICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05V
TEwpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVFbGVtZW50TWVzc2FnZShHc3RN
ZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKwor
ICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVj
dHVyZShtZXNzYWdlKTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUs
ICJkcm0ta2V5LW5lZWRlZCIpKQorICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRQaXBlbGlu
ZTo6QXBwZW5kU3RhdGU6OktleU5lZ290aWF0aW9uKTsKKworICAgIC8vIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2Ugd2lsbCB0YWtlIGNhcmUgb2Ygc2V0dGluZyB1cCBlbmNyeXB0aW9u
LgorICAgIGlmIChtX3BsYXllclByaXZhdGUpCisgICAgICAgIG1fcGxheWVyUHJpdmF0ZS0+aGFu
ZGxlU3luY01lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRs
ZUFwcGxpY2F0aW9uTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VSVChX
VEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKworICAgIGlmIChnc3Rfc3Ry
dWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcHNyYy1uZWVkLWRhdGEiKSkgeworICAgICAg
ICBoYW5kbGVBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBzcmMtYnVm
ZmVyLWxlZnQiKSkgeworICAgICAgICBoYW5kbGVBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1l
KHN0cnVjdHVyZSwgImRlbXV4ZXItY29ubmVjdC10by1hcHBzaW5rIikpIHsKKyAgICAgICAgR1Jl
ZlB0cjxHc3RQYWQ+IGRlbXV4ZXJTcmNQYWQ7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0
cnVjdHVyZSwgImRlbXV4ZXItc3JjLXBhZCIsIEdfVFlQRV9PQkpFQ1QsICZkZW11eGVyU3JjUGFk
Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgQVNTRVJUKGRlbXV4ZXJTcmNQYWQpOworICAg
ICAgICBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayhkZW11eGVyU3JjUGFkLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1l
KHN0cnVjdHVyZSwgImFwcHNpbmstY2Fwcy1jaGFuZ2VkIikpIHsKKyAgICAgICAgYXBwc2lua0Nh
cHNDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0cnVj
dHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBzaW5rLW5ldy1zYW1wbGUiKSkgeworICAgICAg
ICBHUmVmUHRyPEdzdFNhbXBsZT4gbmV3U2FtcGxlOworICAgICAgICBnc3Rfc3RydWN0dXJlX2dl
dChzdHJ1Y3R1cmUsICJuZXctc2FtcGxlIiwgR1NUX1RZUEVfU0FNUExFLCAmbmV3U2FtcGxlLm91
dFB0cigpLCBudWxscHRyKTsKKworICAgICAgICBhcHBzaW5rTmV3U2FtcGxlKG5ld1NhbXBsZS5n
ZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9o
YXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBzaW5rLWVvcyIpKSB7CisgICAgICAgIGFwcHNpbmtFT1Mo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCkK
K3sKKyAgICBpZiAoIW1fYXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KSB7CisgICAgICAgIEdTVF9U
UkFDRSgiZGlzY2FyZGluZyB1bnRpbCBhdCBsZWFzdCBhIGJ1ZmZlciBsZWF2ZXMgYXBwc3JjIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9hcHBlbmRTdGF0ZSA9PSBP
bmdvaW5nIHx8IG1fYXBwZW5kU3RhdGUgPT0gU2FtcGxpbmcpOworICAgIEFTU0VSVCghbV9hcHBz
cmNOZWVkRGF0YVJlY2VpdmVkKTsKKworICAgIEdTVF9UUkFDRSgicmVjZWl2ZWQgbmVlZC1kYXRh
IGZyb20gYXBwc3JjIik7CisKKyAgICBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQgPSB0cnVlOwor
ICAgIGNoZWNrRW5kT2ZBcHBlbmQoKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6aGFuZGxl
QXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KCkKK3sKKyAgICBtX2FwcHNyY0F0TGVhc3RBQnVmZmVy
TGVmdCA9IHRydWU7CisgICAgR1NUX1RSQUNFKCJyZWNlaXZlZCBidWZmZXItbGVmdCBmcm9tIGFw
cHNyYyIpOworI2lmIExPR19ESVNBQkxFRAorICAgIHJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJv
YmUoKTsKKyNlbmRpZgorfQorCitnaW50IEFwcGVuZFBpcGVsaW5lOjppZCgpCit7CisgICAgQVNT
RVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgc3RhdGljIGdpbnQgdG90YWxBdWRpbyA9
IDA7CisgICAgc3RhdGljIGdpbnQgdG90YWxWaWRlbyA9IDA7CisgICAgc3RhdGljIGdpbnQgdG90
YWxUZXh0ID0gMDsKKworICAgIGlmIChtX2lkKQorICAgICAgICByZXR1cm4gbV9pZDsKKworICAg
IHN3aXRjaCAobV9zdHJlYW1UeXBlKSB7CisgICAgY2FzZSBBdWRpbzoKKyAgICAgICAgbV9pZCA9
ICsrdG90YWxBdWRpbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWaWRlbzoKKyAgICAgICAg
bV9pZCA9ICsrdG90YWxWaWRlbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0OgorICAg
ICAgICBtX2lkID0gKyt0b3RhbFRleHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5rbm93
bjoKKyAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIEdTVF9FUlJPUigiVHJ5aW5nIHRvIGdldCBp
ZCBmb3IgYSBwaXBlbGluZSBvZiBVbmtub3duL0ludmFsaWQgdHlwZSIpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgR1NUX0RFQlVH
KCJzdHJlYW1UeXBlPSVkLCBpZD0lZCIsIHN0YXRpY19jYXN0PGludD4obV9zdHJlYW1UeXBlKSwg
bV9pZCk7CisKKyAgICByZXR1cm4gbV9pZDsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6c2V0
QXBwZW5kU3RhdGUoQXBwZW5kU3RhdGUgbmV3QXBwZW5kU3RhdGUpCit7CisgICAgQVNTRVJUKFdU
Rjo6aXNNYWluVGhyZWFkKCkpOworICAgIC8vIFZhbGlkIHRyYW5zaXRpb25zOgorICAgIC8vIE5v
dFN0YXJ0ZWQtLT5PbmdvaW5nLS0+RGF0YVN0YXJ2ZS0tPk5vdFN0YXJ0ZWQKKyAgICAvLyAgICAg
ICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICBgLT5BYm9ydGluZy0tPk5vdFN0YXJ0ZWQKKyAg
ICAvLyAgICAgICAgICAgfCAgICAgICAgIGAtPlNhbXBsaW5nLcK3wrfCty0+U2FtcGxpbmctLT5M
YXN0U2FtcGxlLS0+Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLT5BYm9ydGluZy0tPk5vdFN0YXJ0ZWQK
KyAgICAvLyAgICAgICAgICAgfCAgICAgICAgIGAtPktleU5lZ290aWF0aW9uLS0+T25nb2luZy0t
PlsuLi5dCisgICAgLy8gICAgICAgICAgIGAtPkFib3J0aW5nLS0+Tm90U3RhcnRlZAorICAgIEFw
cGVuZFN0YXRlIG9sZEFwcGVuZFN0YXRlID0gbV9hcHBlbmRTdGF0ZTsKKyAgICBBcHBlbmRTdGF0
ZSBuZXh0QXBwZW5kU3RhdGUgPSBJbnZhbGlkOworCisgICAgaWYgKG9sZEFwcGVuZFN0YXRlICE9
IG5ld0FwcGVuZFN0YXRlKQorICAgICAgICBHU1RfVFJBQ0UoIiVzIC0tPiAlcyIsIGR1bXBBcHBl
bmRTdGF0ZShvbGRBcHBlbmRTdGF0ZSksIGR1bXBBcHBlbmRTdGF0ZShuZXdBcHBlbmRTdGF0ZSkp
OworCisgICAgYm9vbCBvayA9IGZhbHNlOworCisgICAgc3dpdGNoIChvbGRBcHBlbmRTdGF0ZSkg
eworICAgIGNhc2UgTm90U3RhcnRlZDoKKyAgICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkg
eworICAgICAgICBjYXNlIE9uZ29pbmc6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAg
ICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BM
QVlJTkcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm90U3RhcnRlZDoKKyAg
ICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChtX3BlbmRpbmdCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICBHU1RfVFJBQ0UoInB1c2hpbmcgcGVuZGluZyBidWZmZXIgJXAiLCBt
X3BlbmRpbmdCdWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIGdzdF9hcHBfc3JjX3B1c2hf
YnVmZmVyKEdTVF9BUFBfU1JDKGFwcHNyYygpKSwgbV9wZW5kaW5nQnVmZmVyLmxlYWtSZWYoKSk7
CisgICAgICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gT25nb2luZzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFib3J0aW5nOgorICAgICAgICAg
ICAgb2sgPSB0cnVlOworICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gTm90U3RhcnRlZDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICBv
ayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5TmVnb3Rp
YXRpb246CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAgICAgICAgY2FzZSBP
bmdvaW5nOgorICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICBvayA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT25nb2luZzoKKyAgICAgICAgc3dp
dGNoIChuZXdBcHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIEtleU5lZ290aWF0aW9uOgorICAg
ICAgICBjYXNlIFNhbXBsaW5nOgorICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICBv
ayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhU3RhcnZlOgor
ICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgR1NUX0RFQlVHKCJyZWNlaXZlZCBh
bGwgcGVuZGluZyBzYW1wbGVzIik7CisgICAgICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUt
PmRpZFJlY2VpdmVBbGxQZW5kaW5nU2FtcGxlcygpOworICAgICAgICAgICAgaWYgKG1fYWJvcnRQ
ZW5kaW5nKQorICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IEFib3J0aW5nOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IE5vdFN0YXJ0
ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0YVN0YXJ2ZToKKyAg
ICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIE5vdFN0YXJ0ZWQ6
CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFib3J0aW5nOgorICAgICAgICAgICAgb2sgPSB0cnVl
OworICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gTm90U3RhcnRlZDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTYW1wbGluZzoKKyAgICAgICAgc3dpdGNoIChuZXdB
cHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIFNhbXBsaW5nOgorICAgICAgICBjYXNlIEludmFs
aWQ6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBMYXN0U2FtcGxlOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgR1NU
X0RFQlVHKCJyZWNlaXZlZCBhbGwgcGVuZGluZyBzYW1wbGVzIik7CisgICAgICAgICAgICBtX3Nv
dXJjZUJ1ZmZlclByaXZhdGUtPmRpZFJlY2VpdmVBbGxQZW5kaW5nU2FtcGxlcygpOworICAgICAg
ICAgICAgaWYgKG1fYWJvcnRQZW5kaW5nKQorICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0
ZSA9IEFib3J0aW5nOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRBcHBl
bmRTdGF0ZSA9IE5vdFN0YXJ0ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTGFzdFNhbXBsZToKKyAgICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkgeworICAgICAg
ICBjYXNlIE5vdFN0YXJ0ZWQ6CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIG9r
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFib3J0aW5nOgorICAg
ICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gTm90U3Rh
cnRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBYm9ydGluZzoKKyAg
ICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIE5vdFN0YXJ0ZWQ6
CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICByZXNldFBpcGVsaW5lKCk7Cisg
ICAgICAgICAgICBtX2Fib3J0UGVuZGluZyA9IGZhbHNlOworICAgICAgICAgICAgbmV4dEFwcGVu
ZFN0YXRlID0gTm90U3RhcnRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dmFsaWQ6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgb2sgPSB0cnVlOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBpZiAob2spCisgICAgICAgIG1fYXBwZW5kU3RhdGUgPSBuZXdBcHBlbmRT
dGF0ZTsKKyAgICBlbHNlCisgICAgICAgIEdTVF9FUlJPUigiSW52YWxpZCBhcHBlbmQgc3RhdGUg
dHJhbnNpdGlvbiAlcyAtLT4gJXMiLCBkdW1wQXBwZW5kU3RhdGUob2xkQXBwZW5kU3RhdGUpLCBk
dW1wQXBwZW5kU3RhdGUobmV3QXBwZW5kU3RhdGUpKTsKKworICAgIEFTU0VSVChvayk7CisKKyAg
ICBpZiAobmV4dEFwcGVuZFN0YXRlICE9IEludmFsaWQpCisgICAgICAgIHNldEFwcGVuZFN0YXRl
KG5leHRBcHBlbmRTdGF0ZSk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OnBhcnNlRGVtdXhl
clNyY1BhZENhcHMoR3N0Q2FwcyogZGVtdXhlclNyY1BhZENhcHMpCit7CisgICAgQVNTRVJUKFdU
Rjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgbV9kZW11eGVyU3JjUGFkQ2FwcyA9IGFkb3B0R1Jl
ZihkZW11eGVyU3JjUGFkQ2Fwcyk7CisgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFT
b3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpVbmtub3duOworCisgICAgR3N0U3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0
KCksIDApOworICAgIGJvb2wgc2l6ZUNvbmZpZ3VyZWQgPSBmYWxzZTsKKworI2lmIEdTVF9DSEVD
S19WRVJTSU9OKDEsIDUsIDMpICYmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQorICAg
IGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtY2Vu
YyIpKSB7CisgICAgICAgIC8vIEFueSBwcmV2aW91cyBkZWNyaXB0b3Igc2hvdWxkIGhhdmUgYmVl
biByZW1vdmVkIGZyb20gdGhlIHBpcGVsaW5lIGJ5IGRpc2Nvbm5lY3RGcm9tQXBwU2lua0Zyb21T
dHJlYW1pbmdUaHJlYWQoKQorICAgICAgICBBU1NFUlQoIW1fZGVjcnlwdG9yKTsKKworICAgICAg
ICBtX2RlY3J5cHRvciA9IGFkb3B0R1JlZihXZWJDb3JlOjpjcmVhdGVHc3REZWNyeXB0b3IoZ3N0
X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgInByb3RlY3Rpb24tc3lzdGVtIikpKTsK
KyAgICAgICAgaWYgKCFtX2RlY3J5cHRvcikgeworICAgICAgICAgICAgR1NUX0VSUk9SKCJkZWNy
eXB0b3Igbm90IGZvdW5kIGZvciBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbV9kZW11eGVyU3Jj
UGFkQ2Fwcy5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBnY2hhciogb3JpZ2luYWxNZWRpYVR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJp
bmcoc3RydWN0dXJlLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIpOworCisgICAgICAgIGlmIChnX3N0
cl9oYXNfcHJlZml4KG9yaWdpbmFsTWVkaWFUeXBlLCAidmlkZW8vIikpIHsKKyAgICAgICAgICAg
IGludCB3aWR0aCA9IDA7CisgICAgICAgICAgICBpbnQgaGVpZ2h0ID0gMDsKKyAgICAgICAgICAg
IGZsb2F0IGZpbmFsSGVpZ2h0ID0gMDsKKworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRf
aW50KHN0cnVjdHVyZSwgIndpZHRoIiwgJndpZHRoKTsKKyAgICAgICAgICAgIGlmIChnc3Rfc3Ry
dWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAiaGVpZ2h0IiwgJmhlaWdodCkpIHsKKyAgICAgICAg
ICAgICAgICBnaW50IHJhdGlvTnVtZXJhdG9yID0gMTsKKyAgICAgICAgICAgICAgICBnaW50IHJh
dGlvRGVub21pbmF0b3IgPSAxOworCisgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRf
ZnJhY3Rpb24oc3RydWN0dXJlLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgJnJhdGlvTnVtZXJhdG9y
LCAmcmF0aW9EZW5vbWluYXRvcik7CisgICAgICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBoZWln
aHQgKiAoKGZsb2F0KSByYXRpb0Rlbm9taW5hdG9yIC8gKGZsb2F0KSByYXRpb051bWVyYXRvcik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNv
cmU6OkZsb2F0U2l6ZSh3aWR0aCwgZmluYWxIZWlnaHQpOworICAgICAgICAgICAgbV9zdHJlYW1U
eXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6
OkZsb2F0U2l6ZSgpOworICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgob3JpZ2luYWxN
ZWRpYVR5cGUsICJhdWRpby8iKSkKKyAgICAgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJD
b3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOworICAgICAgICAgICAg
ZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeChvcmlnaW5hbE1lZGlhVHlwZSwgInRleHQvIikpCisg
ICAgICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1U
eXBlR1N0cmVhbWVyOjpUZXh0OworICAgICAgICB9CisgICAgICAgIHNpemVDb25maWd1cmVkID0g
dHJ1ZTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICghc2l6ZUNvbmZpZ3VyZWQpIHsKKyAgICAg
ICAgY29uc3QgZ2NoYXIqIHN0cnVjdHVyZU5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0
cnVjdHVyZSk7CisgICAgICAgIEdzdFZpZGVvSW5mbyBpbmZvOworCisgICAgICAgIGlmIChnX3N0
cl9oYXNfcHJlZml4KHN0cnVjdHVyZU5hbWUsICJ2aWRlby8iKSAmJiBnc3RfdmlkZW9faW5mb19m
cm9tX2NhcHMoJmluZm8sIGRlbXV4ZXJTcmNQYWRDYXBzKSkgeworICAgICAgICAgICAgZmxvYXQg
d2lkdGgsIGhlaWdodDsKKworICAgICAgICAgICAgd2lkdGggPSBpbmZvLndpZHRoOworICAgICAg
ICAgICAgaGVpZ2h0ID0gaW5mby5oZWlnaHQgKiAoKGZsb2F0KSBpbmZvLnBhcl9kIC8gKGZsb2F0
KSBpbmZvLnBhcl9uKTsKKworICAgICAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gV2ViQ29y
ZTo6RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0g
V2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0
U2l6ZSgpOworICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgoc3RydWN0dXJlTmFtZSwg
ImF1ZGlvLyIpKQorICAgICAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlh
U291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW87CisgICAgICAgICAgICBlbHNlIGlmIChn
X3N0cl9oYXNfcHJlZml4KHN0cnVjdHVyZU5hbWUsICJ0ZXh0LyIpKQorICAgICAgICAgICAgICAg
IG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6
VGV4dDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lu
a0NhcHNDaGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAg
ICBpZiAoIW1fYXBwc2luaykKKyAgICAgICAgcmV0dXJuOworCisgICAgR1JlZlB0cjxHc3RQYWQ+
IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0
KCksICJzaW5rIikpOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3Rf
cGFkX2dldF9jdXJyZW50X2NhcHMocGFkLmdldCgpKSk7CisKKyAgICBpZiAoIWNhcHMpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSdyZSByaWdodCBhZnRlciBh
IG5ldyB0cmFjayBoYXMgYXBwZWFyZWQuIE90aGVyd2lzZSwgaXQncyBhIGNhcHMgY2hhbmdlIGlu
c2lkZSB0aGUgc2FtZSB0cmFjay4KKyAgICBib29sIHByZXZpb3VzQ2Fwc1dlcmVOdWxsID0gIW1f
YXBwc2lua0NhcHM7CisKKyAgICBpZiAoZ3N0X2NhcHNfcmVwbGFjZSgmbV9hcHBzaW5rQ2Fwcy5v
dXRQdHIoKSwgY2Fwcy5nZXQoKSkpIHsKKyAgICAgICAgaWYgKG1fcGxheWVyUHJpdmF0ZSAmJiBw
cmV2aW91c0NhcHNXZXJlTnVsbCkKKyAgICAgICAgICAgIG1fcGxheWVyUHJpdmF0ZS0+dHJhY2tE
ZXRlY3RlZCh0aGlzLCBtX29sZFRyYWNrLCBtX3RyYWNrKTsKKyAgICAgICAgZGlkUmVjZWl2ZUlu
aXRpYWxpemF0aW9uU2VnbWVudCgpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9w
aXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICAgIH0KK30KKwordm9pZCBBcHBl
bmRQaXBlbGluZTo6Y2hlY2tFbmRPZkFwcGVuZCgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWlu
VGhyZWFkKCkpOworCisgICAgaWYgKCFtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQgfHwgKG1fYXBw
ZW5kU3RhdGUgIT0gT25nb2luZyAmJiBtX2FwcGVuZFN0YXRlICE9IFNhbXBsaW5nKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR1NUX1RSQUNFKCJlbmQgb2YgYXBwZW5kIGRhdGEgbWFyayB3YXMg
cmVjZWl2ZWQiKTsKKworICAgIHN3aXRjaCAobV9hcHBlbmRTdGF0ZSkgeworICAgIGNhc2UgT25n
b2luZzoKKyAgICAgICAgR1NUX1RSQUNFKCJEYXRhU3RhcnZlIik7CisgICAgICAgIG1fYXBwc3Jj
TmVlZERhdGFSZWNlaXZlZCA9IGZhbHNlOworICAgICAgICBzZXRBcHBlbmRTdGF0ZShEYXRhU3Rh
cnZlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTYW1wbGluZzoKKyAgICAgICAgR1NUX1RS
QUNFKCJMYXN0U2FtcGxlIik7CisgICAgICAgIG1fYXBwc3JjTmVlZERhdGFSZWNlaXZlZCA9IGZh
bHNlOworICAgICAgICBzZXRBcHBlbmRTdGF0ZShMYXN0U2FtcGxlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lua05ld1NhbXBsZShH
c3RTYW1wbGUqIHNhbXBsZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisK
KyAgICBtX25ld1NhbXBsZUxvY2subG9jaygpOworCisgICAgLy8gSWdub3JlIHNhbXBsZXMgaWYg
d2UncmUgbm90IGV4cGVjdGluZyB0aGVtLiBSZWZ1c2UgcHJvY2Vzc2luZyBpZiB3ZSdyZSBpbiBJ
bnZhbGlkIHN0YXRlLgorICAgIGlmIChtX2FwcGVuZFN0YXRlICE9IE9uZ29pbmcgJiYgbV9hcHBl
bmRTdGF0ZSAhPSBTYW1wbGluZykgeworICAgICAgICBHU1RfV0FSTklORygiVW5leHBlY3RlZCBz
YW1wbGUsIGFwcGVuZFN0YXRlPSVzIiwgZHVtcEFwcGVuZFN0YXRlKG1fYXBwZW5kU3RhdGUpKTsK
KyAgICAgICAgLy8gRklYTUU6IFJldHVybiBFUlJPUiBhbmQgZmluZCBhIG1vcmUgcm9idXN0IHdh
eSB0byBkZXRlY3QgdGhhdCBhbGwgdGhlCisgICAgICAgIC8vIGRhdGEgaGFzIGJlZW4gcHJvY2Vz
c2VkLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlc29ydCB0byB0aGVzZSBoYWNrcy4KKyAgICAgICAg
Ly8gQWxsIGluIGFsbCwgcmV0dXJuIE9LLCBldmVuIGlmIGl0J3Mgbm90IHRoZSBwcm9wZXIgdGhp
bmcgdG8gZG8uIFdlIGRvbid0IHdhbnQgdG8gYnJlYWsgdGhlIGRlbXV4ZXIuCisgICAgICAgIG1f
Zmxvd1JldHVybiA9IEdTVF9GTE9XX09LOworICAgICAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi5u
b3RpZnlPbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxHU3RyZWFt
ZXJNZWRpYVNhbXBsZT4gbWVkaWFTYW1wbGUgPSBXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYVNhbXBs
ZTo6Y3JlYXRlKHNhbXBsZSwgbV9wcmVzZW50YXRpb25TaXplLCB0cmFja0lkKCkpOworCisgICAg
R1NUX1RSQUNFKCJhcHBlbmQ6IHRyYWNrSWQ9JXMgUFRTPSVmIHByZXNlbnRhdGlvblNpemU9JS4w
ZnglLjBmIiwgbWVkaWFTYW1wbGUtPnRyYWNrSUQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBt
ZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRmxvYXQoKSwgbWVkaWFTYW1wbGUtPnBy
ZXNlbnRhdGlvblNpemUoKS53aWR0aCgpLCBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgp
LmhlaWdodCgpKTsKKworICAgIC8vIElmIHdlJ3JlIGJleW9uZCB0aGUgZHVyYXRpb24sIGlnbm9y
ZSB0aGlzIHNhbXBsZSBhbmQgdGhlIHJlbWFpbmluZyBvbmVzLgorICAgIE1lZGlhVGltZSBkdXJh
dGlvbiA9IG1fbWVkaWFTb3VyY2VDbGllbnQtPmR1cmF0aW9uKCk7CisgICAgaWYgKGR1cmF0aW9u
LmlzVmFsaWQoKSAmJiAhZHVyYXRpb24uaW5kZWZpbml0ZVRpbWUoKSAmJiBtZWRpYVNhbXBsZS0+
cHJlc2VudGF0aW9uVGltZSgpID4gZHVyYXRpb24pIHsKKyAgICAgICAgR1NUX0RFQlVHKCJEZXRl
Y3RlZCBzYW1wbGUgKCVmKSBiZXlvbmQgdGhlIGR1cmF0aW9uICglZiksIGRlY2xhcmluZyBMYXN0
U2FtcGxlIiwgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKS50b0Zsb2F0KCksIGR1cmF0
aW9uLnRvRmxvYXQoKSk7CisgICAgICAgIHNldEFwcGVuZFN0YXRlKExhc3RTYW1wbGUpOworICAg
ICAgICBtX2Zsb3dSZXR1cm4gPSBHU1RfRkxPV19PSzsKKyAgICAgICAgbV9uZXdTYW1wbGVDb25k
aXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBZGQg
YSBnYXAgc2FtcGxlIGlmIGEgZ2FwIGlzIGRldGVjdGVkIGJlZm9yZSB0aGUgZmlyc3Qgc2FtcGxl
LgorICAgIGlmIChtZWRpYVNhbXBsZS0+ZGVjb2RlVGltZSgpID09IE1lZGlhVGltZTo6emVyb1Rp
bWUoKQorICAgICAgICAmJiBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpID4gTWVkaWFU
aW1lOjp6ZXJvVGltZSgpCisgICAgICAgICYmIG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1l
KCkgPD0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKDAuMSkpIHsKKyAgICAgICAgR1NUX0RF
QlVHKCJBZGRpbmcgZ2FwIG9mZnNldCIpOworICAgICAgICBtZWRpYVNhbXBsZS0+YXBwbHlQdHNP
ZmZzZXQoTWVkaWFUaW1lOjp6ZXJvVGltZSgpKTsKKyAgICB9CisKKyAgICBtX3NvdXJjZUJ1ZmZl
clByaXZhdGUtPmRpZFJlY2VpdmVTYW1wbGUobWVkaWFTYW1wbGUpOworICAgIHNldEFwcGVuZFN0
YXRlKFNhbXBsaW5nKTsKKyAgICBtX2Zsb3dSZXR1cm4gPSBHU1RfRkxPV19PSzsKKyAgICBtX25l
d1NhbXBsZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICBtX25ld1NhbXBsZUxvY2sudW5sb2Nr
KCk7CisKKyAgICBjaGVja0VuZE9mQXBwZW5kKCk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6
OmFwcHNpbmtFT1MoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAg
IHN3aXRjaCAobV9hcHBlbmRTdGF0ZSkgeworICAgIGNhc2UgQWJvcnRpbmc6CisgICAgICAgIC8v
IElnbm9yZWQuIE9wZXJhdGlvbiBjb21wbGV0aW9uIHdpbGwgYmUgbWFuYWdlZCBieSB0aGUgQWJv
cnRpbmctPk5vdFN0YXJ0ZWQgdHJhbnNpdGlvbi4KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
T25nb2luZzoKKyAgICAgICAgLy8gRmluaXNoIE9uZ29pbmcgYW5kIFNhbXBsaW5nIHN0YXRlcy4K
KyAgICAgICAgc2V0QXBwZW5kU3RhdGUoRGF0YVN0YXJ2ZSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU2FtcGxpbmc6CisgICAgICAgIHNldEFwcGVuZFN0YXRlKExhc3RTYW1wbGUpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHU1RfREVCVUcoIlVuZXhwZWN0ZWQg
RU9TIik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6
ZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCgpCit7CisgICAgQVNTRVJUKFdURjo6aXNN
YWluVGhyZWFkKCkpOworCisgICAgV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6
SW5pdGlhbGl6YXRpb25TZWdtZW50IGluaXRpYWxpemF0aW9uU2VnbWVudDsKKworICAgIEdTVF9E
RUJVRygiTm90aWZ5aW5nIFNvdXJjZUJ1ZmZlciBmb3IgdHJhY2sgJXMiLCBtX3RyYWNrLT5pZCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGluaXRpYWxpemF0aW9uU2VnbWVudC5kdXJh
dGlvbiA9IG1fbWVkaWFTb3VyY2VDbGllbnQtPmR1cmF0aW9uKCk7CisgICAgc3dpdGNoIChtX3N0
cmVhbVR5cGUpIHsKKyAgICBjYXNlIEF1ZGlvOiB7CisgICAgICAgIFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6QXVkaW9UcmFja0luZm9y
bWF0aW9uIGluZm87CisgICAgICAgIGluZm8udHJhY2sgPSBzdGF0aWNfY2FzdDxBdWRpb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lcio+KG1fdHJhY2suZ2V0KCkpOworICAgICAgICBpbmZvLmRlc2NyaXB0
aW9uID0gV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFEZXNjcmlwdGlvbjo6Y3JlYXRlKG1fZGVtdXhl
clNyY1BhZENhcHMuZ2V0KCkpOworICAgICAgICBpbml0aWFsaXphdGlvblNlZ21lbnQuYXVkaW9U
cmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBWaWRl
bzogeworICAgICAgICBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFs
aXphdGlvblNlZ21lbnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOworICAgICAgICBpbmZv
LnRyYWNrID0gc3RhdGljX2Nhc3Q8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPihtX3RyYWNr
LmdldCgpKTsKKyAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRGVzY3JpcHRpb246OmNyZWF0ZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKKyAgICAg
ICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEdTVF9FUlJPUigiVW5zdXBw
b3J0ZWQgb3IgdW5rbm93biBzdHJlYW0gdHlwZSIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRl
LT5kaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KGluaXRpYWxpemF0aW9uU2VnbWVudCk7
Cit9CisKK0F0b21pY1N0cmluZyBBcHBlbmRQaXBlbGluZTo6dHJhY2tJZCgpCit7CisgICAgQVNT
RVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX3RyYWNrKQorICAgICAgICBy
ZXR1cm4gQXRvbWljU3RyaW5nKCk7CisKKyAgICByZXR1cm4gbV90cmFjay0+aWQoKTsKK30KKwor
dm9pZCBBcHBlbmRQaXBlbGluZTo6cmVzZXRQaXBlbGluZSgpCit7CisgICAgQVNTRVJUKFdURjo6
aXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9ERUJVRygicmVzZXR0aW5nIHBpcGVsaW5lIik7Cisg
ICAgbV9hcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQgPSBmYWxzZTsKKyAgICBzZXRBcHBzcmNEYXRh
TGVhdmluZ1Byb2JlKCk7CisKKyAgICBtX25ld1NhbXBsZUxvY2subG9jaygpOworICAgIG1fbmV3
U2FtcGxlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSht
X3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUkVBRFkpOworICAgIGdzdF9lbGVtZW50X2dldF9z
dGF0ZShtX3BpcGVsaW5lLmdldCgpLCBudWxscHRyLCBudWxscHRyLCAwKTsKKyAgICBtX25ld1Nh
bXBsZUxvY2sudW5sb2NrKCk7CisKKyNpZiAoIShMT0dfRElTQUJMRUQgfHwgR1NUX0RJU0FCTEVf
R1NUX0RFQlVHKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgaGVyZSBmb3IgZGVidWdnaW5n
IHB1cnBvc2VzLiBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGhhdmUgaXQgYXMgY2xhc3MgbWVt
YmVyLgorICAgICAgICBXVEY6OlN0cmluZyAgZG90RmlsZU5hbWUgPSBTdHJpbmc6OmZvcm1hdCgi
cmVzZXQtcGlwZWxpbmUtJWQiLCArK2kpOworICAgICAgICBnc3RfZGVidWdfYmluX3RvX2RvdF9m
aWxlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwg
ZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorI2VuZGlmCisKK30KKwordm9pZCBB
cHBlbmRQaXBlbGluZTo6c2V0QXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgpCit7CisgICAgaWYgKG1f
YXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfVFJB
Q0UoInNldHRpbmcgYXBwc3JjIGRhdGEgbGVhdmluZyBwcm9iZSIpOworCisgICAgR1JlZlB0cjxH
c3RQYWQ+IGFwcHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCht
X2FwcHNyYy5nZXQoKSwgInNyYyIpKTsKKyAgICBtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCA9
IGdzdF9wYWRfYWRkX3Byb2JlKGFwcHNyY1BhZC5nZXQoKSwgR1NUX1BBRF9QUk9CRV9UWVBFX0JV
RkZFUiwgcmVpbnRlcnByZXRfY2FzdDxHc3RQYWRQcm9iZUNhbGxiYWNrPihhcHBlbmRQaXBlbGlu
ZUFwcHNyY0RhdGFMZWF2aW5nKSwgdGhpcywgbnVsbHB0cik7Cit9CisKK3ZvaWQgQXBwZW5kUGlw
ZWxpbmU6OnJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKQoreworICAgIGlmICghbV9hcHBz
cmNEYXRhTGVhdmluZ1Byb2JlSWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9UUkFDRSgi
cmVtb3ZpbmcgYXBwc3JjIGRhdGEgbGVhdmluZyBwcm9iZSIpOworCisgICAgR1JlZlB0cjxHc3RQ
YWQ+IGFwcHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2Fw
cHNyYy5nZXQoKSwgInNyYyIpKTsKKyAgICBnc3RfcGFkX3JlbW92ZV9wcm9iZShhcHBzcmNQYWQu
Z2V0KCksIG1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkKTsKKyAgICBtX2FwcHNyY0RhdGFMZWF2
aW5nUHJvYmVJZCA9IDA7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmFib3J0KCkKK3sKKyAg
ICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgR1NUX0RFQlVHKCJhYm9ydGluZyIp
OworCisgICAgbV9wZW5kaW5nQnVmZmVyLmNsZWFyKCk7CisKKyAgICAvLyBBYm9ydCBhbHJlYWR5
IG9uZ29pbmcuCisgICAgaWYgKG1fYWJvcnRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2Fib3J0UGVuZGluZyA9IHRydWU7CisgICAgaWYgKG1fYXBwZW5kU3RhdGUgPT0gTm90U3Rh
cnRlZCkKKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoQWJvcnRpbmcpOworICAgIC8vIEVsc2UsIHRo
ZSBhdXRvbWF0aWMgc3RhdGUgdHJhbnNpdGlvbnMgd2lsbCB0YWtlIGNhcmUgd2hlbiB0aGUgb25n
b2luZyBhcHBlbmQgZmluaXNoZXMuCit9CisKK0dzdEZsb3dSZXR1cm4gQXBwZW5kUGlwZWxpbmU6
OnB1c2hOZXdCdWZmZXIoR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgR3N0Rmxvd1JldHVybiBy
ZXN1bHQ7CisKKyAgICBpZiAobV9hYm9ydFBlbmRpbmcpIHsKKyAgICAgICAgbV9wZW5kaW5nQnVm
ZmVyID0gYWRvcHRHUmVmKGJ1ZmZlcik7CisgICAgICAgIHJlc3VsdCA9IEdTVF9GTE9XX09LOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVuZFBpcGVsaW5lOjpPbmdv
aW5nKTsKKyAgICAgICAgR1NUX1RSQUNFKCJwdXNoaW5nIG5ldyBidWZmZXIgJXAiLCBidWZmZXIp
OworICAgICAgICByZXN1bHQgPSBnc3RfYXBwX3NyY19wdXNoX2J1ZmZlcihHU1RfQVBQX1NSQyhh
cHBzcmMoKSksIGJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBBcHBlbmRQaXBlbGluZTo6cmVwb3J0QXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KCkKK3sKKyAg
ICBHU1RfVFJBQ0UoImJ1ZmZlciBsZWZ0IGFwcHNyYywgcmVwb3N0aW5nIHRvIGJ1cyIpOworICAg
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImFwcHNy
Yy1idWZmZXItbGVmdCIpOworICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9u
ZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChtX2FwcHNyYy5nZXQoKSksIHN0cnVjdHVyZSk7Cisg
ICAgZ3N0X2J1c19wb3N0KG1fYnVzLmdldCgpLCBtZXNzYWdlKTsKK30KKwordm9pZCBBcHBlbmRQ
aXBlbGluZTo6cmVwb3J0QXBwc3JjTmVlZERhdGFSZWNlaXZlZCgpCit7CisgICAgR1NUX1RSQUNF
KCJyZWNlaXZlZCBuZWVkLWRhdGEgc2lnbmFsIGF0IGFwcHNyYywgcmVwb3N0aW5nIHRvIGJ1cyIp
OworICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHko
ImFwcHNyYy1uZWVkLWRhdGEiKTsKKyAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3Nh
Z2VfbmV3X2FwcGxpY2F0aW9uKEdTVF9PQkpFQ1QobV9hcHBzcmMuZ2V0KCkpLCBzdHJ1Y3R1cmUp
OworICAgIGdzdF9idXNfcG9zdChtX2J1cy5nZXQoKSwgbWVzc2FnZSk7Cit9CisKK0dzdEZsb3dS
ZXR1cm4gQXBwZW5kUGlwZWxpbmU6OmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoR3N0RWxlbWVudCog
YXBwc2luaykKK3sKKyAgICBBU1NFUlQoIVdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgLy8g
RXZlbiBpZiB3ZSdyZSBkaXNhYmxlZCwgaXQncyBpbXBvcnRhbnQgdG8gcHVsbCB0aGUgc2FtcGxl
IG91dCBhbnl3YXkgdG8KKyAgICAvLyBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBjaGFuZ2luZyB0byBH
U1RfU1RBVEVfTlVMTCBoYXZpbmcgYSBub24gZW1wdHkgYXBwc2luay4KKyAgICBHUmVmUHRyPEdz
dFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3NhbXBsZShHU1Rf
QVBQX1NJTksoYXBwc2luaykpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX25ld1NhbXBsZUxv
Y2spOworCisgICAgaWYgKCFtX3BsYXllclByaXZhdGUgfHwgbV9hcHBlbmRTdGF0ZSA9PSBJbnZh
bGlkKSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJBcHBlbmRQaXBlbGluZSBoYXMgYmVlbiBkaXNh
YmxlZCwgaWdub3JpbmcgdGhpcyBzYW1wbGUiKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VS
Uk9SOworICAgIH0KKworICAgIGlmICghKCFtX3BsYXllclByaXZhdGUgfHwgbV9hcHBlbmRTdGF0
ZSA9PSBJbnZhbGlkKSkgeworICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9z
dHJ1Y3R1cmVfbmV3KCJhcHBzaW5rLW5ldy1zYW1wbGUiLCAibmV3LXNhbXBsZSIsIEdTVF9UWVBF
X1NBTVBMRSwgc2FtcGxlLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgR3N0TWVzc2FnZSogbWVz
c2FnZSA9IGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbihHU1RfT0JKRUNUKGFwcHNpbmspLCBz
dHJ1Y3R1cmUpOworICAgICAgICBnc3RfYnVzX3Bvc3QobV9idXMuZ2V0KCksIG1lc3NhZ2UpOwor
ICAgICAgICBHU1RfVFJBQ0UoImFwcHNpbmstbmV3LXNhbXBsZSBtZXNzYWdlIHBvc3RlZCB0byBi
dXMiKTsKKworICAgICAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi53YWl0KG1fbmV3U2FtcGxlTG9j
ayk7CisgICAgICAgIC8vIFdlJ3ZlIGJlZW4gYXdha2VuIGJlY2F1c2UgdGhlIHNhbXBsZSB3YXMg
cHJvY2Vzc2VkIG9yIGJlY2F1c2Ugb2YKKyAgICAgICAgLy8gYW4gZXhjZXB0aW9uYWwgY29uZGl0
aW9uIChlbnRlcmVkIGluIEludmFsaWQgc3RhdGUsIGRlc3RydWN0b3IsIGV0Yy4pLgorICAgICAg
ICAvLyBXZSBjYW4ndCByZWxpYWJseSBkZWxldGUgaW5mbyBoZXJlLCBhcHBlbmRQaXBlbGluZUFw
cHNpbmtOZXdTYW1wbGVNYWluVGhyZWFkIHdpbGwgZG8gaXQuCisgICAgfQorCisgICAgcmV0dXJu
IG1fZmxvd1JldHVybjsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJT
cmNQYWRUb0FwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCogZGVtdXhlclNyY1BhZCkKK3sKKyAg
ICBpZiAoIW1fYXBwc2luaykKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHKCJjb25u
ZWN0aW5nIHRvIGFwcHNpbmsiKTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiBzaW5rU2lua1BhZCA9
IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0KCksICJz
aW5rIikpOworCisgICAgLy8gT25seSBvbmUgc3RyZWFtIHBlciBkZW11eGVyIGlzIHN1cHBvcnRl
ZC4KKyAgICBBU1NFUlQoIWdzdF9wYWRfaXNfbGlua2VkKHNpbmtTaW5rUGFkLmdldCgpKSk7CisK
KyAgICBnaW50NjQgdGltZUxlbmd0aCA9IDA7CisgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1
cmF0aW9uKG1fZGVtdXguZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJnRpbWVMZW5ndGgpCisgICAg
ICAgICYmIHN0YXRpY19jYXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpICE9IEdTVF9DTE9DS19USU1F
X05PTkUpCisgICAgICAgIG1faW5pdGlhbER1cmF0aW9uID0gTWVkaWFUaW1lKEdTVF9USU1FX0FT
X1VTRUNPTkRTKHRpbWVMZW5ndGgpLCBHX1VTRUNfUEVSX1NFQyk7CisgICAgZWxzZQorICAgICAg
ICBtX2luaXRpYWxEdXJhdGlvbiA9IE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUoKTsK
KworICAgIGlmIChXVEY6OmlzTWFpblRocmVhZCgpKQorICAgICAgICBjb25uZWN0RGVtdXhlclNy
Y1BhZFRvQXBwc2luayhkZW11eGVyU3JjUGFkKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gQ2Fs
bCBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luaygpIGluIHRoZSBtYWluIHRocmVhZCBhbmQg
d2FpdC4KKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYWRBZGRSZW1vdmVMb2NrKTsKKyAg
ICAgICAgaWYgKCFtX3BsYXllclByaXZhdGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldygiZGVtdXhlci1j
b25uZWN0LXRvLWFwcHNpbmsiLCAiZGVtdXhlci1zcmMtcGFkIiwgR19UWVBFX09CSkVDVCwgZGVt
dXhlclNyY1BhZCwgbnVsbHB0cik7CisgICAgICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3Rf
bWVzc2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChtX2RlbXV4LmdldCgpKSwgc3RydWN0
dXJlKTsKKyAgICAgICAgZ3N0X2J1c19wb3N0KG1fYnVzLmdldCgpLCBtZXNzYWdlKTsKKyAgICAg
ICAgR1NUX1RSQUNFKCJkZW11eGVyLWNvbm5lY3QtdG8tYXBwc2luayBtZXNzYWdlIHBvc3RlZCB0
byBidXMiKTsKKworICAgICAgICBtX3BhZEFkZFJlbW92ZUNvbmRpdGlvbi53YWl0KG1fcGFkQWRk
UmVtb3ZlTG9jayk7CisgICAgfQorCisgICAgLy8gTXVzdCBiZSBkb25lIGluIHRoZSB0aHJlYWQg
d2Ugd2VyZSBjYWxsZWQgZnJvbSAodXN1YWxseSBzdHJlYW1pbmcgdGhyZWFkKS4KKyAgICBib29s
IGlzRGF0YSA9IGZhbHNlOworCisgICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKKyAgICBjYXNl
IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW86CisgICAgY2Fz
ZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvOgorICAgIGNh
c2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OgorICAgICAg
ICBpc0RhdGEgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBpZiAoaXNEYXRhKSB7CisgICAgICAgIC8vIEZJWE1FOiBPbmx5
IGFkZCBhcHBzaW5rIG9uZSB0aW1lLiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHNldmVyYWwg
dGltZXMuCisgICAgICAgIEdSZWZQdHI8R3N0T2JqZWN0PiBwYXJlbnQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3BhcmVudChtX2FwcHNpbmsuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCFwYXJl
bnQpCisgICAgICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBt
X2FwcHNpbmsuZ2V0KCkpOworCisjaWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEpCisg
ICAgICAgIGlmIChtX2RlY3J5cHRvcikgeworICAgICAgICAgICAgZ3N0X29iamVjdF9yZWYobV9k
ZWNyeXB0b3IuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3BpcGVs
aW5lLmdldCgpKSwgbV9kZWNyeXB0b3IuZ2V0KCkpOworCisgICAgICAgICAgICBHUmVmUHRyPEdz
dFBhZD4gZGVjcnlwdG9yU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChtX2RlY3J5cHRvci5nZXQoKSwgInNpbmsiKSk7CisgICAgICAgICAgICBnc3RfcGFkX2xp
bmsoZGVtdXhlclNyY1BhZCwgZGVjcnlwdG9yU2lua1BhZC5nZXQoKSk7CisKKyAgICAgICAgICAg
IEdSZWZQdHI8R3N0UGFkPiBkZWNyeXB0b3JTcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQobV9kZWNyeXB0b3IuZ2V0KCksICJzcmMiKSk7CisgICAgICAgICAgICBn
c3RfcGFkX2xpbmsoZGVjcnlwdG9yU3JjUGFkLmdldCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisK
KyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV9hcHBzaW5r
LmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQo
bV9kZWNyeXB0b3IuZ2V0KCkpOworICAgICAgICB9IGVsc2UgeworI2VuZGlmCisgICAgICAgICAg
ICBnc3RfcGFkX2xpbmsoZGVtdXhlclNyY1BhZCwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAg
ICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChtX2FwcHNpbmsuZ2V0KCkp
OworI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQorICAgICAgICB9CisjZW5kaWYK
KyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFU
RV9QQVVTRUQpOworICAgIH0KK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4
ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKiBkZW11eGVyU3JjUGFkKQoreworICAgIEFTU0VSVChX
VEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBHU1RfREVCVUcoIkNvbm5lY3RpbmcgdG8gYXBwc2lu
ayIpOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYWRBZGRSZW1vdmVMb2NrKTsKKyAgICBH
UmVmUHRyPEdzdFBhZD4gc2lua1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0
YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKKworICAgIC8vIE9ubHkgb25lIHN0
cmVhbSBwZXIgZGVtdXhlciBpcyBzdXBwb3J0ZWQuCisgICAgQVNTRVJUKCFnc3RfcGFkX2lzX2xp
bmtlZChzaW5rU2lua1BhZC5nZXQoKSkpOworCisgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0g
YWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhHU1RfUEFEKGRlbXV4ZXJTcmNQYWQp
KSk7CisKKyAgICBpZiAoIWNhcHMgfHwgbV9hcHBlbmRTdGF0ZSA9PSBJbnZhbGlkIHx8ICFtX3Bs
YXllclByaXZhdGUpIHsKKyAgICAgICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90aWZ5T25l
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RF
QlVHCisgICAgeworICAgICAgICBHVW5pcXVlUHRyPGdjaGFyPiBzdHJjYXBzKGdzdF9jYXBzX3Rv
X3N0cmluZyhjYXBzLmdldCgpKSk7CisgICAgICAgIEdTVF9ERUJVRygiJXMiLCBzdHJjYXBzLmdl
dCgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChtX2luaXRpYWxEdXJhdGlvbiA+IG1fbWVk
aWFTb3VyY2VDbGllbnQtPmR1cmF0aW9uKCkpCisgICAgICAgIG1fbWVkaWFTb3VyY2VDbGllbnQt
PmR1cmF0aW9uQ2hhbmdlZChtX2luaXRpYWxEdXJhdGlvbik7CisKKyAgICBtX29sZFRyYWNrID0g
bV90cmFjazsKKworICAgIHBhcnNlRGVtdXhlclNyY1BhZENhcHMoZ3N0X2NhcHNfcmVmKGNhcHMu
Z2V0KCkpKTsKKworICAgIHN3aXRjaCAobV9zdHJlYW1UeXBlKSB7CisgICAgY2FzZSBXZWJDb3Jl
OjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOgorICAgICAgICBpZiAobV9w
bGF5ZXJQcml2YXRlKQorICAgICAgICAgICAgbV90cmFjayA9IFdlYkNvcmU6OkF1ZGlvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9wbGF5ZXJQcml2YXRlLT5waXBlbGluZSgpLCBpZCgp
LCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6
TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzoKKyAgICAgICAgaWYgKG1fcGxh
eWVyUHJpdmF0ZSkKKyAgICAgICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpWaWRlb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1fcGxheWVyUHJpdmF0ZS0+cGlwZWxpbmUoKSwgaWQoKSwg
c2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNvcmU6Ok1l
ZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDoKKyAgICAgICAgbV90cmFjayA9IFdl
YkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShpZCgpLCBzaW5r
U2lua1BhZC5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8v
IE5vIHVzZWZ1bCBkYXRhLCBidXQgbm90aWZ5IGFueXdheSB0byBjb21wbGV0ZSB0aGUgYXBwZW5k
IG9wZXJhdGlvbi4KKyAgICAgICAgR1NUX0RFQlVHKCJSZWNlaXZlZCBhbGwgcGVuZGluZyBzYW1w
bGVzIChubyBkYXRhKSIpOworICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPmRpZFJlY2Vp
dmVBbGxQZW5kaW5nU2FtcGxlcygpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX3Bh
ZEFkZFJlbW92ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGlu
ZTo6ZGlzY29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBwc2lua0Zyb21BbnlUaHJlYWQoKQorewor
ICAgIEdTVF9ERUJVRygiRGlzY29ubmVjdGluZyBhcHBzaW5rIik7CisKKyAgICAvLyBNdXN0IGJl
IGRvbmUgaW4gdGhlIHRocmVhZCB3ZSB3ZXJlIGNhbGxlZCBmcm9tICh1c3VhbGx5IHN0cmVhbWlu
ZyB0aHJlYWQpLgorI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQorICAgIGlmICht
X2RlY3J5cHRvcikgeworICAgICAgICBnc3RfZWxlbWVudF91bmxpbmsobV9kZWNyeXB0b3IuZ2V0
KCksIG1fYXBwc2luay5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X3VubGluayhtX2RlbXV4
LmdldCgpLCBtX2RlY3J5cHRvci5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0
ZShtX2RlY3J5cHRvci5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgICAgICBnc3RfYmluX3Jl
bW92ZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX2RlY3J5cHRvci5nZXQoKSk7CisgICAg
fSBlbHNlCisjZW5kaWYKKyAgICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rKG1fZGVtdXguZ2V0KCks
IG1fYXBwc2luay5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwc2lu
a0NhcHNDaGFuZ2VkKEdPYmplY3QqIGFwcHNpbmtQYWQsIEdQYXJhbVNwZWMqLCBBcHBlbmRQaXBl
bGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
c3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXBwc2luay1jYXBzLWNoYW5nZWQiKTsKKyAgICBHc3RN
ZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdTVF9PQkpFQ1Qo
YXBwc2lua1BhZCksIHN0cnVjdHVyZSk7CisgICAgZ3N0X2J1c19wb3N0KGFwcGVuZFBpcGVsaW5l
LT5idXMoKSwgbWVzc2FnZSk7CisgICAgR1NUX1RSQUNFKCJhcHBzaW5rLWNhcHMtY2hhbmdlZCBt
ZXNzYWdlIHBvc3RlZCB0byBidXMiKTsKK30KKworc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuIGFw
cGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcoR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBp
bmZvLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgQVNTRVJUKEdTVF9Q
QURfUFJPQkVfSU5GT19UWVBFKGluZm8pICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUik7CisK
KyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IEdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVIoaW5mbyk7
CisgICAgZ3NpemUgYnVmZmVyU2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmZmVyKTsKKwor
ICAgIEdTVF9UUkFDRSgiYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiBnb2luZyB0
aHJ1IiwgYnVmZmVyU2l6ZSk7CisKKyAgICBhcHBlbmRQaXBlbGluZS0+cmVwb3J0QXBwc3JjQXRM
ZWFzdEFCdWZmZXJMZWZ0KCk7CisKKyAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKK30KKwor
I2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBHc3RQYWRQcm9iZVJldHVybiBhcHBlbmRQaXBlbGlu
ZVBhZFByb2JlRGVidWdJbmZvcm1hdGlvbihHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8s
IHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uKiBwYWRQcm9iZUluZm9ybWF0aW9uKQoreworICAg
IEFTU0VSVChHU1RfUEFEX1BST0JFX0lORk9fVFlQRShpbmZvKSAmIEdTVF9QQURfUFJPQkVfVFlQ
RV9CVUZGRVIpOworICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gR1NUX1BBRF9QUk9CRV9JTkZPX0JV
RkZFUihpbmZvKTsKKyAgICBHU1RfVFJBQ0UoIiVzOiBidWZmZXIgb2Ygc2l6ZSAlIiBHX0dTSVpF
X0ZPUk1BVCAiIGdvaW5nIHRocnUiLCBwYWRQcm9iZUluZm9ybWF0aW9uLT5kZXNjcmlwdGlvbiwg
Z3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpKTsKKyAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9P
SzsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUFwcHNyY05lZWREYXRh
KEdzdEFwcFNyYyosIGd1aW50LCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7Cisg
ICAgYXBwZW5kUGlwZWxpbmUtPnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQoKTsKK30KKwor
c3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVEZW11eGVyUGFkQWRkZWQoR3N0RWxlbWVudCosIEdz
dFBhZCogZGVtdXhlclNyY1BhZCwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKQorewor
ICAgIGFwcGVuZFBpcGVsaW5lLT5jb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lua0Zyb21BbnlU
aHJlYWQoZGVtdXhlclNyY1BhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lRGVt
dXhlclBhZFJlbW92ZWQoR3N0RWxlbWVudCosIEdzdFBhZCosIEFwcGVuZFBpcGVsaW5lKiBhcHBl
bmRQaXBlbGluZSkKK3sKKyAgICBhcHBlbmRQaXBlbGluZS0+ZGlzY29ubmVjdERlbXV4ZXJTcmNQ
YWRGcm9tQXBwc2lua0Zyb21BbnlUaHJlYWQoKTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4g
YXBwZW5kUGlwZWxpbmVBcHBzaW5rTmV3U2FtcGxlKEdzdEVsZW1lbnQqIGFwcHNpbmssIEFwcGVu
ZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICByZXR1cm4gYXBwZW5kUGlwZWxpbmUt
PmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoYXBwc2luayk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVu
ZFBpcGVsaW5lQXBwc2lua0VPUyhHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBp
cGVsaW5lKQoreworICAgIGlmIChXVEY6OmlzTWFpblRocmVhZCgpKQorICAgICAgICBhcHBlbmRQ
aXBlbGluZS0+YXBwc2lua0VPUygpOworICAgIGVsc2UgeworICAgICAgICBHc3RTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhcHBzaW5rLWVvcyIpOworICAg
ICAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdT
VF9PQkpFQ1QoYXBwZW5kUGlwZWxpbmUtPmFwcHNpbmsoKSksIHN0cnVjdHVyZSk7CisgICAgICAg
IGdzdF9idXNfcG9zdChhcHBlbmRQaXBlbGluZS0+YnVzKCksIG1lc3NhZ2UpOworICAgICAgICBH
U1RfVFJBQ0UoImFwcHNpbmstZW9zIG1lc3NhZ2UgcG9zdGVkIHRvIGJ1cyIpOworICAgIH0KKwor
ICAgIEdTVF9ERUJVRygiJXMgbWFpbiB0aHJlYWQiLCAoV1RGOjppc01haW5UaHJlYWQoKSkgPyAi
SXMiIDogIk5vdCIpOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYWU0YjFmNWUxYWFmMDgxZjBkNGQyM2QwY2IyNWFmNGMzNGY0ZjEzMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuaApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBT
LkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIEFwcGVuZFBpcGVsaW5lX2gKKyNkZWZpbmUgQXBwZW5kUGlwZWxpbmVfaAorCisj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNF
KSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgiCisjaW5jbHVkZSAi
TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3Rm
L0NvbmRpdGlvbi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFwcGVuZFBpcGVs
aW5lIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEFwcGVuZFBpcGVsaW5lPiB7CitwdWJs
aWM6CisgICAgZW51bSBBcHBlbmRTdGF0ZSB7IEludmFsaWQsIE5vdFN0YXJ0ZWQsIE9uZ29pbmcs
IEtleU5lZ290aWF0aW9uLCBEYXRhU3RhcnZlLCBTYW1wbGluZywgTGFzdFNhbXBsZSwgQWJvcnRp
bmcgfTsKKworICAgIEFwcGVuZFBpcGVsaW5lKFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXJNU0U+LCBQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+LCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UqKTsKKyAgICB2aXJ0dWFsIH5BcHBlbmRQaXBl
bGluZSgpOworCisgICAgdm9pZCBoYW5kbGVFbGVtZW50TWVzc2FnZShHc3RNZXNzYWdlKik7Cisg
ICAgdm9pZCBoYW5kbGVBcHBsaWNhdGlvbk1lc3NhZ2UoR3N0TWVzc2FnZSopOworCisgICAgZ2lu
dCBpZCgpOworICAgIEFwcGVuZFN0YXRlIGFwcGVuZFN0YXRlKCkgeyByZXR1cm4gbV9hcHBlbmRT
dGF0ZTsgfQorICAgIHZvaWQgc2V0QXBwZW5kU3RhdGUoQXBwZW5kU3RhdGUpOworCisgICAgR3N0
Rmxvd1JldHVybiBoYW5kbGVOZXdBcHBzaW5rU2FtcGxlKEdzdEVsZW1lbnQqKTsKKyAgICBHc3RG
bG93UmV0dXJuIHB1c2hOZXdCdWZmZXIoR3N0QnVmZmVyKik7CisKKyAgICAvLyBUYWtlcyBvd25l
cnNoaXAgb2YgY2Fwcy4KKyAgICB2b2lkIHBhcnNlRGVtdXhlclNyY1BhZENhcHMoR3N0Q2Fwcyop
OworICAgIHZvaWQgYXBwc2lua0NhcHNDaGFuZ2VkKCk7CisgICAgdm9pZCBhcHBzaW5rTmV3U2Ft
cGxlKEdzdFNhbXBsZSopOworICAgIHZvaWQgYXBwc2lua0VPUygpOworICAgIHZvaWQgZGlkUmVj
ZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCgpOworICAgIEF0b21pY1N0cmluZyB0cmFja0lkKCk7
CisgICAgdm9pZCBhYm9ydCgpOworCisgICAgdm9pZCBjbGVhclBsYXllclByaXZhdGUoKTsKKyAg
ICBSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IG1lZGlhU291cmNlQ2xpZW50
KCkgeyByZXR1cm4gbV9tZWRpYVNvdXJjZUNsaWVudDsgfQorICAgIFJlZlB0cjxTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyPiBzb3VyY2VCdWZmZXJQcml2YXRlKCkgeyByZXR1cm4gbV9zb3Vy
Y2VCdWZmZXJQcml2YXRlOyB9CisgICAgR3N0QnVzKiBidXMoKSB7IHJldHVybiBtX2J1cy5nZXQo
KTsgfQorICAgIEdzdEVsZW1lbnQqIHBpcGVsaW5lKCkgeyByZXR1cm4gbV9waXBlbGluZS5nZXQo
KTsgfQorICAgIEdzdEVsZW1lbnQqIGFwcHNyYygpIHsgcmV0dXJuIG1fYXBwc3JjLmdldCgpOyB9
CisgICAgR3N0RWxlbWVudCogYXBwc2luaygpIHsgcmV0dXJuIG1fYXBwc2luay5nZXQoKTsgfQor
ICAgIEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRDYXBzKCkgeyByZXR1cm4gbV9kZW11eGVyU3JjUGFk
Q2Fwcy5nZXQoKTsgfQorICAgIEdzdENhcHMqIGFwcHNpbmtDYXBzKCkgeyByZXR1cm4gbV9hcHBz
aW5rQ2Fwcy5nZXQoKTsgfQorICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiB0
cmFjaygpIHsgcmV0dXJuIG1fdHJhY2s7IH0KKyAgICBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVh
bVR5cGVHU3RyZWFtZXIgc3RyZWFtVHlwZSgpIHsgcmV0dXJuIG1fc3RyZWFtVHlwZTsgfQorCisg
ICAgdm9pZCBkaXNjb25uZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZCgp
OworICAgIHZvaWQgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtGcm9tQW55VGhyZWFkKEdz
dFBhZCopOworICAgIHZvaWQgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKik7
CisKKyAgICB2b2lkIHJlcG9ydEFwcHNyY0F0TGVhc3RBQnVmZmVyTGVmdCgpOworICAgIHZvaWQg
cmVwb3J0QXBwc3JjTmVlZERhdGFSZWNlaXZlZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgcmVz
ZXRQaXBlbGluZSgpOworICAgIHZvaWQgY2hlY2tFbmRPZkFwcGVuZCgpOworICAgIHZvaWQgaGFu
ZGxlQXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KCk7CisgICAgdm9pZCBoYW5kbGVBcHBzcmNOZWVk
RGF0YVJlY2VpdmVkKCk7CisgICAgdm9pZCByZW1vdmVBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7
CisgICAgdm9pZCBzZXRBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisKK3ByaXZhdGU6CisgICAg
UmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPiBtX21lZGlhU291cmNlQ2xpZW50
OworICAgIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiBtX3NvdXJjZUJ1ZmZl
clByaXZhdGU7CisgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKiBtX3BsYXllclBy
aXZhdGU7CisKKyAgICAvLyAobV9tZWRpYVR5cGUsIG1faWQpIGlzIHVuaXF1ZS4KKyAgICBnaW50
IG1faWQ7CisKKyAgICBNZWRpYVRpbWUgbV9pbml0aWFsRHVyYXRpb247CisKKyAgICBHc3RGbG93
UmV0dXJuIG1fZmxvd1JldHVybjsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGlu
ZTsKKyAgICBHUmVmUHRyPEdzdEJ1cz4gbV9idXM7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBt
X2FwcHNyYzsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZGVtdXg7CisjaWYgRU5BQkxFKExF
R0FDWV9FTkNSWVBURURfTUVESUEpCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2RlY3J5cHRv
cjsKKyNlbmRpZgorICAgIC8vIFRoZSBkZW11eGVyIGhhcyBvbmUgc3JjIHN0cmVhbSBvbmx5LCBz
byBvbmx5IG9uZSBhcHBzaW5rIGlzIG5lZWRlZCBhbmQgbGlua2VkIHRvIGl0LgorICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gbV9hcHBzaW5rOworCisgICAgTG9jayBtX25ld1NhbXBsZUxvY2s7Cisg
ICAgQ29uZGl0aW9uIG1fbmV3U2FtcGxlQ29uZGl0aW9uOworICAgIExvY2sgbV9wYWRBZGRSZW1v
dmVMb2NrOworICAgIENvbmRpdGlvbiBtX3BhZEFkZFJlbW92ZUNvbmRpdGlvbjsKKworICAgIEdS
ZWZQdHI8R3N0Q2Fwcz4gbV9hcHBzaW5rQ2FwczsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fZGVt
dXhlclNyY1BhZENhcHM7CisgICAgRmxvYXRTaXplIG1fcHJlc2VudGF0aW9uU2l6ZTsKKworICAg
IGJvb2wgbV9hcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQ7CisgICAgYm9vbCBtX2FwcHNyY05lZWRE
YXRhUmVjZWl2ZWQ7CisKKyAgICBndWxvbmcgbV9hcHBzcmNEYXRhTGVhdmluZ1Byb2JlSWQ7Cisj
aWYgIUxPR19ESVNBQkxFRAorICAgIHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIG1fZGVtdXhl
ckRhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb247CisgICAgc3RydWN0IFBhZFByb2JlSW5m
b3JtYXRpb24gbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbjsKKyNlbmRp
ZgorCisgICAgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIHN0YXRlcyBvZiBhcHBlbmQgcHJvY2Vzc2lu
ZywgdG8gYXZvaWQgcGVyZm9ybWluZyBhY3Rpb25zIGluYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJy
ZW50IHN0YXRlCisgICAgLy8gKGVnOiBwcm9jZXNzaW5nIG1vcmUgc2FtcGxlcyB3aGVuIHRoZSBs
YXN0IG9uZSBoYXMgYmVlbiBkZXRlY3RlZCwgZXRjLikuIFNlZSBzZXRBcHBlbmRTdGF0ZSgpIGZv
ciB2YWxpZAorICAgIC8vIHRyYW5zaXRpb25zLgorICAgIEFwcGVuZFN0YXRlIG1fYXBwZW5kU3Rh
dGU7CisKKyAgICAvLyBBYm9ydHMgY2FuIG9ubHkgYmUgY29tcGxldGVkIHdoZW4gdGhlIG5vcm1h
bCBzYW1wbGUgZGV0ZWN0aW9uIGhhcyBmaW5pc2hlZC4gTWVhbndoaWxlLCB0aGUgd2lsbGluZyB0
byBhYm9ydCBpcworICAgIC8vIGV4cHJlc3NlZCBpbiB0aGlzIGZpZWxkLgorICAgIGJvb2wgbV9h
Ym9ydFBlbmRpbmc7CisKKyAgICBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXIgbV9zdHJlYW1UeXBlOworICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBt
X29sZFRyYWNrOworICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBtX3RyYWNr
OworCisgICAgR1JlZlB0cjxHc3RCdWZmZXI+IG1fcGVuZGluZ0J1ZmZlcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUuCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291757</attachid>
            <date>2016-10-16 12:03:07 -0700</date>
            <delta_ts>2016-10-20 13:53:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162874-20161016185934.patch</filename>
            <type>text/plain</type>
            <size>49086</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTA5ZGFhMDBmOGZhMDYw
MDUwY2ExYmVhMTJiNDE3MjIyNTJjNjNmMC4uMTBkODI2ZjkyMWZhNTRiNDJjMGQ4YTU1OTc5NzAy
YzRkZjhmYWFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY4IEBACiAyMDE2LTEwLTAzICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIEFwcGVuZCBQaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRo
IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiAoZGF0YSBzdGFy
dmUKKyAgICAgICAgYW5kIGxhc3Qgc2FtcGxlIGRldGVjdGlvbiwgZGVidWcgZmVhdHVyZXMpIGFu
ZCBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPiAoRU1FCisgICAgICAgIHN1cHBv
cnQpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQ
aXBlbGluZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZHVtcEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lRWxlbWVudE1lc3NhZ2VDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRQaXBlbGluZUFwcGxpY2F0aW9uTWVzc2FnZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6fkFwcGVuZFBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpjbGVhclBsYXllclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVsZW1lbnRNZXNzYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBsaWNhdGlvbk1lc3NhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNyY05lZWREYXRh
UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNy
Y0F0TGVhc3RBQnVmZmVyTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
aWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnNldEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNoZWNrRW5kT2ZBcHBlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtFT1MpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnRyYWNrSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlc2V0UGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwZW5kUGlwZWxpbmU6OnNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGVuZFBpcGVsaW5lOjpwdXNoTmV3QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVu
ZFBpcGVsaW5lOjpyZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9B
cHBzaW5rRnJvbUFueVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1NhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjphcHBl
bmRQaXBlbGluZUFwcHNpbmtFT1MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBl
bmRQaXBlbGluZTo6YXBwZW5kU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxp
bmU6Om1lZGlhU291cmNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
Ojpzb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
OjpidXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzcmMpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlw
ZWxpbmU6OmRlbXV4ZXJTcmNQYWRDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVs
aW5lOjphcHBzaW5rQ2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6dHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnN0cmVhbVR5cGUpOgorCisy
MDE2LTEwLTAzICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+
CisKICAgICAgICAgW0dTdHJlYW1lcl0gRHJhaW4gcXVlcnkgc3VwcG9ydAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODcyCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlw
ZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9BcHBlbmRQaXBlbGluZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjkwZTgyYjk0N2Y0MWMyNjcyMTBlYjIz
ZDA2N2Q1ZTAyNGNhOGExNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEs
MTA5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQXBwZW5kUGlwZWxpbmUuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQor
CisjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHUmVm
UHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFEZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhU2FtcGxlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgor
I2luY2x1ZGUgIk1lZGlhRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2
YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIK
KworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgorI2luY2x1ZGUgPGdzdC9hcHAvZ3N0
YXBwc3JjLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3Bi
dXRpbHMuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNsdWRlIDx3dGYvQ29u
ZGl0aW9uLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFMT0dfRElTQUJMRUQKK3N0
cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIHsKKyAgICBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlw
ZWxpbmU7CisgICAgY29uc3QgY2hhciogZGVzY3JpcHRpb247CisgICAgZ3Vsb25nIHByb2JlSWQ7
Cit9OworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyKiBkdW1wQXBwZW5kU3RhdGUoQXBwZW5k
UGlwZWxpbmU6OkFwcGVuZFN0YXRlIGFwcGVuZFN0YXRlKQoreworICAgIHN3aXRjaCAoYXBwZW5k
U3RhdGUpIHsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6SW52YWxpZDoK
KyAgICAgICAgcmV0dXJuICJJbnZhbGlkIjsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBl
bmRTdGF0ZTo6Tm90U3RhcnRlZDoKKyAgICAgICAgcmV0dXJuICJOb3RTdGFydGVkIjsKKyAgICBj
YXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6T25nb2luZzoKKyAgICAgICAgcmV0dXJu
ICJPbmdvaW5nIjsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6S2V5TmVn
b3RpYXRpb246CisgICAgICAgIHJldHVybiAiS2V5TmVnb3RpYXRpb24iOworICAgIGNhc2UgQXBw
ZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpEYXRhU3RhcnZlOgorICAgICAgICByZXR1cm4gIkRh
dGFTdGFydmUiOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpTYW1wbGlu
ZzoKKyAgICAgICAgcmV0dXJuICJTYW1wbGluZyI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6
QXBwZW5kU3RhdGU6Okxhc3RTYW1wbGU6CisgICAgICAgIHJldHVybiAiTGFzdFNhbXBsZSI7Cisg
ICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OkFib3J0aW5nOgorICAgICAgICBy
ZXR1cm4gIkFib3J0aW5nIjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gIih1bmtub3du
KSI7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUFwcHNyY05lZWREYXRh
KEdzdEFwcFNyYyosIGd1aW50LCBBcHBlbmRQaXBlbGluZSopOworc3RhdGljIHZvaWQgYXBwZW5k
UGlwZWxpbmVEZW11eGVyUGFkQWRkZWQoR3N0RWxlbWVudCosIEdzdFBhZCosIEFwcGVuZFBpcGVs
aW5lKik7CitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKEdzdEVs
ZW1lbnQqLCBHc3RQYWQqLCBBcHBlbmRQaXBlbGluZSopOworc3RhdGljIHZvaWQgYXBwZW5kUGlw
ZWxpbmVBcHBzaW5rQ2Fwc0NoYW5nZWQoR09iamVjdCosIEdQYXJhbVNwZWMqLCBBcHBlbmRQaXBl
bGluZSopOworc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuIGFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0
YUxlYXZpbmcoR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiwgQXBwZW5kUGlwZWxpbmUqKTsKKyNp
ZiAhTE9HX0RJU0FCTEVECitzdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxpbmVQ
YWRQcm9iZURlYnVnSW5mb3JtYXRpb24oR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiwgc3RydWN0
IFBhZFByb2JlSW5mb3JtYXRpb24qKTsKKyNlbmRpZgorc3RhdGljIEdzdEZsb3dSZXR1cm4gYXBw
ZW5kUGlwZWxpbmVBcHBzaW5rTmV3U2FtcGxlKEdzdEVsZW1lbnQqLCBBcHBlbmRQaXBlbGluZSop
Oworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzaW5rRU9TKEdzdEVsZW1lbnQqLCBBcHBl
bmRQaXBlbGluZSopOworCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUVsZW1lbnRNZXNzYWdl
Q2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgQXBwZW5kUGlwZWxpbmUqIGFw
cGVuZFBpcGVsaW5lKQoreworICAgIGFwcGVuZFBpcGVsaW5lLT5oYW5kbGVFbGVtZW50TWVzc2Fn
ZShtZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBsaWNhdGlvbk1l
c3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBBcHBlbmRQaXBlbGlu
ZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgYXBwZW5kUGlwZWxpbmUtPmhhbmRsZUFwcGxpY2F0
aW9uTWVzc2FnZShtZXNzYWdlKTsKK30KKworQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFBpcGVsaW5l
KFBhc3NSZWZQdHI8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+IG1lZGlhU291cmNlQ2xp
ZW50LCBQYXNzUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZl
clByaXZhdGUsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSogcGxheWVyUHJpdmF0ZSkK
KyAgICA6IG1fbWVkaWFTb3VyY2VDbGllbnQobWVkaWFTb3VyY2VDbGllbnQpCisgICAgLCBtX3Nv
dXJjZUJ1ZmZlclByaXZhdGUoc291cmNlQnVmZmVyUHJpdmF0ZSkKKyAgICAsIG1fcGxheWVyUHJp
dmF0ZShwbGF5ZXJQcml2YXRlKQorICAgICwgbV9pZCgwKQorICAgICwgbV9hcHBzcmNBdExlYXN0
QUJ1ZmZlckxlZnQoZmFsc2UpCisgICAgLCBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQoZmFsc2Up
CisgICAgLCBtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCgwKQorICAgICwgbV9hcHBlbmRTdGF0
ZShOb3RTdGFydGVkKQorICAgICwgbV9hYm9ydFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX3N0cmVh
bVR5cGUoVW5rbm93bikKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAg
ICBHU1RfVFJBQ0UoIkNyZWF0aW5nIEFwcGVuZFBpcGVsaW5lICglcCkiLCB0aGlzKTsKKworICAg
IC8vIEZJWE1FOiBnaXZlIGEgbmFtZSB0byB0aGUgcGlwZWxpbmUsIG1heWJlIHJlbGF0ZWQgd2l0
aCB0aGUgdHJhY2sgaXQncyBtYW5hZ2luZy4KKyAgICAvLyBUaGUgdHJhY2sgbmFtZSBpcyBzdGls
bCB1bmtub3duIGF0IHRoaXMgdGltZSwgdGhvdWdoLgorICAgIG1fcGlwZWxpbmUgPSBhZG9wdEdS
ZWYoZ3N0X3BpcGVsaW5lX25ldyhudWxscHRyKSk7CisKKyAgICBtX2J1cyA9IGFkb3B0R1JlZihn
c3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKKyAg
ICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2gobV9idXMuZ2V0KCkpOworICAgIGdzdF9idXNfZW5h
YmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbihtX2J1cy5nZXQoKSk7CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0KG1fYnVzLmdldCgpLCAic3luYy1tZXNzYWdlOjplbGVtZW50IiwgR19DQUxMQkFDSyhh
cHBlbmRQaXBlbGluZUVsZW1lbnRNZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KG1fYnVzLmdldCgpLCAibWVzc2FnZTo6YXBwbGljYXRpb24iLCBHX0NBTExCQUNL
KGFwcGVuZFBpcGVsaW5lQXBwbGljYXRpb25NZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKKworICAg
IC8vIFdlIGFzc2lnbiB0aGUgY3JlYXRlZCBpbnN0YW5jZXMgaGVyZSBpbnN0ZWFkIG9mIGFkb3B0
UmVmKCkgYmVjYXVzZSBnc3RfYmluX2FkZF9tYW55KCkKKyAgICAvLyBiZWxvdyB3aWxsIGFscmVh
ZHkgdGFrZSB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYW5kIHdlIG5lZWQgYW4gYWRkaXRpb25hbCBv
bmUgZm9yIHVzLgorICAgIG1fYXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBz
cmMiLCBudWxscHRyKTsKKyAgICBtX2RlbXV4ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJx
dGRlbXV4IiwgbnVsbHB0cik7CisgICAgbV9hcHBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJhcHBzaW5rIiwgbnVsbHB0cik7CisKKyAgICBnX29iamVjdF9zZXQoR19PQkpFQ1QobV9k
ZW11eC5nZXQoKSksICJhbHdheXMtaG9ub3ItdGZkdCIsIFRSVUUsIG51bGxwdHIpOworICAgIGdz
dF9hcHBfc2lua19zZXRfZW1pdF9zaWduYWxzKEdTVF9BUFBfU0lOSyhtX2FwcHNpbmsuZ2V0KCkp
LCBUUlVFKTsKKyAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jKEdTVF9CQVNFX1NJTksobV9hcHBz
aW5rLmdldCgpKSwgRkFMU0UpOworCisgICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNpbmtQYWQgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2lu
ayIpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGFwcHNpbmtQYWQuZ2V0KCksICJub3RpZnk6OmNh
cHMiLCBHX0NBTExCQUNLKGFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2VkKSwgdGhpcyk7
CisKKyAgICBzZXRBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgR1JlZlB0cjxHc3RQYWQ+IGRlbXV4ZXJQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQobV9kZW11eC5nZXQoKSwgInNpbmsiKSk7CisgICAgbV9kZW11eGVyRGF0
YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5hcHBlbmRQaXBlbGluZSA9IHRoaXM7CisgICAg
bV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5kZXNjcmlwdGlvbiA9ICJk
ZW11eGVyIGRhdGEgZW50ZXJpbmciOworICAgIG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFByb2Jl
SW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2JlKGRlbXV4ZXJQYWQuZ2V0KCks
IEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVD
YWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pLCAmbV9kZW11
eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7CisgICAgbV9hcHBz
aW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5hcHBlbmRQaXBlbGluZSA9IHRoaXM7
CisgICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5kZXNjcmlwdGlv
biA9ICJhcHBzaW5rIGRhdGEgZW50ZXJpbmciOworICAgIG1fYXBwc2lua0RhdGFFbnRlcmluZ1Bh
ZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2JlKGFwcHNpbmtQYWQu
Z2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFk
UHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pLCAm
bV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7CisjZW5k
aWYKKworICAgIC8vIFRoZXNlIHNpZ25hbHMgd29uJ3QgYmUgY29ubmVjdGVkIG91dHNpZGUgb2Yg
dGhlIGxpZmV0aW1lIG9mICJ0aGlzIi4KKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fYXBwc3JjLmdl
dCgpLCAibmVlZC1kYXRhIiwgR19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZUFwcHNyY05lZWREYXRh
KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2RlbXV4LmdldCgpLCAicGFkLWFkZGVk
IiwgR19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZCksIHRoaXMpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9kZW11eC5nZXQoKSwgInBhZC1yZW1vdmVkIiwgR19DQUxMQkFD
SyhhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdChtX2FwcHNpbmsuZ2V0KCksICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSyhhcHBlbmRQ
aXBlbGluZUFwcHNpbmtOZXdTYW1wbGUpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1f
YXBwc2luay5nZXQoKSwgImVvcyIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVBcHBzaW5rRU9T
KSwgdGhpcyk7CisKKyAgICAvLyBBZGRfbWFueSB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIGEgcmVm
ZXJlbmNlLiBUaGF0J3Mgd2h5IHdlIHVzZWQgYW4gYXNzaWdubWVudCBiZWZvcmUuCisgICAgZ3N0
X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX2FwcHNyYy5nZXQoKSwg
bV9kZW11eC5nZXQoKSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfbGluayhtX2FwcHNyYy5n
ZXQoKSwgbV9kZW11eC5nZXQoKSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKK307CisKK0FwcGVuZFBpcGVsaW5lOjp+QXBw
ZW5kUGlwZWxpbmUoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAg
IG1fbmV3U2FtcGxlTG9jay5sb2NrKCk7CisgICAgc2V0QXBwZW5kU3RhdGUoSW52YWxpZCk7Cisg
ICAgbV9uZXdTYW1wbGVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgbV9uZXdTYW1wbGVMb2Nr
LnVubG9jaygpOworCisgICAgbV9wYWRBZGRSZW1vdmVMb2NrLmxvY2soKTsKKyAgICBtX3BsYXll
clByaXZhdGUgPSBudWxscHRyOworICAgIG1fcGFkQWRkUmVtb3ZlQ29uZGl0aW9uLm5vdGlmeU9u
ZSgpOworICAgIG1fcGFkQWRkUmVtb3ZlTG9jay51bmxvY2soKTsKKworICAgIEdTVF9UUkFDRSgi
RGVzdHJveWluZyBBcHBlbmRQaXBlbGluZSAoJXApIiwgdGhpcyk7CisKKyAgICAvLyBGSVhNRTog
TWF5YmUgbm90aWZ5IGFwcGVuZENvbXBsZXRlIGhlcmU/CisKKyAgICBpZiAobV9waXBlbGluZSkg
eworICAgICAgICBBU1NFUlQobV9idXMpOworICAgICAgICBnc3RfYnVzX3JlbW92ZV9zaWduYWxf
d2F0Y2gobV9idXMuZ2V0KCkpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgICAgICBtX3BpcGVsaW5lID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBpZiAobV9hcHBzcmMpIHsKKyAgICAgICAgcmVtb3ZlQXBwc3JjRGF0
YUxlYXZpbmdQcm9iZSgpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2RhdGEobV9hcHBzcmMuZ2V0KCksIHRoaXMpOworICAgICAgICBtX2FwcHNyYyA9IG51bGxwdHI7
CisgICAgfQorCisgICAgaWYgKG1fZGVtdXgpIHsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAg
IEdSZWZQdHI8R3N0UGFkPiBkZW11eGVyUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKG1fZGVtdXguZ2V0KCksICJzaW5rIikpOworICAgICAgICBnc3RfcGFkX3JlbW92
ZV9wcm9iZShkZW11eGVyUGFkLmdldCgpLCBtX2RlbXV4ZXJEYXRhRW50ZXJpbmdQYWRQcm9iZUlu
Zm9ybWF0aW9uLnByb2JlSWQpOworI2VuZGlmCisKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9ieV9kYXRhKG1fZGVtdXguZ2V0KCksIHRoaXMpOworICAgICAgICBtX2RlbXV4
ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9hcHBzaW5rKSB7CisgICAgICAgIEdSZWZQ
dHI8R3N0UGFkPiBhcHBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJz
X2Rpc2Nvbm5lY3RfYnlfZGF0YShhcHBzaW5rUGFkLmdldCgpLCB0aGlzKTsKKyAgICAgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fYXBwc2luay5nZXQoKSwgdGhpcyk7
CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKGFwcHNp
bmtQYWQuZ2V0KCksIG1fYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJv
YmVJZCk7CisjZW5kaWYKKworICAgICAgICBtX2FwcHNpbmsgPSBudWxscHRyOworICAgIH0KKwor
ICAgIGlmIChtX2FwcHNpbmtDYXBzKQorICAgICAgICBtX2FwcHNpbmtDYXBzID0gbnVsbHB0cjsK
KworICAgIGlmIChtX2RlbXV4ZXJTcmNQYWRDYXBzKQorICAgICAgICBtX2RlbXV4ZXJTcmNQYWRD
YXBzID0gbnVsbHB0cjsKK307CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNsZWFyUGxheWVyUHJp
dmF0ZSgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9ERUJV
RygiY2xlYW5pbmcgcHJpdmF0ZSBwbGF5ZXIiKTsKKworICAgIG1fbmV3U2FtcGxlTG9jay5sb2Nr
KCk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgQXBwZW5kUGlwZWxpbmUgd29uJ3QgcHJvY2VzcyBt
b3JlIGRhdGEgZnJvbSBub3cgb24gYW5kCisgICAgLy8gaW5zdHJ1Y3QgaGFuZGxlTmV3U2FtcGxl
IHRvIGFib3J0IGl0c2VsZiBmcm9tIG5vdyBvbiBhcyB3ZWxsLgorICAgIHNldEFwcGVuZFN0YXRl
KEludmFsaWQpOworCisgICAgLy8gQXdha2UgYW55IHBlbmRpbmcgaGFuZGxlTmV3U2FtcGxlIG9w
ZXJhdGlvbiBpbiB0aGUgc3RyZWFtaW5nIHRocmVhZC4KKyAgICBtX25ld1NhbXBsZUNvbmRpdGlv
bi5ub3RpZnlPbmUoKTsKKyAgICBtX25ld1NhbXBsZUxvY2sudW5sb2NrKCk7CisKKyAgICBtX3Bh
ZEFkZFJlbW92ZUxvY2subG9jaygpOworICAgIG1fcGxheWVyUHJpdmF0ZSA9IG51bGxwdHI7Cisg
ICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgbV9wYWRBZGRSZW1v
dmVMb2NrLnVubG9jaygpOworCisgICAgLy8gQW5kIG5vdyB0aGF0IG5vIGhhbmRsZU5ld1NhbXBs
ZSBvcGVyYXRpb25zIHdpbGwgcmVtYWluIHN0YWxsZWQgd2FpdGluZworICAgIC8vIGZvciB0aGUg
bWFpbiB0aHJlYWQsIHN0b3AgdGhlIHBpcGVsaW5lLgorICAgIGlmIChtX3BpcGVsaW5lKQorICAg
ICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05V
TEwpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVFbGVtZW50TWVzc2FnZShHc3RN
ZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKwor
ICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVj
dHVyZShtZXNzYWdlKTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUs
ICJkcm0ta2V5LW5lZWRlZCIpKQorICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRQaXBlbGlu
ZTo6QXBwZW5kU3RhdGU6OktleU5lZ290aWF0aW9uKTsKKworICAgIC8vIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2Ugd2lsbCB0YWtlIGNhcmUgb2Ygc2V0dGluZyB1cCBlbmNyeXB0aW9u
LgorICAgIGlmIChtX3BsYXllclByaXZhdGUpCisgICAgICAgIG1fcGxheWVyUHJpdmF0ZS0+aGFu
ZGxlU3luY01lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRs
ZUFwcGxpY2F0aW9uTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VSVChX
VEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKworICAgIGlmIChnc3Rfc3Ry
dWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcHNyYy1uZWVkLWRhdGEiKSkgeworICAgICAg
ICBoYW5kbGVBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBzcmMtYnVm
ZmVyLWxlZnQiKSkgeworICAgICAgICBoYW5kbGVBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1l
KHN0cnVjdHVyZSwgImRlbXV4ZXItY29ubmVjdC10by1hcHBzaW5rIikpIHsKKyAgICAgICAgR1Jl
ZlB0cjxHc3RQYWQ+IGRlbXV4ZXJTcmNQYWQ7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0
cnVjdHVyZSwgImRlbXV4ZXItc3JjLXBhZCIsIEdfVFlQRV9PQkpFQ1QsICZkZW11eGVyU3JjUGFk
Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgQVNTRVJUKGRlbXV4ZXJTcmNQYWQpOworICAg
ICAgICBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayhkZW11eGVyU3JjUGFkLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1l
KHN0cnVjdHVyZSwgImFwcHNpbmstY2Fwcy1jaGFuZ2VkIikpIHsKKyAgICAgICAgYXBwc2lua0Nh
cHNDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0cnVj
dHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBzaW5rLW5ldy1zYW1wbGUiKSkgeworICAgICAg
ICBHUmVmUHRyPEdzdFNhbXBsZT4gbmV3U2FtcGxlOworICAgICAgICBnc3Rfc3RydWN0dXJlX2dl
dChzdHJ1Y3R1cmUsICJuZXctc2FtcGxlIiwgR1NUX1RZUEVfU0FNUExFLCAmbmV3U2FtcGxlLm91
dFB0cigpLCBudWxscHRyKTsKKworICAgICAgICBhcHBzaW5rTmV3U2FtcGxlKG5ld1NhbXBsZS5n
ZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9o
YXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBzaW5rLWVvcyIpKSB7CisgICAgICAgIGFwcHNpbmtFT1Mo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCkK
K3sKKyAgICBpZiAoIW1fYXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KSB7CisgICAgICAgIEdTVF9U
UkFDRSgiZGlzY2FyZGluZyB1bnRpbCBhdCBsZWFzdCBhIGJ1ZmZlciBsZWF2ZXMgYXBwc3JjIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9hcHBlbmRTdGF0ZSA9PSBP
bmdvaW5nIHx8IG1fYXBwZW5kU3RhdGUgPT0gU2FtcGxpbmcpOworICAgIEFTU0VSVCghbV9hcHBz
cmNOZWVkRGF0YVJlY2VpdmVkKTsKKworICAgIEdTVF9UUkFDRSgicmVjZWl2ZWQgbmVlZC1kYXRh
IGZyb20gYXBwc3JjIik7CisKKyAgICBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQgPSB0cnVlOwor
ICAgIGNoZWNrRW5kT2ZBcHBlbmQoKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6aGFuZGxl
QXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KCkKK3sKKyAgICBtX2FwcHNyY0F0TGVhc3RBQnVmZmVy
TGVmdCA9IHRydWU7CisgICAgR1NUX1RSQUNFKCJyZWNlaXZlZCBidWZmZXItbGVmdCBmcm9tIGFw
cHNyYyIpOworI2lmIExPR19ESVNBQkxFRAorICAgIHJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJv
YmUoKTsKKyNlbmRpZgorfQorCitnaW50IEFwcGVuZFBpcGVsaW5lOjppZCgpCit7CisgICAgQVNT
RVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgc3RhdGljIGdpbnQgdG90YWxBdWRpbyA9
IDA7CisgICAgc3RhdGljIGdpbnQgdG90YWxWaWRlbyA9IDA7CisgICAgc3RhdGljIGdpbnQgdG90
YWxUZXh0ID0gMDsKKworICAgIGlmIChtX2lkKQorICAgICAgICByZXR1cm4gbV9pZDsKKworICAg
IHN3aXRjaCAobV9zdHJlYW1UeXBlKSB7CisgICAgY2FzZSBBdWRpbzoKKyAgICAgICAgbV9pZCA9
ICsrdG90YWxBdWRpbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWaWRlbzoKKyAgICAgICAg
bV9pZCA9ICsrdG90YWxWaWRlbzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUZXh0OgorICAg
ICAgICBtX2lkID0gKyt0b3RhbFRleHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5rbm93
bjoKKyAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIEdTVF9FUlJPUigiVHJ5aW5nIHRvIGdldCBp
ZCBmb3IgYSBwaXBlbGluZSBvZiBVbmtub3duL0ludmFsaWQgdHlwZSIpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgR1NUX0RFQlVH
KCJzdHJlYW1UeXBlPSVkLCBpZD0lZCIsIHN0YXRpY19jYXN0PGludD4obV9zdHJlYW1UeXBlKSwg
bV9pZCk7CisKKyAgICByZXR1cm4gbV9pZDsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6c2V0
QXBwZW5kU3RhdGUoQXBwZW5kU3RhdGUgbmV3QXBwZW5kU3RhdGUpCit7CisgICAgQVNTRVJUKFdU
Rjo6aXNNYWluVGhyZWFkKCkpOworICAgIC8vIFZhbGlkIHRyYW5zaXRpb25zOgorICAgIC8vIE5v
dFN0YXJ0ZWQtLT5PbmdvaW5nLS0+RGF0YVN0YXJ2ZS0tPk5vdFN0YXJ0ZWQKKyAgICAvLyAgICAg
ICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICBgLT5BYm9ydGluZy0tPk5vdFN0YXJ0ZWQKKyAg
ICAvLyAgICAgICAgICAgfCAgICAgICAgIGAtPlNhbXBsaW5nLcK3wrfCty0+U2FtcGxpbmctLT5M
YXN0U2FtcGxlLS0+Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLT5BYm9ydGluZy0tPk5vdFN0YXJ0ZWQK
KyAgICAvLyAgICAgICAgICAgfCAgICAgICAgIGAtPktleU5lZ290aWF0aW9uLS0+T25nb2luZy0t
PlsuLi5dCisgICAgLy8gICAgICAgICAgIGAtPkFib3J0aW5nLS0+Tm90U3RhcnRlZAorICAgIEFw
cGVuZFN0YXRlIG9sZEFwcGVuZFN0YXRlID0gbV9hcHBlbmRTdGF0ZTsKKyAgICBBcHBlbmRTdGF0
ZSBuZXh0QXBwZW5kU3RhdGUgPSBJbnZhbGlkOworCisgICAgaWYgKG9sZEFwcGVuZFN0YXRlICE9
IG5ld0FwcGVuZFN0YXRlKQorICAgICAgICBHU1RfVFJBQ0UoIiVzIC0tPiAlcyIsIGR1bXBBcHBl
bmRTdGF0ZShvbGRBcHBlbmRTdGF0ZSksIGR1bXBBcHBlbmRTdGF0ZShuZXdBcHBlbmRTdGF0ZSkp
OworCisgICAgYm9vbCBvayA9IGZhbHNlOworCisgICAgc3dpdGNoIChvbGRBcHBlbmRTdGF0ZSkg
eworICAgIGNhc2UgTm90U3RhcnRlZDoKKyAgICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkg
eworICAgICAgICBjYXNlIE9uZ29pbmc6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAg
ICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BM
QVlJTkcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm90U3RhcnRlZDoKKyAg
ICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChtX3BlbmRpbmdCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICBHU1RfVFJBQ0UoInB1c2hpbmcgcGVuZGluZyBidWZmZXIgJXAiLCBt
X3BlbmRpbmdCdWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgIGdzdF9hcHBfc3JjX3B1c2hf
YnVmZmVyKEdTVF9BUFBfU1JDKGFwcHNyYygpKSwgbV9wZW5kaW5nQnVmZmVyLmxlYWtSZWYoKSk7
CisgICAgICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gT25nb2luZzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFib3J0aW5nOgorICAgICAgICAg
ICAgb2sgPSB0cnVlOworICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gTm90U3RhcnRlZDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICBv
ayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgS2V5TmVnb3Rp
YXRpb246CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAgICAgICAgY2FzZSBP
bmdvaW5nOgorICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICBvayA9IHRydWU7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT25nb2luZzoKKyAgICAgICAgc3dp
dGNoIChuZXdBcHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIEtleU5lZ290aWF0aW9uOgorICAg
ICAgICBjYXNlIFNhbXBsaW5nOgorICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICBv
ayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhU3RhcnZlOgor
ICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgR1NUX0RFQlVHKCJyZWNlaXZlZCBh
bGwgcGVuZGluZyBzYW1wbGVzIik7CisgICAgICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUt
PmRpZFJlY2VpdmVBbGxQZW5kaW5nU2FtcGxlcygpOworICAgICAgICAgICAgaWYgKG1fYWJvcnRQ
ZW5kaW5nKQorICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IEFib3J0aW5nOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IE5vdFN0YXJ0
ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGF0YVN0YXJ2ZToKKyAg
ICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIE5vdFN0YXJ0ZWQ6
CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFib3J0aW5nOgorICAgICAgICAgICAgb2sgPSB0cnVl
OworICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gTm90U3RhcnRlZDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTYW1wbGluZzoKKyAgICAgICAgc3dpdGNoIChuZXdB
cHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIFNhbXBsaW5nOgorICAgICAgICBjYXNlIEludmFs
aWQ6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBMYXN0U2FtcGxlOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgR1NU
X0RFQlVHKCJyZWNlaXZlZCBhbGwgcGVuZGluZyBzYW1wbGVzIik7CisgICAgICAgICAgICBtX3Nv
dXJjZUJ1ZmZlclByaXZhdGUtPmRpZFJlY2VpdmVBbGxQZW5kaW5nU2FtcGxlcygpOworICAgICAg
ICAgICAgaWYgKG1fYWJvcnRQZW5kaW5nKQorICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0
ZSA9IEFib3J0aW5nOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRBcHBl
bmRTdGF0ZSA9IE5vdFN0YXJ0ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTGFzdFNhbXBsZToKKyAgICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkgeworICAgICAg
ICBjYXNlIE5vdFN0YXJ0ZWQ6CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIG9r
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFib3J0aW5nOgorICAg
ICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gTm90U3Rh
cnRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBYm9ydGluZzoKKyAg
ICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIE5vdFN0YXJ0ZWQ6
CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICByZXNldFBpcGVsaW5lKCk7Cisg
ICAgICAgICAgICBtX2Fib3J0UGVuZGluZyA9IGZhbHNlOworICAgICAgICAgICAgbmV4dEFwcGVu
ZFN0YXRlID0gTm90U3RhcnRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dmFsaWQ6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgb2sgPSB0cnVlOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBpZiAob2spCisgICAgICAgIG1fYXBwZW5kU3RhdGUgPSBuZXdBcHBlbmRT
dGF0ZTsKKyAgICBlbHNlCisgICAgICAgIEdTVF9FUlJPUigiSW52YWxpZCBhcHBlbmQgc3RhdGUg
dHJhbnNpdGlvbiAlcyAtLT4gJXMiLCBkdW1wQXBwZW5kU3RhdGUob2xkQXBwZW5kU3RhdGUpLCBk
dW1wQXBwZW5kU3RhdGUobmV3QXBwZW5kU3RhdGUpKTsKKworICAgIEFTU0VSVChvayk7CisKKyAg
ICBpZiAobmV4dEFwcGVuZFN0YXRlICE9IEludmFsaWQpCisgICAgICAgIHNldEFwcGVuZFN0YXRl
KG5leHRBcHBlbmRTdGF0ZSk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OnBhcnNlRGVtdXhl
clNyY1BhZENhcHMoR3N0Q2FwcyogZGVtdXhlclNyY1BhZENhcHMpCit7CisgICAgQVNTRVJUKFdU
Rjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgbV9kZW11eGVyU3JjUGFkQ2FwcyA9IGFkb3B0R1Jl
ZihkZW11eGVyU3JjUGFkQ2Fwcyk7CisgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFT
b3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpVbmtub3duOworCisgICAgR3N0U3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0
KCksIDApOworICAgIGJvb2wgc2l6ZUNvbmZpZ3VyZWQgPSBmYWxzZTsKKworI2lmIEdTVF9DSEVD
S19WRVJTSU9OKDEsIDUsIDMpICYmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQorICAg
IGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtY2Vu
YyIpKSB7CisgICAgICAgIC8vIEFueSBwcmV2aW91cyBkZWNyaXB0b3Igc2hvdWxkIGhhdmUgYmVl
biByZW1vdmVkIGZyb20gdGhlIHBpcGVsaW5lIGJ5IGRpc2Nvbm5lY3RGcm9tQXBwU2lua0Zyb21T
dHJlYW1pbmdUaHJlYWQoKQorICAgICAgICBBU1NFUlQoIW1fZGVjcnlwdG9yKTsKKworICAgICAg
ICBtX2RlY3J5cHRvciA9IGFkb3B0R1JlZihXZWJDb3JlOjpjcmVhdGVHc3REZWNyeXB0b3IoZ3N0
X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgInByb3RlY3Rpb24tc3lzdGVtIikpKTsK
KyAgICAgICAgaWYgKCFtX2RlY3J5cHRvcikgeworICAgICAgICAgICAgR1NUX0VSUk9SKCJkZWNy
eXB0b3Igbm90IGZvdW5kIGZvciBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbV9kZW11eGVyU3Jj
UGFkQ2Fwcy5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBnY2hhciogb3JpZ2luYWxNZWRpYVR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJp
bmcoc3RydWN0dXJlLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIpOworCisgICAgICAgIGlmIChnX3N0
cl9oYXNfcHJlZml4KG9yaWdpbmFsTWVkaWFUeXBlLCAidmlkZW8vIikpIHsKKyAgICAgICAgICAg
IGludCB3aWR0aCA9IDA7CisgICAgICAgICAgICBpbnQgaGVpZ2h0ID0gMDsKKyAgICAgICAgICAg
IGZsb2F0IGZpbmFsSGVpZ2h0ID0gMDsKKworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRf
aW50KHN0cnVjdHVyZSwgIndpZHRoIiwgJndpZHRoKTsKKyAgICAgICAgICAgIGlmIChnc3Rfc3Ry
dWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAiaGVpZ2h0IiwgJmhlaWdodCkpIHsKKyAgICAgICAg
ICAgICAgICBnaW50IHJhdGlvTnVtZXJhdG9yID0gMTsKKyAgICAgICAgICAgICAgICBnaW50IHJh
dGlvRGVub21pbmF0b3IgPSAxOworCisgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRf
ZnJhY3Rpb24oc3RydWN0dXJlLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgJnJhdGlvTnVtZXJhdG9y
LCAmcmF0aW9EZW5vbWluYXRvcik7CisgICAgICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBoZWln
aHQgKiAoKGZsb2F0KSByYXRpb0Rlbm9taW5hdG9yIC8gKGZsb2F0KSByYXRpb051bWVyYXRvcik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNv
cmU6OkZsb2F0U2l6ZSh3aWR0aCwgZmluYWxIZWlnaHQpOworICAgICAgICAgICAgbV9zdHJlYW1U
eXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6
OkZsb2F0U2l6ZSgpOworICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgob3JpZ2luYWxN
ZWRpYVR5cGUsICJhdWRpby8iKSkKKyAgICAgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJD
b3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOworICAgICAgICAgICAg
ZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeChvcmlnaW5hbE1lZGlhVHlwZSwgInRleHQvIikpCisg
ICAgICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1U
eXBlR1N0cmVhbWVyOjpUZXh0OworICAgICAgICB9CisgICAgICAgIHNpemVDb25maWd1cmVkID0g
dHJ1ZTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICghc2l6ZUNvbmZpZ3VyZWQpIHsKKyAgICAg
ICAgY29uc3QgZ2NoYXIqIHN0cnVjdHVyZU5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0
cnVjdHVyZSk7CisgICAgICAgIEdzdFZpZGVvSW5mbyBpbmZvOworCisgICAgICAgIGlmIChnX3N0
cl9oYXNfcHJlZml4KHN0cnVjdHVyZU5hbWUsICJ2aWRlby8iKSAmJiBnc3RfdmlkZW9faW5mb19m
cm9tX2NhcHMoJmluZm8sIGRlbXV4ZXJTcmNQYWRDYXBzKSkgeworICAgICAgICAgICAgZmxvYXQg
d2lkdGgsIGhlaWdodDsKKworICAgICAgICAgICAgd2lkdGggPSBpbmZvLndpZHRoOworICAgICAg
ICAgICAgaGVpZ2h0ID0gaW5mby5oZWlnaHQgKiAoKGZsb2F0KSBpbmZvLnBhcl9kIC8gKGZsb2F0
KSBpbmZvLnBhcl9uKTsKKworICAgICAgICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gV2ViQ29y
ZTo6RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0g
V2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0
U2l6ZSgpOworICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgoc3RydWN0dXJlTmFtZSwg
ImF1ZGlvLyIpKQorICAgICAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlh
U291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW87CisgICAgICAgICAgICBlbHNlIGlmIChn
X3N0cl9oYXNfcHJlZml4KHN0cnVjdHVyZU5hbWUsICJ0ZXh0LyIpKQorICAgICAgICAgICAgICAg
IG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6
VGV4dDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lu
a0NhcHNDaGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAg
ICBpZiAoIW1fYXBwc2luaykKKyAgICAgICAgcmV0dXJuOworCisgICAgR1JlZlB0cjxHc3RQYWQ+
IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0
KCksICJzaW5rIikpOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3Rf
cGFkX2dldF9jdXJyZW50X2NhcHMocGFkLmdldCgpKSk7CisKKyAgICBpZiAoIWNhcHMpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSdyZSByaWdodCBhZnRlciBh
IG5ldyB0cmFjayBoYXMgYXBwZWFyZWQuIE90aGVyd2lzZSwgaXQncyBhIGNhcHMgY2hhbmdlIGlu
c2lkZSB0aGUgc2FtZSB0cmFjay4KKyAgICBib29sIHByZXZpb3VzQ2Fwc1dlcmVOdWxsID0gIW1f
YXBwc2lua0NhcHM7CisKKyAgICBpZiAoZ3N0X2NhcHNfcmVwbGFjZSgmbV9hcHBzaW5rQ2Fwcy5v
dXRQdHIoKSwgY2Fwcy5nZXQoKSkpIHsKKyAgICAgICAgaWYgKG1fcGxheWVyUHJpdmF0ZSAmJiBw
cmV2aW91c0NhcHNXZXJlTnVsbCkKKyAgICAgICAgICAgIG1fcGxheWVyUHJpdmF0ZS0+dHJhY2tE
ZXRlY3RlZCh0aGlzLCBtX29sZFRyYWNrLCBtX3RyYWNrKTsKKyAgICAgICAgZGlkUmVjZWl2ZUlu
aXRpYWxpemF0aW9uU2VnbWVudCgpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9w
aXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICAgIH0KK30KKwordm9pZCBBcHBl
bmRQaXBlbGluZTo6Y2hlY2tFbmRPZkFwcGVuZCgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWlu
VGhyZWFkKCkpOworCisgICAgaWYgKCFtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQgfHwgKG1fYXBw
ZW5kU3RhdGUgIT0gT25nb2luZyAmJiBtX2FwcGVuZFN0YXRlICE9IFNhbXBsaW5nKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR1NUX1RSQUNFKCJlbmQgb2YgYXBwZW5kIGRhdGEgbWFyayB3YXMg
cmVjZWl2ZWQiKTsKKworICAgIHN3aXRjaCAobV9hcHBlbmRTdGF0ZSkgeworICAgIGNhc2UgT25n
b2luZzoKKyAgICAgICAgR1NUX1RSQUNFKCJEYXRhU3RhcnZlIik7CisgICAgICAgIG1fYXBwc3Jj
TmVlZERhdGFSZWNlaXZlZCA9IGZhbHNlOworICAgICAgICBzZXRBcHBlbmRTdGF0ZShEYXRhU3Rh
cnZlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTYW1wbGluZzoKKyAgICAgICAgR1NUX1RS
QUNFKCJMYXN0U2FtcGxlIik7CisgICAgICAgIG1fYXBwc3JjTmVlZERhdGFSZWNlaXZlZCA9IGZh
bHNlOworICAgICAgICBzZXRBcHBlbmRTdGF0ZShMYXN0U2FtcGxlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lua05ld1NhbXBsZShH
c3RTYW1wbGUqIHNhbXBsZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisK
KyAgICBtX25ld1NhbXBsZUxvY2subG9jaygpOworCisgICAgLy8gSWdub3JlIHNhbXBsZXMgaWYg
d2UncmUgbm90IGV4cGVjdGluZyB0aGVtLiBSZWZ1c2UgcHJvY2Vzc2luZyBpZiB3ZSdyZSBpbiBJ
bnZhbGlkIHN0YXRlLgorICAgIGlmIChtX2FwcGVuZFN0YXRlICE9IE9uZ29pbmcgJiYgbV9hcHBl
bmRTdGF0ZSAhPSBTYW1wbGluZykgeworICAgICAgICBHU1RfV0FSTklORygiVW5leHBlY3RlZCBz
YW1wbGUsIGFwcGVuZFN0YXRlPSVzIiwgZHVtcEFwcGVuZFN0YXRlKG1fYXBwZW5kU3RhdGUpKTsK
KyAgICAgICAgLy8gRklYTUU6IFJldHVybiBFUlJPUiBhbmQgZmluZCBhIG1vcmUgcm9idXN0IHdh
eSB0byBkZXRlY3QgdGhhdCBhbGwgdGhlCisgICAgICAgIC8vIGRhdGEgaGFzIGJlZW4gcHJvY2Vz
c2VkLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlc29ydCB0byB0aGVzZSBoYWNrcy4KKyAgICAgICAg
Ly8gQWxsIGluIGFsbCwgcmV0dXJuIE9LLCBldmVuIGlmIGl0J3Mgbm90IHRoZSBwcm9wZXIgdGhp
bmcgdG8gZG8uIFdlIGRvbid0IHdhbnQgdG8gYnJlYWsgdGhlIGRlbXV4ZXIuCisgICAgICAgIG1f
Zmxvd1JldHVybiA9IEdTVF9GTE9XX09LOworICAgICAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi5u
b3RpZnlPbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxHU3RyZWFt
ZXJNZWRpYVNhbXBsZT4gbWVkaWFTYW1wbGUgPSBXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYVNhbXBs
ZTo6Y3JlYXRlKHNhbXBsZSwgbV9wcmVzZW50YXRpb25TaXplLCB0cmFja0lkKCkpOworCisgICAg
R1NUX1RSQUNFKCJhcHBlbmQ6IHRyYWNrSWQ9JXMgUFRTPSVmIHByZXNlbnRhdGlvblNpemU9JS4w
ZnglLjBmIiwgbWVkaWFTYW1wbGUtPnRyYWNrSUQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBt
ZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRmxvYXQoKSwgbWVkaWFTYW1wbGUtPnBy
ZXNlbnRhdGlvblNpemUoKS53aWR0aCgpLCBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgp
LmhlaWdodCgpKTsKKworICAgIC8vIElmIHdlJ3JlIGJleW9uZCB0aGUgZHVyYXRpb24sIGlnbm9y
ZSB0aGlzIHNhbXBsZSBhbmQgdGhlIHJlbWFpbmluZyBvbmVzLgorICAgIE1lZGlhVGltZSBkdXJh
dGlvbiA9IG1fbWVkaWFTb3VyY2VDbGllbnQtPmR1cmF0aW9uKCk7CisgICAgaWYgKGR1cmF0aW9u
LmlzVmFsaWQoKSAmJiAhZHVyYXRpb24uaW5kZWZpbml0ZVRpbWUoKSAmJiBtZWRpYVNhbXBsZS0+
cHJlc2VudGF0aW9uVGltZSgpID4gZHVyYXRpb24pIHsKKyAgICAgICAgR1NUX0RFQlVHKCJEZXRl
Y3RlZCBzYW1wbGUgKCVmKSBiZXlvbmQgdGhlIGR1cmF0aW9uICglZiksIGRlY2xhcmluZyBMYXN0
U2FtcGxlIiwgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKS50b0Zsb2F0KCksIGR1cmF0
aW9uLnRvRmxvYXQoKSk7CisgICAgICAgIHNldEFwcGVuZFN0YXRlKExhc3RTYW1wbGUpOworICAg
ICAgICBtX2Zsb3dSZXR1cm4gPSBHU1RfRkxPV19PSzsKKyAgICAgICAgbV9uZXdTYW1wbGVDb25k
aXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBZGQg
YSBnYXAgc2FtcGxlIGlmIGEgZ2FwIGlzIGRldGVjdGVkIGJlZm9yZSB0aGUgZmlyc3Qgc2FtcGxl
LgorICAgIGlmIChtZWRpYVNhbXBsZS0+ZGVjb2RlVGltZSgpID09IE1lZGlhVGltZTo6emVyb1Rp
bWUoKQorICAgICAgICAmJiBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpID4gTWVkaWFU
aW1lOjp6ZXJvVGltZSgpCisgICAgICAgICYmIG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1l
KCkgPD0gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKDAuMSkpIHsKKyAgICAgICAgR1NUX0RF
QlVHKCJBZGRpbmcgZ2FwIG9mZnNldCIpOworICAgICAgICBtZWRpYVNhbXBsZS0+YXBwbHlQdHNP
ZmZzZXQoTWVkaWFUaW1lOjp6ZXJvVGltZSgpKTsKKyAgICB9CisKKyAgICBtX3NvdXJjZUJ1ZmZl
clByaXZhdGUtPmRpZFJlY2VpdmVTYW1wbGUobWVkaWFTYW1wbGUpOworICAgIHNldEFwcGVuZFN0
YXRlKFNhbXBsaW5nKTsKKyAgICBtX2Zsb3dSZXR1cm4gPSBHU1RfRkxPV19PSzsKKyAgICBtX25l
d1NhbXBsZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICBtX25ld1NhbXBsZUxvY2sudW5sb2Nr
KCk7CisKKyAgICBjaGVja0VuZE9mQXBwZW5kKCk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6
OmFwcHNpbmtFT1MoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAg
IHN3aXRjaCAobV9hcHBlbmRTdGF0ZSkgeworICAgIGNhc2UgQWJvcnRpbmc6CisgICAgICAgIC8v
IElnbm9yZWQuIE9wZXJhdGlvbiBjb21wbGV0aW9uIHdpbGwgYmUgbWFuYWdlZCBieSB0aGUgQWJv
cnRpbmctPk5vdFN0YXJ0ZWQgdHJhbnNpdGlvbi4KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
T25nb2luZzoKKyAgICAgICAgLy8gRmluaXNoIE9uZ29pbmcgYW5kIFNhbXBsaW5nIHN0YXRlcy4K
KyAgICAgICAgc2V0QXBwZW5kU3RhdGUoRGF0YVN0YXJ2ZSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU2FtcGxpbmc6CisgICAgICAgIHNldEFwcGVuZFN0YXRlKExhc3RTYW1wbGUpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHU1RfREVCVUcoIlVuZXhwZWN0ZWQg
RU9TIik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6
ZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCgpCit7CisgICAgQVNTRVJUKFdURjo6aXNN
YWluVGhyZWFkKCkpOworCisgICAgV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6
SW5pdGlhbGl6YXRpb25TZWdtZW50IGluaXRpYWxpemF0aW9uU2VnbWVudDsKKworICAgIEdTVF9E
RUJVRygiTm90aWZ5aW5nIFNvdXJjZUJ1ZmZlciBmb3IgdHJhY2sgJXMiLCBtX3RyYWNrLT5pZCgp
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGluaXRpYWxpemF0aW9uU2VnbWVudC5kdXJh
dGlvbiA9IG1fbWVkaWFTb3VyY2VDbGllbnQtPmR1cmF0aW9uKCk7CisgICAgc3dpdGNoIChtX3N0
cmVhbVR5cGUpIHsKKyAgICBjYXNlIEF1ZGlvOiB7CisgICAgICAgIFdlYkNvcmU6OlNvdXJjZUJ1
ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudDo6QXVkaW9UcmFja0luZm9y
bWF0aW9uIGluZm87CisgICAgICAgIGluZm8udHJhY2sgPSBzdGF0aWNfY2FzdDxBdWRpb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lcio+KG1fdHJhY2suZ2V0KCkpOworICAgICAgICBpbmZvLmRlc2NyaXB0
aW9uID0gV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFEZXNjcmlwdGlvbjo6Y3JlYXRlKG1fZGVtdXhl
clNyY1BhZENhcHMuZ2V0KCkpOworICAgICAgICBpbml0aWFsaXphdGlvblNlZ21lbnQuYXVkaW9U
cmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBWaWRl
bzogeworICAgICAgICBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0aWFs
aXphdGlvblNlZ21lbnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlvbiBpbmZvOworICAgICAgICBpbmZv
LnRyYWNrID0gc3RhdGljX2Nhc3Q8VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIqPihtX3RyYWNr
LmdldCgpKTsKKyAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9IFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRGVzY3JpcHRpb246OmNyZWF0ZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKKyAgICAg
ICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LnZpZGVvVHJhY2tzLmFwcGVuZChpbmZvKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEdTVF9FUlJPUigiVW5zdXBw
b3J0ZWQgb3IgdW5rbm93biBzdHJlYW0gdHlwZSIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRl
LT5kaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KGluaXRpYWxpemF0aW9uU2VnbWVudCk7
Cit9CisKK0F0b21pY1N0cmluZyBBcHBlbmRQaXBlbGluZTo6dHJhY2tJZCgpCit7CisgICAgQVNT
RVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX3RyYWNrKQorICAgICAgICBy
ZXR1cm4gQXRvbWljU3RyaW5nKCk7CisKKyAgICByZXR1cm4gbV90cmFjay0+aWQoKTsKK30KKwor
dm9pZCBBcHBlbmRQaXBlbGluZTo6cmVzZXRQaXBlbGluZSgpCit7CisgICAgQVNTRVJUKFdURjo6
aXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9ERUJVRygicmVzZXR0aW5nIHBpcGVsaW5lIik7Cisg
ICAgbV9hcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQgPSBmYWxzZTsKKyAgICBzZXRBcHBzcmNEYXRh
TGVhdmluZ1Byb2JlKCk7CisKKyAgICBtX25ld1NhbXBsZUxvY2subG9jaygpOworICAgIG1fbmV3
U2FtcGxlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSht
X3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUkVBRFkpOworICAgIGdzdF9lbGVtZW50X2dldF9z
dGF0ZShtX3BpcGVsaW5lLmdldCgpLCBudWxscHRyLCBudWxscHRyLCAwKTsKKyAgICBtX25ld1Nh
bXBsZUxvY2sudW5sb2NrKCk7CisKKyNpZiAoIShMT0dfRElTQUJMRUQgfHwgR1NUX0RJU0FCTEVf
R1NUX0RFQlVHKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgaGVyZSBmb3IgZGVidWdnaW5n
IHB1cnBvc2VzLiBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGhhdmUgaXQgYXMgY2xhc3MgbWVt
YmVyLgorICAgICAgICBXVEY6OlN0cmluZyAgZG90RmlsZU5hbWUgPSBTdHJpbmc6OmZvcm1hdCgi
cmVzZXQtcGlwZWxpbmUtJWQiLCArK2kpOworICAgICAgICBnc3RfZGVidWdfYmluX3RvX2RvdF9m
aWxlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwg
ZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorI2VuZGlmCisKK30KKwordm9pZCBB
cHBlbmRQaXBlbGluZTo6c2V0QXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgpCit7CisgICAgaWYgKG1f
YXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfVFJB
Q0UoInNldHRpbmcgYXBwc3JjIGRhdGEgbGVhdmluZyBwcm9iZSIpOworCisgICAgR1JlZlB0cjxH
c3RQYWQ+IGFwcHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCht
X2FwcHNyYy5nZXQoKSwgInNyYyIpKTsKKyAgICBtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCA9
IGdzdF9wYWRfYWRkX3Byb2JlKGFwcHNyY1BhZC5nZXQoKSwgR1NUX1BBRF9QUk9CRV9UWVBFX0JV
RkZFUiwgcmVpbnRlcnByZXRfY2FzdDxHc3RQYWRQcm9iZUNhbGxiYWNrPihhcHBlbmRQaXBlbGlu
ZUFwcHNyY0RhdGFMZWF2aW5nKSwgdGhpcywgbnVsbHB0cik7Cit9CisKK3ZvaWQgQXBwZW5kUGlw
ZWxpbmU6OnJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKQoreworICAgIGlmICghbV9hcHBz
cmNEYXRhTGVhdmluZ1Byb2JlSWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9UUkFDRSgi
cmVtb3ZpbmcgYXBwc3JjIGRhdGEgbGVhdmluZyBwcm9iZSIpOworCisgICAgR1JlZlB0cjxHc3RQ
YWQ+IGFwcHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2Fw
cHNyYy5nZXQoKSwgInNyYyIpKTsKKyAgICBnc3RfcGFkX3JlbW92ZV9wcm9iZShhcHBzcmNQYWQu
Z2V0KCksIG1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkKTsKKyAgICBtX2FwcHNyY0RhdGFMZWF2
aW5nUHJvYmVJZCA9IDA7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmFib3J0KCkKK3sKKyAg
ICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgR1NUX0RFQlVHKCJhYm9ydGluZyIp
OworCisgICAgbV9wZW5kaW5nQnVmZmVyLmNsZWFyKCk7CisKKyAgICAvLyBBYm9ydCBhbHJlYWR5
IG9uZ29pbmcuCisgICAgaWYgKG1fYWJvcnRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2Fib3J0UGVuZGluZyA9IHRydWU7CisgICAgaWYgKG1fYXBwZW5kU3RhdGUgPT0gTm90U3Rh
cnRlZCkKKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoQWJvcnRpbmcpOworICAgIC8vIEVsc2UsIHRo
ZSBhdXRvbWF0aWMgc3RhdGUgdHJhbnNpdGlvbnMgd2lsbCB0YWtlIGNhcmUgd2hlbiB0aGUgb25n
b2luZyBhcHBlbmQgZmluaXNoZXMuCit9CisKK0dzdEZsb3dSZXR1cm4gQXBwZW5kUGlwZWxpbmU6
OnB1c2hOZXdCdWZmZXIoR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgR3N0Rmxvd1JldHVybiBy
ZXN1bHQ7CisKKyAgICBpZiAobV9hYm9ydFBlbmRpbmcpIHsKKyAgICAgICAgbV9wZW5kaW5nQnVm
ZmVyID0gYWRvcHRHUmVmKGJ1ZmZlcik7CisgICAgICAgIHJlc3VsdCA9IEdTVF9GTE9XX09LOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVuZFBpcGVsaW5lOjpPbmdv
aW5nKTsKKyAgICAgICAgR1NUX1RSQUNFKCJwdXNoaW5nIG5ldyBidWZmZXIgJXAiLCBidWZmZXIp
OworICAgICAgICByZXN1bHQgPSBnc3RfYXBwX3NyY19wdXNoX2J1ZmZlcihHU1RfQVBQX1NSQyhh
cHBzcmMoKSksIGJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9p
ZCBBcHBlbmRQaXBlbGluZTo6cmVwb3J0QXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KCkKK3sKKyAg
ICBHU1RfVFJBQ0UoImJ1ZmZlciBsZWZ0IGFwcHNyYywgcmVwb3N0aW5nIHRvIGJ1cyIpOworICAg
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImFwcHNy
Yy1idWZmZXItbGVmdCIpOworICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9u
ZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChtX2FwcHNyYy5nZXQoKSksIHN0cnVjdHVyZSk7Cisg
ICAgZ3N0X2J1c19wb3N0KG1fYnVzLmdldCgpLCBtZXNzYWdlKTsKK30KKwordm9pZCBBcHBlbmRQ
aXBlbGluZTo6cmVwb3J0QXBwc3JjTmVlZERhdGFSZWNlaXZlZCgpCit7CisgICAgR1NUX1RSQUNF
KCJyZWNlaXZlZCBuZWVkLWRhdGEgc2lnbmFsIGF0IGFwcHNyYywgcmVwb3N0aW5nIHRvIGJ1cyIp
OworICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHko
ImFwcHNyYy1uZWVkLWRhdGEiKTsKKyAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3Nh
Z2VfbmV3X2FwcGxpY2F0aW9uKEdTVF9PQkpFQ1QobV9hcHBzcmMuZ2V0KCkpLCBzdHJ1Y3R1cmUp
OworICAgIGdzdF9idXNfcG9zdChtX2J1cy5nZXQoKSwgbWVzc2FnZSk7Cit9CisKK0dzdEZsb3dS
ZXR1cm4gQXBwZW5kUGlwZWxpbmU6OmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoR3N0RWxlbWVudCog
YXBwc2luaykKK3sKKyAgICBBU1NFUlQoIVdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgLy8g
RXZlbiBpZiB3ZSdyZSBkaXNhYmxlZCwgaXQncyBpbXBvcnRhbnQgdG8gcHVsbCB0aGUgc2FtcGxl
IG91dCBhbnl3YXkgdG8KKyAgICAvLyBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBjaGFuZ2luZyB0byBH
U1RfU1RBVEVfTlVMTCBoYXZpbmcgYSBub24gZW1wdHkgYXBwc2luay4KKyAgICBHUmVmUHRyPEdz
dFNhbXBsZT4gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3NhbXBsZShHU1Rf
QVBQX1NJTksoYXBwc2luaykpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX25ld1NhbXBsZUxv
Y2spOworCisgICAgaWYgKCFtX3BsYXllclByaXZhdGUgfHwgbV9hcHBlbmRTdGF0ZSA9PSBJbnZh
bGlkKSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJBcHBlbmRQaXBlbGluZSBoYXMgYmVlbiBkaXNh
YmxlZCwgaWdub3JpbmcgdGhpcyBzYW1wbGUiKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VS
Uk9SOworICAgIH0KKworICAgIGlmICghKCFtX3BsYXllclByaXZhdGUgfHwgbV9hcHBlbmRTdGF0
ZSA9PSBJbnZhbGlkKSkgeworICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9z
dHJ1Y3R1cmVfbmV3KCJhcHBzaW5rLW5ldy1zYW1wbGUiLCAibmV3LXNhbXBsZSIsIEdTVF9UWVBF
X1NBTVBMRSwgc2FtcGxlLmdldCgpLCBudWxscHRyKTsKKyAgICAgICAgR3N0TWVzc2FnZSogbWVz
c2FnZSA9IGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbihHU1RfT0JKRUNUKGFwcHNpbmspLCBz
dHJ1Y3R1cmUpOworICAgICAgICBnc3RfYnVzX3Bvc3QobV9idXMuZ2V0KCksIG1lc3NhZ2UpOwor
ICAgICAgICBHU1RfVFJBQ0UoImFwcHNpbmstbmV3LXNhbXBsZSBtZXNzYWdlIHBvc3RlZCB0byBi
dXMiKTsKKworICAgICAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi53YWl0KG1fbmV3U2FtcGxlTG9j
ayk7CisgICAgICAgIC8vIFdlJ3ZlIGJlZW4gYXdha2VuIGJlY2F1c2UgdGhlIHNhbXBsZSB3YXMg
cHJvY2Vzc2VkIG9yIGJlY2F1c2Ugb2YKKyAgICAgICAgLy8gYW4gZXhjZXB0aW9uYWwgY29uZGl0
aW9uIChlbnRlcmVkIGluIEludmFsaWQgc3RhdGUsIGRlc3RydWN0b3IsIGV0Yy4pLgorICAgICAg
ICAvLyBXZSBjYW4ndCByZWxpYWJseSBkZWxldGUgaW5mbyBoZXJlLCBhcHBlbmRQaXBlbGluZUFw
cHNpbmtOZXdTYW1wbGVNYWluVGhyZWFkIHdpbGwgZG8gaXQuCisgICAgfQorCisgICAgcmV0dXJu
IG1fZmxvd1JldHVybjsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4ZXJT
cmNQYWRUb0FwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCogZGVtdXhlclNyY1BhZCkKK3sKKyAg
ICBpZiAoIW1fYXBwc2luaykKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHKCJjb25u
ZWN0aW5nIHRvIGFwcHNpbmsiKTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiBzaW5rU2lua1BhZCA9
IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0KCksICJz
aW5rIikpOworCisgICAgLy8gT25seSBvbmUgc3RyZWFtIHBlciBkZW11eGVyIGlzIHN1cHBvcnRl
ZC4KKyAgICBBU1NFUlQoIWdzdF9wYWRfaXNfbGlua2VkKHNpbmtTaW5rUGFkLmdldCgpKSk7CisK
KyAgICBnaW50NjQgdGltZUxlbmd0aCA9IDA7CisgICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1
cmF0aW9uKG1fZGVtdXguZ2V0KCksIEdTVF9GT1JNQVRfVElNRSwgJnRpbWVMZW5ndGgpCisgICAg
ICAgICYmIHN0YXRpY19jYXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpICE9IEdTVF9DTE9DS19USU1F
X05PTkUpCisgICAgICAgIG1faW5pdGlhbER1cmF0aW9uID0gTWVkaWFUaW1lKEdTVF9USU1FX0FT
X1VTRUNPTkRTKHRpbWVMZW5ndGgpLCBHX1VTRUNfUEVSX1NFQyk7CisgICAgZWxzZQorICAgICAg
ICBtX2luaXRpYWxEdXJhdGlvbiA9IE1lZGlhVGltZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUoKTsK
KworICAgIGlmIChXVEY6OmlzTWFpblRocmVhZCgpKQorICAgICAgICBjb25uZWN0RGVtdXhlclNy
Y1BhZFRvQXBwc2luayhkZW11eGVyU3JjUGFkKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gQ2Fs
bCBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luaygpIGluIHRoZSBtYWluIHRocmVhZCBhbmQg
d2FpdC4KKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYWRBZGRSZW1vdmVMb2NrKTsKKyAg
ICAgICAgaWYgKCFtX3BsYXllclByaXZhdGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldygiZGVtdXhlci1j
b25uZWN0LXRvLWFwcHNpbmsiLCAiZGVtdXhlci1zcmMtcGFkIiwgR19UWVBFX09CSkVDVCwgZGVt
dXhlclNyY1BhZCwgbnVsbHB0cik7CisgICAgICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3Rf
bWVzc2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChtX2RlbXV4LmdldCgpKSwgc3RydWN0
dXJlKTsKKyAgICAgICAgZ3N0X2J1c19wb3N0KG1fYnVzLmdldCgpLCBtZXNzYWdlKTsKKyAgICAg
ICAgR1NUX1RSQUNFKCJkZW11eGVyLWNvbm5lY3QtdG8tYXBwc2luayBtZXNzYWdlIHBvc3RlZCB0
byBidXMiKTsKKworICAgICAgICBtX3BhZEFkZFJlbW92ZUNvbmRpdGlvbi53YWl0KG1fcGFkQWRk
UmVtb3ZlTG9jayk7CisgICAgfQorCisgICAgLy8gTXVzdCBiZSBkb25lIGluIHRoZSB0aHJlYWQg
d2Ugd2VyZSBjYWxsZWQgZnJvbSAodXN1YWxseSBzdHJlYW1pbmcgdGhyZWFkKS4KKyAgICBib29s
IGlzRGF0YSA9IGZhbHNlOworCisgICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKKyAgICBjYXNl
IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW86CisgICAgY2Fz
ZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvOgorICAgIGNh
c2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OgorICAgICAg
ICBpc0RhdGEgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBpZiAoaXNEYXRhKSB7CisgICAgICAgIC8vIEZJWE1FOiBPbmx5
IGFkZCBhcHBzaW5rIG9uZSB0aW1lLiBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHNldmVyYWwg
dGltZXMuCisgICAgICAgIEdSZWZQdHI8R3N0T2JqZWN0PiBwYXJlbnQgPSBhZG9wdEdSZWYoZ3N0
X2VsZW1lbnRfZ2V0X3BhcmVudChtX2FwcHNpbmsuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCFwYXJl
bnQpCisgICAgICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBt
X2FwcHNpbmsuZ2V0KCkpOworCisjaWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEpCisg
ICAgICAgIGlmIChtX2RlY3J5cHRvcikgeworICAgICAgICAgICAgZ3N0X29iamVjdF9yZWYobV9k
ZWNyeXB0b3IuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3BpcGVs
aW5lLmdldCgpKSwgbV9kZWNyeXB0b3IuZ2V0KCkpOworCisgICAgICAgICAgICBHUmVmUHRyPEdz
dFBhZD4gZGVjcnlwdG9yU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChtX2RlY3J5cHRvci5nZXQoKSwgInNpbmsiKSk7CisgICAgICAgICAgICBnc3RfcGFkX2xp
bmsoZGVtdXhlclNyY1BhZCwgZGVjcnlwdG9yU2lua1BhZC5nZXQoKSk7CisKKyAgICAgICAgICAg
IEdSZWZQdHI8R3N0UGFkPiBkZWNyeXB0b3JTcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQobV9kZWNyeXB0b3IuZ2V0KCksICJzcmMiKSk7CisgICAgICAgICAgICBn
c3RfcGFkX2xpbmsoZGVjcnlwdG9yU3JjUGFkLmdldCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisK
KyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV9hcHBzaW5r
LmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQo
bV9kZWNyeXB0b3IuZ2V0KCkpOworICAgICAgICB9IGVsc2UgeworI2VuZGlmCisgICAgICAgICAg
ICBnc3RfcGFkX2xpbmsoZGVtdXhlclNyY1BhZCwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAg
ICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChtX2FwcHNpbmsuZ2V0KCkp
OworI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQorICAgICAgICB9CisjZW5kaWYK
KyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFU
RV9QQVVTRUQpOworICAgIH0KK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6Y29ubmVjdERlbXV4
ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKiBkZW11eGVyU3JjUGFkKQoreworICAgIEFTU0VSVChX
VEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBHU1RfREVCVUcoIkNvbm5lY3RpbmcgdG8gYXBwc2lu
ayIpOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYWRBZGRSZW1vdmVMb2NrKTsKKyAgICBH
UmVmUHRyPEdzdFBhZD4gc2lua1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0
YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKKworICAgIC8vIE9ubHkgb25lIHN0
cmVhbSBwZXIgZGVtdXhlciBpcyBzdXBwb3J0ZWQuCisgICAgQVNTRVJUKCFnc3RfcGFkX2lzX2xp
bmtlZChzaW5rU2lua1BhZC5nZXQoKSkpOworCisgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0g
YWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhHU1RfUEFEKGRlbXV4ZXJTcmNQYWQp
KSk7CisKKyAgICBpZiAoIWNhcHMgfHwgbV9hcHBlbmRTdGF0ZSA9PSBJbnZhbGlkIHx8ICFtX3Bs
YXllclByaXZhdGUpIHsKKyAgICAgICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90aWZ5T25l
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RF
QlVHCisgICAgeworICAgICAgICBHVW5pcXVlUHRyPGdjaGFyPiBzdHJjYXBzKGdzdF9jYXBzX3Rv
X3N0cmluZyhjYXBzLmdldCgpKSk7CisgICAgICAgIEdTVF9ERUJVRygiJXMiLCBzdHJjYXBzLmdl
dCgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChtX2luaXRpYWxEdXJhdGlvbiA+IG1fbWVk
aWFTb3VyY2VDbGllbnQtPmR1cmF0aW9uKCkpCisgICAgICAgIG1fbWVkaWFTb3VyY2VDbGllbnQt
PmR1cmF0aW9uQ2hhbmdlZChtX2luaXRpYWxEdXJhdGlvbik7CisKKyAgICBtX29sZFRyYWNrID0g
bV90cmFjazsKKworICAgIHBhcnNlRGVtdXhlclNyY1BhZENhcHMoZ3N0X2NhcHNfcmVmKGNhcHMu
Z2V0KCkpKTsKKworICAgIHN3aXRjaCAobV9zdHJlYW1UeXBlKSB7CisgICAgY2FzZSBXZWJDb3Jl
OjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOgorICAgICAgICBpZiAobV9w
bGF5ZXJQcml2YXRlKQorICAgICAgICAgICAgbV90cmFjayA9IFdlYkNvcmU6OkF1ZGlvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9wbGF5ZXJQcml2YXRlLT5waXBlbGluZSgpLCBpZCgp
LCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6
TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzoKKyAgICAgICAgaWYgKG1fcGxh
eWVyUHJpdmF0ZSkKKyAgICAgICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpWaWRlb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1fcGxheWVyUHJpdmF0ZS0+cGlwZWxpbmUoKSwgaWQoKSwg
c2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNvcmU6Ok1l
ZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDoKKyAgICAgICAgbV90cmFjayA9IFdl
YkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShpZCgpLCBzaW5r
U2lua1BhZC5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8v
IE5vIHVzZWZ1bCBkYXRhLCBidXQgbm90aWZ5IGFueXdheSB0byBjb21wbGV0ZSB0aGUgYXBwZW5k
IG9wZXJhdGlvbi4KKyAgICAgICAgR1NUX0RFQlVHKCJSZWNlaXZlZCBhbGwgcGVuZGluZyBzYW1w
bGVzIChubyBkYXRhKSIpOworICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPmRpZFJlY2Vp
dmVBbGxQZW5kaW5nU2FtcGxlcygpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX3Bh
ZEFkZFJlbW92ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGlu
ZTo6ZGlzY29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBwc2lua0Zyb21BbnlUaHJlYWQoKQorewor
ICAgIEdTVF9ERUJVRygiRGlzY29ubmVjdGluZyBhcHBzaW5rIik7CisKKyAgICAvLyBNdXN0IGJl
IGRvbmUgaW4gdGhlIHRocmVhZCB3ZSB3ZXJlIGNhbGxlZCBmcm9tICh1c3VhbGx5IHN0cmVhbWlu
ZyB0aHJlYWQpLgorI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQorICAgIGlmICht
X2RlY3J5cHRvcikgeworICAgICAgICBnc3RfZWxlbWVudF91bmxpbmsobV9kZWNyeXB0b3IuZ2V0
KCksIG1fYXBwc2luay5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X3VubGluayhtX2RlbXV4
LmdldCgpLCBtX2RlY3J5cHRvci5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0
ZShtX2RlY3J5cHRvci5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgICAgICBnc3RfYmluX3Jl
bW92ZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX2RlY3J5cHRvci5nZXQoKSk7CisgICAg
fSBlbHNlCisjZW5kaWYKKyAgICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rKG1fZGVtdXguZ2V0KCks
IG1fYXBwc2luay5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwc2lu
a0NhcHNDaGFuZ2VkKEdPYmplY3QqIGFwcHNpbmtQYWQsIEdQYXJhbVNwZWMqLCBBcHBlbmRQaXBl
bGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
c3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXBwc2luay1jYXBzLWNoYW5nZWQiKTsKKyAgICBHc3RN
ZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdTVF9PQkpFQ1Qo
YXBwc2lua1BhZCksIHN0cnVjdHVyZSk7CisgICAgZ3N0X2J1c19wb3N0KGFwcGVuZFBpcGVsaW5l
LT5idXMoKSwgbWVzc2FnZSk7CisgICAgR1NUX1RSQUNFKCJhcHBzaW5rLWNhcHMtY2hhbmdlZCBt
ZXNzYWdlIHBvc3RlZCB0byBidXMiKTsKK30KKworc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuIGFw
cGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcoR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBp
bmZvLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgQVNTRVJUKEdTVF9Q
QURfUFJPQkVfSU5GT19UWVBFKGluZm8pICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUik7CisK
KyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IEdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVIoaW5mbyk7
CisgICAgZ3NpemUgYnVmZmVyU2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmZmVyKTsKKwor
ICAgIEdTVF9UUkFDRSgiYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiBnb2luZyB0
aHJ1IiwgYnVmZmVyU2l6ZSk7CisKKyAgICBhcHBlbmRQaXBlbGluZS0+cmVwb3J0QXBwc3JjQXRM
ZWFzdEFCdWZmZXJMZWZ0KCk7CisKKyAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKK30KKwor
I2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBHc3RQYWRQcm9iZVJldHVybiBhcHBlbmRQaXBlbGlu
ZVBhZFByb2JlRGVidWdJbmZvcm1hdGlvbihHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8s
IHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uKiBwYWRQcm9iZUluZm9ybWF0aW9uKQoreworICAg
IEFTU0VSVChHU1RfUEFEX1BST0JFX0lORk9fVFlQRShpbmZvKSAmIEdTVF9QQURfUFJPQkVfVFlQ
RV9CVUZGRVIpOworICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gR1NUX1BBRF9QUk9CRV9JTkZPX0JV
RkZFUihpbmZvKTsKKyAgICBHU1RfVFJBQ0UoIiVzOiBidWZmZXIgb2Ygc2l6ZSAlIiBHX0dTSVpF
X0ZPUk1BVCAiIGdvaW5nIHRocnUiLCBwYWRQcm9iZUluZm9ybWF0aW9uLT5kZXNjcmlwdGlvbiwg
Z3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpKTsKKyAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9P
SzsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUFwcHNyY05lZWREYXRh
KEdzdEFwcFNyYyosIGd1aW50LCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7Cisg
ICAgYXBwZW5kUGlwZWxpbmUtPnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQoKTsKK30KKwor
c3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVEZW11eGVyUGFkQWRkZWQoR3N0RWxlbWVudCosIEdz
dFBhZCogZGVtdXhlclNyY1BhZCwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKQorewor
ICAgIGFwcGVuZFBpcGVsaW5lLT5jb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lua0Zyb21BbnlU
aHJlYWQoZGVtdXhlclNyY1BhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lRGVt
dXhlclBhZFJlbW92ZWQoR3N0RWxlbWVudCosIEdzdFBhZCosIEFwcGVuZFBpcGVsaW5lKiBhcHBl
bmRQaXBlbGluZSkKK3sKKyAgICBhcHBlbmRQaXBlbGluZS0+ZGlzY29ubmVjdERlbXV4ZXJTcmNQ
YWRGcm9tQXBwc2lua0Zyb21BbnlUaHJlYWQoKTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4g
YXBwZW5kUGlwZWxpbmVBcHBzaW5rTmV3U2FtcGxlKEdzdEVsZW1lbnQqIGFwcHNpbmssIEFwcGVu
ZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICByZXR1cm4gYXBwZW5kUGlwZWxpbmUt
PmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoYXBwc2luayk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVu
ZFBpcGVsaW5lQXBwc2lua0VPUyhHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBp
cGVsaW5lKQoreworICAgIGlmIChXVEY6OmlzTWFpblRocmVhZCgpKQorICAgICAgICBhcHBlbmRQ
aXBlbGluZS0+YXBwc2lua0VPUygpOworICAgIGVsc2UgeworICAgICAgICBHc3RTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhcHBzaW5rLWVvcyIpOworICAg
ICAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdT
VF9PQkpFQ1QoYXBwZW5kUGlwZWxpbmUtPmFwcHNpbmsoKSksIHN0cnVjdHVyZSk7CisgICAgICAg
IGdzdF9idXNfcG9zdChhcHBlbmRQaXBlbGluZS0+YnVzKCksIG1lc3NhZ2UpOworICAgICAgICBH
U1RfVFJBQ0UoImFwcHNpbmstZW9zIG1lc3NhZ2UgcG9zdGVkIHRvIGJ1cyIpOworICAgIH0KKwor
ICAgIEdTVF9ERUJVRygiJXMgbWFpbiB0aHJlYWQiLCAoV1RGOjppc01haW5UaHJlYWQoKSkgPyAi
SXMiIDogIk5vdCIpOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMDFkMzRhMGY5MDk5Njg3YjdjYWZlN2NjZTM3OWU3MmFjMDU2YjhhZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuaApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBT
LkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYg
RU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmgiCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSA8Z3N0L2dz
dC5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBBcHBlbmRQaXBlbGluZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBcHBl
bmRQaXBlbGluZT4geworcHVibGljOgorICAgIGVudW0gQXBwZW5kU3RhdGUgeyBJbnZhbGlkLCBO
b3RTdGFydGVkLCBPbmdvaW5nLCBLZXlOZWdvdGlhdGlvbiwgRGF0YVN0YXJ2ZSwgU2FtcGxpbmcs
IExhc3RTYW1wbGUsIEFib3J0aW5nIH07CisKKyAgICBBcHBlbmRQaXBlbGluZShQYXNzUmVmUHRy
PE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFPiwgUGFzc1JlZlB0cjxTb3VyY2VCdWZmZXJQ
cml2YXRlR1N0cmVhbWVyPiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKik7CisgICAg
dmlydHVhbCB+QXBwZW5kUGlwZWxpbmUoKTsKKworICAgIHZvaWQgaGFuZGxlRWxlbWVudE1lc3Nh
Z2UoR3N0TWVzc2FnZSopOworICAgIHZvaWQgaGFuZGxlQXBwbGljYXRpb25NZXNzYWdlKEdzdE1l
c3NhZ2UqKTsKKworICAgIGdpbnQgaWQoKTsKKyAgICBBcHBlbmRTdGF0ZSBhcHBlbmRTdGF0ZSgp
IHsgcmV0dXJuIG1fYXBwZW5kU3RhdGU7IH0KKyAgICB2b2lkIHNldEFwcGVuZFN0YXRlKEFwcGVu
ZFN0YXRlKTsKKworICAgIEdzdEZsb3dSZXR1cm4gaGFuZGxlTmV3QXBwc2lua1NhbXBsZShHc3RF
bGVtZW50Kik7CisgICAgR3N0Rmxvd1JldHVybiBwdXNoTmV3QnVmZmVyKEdzdEJ1ZmZlciopOwor
CisgICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIGNhcHMuCisgICAgdm9pZCBwYXJzZURlbXV4ZXJT
cmNQYWRDYXBzKEdzdENhcHMqKTsKKyAgICB2b2lkIGFwcHNpbmtDYXBzQ2hhbmdlZCgpOworICAg
IHZvaWQgYXBwc2lua05ld1NhbXBsZShHc3RTYW1wbGUqKTsKKyAgICB2b2lkIGFwcHNpbmtFT1Mo
KTsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoKTsKKyAgICBBdG9t
aWNTdHJpbmcgdHJhY2tJZCgpOworICAgIHZvaWQgYWJvcnQoKTsKKworICAgIHZvaWQgY2xlYXJQ
bGF5ZXJQcml2YXRlKCk7CisgICAgUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNF
PiBtZWRpYVNvdXJjZUNsaWVudCgpIHsgcmV0dXJuIG1fbWVkaWFTb3VyY2VDbGllbnQ7IH0KKyAg
ICBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0
ZSgpIHsgcmV0dXJuIG1fc291cmNlQnVmZmVyUHJpdmF0ZTsgfQorICAgIEdzdEJ1cyogYnVzKCkg
eyByZXR1cm4gbV9idXMuZ2V0KCk7IH0KKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIHsgcmV0
dXJuIG1fcGlwZWxpbmUuZ2V0KCk7IH0KKyAgICBHc3RFbGVtZW50KiBhcHBzcmMoKSB7IHJldHVy
biBtX2FwcHNyYy5nZXQoKTsgfQorICAgIEdzdEVsZW1lbnQqIGFwcHNpbmsoKSB7IHJldHVybiBt
X2FwcHNpbmsuZ2V0KCk7IH0KKyAgICBHc3RDYXBzKiBkZW11eGVyU3JjUGFkQ2FwcygpIHsgcmV0
dXJuIG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCk7IH0KKyAgICBHc3RDYXBzKiBhcHBzaW5rQ2Fw
cygpIHsgcmV0dXJuIG1fYXBwc2lua0NhcHMuZ2V0KCk7IH0KKyAgICBSZWZQdHI8V2ViQ29yZTo6
VHJhY2tQcml2YXRlQmFzZT4gdHJhY2soKSB7IHJldHVybiBtX3RyYWNrOyB9CisgICAgV2ViQ29y
ZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIHN0cmVhbVR5cGUoKSB7IHJldHVybiBt
X3N0cmVhbVR5cGU7IH0KKworICAgIHZvaWQgZGlzY29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBw
c2lua0Zyb21BbnlUaHJlYWQoKTsKKyAgICB2b2lkIGNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBz
aW5rRnJvbUFueVRocmVhZChHc3RQYWQqKTsKKyAgICB2b2lkIGNvbm5lY3REZW11eGVyU3JjUGFk
VG9BcHBzaW5rKEdzdFBhZCopOworCisgICAgdm9pZCByZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZl
ckxlZnQoKTsKKyAgICB2b2lkIHJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQoKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHJlc2V0UGlwZWxpbmUoKTsKKyAgICB2b2lkIGNoZWNrRW5kT2ZBcHBl
bmQoKTsKKyAgICB2b2lkIGhhbmRsZUFwcHNyY0F0TGVhc3RBQnVmZmVyTGVmdCgpOworICAgIHZv
aWQgaGFuZGxlQXBwc3JjTmVlZERhdGFSZWNlaXZlZCgpOworICAgIHZvaWQgcmVtb3ZlQXBwc3Jj
RGF0YUxlYXZpbmdQcm9iZSgpOworICAgIHZvaWQgc2V0QXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgp
OworCitwcml2YXRlOgorICAgIFJlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4g
bV9tZWRpYVNvdXJjZUNsaWVudDsKKyAgICBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lcj4gbV9zb3VyY2VCdWZmZXJQcml2YXRlOworICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lck1TRSogbV9wbGF5ZXJQcml2YXRlOworCisgICAgLy8gKG1fbWVkaWFUeXBlLCBtX2lkKSBp
cyB1bmlxdWUuCisgICAgZ2ludCBtX2lkOworCisgICAgTWVkaWFUaW1lIG1faW5pdGlhbER1cmF0
aW9uOworCisgICAgR3N0Rmxvd1JldHVybiBtX2Zsb3dSZXR1cm47CisKKyAgICBHUmVmUHRyPEdz
dEVsZW1lbnQ+IG1fcGlwZWxpbmU7CisgICAgR1JlZlB0cjxHc3RCdXM+IG1fYnVzOworICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gbV9hcHBzcmM7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2Rl
bXV4OworI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQorICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gbV9kZWNyeXB0b3I7CisjZW5kaWYKKyAgICAvLyBUaGUgZGVtdXhlciBoYXMgb25l
IHNyYyBzdHJlYW0gb25seSwgc28gb25seSBvbmUgYXBwc2luayBpcyBuZWVkZWQgYW5kIGxpbmtl
ZCB0byBpdC4KKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYXBwc2luazsKKworICAgIExvY2sg
bV9uZXdTYW1wbGVMb2NrOworICAgIENvbmRpdGlvbiBtX25ld1NhbXBsZUNvbmRpdGlvbjsKKyAg
ICBMb2NrIG1fcGFkQWRkUmVtb3ZlTG9jazsKKyAgICBDb25kaXRpb24gbV9wYWRBZGRSZW1vdmVD
b25kaXRpb247CisKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fYXBwc2lua0NhcHM7CisgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBtX2RlbXV4ZXJTcmNQYWRDYXBzOworICAgIEZsb2F0U2l6ZSBtX3ByZXNl
bnRhdGlvblNpemU7CisKKyAgICBib29sIG1fYXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0OworICAg
IGJvb2wgbV9hcHBzcmNOZWVkRGF0YVJlY2VpdmVkOworCisgICAgZ3Vsb25nIG1fYXBwc3JjRGF0
YUxlYXZpbmdQcm9iZUlkOworI2lmICFMT0dfRElTQUJMRUQKKyAgICBzdHJ1Y3QgUGFkUHJvYmVJ
bmZvcm1hdGlvbiBtX2RlbXV4ZXJEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9uOworICAg
IHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIG1fYXBwc2lua0RhdGFFbnRlcmluZ1BhZFByb2Jl
SW5mb3JtYXRpb247CisjZW5kaWYKKworICAgIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBzdGF0ZXMg
b2YgYXBwZW5kIHByb2Nlc3NpbmcsIHRvIGF2b2lkIHBlcmZvcm1pbmcgYWN0aW9ucyBpbmFwcHJv
cHJpYXRlIGZvciB0aGUgY3VycmVudCBzdGF0ZQorICAgIC8vIChlZzogcHJvY2Vzc2luZyBtb3Jl
IHNhbXBsZXMgd2hlbiB0aGUgbGFzdCBvbmUgaGFzIGJlZW4gZGV0ZWN0ZWQsIGV0Yy4pLiBTZWUg
c2V0QXBwZW5kU3RhdGUoKSBmb3IgdmFsaWQKKyAgICAvLyB0cmFuc2l0aW9ucy4KKyAgICBBcHBl
bmRTdGF0ZSBtX2FwcGVuZFN0YXRlOworCisgICAgLy8gQWJvcnRzIGNhbiBvbmx5IGJlIGNvbXBs
ZXRlZCB3aGVuIHRoZSBub3JtYWwgc2FtcGxlIGRldGVjdGlvbiBoYXMgZmluaXNoZWQuIE1lYW53
aGlsZSwgdGhlIHdpbGxpbmcgdG8gYWJvcnQgaXMKKyAgICAvLyBleHByZXNzZWQgaW4gdGhpcyBm
aWVsZC4KKyAgICBib29sIG1fYWJvcnRQZW5kaW5nOworCisgICAgV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VTdHJlYW1UeXBlR1N0cmVhbWVyIG1fc3RyZWFtVHlwZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
VHJhY2tQcml2YXRlQmFzZT4gbV9vbGRUcmFjazsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQ
cml2YXRlQmFzZT4gbV90cmFjazsKKworICAgIEdSZWZQdHI8R3N0QnVmZmVyPiBtX3BlbmRpbmdC
dWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgorCisjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292248</attachid>
            <date>2016-10-20 13:53:12 -0700</date>
            <delta_ts>2016-10-21 14:20:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162874-20161020204932.patch</filename>
            <type>text/plain</type>
            <size>49778</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjdiNTQ2NzM3NmE2MzI4
NjRhNTVjNDZmYWFmYWE5NWQ0OTUxZTg1Zi4uNjIzOGMxNjdiZTNlODhjMDU2MDY3YTI3N2RmYTZh
ZTE5MmNkMWMyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY4IEBACiAyMDE2LTEwLTAzICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIEFwcGVuZCBQaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRo
IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiAoZGF0YSBzdGFy
dmUKKyAgICAgICAgYW5kIGxhc3Qgc2FtcGxlIGRldGVjdGlvbiwgZGVidWcgZmVhdHVyZXMpIGFu
ZCBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPiAoRU1FCisgICAgICAgIHN1cHBv
cnQpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQ
aXBlbGluZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZHVtcEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lRWxlbWVudE1lc3NhZ2VDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRQaXBlbGluZUFwcGxpY2F0aW9uTWVzc2FnZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6fkFwcGVuZFBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpjbGVhclBsYXllclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVsZW1lbnRNZXNzYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBsaWNhdGlvbk1lc3NhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNyY05lZWREYXRh
UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNy
Y0F0TGVhc3RBQnVmZmVyTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
aWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnNldEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNoZWNrRW5kT2ZBcHBlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtFT1MpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnRyYWNrSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlc2V0UGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwZW5kUGlwZWxpbmU6OnNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGVuZFBpcGVsaW5lOjpwdXNoTmV3QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVu
ZFBpcGVsaW5lOjpyZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9B
cHBzaW5rRnJvbUFueVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1NhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjphcHBl
bmRQaXBlbGluZUFwcHNpbmtFT1MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBl
bmRQaXBlbGluZTo6YXBwZW5kU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxp
bmU6Om1lZGlhU291cmNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
Ojpzb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
OjpidXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzcmMpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlw
ZWxpbmU6OmRlbXV4ZXJTcmNQYWRDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVs
aW5lOjphcHBzaW5rQ2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6dHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnN0cmVhbVR5cGUpOgorCisy
MDE2LTEwLTAzICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+
CisKICAgICAgICAgW0dTdHJlYW1lcl0gRHJhaW4gcXVlcnkgc3VwcG9ydAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODcyCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlw
ZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9BcHBlbmRQaXBlbGluZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmZkN2VhYzI5NDQ5ZmFkYzI3ZTJiZmVh
NTc1MDY3NzYwOGQyOGUzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEs
MTA4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQXBwZW5kUGlwZWxpbmUuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQor
CisjaW5jbHVkZSAiQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHUmVm
UHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFEZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhU2FtcGxlLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgor
I2luY2x1ZGUgIk1lZGlhRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2
YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIK
KworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgorI2luY2x1ZGUgPGdzdC9hcHAvZ3N0
YXBwc3JjLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3Bi
dXRpbHMuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNsdWRlIDx3dGYvQ29u
ZGl0aW9uLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFMT0dfRElTQUJMRUQKK3N0
cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIHsKKyAgICBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlw
ZWxpbmU7CisgICAgY29uc3QgY2hhciogZGVzY3JpcHRpb247CisgICAgZ3Vsb25nIHByb2JlSWQ7
Cit9OworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyKiBkdW1wQXBwZW5kU3RhdGUoQXBwZW5k
UGlwZWxpbmU6OkFwcGVuZFN0YXRlIGFwcGVuZFN0YXRlKQoreworICAgIHN3aXRjaCAoYXBwZW5k
U3RhdGUpIHsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6SW52YWxpZDoK
KyAgICAgICAgcmV0dXJuICJJbnZhbGlkIjsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBl
bmRTdGF0ZTo6Tm90U3RhcnRlZDoKKyAgICAgICAgcmV0dXJuICJOb3RTdGFydGVkIjsKKyAgICBj
YXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6T25nb2luZzoKKyAgICAgICAgcmV0dXJu
ICJPbmdvaW5nIjsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6S2V5TmVn
b3RpYXRpb246CisgICAgICAgIHJldHVybiAiS2V5TmVnb3RpYXRpb24iOworICAgIGNhc2UgQXBw
ZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpEYXRhU3RhcnZlOgorICAgICAgICByZXR1cm4gIkRh
dGFTdGFydmUiOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpTYW1wbGlu
ZzoKKyAgICAgICAgcmV0dXJuICJTYW1wbGluZyI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6
QXBwZW5kU3RhdGU6Okxhc3RTYW1wbGU6CisgICAgICAgIHJldHVybiAiTGFzdFNhbXBsZSI7Cisg
ICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OkFib3J0aW5nOgorICAgICAgICBy
ZXR1cm4gIkFib3J0aW5nIjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gIih1bmtub3du
KSI7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUFwcHNyY05lZWREYXRh
KEdzdEFwcFNyYyosIGd1aW50LCBBcHBlbmRQaXBlbGluZSopOworc3RhdGljIHZvaWQgYXBwZW5k
UGlwZWxpbmVEZW11eGVyUGFkQWRkZWQoR3N0RWxlbWVudCosIEdzdFBhZCosIEFwcGVuZFBpcGVs
aW5lKik7CitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKEdzdEVs
ZW1lbnQqLCBHc3RQYWQqLCBBcHBlbmRQaXBlbGluZSopOworc3RhdGljIHZvaWQgYXBwZW5kUGlw
ZWxpbmVBcHBzaW5rQ2Fwc0NoYW5nZWQoR09iamVjdCosIEdQYXJhbVNwZWMqLCBBcHBlbmRQaXBl
bGluZSopOworc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuIGFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0
YUxlYXZpbmcoR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiwgQXBwZW5kUGlwZWxpbmUqKTsKKyNp
ZiAhTE9HX0RJU0FCTEVECitzdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxpbmVQ
YWRQcm9iZURlYnVnSW5mb3JtYXRpb24oR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiwgc3RydWN0
IFBhZFByb2JlSW5mb3JtYXRpb24qKTsKKyNlbmRpZgorc3RhdGljIEdzdEZsb3dSZXR1cm4gYXBw
ZW5kUGlwZWxpbmVBcHBzaW5rTmV3U2FtcGxlKEdzdEVsZW1lbnQqLCBBcHBlbmRQaXBlbGluZSop
Oworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzaW5rRU9TKEdzdEVsZW1lbnQqLCBBcHBl
bmRQaXBlbGluZSopOworCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUVsZW1lbnRNZXNzYWdl
Q2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgQXBwZW5kUGlwZWxpbmUqIGFw
cGVuZFBpcGVsaW5lKQoreworICAgIGFwcGVuZFBpcGVsaW5lLT5oYW5kbGVFbGVtZW50TWVzc2Fn
ZShtZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBsaWNhdGlvbk1l
c3NhZ2VDYWxsYmFjayhHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBBcHBlbmRQaXBlbGlu
ZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgYXBwZW5kUGlwZWxpbmUtPmhhbmRsZUFwcGxpY2F0
aW9uTWVzc2FnZShtZXNzYWdlKTsKK30KKworQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFBpcGVsaW5l
KFJlZjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4gbWVkaWFTb3VyY2VDbGllbnQsIFJl
ZjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiBzb3VyY2VCdWZmZXJQcml2YXRlLCBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UmIHBsYXllclByaXZhdGUpCisgICAgOiBtX21lZGlh
U291cmNlQ2xpZW50KG1lZGlhU291cmNlQ2xpZW50LmdldCgpKQorICAgICwgbV9zb3VyY2VCdWZm
ZXJQcml2YXRlKHNvdXJjZUJ1ZmZlclByaXZhdGUuZ2V0KCkpCisgICAgLCBtX3BsYXllclByaXZh
dGUoJnBsYXllclByaXZhdGUpCisgICAgLCBtX2lkKDApCisgICAgLCBtX2FwcHNyY0F0TGVhc3RB
QnVmZmVyTGVmdChmYWxzZSkKKyAgICAsIG1fYXBwc3JjTmVlZERhdGFSZWNlaXZlZChmYWxzZSkK
KyAgICAsIG1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkKDApCisgICAgLCBtX2FwcGVuZFN0YXRl
KEFwcGVuZFN0YXRlOjpOb3RTdGFydGVkKQorICAgICwgbV9hYm9ydFBlbmRpbmcoZmFsc2UpCisg
ICAgLCBtX3N0cmVhbVR5cGUoVW5rbm93bikKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJl
YWQoKSk7CisKKyAgICBHU1RfVFJBQ0UoIkNyZWF0aW5nIEFwcGVuZFBpcGVsaW5lICglcCkiLCB0
aGlzKTsKKworICAgIC8vIEZJWE1FOiBnaXZlIGEgbmFtZSB0byB0aGUgcGlwZWxpbmUsIG1heWJl
IHJlbGF0ZWQgd2l0aCB0aGUgdHJhY2sgaXQncyBtYW5hZ2luZy4KKyAgICAvLyBUaGUgdHJhY2sg
bmFtZSBpcyBzdGlsbCB1bmtub3duIGF0IHRoaXMgdGltZSwgdGhvdWdoLgorICAgIG1fcGlwZWxp
bmUgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX25ldyhudWxscHRyKSk7CisKKyAgICBtX2J1cyA9
IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5n
ZXQoKSkpKTsKKyAgICBnc3RfYnVzX2FkZF9zaWduYWxfd2F0Y2gobV9idXMuZ2V0KCkpOworICAg
IGdzdF9idXNfZW5hYmxlX3N5bmNfbWVzc2FnZV9lbWlzc2lvbihtX2J1cy5nZXQoKSk7CisKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fYnVzLmdldCgpLCAic3luYy1tZXNzYWdlOjplbGVtZW50Iiwg
R19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZUVsZW1lbnRNZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KG1fYnVzLmdldCgpLCAibWVzc2FnZTo6YXBwbGljYXRpb24i
LCBHX0NBTExCQUNLKGFwcGVuZFBpcGVsaW5lQXBwbGljYXRpb25NZXNzYWdlQ2FsbGJhY2spLCB0
aGlzKTsKKworICAgIC8vIFdlIGFzc2lnbiB0aGUgY3JlYXRlZCBpbnN0YW5jZXMgaGVyZSBpbnN0
ZWFkIG9mIGFkb3B0UmVmKCkgYmVjYXVzZSBnc3RfYmluX2FkZF9tYW55KCkKKyAgICAvLyBiZWxv
dyB3aWxsIGFscmVhZHkgdGFrZSB0aGUgaW5pdGlhbCByZWZlcmVuY2UgYW5kIHdlIG5lZWQgYW4g
YWRkaXRpb25hbCBvbmUgZm9yIHVzLgorICAgIG1fYXBwc3JjID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJhcHBzcmMiLCBudWxscHRyKTsKKyAgICBtX2RlbXV4ID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJxdGRlbXV4IiwgbnVsbHB0cik7CisgICAgbV9hcHBzaW5rID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJhcHBzaW5rIiwgbnVsbHB0cik7CisKKyAgICBnX29iamVjdF9zZXQo
R19PQkpFQ1QobV9kZW11eC5nZXQoKSksICJhbHdheXMtaG9ub3ItdGZkdCIsIFRSVUUsIG51bGxw
dHIpOworICAgIGdzdF9hcHBfc2lua19zZXRfZW1pdF9zaWduYWxzKEdTVF9BUFBfU0lOSyhtX2Fw
cHNpbmsuZ2V0KCkpLCBUUlVFKTsKKyAgICBnc3RfYmFzZV9zaW5rX3NldF9zeW5jKEdTVF9CQVNF
X1NJTksobV9hcHBzaW5rLmdldCgpKSwgRkFMU0UpOworCisgICAgR1JlZlB0cjxHc3RQYWQ+IGFw
cHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5r
LmdldCgpLCAic2luayIpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGFwcHNpbmtQYWQuZ2V0KCks
ICJub3RpZnk6OmNhcHMiLCBHX0NBTExCQUNLKGFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFu
Z2VkKSwgdGhpcyk7CisKKyAgICBzZXRBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgR1JlZlB0cjxHc3RQYWQ+IGRlbXV4ZXJQYWQgPSBhZG9wdEdSZWYo
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9kZW11eC5nZXQoKSwgInNpbmsiKSk7CisgICAg
bV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5hcHBlbmRQaXBlbGluZSA9
IHRoaXM7CisgICAgbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5kZXNj
cmlwdGlvbiA9ICJkZW11eGVyIGRhdGEgZW50ZXJpbmciOworICAgIG1fZGVtdXhlckRhdGFFbnRl
cmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2JlKGRlbXV4
ZXJQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8
R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRp
b24pLCAmbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbiwgbnVsbHB0cik7
CisgICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5hcHBlbmRQaXBl
bGluZSA9IHRoaXM7CisgICAgbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlv
bi5kZXNjcmlwdGlvbiA9ICJhcHBzaW5rIGRhdGEgZW50ZXJpbmciOworICAgIG1fYXBwc2lua0Rh
dGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2Jl
KGFwcHNpbmtQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0
X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5m
b3JtYXRpb24pLCAmbV9hcHBzaW5rRGF0YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbiwgbnVs
bHB0cik7CisjZW5kaWYKKworICAgIC8vIFRoZXNlIHNpZ25hbHMgd29uJ3QgYmUgY29ubmVjdGVk
IG91dHNpZGUgb2YgdGhlIGxpZmV0aW1lIG9mICJ0aGlzIi4KKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1fYXBwc3JjLmdldCgpLCAibmVlZC1kYXRhIiwgR19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZUFw
cHNyY05lZWREYXRhKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2RlbXV4LmdldCgp
LCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZCks
IHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kZW11eC5nZXQoKSwgInBhZC1yZW1vdmVk
IiwgR19DQUxMQkFDSyhhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKSwgdGhpcyk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdChtX2FwcHNpbmsuZ2V0KCksICJuZXctc2FtcGxlIiwgR19DQUxM
QkFDSyhhcHBlbmRQaXBlbGluZUFwcHNpbmtOZXdTYW1wbGUpLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0KG1fYXBwc2luay5nZXQoKSwgImVvcyIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxp
bmVBcHBzaW5rRU9TKSwgdGhpcyk7CisKKyAgICAvLyBBZGRfbWFueSB3aWxsIHRha2Ugb3duZXJz
aGlwIG9mIGEgcmVmZXJlbmNlLiBUaGF0J3Mgd2h5IHdlIHVzZWQgYW4gYXNzaWdubWVudCBiZWZv
cmUuCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX2Fw
cHNyYy5nZXQoKSwgbV9kZW11eC5nZXQoKSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfbGlu
ayhtX2FwcHNyYy5nZXQoKSwgbV9kZW11eC5nZXQoKSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRf
c3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKK307CisKK0FwcGVuZFBp
cGVsaW5lOjp+QXBwZW5kUGlwZWxpbmUoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9uZXdTYW1wbGVMb2Nr
KTsKKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoQXBwZW5kU3RhdGU6OkludmFsaWQpOworICAgICAg
ICBtX25ld1NhbXBsZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICB9CisKKyAgICB7CisgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFkQWRkUmVtb3ZlTG9jayk7CisgICAgICAgIG1fcGxh
eWVyUHJpdmF0ZSA9IG51bGxwdHI7CisgICAgICAgIG1fcGFkQWRkUmVtb3ZlQ29uZGl0aW9uLm5v
dGlmeU9uZSgpOworICAgIH0KKworICAgIEdTVF9UUkFDRSgiRGVzdHJveWluZyBBcHBlbmRQaXBl
bGluZSAoJXApIiwgdGhpcyk7CisKKyAgICAvLyBGSVhNRTogTWF5YmUgbm90aWZ5IGFwcGVuZENv
bXBsZXRlIGhlcmU/CisKKyAgICBpZiAobV9waXBlbGluZSkgeworICAgICAgICBBU1NFUlQobV9i
dXMpOworICAgICAgICBnc3RfYnVzX3JlbW92ZV9zaWduYWxfd2F0Y2gobV9idXMuZ2V0KCkpOwor
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRF
X05VTEwpOworICAgICAgICBtX3BpcGVsaW5lID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAo
bV9hcHBzcmMpIHsKKyAgICAgICAgcmVtb3ZlQXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgpOworICAg
ICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9hcHBzcmMuZ2V0KCks
IHRoaXMpOworICAgICAgICBtX2FwcHNyYyA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1f
ZGVtdXgpIHsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBkZW11
eGVyUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fZGVtdXguZ2V0
KCksICJzaW5rIikpOworICAgICAgICBnc3RfcGFkX3JlbW92ZV9wcm9iZShkZW11eGVyUGFkLmdl
dCgpLCBtX2RlbXV4ZXJEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9uLnByb2JlSWQpOwor
I2VuZGlmCisKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1f
ZGVtdXguZ2V0KCksIHRoaXMpOworICAgICAgICBtX2RlbXV4ID0gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBpZiAobV9hcHBzaW5rKSB7CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzaW5rUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwg
InNpbmsiKSk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShh
cHBzaW5rUGFkLmdldCgpLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9kYXRhKG1fYXBwc2luay5nZXQoKSwgdGhpcyk7CisKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgICAgIGdzdF9wYWRfcmVtb3ZlX3Byb2JlKGFwcHNpbmtQYWQuZ2V0KCksIG1fYXBwc2lu
a0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24ucHJvYmVJZCk7CisjZW5kaWYKKworICAg
ICAgICBtX2FwcHNpbmsgPSBudWxscHRyOworICAgIH0KKworICAgIG1fYXBwc2lua0NhcHMgPSBu
dWxscHRyOworICAgIG1fZGVtdXhlclNyY1BhZENhcHMgPSBudWxscHRyOworfTsKKwordm9pZCBB
cHBlbmRQaXBlbGluZTo6Y2xlYXJQbGF5ZXJQcml2YXRlKCkKK3sKKyAgICBBU1NFUlQoV1RGOjpp
c01haW5UaHJlYWQoKSk7CisgICAgR1NUX0RFQlVHKCJjbGVhbmluZyBwcml2YXRlIHBsYXllciIp
OworCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX25ld1NhbXBsZUxvY2spOwor
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBBcHBlbmRQaXBlbGluZSB3b24ndCBwcm9jZXNzIG1v
cmUgZGF0YSBmcm9tIG5vdyBvbiBhbmQKKyAgICAgICAgLy8gaW5zdHJ1Y3QgaGFuZGxlTmV3U2Ft
cGxlIHRvIGFib3J0IGl0c2VsZiBmcm9tIG5vdyBvbiBhcyB3ZWxsLgorICAgICAgICBzZXRBcHBl
bmRTdGF0ZShBcHBlbmRTdGF0ZTo6SW52YWxpZCk7CisKKyAgICAgICAgLy8gQXdha2UgYW55IHBl
bmRpbmcgaGFuZGxlTmV3U2FtcGxlIG9wZXJhdGlvbiBpbiB0aGUgc3RyZWFtaW5nIHRocmVhZC4K
KyAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgfQorCisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhZEFkZFJlbW92ZUxvY2spOworICAgICAg
ICBtX3BsYXllclByaXZhdGUgPSBudWxscHRyOworICAgICAgICBtX3BhZEFkZFJlbW92ZUNvbmRp
dGlvbi5ub3RpZnlPbmUoKTsKKyAgICB9CisKKyAgICAvLyBBbmQgbm93IHRoYXQgbm8gaGFuZGxl
TmV3U2FtcGxlIG9wZXJhdGlvbnMgd2lsbCByZW1haW4gc3RhbGxlZCB3YWl0aW5nCisgICAgLy8g
Zm9yIHRoZSBtYWluIHRocmVhZCwgc3RvcCB0aGUgcGlwZWxpbmUuCisgICAgaWYgKG1fcGlwZWxp
bmUpCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1Rf
U1RBVEVfTlVMTCk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVsZW1lbnRNZXNz
YWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFk
KCkpOworCisgICAgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9n
ZXRfc3RydWN0dXJlKG1lc3NhZ2UpOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0
cnVjdHVyZSwgImRybS1rZXktbmVlZGVkIikpCisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVu
ZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6S2V5TmVnb3RpYXRpb24pOworCisgICAgLy8gTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSB3aWxsIHRha2UgY2FyZSBvZiBzZXR0aW5nIHVwIGVu
Y3J5cHRpb24uCisgICAgaWYgKG1fcGxheWVyUHJpdmF0ZSkKKyAgICAgICAgbV9wbGF5ZXJQcml2
YXRlLT5oYW5kbGVTeW5jTWVzc2FnZShtZXNzYWdlKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGlu
ZTo6aGFuZGxlQXBwbGljYXRpb25NZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAg
QVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgY29uc3QgR3N0U3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlKG1lc3NhZ2UpOworCisgICAgaWYg
KGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiYXBwc3JjLW5lZWQtZGF0YSIpKSB7
CisgICAgICAgIGhhbmRsZUFwcHNyY05lZWREYXRhUmVjZWl2ZWQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFw
cHNyYy1idWZmZXItbGVmdCIpKSB7CisgICAgICAgIGhhbmRsZUFwcHNyY0F0TGVhc3RBQnVmZmVy
TGVmdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVf
aGFzX25hbWUoc3RydWN0dXJlLCAiZGVtdXhlci1jb25uZWN0LXRvLWFwcHNpbmsiKSkgeworICAg
ICAgICBHUmVmUHRyPEdzdFBhZD4gZGVtdXhlclNyY1BhZDsKKyAgICAgICAgZ3N0X3N0cnVjdHVy
ZV9nZXQoc3RydWN0dXJlLCAiZGVtdXhlci1zcmMtcGFkIiwgR19UWVBFX09CSkVDVCwgJmRlbXV4
ZXJTcmNQYWQub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICBBU1NFUlQoZGVtdXhlclNyY1Bh
ZCk7CisgICAgICAgIGNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKGRlbXV4ZXJTcmNQYWQu
Z2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVf
aGFzX25hbWUoc3RydWN0dXJlLCAiYXBwc2luay1jYXBzLWNoYW5nZWQiKSkgeworICAgICAgICBh
cHBzaW5rQ2Fwc0NoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChn
c3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcHNpbmstbmV3LXNhbXBsZSIpKSB7
CisgICAgICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBuZXdTYW1wbGU7CisgICAgICAgIGdzdF9zdHJ1
Y3R1cmVfZ2V0KHN0cnVjdHVyZSwgIm5ldy1zYW1wbGUiLCBHU1RfVFlQRV9TQU1QTEUsICZuZXdT
YW1wbGUub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgICAgIGFwcHNpbmtOZXdTYW1wbGUobmV3
U2FtcGxlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnc3Rfc3Ry
dWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcHNpbmstZW9zIikpIHsKKyAgICAgICAgYXBw
c2lua0VPUygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNyY05lZWREYXRhUmVj
ZWl2ZWQoKQoreworICAgIGlmICghbV9hcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQpIHsKKyAgICAg
ICAgR1NUX1RSQUNFKCJkaXNjYXJkaW5nIHVudGlsIGF0IGxlYXN0IGEgYnVmZmVyIGxlYXZlcyBh
cHBzcmMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChtX2FwcGVuZFN0
YXRlID09IEFwcGVuZFN0YXRlOjpPbmdvaW5nIHx8IG1fYXBwZW5kU3RhdGUgPT0gQXBwZW5kU3Rh
dGU6OlNhbXBsaW5nKTsKKyAgICBBU1NFUlQoIW1fYXBwc3JjTmVlZERhdGFSZWNlaXZlZCk7CisK
KyAgICBHU1RfVFJBQ0UoInJlY2VpdmVkIG5lZWQtZGF0YSBmcm9tIGFwcHNyYyIpOworCisgICAg
bV9hcHBzcmNOZWVkRGF0YVJlY2VpdmVkID0gdHJ1ZTsKKyAgICBjaGVja0VuZE9mQXBwZW5kKCk7
Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNyY0F0TGVhc3RBQnVmZmVyTGVm
dCgpCit7CisgICAgbV9hcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQgPSB0cnVlOworICAgIEdTVF9U
UkFDRSgicmVjZWl2ZWQgYnVmZmVyLWxlZnQgZnJvbSBhcHBzcmMiKTsKKyNpZiBMT0dfRElTQUJM
RUQKKyAgICByZW1vdmVBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisjZW5kaWYKK30KKworZ2lu
dCBBcHBlbmRQaXBlbGluZTo6aWQoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgp
KTsKKworCisgICAgaWYgKG1faWQpCisgICAgICAgIHJldHVybiBtX2lkOworCisgICAgc3RhdGlj
IGdpbnQgc190b3RhbEF1ZGlvID0gMDsKKyAgICBzdGF0aWMgZ2ludCBzX3RvdGFsVmlkZW8gPSAw
OworICAgIHN0YXRpYyBnaW50IHNfdG90YWxUZXh0ID0gMDsKKworICAgIHN3aXRjaCAobV9zdHJl
YW1UeXBlKSB7CisgICAgY2FzZSBBdWRpbzoKKyAgICAgICAgbV9pZCA9ICsrc190b3RhbEF1ZGlv
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZpZGVvOgorICAgICAgICBtX2lkID0gKytzX3Rv
dGFsVmlkZW87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGV4dDoKKyAgICAgICAgbV9pZCA9
ICsrc190b3RhbFRleHQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5rbm93bjoKKyAgICBj
YXNlIEludmFsaWQ6CisgICAgICAgIEdTVF9FUlJPUigiVHJ5aW5nIHRvIGdldCBpZCBmb3IgYSBw
aXBlbGluZSBvZiBVbmtub3duL0ludmFsaWQgdHlwZSIpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgR1NUX0RFQlVHKCJzdHJlYW1U
eXBlPSVkLCBpZD0lZCIsIHN0YXRpY19jYXN0PGludD4obV9zdHJlYW1UeXBlKSwgbV9pZCk7CisK
KyAgICByZXR1cm4gbV9pZDsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6c2V0QXBwZW5kU3Rh
dGUoQXBwZW5kU3RhdGUgbmV3QXBwZW5kU3RhdGUpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWlu
VGhyZWFkKCkpOworICAgIC8vIFZhbGlkIHRyYW5zaXRpb25zOgorICAgIC8vIE5vdFN0YXJ0ZWQt
LT5PbmdvaW5nLS0+RGF0YVN0YXJ2ZS0tPk5vdFN0YXJ0ZWQKKyAgICAvLyAgICAgICAgICAgfCAg
ICAgICAgIHwgICAgICAgICAgICBgLT5BYm9ydGluZy0tPk5vdFN0YXJ0ZWQKKyAgICAvLyAgICAg
ICAgICAgfCAgICAgICAgIGAtPlNhbXBsaW5nLcK3wrfCty0+U2FtcGxpbmctLT5MYXN0U2FtcGxl
LS0+Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBgLT5BYm9ydGluZy0tPk5vdFN0YXJ0ZWQKKyAgICAvLyAg
ICAgICAgICAgfCAgICAgICAgIGAtPktleU5lZ290aWF0aW9uLS0+T25nb2luZy0tPlsuLi5dCisg
ICAgLy8gICAgICAgICAgIGAtPkFib3J0aW5nLS0+Tm90U3RhcnRlZAorICAgIEFwcGVuZFN0YXRl
IG9sZEFwcGVuZFN0YXRlID0gbV9hcHBlbmRTdGF0ZTsKKyAgICBBcHBlbmRTdGF0ZSBuZXh0QXBw
ZW5kU3RhdGUgPSBBcHBlbmRTdGF0ZTo6SW52YWxpZDsKKworICAgIGlmIChvbGRBcHBlbmRTdGF0
ZSAhPSBuZXdBcHBlbmRTdGF0ZSkKKyAgICAgICAgR1NUX1RSQUNFKCIlcyAtLT4gJXMiLCBkdW1w
QXBwZW5kU3RhdGUob2xkQXBwZW5kU3RhdGUpLCBkdW1wQXBwZW5kU3RhdGUobmV3QXBwZW5kU3Rh
dGUpKTsKKworICAgIGJvb2wgb2sgPSBmYWxzZTsKKworICAgIHN3aXRjaCAob2xkQXBwZW5kU3Rh
dGUpIHsKKyAgICBjYXNlIEFwcGVuZFN0YXRlOjpOb3RTdGFydGVkOgorICAgICAgICBzd2l0Y2gg
KG5ld0FwcGVuZFN0YXRlKSB7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6Ok9uZ29pbmc6Cisg
ICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUo
bV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ6CisgICAgICAgICAgICBvayA9
IHRydWU7CisgICAgICAgICAgICBpZiAobV9wZW5kaW5nQnVmZmVyKSB7CisgICAgICAgICAgICAg
ICAgR1NUX1RSQUNFKCJwdXNoaW5nIHBlbmRpbmcgYnVmZmVyICVwIiwgbV9wZW5kaW5nQnVmZmVy
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBnc3RfYXBwX3NyY19wdXNoX2J1ZmZlcihHU1RfQVBQ
X1NSQyhhcHBzcmMoKSksIG1fcGVuZGluZ0J1ZmZlci5sZWFrUmVmKCkpOworICAgICAgICAgICAg
ICAgIG5leHRBcHBlbmRTdGF0ZSA9IEFwcGVuZFN0YXRlOjpPbmdvaW5nOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6OkFib3J0aW5n
OgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0g
QXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBcHBlbmRTdGF0ZTo6SW52YWxpZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcHBlbmRTdGF0ZTo6S2V5TmVnb3RpYXRpb246
CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAgICAgICAgY2FzZSBBcHBlbmRT
dGF0ZTo6T25nb2luZzoKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6SW52YWxpZDoKKyAgICAg
ICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
cHBlbmRTdGF0ZTo6T25nb2luZzoKKyAgICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkgewor
ICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpLZXlOZWdvdGlhdGlvbjoKKyAgICAgICAgY2FzZSBB
cHBlbmRTdGF0ZTo6U2FtcGxpbmc6CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6OkludmFsaWQ6
CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBcHBlbmRTdGF0ZTo6RGF0YVN0YXJ2ZToKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAg
ICAgICAgIEdTVF9ERUJVRygicmVjZWl2ZWQgYWxsIHBlbmRpbmcgc2FtcGxlcyIpOworICAgICAg
ICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLT5kaWRSZWNlaXZlQWxsUGVuZGluZ1NhbXBsZXMo
KTsKKyAgICAgICAgICAgIGlmIChtX2Fib3J0UGVuZGluZykKKyAgICAgICAgICAgICAgICBuZXh0
QXBwZW5kU3RhdGUgPSBBcHBlbmRTdGF0ZTo6QWJvcnRpbmc7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gQXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXBwZW5kU3RhdGU6OkRhdGFT
dGFydmU6CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAgICAgICAgY2FzZSBB
cHBlbmRTdGF0ZTo6Tm90U3RhcnRlZDoKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6SW52YWxp
ZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFwcGVuZFN0YXRlOjpBYm9ydGluZzoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAg
ICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IEFwcGVuZFN0YXRlOjpOb3RTdGFydGVkOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFwcGVuZFN0YXRlOjpTYW1wbGluZzoKKyAg
ICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIEFwcGVuZFN0YXRl
OjpTYW1wbGluZzoKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6SW52YWxpZDoKKyAgICAgICAg
ICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFwcGVuZFN0
YXRlOjpMYXN0U2FtcGxlOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgR1NU
X0RFQlVHKCJyZWNlaXZlZCBhbGwgcGVuZGluZyBzYW1wbGVzIik7CisgICAgICAgICAgICBtX3Nv
dXJjZUJ1ZmZlclByaXZhdGUtPmRpZFJlY2VpdmVBbGxQZW5kaW5nU2FtcGxlcygpOworICAgICAg
ICAgICAgaWYgKG1fYWJvcnRQZW5kaW5nKQorICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0
ZSA9IEFwcGVuZFN0YXRlOjpBYm9ydGluZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBuZXh0QXBwZW5kU3RhdGUgPSBBcHBlbmRTdGF0ZTo6Tm90U3RhcnRlZDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcHBlbmRTdGF0ZTo6TGFzdFNhbXBsZToKKyAg
ICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIEFwcGVuZFN0YXRl
OjpOb3RTdGFydGVkOgorICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpJbnZhbGlkOgorICAgICAg
ICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXBwZW5k
U3RhdGU6OkFib3J0aW5nOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgbmV4
dEFwcGVuZFN0YXRlID0gQXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQXBwZW5kU3RhdGU6OkFib3J0aW5nOgorICAgICAgICBzd2l0
Y2ggKG5ld0FwcGVuZFN0YXRlKSB7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6Ok5vdFN0YXJ0
ZWQ6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICByZXNldFBpcGVsaW5lKCk7
CisgICAgICAgICAgICBtX2Fib3J0UGVuZGluZyA9IGZhbHNlOworICAgICAgICAgICAgbmV4dEFw
cGVuZFN0YXRlID0gQXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6SW52YWxpZDoKKyAgICAgICAgICAgIG9rID0gdHJ1
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcHBlbmRTdGF0ZTo6SW52
YWxpZDoKKyAgICAgICAgb2sgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAob2spCisgICAgICAgIG1fYXBwZW5kU3RhdGUgPSBuZXdBcHBlbmRTdGF0ZTsKKyAgICBlbHNl
CisgICAgICAgIEdTVF9FUlJPUigiSW52YWxpZCBhcHBlbmQgc3RhdGUgdHJhbnNpdGlvbiAlcyAt
LT4gJXMiLCBkdW1wQXBwZW5kU3RhdGUob2xkQXBwZW5kU3RhdGUpLCBkdW1wQXBwZW5kU3RhdGUo
bmV3QXBwZW5kU3RhdGUpKTsKKworICAgIEFTU0VSVChvayk7CisKKyAgICBpZiAobmV4dEFwcGVu
ZFN0YXRlICE9IEFwcGVuZFN0YXRlOjpJbnZhbGlkKQorICAgICAgICBzZXRBcHBlbmRTdGF0ZShu
ZXh0QXBwZW5kU3RhdGUpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJT
cmNQYWRDYXBzKEdzdENhcHMqIGRlbXV4ZXJTcmNQYWRDYXBzKQoreworICAgIEFTU0VSVChXVEY6
OmlzTWFpblRocmVhZCgpKTsKKworICAgIG1fZGVtdXhlclNyY1BhZENhcHMgPSBhZG9wdEdSZWYo
ZGVtdXhlclNyY1BhZENhcHMpOworICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291
cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VW5rbm93bjsKKworICAgIEdzdFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgp
LCAwKTsKKyAgICBib29sIHNpemVDb25maWd1cmVkID0gZmFsc2U7CisKKyNpZiBHU1RfQ0hFQ0tf
VkVSU0lPTigxLCA1LCAzKSAmJiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkKKyAgICBp
ZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LWNlbmMi
KSkgeworICAgICAgICAvLyBBbnkgcHJldmlvdXMgZGVjcnlwdG9yIHNob3VsZCBoYXZlIGJlZW4g
cmVtb3ZlZCBmcm9tIHRoZSBwaXBlbGluZSBieSBkaXNjb25uZWN0RnJvbUFwcFNpbmtGcm9tU3Ry
ZWFtaW5nVGhyZWFkKCkKKyAgICAgICAgQVNTRVJUKCFtX2RlY3J5cHRvcik7CisKKyAgICAgICAg
bV9kZWNyeXB0b3IgPSBhZG9wdEdSZWYoV2ViQ29yZTo6Y3JlYXRlR3N0RGVjcnlwdG9yKGdzdF9z
dHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJwcm90ZWN0aW9uLXN5c3RlbSIpKSk7Cisg
ICAgICAgIGlmICghbV9kZWNyeXB0b3IpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUigiZGVjcnlw
dG9yIG5vdCBmb3VuZCBmb3IgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIG1fZGVtdXhlclNyY1Bh
ZENhcHMuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgZ2NoYXIqIG9yaWdpbmFsTWVkaWFUeXBlID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5n
KHN0cnVjdHVyZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKTsKKworICAgICAgICBpZiAoZ19zdHJf
aGFzX3ByZWZpeChvcmlnaW5hbE1lZGlhVHlwZSwgInZpZGVvLyIpKSB7CisgICAgICAgICAgICBp
bnQgd2lkdGggPSAwOworICAgICAgICAgICAgaW50IGhlaWdodCA9IDA7CisgICAgICAgICAgICBm
bG9hdCBmaW5hbEhlaWdodCA9IDA7CisKKyAgICAgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dl
dF9pbnQoc3RydWN0dXJlLCAid2lkdGgiLCAmd2lkdGgpICYmIGdzdF9zdHJ1Y3R1cmVfZ2V0X2lu
dChzdHJ1Y3R1cmUsICJoZWlnaHQiLCAmaGVpZ2h0KSkgeworICAgICAgICAgICAgICAgIGludCBy
YXRpb051bWVyYXRvciA9IDE7CisgICAgICAgICAgICAgICAgaW50IHJhdGlvRGVub21pbmF0b3Ig
PSAxOworCisgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXRfZnJhY3Rpb24oc3RydWN0
dXJlLCAicGl4ZWwtYXNwZWN0LXJhdGlvIiwgJnJhdGlvTnVtZXJhdG9yLCAmcmF0aW9EZW5vbWlu
YXRvcik7CisgICAgICAgICAgICAgICAgZmluYWxIZWlnaHQgPSBoZWlnaHQgKiAoKGZsb2F0KSBy
YXRpb0Rlbm9taW5hdG9yIC8gKGZsb2F0KSByYXRpb051bWVyYXRvcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSh3
aWR0aCwgZmluYWxIZWlnaHQpOworICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6
TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOwor
ICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgob3JpZ2luYWxNZWRpYVR5cGUsICJhdWRp
by8iKSkKKyAgICAgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJj
ZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOworICAgICAgICAgICAgZWxzZSBpZiAoZ19zdHJf
aGFzX3ByZWZpeChvcmlnaW5hbE1lZGlhVHlwZSwgInRleHQvIikpCisgICAgICAgICAgICAgICAg
bV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpU
ZXh0OworICAgICAgICB9CisgICAgICAgIHNpemVDb25maWd1cmVkID0gdHJ1ZTsKKyAgICB9Cisj
ZW5kaWYKKworICAgIGlmICghc2l6ZUNvbmZpZ3VyZWQpIHsKKyAgICAgICAgY29uc3QgY2hhciog
c3RydWN0dXJlTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKKyAgICAg
ICAgR3N0VmlkZW9JbmZvIGluZm87CisKKyAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgoc3Ry
dWN0dXJlTmFtZSwgInZpZGVvLyIpICYmIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmaW5mbywg
ZGVtdXhlclNyY1BhZENhcHMpKSB7CisgICAgICAgICAgICBmbG9hdCB3aWR0aCwgaGVpZ2h0Owor
CisgICAgICAgICAgICB3aWR0aCA9IGluZm8ud2lkdGg7CisgICAgICAgICAgICBoZWlnaHQgPSBp
bmZvLmhlaWdodCAqICgoZmxvYXQpIGluZm8ucGFyX2QgLyAoZmxvYXQpIGluZm8ucGFyX24pOwor
CisgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUgPSBXZWJDb3JlOjpGbG9hdFNpemUod2lk
dGgsIGhlaWdodCk7CisgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNv
dXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgbV9wcmVzZW50YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKCk7CisgICAgICAg
ICAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeChzdHJ1Y3R1cmVOYW1lLCAiYXVkaW8vIikpCisgICAg
ICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBl
R1N0cmVhbWVyOjpBdWRpbzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGdfc3RyX2hhc19wcmVmaXgo
c3RydWN0dXJlTmFtZSwgInRleHQvIikpCisgICAgICAgICAgICAgICAgbV9zdHJlYW1UeXBlID0g
V2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0OworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQoKQor
eworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV9hcHBzaW5r
KQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7Cisg
ICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRf
Y2FwcyhwYWQuZ2V0KCkpKTsKKworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlJ3JlIHJpZ2h0IGFmdGVyIGEgbmV3IHRyYWNrIGhhcyBh
cHBlYXJlZC4gT3RoZXJ3aXNlLCBpdCdzIGEgY2FwcyBjaGFuZ2UgaW5zaWRlIHRoZSBzYW1lIHRy
YWNrLgorICAgIGJvb2wgcHJldmlvdXNDYXBzV2VyZU51bGwgPSAhbV9hcHBzaW5rQ2FwczsKKwor
ICAgIGlmIChnc3RfY2Fwc19yZXBsYWNlKCZtX2FwcHNpbmtDYXBzLm91dFB0cigpLCBjYXBzLmdl
dCgpKSkgeworICAgICAgICBpZiAobV9wbGF5ZXJQcml2YXRlICYmIHByZXZpb3VzQ2Fwc1dlcmVO
dWxsKQorICAgICAgICAgICAgbV9wbGF5ZXJQcml2YXRlLT50cmFja0RldGVjdGVkKHRoaXMsIG1f
b2xkVHJhY2ssIG1fdHJhY2spOworICAgICAgICBkaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdt
ZW50KCk7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBH
U1RfU1RBVEVfUExBWUlORyk7CisgICAgfQorfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpjaGVj
a0VuZE9mQXBwZW5kKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAg
ICBpZiAoIW1fYXBwc3JjTmVlZERhdGFSZWNlaXZlZCB8fCAobV9hcHBlbmRTdGF0ZSAhPSBBcHBl
bmRTdGF0ZTo6T25nb2luZyAmJiBtX2FwcGVuZFN0YXRlICE9IEFwcGVuZFN0YXRlOjpTYW1wbGlu
ZykpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9UUkFDRSgiZW5kIG9mIGFwcGVuZCBkYXRh
IG1hcmsgd2FzIHJlY2VpdmVkIik7CisKKyAgICBzd2l0Y2ggKG1fYXBwZW5kU3RhdGUpIHsKKyAg
ICBjYXNlIEFwcGVuZFN0YXRlOjpPbmdvaW5nOgorICAgICAgICBHU1RfVFJBQ0UoIkRhdGFTdGFy
dmUiKTsKKyAgICAgICAgbV9hcHBzcmNOZWVkRGF0YVJlY2VpdmVkID0gZmFsc2U7CisgICAgICAg
IHNldEFwcGVuZFN0YXRlKEFwcGVuZFN0YXRlOjpEYXRhU3RhcnZlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBcHBlbmRTdGF0ZTo6U2FtcGxpbmc6CisgICAgICAgIEdTVF9UUkFDRSgiTGFz
dFNhbXBsZSIpOworICAgICAgICBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQgPSBmYWxzZTsKKyAg
ICAgICAgc2V0QXBwZW5kU3RhdGUoQXBwZW5kU3RhdGU6Okxhc3RTYW1wbGUpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjphcHBzaW5rTmV3U2Ft
cGxlKEdzdFNhbXBsZSogc2FtcGxlKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgp
KTsKKworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9uZXdTYW1wbGVMb2NrKTsK
KworICAgICAgICAvLyBJZ25vcmUgc2FtcGxlcyBpZiB3ZSdyZSBub3QgZXhwZWN0aW5nIHRoZW0u
IFJlZnVzZSBwcm9jZXNzaW5nIGlmIHdlJ3JlIGluIEludmFsaWQgc3RhdGUuCisgICAgICAgIGlm
IChtX2FwcGVuZFN0YXRlICE9IEFwcGVuZFN0YXRlOjpPbmdvaW5nICYmIG1fYXBwZW5kU3RhdGUg
IT0gQXBwZW5kU3RhdGU6OlNhbXBsaW5nKSB7CisgICAgICAgICAgICBHU1RfV0FSTklORygiVW5l
eHBlY3RlZCBzYW1wbGUsIGFwcGVuZFN0YXRlPSVzIiwgZHVtcEFwcGVuZFN0YXRlKG1fYXBwZW5k
U3RhdGUpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZXR1cm4gRVJST1IgYW5kIGZpbmQgYSBt
b3JlIHJvYnVzdCB3YXkgdG8gZGV0ZWN0IHRoYXQgYWxsIHRoZQorICAgICAgICAgICAgLy8gZGF0
YSBoYXMgYmVlbiBwcm9jZXNzZWQsIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVzb3J0IHRvIHRoZXNl
IGhhY2tzLgorICAgICAgICAgICAgLy8gQWxsIGluIGFsbCwgcmV0dXJuIE9LLCBldmVuIGlmIGl0
J3Mgbm90IHRoZSBwcm9wZXIgdGhpbmcgdG8gZG8uIFdlIGRvbid0IHdhbnQgdG8gYnJlYWsgdGhl
IGRlbXV4ZXIuCisgICAgICAgICAgICBtX2Zsb3dSZXR1cm4gPSBHU1RfRkxPV19PSzsKKyAgICAg
ICAgICAgIG1fbmV3U2FtcGxlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPEdTdHJlYW1lck1lZGlhU2FtcGxlPiBt
ZWRpYVNhbXBsZSA9IFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhU2FtcGxlOjpjcmVhdGUoc2FtcGxl
LCBtX3ByZXNlbnRhdGlvblNpemUsIHRyYWNrSWQoKSk7CisKKyAgICAgICAgR1NUX1RSQUNFKCJh
cHBlbmQ6IHRyYWNrSWQ9JXMgUFRTPSVmIHByZXNlbnRhdGlvblNpemU9JS4wZnglLjBmIiwgbWVk
aWFTYW1wbGUtPnRyYWNrSUQoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtZWRpYVNhbXBsZS0+
cHJlc2VudGF0aW9uVGltZSgpLnRvRmxvYXQoKSwgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblNp
emUoKS53aWR0aCgpLCBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgpLmhlaWdodCgpKTsK
KworICAgICAgICAvLyBJZiB3ZSdyZSBiZXlvbmQgdGhlIGR1cmF0aW9uLCBpZ25vcmUgdGhpcyBz
YW1wbGUgYW5kIHRoZSByZW1haW5pbmcgb25lcy4KKyAgICAgICAgTWVkaWFUaW1lIGR1cmF0aW9u
ID0gbV9tZWRpYVNvdXJjZUNsaWVudC0+ZHVyYXRpb24oKTsKKyAgICAgICAgaWYgKGR1cmF0aW9u
LmlzVmFsaWQoKSAmJiAhZHVyYXRpb24uaW5kZWZpbml0ZVRpbWUoKSAmJiBtZWRpYVNhbXBsZS0+
cHJlc2VudGF0aW9uVGltZSgpID4gZHVyYXRpb24pIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygi
RGV0ZWN0ZWQgc2FtcGxlICglZikgYmV5b25kIHRoZSBkdXJhdGlvbiAoJWYpLCBkZWNsYXJpbmcg
TGFzdFNhbXBsZSIsIG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkudG9GbG9hdCgpLCBk
dXJhdGlvbi50b0Zsb2F0KCkpOworICAgICAgICAgICAgc2V0QXBwZW5kU3RhdGUoQXBwZW5kU3Rh
dGU6Okxhc3RTYW1wbGUpOworICAgICAgICAgICAgbV9mbG93UmV0dXJuID0gR1NUX0ZMT1dfT0s7
CisgICAgICAgICAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCBhIGdhcCBzYW1wbGUgaWYg
YSBnYXAgaXMgZGV0ZWN0ZWQgYmVmb3JlIHRoZSBmaXJzdCBzYW1wbGUuCisgICAgICAgIGlmICht
ZWRpYVNhbXBsZS0+ZGVjb2RlVGltZSgpID09IE1lZGlhVGltZTo6emVyb1RpbWUoKQorICAgICAg
ICAgICAgJiYgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKSA+IE1lZGlhVGltZTo6emVy
b1RpbWUoKQorICAgICAgICAgICAgJiYgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKSA8
PSBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoMC4xKSkgeworICAgICAgICAgICAgR1NUX0RF
QlVHKCJBZGRpbmcgZ2FwIG9mZnNldCIpOworICAgICAgICAgICAgbWVkaWFTYW1wbGUtPmFwcGx5
UHRzT2Zmc2V0KE1lZGlhVGltZTo6emVyb1RpbWUoKSk7CisgICAgICAgIH0KKworICAgICAgICBt
X3NvdXJjZUJ1ZmZlclByaXZhdGUtPmRpZFJlY2VpdmVTYW1wbGUobWVkaWFTYW1wbGUpOworICAg
ICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZTo6U2FtcGxpbmcpOworICAgICAgICBtX2Zs
b3dSZXR1cm4gPSBHU1RfRkxPV19PSzsKKyAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRpb24ubm90
aWZ5T25lKCk7CisgICAgfQorCisgICAgY2hlY2tFbmRPZkFwcGVuZCgpOworfQorCit2b2lkIEFw
cGVuZFBpcGVsaW5lOjphcHBzaW5rRU9TKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJl
YWQoKSk7CisKKyAgICBzd2l0Y2ggKG1fYXBwZW5kU3RhdGUpIHsKKyAgICBjYXNlIEFwcGVuZFN0
YXRlOjpBYm9ydGluZzoKKyAgICAgICAgLy8gSWdub3JlZC4gT3BlcmF0aW9uIGNvbXBsZXRpb24g
d2lsbCBiZSBtYW5hZ2VkIGJ5IHRoZSBBYm9ydGluZy0+Tm90U3RhcnRlZCB0cmFuc2l0aW9uLgor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcHBlbmRTdGF0ZTo6T25nb2luZzoKKyAgICAgICAg
Ly8gRmluaXNoIE9uZ29pbmcgYW5kIFNhbXBsaW5nIHN0YXRlcy4KKyAgICAgICAgc2V0QXBwZW5k
U3RhdGUoQXBwZW5kU3RhdGU6OkRhdGFTdGFydmUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFwcGVuZFN0YXRlOjpTYW1wbGluZzoKKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoQXBwZW5kU3Rh
dGU6Okxhc3RTYW1wbGUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
U1RfREVCVUcoIlVuZXhwZWN0ZWQgRU9TIik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
dm9pZCBBcHBlbmRQaXBlbGluZTo6ZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCgpCit7
CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgV2ViQ29yZTo6U291cmNl
QnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50IGluaXRpYWxpemF0aW9u
U2VnbWVudDsKKworICAgIEdTVF9ERUJVRygiTm90aWZ5aW5nIFNvdXJjZUJ1ZmZlciBmb3IgdHJh
Y2sgJXMiLCBtX3RyYWNrLT5pZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGluaXRp
YWxpemF0aW9uU2VnbWVudC5kdXJhdGlvbiA9IG1fbWVkaWFTb3VyY2VDbGllbnQtPmR1cmF0aW9u
KCk7CisgICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKKyAgICBjYXNlIEF1ZGlvOiB7CisgICAg
ICAgIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2Vn
bWVudDo6QXVkaW9UcmFja0luZm9ybWF0aW9uIGluZm87CisgICAgICAgIGluZm8udHJhY2sgPSBz
dGF0aWNfY2FzdDxBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KG1fdHJhY2suZ2V0KCkpOwor
ICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFEZXNjcmlw
dGlvbjo6Y3JlYXRlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCkpOworICAgICAgICBpbml0aWFs
aXphdGlvblNlZ21lbnQuYXVkaW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBWaWRlbzogeworICAgICAgICBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
cml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OlZpZGVvVHJhY2tJbmZvcm1hdGlv
biBpbmZvOworICAgICAgICBpbmZvLnRyYWNrID0gc3RhdGljX2Nhc3Q8VmlkZW9UcmFja1ByaXZh
dGVHU3RyZWFtZXIqPihtX3RyYWNrLmdldCgpKTsKKyAgICAgICAgaW5mby5kZXNjcmlwdGlvbiA9
IFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZShtX2RlbXV4ZXJTcmNQ
YWRDYXBzLmdldCgpKTsKKyAgICAgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LnZpZGVvVHJhY2tz
LmFwcGVuZChpbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdTVF9FUlJPUigiVW5zdXBwb3J0ZWQgb3IgdW5rbm93biBzdHJlYW0gdHlwZSIpOworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
bV9zb3VyY2VCdWZmZXJQcml2YXRlLT5kaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KGlu
aXRpYWxpemF0aW9uU2VnbWVudCk7Cit9CisKK0F0b21pY1N0cmluZyBBcHBlbmRQaXBlbGluZTo6
dHJhY2tJZCgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgaWYg
KCFtX3RyYWNrKQorICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKCk7CisKKyAgICByZXR1cm4g
bV90cmFjay0+aWQoKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6cmVzZXRQaXBlbGluZSgp
Cit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9ERUJVRygicmVz
ZXR0aW5nIHBpcGVsaW5lIik7CisgICAgbV9hcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQgPSBmYWxz
ZTsKKyAgICBzZXRBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisKKyAgICB7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbmV3U2FtcGxlTG9jayk7CisgICAgICAgIG1fbmV3U2FtcGxlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0
YXRlKG1fcGlwZWxpbmUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIsIDApOworICAgIH0KKworI2lm
ICghKExPR19ESVNBQkxFRCB8fCBHU1RfRElTQUJMRV9HU1RfREVCVUcpKQorICAgIHsKKyAgICAg
ICAgLy8gVGhpcyBpcyBoZXJlIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIEl0IGRvZXMgbm90IG1h
a2Ugc2Vuc2UgdG8gaGF2ZSBpdCBhcyBjbGFzcyBtZW1iZXIuCisgICAgICAgIFdURjo6U3RyaW5n
ICBkb3RGaWxlTmFtZSA9IFN0cmluZzo6Zm9ybWF0KCJyZXNldC1waXBlbGluZS0lZCIsICsraSk7
CisgICAgICAgIGdzdF9kZWJ1Z19iaW5fdG9fZG90X2ZpbGUoR1NUX0JJTihtX3BpcGVsaW5lLmdl
dCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkb3RGaWxlTmFtZS51dGY4KCkuZGF0YSgp
KTsKKyAgICB9CisjZW5kaWYKKworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpzZXRBcHBzcmNE
YXRhTGVhdmluZ1Byb2JlKCkKK3sKKyAgICBpZiAobV9hcHBzcmNEYXRhTGVhdmluZ1Byb2JlSWQp
CisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9UUkFDRSgic2V0dGluZyBhcHBzcmMgZGF0YSBs
ZWF2aW5nIHByb2JlIik7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gYXBwc3JjUGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc3JjLmdldCgpLCAic3JjIikpOwor
ICAgIG1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkID0gZ3N0X3BhZF9hZGRfcHJvYmUoYXBwc3Jj
UGFkLmdldCgpLCBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdz
dFBhZFByb2JlQ2FsbGJhY2s+KGFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcpLCB0aGlz
LCBudWxscHRyKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6cmVtb3ZlQXBwc3JjRGF0YUxl
YXZpbmdQcm9iZSgpCit7CisgICAgaWYgKCFtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR1NUX1RSQUNFKCJyZW1vdmluZyBhcHBzcmMgZGF0YSBsZWF2
aW5nIHByb2JlIik7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gYXBwc3JjUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc3JjLmdldCgpLCAic3JjIikpOworICAg
IGdzdF9wYWRfcmVtb3ZlX3Byb2JlKGFwcHNyY1BhZC5nZXQoKSwgbV9hcHBzcmNEYXRhTGVhdmlu
Z1Byb2JlSWQpOworICAgIG1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkID0gMDsKK30KKwordm9p
ZCBBcHBlbmRQaXBlbGluZTo6YWJvcnQoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKyAgICBHU1RfREVCVUcoImFib3J0aW5nIik7CisKKyAgICBtX3BlbmRpbmdCdWZmZXIg
PSBudWxscHRyOworCisgICAgLy8gQWJvcnQgYWxyZWFkeSBvbmdvaW5nLgorICAgIGlmIChtX2Fi
b3J0UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hYm9ydFBlbmRpbmcgPSB0cnVl
OworICAgIGlmIChtX2FwcGVuZFN0YXRlID09IEFwcGVuZFN0YXRlOjpOb3RTdGFydGVkKQorICAg
ICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZTo6QWJvcnRpbmcpOworICAgIC8vIEVsc2Us
IHRoZSBhdXRvbWF0aWMgc3RhdGUgdHJhbnNpdGlvbnMgd2lsbCB0YWtlIGNhcmUgd2hlbiB0aGUg
b25nb2luZyBhcHBlbmQgZmluaXNoZXMuCit9CisKK0dzdEZsb3dSZXR1cm4gQXBwZW5kUGlwZWxp
bmU6OnB1c2hOZXdCdWZmZXIoR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgR3N0Rmxvd1JldHVy
biByZXN1bHQ7CisKKyAgICBpZiAobV9hYm9ydFBlbmRpbmcpIHsKKyAgICAgICAgbV9wZW5kaW5n
QnVmZmVyID0gYWRvcHRHUmVmKGJ1ZmZlcik7CisgICAgICAgIHJlc3VsdCA9IEdTVF9GTE9XX09L
OworICAgIH0gZWxzZSB7CisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVuZFBpcGVsaW5lOjpB
cHBlbmRTdGF0ZTo6T25nb2luZyk7CisgICAgICAgIEdTVF9UUkFDRSgicHVzaGluZyBuZXcgYnVm
ZmVyICVwIiwgYnVmZmVyKTsKKyAgICAgICAgcmVzdWx0ID0gZ3N0X2FwcF9zcmNfcHVzaF9idWZm
ZXIoR1NUX0FQUF9TUkMoYXBwc3JjKCkpLCBidWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OnJlcG9ydEFwcHNyY0F0TGVhc3RBQnVm
ZmVyTGVmdCgpCit7CisgICAgR1NUX1RSQUNFKCJidWZmZXIgbGVmdCBhcHBzcmMsIHJlcG9zdGlu
ZyB0byBidXMiKTsKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVf
bmV3X2VtcHR5KCJhcHBzcmMtYnVmZmVyLWxlZnQiKTsKKyAgICBHc3RNZXNzYWdlKiBtZXNzYWdl
ID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdTVF9PQkpFQ1QobV9hcHBzcmMuZ2V0KCkp
LCBzdHJ1Y3R1cmUpOworICAgIGdzdF9idXNfcG9zdChtX2J1cy5nZXQoKSwgbWVzc2FnZSk7Cit9
CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQoKQor
eworICAgIEdTVF9UUkFDRSgicmVjZWl2ZWQgbmVlZC1kYXRhIHNpZ25hbCBhdCBhcHBzcmMsIHJl
cG9zdGluZyB0byBidXMiKTsKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1
Y3R1cmVfbmV3X2VtcHR5KCJhcHBzcmMtbmVlZC1kYXRhIik7CisgICAgR3N0TWVzc2FnZSogbWVz
c2FnZSA9IGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbihHU1RfT0JKRUNUKG1fYXBwc3JjLmdl
dCgpKSwgc3RydWN0dXJlKTsKKyAgICBnc3RfYnVzX3Bvc3QobV9idXMuZ2V0KCksIG1lc3NhZ2Up
OworfQorCitHc3RGbG93UmV0dXJuIEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVOZXdBcHBzaW5rU2Ft
cGxlKEdzdEVsZW1lbnQqIGFwcHNpbmspCit7CisgICAgQVNTRVJUKCFXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKworICAgIC8vIEV2ZW4gaWYgd2UncmUgZGlzYWJsZWQsIGl0J3MgaW1wb3J0YW50IHRv
IHB1bGwgdGhlIHNhbXBsZSBvdXQgYW55d2F5IHRvCisgICAgLy8gYXZvaWQgZGVhZGxvY2tzIHdo
ZW4gY2hhbmdpbmcgdG8gR1NUX1NUQVRFX05VTEwgaGF2aW5nIGEgbm9uIGVtcHR5IGFwcHNpbmsu
CisgICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3Npbmtf
cHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5LKGFwcHNpbmspKSk7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9uZXdTYW1wbGVMb2NrKTsKKworICAgIGlmICghbV9wbGF5ZXJQcml2YXRlIHx8IG1fYXBw
ZW5kU3RhdGUgPT0gQXBwZW5kU3RhdGU6OkludmFsaWQpIHsKKyAgICAgICAgR1NUX1dBUk5JTkco
IkFwcGVuZFBpcGVsaW5lIGhhcyBiZWVuIGRpc2FibGVkLCBpZ25vcmluZyB0aGlzIHNhbXBsZSIp
OworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgICAgfQorCisgICAgR3N0U3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ldygiYXBwc2luay1uZXctc2FtcGxlIiwg
Im5ldy1zYW1wbGUiLCBHU1RfVFlQRV9TQU1QTEUsIHNhbXBsZS5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgR3N0TWVzc2FnZSogbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbihHU1Rf
T0JKRUNUKGFwcHNpbmspLCBzdHJ1Y3R1cmUpOworICAgIGdzdF9idXNfcG9zdChtX2J1cy5nZXQo
KSwgbWVzc2FnZSk7CisgICAgR1NUX1RSQUNFKCJhcHBzaW5rLW5ldy1zYW1wbGUgbWVzc2FnZSBw
b3N0ZWQgdG8gYnVzIik7CisKKyAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi53YWl0KG1fbmV3U2Ft
cGxlTG9jayk7CisgICAgLy8gV2UndmUgYmVlbiBhd2FrZW4gYmVjYXVzZSB0aGUgc2FtcGxlIHdh
cyBwcm9jZXNzZWQgb3IgYmVjYXVzZSBvZgorICAgIC8vIGFuIGV4Y2VwdGlvbmFsIGNvbmRpdGlv
biAoZW50ZXJlZCBpbiBJbnZhbGlkIHN0YXRlLCBkZXN0cnVjdG9yLCBldGMuKS4KKyAgICAvLyBX
ZSBjYW4ndCByZWxpYWJseSBkZWxldGUgaW5mbyBoZXJlLCBhcHBlbmRQaXBlbGluZUFwcHNpbmtO
ZXdTYW1wbGVNYWluVGhyZWFkIHdpbGwgZG8gaXQuCisKKyAgICByZXR1cm4gbV9mbG93UmV0dXJu
OworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lu
a0Zyb21BbnlUaHJlYWQoR3N0UGFkKiBkZW11eGVyU3JjUGFkKQoreworICAgIGlmICghbV9hcHBz
aW5rKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoImNvbm5lY3RpbmcgdG8gYXBw
c2luayIpOworCisgICAgR1JlZlB0cjxHc3RQYWQ+IGFwcHNpbmtTaW5rUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisK
KyAgICAvLyBPbmx5IG9uZSBzdHJlYW0gcGVyIGRlbXV4ZXIgaXMgc3VwcG9ydGVkLgorICAgIEFT
U0VSVCghZ3N0X3BhZF9pc19saW5rZWQoYXBwc2lua1NpbmtQYWQuZ2V0KCkpKTsKKworICAgIGdp
bnQ2NCB0aW1lTGVuZ3RoID0gMDsKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24o
bV9kZW11eC5nZXQoKSwgR1NUX0ZPUk1BVF9USU1FLCAmdGltZUxlbmd0aCkKKyAgICAgICAgJiYg
c3RhdGljX2Nhc3Q8Z3VpbnQ2ND4odGltZUxlbmd0aCkgIT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkK
KyAgICAgICAgbV9pbml0aWFsRHVyYXRpb24gPSBNZWRpYVRpbWUoR1NUX1RJTUVfQVNfVVNFQ09O
RFModGltZUxlbmd0aCksIEdfVVNFQ19QRVJfU0VDKTsKKyAgICBlbHNlCisgICAgICAgIG1faW5p
dGlhbER1cmF0aW9uID0gTWVkaWFUaW1lOjpwb3NpdGl2ZUluZmluaXRlVGltZSgpOworCisgICAg
aWYgKFdURjo6aXNNYWluVGhyZWFkKCkpCisgICAgICAgIGNvbm5lY3REZW11eGVyU3JjUGFkVG9B
cHBzaW5rKGRlbXV4ZXJTcmNQYWQpOworICAgIGVsc2UgeworICAgICAgICAvLyBDYWxsIGNvbm5l
Y3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKCkgaW4gdGhlIG1haW4gdGhyZWFkIGFuZCB3YWl0Lgor
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhZEFkZFJlbW92ZUxvY2spOworICAgICAgICBp
ZiAoIW1fcGxheWVyUHJpdmF0ZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBHc3RT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3KCJkZW11eGVyLWNvbm5lY3Qt
dG8tYXBwc2luayIsICJkZW11eGVyLXNyYy1wYWQiLCBHX1RZUEVfT0JKRUNULCBkZW11eGVyU3Jj
UGFkLCBudWxscHRyKTsKKyAgICAgICAgR3N0TWVzc2FnZSogbWVzc2FnZSA9IGdzdF9tZXNzYWdl
X25ld19hcHBsaWNhdGlvbihHU1RfT0JKRUNUKG1fZGVtdXguZ2V0KCkpLCBzdHJ1Y3R1cmUpOwor
ICAgICAgICBnc3RfYnVzX3Bvc3QobV9idXMuZ2V0KCksIG1lc3NhZ2UpOworICAgICAgICBHU1Rf
VFJBQ0UoImRlbXV4ZXItY29ubmVjdC10by1hcHBzaW5rIG1lc3NhZ2UgcG9zdGVkIHRvIGJ1cyIp
OworCisgICAgICAgIG1fcGFkQWRkUmVtb3ZlQ29uZGl0aW9uLndhaXQobV9wYWRBZGRSZW1vdmVM
b2NrKTsKKyAgICB9CisKKyAgICAvLyBNdXN0IGJlIGRvbmUgaW4gdGhlIHRocmVhZCB3ZSB3ZXJl
IGNhbGxlZCBmcm9tICh1c3VhbGx5IHN0cmVhbWluZyB0aHJlYWQpLgorICAgIGJvb2wgaXNEYXRh
ID0gKG1fc3RyZWFtVHlwZSA9PSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFt
ZXI6OkF1ZGlvKQorICAgICAgICB8fCAobV9zdHJlYW1UeXBlID09IFdlYkNvcmU6Ok1lZGlhU291
cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VmlkZW8pCisgICAgICAgIHx8IChtX3N0cmVhbVR5cGUg
PT0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpUZXh0KTsKKworICAg
IGlmIChpc0RhdGEpIHsKKyAgICAgICAgLy8gRklYTUU6IE9ubHkgYWRkIGFwcHNpbmsgb25lIHRp
bWUuIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcy4KKyAgICAgICAgR1Jl
ZlB0cjxHc3RPYmplY3Q+IHBhcmVudCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfcGFyZW50
KG1fYXBwc2luay5nZXQoKSkpOworICAgICAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgICAgIGdz
dF9iaW5fYWRkKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1fYXBwc2luay5nZXQoKSk7CisK
KyNpZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkKKyAgICAgICAgaWYgKG1fZGVjcnlw
dG9yKSB7CisgICAgICAgICAgICBnc3Rfb2JqZWN0X3JlZihtX2RlY3J5cHRvci5nZXQoKSk7Cisg
ICAgICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX2RlY3J5
cHRvci5nZXQoKSk7CisKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBkZWNyeXB0b3JTaW5r
UGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fZGVjcnlwdG9yLmdl
dCgpLCAic2luayIpKTsKKyAgICAgICAgICAgIGdzdF9wYWRfbGluayhkZW11eGVyU3JjUGFkLCBk
ZWNyeXB0b3JTaW5rUGFkLmdldCgpKTsKKworICAgICAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGRl
Y3J5cHRvclNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2Rl
Y3J5cHRvci5nZXQoKSwgInNyYyIpKTsKKyAgICAgICAgICAgIGdzdF9wYWRfbGluayhkZWNyeXB0
b3JTcmNQYWQuZ2V0KCksIGFwcHNpbmtTaW5rUGFkLmdldCgpKTsKKworICAgICAgICAgICAgZ3N0
X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChtX2FwcHNpbmsuZ2V0KCkpOworICAgICAg
ICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChtX2RlY3J5cHRvci5nZXQo
KSk7CisgICAgICAgIH0gZWxzZSB7CisjZW5kaWYKKyAgICAgICAgICAgIGdzdF9wYWRfbGluayhk
ZW11eGVyU3JjUGFkLCBhcHBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgICAgICAgICBnc3RfZWxl
bWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fYXBwc2luay5nZXQoKSk7CisjaWYgRU5BQkxF
KExFR0FDWV9FTkNSWVBURURfTUVESUEpCisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BBVVNFRCk7Cisg
ICAgfQorfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBw
c2luayhHc3RQYWQqIGRlbXV4ZXJTcmNQYWQpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhy
ZWFkKCkpOworICAgIEdTVF9ERUJVRygiQ29ubmVjdGluZyB0byBhcHBzaW5rIik7CisKKyAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3BhZEFkZFJlbW92ZUxvY2spOworICAgIEdSZWZQdHI8R3N0UGFk
PiBzaW5rU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2Fw
cHNpbmsuZ2V0KCksICJzaW5rIikpOworCisgICAgLy8gT25seSBvbmUgc3RyZWFtIHBlciBkZW11
eGVyIGlzIHN1cHBvcnRlZC4KKyAgICBBU1NFUlQoIWdzdF9wYWRfaXNfbGlua2VkKHNpbmtTaW5r
UGFkLmdldCgpKSk7CisKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdSZWYoZ3N0
X3BhZF9nZXRfY3VycmVudF9jYXBzKEdTVF9QQUQoZGVtdXhlclNyY1BhZCkpKTsKKworICAgIGlm
ICghY2FwcyB8fCBtX2FwcGVuZFN0YXRlID09IEFwcGVuZFN0YXRlOjpJbnZhbGlkIHx8ICFtX3Bs
YXllclByaXZhdGUpIHsKKyAgICAgICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90aWZ5T25l
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RF
QlVHCisgICAgeworICAgICAgICBHVW5pcXVlUHRyPGdjaGFyPiBzdHJjYXBzKGdzdF9jYXBzX3Rv
X3N0cmluZyhjYXBzLmdldCgpKSk7CisgICAgICAgIEdTVF9ERUJVRygiJXMiLCBzdHJjYXBzLmdl
dCgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChtX2luaXRpYWxEdXJhdGlvbiA+IG1fbWVk
aWFTb3VyY2VDbGllbnQtPmR1cmF0aW9uKCkpCisgICAgICAgIG1fbWVkaWFTb3VyY2VDbGllbnQt
PmR1cmF0aW9uQ2hhbmdlZChtX2luaXRpYWxEdXJhdGlvbik7CisKKyAgICBtX29sZFRyYWNrID0g
bV90cmFjazsKKworICAgIHBhcnNlRGVtdXhlclNyY1BhZENhcHMoZ3N0X2NhcHNfcmVmKGNhcHMu
Z2V0KCkpKTsKKworICAgIHN3aXRjaCAobV9zdHJlYW1UeXBlKSB7CisgICAgY2FzZSBXZWJDb3Jl
OjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOgorICAgICAgICBpZiAobV9w
bGF5ZXJQcml2YXRlKQorICAgICAgICAgICAgbV90cmFjayA9IFdlYkNvcmU6OkF1ZGlvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9wbGF5ZXJQcml2YXRlLT5waXBlbGluZSgpLCBpZCgp
LCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6
TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpWaWRlbzoKKyAgICAgICAgaWYgKG1fcGxh
eWVyUHJpdmF0ZSkKKyAgICAgICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpWaWRlb1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1fcGxheWVyUHJpdmF0ZS0+cGlwZWxpbmUoKSwgaWQoKSwg
c2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNvcmU6Ok1l
ZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDoKKyAgICAgICAgbV90cmFjayA9IFdl
YkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZShpZCgpLCBzaW5r
U2lua1BhZC5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8v
IE5vIHVzZWZ1bCBkYXRhLCBidXQgbm90aWZ5IGFueXdheSB0byBjb21wbGV0ZSB0aGUgYXBwZW5k
IG9wZXJhdGlvbi4KKyAgICAgICAgR1NUX0RFQlVHKCJSZWNlaXZlZCBhbGwgcGVuZGluZyBzYW1w
bGVzIChubyBkYXRhKSIpOworICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPmRpZFJlY2Vp
dmVBbGxQZW5kaW5nU2FtcGxlcygpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX3Bh
ZEFkZFJlbW92ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGlu
ZTo6ZGlzY29ubmVjdERlbXV4ZXJTcmNQYWRGcm9tQXBwc2lua0Zyb21BbnlUaHJlYWQoKQorewor
ICAgIEdTVF9ERUJVRygiRGlzY29ubmVjdGluZyBhcHBzaW5rIik7CisKKyAgICAvLyBNdXN0IGJl
IGRvbmUgaW4gdGhlIHRocmVhZCB3ZSB3ZXJlIGNhbGxlZCBmcm9tICh1c3VhbGx5IHN0cmVhbWlu
ZyB0aHJlYWQpLgorI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQorICAgIGlmICht
X2RlY3J5cHRvcikgeworICAgICAgICBnc3RfZWxlbWVudF91bmxpbmsobV9kZWNyeXB0b3IuZ2V0
KCksIG1fYXBwc2luay5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X3VubGluayhtX2RlbXV4
LmdldCgpLCBtX2RlY3J5cHRvci5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0
ZShtX2RlY3J5cHRvci5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgICAgICBnc3RfYmluX3Jl
bW92ZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX2RlY3J5cHRvci5nZXQoKSk7CisgICAg
fSBlbHNlCisjZW5kaWYKKyAgICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rKG1fZGVtdXguZ2V0KCks
IG1fYXBwc2luay5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwc2lu
a0NhcHNDaGFuZ2VkKEdPYmplY3QqIGFwcHNpbmtQYWQsIEdQYXJhbVNwZWMqLCBBcHBlbmRQaXBl
bGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
c3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXBwc2luay1jYXBzLWNoYW5nZWQiKTsKKyAgICBHc3RN
ZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdTVF9PQkpFQ1Qo
YXBwc2lua1BhZCksIHN0cnVjdHVyZSk7CisgICAgZ3N0X2J1c19wb3N0KGFwcGVuZFBpcGVsaW5l
LT5idXMoKSwgbWVzc2FnZSk7CisgICAgR1NUX1RSQUNFKCJhcHBzaW5rLWNhcHMtY2hhbmdlZCBt
ZXNzYWdlIHBvc3RlZCB0byBidXMiKTsKK30KKworc3RhdGljIEdzdFBhZFByb2JlUmV0dXJuIGFw
cGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcoR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBp
bmZvLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgQVNTRVJUKEdTVF9Q
QURfUFJPQkVfSU5GT19UWVBFKGluZm8pICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUik7CisK
KyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IEdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVIoaW5mbyk7
CisgICAgZ3NpemUgYnVmZmVyU2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmZmVyKTsKKwor
ICAgIEdTVF9UUkFDRSgiYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiBnb2luZyB0
aHJ1IiwgYnVmZmVyU2l6ZSk7CisKKyAgICBhcHBlbmRQaXBlbGluZS0+cmVwb3J0QXBwc3JjQXRM
ZWFzdEFCdWZmZXJMZWZ0KCk7CisKKyAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKK30KKwor
I2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBHc3RQYWRQcm9iZVJldHVybiBhcHBlbmRQaXBlbGlu
ZVBhZFByb2JlRGVidWdJbmZvcm1hdGlvbihHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8s
IHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uKiBwYWRQcm9iZUluZm9ybWF0aW9uKQoreworICAg
IEFTU0VSVChHU1RfUEFEX1BST0JFX0lORk9fVFlQRShpbmZvKSAmIEdTVF9QQURfUFJPQkVfVFlQ
RV9CVUZGRVIpOworICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gR1NUX1BBRF9QUk9CRV9JTkZPX0JV
RkZFUihpbmZvKTsKKyAgICBHU1RfVFJBQ0UoIiVzOiBidWZmZXIgb2Ygc2l6ZSAlIiBHX0dTSVpF
X0ZPUk1BVCAiIGdvaW5nIHRocnUiLCBwYWRQcm9iZUluZm9ybWF0aW9uLT5kZXNjcmlwdGlvbiwg
Z3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpKTsKKyAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9P
SzsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUFwcHNyY05lZWREYXRh
KEdzdEFwcFNyYyosIGd1aW50LCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7Cisg
ICAgYXBwZW5kUGlwZWxpbmUtPnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQoKTsKK30KKwor
c3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVEZW11eGVyUGFkQWRkZWQoR3N0RWxlbWVudCosIEdz
dFBhZCogZGVtdXhlclNyY1BhZCwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKQorewor
ICAgIGFwcGVuZFBpcGVsaW5lLT5jb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lua0Zyb21BbnlU
aHJlYWQoZGVtdXhlclNyY1BhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lRGVt
dXhlclBhZFJlbW92ZWQoR3N0RWxlbWVudCosIEdzdFBhZCosIEFwcGVuZFBpcGVsaW5lKiBhcHBl
bmRQaXBlbGluZSkKK3sKKyAgICBhcHBlbmRQaXBlbGluZS0+ZGlzY29ubmVjdERlbXV4ZXJTcmNQ
YWRGcm9tQXBwc2lua0Zyb21BbnlUaHJlYWQoKTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4g
YXBwZW5kUGlwZWxpbmVBcHBzaW5rTmV3U2FtcGxlKEdzdEVsZW1lbnQqIGFwcHNpbmssIEFwcGVu
ZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICByZXR1cm4gYXBwZW5kUGlwZWxpbmUt
PmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoYXBwc2luayk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVu
ZFBpcGVsaW5lQXBwc2lua0VPUyhHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBp
cGVsaW5lKQoreworICAgIGlmIChXVEY6OmlzTWFpblRocmVhZCgpKQorICAgICAgICBhcHBlbmRQ
aXBlbGluZS0+YXBwc2lua0VPUygpOworICAgIGVsc2UgeworICAgICAgICBHc3RTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJhcHBzaW5rLWVvcyIpOworICAg
ICAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdT
VF9PQkpFQ1QoYXBwZW5kUGlwZWxpbmUtPmFwcHNpbmsoKSksIHN0cnVjdHVyZSk7CisgICAgICAg
IGdzdF9idXNfcG9zdChhcHBlbmRQaXBlbGluZS0+YnVzKCksIG1lc3NhZ2UpOworICAgICAgICBH
U1RfVFJBQ0UoImFwcHNpbmstZW9zIG1lc3NhZ2UgcG9zdGVkIHRvIGJ1cyIpOworICAgIH0KKwor
ICAgIEdTVF9ERUJVRygiJXMgbWFpbiB0aHJlYWQiLCAoV1RGOjppc01haW5UaHJlYWQoKSkgPyAi
SXMiIDogIk5vdCIpOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4KKworI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmUwMmU0ODI1NmVmMzk4MjY3ZDk2YTY0MTY2MmU5MTRlY2EwNWUxYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuaApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBT
LkwKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikgJiYg
RU5BQkxFKE1FRElBX1NPVVJDRSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmgiCisjaW5j
bHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSA8Z3N0L2dz
dC5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBBcHBlbmRQaXBlbGluZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBcHBl
bmRQaXBlbGluZT4geworcHVibGljOgorICAgIGVudW0gY2xhc3MgQXBwZW5kU3RhdGUgeyBJbnZh
bGlkLCBOb3RTdGFydGVkLCBPbmdvaW5nLCBLZXlOZWdvdGlhdGlvbiwgRGF0YVN0YXJ2ZSwgU2Ft
cGxpbmcsIExhc3RTYW1wbGUsIEFib3J0aW5nIH07CisKKyAgICBBcHBlbmRQaXBlbGluZShSZWY8
TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+LCBSZWY8U291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lcj4sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYpOworICAgIHZpcnR1YWwg
fkFwcGVuZFBpcGVsaW5lKCk7CisKKyAgICB2b2lkIGhhbmRsZUVsZW1lbnRNZXNzYWdlKEdzdE1l
c3NhZ2UqKTsKKyAgICB2b2lkIGhhbmRsZUFwcGxpY2F0aW9uTWVzc2FnZShHc3RNZXNzYWdlKik7
CisKKyAgICBnaW50IGlkKCk7CisgICAgQXBwZW5kU3RhdGUgYXBwZW5kU3RhdGUoKSB7IHJldHVy
biBtX2FwcGVuZFN0YXRlOyB9CisgICAgdm9pZCBzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZSk7
CisKKyAgICBHc3RGbG93UmV0dXJuIGhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoR3N0RWxlbWVudCop
OworICAgIEdzdEZsb3dSZXR1cm4gcHVzaE5ld0J1ZmZlcihHc3RCdWZmZXIqKTsKKworICAgIC8v
IFRha2VzIG93bmVyc2hpcCBvZiBjYXBzLgorICAgIHZvaWQgcGFyc2VEZW11eGVyU3JjUGFkQ2Fw
cyhHc3RDYXBzKik7CisgICAgdm9pZCBhcHBzaW5rQ2Fwc0NoYW5nZWQoKTsKKyAgICB2b2lkIGFw
cHNpbmtOZXdTYW1wbGUoR3N0U2FtcGxlKik7CisgICAgdm9pZCBhcHBzaW5rRU9TKCk7CisgICAg
dm9pZCBkaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KCk7CisgICAgQXRvbWljU3RyaW5n
IHRyYWNrSWQoKTsKKyAgICB2b2lkIGFib3J0KCk7CisKKyAgICB2b2lkIGNsZWFyUGxheWVyUHJp
dmF0ZSgpOworICAgIFJlZjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiBzb3VyY2VCdWZm
ZXJQcml2YXRlKCkgeyByZXR1cm4gbV9zb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpOyB9CisgICAg
R3N0QnVzKiBidXMoKSB7IHJldHVybiBtX2J1cy5nZXQoKTsgfQorICAgIEdzdEVsZW1lbnQqIHBp
cGVsaW5lKCkgeyByZXR1cm4gbV9waXBlbGluZS5nZXQoKTsgfQorICAgIEdzdEVsZW1lbnQqIGFw
cHNyYygpIHsgcmV0dXJuIG1fYXBwc3JjLmdldCgpOyB9CisgICAgR3N0RWxlbWVudCogYXBwc2lu
aygpIHsgcmV0dXJuIG1fYXBwc2luay5nZXQoKTsgfQorICAgIEdzdENhcHMqIGRlbXV4ZXJTcmNQ
YWRDYXBzKCkgeyByZXR1cm4gbV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKTsgfQorICAgIEdzdENh
cHMqIGFwcHNpbmtDYXBzKCkgeyByZXR1cm4gbV9hcHBzaW5rQ2Fwcy5nZXQoKTsgfQorICAgIFJl
ZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiB0cmFjaygpIHsgcmV0dXJuIG1fdHJhY2s7
IH0KKyAgICBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXIgc3RyZWFtVHlw
ZSgpIHsgcmV0dXJuIG1fc3RyZWFtVHlwZTsgfQorCisgICAgdm9pZCBkaXNjb25uZWN0RGVtdXhl
clNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZCgpOworICAgIHZvaWQgY29ubmVjdERlbXV4
ZXJTcmNQYWRUb0FwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCopOworICAgIHZvaWQgY29ubmVj
dERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKik7CisKKyAgICB2b2lkIHJlcG9ydEFwcHNy
Y0F0TGVhc3RBQnVmZmVyTGVmdCgpOworICAgIHZvaWQgcmVwb3J0QXBwc3JjTmVlZERhdGFSZWNl
aXZlZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgcmVzZXRQaXBlbGluZSgpOworICAgIHZvaWQg
Y2hlY2tFbmRPZkFwcGVuZCgpOworICAgIHZvaWQgaGFuZGxlQXBwc3JjQXRMZWFzdEFCdWZmZXJM
ZWZ0KCk7CisgICAgdm9pZCBoYW5kbGVBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCk7CisgICAgdm9p
ZCByZW1vdmVBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisgICAgdm9pZCBzZXRBcHBzcmNEYXRh
TGVhdmluZ1Byb2JlKCk7CisKK3ByaXZhdGU6CisgICAgUmVmPE1lZGlhU291cmNlQ2xpZW50R1N0
cmVhbWVyTVNFPiBtX21lZGlhU291cmNlQ2xpZW50OworICAgIFJlZjxTb3VyY2VCdWZmZXJQcml2
YXRlR1N0cmVhbWVyPiBtX3NvdXJjZUJ1ZmZlclByaXZhdGU7CisgICAgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFKiBtX3BsYXllclByaXZhdGU7CisKKyAgICAvLyAobV9tZWRpYVR5cGUs
IG1faWQpIGlzIHVuaXF1ZS4KKyAgICBnaW50IG1faWQ7CisKKyAgICBNZWRpYVRpbWUgbV9pbml0
aWFsRHVyYXRpb247CisKKyAgICBHc3RGbG93UmV0dXJuIG1fZmxvd1JldHVybjsKKworICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKyAgICBHUmVmUHRyPEdzdEJ1cz4gbV9idXM7
CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2FwcHNyYzsKKyAgICBHUmVmUHRyPEdzdEVsZW1l
bnQ+IG1fZGVtdXg7CisjaWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEpCisgICAgR1Jl
ZlB0cjxHc3RFbGVtZW50PiBtX2RlY3J5cHRvcjsKKyNlbmRpZgorICAgIC8vIFRoZSBkZW11eGVy
IGhhcyBvbmUgc3JjIHN0cmVhbSBvbmx5LCBzbyBvbmx5IG9uZSBhcHBzaW5rIGlzIG5lZWRlZCBh
bmQgbGlua2VkIHRvIGl0LgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hcHBzaW5rOworCisg
ICAgTG9jayBtX25ld1NhbXBsZUxvY2s7CisgICAgQ29uZGl0aW9uIG1fbmV3U2FtcGxlQ29uZGl0
aW9uOworICAgIExvY2sgbV9wYWRBZGRSZW1vdmVMb2NrOworICAgIENvbmRpdGlvbiBtX3BhZEFk
ZFJlbW92ZUNvbmRpdGlvbjsKKworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9hcHBzaW5rQ2FwczsK
KyAgICBHUmVmUHRyPEdzdENhcHM+IG1fZGVtdXhlclNyY1BhZENhcHM7CisgICAgRmxvYXRTaXpl
IG1fcHJlc2VudGF0aW9uU2l6ZTsKKworICAgIGJvb2wgbV9hcHBzcmNBdExlYXN0QUJ1ZmZlckxl
ZnQ7CisgICAgYm9vbCBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQ7CisKKyAgICBndWxvbmcgbV9h
cHBzcmNEYXRhTGVhdmluZ1Byb2JlSWQ7CisjaWYgIUxPR19ESVNBQkxFRAorICAgIHN0cnVjdCBQ
YWRQcm9iZUluZm9ybWF0aW9uIG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRp
b247CisgICAgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gbV9hcHBzaW5rRGF0YUVudGVyaW5n
UGFkUHJvYmVJbmZvcm1hdGlvbjsKKyNlbmRpZgorCisgICAgLy8gS2VlcHMgdHJhY2sgb2YgdGhl
IHN0YXRlcyBvZiBhcHBlbmQgcHJvY2Vzc2luZywgdG8gYXZvaWQgcGVyZm9ybWluZyBhY3Rpb25z
IGluYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IHN0YXRlCisgICAgLy8gKGVnOiBwcm9jZXNz
aW5nIG1vcmUgc2FtcGxlcyB3aGVuIHRoZSBsYXN0IG9uZSBoYXMgYmVlbiBkZXRlY3RlZCwgZXRj
LikuIFNlZSBzZXRBcHBlbmRTdGF0ZSgpIGZvciB2YWxpZAorICAgIC8vIHRyYW5zaXRpb25zLgor
ICAgIEFwcGVuZFN0YXRlIG1fYXBwZW5kU3RhdGU7CisKKyAgICAvLyBBYm9ydHMgY2FuIG9ubHkg
YmUgY29tcGxldGVkIHdoZW4gdGhlIG5vcm1hbCBzYW1wbGUgZGV0ZWN0aW9uIGhhcyBmaW5pc2hl
ZC4gTWVhbndoaWxlLCB0aGUgd2lsbGluZyB0byBhYm9ydCBpcworICAgIC8vIGV4cHJlc3NlZCBp
biB0aGlzIGZpZWxkLgorICAgIGJvb2wgbV9hYm9ydFBlbmRpbmc7CisKKyAgICBXZWJDb3JlOjpN
ZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXIgbV9zdHJlYW1UeXBlOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBtX29sZFRyYWNrOworICAgIFJlZlB0cjxXZWJDb3Jl
OjpUcmFja1ByaXZhdGVCYXNlPiBtX3RyYWNrOworCisgICAgR1JlZlB0cjxHc3RCdWZmZXI+IG1f
cGVuZGluZ0J1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUuCisKKyNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292401</attachid>
            <date>2016-10-21 14:20:23 -0700</date>
            <delta_ts>2016-10-25 02:00:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162874-20161021211642.patch</filename>
            <type>text/plain</type>
            <size>49732</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjdiNTQ2NzM3NmE2MzI4
NjRhNTVjNDZmYWFmYWE5NWQ0OTUxZTg1Zi4uNjIzOGMxNjdiZTNlODhjMDU2MDY3YTI3N2RmYTZh
ZTE5MmNkMWMyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY4IEBACiAyMDE2LTEwLTAzICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIEFwcGVuZCBQaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRo
IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiAoZGF0YSBzdGFy
dmUKKyAgICAgICAgYW5kIGxhc3Qgc2FtcGxlIGRldGVjdGlvbiwgZGVidWcgZmVhdHVyZXMpIGFu
ZCBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPiAoRU1FCisgICAgICAgIHN1cHBv
cnQpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQ
aXBlbGluZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZHVtcEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lRWxlbWVudE1lc3NhZ2VDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRQaXBlbGluZUFwcGxpY2F0aW9uTWVzc2FnZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6fkFwcGVuZFBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpjbGVhclBsYXllclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVsZW1lbnRNZXNzYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBsaWNhdGlvbk1lc3NhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNyY05lZWREYXRh
UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNy
Y0F0TGVhc3RBQnVmZmVyTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
aWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnNldEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNoZWNrRW5kT2ZBcHBlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtFT1MpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnRyYWNrSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlc2V0UGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwZW5kUGlwZWxpbmU6OnNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGVuZFBpcGVsaW5lOjpwdXNoTmV3QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVu
ZFBpcGVsaW5lOjpyZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9B
cHBzaW5rRnJvbUFueVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1NhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjphcHBl
bmRQaXBlbGluZUFwcHNpbmtFT1MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBl
bmRQaXBlbGluZTo6YXBwZW5kU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxp
bmU6Om1lZGlhU291cmNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
Ojpzb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
OjpidXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzcmMpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlw
ZWxpbmU6OmRlbXV4ZXJTcmNQYWRDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVs
aW5lOjphcHBzaW5rQ2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6dHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnN0cmVhbVR5cGUpOgorCisy
MDE2LTEwLTAzICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+
CisKICAgICAgICAgW0dTdHJlYW1lcl0gRHJhaW4gcXVlcnkgc3VwcG9ydAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODcyCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlw
ZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9BcHBlbmRQaXBlbGluZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDBjNDQwZWQ2NzI5NWY2MDdlYmE4ZDAz
YzAxYzBlNGQ3YjY4MTM0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEs
MTA4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQXBwZW5kUGlwZWxpbmUuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKworI2luY2x1ZGUgIkF1ZGlvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRp
YVNhbXBsZS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIklu
YmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYURlc2NyaXB0
aW9uLmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1
ZGUgIlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dz
dGFwcHNpbmsuaD4KKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgorI2luY2x1ZGUgPGdz
dC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+CisjaW5jbHVkZSA8Z3N0
L3ZpZGVvL3ZpZGVvLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyNpZiAhTE9HX0RJU0FCTEVECitzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlv
biB7CisgICAgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lOworICAgIGNvbnN0IGNoYXIq
IGRlc2NyaXB0aW9uOworICAgIGd1bG9uZyBwcm9iZUlkOworfTsKKyNlbmRpZgorCitzdGF0aWMg
Y29uc3QgY2hhciogZHVtcEFwcGVuZFN0YXRlKEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZSBh
cHBlbmRTdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKGFwcGVuZFN0YXRlKSB7CisgICAgY2FzZSBBcHBl
bmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OkludmFsaWQ6CisgICAgICAgIHJldHVybiAiSW52YWxp
ZCI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ6Cisg
ICAgICAgIHJldHVybiAiTm90U3RhcnRlZCI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBw
ZW5kU3RhdGU6Ok9uZ29pbmc6CisgICAgICAgIHJldHVybiAiT25nb2luZyI7CisgICAgY2FzZSBB
cHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OktleU5lZ290aWF0aW9uOgorICAgICAgICByZXR1
cm4gIktleU5lZ290aWF0aW9uIjsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0
ZTo6RGF0YVN0YXJ2ZToKKyAgICAgICAgcmV0dXJuICJEYXRhU3RhcnZlIjsKKyAgICBjYXNlIEFw
cGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6U2FtcGxpbmc6CisgICAgICAgIHJldHVybiAiU2Ft
cGxpbmciOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpMYXN0U2FtcGxl
OgorICAgICAgICByZXR1cm4gIkxhc3RTYW1wbGUiOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6
OkFwcGVuZFN0YXRlOjpBYm9ydGluZzoKKyAgICAgICAgcmV0dXJuICJBYm9ydGluZyI7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICIodW5rbm93bikiOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YShHc3RBcHBTcmMqLCBndWludCwgQXBw
ZW5kUGlwZWxpbmUqKTsKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lRGVtdXhlclBhZEFkZGVk
KEdzdEVsZW1lbnQqLCBHc3RQYWQqLCBBcHBlbmRQaXBlbGluZSopOworc3RhdGljIHZvaWQgYXBw
ZW5kUGlwZWxpbmVEZW11eGVyUGFkUmVtb3ZlZChHc3RFbGVtZW50KiwgR3N0UGFkKiwgQXBwZW5k
UGlwZWxpbmUqKTsKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2Vk
KEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgQXBwZW5kUGlwZWxpbmUqKTsKK3N0YXRpYyBHc3RQYWRQ
cm9iZVJldHVybiBhcHBlbmRQaXBlbGluZUFwcHNyY0RhdGFMZWF2aW5nKEdzdFBhZCosIEdzdFBh
ZFByb2JlSW5mbyosIEFwcGVuZFBpcGVsaW5lKik7CisjaWYgIUxPR19ESVNBQkxFRAorc3RhdGlj
IEdzdFBhZFByb2JlUmV0dXJuIGFwcGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9u
KEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyosIHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uKik7
CisjZW5kaWYKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1Nh
bXBsZShHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxpbmUqKTsKK3N0YXRpYyB2b2lkIGFwcGVuZFBp
cGVsaW5lQXBwc2lua0VPUyhHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxpbmUqKTsKKworc3RhdGlj
IHZvaWQgYXBwZW5kUGlwZWxpbmVFbGVtZW50TWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyosIEdzdE1l
c3NhZ2UqIG1lc3NhZ2UsIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICBh
cHBlbmRQaXBlbGluZS0+aGFuZGxlRWxlbWVudE1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3N0YXRp
YyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwbGljYXRpb25NZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiwg
R3N0TWVzc2FnZSogbWVzc2FnZSwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKQorewor
ICAgIGFwcGVuZFBpcGVsaW5lLT5oYW5kbGVBcHBsaWNhdGlvbk1lc3NhZ2UobWVzc2FnZSk7Cit9
CisKK0FwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZShSZWY8TWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXJNU0U+IG1lZGlhU291cmNlQ2xpZW50LCBSZWY8U291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFJiBwbGF5ZXJQcml2YXRlKQorICAgIDogbV9tZWRpYVNvdXJjZUNsaWVudChtZWRpYVNvdXJj
ZUNsaWVudC5nZXQoKSkKKyAgICAsIG1fc291cmNlQnVmZmVyUHJpdmF0ZShzb3VyY2VCdWZmZXJQ
cml2YXRlLmdldCgpKQorICAgICwgbV9wbGF5ZXJQcml2YXRlKCZwbGF5ZXJQcml2YXRlKQorICAg
ICwgbV9pZCgwKQorICAgICwgbV9hcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoZmFsc2UpCisgICAg
LCBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQoZmFsc2UpCisgICAgLCBtX2FwcHNyY0RhdGFMZWF2
aW5nUHJvYmVJZCgwKQorICAgICwgbV9hcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZTo6Tm90U3RhcnRl
ZCkKKyAgICAsIG1fYWJvcnRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9zdHJlYW1UeXBlKFVua25v
d24pCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgR1NUX1RSQUNF
KCJDcmVhdGluZyBBcHBlbmRQaXBlbGluZSAoJXApIiwgdGhpcyk7CisKKyAgICAvLyBGSVhNRTog
Z2l2ZSBhIG5hbWUgdG8gdGhlIHBpcGVsaW5lLCBtYXliZSByZWxhdGVkIHdpdGggdGhlIHRyYWNr
IGl0J3MgbWFuYWdpbmcuCisgICAgLy8gVGhlIHRyYWNrIG5hbWUgaXMgc3RpbGwgdW5rbm93biBh
dCB0aGlzIHRpbWUsIHRob3VnaC4KKyAgICBtX3BpcGVsaW5lID0gYWRvcHRHUmVmKGdzdF9waXBl
bGluZV9uZXcobnVsbHB0cikpOworCisgICAgbV9idXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5l
X2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgZ3N0X2J1c19h
ZGRfc2lnbmFsX3dhdGNoKG1fYnVzLmdldCgpKTsKKyAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21l
c3NhZ2VfZW1pc3Npb24obV9idXMuZ2V0KCkpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX2J1
cy5nZXQoKSwgInN5bmMtbWVzc2FnZTo6ZWxlbWVudCIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxp
bmVFbGVtZW50TWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdCht
X2J1cy5nZXQoKSwgIm1lc3NhZ2U6OmFwcGxpY2F0aW9uIiwgR19DQUxMQkFDSyhhcHBlbmRQaXBl
bGluZUFwcGxpY2F0aW9uTWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CisKKyAgICAvLyBXZSBhc3Np
Z24gdGhlIGNyZWF0ZWQgaW5zdGFuY2VzIGhlcmUgaW5zdGVhZCBvZiBhZG9wdFJlZigpIGJlY2F1
c2UgZ3N0X2Jpbl9hZGRfbWFueSgpCisgICAgLy8gYmVsb3cgd2lsbCBhbHJlYWR5IHRha2UgdGhl
IGluaXRpYWwgcmVmZXJlbmNlIGFuZCB3ZSBuZWVkIGFuIGFkZGl0aW9uYWwgb25lIGZvciB1cy4K
KyAgICBtX2FwcHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwgbnVsbHB0
cik7CisgICAgbV9kZW11eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXRkZW11eCIsIG51
bGxwdHIpOworICAgIG1fYXBwc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc2lu
ayIsIG51bGxwdHIpOworCisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKG1fZGVtdXguZ2V0KCkp
LCAiYWx3YXlzLWhvbm9yLXRmZHQiLCBUUlVFLCBudWxscHRyKTsKKyAgICBnc3RfYXBwX3Npbmtf
c2V0X2VtaXRfc2lnbmFscyhHU1RfQVBQX1NJTksobV9hcHBzaW5rLmdldCgpKSwgVFJVRSk7Cisg
ICAgZ3N0X2Jhc2Vfc2lua19zZXRfc3luYyhHU1RfQkFTRV9TSU5LKG1fYXBwc2luay5nZXQoKSks
IEZBTFNFKTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzaW5rUGFkID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisgICAg
Z19zaWduYWxfY29ubmVjdChhcHBzaW5rUGFkLmdldCgpLCAibm90aWZ5OjpjYXBzIiwgR19DQUxM
QkFDSyhhcHBlbmRQaXBlbGluZUFwcHNpbmtDYXBzQ2hhbmdlZCksIHRoaXMpOworCisgICAgc2V0
QXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgpOworCisjaWYgIUxPR19ESVNBQkxFRAorICAgIEdSZWZQ
dHI8R3N0UGFkPiBkZW11eGVyUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKG1fZGVtdXguZ2V0KCksICJzaW5rIikpOworICAgIG1fZGVtdXhlckRhdGFFbnRlcmluZ1Bh
ZFByb2JlSW5mb3JtYXRpb24uYXBwZW5kUGlwZWxpbmUgPSB0aGlzOworICAgIG1fZGVtdXhlckRh
dGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAiZGVtdXhlciBkYXRh
IGVudGVyaW5nIjsKKyAgICBtX2RlbXV4ZXJEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9u
LnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShkZW11eGVyUGFkLmdldCgpLCBHU1RfUEFEX1BS
T0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJhY2s+KGFw
cGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9uKSwgJm1fZGVtdXhlckRhdGFFbnRl
cmluZ1BhZFByb2JlSW5mb3JtYXRpb24sIG51bGxwdHIpOworICAgIG1fYXBwc2lua0RhdGFFbnRl
cmluZ1BhZFByb2JlSW5mb3JtYXRpb24uYXBwZW5kUGlwZWxpbmUgPSB0aGlzOworICAgIG1fYXBw
c2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAiYXBwc2lu
ayBkYXRhIGVudGVyaW5nIjsKKyAgICBtX2FwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9y
bWF0aW9uLnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBHU1Rf
UEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJh
Y2s+KGFwcGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9uKSwgJm1fYXBwc2lua0Rh
dGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24sIG51bGxwdHIpOworI2VuZGlmCisKKyAgICAv
LyBUaGVzZSBzaWduYWxzIHdvbid0IGJlIGNvbm5lY3RlZCBvdXRzaWRlIG9mIHRoZSBsaWZldGlt
ZSBvZiAidGhpcyIuCisgICAgZ19zaWduYWxfY29ubmVjdChtX2FwcHNyYy5nZXQoKSwgIm5lZWQt
ZGF0YSIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YSksIHRoaXMpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kZW11eC5nZXQoKSwgInBhZC1hZGRlZCIsIEdfQ0FMTEJB
Q0soYXBwZW5kUGlwZWxpbmVEZW11eGVyUGFkQWRkZWQpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KG1fZGVtdXguZ2V0KCksICJwYWQtcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlw
ZWxpbmVEZW11eGVyUGFkUmVtb3ZlZCksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9h
cHBzaW5rLmdldCgpLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVBcHBz
aW5rTmV3U2FtcGxlKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2FwcHNpbmsuZ2V0
KCksICJlb3MiLCBHX0NBTExCQUNLKGFwcGVuZFBpcGVsaW5lQXBwc2lua0VPUyksIHRoaXMpOwor
CisgICAgLy8gQWRkX21hbnkgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiBhIHJlZmVyZW5jZS4gVGhh
dCdzIHdoeSB3ZSB1c2VkIGFuIGFzc2lnbm1lbnQgYmVmb3JlLgorICAgIGdzdF9iaW5fYWRkX21h
bnkoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgbV9hcHBzcmMuZ2V0KCksIG1fZGVtdXguZ2V0
KCksIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmsobV9hcHBzcmMuZ2V0KCksIG1fZGVt
dXguZ2V0KCkpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
IEdTVF9TVEFURV9SRUFEWSk7Cit9OworCitBcHBlbmRQaXBlbGluZTo6fkFwcGVuZFBpcGVsaW5l
KCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICB7CisgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fbmV3U2FtcGxlTG9jayk7CisgICAgICAgIHNldEFwcGVuZFN0
YXRlKEFwcGVuZFN0YXRlOjpJbnZhbGlkKTsKKyAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRpb24u
bm90aWZ5T25lKCk7CisgICAgfQorCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3BhZEFkZFJlbW92ZUxvY2spOworICAgICAgICBtX3BsYXllclByaXZhdGUgPSBudWxscHRyOwor
ICAgICAgICBtX3BhZEFkZFJlbW92ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICB9CisKKyAg
ICBHU1RfVFJBQ0UoIkRlc3Ryb3lpbmcgQXBwZW5kUGlwZWxpbmUgKCVwKSIsIHRoaXMpOworCisg
ICAgLy8gRklYTUU6IE1heWJlIG5vdGlmeSBhcHBlbmRDb21wbGV0ZSBoZXJlPworCisgICAgaWYg
KG1fcGlwZWxpbmUpIHsKKyAgICAgICAgQVNTRVJUKG1fYnVzKTsKKyAgICAgICAgZ3N0X2J1c19y
ZW1vdmVfc2lnbmFsX3dhdGNoKG1fYnVzLmdldCgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgbV9waXBl
bGluZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fYXBwc3JjKSB7CisgICAgICAgIHJl
bW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9ieV9kYXRhKG1fYXBwc3JjLmdldCgpLCB0aGlzKTsKKyAgICAgICAgbV9hcHBz
cmMgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2RlbXV4KSB7CisjaWYgIUxPR19ESVNB
QkxFRAorICAgICAgICBHUmVmUHRyPEdzdFBhZD4gZGVtdXhlclBhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2RlbXV4LmdldCgpLCAic2luayIpKTsKKyAgICAgICAg
Z3N0X3BhZF9yZW1vdmVfcHJvYmUoZGVtdXhlclBhZC5nZXQoKSwgbV9kZW11eGVyRGF0YUVudGVy
aW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5wcm9iZUlkKTsKKyNlbmRpZgorCisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2RlbXV4LmdldCgpLCB0aGlzKTsKKyAg
ICAgICAgbV9kZW11eCA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fYXBwc2luaykgewor
ICAgICAgICBHUmVmUHRyPEdzdFBhZD4gYXBwc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0KCksICJzaW5rIikpOworICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEoYXBwc2lua1BhZC5nZXQoKSwgdGhpcyk7
CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNpbmsu
Z2V0KCksIHRoaXMpOworCisjaWYgIUxPR19ESVNBQkxFRAorICAgICAgICBnc3RfcGFkX3JlbW92
ZV9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBtX2FwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUlu
Zm9ybWF0aW9uLnByb2JlSWQpOworI2VuZGlmCisKKyAgICAgICAgbV9hcHBzaW5rID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBtX2FwcHNpbmtDYXBzID0gbnVsbHB0cjsKKyAgICBtX2RlbXV4ZXJT
cmNQYWRDYXBzID0gbnVsbHB0cjsKK307CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNsZWFyUGxh
eWVyUHJpdmF0ZSgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIEdT
VF9ERUJVRygiY2xlYW5pbmcgcHJpdmF0ZSBwbGF5ZXIiKTsKKworICAgIHsKKyAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9uZXdTYW1wbGVMb2NrKTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgQXBwZW5kUGlwZWxpbmUgd29uJ3QgcHJvY2VzcyBtb3JlIGRhdGEgZnJvbSBub3cgb24gYW5k
CisgICAgICAgIC8vIGluc3RydWN0IGhhbmRsZU5ld1NhbXBsZSB0byBhYm9ydCBpdHNlbGYgZnJv
bSBub3cgb24gYXMgd2VsbC4KKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoQXBwZW5kU3RhdGU6Oklu
dmFsaWQpOworCisgICAgICAgIC8vIEF3YWtlIGFueSBwZW5kaW5nIGhhbmRsZU5ld1NhbXBsZSBv
cGVyYXRpb24gaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQuCisgICAgICAgIG1fbmV3U2FtcGxlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9wYWRBZGRSZW1vdmVMb2NrKTsKKyAgICAgICAgbV9wbGF5ZXJQcml2YXRlID0gbnVs
bHB0cjsKKyAgICAgICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAg
fQorCisgICAgLy8gQW5kIG5vdyB0aGF0IG5vIGhhbmRsZU5ld1NhbXBsZSBvcGVyYXRpb25zIHdp
bGwgcmVtYWluIHN0YWxsZWQgd2FpdGluZworICAgIC8vIGZvciB0aGUgbWFpbiB0aHJlYWQsIHN0
b3AgdGhlIHBpcGVsaW5lLgorICAgIGlmIChtX3BpcGVsaW5lKQorICAgICAgICBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworfQorCit2b2lk
IEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVFbGVtZW50TWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdl
KQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGNvbnN0IEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsK
KyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJkcm0ta2V5LW5lZWRl
ZCIpKQorICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6
OktleU5lZ290aWF0aW9uKTsKKworICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2Ugd2lsbCB0YWtlIGNhcmUgb2Ygc2V0dGluZyB1cCBlbmNyeXB0aW9uLgorICAgIGlmIChtX3Bs
YXllclByaXZhdGUpCisgICAgICAgIG1fcGxheWVyUHJpdmF0ZS0+aGFuZGxlU3luY01lc3NhZ2Uo
bWVzc2FnZSk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcGxpY2F0aW9uTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2Vf
Z2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1l
KHN0cnVjdHVyZSwgImFwcHNyYy1uZWVkLWRhdGEiKSkgeworICAgICAgICBoYW5kbGVBcHBzcmNO
ZWVkRGF0YVJlY2VpdmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0
X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBzcmMtYnVmZmVyLWxlZnQiKSkgewor
ICAgICAgICBoYW5kbGVBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRl
bXV4ZXItY29ubmVjdC10by1hcHBzaW5rIikpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGRl
bXV4ZXJTcmNQYWQ7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0cnVjdHVyZSwgImRlbXV4
ZXItc3JjLXBhZCIsIEdfVFlQRV9PQkpFQ1QsICZkZW11eGVyU3JjUGFkLm91dFB0cigpLCBudWxs
cHRyKTsKKyAgICAgICAgQVNTRVJUKGRlbXV4ZXJTcmNQYWQpOworICAgICAgICBjb25uZWN0RGVt
dXhlclNyY1BhZFRvQXBwc2luayhkZW11eGVyU3JjUGFkLmdldCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFw
cHNpbmstY2Fwcy1jaGFuZ2VkIikpIHsKKyAgICAgICAgYXBwc2lua0NhcHNDaGFuZ2VkKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShz
dHJ1Y3R1cmUsICJhcHBzaW5rLW5ldy1zYW1wbGUiKSkgeworICAgICAgICBHUmVmUHRyPEdzdFNh
bXBsZT4gbmV3U2FtcGxlOworICAgICAgICBnc3Rfc3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJu
ZXctc2FtcGxlIiwgR1NUX1RZUEVfU0FNUExFLCAmbmV3U2FtcGxlLm91dFB0cigpLCBudWxscHRy
KTsKKworICAgICAgICBhcHBzaW5rTmV3U2FtcGxlKG5ld1NhbXBsZS5nZXQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1
cmUsICJhcHBzaW5rLWVvcyIpKSB7CisgICAgICAgIGFwcHNpbmtFT1MoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFwcGVu
ZFBpcGVsaW5lOjpoYW5kbGVBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCkKK3sKKyAgICBpZiAoIW1f
YXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KSB7CisgICAgICAgIEdTVF9UUkFDRSgiZGlzY2FyZGlu
ZyB1bnRpbCBhdCBsZWFzdCBhIGJ1ZmZlciBsZWF2ZXMgYXBwc3JjIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9hcHBlbmRTdGF0ZSA9PSBBcHBlbmRTdGF0ZTo6T25n
b2luZyB8fCBtX2FwcGVuZFN0YXRlID09IEFwcGVuZFN0YXRlOjpTYW1wbGluZyk7CisgICAgQVNT
RVJUKCFtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQpOworCisgICAgR1NUX1RSQUNFKCJyZWNlaXZl
ZCBuZWVkLWRhdGEgZnJvbSBhcHBzcmMiKTsKKworICAgIG1fYXBwc3JjTmVlZERhdGFSZWNlaXZl
ZCA9IHRydWU7CisgICAgY2hlY2tFbmRPZkFwcGVuZCgpOworfQorCit2b2lkIEFwcGVuZFBpcGVs
aW5lOjpoYW5kbGVBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKQoreworICAgIG1fYXBwc3JjQXRM
ZWFzdEFCdWZmZXJMZWZ0ID0gdHJ1ZTsKKyAgICBHU1RfVFJBQ0UoInJlY2VpdmVkIGJ1ZmZlci1s
ZWZ0IGZyb20gYXBwc3JjIik7CisjaWYgTE9HX0RJU0FCTEVECisgICAgcmVtb3ZlQXBwc3JjRGF0
YUxlYXZpbmdQcm9iZSgpOworI2VuZGlmCit9CisKK2dpbnQgQXBwZW5kUGlwZWxpbmU6OmlkKCkK
K3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKworICAgIGlmIChtX2lkKQor
ICAgICAgICByZXR1cm4gbV9pZDsKKworICAgIHN0YXRpYyBnaW50IHNfdG90YWxBdWRpbyA9IDA7
CisgICAgc3RhdGljIGdpbnQgc190b3RhbFZpZGVvID0gMDsKKyAgICBzdGF0aWMgZ2ludCBzX3Rv
dGFsVGV4dCA9IDA7CisKKyAgICBzd2l0Y2ggKG1fc3RyZWFtVHlwZSkgeworICAgIGNhc2UgQXVk
aW86CisgICAgICAgIG1faWQgPSArK3NfdG90YWxBdWRpbzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBWaWRlbzoKKyAgICAgICAgbV9pZCA9ICsrc190b3RhbFZpZGVvOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRleHQ6CisgICAgICAgIG1faWQgPSArK3NfdG90YWxUZXh0OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFVua25vd246CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBH
U1RfRVJST1IoIlRyeWluZyB0byBnZXQgaWQgZm9yIGEgcGlwZWxpbmUgb2YgVW5rbm93bi9JbnZh
bGlkIHR5cGUiKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIEdTVF9ERUJVRygic3RyZWFtVHlwZT0lZCwgaWQ9JWQiLCBzdGF0aWNf
Y2FzdDxpbnQ+KG1fc3RyZWFtVHlwZSksIG1faWQpOworCisgICAgcmV0dXJuIG1faWQ7Cit9CisK
K3ZvaWQgQXBwZW5kUGlwZWxpbmU6OnNldEFwcGVuZFN0YXRlKEFwcGVuZFN0YXRlIG5ld0FwcGVu
ZFN0YXRlKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBWYWxp
ZCB0cmFuc2l0aW9uczoKKyAgICAvLyBOb3RTdGFydGVkLS0+T25nb2luZy0tPkRhdGFTdGFydmUt
LT5Ob3RTdGFydGVkCisgICAgLy8gICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgYC0+
QWJvcnRpbmctLT5Ob3RTdGFydGVkCisgICAgLy8gICAgICAgICAgIHwgICAgICAgICBgLT5TYW1w
bGluZy3Ct8K3wrctPlNhbXBsaW5nLS0+TGFzdFNhbXBsZS0tPk5vdFN0YXJ0ZWQKKyAgICAvLyAg
ICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YC0+QWJvcnRpbmctLT5Ob3RTdGFydGVkCisgICAgLy8gICAgICAgICAgIHwgICAgICAgICBgLT5L
ZXlOZWdvdGlhdGlvbi0tPk9uZ29pbmctLT5bLi4uXQorICAgIC8vICAgICAgICAgICBgLT5BYm9y
dGluZy0tPk5vdFN0YXJ0ZWQKKyAgICBBcHBlbmRTdGF0ZSBvbGRBcHBlbmRTdGF0ZSA9IG1fYXBw
ZW5kU3RhdGU7CisgICAgQXBwZW5kU3RhdGUgbmV4dEFwcGVuZFN0YXRlID0gQXBwZW5kU3RhdGU6
OkludmFsaWQ7CisKKyAgICBpZiAob2xkQXBwZW5kU3RhdGUgIT0gbmV3QXBwZW5kU3RhdGUpCisg
ICAgICAgIEdTVF9UUkFDRSgiJXMgLS0+ICVzIiwgZHVtcEFwcGVuZFN0YXRlKG9sZEFwcGVuZFN0
YXRlKSwgZHVtcEFwcGVuZFN0YXRlKG5ld0FwcGVuZFN0YXRlKSk7CisKKyAgICBib29sIG9rID0g
ZmFsc2U7CisKKyAgICBzd2l0Y2ggKG9sZEFwcGVuZFN0YXRlKSB7CisgICAgY2FzZSBBcHBlbmRT
dGF0ZTo6Tm90U3RhcnRlZDoKKyAgICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkgeworICAg
ICAgICBjYXNlIEFwcGVuZFN0YXRlOjpPbmdvaW5nOgorICAgICAgICAgICAgb2sgPSB0cnVlOwor
ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9T
VEFURV9QTEFZSU5HKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFwcGVuZFN0
YXRlOjpOb3RTdGFydGVkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgaWYg
KG1fcGVuZGluZ0J1ZmZlcikgeworICAgICAgICAgICAgICAgIEdTVF9UUkFDRSgicHVzaGluZyBw
ZW5kaW5nIGJ1ZmZlciAlcCIsIG1fcGVuZGluZ0J1ZmZlci5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoR1NUX0FQUF9TUkMoYXBwc3JjKCkpLCBtX3BlbmRp
bmdCdWZmZXIubGVha1JlZigpKTsKKyAgICAgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBB
cHBlbmRTdGF0ZTo6T25nb2luZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpBYm9ydGluZzoKKyAgICAgICAgICAgIG9rID0gdHJ1
ZTsKKyAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IEFwcGVuZFN0YXRlOjpOb3RTdGFydGVk
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6OkludmFsaWQ6
CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXBwZW5kU3RhdGU6OktleU5lZ290aWF0aW9uOgorICAgICAgICBzd2l0Y2ggKG5ld0Fw
cGVuZFN0YXRlKSB7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6Ok9uZ29pbmc6CisgICAgICAg
IGNhc2UgQXBwZW5kU3RhdGU6OkludmFsaWQ6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXBwZW5kU3RhdGU6Ok9uZ29pbmc6Cisg
ICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0
ZTo6S2V5TmVnb3RpYXRpb246CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6OlNhbXBsaW5nOgor
ICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6OkRhdGFTdGFy
dmU6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBHU1RfREVCVUcoInJlY2Vp
dmVkIGFsbCBwZW5kaW5nIHNhbXBsZXMiKTsKKyAgICAgICAgICAgIG1fc291cmNlQnVmZmVyUHJp
dmF0ZS0+ZGlkUmVjZWl2ZUFsbFBlbmRpbmdTYW1wbGVzKCk7CisgICAgICAgICAgICBpZiAobV9h
Ym9ydFBlbmRpbmcpCisgICAgICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gQXBwZW5kU3Rh
dGU6OkFib3J0aW5nOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRBcHBl
bmRTdGF0ZSA9IEFwcGVuZFN0YXRlOjpOb3RTdGFydGVkOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFwcGVuZFN0YXRlOjpEYXRhU3RhcnZlOgorICAgICAgICBzd2l0Y2gg
KG5ld0FwcGVuZFN0YXRlKSB7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ6
CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6OkludmFsaWQ6CisgICAgICAgICAgICBvayA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6QWJvcnRp
bmc6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUg
PSBBcHBlbmRTdGF0ZTo6Tm90U3RhcnRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBcHBlbmRTdGF0ZTo6U2FtcGxpbmc6CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5k
U3RhdGUpIHsKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6U2FtcGxpbmc6CisgICAgICAgIGNh
c2UgQXBwZW5kU3RhdGU6OkludmFsaWQ6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6TGFzdFNhbXBsZToKKyAgICAg
ICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIEdTVF9ERUJVRygicmVjZWl2ZWQgYWxsIHBl
bmRpbmcgc2FtcGxlcyIpOworICAgICAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLT5kaWRS
ZWNlaXZlQWxsUGVuZGluZ1NhbXBsZXMoKTsKKyAgICAgICAgICAgIGlmIChtX2Fib3J0UGVuZGlu
ZykKKyAgICAgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBBcHBlbmRTdGF0ZTo6QWJvcnRp
bmc7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0g
QXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXBwZW5kU3RhdGU6Okxhc3RTYW1wbGU6CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5k
U3RhdGUpIHsKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6Tm90U3RhcnRlZDoKKyAgICAgICAg
Y2FzZSBBcHBlbmRTdGF0ZTo6SW52YWxpZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpBYm9ydGluZzoKKyAgICAg
ICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IEFwcGVuZFN0
YXRlOjpOb3RTdGFydGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFw
cGVuZFN0YXRlOjpBYm9ydGluZzoKKyAgICAgICAgc3dpdGNoIChuZXdBcHBlbmRTdGF0ZSkgewor
ICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpOb3RTdGFydGVkOgorICAgICAgICAgICAgb2sgPSB0
cnVlOworICAgICAgICAgICAgcmVzZXRQaXBlbGluZSgpOworICAgICAgICAgICAgbV9hYm9ydFBl
bmRpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IEFwcGVuZFN0YXRl
OjpOb3RTdGFydGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXBwZW5kU3Rh
dGU6OkludmFsaWQ6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQXBwZW5kU3RhdGU6OkludmFsaWQ6CisgICAgICAgIG9rID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKG9rKQorICAgICAgICBtX2FwcGVu
ZFN0YXRlID0gbmV3QXBwZW5kU3RhdGU7CisgICAgZWxzZQorICAgICAgICBHU1RfRVJST1IoIklu
dmFsaWQgYXBwZW5kIHN0YXRlIHRyYW5zaXRpb24gJXMgLS0+ICVzIiwgZHVtcEFwcGVuZFN0YXRl
KG9sZEFwcGVuZFN0YXRlKSwgZHVtcEFwcGVuZFN0YXRlKG5ld0FwcGVuZFN0YXRlKSk7CisKKyAg
ICBBU1NFUlQob2spOworCisgICAgaWYgKG5leHRBcHBlbmRTdGF0ZSAhPSBBcHBlbmRTdGF0ZTo6
SW52YWxpZCkKKyAgICAgICAgc2V0QXBwZW5kU3RhdGUobmV4dEFwcGVuZFN0YXRlKTsKK30KKwor
dm9pZCBBcHBlbmRQaXBlbGluZTo6cGFyc2VEZW11eGVyU3JjUGFkQ2FwcyhHc3RDYXBzKiBkZW11
eGVyU3JjUGFkQ2FwcykKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAg
ICBtX2RlbXV4ZXJTcmNQYWRDYXBzID0gYWRvcHRHUmVmKGRlbXV4ZXJTcmNQYWRDYXBzKTsKKyAg
ICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6
OlVua25vd247CisKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9z
dHJ1Y3R1cmUobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSwgMCk7CisgICAgYm9vbCBzaXplQ29u
ZmlndXJlZCA9IGZhbHNlOworCisjaWYgR1NUX0NIRUNLX1ZFUlNJT04oMSwgNSwgMykgJiYgRU5B
QkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEpCisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25h
bWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1jZW5jIikpIHsKKyAgICAgICAgLy8gQW55IHBy
ZXZpb3VzIGRlY3J5cHRvciBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcGlwZWxp
bmUgYnkgZGlzY29ubmVjdEZyb21BcHBTaW5rRnJvbVN0cmVhbWluZ1RocmVhZCgpCisgICAgICAg
IEFTU0VSVCghbV9kZWNyeXB0b3IpOworCisgICAgICAgIG1fZGVjcnlwdG9yID0gYWRvcHRHUmVm
KFdlYkNvcmU6OmNyZWF0ZUdzdERlY3J5cHRvcihnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3Ry
dWN0dXJlLCAicHJvdGVjdGlvbi1zeXN0ZW0iKSkpOworICAgICAgICBpZiAoIW1fZGVjcnlwdG9y
KSB7CisgICAgICAgICAgICBHU1RfRVJST1IoImRlY3J5cHRvciBub3QgZm91bmQgZm9yIGNhcHM6
ICUiIEdTVF9QVFJfRk9STUFULCBtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGdjaGFyKiBvcmlnaW5hbE1l
ZGlhVHlwZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJvcmlnaW5hbC1t
ZWRpYS10eXBlIik7CisKKyAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVmaXgob3JpZ2luYWxNZWRp
YVR5cGUsICJ2aWRlby8iKSkgeworICAgICAgICAgICAgaW50IHdpZHRoID0gMDsKKyAgICAgICAg
ICAgIGludCBoZWlnaHQgPSAwOworICAgICAgICAgICAgZmxvYXQgZmluYWxIZWlnaHQgPSAwOwor
CisgICAgICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgIndpZHRo
IiwgJndpZHRoKSAmJiBnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAiaGVpZ2h0Iiwg
JmhlaWdodCkpIHsKKyAgICAgICAgICAgICAgICBpbnQgcmF0aW9OdW1lcmF0b3IgPSAxOworICAg
ICAgICAgICAgICAgIGludCByYXRpb0Rlbm9taW5hdG9yID0gMTsKKworICAgICAgICAgICAgICAg
IGdzdF9zdHJ1Y3R1cmVfZ2V0X2ZyYWN0aW9uKHN0cnVjdHVyZSwgInBpeGVsLWFzcGVjdC1yYXRp
byIsICZyYXRpb051bWVyYXRvciwgJnJhdGlvRGVub21pbmF0b3IpOworICAgICAgICAgICAgICAg
IGZpbmFsSGVpZ2h0ID0gaGVpZ2h0ICogKChmbG9hdCkgcmF0aW9EZW5vbWluYXRvciAvIChmbG9h
dCkgcmF0aW9OdW1lcmF0b3IpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX3ByZXNl
bnRhdGlvblNpemUgPSBXZWJDb3JlOjpGbG9hdFNpemUod2lkdGgsIGZpbmFsSGVpZ2h0KTsKKyAg
ICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdT
dHJlYW1lcjo6VmlkZW87CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3ByZXNlbnRh
dGlvblNpemUgPSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIGlmIChnX3N0cl9o
YXNfcHJlZml4KG9yaWdpbmFsTWVkaWFUeXBlLCAiYXVkaW8vIikpCisgICAgICAgICAgICAgICAg
bV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpB
dWRpbzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGdfc3RyX2hhc19wcmVmaXgob3JpZ2luYWxNZWRp
YVR5cGUsICJ0ZXh0LyIpKQorICAgICAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6
Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDsKKyAgICAgICAgfQorICAgICAg
ICBzaXplQ29uZmlndXJlZCA9IHRydWU7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoIXNpemVD
b25maWd1cmVkKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHN0cnVjdHVyZU5hbWUgPSBnc3Rfc3Ry
dWN0dXJlX2dldF9uYW1lKHN0cnVjdHVyZSk7CisgICAgICAgIEdzdFZpZGVvSW5mbyBpbmZvOwor
CisgICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KHN0cnVjdHVyZU5hbWUsICJ2aWRlby8iKSAm
JiBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJmluZm8sIGRlbXV4ZXJTcmNQYWRDYXBzKSkgewor
ICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGhlaWdodDsKKworICAgICAgICAgICAgd2lkdGggPSBp
bmZvLndpZHRoOworICAgICAgICAgICAgaGVpZ2h0ID0gaW5mby5oZWlnaHQgKiAoKGZsb2F0KSBp
bmZvLnBhcl9kIC8gKGZsb2F0KSBpbmZvLnBhcl9uKTsKKworICAgICAgICAgICAgbV9wcmVzZW50
YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICAg
ICAgbV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpWaWRlbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcHJlc2VudGF0aW9uU2l6
ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOworICAgICAgICAgICAgaWYgKGdfc3RyX2hhc19wcmVm
aXgoc3RydWN0dXJlTmFtZSwgImF1ZGlvLyIpKQorICAgICAgICAgICAgICAgIG1fc3RyZWFtVHlw
ZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW87CisgICAg
ICAgICAgICBlbHNlIGlmIChnX3N0cl9oYXNfcHJlZml4KHN0cnVjdHVyZU5hbWUsICJ0ZXh0LyIp
KQorICAgICAgICAgICAgICAgIG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3Ry
ZWFtVHlwZUdTdHJlYW1lcjo6VGV4dDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBBcHBl
bmRQaXBlbGluZTo6YXBwc2lua0NhcHNDaGFuZ2VkKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01h
aW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fYXBwc2luaykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChtX2FwcHNpbmsuZ2V0KCksICJzaW5rIikpOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2Fw
cyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMocGFkLmdldCgpKSk7CisKKyAg
ICBpZiAoIWNhcHMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3
ZSdyZSByaWdodCBhZnRlciBhIG5ldyB0cmFjayBoYXMgYXBwZWFyZWQuIE90aGVyd2lzZSwgaXQn
cyBhIGNhcHMgY2hhbmdlIGluc2lkZSB0aGUgc2FtZSB0cmFjay4KKyAgICBib29sIHByZXZpb3Vz
Q2Fwc1dlcmVOdWxsID0gIW1fYXBwc2lua0NhcHM7CisKKyAgICBpZiAoZ3N0X2NhcHNfcmVwbGFj
ZSgmbV9hcHBzaW5rQ2Fwcy5vdXRQdHIoKSwgY2Fwcy5nZXQoKSkpIHsKKyAgICAgICAgaWYgKG1f
cGxheWVyUHJpdmF0ZSAmJiBwcmV2aW91c0NhcHNXZXJlTnVsbCkKKyAgICAgICAgICAgIG1fcGxh
eWVyUHJpdmF0ZS0+dHJhY2tEZXRlY3RlZCh0aGlzLCBtX29sZFRyYWNrLCBtX3RyYWNrKTsKKyAg
ICAgICAgZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudCgpOworICAgICAgICBnc3RfZWxl
bWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICAg
IH0KK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6Y2hlY2tFbmRPZkFwcGVuZCgpCit7CisgICAg
QVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKCFtX2FwcHNyY05lZWREYXRh
UmVjZWl2ZWQgfHwgKG1fYXBwZW5kU3RhdGUgIT0gQXBwZW5kU3RhdGU6Ok9uZ29pbmcgJiYgbV9h
cHBlbmRTdGF0ZSAhPSBBcHBlbmRTdGF0ZTo6U2FtcGxpbmcpKQorICAgICAgICByZXR1cm47CisK
KyAgICBHU1RfVFJBQ0UoImVuZCBvZiBhcHBlbmQgZGF0YSBtYXJrIHdhcyByZWNlaXZlZCIpOwor
CisgICAgc3dpdGNoIChtX2FwcGVuZFN0YXRlKSB7CisgICAgY2FzZSBBcHBlbmRTdGF0ZTo6T25n
b2luZzoKKyAgICAgICAgR1NUX1RSQUNFKCJEYXRhU3RhcnZlIik7CisgICAgICAgIG1fYXBwc3Jj
TmVlZERhdGFSZWNlaXZlZCA9IGZhbHNlOworICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRT
dGF0ZTo6RGF0YVN0YXJ2ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXBwZW5kU3RhdGU6
OlNhbXBsaW5nOgorICAgICAgICBHU1RfVFJBQ0UoIkxhc3RTYW1wbGUiKTsKKyAgICAgICAgbV9h
cHBzcmNOZWVkRGF0YVJlY2VpdmVkID0gZmFsc2U7CisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFw
cGVuZFN0YXRlOjpMYXN0U2FtcGxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
dm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lua05ld1NhbXBsZShHc3RTYW1wbGUqIHNhbXBsZSkK
K3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICB7CisgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbmV3U2FtcGxlTG9jayk7CisKKyAgICAgICAgLy8gSWdub3JlIHNh
bXBsZXMgaWYgd2UncmUgbm90IGV4cGVjdGluZyB0aGVtLiBSZWZ1c2UgcHJvY2Vzc2luZyBpZiB3
ZSdyZSBpbiBJbnZhbGlkIHN0YXRlLgorICAgICAgICBpZiAobV9hcHBlbmRTdGF0ZSAhPSBBcHBl
bmRTdGF0ZTo6T25nb2luZyAmJiBtX2FwcGVuZFN0YXRlICE9IEFwcGVuZFN0YXRlOjpTYW1wbGlu
ZykgeworICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVuZXhwZWN0ZWQgc2FtcGxlLCBhcHBlbmRT
dGF0ZT0lcyIsIGR1bXBBcHBlbmRTdGF0ZShtX2FwcGVuZFN0YXRlKSk7CisgICAgICAgICAgICAv
LyBGSVhNRTogUmV0dXJuIEVSUk9SIGFuZCBmaW5kIGEgbW9yZSByb2J1c3Qgd2F5IHRvIGRldGVj
dCB0aGF0IGFsbCB0aGUKKyAgICAgICAgICAgIC8vIGRhdGEgaGFzIGJlZW4gcHJvY2Vzc2VkLCBz
byB3ZSBkb24ndCBuZWVkIHRvIHJlc29ydCB0byB0aGVzZSBoYWNrcy4KKyAgICAgICAgICAgIC8v
IEFsbCBpbiBhbGwsIHJldHVybiBPSywgZXZlbiBpZiBpdCdzIG5vdCB0aGUgcHJvcGVyIHRoaW5n
IHRvIGRvLiBXZSBkb24ndCB3YW50IHRvIGJyZWFrIHRoZSBkZW11eGVyLgorICAgICAgICAgICAg
bV9mbG93UmV0dXJuID0gR1NUX0ZMT1dfT0s7CisgICAgICAgICAgICBtX25ld1NhbXBsZUNvbmRp
dGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIFJlZlB0cjxHU3RyZWFtZXJNZWRpYVNhbXBsZT4gbWVkaWFTYW1wbGUgPSBXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYVNhbXBsZTo6Y3JlYXRlKHNhbXBsZSwgbV9wcmVzZW50YXRpb25TaXplLCB0
cmFja0lkKCkpOworCisgICAgICAgIEdTVF9UUkFDRSgiYXBwZW5kOiB0cmFja0lkPSVzIFBUUz0l
ZiBwcmVzZW50YXRpb25TaXplPSUuMGZ4JS4wZiIsIG1lZGlhU2FtcGxlLT50cmFja0lEKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKS50b0Zs
b2F0KCksIG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25TaXplKCkud2lkdGgoKSwgbWVkaWFTYW1w
bGUtPnByZXNlbnRhdGlvblNpemUoKS5oZWlnaHQoKSk7CisKKyAgICAgICAgLy8gSWYgd2UncmUg
YmV5b25kIHRoZSBkdXJhdGlvbiwgaWdub3JlIHRoaXMgc2FtcGxlIGFuZCB0aGUgcmVtYWluaW5n
IG9uZXMuCisgICAgICAgIE1lZGlhVGltZSBkdXJhdGlvbiA9IG1fbWVkaWFTb3VyY2VDbGllbnQt
PmR1cmF0aW9uKCk7CisgICAgICAgIGlmIChkdXJhdGlvbi5pc1ZhbGlkKCkgJiYgIWR1cmF0aW9u
LmluZGVmaW5pdGVUaW1lKCkgJiYgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKSA+IGR1
cmF0aW9uKSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIkRldGVjdGVkIHNhbXBsZSAoJWYpIGJl
eW9uZCB0aGUgZHVyYXRpb24gKCVmKSwgZGVjbGFyaW5nIExhc3RTYW1wbGUiLCBtZWRpYVNhbXBs
ZS0+cHJlc2VudGF0aW9uVGltZSgpLnRvRmxvYXQoKSwgZHVyYXRpb24udG9GbG9hdCgpKTsKKyAg
ICAgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVuZFN0YXRlOjpMYXN0U2FtcGxlKTsKKyAgICAg
ICAgICAgIG1fZmxvd1JldHVybiA9IEdTVF9GTE9XX09LOworICAgICAgICAgICAgbV9uZXdTYW1w
bGVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBBZGQgYSBnYXAgc2FtcGxlIGlmIGEgZ2FwIGlzIGRldGVjdGVkIGJlZm9y
ZSB0aGUgZmlyc3Qgc2FtcGxlLgorICAgICAgICBpZiAobWVkaWFTYW1wbGUtPmRlY29kZVRpbWUo
KSA9PSBNZWRpYVRpbWU6Onplcm9UaW1lKCkKKyAgICAgICAgICAgICYmIG1lZGlhU2FtcGxlLT5w
cmVzZW50YXRpb25UaW1lKCkgPiBNZWRpYVRpbWU6Onplcm9UaW1lKCkKKyAgICAgICAgICAgICYm
IG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkgPD0gTWVkaWFUaW1lOjpjcmVhdGVXaXRo
RG91YmxlKDAuMSkpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiQWRkaW5nIGdhcCBvZmZzZXQi
KTsKKyAgICAgICAgICAgIG1lZGlhU2FtcGxlLT5hcHBseVB0c09mZnNldChNZWRpYVRpbWU6Onpl
cm9UaW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLT5k
aWRSZWNlaXZlU2FtcGxlKG1lZGlhU2FtcGxlKTsKKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoQXBw
ZW5kU3RhdGU6OlNhbXBsaW5nKTsKKyAgICAgICAgbV9mbG93UmV0dXJuID0gR1NUX0ZMT1dfT0s7
CisgICAgICAgIG1fbmV3U2FtcGxlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIH0KKworICAg
IGNoZWNrRW5kT2ZBcHBlbmQoKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lua0VP
UygpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgc3dpdGNoICht
X2FwcGVuZFN0YXRlKSB7CisgICAgY2FzZSBBcHBlbmRTdGF0ZTo6QWJvcnRpbmc6CisgICAgICAg
IC8vIElnbm9yZWQuIE9wZXJhdGlvbiBjb21wbGV0aW9uIHdpbGwgYmUgbWFuYWdlZCBieSB0aGUg
QWJvcnRpbmctPk5vdFN0YXJ0ZWQgdHJhbnNpdGlvbi4KKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQXBwZW5kU3RhdGU6Ok9uZ29pbmc6CisgICAgICAgIC8vIEZpbmlzaCBPbmdvaW5nIGFuZCBT
YW1wbGluZyBzdGF0ZXMuCisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVuZFN0YXRlOjpEYXRh
U3RhcnZlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcHBlbmRTdGF0ZTo6U2FtcGxpbmc6
CisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVuZFN0YXRlOjpMYXN0U2FtcGxlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0RFQlVHKCJVbmV4cGVjdGVkIEVP
UyIpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmRp
ZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFp
blRocmVhZCgpKTsKKworICAgIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6Oklu
aXRpYWxpemF0aW9uU2VnbWVudCBpbml0aWFsaXphdGlvblNlZ21lbnQ7CisKKyAgICBHU1RfREVC
VUcoIk5vdGlmeWluZyBTb3VyY2VCdWZmZXIgZm9yIHRyYWNrICVzIiwgbV90cmFjay0+aWQoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpbml0aWFsaXphdGlvblNlZ21lbnQuZHVyYXRp
b24gPSBtX21lZGlhU291cmNlQ2xpZW50LT5kdXJhdGlvbigpOworICAgIHN3aXRjaCAobV9zdHJl
YW1UeXBlKSB7CisgICAgY2FzZSBBdWRpbzogeworICAgICAgICBXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQcml2YXRlQ2xpZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQ6OkF1ZGlvVHJhY2tJbmZvcm1h
dGlvbiBpbmZvOworICAgICAgICBpbmZvLnRyYWNrID0gc3RhdGljX2Nhc3Q8QXVkaW9UcmFja1By
aXZhdGVHU3RyZWFtZXIqPihtX3RyYWNrLmdldCgpKTsKKyAgICAgICAgaW5mby5kZXNjcmlwdGlv
biA9IFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb246OmNyZWF0ZShtX2RlbXV4ZXJT
cmNQYWRDYXBzLmdldCgpKTsKKyAgICAgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LmF1ZGlvVHJh
Y2tzLmFwcGVuZChpbmZvKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVmlkZW86
IHsKKyAgICAgICAgV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6
YXRpb25TZWdtZW50OjpWaWRlb1RyYWNrSW5mb3JtYXRpb24gaW5mbzsKKyAgICAgICAgaW5mby50
cmFjayA9IHN0YXRpY19jYXN0PFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyKj4obV90cmFjay5n
ZXQoKSk7CisgICAgICAgIGluZm8uZGVzY3JpcHRpb24gPSBXZWJDb3JlOjpHU3RyZWFtZXJNZWRp
YURlc2NyaXB0aW9uOjpjcmVhdGUobV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSk7CisgICAgICAg
IGluaXRpYWxpemF0aW9uU2VnbWVudC52aWRlb1RyYWNrcy5hcHBlbmQoaW5mbyk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBHU1RfRVJST1IoIlVuc3VwcG9y
dGVkIG9yIHVua25vd24gc3RyZWFtIHR5cGUiKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+
ZGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChpbml0aWFsaXphdGlvblNlZ21lbnQpOwor
fQorCitBdG9taWNTdHJpbmcgQXBwZW5kUGlwZWxpbmU6OnRyYWNrSWQoKQoreworICAgIEFTU0VS
VChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV90cmFjaykKKyAgICAgICAgcmV0
dXJuIEF0b21pY1N0cmluZygpOworCisgICAgcmV0dXJuIG1fdHJhY2stPmlkKCk7Cit9CisKK3Zv
aWQgQXBwZW5kUGlwZWxpbmU6OnJlc2V0UGlwZWxpbmUoKQoreworICAgIEFTU0VSVChXVEY6Omlz
TWFpblRocmVhZCgpKTsKKyAgICBHU1RfREVCVUcoInJlc2V0dGluZyBwaXBlbGluZSIpOworICAg
IG1fYXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0ID0gZmFsc2U7CisgICAgc2V0QXBwc3JjRGF0YUxl
YXZpbmdQcm9iZSgpOworCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX25ld1Nh
bXBsZUxvY2spOworICAgICAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAg
ICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9S
RUFEWSk7CisgICAgICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBu
dWxscHRyLCBudWxscHRyLCAwKTsKKyAgICB9CisKKyNpZiAoIShMT0dfRElTQUJMRUQgfHwgR1NU
X0RJU0FCTEVfR1NUX0RFQlVHKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgaXMgaGVyZSBmb3Ig
ZGVidWdnaW5nIHB1cnBvc2VzLiBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGhhdmUgaXQgYXMg
Y2xhc3MgbWVtYmVyLgorICAgICAgICBXVEY6OlN0cmluZyAgZG90RmlsZU5hbWUgPSBTdHJpbmc6
OmZvcm1hdCgicmVzZXQtcGlwZWxpbmUtJWQiLCArK2kpOworICAgICAgICBnc3RfZGVidWdfYmlu
X3RvX2RvdF9maWxlKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9T
SE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorI2VuZGlmCisKK30K
Kwordm9pZCBBcHBlbmRQaXBlbGluZTo6c2V0QXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgpCit7Cisg
ICAgaWYgKG1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBHU1RfVFJBQ0UoInNldHRpbmcgYXBwc3JjIGRhdGEgbGVhdmluZyBwcm9iZSIpOworCisgICAg
R1JlZlB0cjxHc3RQYWQ+IGFwcHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZChtX2FwcHNyYy5nZXQoKSwgInNyYyIpKTsKKyAgICBtX2FwcHNyY0RhdGFMZWF2aW5n
UHJvYmVJZCA9IGdzdF9wYWRfYWRkX3Byb2JlKGFwcHNyY1BhZC5nZXQoKSwgR1NUX1BBRF9QUk9C
RV9UWVBFX0JVRkZFUiwgcmVpbnRlcnByZXRfY2FzdDxHc3RQYWRQcm9iZUNhbGxiYWNrPihhcHBl
bmRQaXBlbGluZUFwcHNyY0RhdGFMZWF2aW5nKSwgdGhpcywgbnVsbHB0cik7Cit9CisKK3ZvaWQg
QXBwZW5kUGlwZWxpbmU6OnJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKQoreworICAgIGlm
ICghbV9hcHBzcmNEYXRhTGVhdmluZ1Byb2JlSWQpCisgICAgICAgIHJldHVybjsKKworICAgIEdT
VF9UUkFDRSgicmVtb3ZpbmcgYXBwc3JjIGRhdGEgbGVhdmluZyBwcm9iZSIpOworCisgICAgR1Jl
ZlB0cjxHc3RQYWQ+IGFwcHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChtX2FwcHNyYy5nZXQoKSwgInNyYyIpKTsKKyAgICBnc3RfcGFkX3JlbW92ZV9wcm9iZShh
cHBzcmNQYWQuZ2V0KCksIG1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkKTsKKyAgICBtX2FwcHNy
Y0RhdGFMZWF2aW5nUHJvYmVJZCA9IDA7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmFib3J0
KCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgR1NUX0RFQlVHKCJh
Ym9ydGluZyIpOworCisgICAgbV9wZW5kaW5nQnVmZmVyID0gbnVsbHB0cjsKKworICAgIC8vIEFi
b3J0IGFscmVhZHkgb25nb2luZy4KKyAgICBpZiAobV9hYm9ydFBlbmRpbmcpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fYWJvcnRQZW5kaW5nID0gdHJ1ZTsKKyAgICBpZiAobV9hcHBlbmRTdGF0
ZSA9PSBBcHBlbmRTdGF0ZTo6Tm90U3RhcnRlZCkKKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoQXBw
ZW5kU3RhdGU6OkFib3J0aW5nKTsKKyAgICAvLyBFbHNlLCB0aGUgYXV0b21hdGljIHN0YXRlIHRy
YW5zaXRpb25zIHdpbGwgdGFrZSBjYXJlIHdoZW4gdGhlIG9uZ29pbmcgYXBwZW5kIGZpbmlzaGVz
LgorfQorCitHc3RGbG93UmV0dXJuIEFwcGVuZFBpcGVsaW5lOjpwdXNoTmV3QnVmZmVyKEdzdEJ1
ZmZlciogYnVmZmVyKQoreworICAgIEdzdEZsb3dSZXR1cm4gcmVzdWx0OworCisgICAgaWYgKG1f
YWJvcnRQZW5kaW5nKSB7CisgICAgICAgIG1fcGVuZGluZ0J1ZmZlciA9IGFkb3B0R1JlZihidWZm
ZXIpOworICAgICAgICByZXN1bHQgPSBHU1RfRkxPV19PSzsKKyAgICB9IGVsc2UgeworICAgICAg
ICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6Ok9uZ29pbmcpOwor
ICAgICAgICBHU1RfVFJBQ0UoInB1c2hpbmcgbmV3IGJ1ZmZlciAlcCIsIGJ1ZmZlcik7CisgICAg
ICAgIHJlc3VsdCA9IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKEdTVF9BUFBfU1JDKGFwcHNyYygp
KSwgYnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEFwcGVu
ZFBpcGVsaW5lOjpyZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKQoreworICAgIEdTVF9U
UkFDRSgiYnVmZmVyIGxlZnQgYXBwc3JjLCByZXBvc3RpbmcgdG8gYnVzIik7CisgICAgR3N0U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXBwc3JjLWJ1ZmZl
ci1sZWZ0Iik7CisgICAgR3N0TWVzc2FnZSogbWVzc2FnZSA9IGdzdF9tZXNzYWdlX25ld19hcHBs
aWNhdGlvbihHU1RfT0JKRUNUKG1fYXBwc3JjLmdldCgpKSwgc3RydWN0dXJlKTsKKyAgICBnc3Rf
YnVzX3Bvc3QobV9idXMuZ2V0KCksIG1lc3NhZ2UpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5l
OjpyZXBvcnRBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCkKK3sKKyAgICBHU1RfVFJBQ0UoInJlY2Vp
dmVkIG5lZWQtZGF0YSBzaWduYWwgYXQgYXBwc3JjLCByZXBvc3RpbmcgdG8gYnVzIik7CisgICAg
R3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0dXJlX25ld19lbXB0eSgiYXBwc3Jj
LW5lZWQtZGF0YSIpOworICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdf
YXBwbGljYXRpb24oR1NUX09CSkVDVChtX2FwcHNyYy5nZXQoKSksIHN0cnVjdHVyZSk7CisgICAg
Z3N0X2J1c19wb3N0KG1fYnVzLmdldCgpLCBtZXNzYWdlKTsKK30KKworR3N0Rmxvd1JldHVybiBB
cHBlbmRQaXBlbGluZTo6aGFuZGxlTmV3QXBwc2lua1NhbXBsZShHc3RFbGVtZW50KiBhcHBzaW5r
KQoreworICAgIEFTU0VSVCghV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICAvLyBFdmVuIGlm
IHdlJ3JlIGRpc2FibGVkLCBpdCdzIGltcG9ydGFudCB0byBwdWxsIHRoZSBzYW1wbGUgb3V0IGFu
eXdheSB0bworICAgIC8vIGF2b2lkIGRlYWRsb2NrcyB3aGVuIGNoYW5naW5nIHRvIEdTVF9TVEFU
RV9OVUxMIGhhdmluZyBhIG5vbiBlbXB0eSBhcHBzaW5rLgorICAgIEdSZWZQdHI8R3N0U2FtcGxl
PiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lO
SyhhcHBzaW5rKSkpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbmV3U2FtcGxlTG9jayk7CisK
KyAgICBpZiAoIW1fcGxheWVyUHJpdmF0ZSB8fCBtX2FwcGVuZFN0YXRlID09IEFwcGVuZFN0YXRl
OjpJbnZhbGlkKSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJBcHBlbmRQaXBlbGluZSBoYXMgYmVl
biBkaXNhYmxlZCwgaWdub3JpbmcgdGhpcyBzYW1wbGUiKTsKKyAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX0VSUk9SOworICAgIH0KKworICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0
cnVjdHVyZV9uZXcoImFwcHNpbmstbmV3LXNhbXBsZSIsICJuZXctc2FtcGxlIiwgR1NUX1RZUEVf
U0FNUExFLCBzYW1wbGUuZ2V0KCksIG51bGxwdHIpOworICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2Ug
PSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChhcHBzaW5rKSwgc3RydWN0
dXJlKTsKKyAgICBnc3RfYnVzX3Bvc3QobV9idXMuZ2V0KCksIG1lc3NhZ2UpOworICAgIEdTVF9U
UkFDRSgiYXBwc2luay1uZXctc2FtcGxlIG1lc3NhZ2UgcG9zdGVkIHRvIGJ1cyIpOworCisgICAg
bV9uZXdTYW1wbGVDb25kaXRpb24ud2FpdChtX25ld1NhbXBsZUxvY2spOworICAgIC8vIFdlJ3Zl
IGJlZW4gYXdha2VuIGJlY2F1c2UgdGhlIHNhbXBsZSB3YXMgcHJvY2Vzc2VkIG9yIGJlY2F1c2Ug
b2YKKyAgICAvLyBhbiBleGNlcHRpb25hbCBjb25kaXRpb24gKGVudGVyZWQgaW4gSW52YWxpZCBz
dGF0ZSwgZGVzdHJ1Y3RvciwgZXRjLikuCisgICAgLy8gV2UgY2FuJ3QgcmVsaWFibHkgZGVsZXRl
IGluZm8gaGVyZSwgYXBwZW5kUGlwZWxpbmVBcHBzaW5rTmV3U2FtcGxlTWFpblRocmVhZCB3aWxs
IGRvIGl0LgorCisgICAgcmV0dXJuIG1fZmxvd1JldHVybjsKK30KKwordm9pZCBBcHBlbmRQaXBl
bGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCog
ZGVtdXhlclNyY1BhZCkKK3sKKyAgICBpZiAoIW1fYXBwc2luaykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR1NUX0RFQlVHKCJjb25uZWN0aW5nIHRvIGFwcHNpbmsiKTsKKworICAgIEdSZWZQdHI8
R3N0UGFkPiBhcHBzaW5rU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGlj
X3BhZChtX2FwcHNpbmsuZ2V0KCksICJzaW5rIikpOworCisgICAgLy8gT25seSBvbmUgc3RyZWFt
IHBlciBkZW11eGVyIGlzIHN1cHBvcnRlZC4KKyAgICBBU1NFUlQoIWdzdF9wYWRfaXNfbGlua2Vk
KGFwcHNpbmtTaW5rUGFkLmdldCgpKSk7CisKKyAgICBnaW50NjQgdGltZUxlbmd0aCA9IDA7Cisg
ICAgaWYgKGdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fZGVtdXguZ2V0KCksIEdTVF9GT1JN
QVRfVElNRSwgJnRpbWVMZW5ndGgpCisgICAgICAgICYmIHN0YXRpY19jYXN0PGd1aW50NjQ+KHRp
bWVMZW5ndGgpICE9IEdTVF9DTE9DS19USU1FX05PTkUpCisgICAgICAgIG1faW5pdGlhbER1cmF0
aW9uID0gTWVkaWFUaW1lKEdTVF9USU1FX0FTX1VTRUNPTkRTKHRpbWVMZW5ndGgpLCBHX1VTRUNf
UEVSX1NFQyk7CisgICAgZWxzZQorICAgICAgICBtX2luaXRpYWxEdXJhdGlvbiA9IE1lZGlhVGlt
ZTo6cG9zaXRpdmVJbmZpbml0ZVRpbWUoKTsKKworICAgIGlmIChXVEY6OmlzTWFpblRocmVhZCgp
KQorICAgICAgICBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayhkZW11eGVyU3JjUGFkKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgLy8gQ2FsbCBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lu
aygpIGluIHRoZSBtYWluIHRocmVhZCBhbmQgd2FpdC4KKyAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9wYWRBZGRSZW1vdmVMb2NrKTsKKyAgICAgICAgaWYgKCFtX3BsYXllclByaXZhdGUpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
c3Rfc3RydWN0dXJlX25ldygiZGVtdXhlci1jb25uZWN0LXRvLWFwcHNpbmsiLCAiZGVtdXhlci1z
cmMtcGFkIiwgR19UWVBFX09CSkVDVCwgZGVtdXhlclNyY1BhZCwgbnVsbHB0cik7CisgICAgICAg
IEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09C
SkVDVChtX2RlbXV4LmdldCgpKSwgc3RydWN0dXJlKTsKKyAgICAgICAgZ3N0X2J1c19wb3N0KG1f
YnVzLmdldCgpLCBtZXNzYWdlKTsKKyAgICAgICAgR1NUX1RSQUNFKCJkZW11eGVyLWNvbm5lY3Qt
dG8tYXBwc2luayBtZXNzYWdlIHBvc3RlZCB0byBidXMiKTsKKworICAgICAgICBtX3BhZEFkZFJl
bW92ZUNvbmRpdGlvbi53YWl0KG1fcGFkQWRkUmVtb3ZlTG9jayk7CisgICAgfQorCisgICAgLy8g
TXVzdCBiZSBkb25lIGluIHRoZSB0aHJlYWQgd2Ugd2VyZSBjYWxsZWQgZnJvbSAodXN1YWxseSBz
dHJlYW1pbmcgdGhyZWFkKS4KKyAgICBib29sIGlzRGF0YSA9IChtX3N0cmVhbVR5cGUgPT0gV2Vi
Q29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpBdWRpbykKKyAgICAgICAgfHwg
KG1fc3RyZWFtVHlwZSA9PSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6
OlZpZGVvKQorICAgICAgICB8fCAobV9zdHJlYW1UeXBlID09IFdlYkNvcmU6Ok1lZGlhU291cmNl
U3RyZWFtVHlwZUdTdHJlYW1lcjo6VGV4dCk7CisKKyAgICBpZiAoaXNEYXRhKSB7CisgICAgICAg
IC8vIEZJWE1FOiBPbmx5IGFkZCBhcHBzaW5rIG9uZSB0aW1lLiBUaGlzIG1ldGhvZCBjYW4gYmUg
Y2FsbGVkIHNldmVyYWwgdGltZXMuCisgICAgICAgIEdSZWZQdHI8R3N0T2JqZWN0PiBwYXJlbnQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudChtX2FwcHNpbmsuZ2V0KCkpKTsKKyAg
ICAgICAgaWYgKCFwYXJlbnQpCisgICAgICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOKG1fcGlw
ZWxpbmUuZ2V0KCkpLCBtX2FwcHNpbmsuZ2V0KCkpOworCisjaWYgRU5BQkxFKExFR0FDWV9FTkNS
WVBURURfTUVESUEpCisgICAgICAgIGlmIChtX2RlY3J5cHRvcikgeworICAgICAgICAgICAgZ3N0
X29iamVjdF9yZWYobV9kZWNyeXB0b3IuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2Jpbl9hZGQo
R1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgbV9kZWNyeXB0b3IuZ2V0KCkpOworCisgICAgICAg
ICAgICBHUmVmUHRyPEdzdFBhZD4gZGVjcnlwdG9yU2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxl
bWVudF9nZXRfc3RhdGljX3BhZChtX2RlY3J5cHRvci5nZXQoKSwgInNpbmsiKSk7CisgICAgICAg
ICAgICBnc3RfcGFkX2xpbmsoZGVtdXhlclNyY1BhZCwgZGVjcnlwdG9yU2lua1BhZC5nZXQoKSk7
CisKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBkZWNyeXB0b3JTcmNQYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9kZWNyeXB0b3IuZ2V0KCksICJzcmMiKSk7
CisgICAgICAgICAgICBnc3RfcGFkX2xpbmsoZGVjcnlwdG9yU3JjUGFkLmdldCgpLCBhcHBzaW5r
U2lua1BhZC5nZXQoKSk7CisKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0
aF9wYXJlbnQobV9hcHBzaW5rLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNf
c3RhdGVfd2l0aF9wYXJlbnQobV9kZWNyeXB0b3IuZ2V0KCkpOworICAgICAgICB9IGVsc2Ugewor
I2VuZGlmCisgICAgICAgICAgICBnc3RfcGFkX2xpbmsoZGVtdXhlclNyY1BhZCwgYXBwc2lua1Np
bmtQYWQuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3Bh
cmVudChtX2FwcHNpbmsuZ2V0KCkpOworI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQVEVEX01FRElB
KQorICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlw
ZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QQVVTRUQpOworICAgIH0KK30KKwordm9pZCBBcHBlbmRQ
aXBlbGluZTo6Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKiBkZW11eGVyU3Jj
UGFkKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKyAgICBHU1RfREVCVUco
IkNvbm5lY3RpbmcgdG8gYXBwc2luayIpOworCisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYWRB
ZGRSZW1vdmVMb2NrKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1NpbmtQYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsK
KworICAgIC8vIE9ubHkgb25lIHN0cmVhbSBwZXIgZGVtdXhlciBpcyBzdXBwb3J0ZWQuCisgICAg
QVNTRVJUKCFnc3RfcGFkX2lzX2xpbmtlZChzaW5rU2lua1BhZC5nZXQoKSkpOworCisgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBjYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X2N1cnJlbnRfY2FwcyhH
U1RfUEFEKGRlbXV4ZXJTcmNQYWQpKSk7CisKKyAgICBpZiAoIWNhcHMgfHwgbV9hcHBlbmRTdGF0
ZSA9PSBBcHBlbmRTdGF0ZTo6SW52YWxpZCB8fCAhbV9wbGF5ZXJQcml2YXRlKSB7CisgICAgICAg
IG1fcGFkQWRkUmVtb3ZlQ29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIHsKKyAgICAgICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gc3RyY2Fwcyhnc3RfY2Fwc190b19zdHJpbmcoY2Fwcy5nZXQoKSkpOwor
ICAgICAgICBHU1RfREVCVUcoIiVzIiwgc3RyY2Fwcy5nZXQoKSk7CisgICAgfQorI2VuZGlmCisK
KyAgICBpZiAobV9pbml0aWFsRHVyYXRpb24gPiBtX21lZGlhU291cmNlQ2xpZW50LT5kdXJhdGlv
bigpKQorICAgICAgICBtX21lZGlhU291cmNlQ2xpZW50LT5kdXJhdGlvbkNoYW5nZWQobV9pbml0
aWFsRHVyYXRpb24pOworCisgICAgbV9vbGRUcmFjayA9IG1fdHJhY2s7CisKKyAgICBwYXJzZURl
bXV4ZXJTcmNQYWRDYXBzKGdzdF9jYXBzX3JlZihjYXBzLmdldCgpKSk7CisKKyAgICBzd2l0Y2gg
KG1fc3RyZWFtVHlwZSkgeworICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBl
R1N0cmVhbWVyOjpBdWRpbzoKKyAgICAgICAgaWYgKG1fcGxheWVyUHJpdmF0ZSkKKyAgICAgICAg
ICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRl
KG1fcGxheWVyUHJpdmF0ZS0+cGlwZWxpbmUoKSwgaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdT
dHJlYW1lcjo6VmlkZW86CisgICAgICAgIGlmIChtX3BsYXllclByaXZhdGUpCisgICAgICAgICAg
ICBtX3RyYWNrID0gV2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZSht
X3BsYXllclByaXZhdGUtPnBpcGVsaW5lKCksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3Ry
ZWFtZXI6OlRleHQ6CisgICAgICAgIG1fdHJhY2sgPSBXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlR1N0cmVhbWVyOjpjcmVhdGUoaWQoKSwgc2lua1NpbmtQYWQuZ2V0KCkpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBObyB1c2VmdWwgZGF0YSwgYnV0IG5v
dGlmeSBhbnl3YXkgdG8gY29tcGxldGUgdGhlIGFwcGVuZCBvcGVyYXRpb24uCisgICAgICAgIEdT
VF9ERUJVRygiUmVjZWl2ZWQgYWxsIHBlbmRpbmcgc2FtcGxlcyAobm8gZGF0YSkiKTsKKyAgICAg
ICAgbV9zb3VyY2VCdWZmZXJQcml2YXRlLT5kaWRSZWNlaXZlQWxsUGVuZGluZ1NhbXBsZXMoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90
aWZ5T25lKCk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVyU3Jj
UGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFkKCkKK3sKKyAgICBHU1RfREVCVUcoIkRpc2Nvbm5l
Y3RpbmcgYXBwc2luayIpOworCisgICAgLy8gTXVzdCBiZSBkb25lIGluIHRoZSB0aHJlYWQgd2Ug
d2VyZSBjYWxsZWQgZnJvbSAodXN1YWxseSBzdHJlYW1pbmcgdGhyZWFkKS4KKyNpZiBFTkFCTEUo
TEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkKKyAgICBpZiAobV9kZWNyeXB0b3IpIHsKKyAgICAgICAg
Z3N0X2VsZW1lbnRfdW5saW5rKG1fZGVjcnlwdG9yLmdldCgpLCBtX2FwcHNpbmsuZ2V0KCkpOwor
ICAgICAgICBnc3RfZWxlbWVudF91bmxpbmsobV9kZW11eC5nZXQoKSwgbV9kZWNyeXB0b3IuZ2V0
KCkpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9kZWNyeXB0b3IuZ2V0KCksIEdT
VF9TVEFURV9OVUxMKTsKKyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTihtX3BpcGVsaW5l
LmdldCgpKSwgbV9kZWNyeXB0b3IuZ2V0KCkpOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAg
IGdzdF9lbGVtZW50X3VubGluayhtX2RlbXV4LmdldCgpLCBtX2FwcHNpbmsuZ2V0KCkpOworfQor
CitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUFwcHNpbmtDYXBzQ2hhbmdlZChHT2JqZWN0KiBh
cHBzaW5rUGFkLCBHUGFyYW1TcGVjKiwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKQor
eworICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHko
ImFwcHNpbmstY2Fwcy1jaGFuZ2VkIik7CisgICAgR3N0TWVzc2FnZSogbWVzc2FnZSA9IGdzdF9t
ZXNzYWdlX25ld19hcHBsaWNhdGlvbihHU1RfT0JKRUNUKGFwcHNpbmtQYWQpLCBzdHJ1Y3R1cmUp
OworICAgIGdzdF9idXNfcG9zdChhcHBlbmRQaXBlbGluZS0+YnVzKCksIG1lc3NhZ2UpOworICAg
IEdTVF9UUkFDRSgiYXBwc2luay1jYXBzLWNoYW5nZWQgbWVzc2FnZSBwb3N0ZWQgdG8gYnVzIik7
Cit9CisKK3N0YXRpYyBHc3RQYWRQcm9iZVJldHVybiBhcHBlbmRQaXBlbGluZUFwcHNyY0RhdGFM
ZWF2aW5nKEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5mbywgQXBwZW5kUGlwZWxpbmUqIGFw
cGVuZFBpcGVsaW5lKQoreworICAgIEFTU0VSVChHU1RfUEFEX1BST0JFX0lORk9fVFlQRShpbmZv
KSAmIEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIpOworCisgICAgR3N0QnVmZmVyKiBidWZmZXIg
PSBHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSKGluZm8pOworICAgIGdzaXplIGJ1ZmZlclNpemUg
PSBnc3RfYnVmZmVyX2dldF9zaXplKGJ1ZmZlcik7CisKKyAgICBHU1RfVFJBQ0UoImJ1ZmZlciBv
ZiBzaXplICUiIEdfR1NJWkVfRk9STUFUICIgZ29pbmcgdGhydSIsIGJ1ZmZlclNpemUpOworCisg
ICAgYXBwZW5kUGlwZWxpbmUtPnJlcG9ydEFwcHNyY0F0TGVhc3RBQnVmZmVyTGVmdCgpOworCisg
ICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECitzdGF0
aWMgR3N0UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRp
b24oR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZvLCBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1h
dGlvbiogcGFkUHJvYmVJbmZvcm1hdGlvbikKK3sKKyAgICBBU1NFUlQoR1NUX1BBRF9QUk9CRV9J
TkZPX1RZUEUoaW5mbykgJiBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSKTsKKyAgICBHc3RCdWZm
ZXIqIGJ1ZmZlciA9IEdTVF9QQURfUFJPQkVfSU5GT19CVUZGRVIoaW5mbyk7CisgICAgR1NUX1RS
QUNFKCIlczogYnVmZmVyIG9mIHNpemUgJSIgR19HU0laRV9GT1JNQVQgIiBnb2luZyB0aHJ1Iiwg
cGFkUHJvYmVJbmZvcm1hdGlvbi0+ZGVzY3JpcHRpb24sIGdzdF9idWZmZXJfZ2V0X3NpemUoYnVm
ZmVyKSk7CisgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7Cit9CisjZW5kaWYKKworc3RhdGlj
IHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YShHc3RBcHBTcmMqLCBndWludCwgQXBw
ZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKQoreworICAgIGFwcGVuZFBpcGVsaW5lLT5yZXBv
cnRBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVs
aW5lRGVtdXhlclBhZEFkZGVkKEdzdEVsZW1lbnQqLCBHc3RQYWQqIGRlbXV4ZXJTcmNQYWQsIEFw
cGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICBhcHBlbmRQaXBlbGluZS0+Y29u
bmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtGcm9tQW55VGhyZWFkKGRlbXV4ZXJTcmNQYWQpOwor
fQorCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKEdzdEVsZW1l
bnQqLCBHc3RQYWQqLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgYXBw
ZW5kUGlwZWxpbmUtPmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhy
ZWFkKCk7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGFwcGVuZFBpcGVsaW5lQXBwc2lua05l
d1NhbXBsZShHc3RFbGVtZW50KiBhcHBzaW5rLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxp
bmUpCit7CisgICAgcmV0dXJuIGFwcGVuZFBpcGVsaW5lLT5oYW5kbGVOZXdBcHBzaW5rU2FtcGxl
KGFwcHNpbmspOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGluZUFwcHNpbmtFT1MoR3N0
RWxlbWVudCosIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICBpZiAoV1RG
Ojppc01haW5UaHJlYWQoKSkKKyAgICAgICAgYXBwZW5kUGlwZWxpbmUtPmFwcHNpbmtFT1MoKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3Rfc3RydWN0
dXJlX25ld19lbXB0eSgiYXBwc2luay1lb3MiKTsKKyAgICAgICAgR3N0TWVzc2FnZSogbWVzc2Fn
ZSA9IGdzdF9tZXNzYWdlX25ld19hcHBsaWNhdGlvbihHU1RfT0JKRUNUKGFwcGVuZFBpcGVsaW5l
LT5hcHBzaW5rKCkpLCBzdHJ1Y3R1cmUpOworICAgICAgICBnc3RfYnVzX3Bvc3QoYXBwZW5kUGlw
ZWxpbmUtPmJ1cygpLCBtZXNzYWdlKTsKKyAgICAgICAgR1NUX1RSQUNFKCJhcHBzaW5rLWVvcyBt
ZXNzYWdlIHBvc3RlZCB0byBidXMiKTsKKyAgICB9CisKKyAgICBHU1RfREVCVUcoIiVzIG1haW4g
dGhyZWFkIiwgKFdURjo6aXNNYWluVGhyZWFkKCkpID8gIklzIiA6ICJOb3QiKTsKK30KKworCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUuCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9B
cHBlbmRQaXBlbGluZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9BcHBlbmRQaXBlbGluZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzYjAzZTQwNDRlZmZkMmI0ZDEy
ZjJhNjFjMTNmNmUzM2RmZjJmNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmgKQEAgLTAsMCAr
MSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisK
KyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyTVNFLmgiCisjaW5jbHVkZSAiTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJN
U0UuaCIKKyNpbmNsdWRlICJTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEFwcGVuZFBpcGVsaW5lIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEFwcGVuZFBpcGVsaW5lPiB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBBcHBlbmRT
dGF0ZSB7IEludmFsaWQsIE5vdFN0YXJ0ZWQsIE9uZ29pbmcsIEtleU5lZ290aWF0aW9uLCBEYXRh
U3RhcnZlLCBTYW1wbGluZywgTGFzdFNhbXBsZSwgQWJvcnRpbmcgfTsKKworICAgIEFwcGVuZFBp
cGVsaW5lKFJlZjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4sIFJlZjxTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyPiwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFJik7Cisg
ICAgdmlydHVhbCB+QXBwZW5kUGlwZWxpbmUoKTsKKworICAgIHZvaWQgaGFuZGxlRWxlbWVudE1l
c3NhZ2UoR3N0TWVzc2FnZSopOworICAgIHZvaWQgaGFuZGxlQXBwbGljYXRpb25NZXNzYWdlKEdz
dE1lc3NhZ2UqKTsKKworICAgIGdpbnQgaWQoKTsKKyAgICBBcHBlbmRTdGF0ZSBhcHBlbmRTdGF0
ZSgpIHsgcmV0dXJuIG1fYXBwZW5kU3RhdGU7IH0KKyAgICB2b2lkIHNldEFwcGVuZFN0YXRlKEFw
cGVuZFN0YXRlKTsKKworICAgIEdzdEZsb3dSZXR1cm4gaGFuZGxlTmV3QXBwc2lua1NhbXBsZShH
c3RFbGVtZW50Kik7CisgICAgR3N0Rmxvd1JldHVybiBwdXNoTmV3QnVmZmVyKEdzdEJ1ZmZlciop
OworCisgICAgLy8gVGFrZXMgb3duZXJzaGlwIG9mIGNhcHMuCisgICAgdm9pZCBwYXJzZURlbXV4
ZXJTcmNQYWRDYXBzKEdzdENhcHMqKTsKKyAgICB2b2lkIGFwcHNpbmtDYXBzQ2hhbmdlZCgpOwor
ICAgIHZvaWQgYXBwc2lua05ld1NhbXBsZShHc3RTYW1wbGUqKTsKKyAgICB2b2lkIGFwcHNpbmtF
T1MoKTsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoKTsKKyAgICBB
dG9taWNTdHJpbmcgdHJhY2tJZCgpOworICAgIHZvaWQgYWJvcnQoKTsKKworICAgIHZvaWQgY2xl
YXJQbGF5ZXJQcml2YXRlKCk7CisgICAgUmVmPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+
IHNvdXJjZUJ1ZmZlclByaXZhdGUoKSB7IHJldHVybiBtX3NvdXJjZUJ1ZmZlclByaXZhdGUuZ2V0
KCk7IH0KKyAgICBHc3RCdXMqIGJ1cygpIHsgcmV0dXJuIG1fYnVzLmdldCgpOyB9CisgICAgR3N0
RWxlbWVudCogcGlwZWxpbmUoKSB7IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CisgICAgR3N0
RWxlbWVudCogYXBwc3JjKCkgeyByZXR1cm4gbV9hcHBzcmMuZ2V0KCk7IH0KKyAgICBHc3RFbGVt
ZW50KiBhcHBzaW5rKCkgeyByZXR1cm4gbV9hcHBzaW5rLmdldCgpOyB9CisgICAgR3N0Q2Fwcyog
ZGVtdXhlclNyY1BhZENhcHMoKSB7IHJldHVybiBtX2RlbXV4ZXJTcmNQYWRDYXBzLmdldCgpOyB9
CisgICAgR3N0Q2FwcyogYXBwc2lua0NhcHMoKSB7IHJldHVybiBtX2FwcHNpbmtDYXBzLmdldCgp
OyB9CisgICAgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IHRyYWNrKCkgeyByZXR1
cm4gbV90cmFjazsgfQorICAgIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1l
ciBzdHJlYW1UeXBlKCkgeyByZXR1cm4gbV9zdHJlYW1UeXBlOyB9CisKKyAgICB2b2lkIGRpc2Nv
bm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFkKCk7CisgICAgdm9pZCBj
b25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lua0Zyb21BbnlUaHJlYWQoR3N0UGFkKik7CisgICAg
dm9pZCBjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2luayhHc3RQYWQqKTsKKworICAgIHZvaWQg
cmVwb3J0QXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KCk7CisgICAgdm9pZCByZXBvcnRBcHBzcmNO
ZWVkRGF0YVJlY2VpdmVkKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCByZXNldFBpcGVsaW5lKCk7
CisgICAgdm9pZCBjaGVja0VuZE9mQXBwZW5kKCk7CisgICAgdm9pZCBoYW5kbGVBcHBzcmNBdExl
YXN0QUJ1ZmZlckxlZnQoKTsKKyAgICB2b2lkIGhhbmRsZUFwcHNyY05lZWREYXRhUmVjZWl2ZWQo
KTsKKyAgICB2b2lkIHJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKTsKKyAgICB2b2lkIHNl
dEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKTsKKworcHJpdmF0ZToKKyAgICBSZWY8TWVkaWFTb3Vy
Y2VDbGllbnRHU3RyZWFtZXJNU0U+IG1fbWVkaWFTb3VyY2VDbGllbnQ7CisgICAgUmVmPFNvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+IG1fc291cmNlQnVmZmVyUHJpdmF0ZTsKKyAgICBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UqIG1fcGxheWVyUHJpdmF0ZTsKKworICAgIC8vICht
X21lZGlhVHlwZSwgbV9pZCkgaXMgdW5pcXVlLgorICAgIGdpbnQgbV9pZDsKKworICAgIE1lZGlh
VGltZSBtX2luaXRpYWxEdXJhdGlvbjsKKworICAgIEdzdEZsb3dSZXR1cm4gbV9mbG93UmV0dXJu
OworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOworICAgIEdSZWZQdHI8R3N0
QnVzPiBtX2J1czsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYXBwc3JjOworICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gbV9kZW11eDsKKyNpZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJ
QSkKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZGVjcnlwdG9yOworI2VuZGlmCisgICAgLy8g
VGhlIGRlbXV4ZXIgaGFzIG9uZSBzcmMgc3RyZWFtIG9ubHksIHNvIG9ubHkgb25lIGFwcHNpbmsg
aXMgbmVlZGVkIGFuZCBsaW5rZWQgdG8gaXQuCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2Fw
cHNpbms7CisKKyAgICBMb2NrIG1fbmV3U2FtcGxlTG9jazsKKyAgICBDb25kaXRpb24gbV9uZXdT
YW1wbGVDb25kaXRpb247CisgICAgTG9jayBtX3BhZEFkZFJlbW92ZUxvY2s7CisgICAgQ29uZGl0
aW9uIG1fcGFkQWRkUmVtb3ZlQ29uZGl0aW9uOworCisgICAgR1JlZlB0cjxHc3RDYXBzPiBtX2Fw
cHNpbmtDYXBzOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9kZW11eGVyU3JjUGFkQ2FwczsKKyAg
ICBGbG9hdFNpemUgbV9wcmVzZW50YXRpb25TaXplOworCisgICAgYm9vbCBtX2FwcHNyY0F0TGVh
c3RBQnVmZmVyTGVmdDsKKyAgICBib29sIG1fYXBwc3JjTmVlZERhdGFSZWNlaXZlZDsKKworICAg
IGd1bG9uZyBtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZDsKKyNpZiAhTE9HX0RJU0FCTEVECisg
ICAgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gbV9kZW11eGVyRGF0YUVudGVyaW5nUGFkUHJv
YmVJbmZvcm1hdGlvbjsKKyAgICBzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlvbiBtX2FwcHNpbmtE
YXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9uOworI2VuZGlmCisKKyAgICAvLyBLZWVwcyB0
cmFjayBvZiB0aGUgc3RhdGVzIG9mIGFwcGVuZCBwcm9jZXNzaW5nLCB0byBhdm9pZCBwZXJmb3Jt
aW5nIGFjdGlvbnMgaW5hcHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQgc3RhdGUKKyAgICAvLyAo
ZWc6IHByb2Nlc3NpbmcgbW9yZSBzYW1wbGVzIHdoZW4gdGhlIGxhc3Qgb25lIGhhcyBiZWVuIGRl
dGVjdGVkLCBldGMuKS4gU2VlIHNldEFwcGVuZFN0YXRlKCkgZm9yIHZhbGlkCisgICAgLy8gdHJh
bnNpdGlvbnMuCisgICAgQXBwZW5kU3RhdGUgbV9hcHBlbmRTdGF0ZTsKKworICAgIC8vIEFib3J0
cyBjYW4gb25seSBiZSBjb21wbGV0ZWQgd2hlbiB0aGUgbm9ybWFsIHNhbXBsZSBkZXRlY3Rpb24g
aGFzIGZpbmlzaGVkLiBNZWFud2hpbGUsIHRoZSB3aWxsaW5nIHRvIGFib3J0IGlzCisgICAgLy8g
ZXhwcmVzc2VkIGluIHRoaXMgZmllbGQuCisgICAgYm9vbCBtX2Fib3J0UGVuZGluZzsKKworICAg
IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciBtX3N0cmVhbVR5cGU7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG1fb2xkVHJhY2s7CisgICAgUmVm
UHRyPFdlYkNvcmU6OlRyYWNrUHJpdmF0ZUJhc2U+IG1fdHJhY2s7CisKKyAgICBHUmVmUHRyPEdz
dEJ1ZmZlcj4gbV9wZW5kaW5nQnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZS4K
KworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292738</attachid>
            <date>2016-10-25 02:00:11 -0700</date>
            <delta_ts>2016-10-26 01:18:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162874-20161025085624.patch</filename>
            <type>text/plain</type>
            <size>49730</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3NjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjdiNTQ2NzM3NmE2MzI4
NjRhNTVjNDZmYWFmYWE5NWQ0OTUxZTg1Zi4uYzIzODg1NzAzN2UyZDMxYzcxMTYzOTRlMzE3ZTk3
ZjhlY2NiYjlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY4IEBACiAyMDE2LTEwLTAzICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIEFwcGVuZCBQaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
xb1hbiBEb2JlcsWhZWsuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRo
IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiAoZGF0YSBzdGFy
dmUKKyAgICAgICAgYW5kIGxhc3Qgc2FtcGxlIGRldGVjdGlvbiwgZGVidWcgZmVhdHVyZXMpIGFu
ZCBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPiAoRU1FCisgICAgICAgIHN1cHBv
cnQpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQ
aXBlbGluZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZHVtcEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lRWxlbWVudE1lc3NhZ2VDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRQaXBlbGluZUFwcGxpY2F0aW9uTWVzc2FnZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6fkFwcGVuZFBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpjbGVhclBsYXllclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVsZW1lbnRNZXNzYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBsaWNhdGlvbk1lc3NhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNyY05lZWREYXRh
UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNy
Y0F0TGVhc3RBQnVmZmVyTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
aWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnNldEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNoZWNrRW5kT2ZBcHBlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtFT1MpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnRyYWNrSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlc2V0UGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwZW5kUGlwZWxpbmU6OnNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGVuZFBpcGVsaW5lOjpwdXNoTmV3QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVu
ZFBpcGVsaW5lOjpyZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9B
cHBzaW5rRnJvbUFueVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1NhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjphcHBl
bmRQaXBlbGluZUFwcHNpbmtFT1MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBl
bmRQaXBlbGluZTo6YXBwZW5kU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxp
bmU6Om1lZGlhU291cmNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
Ojpzb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
OjpidXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzcmMpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlw
ZWxpbmU6OmRlbXV4ZXJTcmNQYWRDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVs
aW5lOjphcHBzaW5rQ2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6dHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnN0cmVhbVR5cGUpOgorCisy
MDE2LTEwLTAzICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+
CisKICAgICAgICAgW0dTdHJlYW1lcl0gRHJhaW4gcXVlcnkgc3VwcG9ydAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODcyCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlw
ZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9BcHBlbmRQaXBlbGluZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGM2YWM3MWM4NDg1MGY3YjI3MjI1OTIz
YjBmNmQ5ZGMzYzBlZWVhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEs
MTA4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQXBwZW5kUGlwZWxpbmUuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKworI2luY2x1ZGUgIkF1ZGlvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRp
YVNhbXBsZS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIklu
YmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYURlc2NyaXB0
aW9uLmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1
ZGUgIlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dz
dGFwcHNpbmsuaD4KKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgorI2luY2x1ZGUgPGdz
dC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+CisjaW5jbHVkZSA8Z3N0
L3ZpZGVvL3ZpZGVvLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyNpZiAhTE9HX0RJU0FCTEVECitzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlv
biB7CisgICAgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lOworICAgIGNvbnN0IGNoYXIq
IGRlc2NyaXB0aW9uOworICAgIGd1bG9uZyBwcm9iZUlkOworfTsKKyNlbmRpZgorCitzdGF0aWMg
Y29uc3QgY2hhciogZHVtcEFwcGVuZFN0YXRlKEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZSBh
cHBlbmRTdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKGFwcGVuZFN0YXRlKSB7CisgICAgY2FzZSBBcHBl
bmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OkludmFsaWQ6CisgICAgICAgIHJldHVybiAiSW52YWxp
ZCI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ6Cisg
ICAgICAgIHJldHVybiAiTm90U3RhcnRlZCI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBw
ZW5kU3RhdGU6Ok9uZ29pbmc6CisgICAgICAgIHJldHVybiAiT25nb2luZyI7CisgICAgY2FzZSBB
cHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OktleU5lZ290aWF0aW9uOgorICAgICAgICByZXR1
cm4gIktleU5lZ290aWF0aW9uIjsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0
ZTo6RGF0YVN0YXJ2ZToKKyAgICAgICAgcmV0dXJuICJEYXRhU3RhcnZlIjsKKyAgICBjYXNlIEFw
cGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6U2FtcGxpbmc6CisgICAgICAgIHJldHVybiAiU2Ft
cGxpbmciOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpMYXN0U2FtcGxl
OgorICAgICAgICByZXR1cm4gIkxhc3RTYW1wbGUiOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6
OkFwcGVuZFN0YXRlOjpBYm9ydGluZzoKKyAgICAgICAgcmV0dXJuICJBYm9ydGluZyI7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICIodW5rbm93bikiOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YShHc3RBcHBTcmMqLCBndWludCwgQXBw
ZW5kUGlwZWxpbmUqKTsKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lRGVtdXhlclBhZEFkZGVk
KEdzdEVsZW1lbnQqLCBHc3RQYWQqLCBBcHBlbmRQaXBlbGluZSopOworc3RhdGljIHZvaWQgYXBw
ZW5kUGlwZWxpbmVEZW11eGVyUGFkUmVtb3ZlZChHc3RFbGVtZW50KiwgR3N0UGFkKiwgQXBwZW5k
UGlwZWxpbmUqKTsKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2Vk
KEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgQXBwZW5kUGlwZWxpbmUqKTsKK3N0YXRpYyBHc3RQYWRQ
cm9iZVJldHVybiBhcHBlbmRQaXBlbGluZUFwcHNyY0RhdGFMZWF2aW5nKEdzdFBhZCosIEdzdFBh
ZFByb2JlSW5mbyosIEFwcGVuZFBpcGVsaW5lKik7CisjaWYgIUxPR19ESVNBQkxFRAorc3RhdGlj
IEdzdFBhZFByb2JlUmV0dXJuIGFwcGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9u
KEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyosIHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uKik7
CisjZW5kaWYKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1Nh
bXBsZShHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxpbmUqKTsKK3N0YXRpYyB2b2lkIGFwcGVuZFBp
cGVsaW5lQXBwc2lua0VPUyhHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxpbmUqKTsKKworc3RhdGlj
IHZvaWQgYXBwZW5kUGlwZWxpbmVFbGVtZW50TWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyosIEdzdE1l
c3NhZ2UqIG1lc3NhZ2UsIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICBh
cHBlbmRQaXBlbGluZS0+aGFuZGxlRWxlbWVudE1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3N0YXRp
YyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwbGljYXRpb25NZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiwg
R3N0TWVzc2FnZSogbWVzc2FnZSwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKQorewor
ICAgIGFwcGVuZFBpcGVsaW5lLT5oYW5kbGVBcHBsaWNhdGlvbk1lc3NhZ2UobWVzc2FnZSk7Cit9
CisKK0FwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZShSZWY8TWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXJNU0U+IG1lZGlhU291cmNlQ2xpZW50LCBSZWY8U291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFJiBwbGF5ZXJQcml2YXRlKQorICAgIDogbV9tZWRpYVNvdXJjZUNsaWVudChtZWRpYVNvdXJj
ZUNsaWVudC5nZXQoKSkKKyAgICAsIG1fc291cmNlQnVmZmVyUHJpdmF0ZShzb3VyY2VCdWZmZXJQ
cml2YXRlLmdldCgpKQorICAgICwgbV9wbGF5ZXJQcml2YXRlKCZwbGF5ZXJQcml2YXRlKQorICAg
ICwgbV9pZCgwKQorICAgICwgbV9hcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoZmFsc2UpCisgICAg
LCBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQoZmFsc2UpCisgICAgLCBtX2FwcHNyY0RhdGFMZWF2
aW5nUHJvYmVJZCgwKQorICAgICwgbV9hcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZTo6Tm90U3RhcnRl
ZCkKKyAgICAsIG1fYWJvcnRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9zdHJlYW1UeXBlKFVua25v
d24pCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgR1NUX1RSQUNF
KCJDcmVhdGluZyBBcHBlbmRQaXBlbGluZSAoJXApIiwgdGhpcyk7CisKKyAgICAvLyBGSVhNRTog
Z2l2ZSBhIG5hbWUgdG8gdGhlIHBpcGVsaW5lLCBtYXliZSByZWxhdGVkIHdpdGggdGhlIHRyYWNr
IGl0J3MgbWFuYWdpbmcuCisgICAgLy8gVGhlIHRyYWNrIG5hbWUgaXMgc3RpbGwgdW5rbm93biBh
dCB0aGlzIHRpbWUsIHRob3VnaC4KKyAgICBtX3BpcGVsaW5lID0gYWRvcHRHUmVmKGdzdF9waXBl
bGluZV9uZXcobnVsbHB0cikpOworCisgICAgbV9idXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5l
X2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgZ3N0X2J1c19h
ZGRfc2lnbmFsX3dhdGNoKG1fYnVzLmdldCgpKTsKKyAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21l
c3NhZ2VfZW1pc3Npb24obV9idXMuZ2V0KCkpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX2J1
cy5nZXQoKSwgInN5bmMtbWVzc2FnZTo6ZWxlbWVudCIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxp
bmVFbGVtZW50TWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdCht
X2J1cy5nZXQoKSwgIm1lc3NhZ2U6OmFwcGxpY2F0aW9uIiwgR19DQUxMQkFDSyhhcHBlbmRQaXBl
bGluZUFwcGxpY2F0aW9uTWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CisKKyAgICAvLyBXZSBhc3Np
Z24gdGhlIGNyZWF0ZWQgaW5zdGFuY2VzIGhlcmUgaW5zdGVhZCBvZiBhZG9wdFJlZigpIGJlY2F1
c2UgZ3N0X2Jpbl9hZGRfbWFueSgpCisgICAgLy8gYmVsb3cgd2lsbCBhbHJlYWR5IHRha2UgdGhl
IGluaXRpYWwgcmVmZXJlbmNlIGFuZCB3ZSBuZWVkIGFuIGFkZGl0aW9uYWwgb25lIGZvciB1cy4K
KyAgICBtX2FwcHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwgbnVsbHB0
cik7CisgICAgbV9kZW11eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXRkZW11eCIsIG51
bGxwdHIpOworICAgIG1fYXBwc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc2lu
ayIsIG51bGxwdHIpOworCisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKG1fZGVtdXguZ2V0KCkp
LCAiYWx3YXlzLWhvbm9yLXRmZHQiLCBUUlVFLCBudWxscHRyKTsKKyAgICBnc3RfYXBwX3Npbmtf
c2V0X2VtaXRfc2lnbmFscyhHU1RfQVBQX1NJTksobV9hcHBzaW5rLmdldCgpKSwgVFJVRSk7Cisg
ICAgZ3N0X2Jhc2Vfc2lua19zZXRfc3luYyhHU1RfQkFTRV9TSU5LKG1fYXBwc2luay5nZXQoKSks
IEZBTFNFKTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzaW5rUGFkID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisgICAg
Z19zaWduYWxfY29ubmVjdChhcHBzaW5rUGFkLmdldCgpLCAibm90aWZ5OjpjYXBzIiwgR19DQUxM
QkFDSyhhcHBlbmRQaXBlbGluZUFwcHNpbmtDYXBzQ2hhbmdlZCksIHRoaXMpOworCisgICAgc2V0
QXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgpOworCisjaWYgIUxPR19ESVNBQkxFRAorICAgIEdSZWZQ
dHI8R3N0UGFkPiBkZW11eGVyUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKG1fZGVtdXguZ2V0KCksICJzaW5rIikpOworICAgIG1fZGVtdXhlckRhdGFFbnRlcmluZ1Bh
ZFByb2JlSW5mb3JtYXRpb24uYXBwZW5kUGlwZWxpbmUgPSB0aGlzOworICAgIG1fZGVtdXhlckRh
dGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAiZGVtdXhlciBkYXRh
IGVudGVyaW5nIjsKKyAgICBtX2RlbXV4ZXJEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9u
LnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShkZW11eGVyUGFkLmdldCgpLCBHU1RfUEFEX1BS
T0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJhY2s+KGFw
cGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9uKSwgJm1fZGVtdXhlckRhdGFFbnRl
cmluZ1BhZFByb2JlSW5mb3JtYXRpb24sIG51bGxwdHIpOworICAgIG1fYXBwc2lua0RhdGFFbnRl
cmluZ1BhZFByb2JlSW5mb3JtYXRpb24uYXBwZW5kUGlwZWxpbmUgPSB0aGlzOworICAgIG1fYXBw
c2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAiYXBwc2lu
ayBkYXRhIGVudGVyaW5nIjsKKyAgICBtX2FwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9y
bWF0aW9uLnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBHU1Rf
UEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJh
Y2s+KGFwcGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9uKSwgJm1fYXBwc2lua0Rh
dGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24sIG51bGxwdHIpOworI2VuZGlmCisKKyAgICAv
LyBUaGVzZSBzaWduYWxzIHdvbid0IGJlIGNvbm5lY3RlZCBvdXRzaWRlIG9mIHRoZSBsaWZldGlt
ZSBvZiAidGhpcyIuCisgICAgZ19zaWduYWxfY29ubmVjdChtX2FwcHNyYy5nZXQoKSwgIm5lZWQt
ZGF0YSIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YSksIHRoaXMpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kZW11eC5nZXQoKSwgInBhZC1hZGRlZCIsIEdfQ0FMTEJB
Q0soYXBwZW5kUGlwZWxpbmVEZW11eGVyUGFkQWRkZWQpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KG1fZGVtdXguZ2V0KCksICJwYWQtcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlw
ZWxpbmVEZW11eGVyUGFkUmVtb3ZlZCksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9h
cHBzaW5rLmdldCgpLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVBcHBz
aW5rTmV3U2FtcGxlKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2FwcHNpbmsuZ2V0
KCksICJlb3MiLCBHX0NBTExCQUNLKGFwcGVuZFBpcGVsaW5lQXBwc2lua0VPUyksIHRoaXMpOwor
CisgICAgLy8gQWRkX21hbnkgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiBhIHJlZmVyZW5jZS4gVGhh
dCdzIHdoeSB3ZSB1c2VkIGFuIGFzc2lnbm1lbnQgYmVmb3JlLgorICAgIGdzdF9iaW5fYWRkX21h
bnkoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgbV9hcHBzcmMuZ2V0KCksIG1fZGVtdXguZ2V0
KCksIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmsobV9hcHBzcmMuZ2V0KCksIG1fZGVt
dXguZ2V0KCkpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
IEdTVF9TVEFURV9SRUFEWSk7Cit9OworCitBcHBlbmRQaXBlbGluZTo6fkFwcGVuZFBpcGVsaW5l
KCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICB7CisgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fbmV3U2FtcGxlTG9jayk7CisgICAgICAgIHNldEFwcGVuZFN0
YXRlKEFwcGVuZFN0YXRlOjpJbnZhbGlkKTsKKyAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRpb24u
bm90aWZ5T25lKCk7CisgICAgfQorCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3BhZEFkZFJlbW92ZUxvY2spOworICAgICAgICBtX3BsYXllclByaXZhdGUgPSBudWxscHRyOwor
ICAgICAgICBtX3BhZEFkZFJlbW92ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICB9CisKKyAg
ICBHU1RfVFJBQ0UoIkRlc3Ryb3lpbmcgQXBwZW5kUGlwZWxpbmUgKCVwKSIsIHRoaXMpOworCisg
ICAgLy8gRklYTUU6IE1heWJlIG5vdGlmeSBhcHBlbmRDb21wbGV0ZSBoZXJlPworCisgICAgaWYg
KG1fcGlwZWxpbmUpIHsKKyAgICAgICAgQVNTRVJUKG1fYnVzKTsKKyAgICAgICAgZ3N0X2J1c19y
ZW1vdmVfc2lnbmFsX3dhdGNoKG1fYnVzLmdldCgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgbV9waXBl
bGluZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fYXBwc3JjKSB7CisgICAgICAgIHJl
bW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9ieV9kYXRhKG1fYXBwc3JjLmdldCgpLCB0aGlzKTsKKyAgICAgICAgbV9hcHBz
cmMgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2RlbXV4KSB7CisjaWYgIUxPR19ESVNB
QkxFRAorICAgICAgICBHUmVmUHRyPEdzdFBhZD4gZGVtdXhlclBhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2RlbXV4LmdldCgpLCAic2luayIpKTsKKyAgICAgICAg
Z3N0X3BhZF9yZW1vdmVfcHJvYmUoZGVtdXhlclBhZC5nZXQoKSwgbV9kZW11eGVyRGF0YUVudGVy
aW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5wcm9iZUlkKTsKKyNlbmRpZgorCisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2RlbXV4LmdldCgpLCB0aGlzKTsKKyAg
ICAgICAgbV9kZW11eCA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fYXBwc2luaykgewor
ICAgICAgICBHUmVmUHRyPEdzdFBhZD4gYXBwc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0KCksICJzaW5rIikpOworICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEoYXBwc2lua1BhZC5nZXQoKSwgdGhpcyk7
CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNpbmsu
Z2V0KCksIHRoaXMpOworCisjaWYgIUxPR19ESVNBQkxFRAorICAgICAgICBnc3RfcGFkX3JlbW92
ZV9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBtX2FwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUlu
Zm9ybWF0aW9uLnByb2JlSWQpOworI2VuZGlmCisKKyAgICAgICAgbV9hcHBzaW5rID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBtX2FwcHNpbmtDYXBzID0gbnVsbHB0cjsKKyAgICBtX2RlbXV4ZXJT
cmNQYWRDYXBzID0gbnVsbHB0cjsKK307CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNsZWFyUGxh
eWVyUHJpdmF0ZSgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIEdT
VF9ERUJVRygiY2xlYW5pbmcgcHJpdmF0ZSBwbGF5ZXIiKTsKKworICAgIHsKKyAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9uZXdTYW1wbGVMb2NrKTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgQXBwZW5kUGlwZWxpbmUgd29uJ3QgcHJvY2VzcyBtb3JlIGRhdGEgZnJvbSBub3cgb24gYW5k
CisgICAgICAgIC8vIGluc3RydWN0IGhhbmRsZU5ld1NhbXBsZSB0byBhYm9ydCBpdHNlbGYgZnJv
bSBub3cgb24gYXMgd2VsbC4KKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoQXBwZW5kU3RhdGU6Oklu
dmFsaWQpOworCisgICAgICAgIC8vIEF3YWtlIGFueSBwZW5kaW5nIGhhbmRsZU5ld1NhbXBsZSBv
cGVyYXRpb24gaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQuCisgICAgICAgIG1fbmV3U2FtcGxlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9wYWRBZGRSZW1vdmVMb2NrKTsKKyAgICAgICAgbV9wbGF5ZXJQcml2YXRlID0gbnVs
bHB0cjsKKyAgICAgICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAg
fQorCisgICAgLy8gQW5kIG5vdyB0aGF0IG5vIGhhbmRsZU5ld1NhbXBsZSBvcGVyYXRpb25zIHdp
bGwgcmVtYWluIHN0YWxsZWQgd2FpdGluZworICAgIC8vIGZvciB0aGUgbWFpbiB0aHJlYWQsIHN0
b3AgdGhlIHBpcGVsaW5lLgorICAgIGlmIChtX3BpcGVsaW5lKQorICAgICAgICBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworfQorCit2b2lk
IEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVFbGVtZW50TWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdl
KQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGNvbnN0IEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsK
KyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJkcm0ta2V5LW5lZWRl
ZCIpKQorICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6
OktleU5lZ290aWF0aW9uKTsKKworICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2Ugd2lsbCB0YWtlIGNhcmUgb2Ygc2V0dGluZyB1cCBlbmNyeXB0aW9uLgorICAgIGlmIChtX3Bs
YXllclByaXZhdGUpCisgICAgICAgIG1fcGxheWVyUHJpdmF0ZS0+aGFuZGxlU3luY01lc3NhZ2Uo
bWVzc2FnZSk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcGxpY2F0aW9uTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2Vf
Z2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1l
KHN0cnVjdHVyZSwgImFwcHNyYy1uZWVkLWRhdGEiKSkgeworICAgICAgICBoYW5kbGVBcHBzcmNO
ZWVkRGF0YVJlY2VpdmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0
X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBzcmMtYnVmZmVyLWxlZnQiKSkgewor
ICAgICAgICBoYW5kbGVBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRl
bXV4ZXItY29ubmVjdC10by1hcHBzaW5rIikpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGRl
bXV4ZXJTcmNQYWQ7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0cnVjdHVyZSwgImRlbXV4
ZXItc3JjLXBhZCIsIEdfVFlQRV9PQkpFQ1QsICZkZW11eGVyU3JjUGFkLm91dFB0cigpLCBudWxs
cHRyKTsKKyAgICAgICAgQVNTRVJUKGRlbXV4ZXJTcmNQYWQpOworICAgICAgICBjb25uZWN0RGVt
dXhlclNyY1BhZFRvQXBwc2luayhkZW11eGVyU3JjUGFkLmdldCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFw
cHNpbmstY2Fwcy1jaGFuZ2VkIikpIHsKKyAgICAgICAgYXBwc2lua0NhcHNDaGFuZ2VkKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShz
dHJ1Y3R1cmUsICJhcHBzaW5rLW5ldy1zYW1wbGUiKSkgeworICAgICAgICBHUmVmUHRyPEdzdFNh
bXBsZT4gbmV3U2FtcGxlOworICAgICAgICBnc3Rfc3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJu
ZXctc2FtcGxlIiwgR1NUX1RZUEVfU0FNUExFLCAmbmV3U2FtcGxlLm91dFB0cigpLCBudWxscHRy
KTsKKworICAgICAgICBhcHBzaW5rTmV3U2FtcGxlKG5ld1NhbXBsZS5nZXQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1
cmUsICJhcHBzaW5rLWVvcyIpKSB7CisgICAgICAgIGFwcHNpbmtFT1MoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFwcGVu
ZFBpcGVsaW5lOjpoYW5kbGVBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCkKK3sKKyAgICBpZiAoIW1f
YXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KSB7CisgICAgICAgIEdTVF9UUkFDRSgiZGlzY2FyZGlu
ZyB1bnRpbCBhdCBsZWFzdCBhIGJ1ZmZlciBsZWF2ZXMgYXBwc3JjIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9hcHBlbmRTdGF0ZSA9PSBBcHBlbmRTdGF0ZTo6T25n
b2luZyB8fCBtX2FwcGVuZFN0YXRlID09IEFwcGVuZFN0YXRlOjpTYW1wbGluZyk7CisgICAgQVNT
RVJUKCFtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQpOworCisgICAgR1NUX1RSQUNFKCJyZWNlaXZl
ZCBuZWVkLWRhdGEgZnJvbSBhcHBzcmMiKTsKKworICAgIG1fYXBwc3JjTmVlZERhdGFSZWNlaXZl
ZCA9IHRydWU7CisgICAgY2hlY2tFbmRPZkFwcGVuZCgpOworfQorCit2b2lkIEFwcGVuZFBpcGVs
aW5lOjpoYW5kbGVBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKQoreworICAgIG1fYXBwc3JjQXRM
ZWFzdEFCdWZmZXJMZWZ0ID0gdHJ1ZTsKKyAgICBHU1RfVFJBQ0UoInJlY2VpdmVkIGJ1ZmZlci1s
ZWZ0IGZyb20gYXBwc3JjIik7CisjaWYgTE9HX0RJU0FCTEVECisgICAgcmVtb3ZlQXBwc3JjRGF0
YUxlYXZpbmdQcm9iZSgpOworI2VuZGlmCit9CisKK2dpbnQgQXBwZW5kUGlwZWxpbmU6OmlkKCkK
K3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAobV9pZCkKKyAg
ICAgICAgcmV0dXJuIG1faWQ7CisKKyAgICBzdGF0aWMgZ2ludCBzX3RvdGFsQXVkaW8gPSAwOwor
ICAgIHN0YXRpYyBnaW50IHNfdG90YWxWaWRlbyA9IDA7CisgICAgc3RhdGljIGdpbnQgc190b3Rh
bFRleHQgPSAwOworCisgICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKKyAgICBjYXNlIEF1ZGlv
OgorICAgICAgICBtX2lkID0gKytzX3RvdGFsQXVkaW87CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVmlkZW86CisgICAgICAgIG1faWQgPSArK3NfdG90YWxWaWRlbzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUZXh0OgorICAgICAgICBtX2lkID0gKytzX3RvdGFsVGV4dDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBVbmtub3duOgorICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgR1NU
X0VSUk9SKCJUcnlpbmcgdG8gZ2V0IGlkIGZvciBhIHBpcGVsaW5lIG9mIFVua25vd24vSW52YWxp
ZCB0eXBlIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBHU1RfREVCVUcoInN0cmVhbVR5cGU9JWQsIGlkPSVkIiwgc3RhdGljX2Nh
c3Q8aW50PihtX3N0cmVhbVR5cGUpLCBtX2lkKTsKKworICAgIHJldHVybiBtX2lkOworfQorCit2
b2lkIEFwcGVuZFBpcGVsaW5lOjpzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZSBuZXdBcHBlbmRT
dGF0ZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgLy8gVmFsaWQg
dHJhbnNpdGlvbnM6CisgICAgLy8gTm90U3RhcnRlZC0tPk9uZ29pbmctLT5EYXRhU3RhcnZlLS0+
Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgIGAtPkFi
b3J0aW5nLS0+Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAgICAgYC0+U2FtcGxp
bmctwrfCt8K3LT5TYW1wbGluZy0tPkxhc3RTYW1wbGUtLT5Ob3RTdGFydGVkCisgICAgLy8gICAg
ICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAt
PkFib3J0aW5nLS0+Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAgICAgYC0+S2V5
TmVnb3RpYXRpb24tLT5PbmdvaW5nLS0+Wy4uLl0KKyAgICAvLyAgICAgICAgICAgYC0+QWJvcnRp
bmctLT5Ob3RTdGFydGVkCisgICAgQXBwZW5kU3RhdGUgb2xkQXBwZW5kU3RhdGUgPSBtX2FwcGVu
ZFN0YXRlOworICAgIEFwcGVuZFN0YXRlIG5leHRBcHBlbmRTdGF0ZSA9IEFwcGVuZFN0YXRlOjpJ
bnZhbGlkOworCisgICAgaWYgKG9sZEFwcGVuZFN0YXRlICE9IG5ld0FwcGVuZFN0YXRlKQorICAg
ICAgICBHU1RfVFJBQ0UoIiVzIC0tPiAlcyIsIGR1bXBBcHBlbmRTdGF0ZShvbGRBcHBlbmRTdGF0
ZSksIGR1bXBBcHBlbmRTdGF0ZShuZXdBcHBlbmRTdGF0ZSkpOworCisgICAgYm9vbCBvayA9IGZh
bHNlOworCisgICAgc3dpdGNoIChvbGRBcHBlbmRTdGF0ZSkgeworICAgIGNhc2UgQXBwZW5kU3Rh
dGU6Ok5vdFN0YXJ0ZWQ6CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAgICAg
ICAgY2FzZSBBcHBlbmRTdGF0ZTo6T25nb2luZzoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RB
VEVfUExBWUlORyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0
ZTo6Tm90U3RhcnRlZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICht
X3BlbmRpbmdCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBHU1RfVFJBQ0UoInB1c2hpbmcgcGVu
ZGluZyBidWZmZXIgJXAiLCBtX3BlbmRpbmdCdWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgICAg
IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKEdTVF9BUFBfU1JDKGFwcHNyYygpKSwgbV9wZW5kaW5n
QnVmZmVyLmxlYWtSZWYoKSk7CisgICAgICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gQXBw
ZW5kU3RhdGU6Ok9uZ29pbmc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6QWJvcnRpbmc6CisgICAgICAgICAgICBvayA9IHRydWU7
CisgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBBcHBlbmRTdGF0ZTo6Tm90U3RhcnRlZDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpJbnZhbGlkOgor
ICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFwcGVuZFN0YXRlOjpLZXlOZWdvdGlhdGlvbjoKKyAgICAgICAgc3dpdGNoIChuZXdBcHBl
bmRTdGF0ZSkgeworICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpPbmdvaW5nOgorICAgICAgICBj
YXNlIEFwcGVuZFN0YXRlOjpJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFwcGVuZFN0YXRlOjpPbmdvaW5nOgorICAg
ICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0YXRlKSB7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6
OktleU5lZ290aWF0aW9uOgorICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpTYW1wbGluZzoKKyAg
ICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6SW52YWxpZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpEYXRhU3RhcnZl
OgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgR1NUX0RFQlVHKCJyZWNlaXZl
ZCBhbGwgcGVuZGluZyBzYW1wbGVzIik7CisgICAgICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZh
dGUtPmRpZFJlY2VpdmVBbGxQZW5kaW5nU2FtcGxlcygpOworICAgICAgICAgICAgaWYgKG1fYWJv
cnRQZW5kaW5nKQorICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IEFwcGVuZFN0YXRl
OjpBYm9ydGluZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0QXBwZW5k
U3RhdGUgPSBBcHBlbmRTdGF0ZTo6Tm90U3RhcnRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBcHBlbmRTdGF0ZTo6RGF0YVN0YXJ2ZToKKyAgICAgICAgc3dpdGNoIChu
ZXdBcHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpOb3RTdGFydGVkOgor
ICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6OkFib3J0aW5n
OgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0g
QXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXBwZW5kU3RhdGU6OlNhbXBsaW5nOgorICAgICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0
YXRlKSB7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6OlNhbXBsaW5nOgorICAgICAgICBjYXNl
IEFwcGVuZFN0YXRlOjpJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6Okxhc3RTYW1wbGU6CisgICAgICAg
ICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBHU1RfREVCVUcoInJlY2VpdmVkIGFsbCBwZW5k
aW5nIHNhbXBsZXMiKTsKKyAgICAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+ZGlkUmVj
ZWl2ZUFsbFBlbmRpbmdTYW1wbGVzKCk7CisgICAgICAgICAgICBpZiAobV9hYm9ydFBlbmRpbmcp
CisgICAgICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gQXBwZW5kU3RhdGU6OkFib3J0aW5n
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IEFw
cGVuZFN0YXRlOjpOb3RTdGFydGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFwcGVuZFN0YXRlOjpMYXN0U2FtcGxlOgorICAgICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0
YXRlKSB7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ6CisgICAgICAgIGNh
c2UgQXBwZW5kU3RhdGU6OkludmFsaWQ6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6QWJvcnRpbmc6CisgICAgICAg
ICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBBcHBlbmRTdGF0
ZTo6Tm90U3RhcnRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcHBl
bmRTdGF0ZTo6QWJvcnRpbmc6CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAg
ICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6Tm90U3RhcnRlZDoKKyAgICAgICAgICAgIG9rID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJlc2V0UGlwZWxpbmUoKTsKKyAgICAgICAgICAgIG1fYWJvcnRQZW5k
aW5nID0gZmFsc2U7CisgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBBcHBlbmRTdGF0ZTo6
Tm90U3RhcnRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFwcGVuZFN0YXRl
OjpJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFwcGVuZFN0YXRlOjpJbnZhbGlkOgorICAgICAgICBvayA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChvaykKKyAgICAgICAgbV9hcHBlbmRT
dGF0ZSA9IG5ld0FwcGVuZFN0YXRlOworICAgIGVsc2UKKyAgICAgICAgR1NUX0VSUk9SKCJJbnZh
bGlkIGFwcGVuZCBzdGF0ZSB0cmFuc2l0aW9uICVzIC0tPiAlcyIsIGR1bXBBcHBlbmRTdGF0ZShv
bGRBcHBlbmRTdGF0ZSksIGR1bXBBcHBlbmRTdGF0ZShuZXdBcHBlbmRTdGF0ZSkpOworCisgICAg
QVNTRVJUKG9rKTsKKworICAgIGlmIChuZXh0QXBwZW5kU3RhdGUgIT0gQXBwZW5kU3RhdGU6Oklu
dmFsaWQpCisgICAgICAgIHNldEFwcGVuZFN0YXRlKG5leHRBcHBlbmRTdGF0ZSk7Cit9CisKK3Zv
aWQgQXBwZW5kUGlwZWxpbmU6OnBhcnNlRGVtdXhlclNyY1BhZENhcHMoR3N0Q2FwcyogZGVtdXhl
clNyY1BhZENhcHMpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAg
bV9kZW11eGVyU3JjUGFkQ2FwcyA9IGFkb3B0R1JlZihkZW11eGVyU3JjUGFkQ2Fwcyk7CisgICAg
bV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpV
bmtub3duOworCisgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3Ry
dWN0dXJlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIDApOworICAgIGJvb2wgc2l6ZUNvbmZp
Z3VyZWQgPSBmYWxzZTsKKworI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDUsIDMpICYmIEVOQUJM
RShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQorICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1l
KHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtY2VuYyIpKSB7CisgICAgICAgIC8vIEFueSBwcmV2
aW91cyBkZWNyeXB0b3Igc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHBpcGVsaW5l
IGJ5IGRpc2Nvbm5lY3RGcm9tQXBwU2lua0Zyb21TdHJlYW1pbmdUaHJlYWQoKQorICAgICAgICBB
U1NFUlQoIW1fZGVjcnlwdG9yKTsKKworICAgICAgICBtX2RlY3J5cHRvciA9IGFkb3B0R1JlZihX
ZWJDb3JlOjpjcmVhdGVHc3REZWNyeXB0b3IoZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVj
dHVyZSwgInByb3RlY3Rpb24tc3lzdGVtIikpKTsKKyAgICAgICAgaWYgKCFtX2RlY3J5cHRvcikg
eworICAgICAgICAgICAgR1NUX0VSUk9SKCJkZWNyeXB0b3Igbm90IGZvdW5kIGZvciBjYXBzOiAl
IiBHU1RfUFRSX0ZPUk1BVCwgbV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBnY2hhciogb3JpZ2luYWxNZWRp
YVR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAib3JpZ2luYWwtbWVk
aWEtdHlwZSIpOworCisgICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KG9yaWdpbmFsTWVkaWFU
eXBlLCAidmlkZW8vIikpIHsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IDA7CisgICAgICAgICAg
ICBpbnQgaGVpZ2h0ID0gMDsKKyAgICAgICAgICAgIGZsb2F0IGZpbmFsSGVpZ2h0ID0gMDsKKwor
ICAgICAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJ3aWR0aCIs
ICZ3aWR0aCkgJiYgZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgImhlaWdodCIsICZo
ZWlnaHQpKSB7CisgICAgICAgICAgICAgICAgaW50IHJhdGlvTnVtZXJhdG9yID0gMTsKKyAgICAg
ICAgICAgICAgICBpbnQgcmF0aW9EZW5vbWluYXRvciA9IDE7CisKKyAgICAgICAgICAgICAgICBn
c3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbihzdHJ1Y3R1cmUsICJwaXhlbC1hc3BlY3QtcmF0aW8i
LCAmcmF0aW9OdW1lcmF0b3IsICZyYXRpb0Rlbm9taW5hdG9yKTsKKyAgICAgICAgICAgICAgICBm
aW5hbEhlaWdodCA9IGhlaWdodCAqICgoZmxvYXQpIHJhdGlvRGVub21pbmF0b3IgLyAoZmxvYXQp
IHJhdGlvTnVtZXJhdG9yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9wcmVzZW50
YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKHdpZHRoLCBmaW5hbEhlaWdodCk7CisgICAg
ICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3Ry
ZWFtZXI6OlZpZGVvOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9wcmVzZW50YXRp
b25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKCk7CisgICAgICAgICAgICBpZiAoZ19zdHJfaGFz
X3ByZWZpeChvcmlnaW5hbE1lZGlhVHlwZSwgImF1ZGlvLyIpKQorICAgICAgICAgICAgICAgIG1f
c3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVk
aW87CisgICAgICAgICAgICBlbHNlIGlmIChnX3N0cl9oYXNfcHJlZml4KG9yaWdpbmFsTWVkaWFU
eXBlLCAidGV4dC8iKSkKKyAgICAgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpN
ZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQ7CisgICAgICAgIH0KKyAgICAgICAg
c2l6ZUNvbmZpZ3VyZWQgPSB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCFzaXplQ29u
ZmlndXJlZCkgeworICAgICAgICBjb25zdCBjaGFyKiBzdHJ1Y3R1cmVOYW1lID0gZ3N0X3N0cnVj
dHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworICAgICAgICBHc3RWaWRlb0luZm8gaW5mbzsKKwor
ICAgICAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeChzdHJ1Y3R1cmVOYW1lLCAidmlkZW8vIikgJiYg
Z3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBkZW11eGVyU3JjUGFkQ2FwcykpIHsKKyAg
ICAgICAgICAgIGZsb2F0IHdpZHRoLCBoZWlnaHQ7CisKKyAgICAgICAgICAgIHdpZHRoID0gaW5m
by53aWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9IGluZm8uaGVpZ2h0ICogKChmbG9hdCkgaW5m
by5wYXJfZCAvIChmbG9hdCkgaW5mby5wYXJfbik7CisKKyAgICAgICAgICAgIG1fcHJlc2VudGF0
aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAg
IG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6
VmlkZW87CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUg
PSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4
KHN0cnVjdHVyZU5hbWUsICJhdWRpby8iKSkKKyAgICAgICAgICAgICAgICBtX3N0cmVhbVR5cGUg
PSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOworICAgICAg
ICAgICAgZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeChzdHJ1Y3R1cmVOYW1lLCAidGV4dC8iKSkK
KyAgICAgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVh
bVR5cGVHU3RyZWFtZXI6OlRleHQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQXBwZW5k
UGlwZWxpbmU6OmFwcHNpbmtDYXBzQ2hhbmdlZCgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWlu
VGhyZWFkKCkpOworCisgICAgaWYgKCFtX2FwcHNpbmspCisgICAgICAgIHJldHVybjsKKworICAg
IEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMg
PSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKHBhZC5nZXQoKSkpOworCisgICAg
aWYgKCFjYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Un
cmUgcmlnaHQgYWZ0ZXIgYSBuZXcgdHJhY2sgaGFzIGFwcGVhcmVkLiBPdGhlcndpc2UsIGl0J3Mg
YSBjYXBzIGNoYW5nZSBpbnNpZGUgdGhlIHNhbWUgdHJhY2suCisgICAgYm9vbCBwcmV2aW91c0Nh
cHNXZXJlTnVsbCA9ICFtX2FwcHNpbmtDYXBzOworCisgICAgaWYgKGdzdF9jYXBzX3JlcGxhY2Uo
Jm1fYXBwc2lua0NhcHMub3V0UHRyKCksIGNhcHMuZ2V0KCkpKSB7CisgICAgICAgIGlmIChtX3Bs
YXllclByaXZhdGUgJiYgcHJldmlvdXNDYXBzV2VyZU51bGwpCisgICAgICAgICAgICBtX3BsYXll
clByaXZhdGUtPnRyYWNrRGV0ZWN0ZWQodGhpcywgbV9vbGRUcmFjaywgbV90cmFjayk7CisgICAg
ICAgIGRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoKTsKKyAgICAgICAgZ3N0X2VsZW1l
bnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICB9
Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNoZWNrRW5kT2ZBcHBlbmQoKQoreworICAgIEFT
U0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV9hcHBzcmNOZWVkRGF0YVJl
Y2VpdmVkIHx8IChtX2FwcGVuZFN0YXRlICE9IEFwcGVuZFN0YXRlOjpPbmdvaW5nICYmIG1fYXBw
ZW5kU3RhdGUgIT0gQXBwZW5kU3RhdGU6OlNhbXBsaW5nKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR1NUX1RSQUNFKCJlbmQgb2YgYXBwZW5kIGRhdGEgbWFyayB3YXMgcmVjZWl2ZWQiKTsKKwor
ICAgIHN3aXRjaCAobV9hcHBlbmRTdGF0ZSkgeworICAgIGNhc2UgQXBwZW5kU3RhdGU6Ok9uZ29p
bmc6CisgICAgICAgIEdTVF9UUkFDRSgiRGF0YVN0YXJ2ZSIpOworICAgICAgICBtX2FwcHNyY05l
ZWREYXRhUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoQXBwZW5kU3Rh
dGU6OkRhdGFTdGFydmUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFwcGVuZFN0YXRlOjpT
YW1wbGluZzoKKyAgICAgICAgR1NUX1RSQUNFKCJMYXN0U2FtcGxlIik7CisgICAgICAgIG1fYXBw
c3JjTmVlZERhdGFSZWNlaXZlZCA9IGZhbHNlOworICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBl
bmRTdGF0ZTo6TGFzdFNhbXBsZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3Zv
aWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUoR3N0U2FtcGxlKiBzYW1wbGUpCit7
CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgeworICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX25ld1NhbXBsZUxvY2spOworCisgICAgICAgIC8vIElnbm9yZSBzYW1w
bGVzIGlmIHdlJ3JlIG5vdCBleHBlY3RpbmcgdGhlbS4gUmVmdXNlIHByb2Nlc3NpbmcgaWYgd2Un
cmUgaW4gSW52YWxpZCBzdGF0ZS4KKyAgICAgICAgaWYgKG1fYXBwZW5kU3RhdGUgIT0gQXBwZW5k
U3RhdGU6Ok9uZ29pbmcgJiYgbV9hcHBlbmRTdGF0ZSAhPSBBcHBlbmRTdGF0ZTo6U2FtcGxpbmcp
IHsKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJVbmV4cGVjdGVkIHNhbXBsZSwgYXBwZW5kU3Rh
dGU9JXMiLCBkdW1wQXBwZW5kU3RhdGUobV9hcHBlbmRTdGF0ZSkpOworICAgICAgICAgICAgLy8g
RklYTUU6IFJldHVybiBFUlJPUiBhbmQgZmluZCBhIG1vcmUgcm9idXN0IHdheSB0byBkZXRlY3Qg
dGhhdCBhbGwgdGhlCisgICAgICAgICAgICAvLyBkYXRhIGhhcyBiZWVuIHByb2Nlc3NlZCwgc28g
d2UgZG9uJ3QgbmVlZCB0byByZXNvcnQgdG8gdGhlc2UgaGFja3MuCisgICAgICAgICAgICAvLyBB
bGwgaW4gYWxsLCByZXR1cm4gT0ssIGV2ZW4gaWYgaXQncyBub3QgdGhlIHByb3BlciB0aGluZyB0
byBkby4gV2UgZG9uJ3Qgd2FudCB0byBicmVhayB0aGUgZGVtdXhlci4KKyAgICAgICAgICAgIG1f
Zmxvd1JldHVybiA9IEdTVF9GTE9XX09LOworICAgICAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRp
b24ubm90aWZ5T25lKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBSZWZQdHI8R1N0cmVhbWVyTWVkaWFTYW1wbGU+IG1lZGlhU2FtcGxlID0gV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFTYW1wbGU6OmNyZWF0ZShzYW1wbGUsIG1fcHJlc2VudGF0aW9uU2l6ZSwgdHJh
Y2tJZCgpKTsKKworICAgICAgICBHU1RfVFJBQ0UoImFwcGVuZDogdHJhY2tJZD0lcyBQVFM9JWYg
cHJlc2VudGF0aW9uU2l6ZT0lLjBmeCUuMGYiLCBtZWRpYVNhbXBsZS0+dHJhY2tJRCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkudG9GbG9h
dCgpLCBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgpLndpZHRoKCksIG1lZGlhU2FtcGxl
LT5wcmVzZW50YXRpb25TaXplKCkuaGVpZ2h0KCkpOworCisgICAgICAgIC8vIElmIHdlJ3JlIGJl
eW9uZCB0aGUgZHVyYXRpb24sIGlnbm9yZSB0aGlzIHNhbXBsZSBhbmQgdGhlIHJlbWFpbmluZyBv
bmVzLgorICAgICAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBtX21lZGlhU291cmNlQ2xpZW50LT5k
dXJhdGlvbigpOworICAgICAgICBpZiAoZHVyYXRpb24uaXNWYWxpZCgpICYmICFkdXJhdGlvbi5p
bmRlZmluaXRlVGltZSgpICYmIG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkgPiBkdXJh
dGlvbikgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJEZXRlY3RlZCBzYW1wbGUgKCVmKSBiZXlv
bmQgdGhlIGR1cmF0aW9uICglZiksIGRlY2xhcmluZyBMYXN0U2FtcGxlIiwgbWVkaWFTYW1wbGUt
PnByZXNlbnRhdGlvblRpbWUoKS50b0Zsb2F0KCksIGR1cmF0aW9uLnRvRmxvYXQoKSk7CisgICAg
ICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZTo6TGFzdFNhbXBsZSk7CisgICAgICAg
ICAgICBtX2Zsb3dSZXR1cm4gPSBHU1RfRkxPV19PSzsKKyAgICAgICAgICAgIG1fbmV3U2FtcGxl
Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gQWRkIGEgZ2FwIHNhbXBsZSBpZiBhIGdhcCBpcyBkZXRlY3RlZCBiZWZvcmUg
dGhlIGZpcnN0IHNhbXBsZS4KKyAgICAgICAgaWYgKG1lZGlhU2FtcGxlLT5kZWNvZGVUaW1lKCkg
PT0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpCisgICAgICAgICAgICAmJiBtZWRpYVNhbXBsZS0+cHJl
c2VudGF0aW9uVGltZSgpID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpCisgICAgICAgICAgICAmJiBt
ZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpIDw9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERv
dWJsZSgwLjEpKSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIkFkZGluZyBnYXAgb2Zmc2V0Iik7
CisgICAgICAgICAgICBtZWRpYVNhbXBsZS0+YXBwbHlQdHNPZmZzZXQoTWVkaWFUaW1lOjp6ZXJv
VGltZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+ZGlk
UmVjZWl2ZVNhbXBsZShtZWRpYVNhbXBsZSk7CisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVu
ZFN0YXRlOjpTYW1wbGluZyk7CisgICAgICAgIG1fZmxvd1JldHVybiA9IEdTVF9GTE9XX09LOwor
ICAgICAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICB9CisKKyAgICBj
aGVja0VuZE9mQXBwZW5kKCk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtFT1Mo
KQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIHN3aXRjaCAobV9h
cHBlbmRTdGF0ZSkgeworICAgIGNhc2UgQXBwZW5kU3RhdGU6OkFib3J0aW5nOgorICAgICAgICAv
LyBJZ25vcmVkLiBPcGVyYXRpb24gY29tcGxldGlvbiB3aWxsIGJlIG1hbmFnZWQgYnkgdGhlIEFi
b3J0aW5nLT5Ob3RTdGFydGVkIHRyYW5zaXRpb24uCisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFwcGVuZFN0YXRlOjpPbmdvaW5nOgorICAgICAgICAvLyBGaW5pc2ggT25nb2luZyBhbmQgU2Ft
cGxpbmcgc3RhdGVzLgorICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZTo6RGF0YVN0
YXJ2ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXBwZW5kU3RhdGU6OlNhbXBsaW5nOgor
ICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZTo6TGFzdFNhbXBsZSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdTVF9ERUJVRygiVW5leHBlY3RlZCBFT1Mi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpkaWRS
ZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5U
aHJlYWQoKSk7CisKKyAgICBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0
aWFsaXphdGlvblNlZ21lbnQgaW5pdGlhbGl6YXRpb25TZWdtZW50OworCisgICAgR1NUX0RFQlVH
KCJOb3RpZnlpbmcgU291cmNlQnVmZmVyIGZvciB0cmFjayAlcyIsIG1fdHJhY2stPmlkKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LmR1cmF0aW9u
ID0gbV9tZWRpYVNvdXJjZUNsaWVudC0+ZHVyYXRpb24oKTsKKyAgICBzd2l0Y2ggKG1fc3RyZWFt
VHlwZSkgeworICAgIGNhc2UgQXVkaW86IHsKKyAgICAgICAgV2ViQ29yZTo6U291cmNlQnVmZmVy
UHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRp
b24gaW5mbzsKKyAgICAgICAgaW5mby50cmFjayA9IHN0YXRpY19jYXN0PEF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyKj4obV90cmFjay5nZXQoKSk7CisgICAgICAgIGluZm8uZGVzY3JpcHRpb24g
PSBXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUobV9kZW11eGVyU3Jj
UGFkQ2Fwcy5nZXQoKSk7CisgICAgICAgIGluaXRpYWxpemF0aW9uU2VnbWVudC5hdWRpb1RyYWNr
cy5hcHBlbmQoaW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFZpZGVvOiB7
CisgICAgICAgIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0
aW9uU2VnbWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87CisgICAgICAgIGluZm8udHJh
Y2sgPSBzdGF0aWNfY2FzdDxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KG1fdHJhY2suZ2V0
KCkpOworICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFE
ZXNjcmlwdGlvbjo6Y3JlYXRlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCkpOworICAgICAgICBp
bml0aWFsaXphdGlvblNlZ21lbnQudmlkZW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0VSUk9SKCJVbnN1cHBvcnRl
ZCBvciB1bmtub3duIHN0cmVhbSB0eXBlIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPmRp
ZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoaW5pdGlhbGl6YXRpb25TZWdtZW50KTsKK30K
KworQXRvbWljU3RyaW5nIEFwcGVuZFBpcGVsaW5lOjp0cmFja0lkKCkKK3sKKyAgICBBU1NFUlQo
V1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fdHJhY2spCisgICAgICAgIHJldHVy
biBBdG9taWNTdHJpbmcoKTsKKworICAgIHJldHVybiBtX3RyYWNrLT5pZCgpOworfQorCit2b2lk
IEFwcGVuZFBpcGVsaW5lOjpyZXNldFBpcGVsaW5lKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01h
aW5UaHJlYWQoKSk7CisgICAgR1NUX0RFQlVHKCJyZXNldHRpbmcgcGlwZWxpbmUiKTsKKyAgICBt
X2FwcHNyY0F0TGVhc3RBQnVmZmVyTGVmdCA9IGZhbHNlOworICAgIHNldEFwcHNyY0RhdGFMZWF2
aW5nUHJvYmUoKTsKKworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9uZXdTYW1w
bGVMb2NrKTsKKyAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAg
ICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUkVB
RFkpOworICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgbnVs
bHB0ciwgbnVsbHB0ciwgMCk7CisgICAgfQorCisjaWYgKCEoTE9HX0RJU0FCTEVEIHx8IEdTVF9E
SVNBQkxFX0dTVF9ERUJVRykpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGhlcmUgZm9yIGRl
YnVnZ2luZyBwdXJwb3Nlcy4gSXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBoYXZlIGl0IGFzIGNs
YXNzIG1lbWJlci4KKyAgICAgICAgV1RGOjpTdHJpbmcgIGRvdEZpbGVOYW1lID0gU3RyaW5nOjpm
b3JtYXQoInJlc2V0LXBpcGVsaW5lLSVkIiwgKytpKTsKKyAgICAgICAgZ3N0X2RlYnVnX2Jpbl90
b19kb3RfZmlsZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hP
V19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyNlbmRpZgorCit9CisK
K3ZvaWQgQXBwZW5kUGlwZWxpbmU6OnNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKQoreworICAg
IGlmIChtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
R1NUX1RSQUNFKCJzZXR0aW5nIGFwcHNyYyBkYXRhIGxlYXZpbmcgcHJvYmUiKTsKKworICAgIEdS
ZWZQdHI8R3N0UGFkPiBhcHBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRp
Y19wYWQobV9hcHBzcmMuZ2V0KCksICJzcmMiKSk7CisgICAgbV9hcHBzcmNEYXRhTGVhdmluZ1By
b2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzcmNQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVf
VFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5k
UGlwZWxpbmVBcHBzcmNEYXRhTGVhdmluZyksIHRoaXMsIG51bGxwdHIpOworfQorCit2b2lkIEFw
cGVuZFBpcGVsaW5lOjpyZW1vdmVBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCkKK3sKKyAgICBpZiAo
IW1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1Rf
VFJBQ0UoInJlbW92aW5nIGFwcHNyYyBkYXRhIGxlYXZpbmcgcHJvYmUiKTsKKworICAgIEdSZWZQ
dHI8R3N0UGFkPiBhcHBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobV9hcHBzcmMuZ2V0KCksICJzcmMiKSk7CisgICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUoYXBw
c3JjUGFkLmdldCgpLCBtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCk7CisgICAgbV9hcHBzcmNE
YXRhTGVhdmluZ1Byb2JlSWQgPSAwOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjphYm9ydCgp
Cit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9ERUJVRygiYWJv
cnRpbmciKTsKKworICAgIG1fcGVuZGluZ0J1ZmZlciA9IG51bGxwdHI7CisKKyAgICAvLyBBYm9y
dCBhbHJlYWR5IG9uZ29pbmcuCisgICAgaWYgKG1fYWJvcnRQZW5kaW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2Fib3J0UGVuZGluZyA9IHRydWU7CisgICAgaWYgKG1fYXBwZW5kU3RhdGUg
PT0gQXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQpCisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVu
ZFN0YXRlOjpBYm9ydGluZyk7CisgICAgLy8gRWxzZSwgdGhlIGF1dG9tYXRpYyBzdGF0ZSB0cmFu
c2l0aW9ucyB3aWxsIHRha2UgY2FyZSB3aGVuIHRoZSBvbmdvaW5nIGFwcGVuZCBmaW5pc2hlcy4K
K30KKworR3N0Rmxvd1JldHVybiBBcHBlbmRQaXBlbGluZTo6cHVzaE5ld0J1ZmZlcihHc3RCdWZm
ZXIqIGJ1ZmZlcikKK3sKKyAgICBHc3RGbG93UmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChtX2Fi
b3J0UGVuZGluZykgeworICAgICAgICBtX3BlbmRpbmdCdWZmZXIgPSBhZG9wdEdSZWYoYnVmZmVy
KTsKKyAgICAgICAgcmVzdWx0ID0gR1NUX0ZMT1dfT0s7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c2V0QXBwZW5kU3RhdGUoQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpPbmdvaW5nKTsKKyAg
ICAgICAgR1NUX1RSQUNFKCJwdXNoaW5nIG5ldyBidWZmZXIgJXAiLCBidWZmZXIpOworICAgICAg
ICByZXN1bHQgPSBnc3RfYXBwX3NyY19wdXNoX2J1ZmZlcihHU1RfQVBQX1NSQyhhcHBzcmMoKSks
IGJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBBcHBlbmRQ
aXBlbGluZTo6cmVwb3J0QXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KCkKK3sKKyAgICBHU1RfVFJB
Q0UoImJ1ZmZlciBsZWZ0IGFwcHNyYywgcmVwb3N0aW5nIHRvIGJ1cyIpOworICAgIEdzdFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImFwcHNyYy1idWZmZXIt
bGVmdCIpOworICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGlj
YXRpb24oR1NUX09CSkVDVChtX2FwcHNyYy5nZXQoKSksIHN0cnVjdHVyZSk7CisgICAgZ3N0X2J1
c19wb3N0KG1fYnVzLmdldCgpLCBtZXNzYWdlKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6
cmVwb3J0QXBwc3JjTmVlZERhdGFSZWNlaXZlZCgpCit7CisgICAgR1NUX1RSQUNFKCJyZWNlaXZl
ZCBuZWVkLWRhdGEgc2lnbmFsIGF0IGFwcHNyYywgcmVwb3N0aW5nIHRvIGJ1cyIpOworICAgIEdz
dFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImFwcHNyYy1u
ZWVkLWRhdGEiKTsKKyAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2Fw
cGxpY2F0aW9uKEdTVF9PQkpFQ1QobV9hcHBzcmMuZ2V0KCkpLCBzdHJ1Y3R1cmUpOworICAgIGdz
dF9idXNfcG9zdChtX2J1cy5nZXQoKSwgbWVzc2FnZSk7Cit9CisKK0dzdEZsb3dSZXR1cm4gQXBw
ZW5kUGlwZWxpbmU6OmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoR3N0RWxlbWVudCogYXBwc2luaykK
K3sKKyAgICBBU1NFUlQoIVdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gRXZlbiBpZiB3
ZSdyZSBkaXNhYmxlZCwgaXQncyBpbXBvcnRhbnQgdG8gcHVsbCB0aGUgc2FtcGxlIG91dCBhbnl3
YXkgdG8KKyAgICAvLyBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBjaGFuZ2luZyB0byBHU1RfU1RBVEVf
TlVMTCBoYXZpbmcgYSBub24gZW1wdHkgYXBwc2luay4KKyAgICBHUmVmUHRyPEdzdFNhbXBsZT4g
c2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3NhbXBsZShHU1RfQVBQX1NJTkso
YXBwc2luaykpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX25ld1NhbXBsZUxvY2spOworCisg
ICAgaWYgKCFtX3BsYXllclByaXZhdGUgfHwgbV9hcHBlbmRTdGF0ZSA9PSBBcHBlbmRTdGF0ZTo6
SW52YWxpZCkgeworICAgICAgICBHU1RfV0FSTklORygiQXBwZW5kUGlwZWxpbmUgaGFzIGJlZW4g
ZGlzYWJsZWQsIGlnbm9yaW5nIHRoaXMgc2FtcGxlIik7CisgICAgICAgIHJldHVybiBHU1RfRkxP
V19FUlJPUjsKKyAgICB9CisKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1
Y3R1cmVfbmV3KCJhcHBzaW5rLW5ldy1zYW1wbGUiLCAibmV3LXNhbXBsZSIsIEdTVF9UWVBFX1NB
TVBMRSwgc2FtcGxlLmdldCgpLCBudWxscHRyKTsKKyAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0g
Z3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdTVF9PQkpFQ1QoYXBwc2luayksIHN0cnVjdHVy
ZSk7CisgICAgZ3N0X2J1c19wb3N0KG1fYnVzLmdldCgpLCBtZXNzYWdlKTsKKyAgICBHU1RfVFJB
Q0UoImFwcHNpbmstbmV3LXNhbXBsZSBtZXNzYWdlIHBvc3RlZCB0byBidXMiKTsKKworICAgIG1f
bmV3U2FtcGxlQ29uZGl0aW9uLndhaXQobV9uZXdTYW1wbGVMb2NrKTsKKyAgICAvLyBXZSd2ZSBi
ZWVuIGF3YWtlbiBiZWNhdXNlIHRoZSBzYW1wbGUgd2FzIHByb2Nlc3NlZCBvciBiZWNhdXNlIG9m
CisgICAgLy8gYW4gZXhjZXB0aW9uYWwgY29uZGl0aW9uIChlbnRlcmVkIGluIEludmFsaWQgc3Rh
dGUsIGRlc3RydWN0b3IsIGV0Yy4pLgorICAgIC8vIFdlIGNhbid0IHJlbGlhYmx5IGRlbGV0ZSBp
bmZvIGhlcmUsIGFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1NhbXBsZU1haW5UaHJlYWQgd2lsbCBk
byBpdC4KKworICAgIHJldHVybiBtX2Zsb3dSZXR1cm47Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxp
bmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbUFueVRocmVhZChHc3RQYWQqIGRl
bXV4ZXJTcmNQYWQpCit7CisgICAgaWYgKCFtX2FwcHNpbmspCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdTVF9ERUJVRygiY29ubmVjdGluZyB0byBhcHBzaW5rIik7CisKKyAgICBHUmVmUHRyPEdz
dFBhZD4gYXBwc2lua1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKKworICAgIC8vIE9ubHkgb25lIHN0cmVhbSBw
ZXIgZGVtdXhlciBpcyBzdXBwb3J0ZWQuCisgICAgQVNTRVJUKCFnc3RfcGFkX2lzX2xpbmtlZChh
cHBzaW5rU2lua1BhZC5nZXQoKSkpOworCisgICAgZ2ludDY0IHRpbWVMZW5ndGggPSAwOworICAg
IGlmIChnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbihtX2RlbXV4LmdldCgpLCBHU1RfRk9STUFU
X1RJTUUsICZ0aW1lTGVuZ3RoKQorICAgICAgICAmJiBzdGF0aWNfY2FzdDxndWludDY0Pih0aW1l
TGVuZ3RoKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgICAgICBtX2luaXRpYWxEdXJhdGlv
biA9IE1lZGlhVGltZShHU1RfVElNRV9BU19VU0VDT05EUyh0aW1lTGVuZ3RoKSwgR19VU0VDX1BF
Ul9TRUMpOworICAgIGVsc2UKKyAgICAgICAgbV9pbml0aWFsRHVyYXRpb24gPSBNZWRpYVRpbWU6
OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7CisKKyAgICBpZiAoV1RGOjppc01haW5UaHJlYWQoKSkK
KyAgICAgICAgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoZGVtdXhlclNyY1BhZCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIENhbGwgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmso
KSBpbiB0aGUgbWFpbiB0aHJlYWQgYW5kIHdhaXQuCisgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fcGFkQWRkUmVtb3ZlTG9jayk7CisgICAgICAgIGlmICghbV9wbGF5ZXJQcml2YXRlKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0
X3N0cnVjdHVyZV9uZXcoImRlbXV4ZXItY29ubmVjdC10by1hcHBzaW5rIiwgImRlbXV4ZXItc3Jj
LXBhZCIsIEdfVFlQRV9PQkpFQ1QsIGRlbXV4ZXJTcmNQYWQsIG51bGxwdHIpOworICAgICAgICBH
c3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdTVF9PQkpF
Q1QobV9kZW11eC5nZXQoKSksIHN0cnVjdHVyZSk7CisgICAgICAgIGdzdF9idXNfcG9zdChtX2J1
cy5nZXQoKSwgbWVzc2FnZSk7CisgICAgICAgIEdTVF9UUkFDRSgiZGVtdXhlci1jb25uZWN0LXRv
LWFwcHNpbmsgbWVzc2FnZSBwb3N0ZWQgdG8gYnVzIik7CisKKyAgICAgICAgbV9wYWRBZGRSZW1v
dmVDb25kaXRpb24ud2FpdChtX3BhZEFkZFJlbW92ZUxvY2spOworICAgIH0KKworICAgIC8vIE11
c3QgYmUgZG9uZSBpbiB0aGUgdGhyZWFkIHdlIHdlcmUgY2FsbGVkIGZyb20gKHVzdWFsbHkgc3Ry
ZWFtaW5nIHRocmVhZCkuCisgICAgYm9vbCBpc0RhdGEgPSAobV9zdHJlYW1UeXBlID09IFdlYkNv
cmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW8pCisgICAgICAgIHx8ICht
X3N0cmVhbVR5cGUgPT0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpW
aWRlbykKKyAgICAgICAgfHwgKG1fc3RyZWFtVHlwZSA9PSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0
cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQpOworCisgICAgaWYgKGlzRGF0YSkgeworICAgICAgICAv
LyBGSVhNRTogT25seSBhZGQgYXBwc2luayBvbmUgdGltZS4gVGhpcyBtZXRob2QgY2FuIGJlIGNh
bGxlZCBzZXZlcmFsIHRpbWVzLgorICAgICAgICBHUmVmUHRyPEdzdE9iamVjdD4gcGFyZW50ID0g
YWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9wYXJlbnQobV9hcHBzaW5rLmdldCgpKSk7CisgICAg
ICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3BpcGVs
aW5lLmdldCgpKSwgbV9hcHBzaW5rLmdldCgpKTsKKworI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQ
VEVEX01FRElBKQorICAgICAgICBpZiAobV9kZWNyeXB0b3IpIHsKKyAgICAgICAgICAgIGdzdF9v
YmplY3RfcmVmKG1fZGVjcnlwdG9yLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdT
VF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1fZGVjcnlwdG9yLmdldCgpKTsKKworICAgICAgICAg
ICAgR1JlZlB0cjxHc3RQYWQ+IGRlY3J5cHRvclNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRpY19wYWQobV9kZWNyeXB0b3IuZ2V0KCksICJzaW5rIikpOworICAgICAgICAg
ICAgZ3N0X3BhZF9saW5rKGRlbXV4ZXJTcmNQYWQsIGRlY3J5cHRvclNpbmtQYWQuZ2V0KCkpOwor
CisgICAgICAgICAgICBHUmVmUHRyPEdzdFBhZD4gZGVjcnlwdG9yU3JjUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fZGVjcnlwdG9yLmdldCgpLCAic3JjIikpOwor
ICAgICAgICAgICAgZ3N0X3BhZF9saW5rKGRlY3J5cHRvclNyY1BhZC5nZXQoKSwgYXBwc2lua1Np
bmtQYWQuZ2V0KCkpOworCisgICAgICAgICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhf
cGFyZW50KG1fYXBwc2luay5nZXQoKSk7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zeW5jX3N0
YXRlX3dpdGhfcGFyZW50KG1fZGVjcnlwdG9yLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyNl
bmRpZgorICAgICAgICAgICAgZ3N0X3BhZF9saW5rKGRlbXV4ZXJTcmNQYWQsIGFwcHNpbmtTaW5r
UGFkLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJl
bnQobV9hcHBzaW5rLmdldCgpKTsKKyNpZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkK
KyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICB9Cit9CisKK3ZvaWQgQXBwZW5kUGlw
ZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKEdzdFBhZCogZGVtdXhlclNyY1Bh
ZCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgR1NUX0RFQlVHKCJD
b25uZWN0aW5nIHRvIGFwcHNpbmsiKTsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFkQWRk
UmVtb3ZlTG9jayk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtTaW5rUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisK
KyAgICAvLyBPbmx5IG9uZSBzdHJlYW0gcGVyIGRlbXV4ZXIgaXMgc3VwcG9ydGVkLgorICAgIEFT
U0VSVCghZ3N0X3BhZF9pc19saW5rZWQoc2lua1NpbmtQYWQuZ2V0KCkpKTsKKworICAgIEdSZWZQ
dHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMoR1NU
X1BBRChkZW11eGVyU3JjUGFkKSkpOworCisgICAgaWYgKCFjYXBzIHx8IG1fYXBwZW5kU3RhdGUg
PT0gQXBwZW5kU3RhdGU6OkludmFsaWQgfHwgIW1fcGxheWVyUHJpdmF0ZSkgeworICAgICAgICBt
X3BhZEFkZFJlbW92ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICB7CisgICAgICAgIEdVbmlx
dWVQdHI8Z2NoYXI+IHN0cmNhcHMoZ3N0X2NhcHNfdG9fc3RyaW5nKGNhcHMuZ2V0KCkpKTsKKyAg
ICAgICAgR1NUX0RFQlVHKCIlcyIsIHN0cmNhcHMuZ2V0KCkpOworICAgIH0KKyNlbmRpZgorCisg
ICAgaWYgKG1faW5pdGlhbER1cmF0aW9uID4gbV9tZWRpYVNvdXJjZUNsaWVudC0+ZHVyYXRpb24o
KSkKKyAgICAgICAgbV9tZWRpYVNvdXJjZUNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKG1faW5pdGlh
bER1cmF0aW9uKTsKKworICAgIG1fb2xkVHJhY2sgPSBtX3RyYWNrOworCisgICAgcGFyc2VEZW11
eGVyU3JjUGFkQ2Fwcyhnc3RfY2Fwc19yZWYoY2Fwcy5nZXQoKSkpOworCisgICAgc3dpdGNoICht
X3N0cmVhbVR5cGUpIHsKKyAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdT
dHJlYW1lcjo6QXVkaW86CisgICAgICAgIGlmIChtX3BsYXllclByaXZhdGUpCisgICAgICAgICAg
ICBtX3RyYWNrID0gV2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZSht
X3BsYXllclByaXZhdGUtPnBpcGVsaW5lKCksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3Ry
ZWFtZXI6OlZpZGVvOgorICAgICAgICBpZiAobV9wbGF5ZXJQcml2YXRlKQorICAgICAgICAgICAg
bV90cmFjayA9IFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9w
bGF5ZXJQcml2YXRlLT5waXBlbGluZSgpLCBpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVh
bWVyOjpUZXh0OgorICAgICAgICBtX3RyYWNrID0gV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gTm8gdXNlZnVsIGRhdGEsIGJ1dCBub3Rp
ZnkgYW55d2F5IHRvIGNvbXBsZXRlIHRoZSBhcHBlbmQgb3BlcmF0aW9uLgorICAgICAgICBHU1Rf
REVCVUcoIlJlY2VpdmVkIGFsbCBwZW5kaW5nIHNhbXBsZXMgKG5vIGRhdGEpIik7CisgICAgICAg
IG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+ZGlkUmVjZWl2ZUFsbFBlbmRpbmdTYW1wbGVzKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fcGFkQWRkUmVtb3ZlQ29uZGl0aW9uLm5vdGlm
eU9uZSgpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpkaXNjb25uZWN0RGVtdXhlclNyY1Bh
ZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZCgpCit7CisgICAgR1NUX0RFQlVHKCJEaXNjb25uZWN0
aW5nIGFwcHNpbmsiKTsKKworICAgIC8vIE11c3QgYmUgZG9uZSBpbiB0aGUgdGhyZWFkIHdlIHdl
cmUgY2FsbGVkIGZyb20gKHVzdWFsbHkgc3RyZWFtaW5nIHRocmVhZCkuCisjaWYgRU5BQkxFKExF
R0FDWV9FTkNSWVBURURfTUVESUEpCisgICAgaWYgKG1fZGVjcnlwdG9yKSB7CisgICAgICAgIGdz
dF9lbGVtZW50X3VubGluayhtX2RlY3J5cHRvci5nZXQoKSwgbV9hcHBzaW5rLmdldCgpKTsKKyAg
ICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rKG1fZGVtdXguZ2V0KCksIG1fZGVjcnlwdG9yLmdldCgp
KTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fZGVjcnlwdG9yLmdldCgpLCBHU1Rf
U1RBVEVfTlVMTCk7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4obV9waXBlbGluZS5n
ZXQoKSksIG1fZGVjcnlwdG9yLmdldCgpKTsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICBn
c3RfZWxlbWVudF91bmxpbmsobV9kZW11eC5nZXQoKSwgbV9hcHBzaW5rLmdldCgpKTsKK30KKwor
c3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzaW5rQ2Fwc0NoYW5nZWQoR09iamVjdCogYXBw
c2lua1BhZCwgR1BhcmFtU3BlYyosIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sK
KyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJh
cHBzaW5rLWNhcHMtY2hhbmdlZCIpOworICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVz
c2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChhcHBzaW5rUGFkKSwgc3RydWN0dXJlKTsK
KyAgICBnc3RfYnVzX3Bvc3QoYXBwZW5kUGlwZWxpbmUtPmJ1cygpLCBtZXNzYWdlKTsKKyAgICBH
U1RfVFJBQ0UoImFwcHNpbmstY2Fwcy1jaGFuZ2VkIG1lc3NhZ2UgcG9zdGVkIHRvIGJ1cyIpOwor
fQorCitzdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxpbmVBcHBzcmNEYXRhTGVh
dmluZyhHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8sIEFwcGVuZFBpcGVsaW5lKiBhcHBl
bmRQaXBlbGluZSkKK3sKKyAgICBBU1NFUlQoR1NUX1BBRF9QUk9CRV9JTkZPX1RZUEUoaW5mbykg
JiBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSKTsKKworICAgIEdzdEJ1ZmZlciogYnVmZmVyID0g
R1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUihpbmZvKTsKKyAgICBnc2l6ZSBidWZmZXJTaXplID0g
Z3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpOworCisgICAgR1NUX1RSQUNFKCJidWZmZXIgb2Yg
c2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIGdvaW5nIHRocnUiLCBidWZmZXJTaXplKTsKKworICAg
IGFwcGVuZFBpcGVsaW5lLT5yZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKTsKKworICAg
IHJldHVybiBHU1RfUEFEX1BST0JFX09LOworfQorCisjaWYgIUxPR19ESVNBQkxFRAorc3RhdGlj
IEdzdFBhZFByb2JlUmV0dXJuIGFwcGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9u
KEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5mbywgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRp
b24qIHBhZFByb2JlSW5mb3JtYXRpb24pCit7CisgICAgQVNTRVJUKEdTVF9QQURfUFJPQkVfSU5G
T19UWVBFKGluZm8pICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUik7CisgICAgR3N0QnVmZmVy
KiBidWZmZXIgPSBHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSKGluZm8pOworICAgIEdTVF9UUkFD
RSgiJXM6IGJ1ZmZlciBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFUICIgZ29pbmcgdGhydSIsIHBh
ZFByb2JlSW5mb3JtYXRpb24tPmRlc2NyaXB0aW9uLCBnc3RfYnVmZmVyX2dldF9zaXplKGJ1ZmZl
cikpOworICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOworfQorI2VuZGlmCisKK3N0YXRpYyB2
b2lkIGFwcGVuZFBpcGVsaW5lQXBwc3JjTmVlZERhdGEoR3N0QXBwU3JjKiwgZ3VpbnQsIEFwcGVu
ZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICBhcHBlbmRQaXBlbGluZS0+cmVwb3J0
QXBwc3JjTmVlZERhdGFSZWNlaXZlZCgpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGlu
ZURlbXV4ZXJQYWRBZGRlZChHc3RFbGVtZW50KiwgR3N0UGFkKiBkZW11eGVyU3JjUGFkLCBBcHBl
bmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgYXBwZW5kUGlwZWxpbmUtPmNvbm5l
Y3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbUFueVRocmVhZChkZW11eGVyU3JjUGFkKTsKK30K
Kworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVEZW11eGVyUGFkUmVtb3ZlZChHc3RFbGVtZW50
KiwgR3N0UGFkKiwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKQoreworICAgIGFwcGVu
ZFBpcGVsaW5lLT5kaXNjb25uZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVh
ZCgpOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybiBhcHBlbmRQaXBlbGluZUFwcHNpbmtOZXdT
YW1wbGUoR3N0RWxlbWVudCogYXBwc2luaywgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5l
KQoreworICAgIHJldHVybiBhcHBlbmRQaXBlbGluZS0+aGFuZGxlTmV3QXBwc2lua1NhbXBsZShh
cHBzaW5rKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzaW5rRU9TKEdzdEVs
ZW1lbnQqLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgaWYgKFdURjo6
aXNNYWluVGhyZWFkKCkpCisgICAgICAgIGFwcGVuZFBpcGVsaW5lLT5hcHBzaW5rRU9TKCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVy
ZV9uZXdfZW1wdHkoImFwcHNpbmstZW9zIik7CisgICAgICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2Ug
PSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChhcHBlbmRQaXBlbGluZS0+
YXBwc2luaygpKSwgc3RydWN0dXJlKTsKKyAgICAgICAgZ3N0X2J1c19wb3N0KGFwcGVuZFBpcGVs
aW5lLT5idXMoKSwgbWVzc2FnZSk7CisgICAgICAgIEdTVF9UUkFDRSgiYXBwc2luay1lb3MgbWVz
c2FnZSBwb3N0ZWQgdG8gYnVzIik7CisgICAgfQorCisgICAgR1NUX0RFQlVHKCIlcyBtYWluIHRo
cmVhZCIsIChXVEY6OmlzTWFpblRocmVhZCgpKSA/ICJJcyIgOiAiTm90Iik7Cit9CisKKworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvQXBwZW5kUGlwZWxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2IwM2U0MDQ0ZWZmZDJiNGQxMmYy
YTYxYzEzZjZlMzNkZmYyZjVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5oCkBAIC0wLDAgKzEs
MTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisj
aW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNF
LmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorCisjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBBcHBlbmRQaXBlbGluZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxBcHBlbmRQaXBlbGluZT4geworcHVibGljOgorICAgIGVudW0gY2xhc3MgQXBwZW5kU3Rh
dGUgeyBJbnZhbGlkLCBOb3RTdGFydGVkLCBPbmdvaW5nLCBLZXlOZWdvdGlhdGlvbiwgRGF0YVN0
YXJ2ZSwgU2FtcGxpbmcsIExhc3RTYW1wbGUsIEFib3J0aW5nIH07CisKKyAgICBBcHBlbmRQaXBl
bGluZShSZWY8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+LCBSZWY8U291cmNlQnVmZmVy
UHJpdmF0ZUdTdHJlYW1lcj4sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYpOworICAg
IHZpcnR1YWwgfkFwcGVuZFBpcGVsaW5lKCk7CisKKyAgICB2b2lkIGhhbmRsZUVsZW1lbnRNZXNz
YWdlKEdzdE1lc3NhZ2UqKTsKKyAgICB2b2lkIGhhbmRsZUFwcGxpY2F0aW9uTWVzc2FnZShHc3RN
ZXNzYWdlKik7CisKKyAgICBnaW50IGlkKCk7CisgICAgQXBwZW5kU3RhdGUgYXBwZW5kU3RhdGUo
KSB7IHJldHVybiBtX2FwcGVuZFN0YXRlOyB9CisgICAgdm9pZCBzZXRBcHBlbmRTdGF0ZShBcHBl
bmRTdGF0ZSk7CisKKyAgICBHc3RGbG93UmV0dXJuIGhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoR3N0
RWxlbWVudCopOworICAgIEdzdEZsb3dSZXR1cm4gcHVzaE5ld0J1ZmZlcihHc3RCdWZmZXIqKTsK
KworICAgIC8vIFRha2VzIG93bmVyc2hpcCBvZiBjYXBzLgorICAgIHZvaWQgcGFyc2VEZW11eGVy
U3JjUGFkQ2FwcyhHc3RDYXBzKik7CisgICAgdm9pZCBhcHBzaW5rQ2Fwc0NoYW5nZWQoKTsKKyAg
ICB2b2lkIGFwcHNpbmtOZXdTYW1wbGUoR3N0U2FtcGxlKik7CisgICAgdm9pZCBhcHBzaW5rRU9T
KCk7CisgICAgdm9pZCBkaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KCk7CisgICAgQXRv
bWljU3RyaW5nIHRyYWNrSWQoKTsKKyAgICB2b2lkIGFib3J0KCk7CisKKyAgICB2b2lkIGNsZWFy
UGxheWVyUHJpdmF0ZSgpOworICAgIFJlZjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiBz
b3VyY2VCdWZmZXJQcml2YXRlKCkgeyByZXR1cm4gbV9zb3VyY2VCdWZmZXJQcml2YXRlLmdldCgp
OyB9CisgICAgR3N0QnVzKiBidXMoKSB7IHJldHVybiBtX2J1cy5nZXQoKTsgfQorICAgIEdzdEVs
ZW1lbnQqIHBpcGVsaW5lKCkgeyByZXR1cm4gbV9waXBlbGluZS5nZXQoKTsgfQorICAgIEdzdEVs
ZW1lbnQqIGFwcHNyYygpIHsgcmV0dXJuIG1fYXBwc3JjLmdldCgpOyB9CisgICAgR3N0RWxlbWVu
dCogYXBwc2luaygpIHsgcmV0dXJuIG1fYXBwc2luay5nZXQoKTsgfQorICAgIEdzdENhcHMqIGRl
bXV4ZXJTcmNQYWRDYXBzKCkgeyByZXR1cm4gbV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKTsgfQor
ICAgIEdzdENhcHMqIGFwcHNpbmtDYXBzKCkgeyByZXR1cm4gbV9hcHBzaW5rQ2Fwcy5nZXQoKTsg
fQorICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiB0cmFjaygpIHsgcmV0dXJu
IG1fdHJhY2s7IH0KKyAgICBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXIg
c3RyZWFtVHlwZSgpIHsgcmV0dXJuIG1fc3RyZWFtVHlwZTsgfQorCisgICAgdm9pZCBkaXNjb25u
ZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZCgpOworICAgIHZvaWQgY29u
bmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCopOworICAgIHZv
aWQgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKik7CisKKyAgICB2b2lkIHJl
cG9ydEFwcHNyY0F0TGVhc3RBQnVmZmVyTGVmdCgpOworICAgIHZvaWQgcmVwb3J0QXBwc3JjTmVl
ZERhdGFSZWNlaXZlZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgcmVzZXRQaXBlbGluZSgpOwor
ICAgIHZvaWQgY2hlY2tFbmRPZkFwcGVuZCgpOworICAgIHZvaWQgaGFuZGxlQXBwc3JjQXRMZWFz
dEFCdWZmZXJMZWZ0KCk7CisgICAgdm9pZCBoYW5kbGVBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCk7
CisgICAgdm9pZCByZW1vdmVBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisgICAgdm9pZCBzZXRB
cHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisKK3ByaXZhdGU6CisgICAgUmVmPE1lZGlhU291cmNl
Q2xpZW50R1N0cmVhbWVyTVNFPiBtX21lZGlhU291cmNlQ2xpZW50OworICAgIFJlZjxTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyPiBtX3NvdXJjZUJ1ZmZlclByaXZhdGU7CisgICAgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKiBtX3BsYXllclByaXZhdGU7CisKKyAgICAvLyAobV9t
ZWRpYVR5cGUsIG1faWQpIGlzIHVuaXF1ZS4KKyAgICBnaW50IG1faWQ7CisKKyAgICBNZWRpYVRp
bWUgbV9pbml0aWFsRHVyYXRpb247CisKKyAgICBHc3RGbG93UmV0dXJuIG1fZmxvd1JldHVybjsK
KworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKyAgICBHUmVmUHRyPEdzdEJ1
cz4gbV9idXM7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2FwcHNyYzsKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fZGVtdXg7CisjaWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEp
CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2RlY3J5cHRvcjsKKyNlbmRpZgorICAgIC8vIFRo
ZSBkZW11eGVyIGhhcyBvbmUgc3JjIHN0cmVhbSBvbmx5LCBzbyBvbmx5IG9uZSBhcHBzaW5rIGlz
IG5lZWRlZCBhbmQgbGlua2VkIHRvIGl0LgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hcHBz
aW5rOworCisgICAgTG9jayBtX25ld1NhbXBsZUxvY2s7CisgICAgQ29uZGl0aW9uIG1fbmV3U2Ft
cGxlQ29uZGl0aW9uOworICAgIExvY2sgbV9wYWRBZGRSZW1vdmVMb2NrOworICAgIENvbmRpdGlv
biBtX3BhZEFkZFJlbW92ZUNvbmRpdGlvbjsKKworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9hcHBz
aW5rQ2FwczsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fZGVtdXhlclNyY1BhZENhcHM7CisgICAg
RmxvYXRTaXplIG1fcHJlc2VudGF0aW9uU2l6ZTsKKworICAgIGJvb2wgbV9hcHBzcmNBdExlYXN0
QUJ1ZmZlckxlZnQ7CisgICAgYm9vbCBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQ7CisKKyAgICBn
dWxvbmcgbV9hcHBzcmNEYXRhTGVhdmluZ1Byb2JlSWQ7CisjaWYgIUxPR19ESVNBQkxFRAorICAg
IHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFByb2Jl
SW5mb3JtYXRpb247CisgICAgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gbV9hcHBzaW5rRGF0
YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbjsKKyNlbmRpZgorCisgICAgLy8gS2VlcHMgdHJh
Y2sgb2YgdGhlIHN0YXRlcyBvZiBhcHBlbmQgcHJvY2Vzc2luZywgdG8gYXZvaWQgcGVyZm9ybWlu
ZyBhY3Rpb25zIGluYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IHN0YXRlCisgICAgLy8gKGVn
OiBwcm9jZXNzaW5nIG1vcmUgc2FtcGxlcyB3aGVuIHRoZSBsYXN0IG9uZSBoYXMgYmVlbiBkZXRl
Y3RlZCwgZXRjLikuIFNlZSBzZXRBcHBlbmRTdGF0ZSgpIGZvciB2YWxpZAorICAgIC8vIHRyYW5z
aXRpb25zLgorICAgIEFwcGVuZFN0YXRlIG1fYXBwZW5kU3RhdGU7CisKKyAgICAvLyBBYm9ydHMg
Y2FuIG9ubHkgYmUgY29tcGxldGVkIHdoZW4gdGhlIG5vcm1hbCBzYW1wbGUgZGV0ZWN0aW9uIGhh
cyBmaW5pc2hlZC4gTWVhbndoaWxlLCB0aGUgd2lsbGluZyB0byBhYm9ydCBpcworICAgIC8vIGV4
cHJlc3NlZCBpbiB0aGlzIGZpZWxkLgorICAgIGJvb2wgbV9hYm9ydFBlbmRpbmc7CisKKyAgICBX
ZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXIgbV9zdHJlYW1UeXBlOworICAg
IFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBtX29sZFRyYWNrOworICAgIFJlZlB0
cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBtX3RyYWNrOworCisgICAgR1JlZlB0cjxHc3RC
dWZmZXI+IG1fcGVuZGluZ0J1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUuCisK
KyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292888</attachid>
            <date>2016-10-26 01:18:27 -0700</date>
            <delta_ts>2016-10-26 01:40:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162874-20161026081439.patch</filename>
            <type>text/plain</type>
            <size>49730</size>
            <attacher name="Enrique Ocaña">eocanha</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3ODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDllNDc1OTk1M2MzMzE5
NDQxYWVkNDllYTUwNjA2M2VlNjZlZTQwOS4uZDI4NmZiNjkwZDc1MDE5MzA5MmZlZGFhYTNjMWRm
MTVmYjg2Y2M2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY4IEBACiAyMDE2LTEwLTI2ICBFbnJp
cXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+CiAKKyAgICAgICAgW0dT
dHJlYW1lcl1bTVNFXVtFTUVdIEFwcGVuZCBQaXBlbGluZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODc0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
xb1hbiBEb2JlcsWhZWsuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBjby1hdXRob3JlZCB3aXRo
IFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyIDxjYWx2YXJpc0BpZ2FsaWEuY29tPiAoZGF0YSBzdGFy
dmUKKyAgICAgICAgYW5kIGxhc3Qgc2FtcGxlIGRldGVjdGlvbiwgZGVidWcgZmVhdHVyZXMpIGFu
ZCBQaGlsaXBwZSBOb3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPiAoRU1FCisgICAgICAgIHN1cHBv
cnQpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQ
aXBlbGluZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZHVtcEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lRWxlbWVudE1lc3NhZ2VDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRQaXBlbGluZUFwcGxpY2F0aW9uTWVzc2FnZUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6fkFwcGVuZFBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpjbGVhclBsYXllclByaXZhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUVsZW1lbnRNZXNzYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpoYW5kbGVBcHBsaWNhdGlvbk1lc3NhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNyY05lZWREYXRh
UmVjZWl2ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcHNy
Y0F0TGVhc3RBQnVmZmVyTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
aWQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnNldEFwcGVuZFN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpwYXJzZURlbXV4ZXJTcmNQYWRDYXBz
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rQ2Fwc0NoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNoZWNrRW5kT2ZBcHBlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtFT1MpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OmRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnRyYWNrSWQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlc2V0UGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwZW5kUGlwZWxpbmU6OnNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlbW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGVuZFBpcGVsaW5lOjpwdXNoTmV3QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVu
ZFBpcGVsaW5lOjpyZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwZW5kUGlwZWxpbmU6OnJlcG9ydEFwcHNyY05lZWREYXRhUmVjZWl2ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9B
cHBzaW5rRnJvbUFueVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6
Y29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5k
UGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2VkKToK
KyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZFBpcGVsaW5lQXBwc3JjRGF0YUxlYXZpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVQYWRQcm9iZURlYnVnSW5mb3JtYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRBZGRlZCk6CisgICAgICAgIChXZWJD
b3JlOjphcHBlbmRQaXBlbGluZURlbXV4ZXJQYWRSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OmFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1NhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjphcHBl
bmRQaXBlbGluZUFwcHNpbmtFT1MpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBcHBl
bmRQaXBlbGluZTo6YXBwZW5kU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxp
bmU6Om1lZGlhU291cmNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
Ojpzb3VyY2VCdWZmZXJQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5l
OjpidXMpOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnBpcGVsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzcmMpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmspOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlw
ZWxpbmU6OmRlbXV4ZXJTcmNQYWRDYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVs
aW5lOjphcHBzaW5rQ2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBlbmRQaXBlbGluZTo6dHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OnN0cmVhbVR5cGUpOgorCisy
MDE2LTEwLTI2ICBFbnJpcXVlIE9jYcOxYSBHb256w6FsZXogIDxlb2NhbmhhQGlnYWxpYS5jb20+
CisKICAgICAgICAgW0dTdHJlYW1lcl0gRHJhaW4gcXVlcnkgc3VwcG9ydAogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyODcyCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlw
ZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9BcHBlbmRQaXBlbGluZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGM2YWM3MWM4NDg1MGY3YjI3MjI1OTIz
YjBmNmQ5ZGMzYzBlZWVhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBwZW5kUGlwZWxpbmUuY3BwCkBAIC0wLDAgKzEs
MTA4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwKKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFpbnQgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQXBwZW5kUGlwZWxpbmUuaCIKKworI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikgJiYgRU5BQkxFKE1FRElBX1NPVVJDRSkKKworI2luY2x1ZGUgIkF1ZGlvVHJhY2tQ
cml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lck1lZGlhRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRp
YVNhbXBsZS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIklu
YmFuZFRleHRUcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYURlc2NyaXB0
aW9uLmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1
ZGUgIlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXBwL2dz
dGFwcHNpbmsuaD4KKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5oPgorI2luY2x1ZGUgPGdz
dC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+CisjaW5jbHVkZSA8Z3N0
L3ZpZGVvL3ZpZGVvLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyNpZiAhTE9HX0RJU0FCTEVECitzdHJ1Y3QgUGFkUHJvYmVJbmZvcm1hdGlv
biB7CisgICAgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lOworICAgIGNvbnN0IGNoYXIq
IGRlc2NyaXB0aW9uOworICAgIGd1bG9uZyBwcm9iZUlkOworfTsKKyNlbmRpZgorCitzdGF0aWMg
Y29uc3QgY2hhciogZHVtcEFwcGVuZFN0YXRlKEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZSBh
cHBlbmRTdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKGFwcGVuZFN0YXRlKSB7CisgICAgY2FzZSBBcHBl
bmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OkludmFsaWQ6CisgICAgICAgIHJldHVybiAiSW52YWxp
ZCI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ6Cisg
ICAgICAgIHJldHVybiAiTm90U3RhcnRlZCI7CisgICAgY2FzZSBBcHBlbmRQaXBlbGluZTo6QXBw
ZW5kU3RhdGU6Ok9uZ29pbmc6CisgICAgICAgIHJldHVybiAiT25nb2luZyI7CisgICAgY2FzZSBB
cHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6OktleU5lZ290aWF0aW9uOgorICAgICAgICByZXR1
cm4gIktleU5lZ290aWF0aW9uIjsKKyAgICBjYXNlIEFwcGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0
ZTo6RGF0YVN0YXJ2ZToKKyAgICAgICAgcmV0dXJuICJEYXRhU3RhcnZlIjsKKyAgICBjYXNlIEFw
cGVuZFBpcGVsaW5lOjpBcHBlbmRTdGF0ZTo6U2FtcGxpbmc6CisgICAgICAgIHJldHVybiAiU2Ft
cGxpbmciOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpMYXN0U2FtcGxl
OgorICAgICAgICByZXR1cm4gIkxhc3RTYW1wbGUiOworICAgIGNhc2UgQXBwZW5kUGlwZWxpbmU6
OkFwcGVuZFN0YXRlOjpBYm9ydGluZzoKKyAgICAgICAgcmV0dXJuICJBYm9ydGluZyI7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICIodW5rbm93bikiOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YShHc3RBcHBTcmMqLCBndWludCwgQXBw
ZW5kUGlwZWxpbmUqKTsKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lRGVtdXhlclBhZEFkZGVk
KEdzdEVsZW1lbnQqLCBHc3RQYWQqLCBBcHBlbmRQaXBlbGluZSopOworc3RhdGljIHZvaWQgYXBw
ZW5kUGlwZWxpbmVEZW11eGVyUGFkUmVtb3ZlZChHc3RFbGVtZW50KiwgR3N0UGFkKiwgQXBwZW5k
UGlwZWxpbmUqKTsKK3N0YXRpYyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwc2lua0NhcHNDaGFuZ2Vk
KEdPYmplY3QqLCBHUGFyYW1TcGVjKiwgQXBwZW5kUGlwZWxpbmUqKTsKK3N0YXRpYyBHc3RQYWRQ
cm9iZVJldHVybiBhcHBlbmRQaXBlbGluZUFwcHNyY0RhdGFMZWF2aW5nKEdzdFBhZCosIEdzdFBh
ZFByb2JlSW5mbyosIEFwcGVuZFBpcGVsaW5lKik7CisjaWYgIUxPR19ESVNBQkxFRAorc3RhdGlj
IEdzdFBhZFByb2JlUmV0dXJuIGFwcGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9u
KEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyosIHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uKik7
CisjZW5kaWYKK3N0YXRpYyBHc3RGbG93UmV0dXJuIGFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1Nh
bXBsZShHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxpbmUqKTsKK3N0YXRpYyB2b2lkIGFwcGVuZFBp
cGVsaW5lQXBwc2lua0VPUyhHc3RFbGVtZW50KiwgQXBwZW5kUGlwZWxpbmUqKTsKKworc3RhdGlj
IHZvaWQgYXBwZW5kUGlwZWxpbmVFbGVtZW50TWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyosIEdzdE1l
c3NhZ2UqIG1lc3NhZ2UsIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICBh
cHBlbmRQaXBlbGluZS0+aGFuZGxlRWxlbWVudE1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3N0YXRp
YyB2b2lkIGFwcGVuZFBpcGVsaW5lQXBwbGljYXRpb25NZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiwg
R3N0TWVzc2FnZSogbWVzc2FnZSwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKQorewor
ICAgIGFwcGVuZFBpcGVsaW5lLT5oYW5kbGVBcHBsaWNhdGlvbk1lc3NhZ2UobWVzc2FnZSk7Cit9
CisKK0FwcGVuZFBpcGVsaW5lOjpBcHBlbmRQaXBlbGluZShSZWY8TWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXJNU0U+IG1lZGlhU291cmNlQ2xpZW50LCBSZWY8U291cmNlQnVmZmVyUHJpdmF0ZUdT
dHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFJiBwbGF5ZXJQcml2YXRlKQorICAgIDogbV9tZWRpYVNvdXJjZUNsaWVudChtZWRpYVNvdXJj
ZUNsaWVudC5nZXQoKSkKKyAgICAsIG1fc291cmNlQnVmZmVyUHJpdmF0ZShzb3VyY2VCdWZmZXJQ
cml2YXRlLmdldCgpKQorICAgICwgbV9wbGF5ZXJQcml2YXRlKCZwbGF5ZXJQcml2YXRlKQorICAg
ICwgbV9pZCgwKQorICAgICwgbV9hcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoZmFsc2UpCisgICAg
LCBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQoZmFsc2UpCisgICAgLCBtX2FwcHNyY0RhdGFMZWF2
aW5nUHJvYmVJZCgwKQorICAgICwgbV9hcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZTo6Tm90U3RhcnRl
ZCkKKyAgICAsIG1fYWJvcnRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9zdHJlYW1UeXBlKFVua25v
d24pCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgR1NUX1RSQUNF
KCJDcmVhdGluZyBBcHBlbmRQaXBlbGluZSAoJXApIiwgdGhpcyk7CisKKyAgICAvLyBGSVhNRTog
Z2l2ZSBhIG5hbWUgdG8gdGhlIHBpcGVsaW5lLCBtYXliZSByZWxhdGVkIHdpdGggdGhlIHRyYWNr
IGl0J3MgbWFuYWdpbmcuCisgICAgLy8gVGhlIHRyYWNrIG5hbWUgaXMgc3RpbGwgdW5rbm93biBh
dCB0aGlzIHRpbWUsIHRob3VnaC4KKyAgICBtX3BpcGVsaW5lID0gYWRvcHRHUmVmKGdzdF9waXBl
bGluZV9uZXcobnVsbHB0cikpOworCisgICAgbV9idXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5l
X2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgZ3N0X2J1c19h
ZGRfc2lnbmFsX3dhdGNoKG1fYnVzLmdldCgpKTsKKyAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21l
c3NhZ2VfZW1pc3Npb24obV9idXMuZ2V0KCkpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtX2J1
cy5nZXQoKSwgInN5bmMtbWVzc2FnZTo6ZWxlbWVudCIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxp
bmVFbGVtZW50TWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdCht
X2J1cy5nZXQoKSwgIm1lc3NhZ2U6OmFwcGxpY2F0aW9uIiwgR19DQUxMQkFDSyhhcHBlbmRQaXBl
bGluZUFwcGxpY2F0aW9uTWVzc2FnZUNhbGxiYWNrKSwgdGhpcyk7CisKKyAgICAvLyBXZSBhc3Np
Z24gdGhlIGNyZWF0ZWQgaW5zdGFuY2VzIGhlcmUgaW5zdGVhZCBvZiBhZG9wdFJlZigpIGJlY2F1
c2UgZ3N0X2Jpbl9hZGRfbWFueSgpCisgICAgLy8gYmVsb3cgd2lsbCBhbHJlYWR5IHRha2UgdGhl
IGluaXRpYWwgcmVmZXJlbmNlIGFuZCB3ZSBuZWVkIGFuIGFkZGl0aW9uYWwgb25lIGZvciB1cy4K
KyAgICBtX2FwcHNyYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwgbnVsbHB0
cik7CisgICAgbV9kZW11eCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXRkZW11eCIsIG51
bGxwdHIpOworICAgIG1fYXBwc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc2lu
ayIsIG51bGxwdHIpOworCisgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKG1fZGVtdXguZ2V0KCkp
LCAiYWx3YXlzLWhvbm9yLXRmZHQiLCBUUlVFLCBudWxscHRyKTsKKyAgICBnc3RfYXBwX3Npbmtf
c2V0X2VtaXRfc2lnbmFscyhHU1RfQVBQX1NJTksobV9hcHBzaW5rLmdldCgpKSwgVFJVRSk7Cisg
ICAgZ3N0X2Jhc2Vfc2lua19zZXRfc3luYyhHU1RfQkFTRV9TSU5LKG1fYXBwc2luay5nZXQoKSks
IEZBTFNFKTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiBhcHBzaW5rUGFkID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisgICAg
Z19zaWduYWxfY29ubmVjdChhcHBzaW5rUGFkLmdldCgpLCAibm90aWZ5OjpjYXBzIiwgR19DQUxM
QkFDSyhhcHBlbmRQaXBlbGluZUFwcHNpbmtDYXBzQ2hhbmdlZCksIHRoaXMpOworCisgICAgc2V0
QXBwc3JjRGF0YUxlYXZpbmdQcm9iZSgpOworCisjaWYgIUxPR19ESVNBQkxFRAorICAgIEdSZWZQ
dHI8R3N0UGFkPiBkZW11eGVyUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKG1fZGVtdXguZ2V0KCksICJzaW5rIikpOworICAgIG1fZGVtdXhlckRhdGFFbnRlcmluZ1Bh
ZFByb2JlSW5mb3JtYXRpb24uYXBwZW5kUGlwZWxpbmUgPSB0aGlzOworICAgIG1fZGVtdXhlckRh
dGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAiZGVtdXhlciBkYXRh
IGVudGVyaW5nIjsKKyAgICBtX2RlbXV4ZXJEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9ybWF0aW9u
LnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShkZW11eGVyUGFkLmdldCgpLCBHU1RfUEFEX1BS
T0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJhY2s+KGFw
cGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9uKSwgJm1fZGVtdXhlckRhdGFFbnRl
cmluZ1BhZFByb2JlSW5mb3JtYXRpb24sIG51bGxwdHIpOworICAgIG1fYXBwc2lua0RhdGFFbnRl
cmluZ1BhZFByb2JlSW5mb3JtYXRpb24uYXBwZW5kUGlwZWxpbmUgPSB0aGlzOworICAgIG1fYXBw
c2lua0RhdGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24uZGVzY3JpcHRpb24gPSAiYXBwc2lu
ayBkYXRhIGVudGVyaW5nIjsKKyAgICBtX2FwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUluZm9y
bWF0aW9uLnByb2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBHU1Rf
UEFEX1BST0JFX1RZUEVfQlVGRkVSLCByZWludGVycHJldF9jYXN0PEdzdFBhZFByb2JlQ2FsbGJh
Y2s+KGFwcGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9uKSwgJm1fYXBwc2lua0Rh
dGFFbnRlcmluZ1BhZFByb2JlSW5mb3JtYXRpb24sIG51bGxwdHIpOworI2VuZGlmCisKKyAgICAv
LyBUaGVzZSBzaWduYWxzIHdvbid0IGJlIGNvbm5lY3RlZCBvdXRzaWRlIG9mIHRoZSBsaWZldGlt
ZSBvZiAidGhpcyIuCisgICAgZ19zaWduYWxfY29ubmVjdChtX2FwcHNyYy5nZXQoKSwgIm5lZWQt
ZGF0YSIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVBcHBzcmNOZWVkRGF0YSksIHRoaXMpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kZW11eC5nZXQoKSwgInBhZC1hZGRlZCIsIEdfQ0FMTEJB
Q0soYXBwZW5kUGlwZWxpbmVEZW11eGVyUGFkQWRkZWQpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KG1fZGVtdXguZ2V0KCksICJwYWQtcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlw
ZWxpbmVEZW11eGVyUGFkUmVtb3ZlZCksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9h
cHBzaW5rLmdldCgpLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0soYXBwZW5kUGlwZWxpbmVBcHBz
aW5rTmV3U2FtcGxlKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2FwcHNpbmsuZ2V0
KCksICJlb3MiLCBHX0NBTExCQUNLKGFwcGVuZFBpcGVsaW5lQXBwc2lua0VPUyksIHRoaXMpOwor
CisgICAgLy8gQWRkX21hbnkgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiBhIHJlZmVyZW5jZS4gVGhh
dCdzIHdoeSB3ZSB1c2VkIGFuIGFzc2lnbm1lbnQgYmVmb3JlLgorICAgIGdzdF9iaW5fYWRkX21h
bnkoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgbV9hcHBzcmMuZ2V0KCksIG1fZGVtdXguZ2V0
KCksIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmsobV9hcHBzcmMuZ2V0KCksIG1fZGVt
dXguZ2V0KCkpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
IEdTVF9TVEFURV9SRUFEWSk7Cit9OworCitBcHBlbmRQaXBlbGluZTo6fkFwcGVuZFBpcGVsaW5l
KCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICB7CisgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fbmV3U2FtcGxlTG9jayk7CisgICAgICAgIHNldEFwcGVuZFN0
YXRlKEFwcGVuZFN0YXRlOjpJbnZhbGlkKTsKKyAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRpb24u
bm90aWZ5T25lKCk7CisgICAgfQorCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X3BhZEFkZFJlbW92ZUxvY2spOworICAgICAgICBtX3BsYXllclByaXZhdGUgPSBudWxscHRyOwor
ICAgICAgICBtX3BhZEFkZFJlbW92ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICB9CisKKyAg
ICBHU1RfVFJBQ0UoIkRlc3Ryb3lpbmcgQXBwZW5kUGlwZWxpbmUgKCVwKSIsIHRoaXMpOworCisg
ICAgLy8gRklYTUU6IE1heWJlIG5vdGlmeSBhcHBlbmRDb21wbGV0ZSBoZXJlPworCisgICAgaWYg
KG1fcGlwZWxpbmUpIHsKKyAgICAgICAgQVNTRVJUKG1fYnVzKTsKKyAgICAgICAgZ3N0X2J1c19y
ZW1vdmVfc2lnbmFsX3dhdGNoKG1fYnVzLmdldCgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgbV9waXBl
bGluZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fYXBwc3JjKSB7CisgICAgICAgIHJl
bW92ZUFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9ieV9kYXRhKG1fYXBwc3JjLmdldCgpLCB0aGlzKTsKKyAgICAgICAgbV9hcHBz
cmMgPSBudWxscHRyOworICAgIH0KKworICAgIGlmIChtX2RlbXV4KSB7CisjaWYgIUxPR19ESVNB
QkxFRAorICAgICAgICBHUmVmUHRyPEdzdFBhZD4gZGVtdXhlclBhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2RlbXV4LmdldCgpLCAic2luayIpKTsKKyAgICAgICAg
Z3N0X3BhZF9yZW1vdmVfcHJvYmUoZGVtdXhlclBhZC5nZXQoKSwgbV9kZW11eGVyRGF0YUVudGVy
aW5nUGFkUHJvYmVJbmZvcm1hdGlvbi5wcm9iZUlkKTsKKyNlbmRpZgorCisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2RlbXV4LmdldCgpLCB0aGlzKTsKKyAg
ICAgICAgbV9kZW11eCA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKG1fYXBwc2luaykgewor
ICAgICAgICBHUmVmUHRyPEdzdFBhZD4gYXBwc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChtX2FwcHNpbmsuZ2V0KCksICJzaW5rIikpOworICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEoYXBwc2lua1BhZC5nZXQoKSwgdGhpcyk7
CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2FwcHNpbmsu
Z2V0KCksIHRoaXMpOworCisjaWYgIUxPR19ESVNBQkxFRAorICAgICAgICBnc3RfcGFkX3JlbW92
ZV9wcm9iZShhcHBzaW5rUGFkLmdldCgpLCBtX2FwcHNpbmtEYXRhRW50ZXJpbmdQYWRQcm9iZUlu
Zm9ybWF0aW9uLnByb2JlSWQpOworI2VuZGlmCisKKyAgICAgICAgbV9hcHBzaW5rID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBtX2FwcHNpbmtDYXBzID0gbnVsbHB0cjsKKyAgICBtX2RlbXV4ZXJT
cmNQYWRDYXBzID0gbnVsbHB0cjsKK307CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNsZWFyUGxh
eWVyUHJpdmF0ZSgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIEdT
VF9ERUJVRygiY2xlYW5pbmcgcHJpdmF0ZSBwbGF5ZXIiKTsKKworICAgIHsKKyAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9uZXdTYW1wbGVMb2NrKTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgQXBwZW5kUGlwZWxpbmUgd29uJ3QgcHJvY2VzcyBtb3JlIGRhdGEgZnJvbSBub3cgb24gYW5k
CisgICAgICAgIC8vIGluc3RydWN0IGhhbmRsZU5ld1NhbXBsZSB0byBhYm9ydCBpdHNlbGYgZnJv
bSBub3cgb24gYXMgd2VsbC4KKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoQXBwZW5kU3RhdGU6Oklu
dmFsaWQpOworCisgICAgICAgIC8vIEF3YWtlIGFueSBwZW5kaW5nIGhhbmRsZU5ld1NhbXBsZSBv
cGVyYXRpb24gaW4gdGhlIHN0cmVhbWluZyB0aHJlYWQuCisgICAgICAgIG1fbmV3U2FtcGxlQ29u
ZGl0aW9uLm5vdGlmeU9uZSgpOworICAgIH0KKworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9wYWRBZGRSZW1vdmVMb2NrKTsKKyAgICAgICAgbV9wbGF5ZXJQcml2YXRlID0gbnVs
bHB0cjsKKyAgICAgICAgbV9wYWRBZGRSZW1vdmVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAg
fQorCisgICAgLy8gQW5kIG5vdyB0aGF0IG5vIGhhbmRsZU5ld1NhbXBsZSBvcGVyYXRpb25zIHdp
bGwgcmVtYWluIHN0YWxsZWQgd2FpdGluZworICAgIC8vIGZvciB0aGUgbWFpbiB0aHJlYWQsIHN0
b3AgdGhlIHBpcGVsaW5lLgorICAgIGlmIChtX3BpcGVsaW5lKQorICAgICAgICBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworfQorCit2b2lk
IEFwcGVuZFBpcGVsaW5lOjpoYW5kbGVFbGVtZW50TWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdl
KQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGNvbnN0IEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsK
KyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJkcm0ta2V5LW5lZWRl
ZCIpKQorICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRQaXBlbGluZTo6QXBwZW5kU3RhdGU6
OktleU5lZ290aWF0aW9uKTsKKworICAgIC8vIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2Ugd2lsbCB0YWtlIGNhcmUgb2Ygc2V0dGluZyB1cCBlbmNyeXB0aW9uLgorICAgIGlmIChtX3Bs
YXllclByaXZhdGUpCisgICAgICAgIG1fcGxheWVyUHJpdmF0ZS0+aGFuZGxlU3luY01lc3NhZ2Uo
bWVzc2FnZSk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmhhbmRsZUFwcGxpY2F0aW9uTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVh
ZCgpKTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X21lc3NhZ2Vf
Z2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1l
KHN0cnVjdHVyZSwgImFwcHNyYy1uZWVkLWRhdGEiKSkgeworICAgICAgICBoYW5kbGVBcHBzcmNO
ZWVkRGF0YVJlY2VpdmVkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0
X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBzcmMtYnVmZmVyLWxlZnQiKSkgewor
ICAgICAgICBoYW5kbGVBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImRl
bXV4ZXItY29ubmVjdC10by1hcHBzaW5rIikpIHsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IGRl
bXV4ZXJTcmNQYWQ7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0cnVjdHVyZSwgImRlbXV4
ZXItc3JjLXBhZCIsIEdfVFlQRV9PQkpFQ1QsICZkZW11eGVyU3JjUGFkLm91dFB0cigpLCBudWxs
cHRyKTsKKyAgICAgICAgQVNTRVJUKGRlbXV4ZXJTcmNQYWQpOworICAgICAgICBjb25uZWN0RGVt
dXhlclNyY1BhZFRvQXBwc2luayhkZW11eGVyU3JjUGFkLmdldCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFw
cHNpbmstY2Fwcy1jaGFuZ2VkIikpIHsKKyAgICAgICAgYXBwc2lua0NhcHNDaGFuZ2VkKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShz
dHJ1Y3R1cmUsICJhcHBzaW5rLW5ldy1zYW1wbGUiKSkgeworICAgICAgICBHUmVmUHRyPEdzdFNh
bXBsZT4gbmV3U2FtcGxlOworICAgICAgICBnc3Rfc3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJu
ZXctc2FtcGxlIiwgR1NUX1RZUEVfU0FNUExFLCAmbmV3U2FtcGxlLm91dFB0cigpLCBudWxscHRy
KTsKKworICAgICAgICBhcHBzaW5rTmV3U2FtcGxlKG5ld1NhbXBsZS5nZXQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1
cmUsICJhcHBzaW5rLWVvcyIpKSB7CisgICAgICAgIGFwcHNpbmtFT1MoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEFwcGVu
ZFBpcGVsaW5lOjpoYW5kbGVBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCkKK3sKKyAgICBpZiAoIW1f
YXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KSB7CisgICAgICAgIEdTVF9UUkFDRSgiZGlzY2FyZGlu
ZyB1bnRpbCBhdCBsZWFzdCBhIGJ1ZmZlciBsZWF2ZXMgYXBwc3JjIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlQobV9hcHBlbmRTdGF0ZSA9PSBBcHBlbmRTdGF0ZTo6T25n
b2luZyB8fCBtX2FwcGVuZFN0YXRlID09IEFwcGVuZFN0YXRlOjpTYW1wbGluZyk7CisgICAgQVNT
RVJUKCFtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQpOworCisgICAgR1NUX1RSQUNFKCJyZWNlaXZl
ZCBuZWVkLWRhdGEgZnJvbSBhcHBzcmMiKTsKKworICAgIG1fYXBwc3JjTmVlZERhdGFSZWNlaXZl
ZCA9IHRydWU7CisgICAgY2hlY2tFbmRPZkFwcGVuZCgpOworfQorCit2b2lkIEFwcGVuZFBpcGVs
aW5lOjpoYW5kbGVBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKQoreworICAgIG1fYXBwc3JjQXRM
ZWFzdEFCdWZmZXJMZWZ0ID0gdHJ1ZTsKKyAgICBHU1RfVFJBQ0UoInJlY2VpdmVkIGJ1ZmZlci1s
ZWZ0IGZyb20gYXBwc3JjIik7CisjaWYgTE9HX0RJU0FCTEVECisgICAgcmVtb3ZlQXBwc3JjRGF0
YUxlYXZpbmdQcm9iZSgpOworI2VuZGlmCit9CisKK2dpbnQgQXBwZW5kUGlwZWxpbmU6OmlkKCkK
K3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAobV9pZCkKKyAg
ICAgICAgcmV0dXJuIG1faWQ7CisKKyAgICBzdGF0aWMgZ2ludCBzX3RvdGFsQXVkaW8gPSAwOwor
ICAgIHN0YXRpYyBnaW50IHNfdG90YWxWaWRlbyA9IDA7CisgICAgc3RhdGljIGdpbnQgc190b3Rh
bFRleHQgPSAwOworCisgICAgc3dpdGNoIChtX3N0cmVhbVR5cGUpIHsKKyAgICBjYXNlIEF1ZGlv
OgorICAgICAgICBtX2lkID0gKytzX3RvdGFsQXVkaW87CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgVmlkZW86CisgICAgICAgIG1faWQgPSArK3NfdG90YWxWaWRlbzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBUZXh0OgorICAgICAgICBtX2lkID0gKytzX3RvdGFsVGV4dDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBVbmtub3duOgorICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgR1NU
X0VSUk9SKCJUcnlpbmcgdG8gZ2V0IGlkIGZvciBhIHBpcGVsaW5lIG9mIFVua25vd24vSW52YWxp
ZCB0eXBlIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBHU1RfREVCVUcoInN0cmVhbVR5cGU9JWQsIGlkPSVkIiwgc3RhdGljX2Nh
c3Q8aW50PihtX3N0cmVhbVR5cGUpLCBtX2lkKTsKKworICAgIHJldHVybiBtX2lkOworfQorCit2
b2lkIEFwcGVuZFBpcGVsaW5lOjpzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZSBuZXdBcHBlbmRT
dGF0ZSkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgLy8gVmFsaWQg
dHJhbnNpdGlvbnM6CisgICAgLy8gTm90U3RhcnRlZC0tPk9uZ29pbmctLT5EYXRhU3RhcnZlLS0+
Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgIGAtPkFi
b3J0aW5nLS0+Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAgICAgYC0+U2FtcGxp
bmctwrfCt8K3LT5TYW1wbGluZy0tPkxhc3RTYW1wbGUtLT5Ob3RTdGFydGVkCisgICAgLy8gICAg
ICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAt
PkFib3J0aW5nLS0+Tm90U3RhcnRlZAorICAgIC8vICAgICAgICAgICB8ICAgICAgICAgYC0+S2V5
TmVnb3RpYXRpb24tLT5PbmdvaW5nLS0+Wy4uLl0KKyAgICAvLyAgICAgICAgICAgYC0+QWJvcnRp
bmctLT5Ob3RTdGFydGVkCisgICAgQXBwZW5kU3RhdGUgb2xkQXBwZW5kU3RhdGUgPSBtX2FwcGVu
ZFN0YXRlOworICAgIEFwcGVuZFN0YXRlIG5leHRBcHBlbmRTdGF0ZSA9IEFwcGVuZFN0YXRlOjpJ
bnZhbGlkOworCisgICAgaWYgKG9sZEFwcGVuZFN0YXRlICE9IG5ld0FwcGVuZFN0YXRlKQorICAg
ICAgICBHU1RfVFJBQ0UoIiVzIC0tPiAlcyIsIGR1bXBBcHBlbmRTdGF0ZShvbGRBcHBlbmRTdGF0
ZSksIGR1bXBBcHBlbmRTdGF0ZShuZXdBcHBlbmRTdGF0ZSkpOworCisgICAgYm9vbCBvayA9IGZh
bHNlOworCisgICAgc3dpdGNoIChvbGRBcHBlbmRTdGF0ZSkgeworICAgIGNhc2UgQXBwZW5kU3Rh
dGU6Ok5vdFN0YXJ0ZWQ6CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAgICAg
ICAgY2FzZSBBcHBlbmRTdGF0ZTo6T25nb2luZzoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RB
VEVfUExBWUlORyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0
ZTo6Tm90U3RhcnRlZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICht
X3BlbmRpbmdCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBHU1RfVFJBQ0UoInB1c2hpbmcgcGVu
ZGluZyBidWZmZXIgJXAiLCBtX3BlbmRpbmdCdWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgICAg
IGdzdF9hcHBfc3JjX3B1c2hfYnVmZmVyKEdTVF9BUFBfU1JDKGFwcHNyYygpKSwgbV9wZW5kaW5n
QnVmZmVyLmxlYWtSZWYoKSk7CisgICAgICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gQXBw
ZW5kU3RhdGU6Ok9uZ29pbmc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6QWJvcnRpbmc6CisgICAgICAgICAgICBvayA9IHRydWU7
CisgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBBcHBlbmRTdGF0ZTo6Tm90U3RhcnRlZDsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpJbnZhbGlkOgor
ICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFwcGVuZFN0YXRlOjpLZXlOZWdvdGlhdGlvbjoKKyAgICAgICAgc3dpdGNoIChuZXdBcHBl
bmRTdGF0ZSkgeworICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpPbmdvaW5nOgorICAgICAgICBj
YXNlIEFwcGVuZFN0YXRlOjpJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFwcGVuZFN0YXRlOjpPbmdvaW5nOgorICAg
ICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0YXRlKSB7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6
OktleU5lZ290aWF0aW9uOgorICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpTYW1wbGluZzoKKyAg
ICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6SW52YWxpZDoKKyAgICAgICAgICAgIG9rID0gdHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpEYXRhU3RhcnZl
OgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgR1NUX0RFQlVHKCJyZWNlaXZl
ZCBhbGwgcGVuZGluZyBzYW1wbGVzIik7CisgICAgICAgICAgICBtX3NvdXJjZUJ1ZmZlclByaXZh
dGUtPmRpZFJlY2VpdmVBbGxQZW5kaW5nU2FtcGxlcygpOworICAgICAgICAgICAgaWYgKG1fYWJv
cnRQZW5kaW5nKQorICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IEFwcGVuZFN0YXRl
OjpBYm9ydGluZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0QXBwZW5k
U3RhdGUgPSBBcHBlbmRTdGF0ZTo6Tm90U3RhcnRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBcHBlbmRTdGF0ZTo6RGF0YVN0YXJ2ZToKKyAgICAgICAgc3dpdGNoIChu
ZXdBcHBlbmRTdGF0ZSkgeworICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpOb3RTdGFydGVkOgor
ICAgICAgICBjYXNlIEFwcGVuZFN0YXRlOjpJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6OkFib3J0aW5n
OgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0g
QXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXBwZW5kU3RhdGU6OlNhbXBsaW5nOgorICAgICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0
YXRlKSB7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6OlNhbXBsaW5nOgorICAgICAgICBjYXNl
IEFwcGVuZFN0YXRlOjpJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6Okxhc3RTYW1wbGU6CisgICAgICAg
ICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBHU1RfREVCVUcoInJlY2VpdmVkIGFsbCBwZW5k
aW5nIHNhbXBsZXMiKTsKKyAgICAgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+ZGlkUmVj
ZWl2ZUFsbFBlbmRpbmdTYW1wbGVzKCk7CisgICAgICAgICAgICBpZiAobV9hYm9ydFBlbmRpbmcp
CisgICAgICAgICAgICAgICAgbmV4dEFwcGVuZFN0YXRlID0gQXBwZW5kU3RhdGU6OkFib3J0aW5n
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRBcHBlbmRTdGF0ZSA9IEFw
cGVuZFN0YXRlOjpOb3RTdGFydGVkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFwcGVuZFN0YXRlOjpMYXN0U2FtcGxlOgorICAgICAgICBzd2l0Y2ggKG5ld0FwcGVuZFN0
YXRlKSB7CisgICAgICAgIGNhc2UgQXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQ6CisgICAgICAgIGNh
c2UgQXBwZW5kU3RhdGU6OkludmFsaWQ6CisgICAgICAgICAgICBvayA9IHRydWU7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6QWJvcnRpbmc6CisgICAgICAg
ICAgICBvayA9IHRydWU7CisgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBBcHBlbmRTdGF0
ZTo6Tm90U3RhcnRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcHBl
bmRTdGF0ZTo6QWJvcnRpbmc6CisgICAgICAgIHN3aXRjaCAobmV3QXBwZW5kU3RhdGUpIHsKKyAg
ICAgICAgY2FzZSBBcHBlbmRTdGF0ZTo6Tm90U3RhcnRlZDoKKyAgICAgICAgICAgIG9rID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJlc2V0UGlwZWxpbmUoKTsKKyAgICAgICAgICAgIG1fYWJvcnRQZW5k
aW5nID0gZmFsc2U7CisgICAgICAgICAgICBuZXh0QXBwZW5kU3RhdGUgPSBBcHBlbmRTdGF0ZTo6
Tm90U3RhcnRlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFwcGVuZFN0YXRl
OjpJbnZhbGlkOgorICAgICAgICAgICAgb2sgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFwcGVuZFN0YXRlOjpJbnZhbGlkOgorICAgICAgICBvayA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChvaykKKyAgICAgICAgbV9hcHBlbmRT
dGF0ZSA9IG5ld0FwcGVuZFN0YXRlOworICAgIGVsc2UKKyAgICAgICAgR1NUX0VSUk9SKCJJbnZh
bGlkIGFwcGVuZCBzdGF0ZSB0cmFuc2l0aW9uICVzIC0tPiAlcyIsIGR1bXBBcHBlbmRTdGF0ZShv
bGRBcHBlbmRTdGF0ZSksIGR1bXBBcHBlbmRTdGF0ZShuZXdBcHBlbmRTdGF0ZSkpOworCisgICAg
QVNTRVJUKG9rKTsKKworICAgIGlmIChuZXh0QXBwZW5kU3RhdGUgIT0gQXBwZW5kU3RhdGU6Oklu
dmFsaWQpCisgICAgICAgIHNldEFwcGVuZFN0YXRlKG5leHRBcHBlbmRTdGF0ZSk7Cit9CisKK3Zv
aWQgQXBwZW5kUGlwZWxpbmU6OnBhcnNlRGVtdXhlclNyY1BhZENhcHMoR3N0Q2FwcyogZGVtdXhl
clNyY1BhZENhcHMpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAg
bV9kZW11eGVyU3JjUGFkQ2FwcyA9IGFkb3B0R1JlZihkZW11eGVyU3JjUGFkQ2Fwcyk7CisgICAg
bV9zdHJlYW1UeXBlID0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpV
bmtub3duOworCisgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3Ry
dWN0dXJlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCksIDApOworICAgIGJvb2wgc2l6ZUNvbmZp
Z3VyZWQgPSBmYWxzZTsKKworI2lmIEdTVF9DSEVDS19WRVJTSU9OKDEsIDUsIDMpICYmIEVOQUJM
RShMRUdBQ1lfRU5DUllQVEVEX01FRElBKQorICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1l
KHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtY2VuYyIpKSB7CisgICAgICAgIC8vIEFueSBwcmV2
aW91cyBkZWNyeXB0b3Igc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHBpcGVsaW5l
IGJ5IGRpc2Nvbm5lY3RGcm9tQXBwU2lua0Zyb21TdHJlYW1pbmdUaHJlYWQoKQorICAgICAgICBB
U1NFUlQoIW1fZGVjcnlwdG9yKTsKKworICAgICAgICBtX2RlY3J5cHRvciA9IGFkb3B0R1JlZihX
ZWJDb3JlOjpjcmVhdGVHc3REZWNyeXB0b3IoZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVj
dHVyZSwgInByb3RlY3Rpb24tc3lzdGVtIikpKTsKKyAgICAgICAgaWYgKCFtX2RlY3J5cHRvcikg
eworICAgICAgICAgICAgR1NUX0VSUk9SKCJkZWNyeXB0b3Igbm90IGZvdW5kIGZvciBjYXBzOiAl
IiBHU1RfUFRSX0ZPUk1BVCwgbV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBnY2hhciogb3JpZ2luYWxNZWRp
YVR5cGUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAib3JpZ2luYWwtbWVk
aWEtdHlwZSIpOworCisgICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4KG9yaWdpbmFsTWVkaWFU
eXBlLCAidmlkZW8vIikpIHsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IDA7CisgICAgICAgICAg
ICBpbnQgaGVpZ2h0ID0gMDsKKyAgICAgICAgICAgIGZsb2F0IGZpbmFsSGVpZ2h0ID0gMDsKKwor
ICAgICAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJ3aWR0aCIs
ICZ3aWR0aCkgJiYgZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgImhlaWdodCIsICZo
ZWlnaHQpKSB7CisgICAgICAgICAgICAgICAgaW50IHJhdGlvTnVtZXJhdG9yID0gMTsKKyAgICAg
ICAgICAgICAgICBpbnQgcmF0aW9EZW5vbWluYXRvciA9IDE7CisKKyAgICAgICAgICAgICAgICBn
c3Rfc3RydWN0dXJlX2dldF9mcmFjdGlvbihzdHJ1Y3R1cmUsICJwaXhlbC1hc3BlY3QtcmF0aW8i
LCAmcmF0aW9OdW1lcmF0b3IsICZyYXRpb0Rlbm9taW5hdG9yKTsKKyAgICAgICAgICAgICAgICBm
aW5hbEhlaWdodCA9IGhlaWdodCAqICgoZmxvYXQpIHJhdGlvRGVub21pbmF0b3IgLyAoZmxvYXQp
IHJhdGlvTnVtZXJhdG9yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9wcmVzZW50
YXRpb25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKHdpZHRoLCBmaW5hbEhlaWdodCk7CisgICAg
ICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3Ry
ZWFtZXI6OlZpZGVvOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9wcmVzZW50YXRp
b25TaXplID0gV2ViQ29yZTo6RmxvYXRTaXplKCk7CisgICAgICAgICAgICBpZiAoZ19zdHJfaGFz
X3ByZWZpeChvcmlnaW5hbE1lZGlhVHlwZSwgImF1ZGlvLyIpKQorICAgICAgICAgICAgICAgIG1f
c3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVk
aW87CisgICAgICAgICAgICBlbHNlIGlmIChnX3N0cl9oYXNfcHJlZml4KG9yaWdpbmFsTWVkaWFU
eXBlLCAidGV4dC8iKSkKKyAgICAgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpN
ZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQ7CisgICAgICAgIH0KKyAgICAgICAg
c2l6ZUNvbmZpZ3VyZWQgPSB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCFzaXplQ29u
ZmlndXJlZCkgeworICAgICAgICBjb25zdCBjaGFyKiBzdHJ1Y3R1cmVOYW1lID0gZ3N0X3N0cnVj
dHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworICAgICAgICBHc3RWaWRlb0luZm8gaW5mbzsKKwor
ICAgICAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeChzdHJ1Y3R1cmVOYW1lLCAidmlkZW8vIikgJiYg
Z3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBkZW11eGVyU3JjUGFkQ2FwcykpIHsKKyAg
ICAgICAgICAgIGZsb2F0IHdpZHRoLCBoZWlnaHQ7CisKKyAgICAgICAgICAgIHdpZHRoID0gaW5m
by53aWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9IGluZm8uaGVpZ2h0ICogKChmbG9hdCkgaW5m
by5wYXJfZCAvIChmbG9hdCkgaW5mby5wYXJfbik7CisKKyAgICAgICAgICAgIG1fcHJlc2VudGF0
aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAg
IG1fc3RyZWFtVHlwZSA9IFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6
VmlkZW87CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3ByZXNlbnRhdGlvblNpemUg
PSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKKyAgICAgICAgICAgIGlmIChnX3N0cl9oYXNfcHJlZml4
KHN0cnVjdHVyZU5hbWUsICJhdWRpby8iKSkKKyAgICAgICAgICAgICAgICBtX3N0cmVhbVR5cGUg
PSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OkF1ZGlvOworICAgICAg
ICAgICAgZWxzZSBpZiAoZ19zdHJfaGFzX3ByZWZpeChzdHJ1Y3R1cmVOYW1lLCAidGV4dC8iKSkK
KyAgICAgICAgICAgICAgICBtX3N0cmVhbVR5cGUgPSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVh
bVR5cGVHU3RyZWFtZXI6OlRleHQ7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQXBwZW5k
UGlwZWxpbmU6OmFwcHNpbmtDYXBzQ2hhbmdlZCgpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWlu
VGhyZWFkKCkpOworCisgICAgaWYgKCFtX2FwcHNpbmspCisgICAgICAgIHJldHVybjsKKworICAg
IEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMg
PSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKHBhZC5nZXQoKSkpOworCisgICAg
aWYgKCFjYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2Un
cmUgcmlnaHQgYWZ0ZXIgYSBuZXcgdHJhY2sgaGFzIGFwcGVhcmVkLiBPdGhlcndpc2UsIGl0J3Mg
YSBjYXBzIGNoYW5nZSBpbnNpZGUgdGhlIHNhbWUgdHJhY2suCisgICAgYm9vbCBwcmV2aW91c0Nh
cHNXZXJlTnVsbCA9ICFtX2FwcHNpbmtDYXBzOworCisgICAgaWYgKGdzdF9jYXBzX3JlcGxhY2Uo
Jm1fYXBwc2lua0NhcHMub3V0UHRyKCksIGNhcHMuZ2V0KCkpKSB7CisgICAgICAgIGlmIChtX3Bs
YXllclByaXZhdGUgJiYgcHJldmlvdXNDYXBzV2VyZU51bGwpCisgICAgICAgICAgICBtX3BsYXll
clByaXZhdGUtPnRyYWNrRGV0ZWN0ZWQodGhpcywgbV9vbGRUcmFjaywgbV90cmFjayk7CisgICAg
ICAgIGRpZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoKTsKKyAgICAgICAgZ3N0X2VsZW1l
bnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICB9
Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmNoZWNrRW5kT2ZBcHBlbmQoKQoreworICAgIEFT
U0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghbV9hcHBzcmNOZWVkRGF0YVJl
Y2VpdmVkIHx8IChtX2FwcGVuZFN0YXRlICE9IEFwcGVuZFN0YXRlOjpPbmdvaW5nICYmIG1fYXBw
ZW5kU3RhdGUgIT0gQXBwZW5kU3RhdGU6OlNhbXBsaW5nKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR1NUX1RSQUNFKCJlbmQgb2YgYXBwZW5kIGRhdGEgbWFyayB3YXMgcmVjZWl2ZWQiKTsKKwor
ICAgIHN3aXRjaCAobV9hcHBlbmRTdGF0ZSkgeworICAgIGNhc2UgQXBwZW5kU3RhdGU6Ok9uZ29p
bmc6CisgICAgICAgIEdTVF9UUkFDRSgiRGF0YVN0YXJ2ZSIpOworICAgICAgICBtX2FwcHNyY05l
ZWREYXRhUmVjZWl2ZWQgPSBmYWxzZTsKKyAgICAgICAgc2V0QXBwZW5kU3RhdGUoQXBwZW5kU3Rh
dGU6OkRhdGFTdGFydmUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFwcGVuZFN0YXRlOjpT
YW1wbGluZzoKKyAgICAgICAgR1NUX1RSQUNFKCJMYXN0U2FtcGxlIik7CisgICAgICAgIG1fYXBw
c3JjTmVlZERhdGFSZWNlaXZlZCA9IGZhbHNlOworICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBl
bmRTdGF0ZTo6TGFzdFNhbXBsZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3Zv
aWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtOZXdTYW1wbGUoR3N0U2FtcGxlKiBzYW1wbGUpCit7
CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgeworICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX25ld1NhbXBsZUxvY2spOworCisgICAgICAgIC8vIElnbm9yZSBzYW1w
bGVzIGlmIHdlJ3JlIG5vdCBleHBlY3RpbmcgdGhlbS4gUmVmdXNlIHByb2Nlc3NpbmcgaWYgd2Un
cmUgaW4gSW52YWxpZCBzdGF0ZS4KKyAgICAgICAgaWYgKG1fYXBwZW5kU3RhdGUgIT0gQXBwZW5k
U3RhdGU6Ok9uZ29pbmcgJiYgbV9hcHBlbmRTdGF0ZSAhPSBBcHBlbmRTdGF0ZTo6U2FtcGxpbmcp
IHsKKyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJVbmV4cGVjdGVkIHNhbXBsZSwgYXBwZW5kU3Rh
dGU9JXMiLCBkdW1wQXBwZW5kU3RhdGUobV9hcHBlbmRTdGF0ZSkpOworICAgICAgICAgICAgLy8g
RklYTUU6IFJldHVybiBFUlJPUiBhbmQgZmluZCBhIG1vcmUgcm9idXN0IHdheSB0byBkZXRlY3Qg
dGhhdCBhbGwgdGhlCisgICAgICAgICAgICAvLyBkYXRhIGhhcyBiZWVuIHByb2Nlc3NlZCwgc28g
d2UgZG9uJ3QgbmVlZCB0byByZXNvcnQgdG8gdGhlc2UgaGFja3MuCisgICAgICAgICAgICAvLyBB
bGwgaW4gYWxsLCByZXR1cm4gT0ssIGV2ZW4gaWYgaXQncyBub3QgdGhlIHByb3BlciB0aGluZyB0
byBkby4gV2UgZG9uJ3Qgd2FudCB0byBicmVhayB0aGUgZGVtdXhlci4KKyAgICAgICAgICAgIG1f
Zmxvd1JldHVybiA9IEdTVF9GTE9XX09LOworICAgICAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRp
b24ubm90aWZ5T25lKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBSZWZQdHI8R1N0cmVhbWVyTWVkaWFTYW1wbGU+IG1lZGlhU2FtcGxlID0gV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFTYW1wbGU6OmNyZWF0ZShzYW1wbGUsIG1fcHJlc2VudGF0aW9uU2l6ZSwgdHJh
Y2tJZCgpKTsKKworICAgICAgICBHU1RfVFJBQ0UoImFwcGVuZDogdHJhY2tJZD0lcyBQVFM9JWYg
cHJlc2VudGF0aW9uU2l6ZT0lLjBmeCUuMGYiLCBtZWRpYVNhbXBsZS0+dHJhY2tJRCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkudG9GbG9h
dCgpLCBtZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uU2l6ZSgpLndpZHRoKCksIG1lZGlhU2FtcGxl
LT5wcmVzZW50YXRpb25TaXplKCkuaGVpZ2h0KCkpOworCisgICAgICAgIC8vIElmIHdlJ3JlIGJl
eW9uZCB0aGUgZHVyYXRpb24sIGlnbm9yZSB0aGlzIHNhbXBsZSBhbmQgdGhlIHJlbWFpbmluZyBv
bmVzLgorICAgICAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBtX21lZGlhU291cmNlQ2xpZW50LT5k
dXJhdGlvbigpOworICAgICAgICBpZiAoZHVyYXRpb24uaXNWYWxpZCgpICYmICFkdXJhdGlvbi5p
bmRlZmluaXRlVGltZSgpICYmIG1lZGlhU2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkgPiBkdXJh
dGlvbikgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJEZXRlY3RlZCBzYW1wbGUgKCVmKSBiZXlv
bmQgdGhlIGR1cmF0aW9uICglZiksIGRlY2xhcmluZyBMYXN0U2FtcGxlIiwgbWVkaWFTYW1wbGUt
PnByZXNlbnRhdGlvblRpbWUoKS50b0Zsb2F0KCksIGR1cmF0aW9uLnRvRmxvYXQoKSk7CisgICAg
ICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZTo6TGFzdFNhbXBsZSk7CisgICAgICAg
ICAgICBtX2Zsb3dSZXR1cm4gPSBHU1RfRkxPV19PSzsKKyAgICAgICAgICAgIG1fbmV3U2FtcGxl
Q29uZGl0aW9uLm5vdGlmeU9uZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gQWRkIGEgZ2FwIHNhbXBsZSBpZiBhIGdhcCBpcyBkZXRlY3RlZCBiZWZvcmUg
dGhlIGZpcnN0IHNhbXBsZS4KKyAgICAgICAgaWYgKG1lZGlhU2FtcGxlLT5kZWNvZGVUaW1lKCkg
PT0gTWVkaWFUaW1lOjp6ZXJvVGltZSgpCisgICAgICAgICAgICAmJiBtZWRpYVNhbXBsZS0+cHJl
c2VudGF0aW9uVGltZSgpID4gTWVkaWFUaW1lOjp6ZXJvVGltZSgpCisgICAgICAgICAgICAmJiBt
ZWRpYVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpIDw9IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERv
dWJsZSgwLjEpKSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIkFkZGluZyBnYXAgb2Zmc2V0Iik7
CisgICAgICAgICAgICBtZWRpYVNhbXBsZS0+YXBwbHlQdHNPZmZzZXQoTWVkaWFUaW1lOjp6ZXJv
VGltZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+ZGlk
UmVjZWl2ZVNhbXBsZShtZWRpYVNhbXBsZSk7CisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVu
ZFN0YXRlOjpTYW1wbGluZyk7CisgICAgICAgIG1fZmxvd1JldHVybiA9IEdTVF9GTE9XX09LOwor
ICAgICAgICBtX25ld1NhbXBsZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICB9CisKKyAgICBj
aGVja0VuZE9mQXBwZW5kKCk7Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtFT1Mo
KQoreworICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIHN3aXRjaCAobV9h
cHBlbmRTdGF0ZSkgeworICAgIGNhc2UgQXBwZW5kU3RhdGU6OkFib3J0aW5nOgorICAgICAgICAv
LyBJZ25vcmVkLiBPcGVyYXRpb24gY29tcGxldGlvbiB3aWxsIGJlIG1hbmFnZWQgYnkgdGhlIEFi
b3J0aW5nLT5Ob3RTdGFydGVkIHRyYW5zaXRpb24uCisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFwcGVuZFN0YXRlOjpPbmdvaW5nOgorICAgICAgICAvLyBGaW5pc2ggT25nb2luZyBhbmQgU2Ft
cGxpbmcgc3RhdGVzLgorICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZTo6RGF0YVN0
YXJ2ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXBwZW5kU3RhdGU6OlNhbXBsaW5nOgor
ICAgICAgICBzZXRBcHBlbmRTdGF0ZShBcHBlbmRTdGF0ZTo6TGFzdFNhbXBsZSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdTVF9ERUJVRygiVW5leHBlY3RlZCBFT1Mi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpkaWRS
ZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5U
aHJlYWQoKSk7CisKKyAgICBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpJbml0
aWFsaXphdGlvblNlZ21lbnQgaW5pdGlhbGl6YXRpb25TZWdtZW50OworCisgICAgR1NUX0RFQlVH
KCJOb3RpZnlpbmcgU291cmNlQnVmZmVyIGZvciB0cmFjayAlcyIsIG1fdHJhY2stPmlkKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaW5pdGlhbGl6YXRpb25TZWdtZW50LmR1cmF0aW9u
ID0gbV9tZWRpYVNvdXJjZUNsaWVudC0+ZHVyYXRpb24oKTsKKyAgICBzd2l0Y2ggKG1fc3RyZWFt
VHlwZSkgeworICAgIGNhc2UgQXVkaW86IHsKKyAgICAgICAgV2ViQ29yZTo6U291cmNlQnVmZmVy
UHJpdmF0ZUNsaWVudDo6SW5pdGlhbGl6YXRpb25TZWdtZW50OjpBdWRpb1RyYWNrSW5mb3JtYXRp
b24gaW5mbzsKKyAgICAgICAgaW5mby50cmFjayA9IHN0YXRpY19jYXN0PEF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyKj4obV90cmFjay5nZXQoKSk7CisgICAgICAgIGluZm8uZGVzY3JpcHRpb24g
PSBXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYURlc2NyaXB0aW9uOjpjcmVhdGUobV9kZW11eGVyU3Jj
UGFkQ2Fwcy5nZXQoKSk7CisgICAgICAgIGluaXRpYWxpemF0aW9uU2VnbWVudC5hdWRpb1RyYWNr
cy5hcHBlbmQoaW5mbyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFZpZGVvOiB7
CisgICAgICAgIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0
aW9uU2VnbWVudDo6VmlkZW9UcmFja0luZm9ybWF0aW9uIGluZm87CisgICAgICAgIGluZm8udHJh
Y2sgPSBzdGF0aWNfY2FzdDxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcio+KG1fdHJhY2suZ2V0
KCkpOworICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFE
ZXNjcmlwdGlvbjo6Y3JlYXRlKG1fZGVtdXhlclNyY1BhZENhcHMuZ2V0KCkpOworICAgICAgICBp
bml0aWFsaXphdGlvblNlZ21lbnQudmlkZW9UcmFja3MuYXBwZW5kKGluZm8pOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgR1NUX0VSUk9SKCJVbnN1cHBvcnRl
ZCBvciB1bmtub3duIHN0cmVhbSB0eXBlIik7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPmRp
ZFJlY2VpdmVJbml0aWFsaXphdGlvblNlZ21lbnQoaW5pdGlhbGl6YXRpb25TZWdtZW50KTsKK30K
KworQXRvbWljU3RyaW5nIEFwcGVuZFBpcGVsaW5lOjp0cmFja0lkKCkKK3sKKyAgICBBU1NFUlQo
V1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAoIW1fdHJhY2spCisgICAgICAgIHJldHVy
biBBdG9taWNTdHJpbmcoKTsKKworICAgIHJldHVybiBtX3RyYWNrLT5pZCgpOworfQorCit2b2lk
IEFwcGVuZFBpcGVsaW5lOjpyZXNldFBpcGVsaW5lKCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01h
aW5UaHJlYWQoKSk7CisgICAgR1NUX0RFQlVHKCJyZXNldHRpbmcgcGlwZWxpbmUiKTsKKyAgICBt
X2FwcHNyY0F0TGVhc3RBQnVmZmVyTGVmdCA9IGZhbHNlOworICAgIHNldEFwcHNyY0RhdGFMZWF2
aW5nUHJvYmUoKTsKKworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9uZXdTYW1w
bGVMb2NrKTsKKyAgICAgICAgbV9uZXdTYW1wbGVDb25kaXRpb24ubm90aWZ5T25lKCk7CisgICAg
ICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUkVB
RFkpOworICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgbnVs
bHB0ciwgbnVsbHB0ciwgMCk7CisgICAgfQorCisjaWYgKCEoTE9HX0RJU0FCTEVEIHx8IEdTVF9E
SVNBQkxFX0dTVF9ERUJVRykpCisgICAgeworICAgICAgICAvLyBUaGlzIGlzIGhlcmUgZm9yIGRl
YnVnZ2luZyBwdXJwb3Nlcy4gSXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBoYXZlIGl0IGFzIGNs
YXNzIG1lbWJlci4KKyAgICAgICAgV1RGOjpTdHJpbmcgIGRvdEZpbGVOYW1lID0gU3RyaW5nOjpm
b3JtYXQoInJlc2V0LXBpcGVsaW5lLSVkIiwgKytpKTsKKyAgICAgICAgZ3N0X2RlYnVnX2Jpbl90
b19kb3RfZmlsZShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hP
V19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyNlbmRpZgorCit9CisK
K3ZvaWQgQXBwZW5kUGlwZWxpbmU6OnNldEFwcHNyY0RhdGFMZWF2aW5nUHJvYmUoKQoreworICAg
IGlmIChtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
R1NUX1RSQUNFKCJzZXR0aW5nIGFwcHNyYyBkYXRhIGxlYXZpbmcgcHJvYmUiKTsKKworICAgIEdS
ZWZQdHI8R3N0UGFkPiBhcHBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRp
Y19wYWQobV9hcHBzcmMuZ2V0KCksICJzcmMiKSk7CisgICAgbV9hcHBzcmNEYXRhTGVhdmluZ1By
b2JlSWQgPSBnc3RfcGFkX2FkZF9wcm9iZShhcHBzcmNQYWQuZ2V0KCksIEdTVF9QQURfUFJPQkVf
VFlQRV9CVUZGRVIsIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0UGFkUHJvYmVDYWxsYmFjaz4oYXBwZW5k
UGlwZWxpbmVBcHBzcmNEYXRhTGVhdmluZyksIHRoaXMsIG51bGxwdHIpOworfQorCit2b2lkIEFw
cGVuZFBpcGVsaW5lOjpyZW1vdmVBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCkKK3sKKyAgICBpZiAo
IW1fYXBwc3JjRGF0YUxlYXZpbmdQcm9iZUlkKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1Rf
VFJBQ0UoInJlbW92aW5nIGFwcHNyYyBkYXRhIGxlYXZpbmcgcHJvYmUiKTsKKworICAgIEdSZWZQ
dHI8R3N0UGFkPiBhcHBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobV9hcHBzcmMuZ2V0KCksICJzcmMiKSk7CisgICAgZ3N0X3BhZF9yZW1vdmVfcHJvYmUoYXBw
c3JjUGFkLmdldCgpLCBtX2FwcHNyY0RhdGFMZWF2aW5nUHJvYmVJZCk7CisgICAgbV9hcHBzcmNE
YXRhTGVhdmluZ1Byb2JlSWQgPSAwOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjphYm9ydCgp
Cit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworICAgIEdTVF9ERUJVRygiYWJv
cnRpbmciKTsKKworICAgIG1fcGVuZGluZ0J1ZmZlciA9IG51bGxwdHI7CisKKyAgICAvLyBBYm9y
dCBhbHJlYWR5IG9uZ29pbmcuCisgICAgaWYgKG1fYWJvcnRQZW5kaW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2Fib3J0UGVuZGluZyA9IHRydWU7CisgICAgaWYgKG1fYXBwZW5kU3RhdGUg
PT0gQXBwZW5kU3RhdGU6Ok5vdFN0YXJ0ZWQpCisgICAgICAgIHNldEFwcGVuZFN0YXRlKEFwcGVu
ZFN0YXRlOjpBYm9ydGluZyk7CisgICAgLy8gRWxzZSwgdGhlIGF1dG9tYXRpYyBzdGF0ZSB0cmFu
c2l0aW9ucyB3aWxsIHRha2UgY2FyZSB3aGVuIHRoZSBvbmdvaW5nIGFwcGVuZCBmaW5pc2hlcy4K
K30KKworR3N0Rmxvd1JldHVybiBBcHBlbmRQaXBlbGluZTo6cHVzaE5ld0J1ZmZlcihHc3RCdWZm
ZXIqIGJ1ZmZlcikKK3sKKyAgICBHc3RGbG93UmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChtX2Fi
b3J0UGVuZGluZykgeworICAgICAgICBtX3BlbmRpbmdCdWZmZXIgPSBhZG9wdEdSZWYoYnVmZmVy
KTsKKyAgICAgICAgcmVzdWx0ID0gR1NUX0ZMT1dfT0s7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c2V0QXBwZW5kU3RhdGUoQXBwZW5kUGlwZWxpbmU6OkFwcGVuZFN0YXRlOjpPbmdvaW5nKTsKKyAg
ICAgICAgR1NUX1RSQUNFKCJwdXNoaW5nIG5ldyBidWZmZXIgJXAiLCBidWZmZXIpOworICAgICAg
ICByZXN1bHQgPSBnc3RfYXBwX3NyY19wdXNoX2J1ZmZlcihHU1RfQVBQX1NSQyhhcHBzcmMoKSks
IGJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBBcHBlbmRQ
aXBlbGluZTo6cmVwb3J0QXBwc3JjQXRMZWFzdEFCdWZmZXJMZWZ0KCkKK3sKKyAgICBHU1RfVFJB
Q0UoImJ1ZmZlciBsZWZ0IGFwcHNyYywgcmVwb3N0aW5nIHRvIGJ1cyIpOworICAgIEdzdFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImFwcHNyYy1idWZmZXIt
bGVmdCIpOworICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfYXBwbGlj
YXRpb24oR1NUX09CSkVDVChtX2FwcHNyYy5nZXQoKSksIHN0cnVjdHVyZSk7CisgICAgZ3N0X2J1
c19wb3N0KG1fYnVzLmdldCgpLCBtZXNzYWdlKTsKK30KKwordm9pZCBBcHBlbmRQaXBlbGluZTo6
cmVwb3J0QXBwc3JjTmVlZERhdGFSZWNlaXZlZCgpCit7CisgICAgR1NUX1RSQUNFKCJyZWNlaXZl
ZCBuZWVkLWRhdGEgc2lnbmFsIGF0IGFwcHNyYywgcmVwb3N0aW5nIHRvIGJ1cyIpOworICAgIEdz
dFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVyZV9uZXdfZW1wdHkoImFwcHNyYy1u
ZWVkLWRhdGEiKTsKKyAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2Fw
cGxpY2F0aW9uKEdTVF9PQkpFQ1QobV9hcHBzcmMuZ2V0KCkpLCBzdHJ1Y3R1cmUpOworICAgIGdz
dF9idXNfcG9zdChtX2J1cy5nZXQoKSwgbWVzc2FnZSk7Cit9CisKK0dzdEZsb3dSZXR1cm4gQXBw
ZW5kUGlwZWxpbmU6OmhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoR3N0RWxlbWVudCogYXBwc2luaykK
K3sKKyAgICBBU1NFUlQoIVdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gRXZlbiBpZiB3
ZSdyZSBkaXNhYmxlZCwgaXQncyBpbXBvcnRhbnQgdG8gcHVsbCB0aGUgc2FtcGxlIG91dCBhbnl3
YXkgdG8KKyAgICAvLyBhdm9pZCBkZWFkbG9ja3Mgd2hlbiBjaGFuZ2luZyB0byBHU1RfU1RBVEVf
TlVMTCBoYXZpbmcgYSBub24gZW1wdHkgYXBwc2luay4KKyAgICBHUmVmUHRyPEdzdFNhbXBsZT4g
c2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3NhbXBsZShHU1RfQVBQX1NJTkso
YXBwc2luaykpKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX25ld1NhbXBsZUxvY2spOworCisg
ICAgaWYgKCFtX3BsYXllclByaXZhdGUgfHwgbV9hcHBlbmRTdGF0ZSA9PSBBcHBlbmRTdGF0ZTo6
SW52YWxpZCkgeworICAgICAgICBHU1RfV0FSTklORygiQXBwZW5kUGlwZWxpbmUgaGFzIGJlZW4g
ZGlzYWJsZWQsIGlnbm9yaW5nIHRoaXMgc2FtcGxlIik7CisgICAgICAgIHJldHVybiBHU1RfRkxP
V19FUlJPUjsKKyAgICB9CisKKyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1
Y3R1cmVfbmV3KCJhcHBzaW5rLW5ldy1zYW1wbGUiLCAibmV3LXNhbXBsZSIsIEdTVF9UWVBFX1NB
TVBMRSwgc2FtcGxlLmdldCgpLCBudWxscHRyKTsKKyAgICBHc3RNZXNzYWdlKiBtZXNzYWdlID0g
Z3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdTVF9PQkpFQ1QoYXBwc2luayksIHN0cnVjdHVy
ZSk7CisgICAgZ3N0X2J1c19wb3N0KG1fYnVzLmdldCgpLCBtZXNzYWdlKTsKKyAgICBHU1RfVFJB
Q0UoImFwcHNpbmstbmV3LXNhbXBsZSBtZXNzYWdlIHBvc3RlZCB0byBidXMiKTsKKworICAgIG1f
bmV3U2FtcGxlQ29uZGl0aW9uLndhaXQobV9uZXdTYW1wbGVMb2NrKTsKKyAgICAvLyBXZSd2ZSBi
ZWVuIGF3YWtlbiBiZWNhdXNlIHRoZSBzYW1wbGUgd2FzIHByb2Nlc3NlZCBvciBiZWNhdXNlIG9m
CisgICAgLy8gYW4gZXhjZXB0aW9uYWwgY29uZGl0aW9uIChlbnRlcmVkIGluIEludmFsaWQgc3Rh
dGUsIGRlc3RydWN0b3IsIGV0Yy4pLgorICAgIC8vIFdlIGNhbid0IHJlbGlhYmx5IGRlbGV0ZSBp
bmZvIGhlcmUsIGFwcGVuZFBpcGVsaW5lQXBwc2lua05ld1NhbXBsZU1haW5UaHJlYWQgd2lsbCBk
byBpdC4KKworICAgIHJldHVybiBtX2Zsb3dSZXR1cm47Cit9CisKK3ZvaWQgQXBwZW5kUGlwZWxp
bmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbUFueVRocmVhZChHc3RQYWQqIGRl
bXV4ZXJTcmNQYWQpCit7CisgICAgaWYgKCFtX2FwcHNpbmspCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdTVF9ERUJVRygiY29ubmVjdGluZyB0byBhcHBzaW5rIik7CisKKyAgICBHUmVmUHRyPEdz
dFBhZD4gYXBwc2lua1NpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobV9hcHBzaW5rLmdldCgpLCAic2luayIpKTsKKworICAgIC8vIE9ubHkgb25lIHN0cmVhbSBw
ZXIgZGVtdXhlciBpcyBzdXBwb3J0ZWQuCisgICAgQVNTRVJUKCFnc3RfcGFkX2lzX2xpbmtlZChh
cHBzaW5rU2lua1BhZC5nZXQoKSkpOworCisgICAgZ2ludDY0IHRpbWVMZW5ndGggPSAwOworICAg
IGlmIChnc3RfZWxlbWVudF9xdWVyeV9kdXJhdGlvbihtX2RlbXV4LmdldCgpLCBHU1RfRk9STUFU
X1RJTUUsICZ0aW1lTGVuZ3RoKQorICAgICAgICAmJiBzdGF0aWNfY2FzdDxndWludDY0Pih0aW1l
TGVuZ3RoKSAhPSBHU1RfQ0xPQ0tfVElNRV9OT05FKQorICAgICAgICBtX2luaXRpYWxEdXJhdGlv
biA9IE1lZGlhVGltZShHU1RfVElNRV9BU19VU0VDT05EUyh0aW1lTGVuZ3RoKSwgR19VU0VDX1BF
Ul9TRUMpOworICAgIGVsc2UKKyAgICAgICAgbV9pbml0aWFsRHVyYXRpb24gPSBNZWRpYVRpbWU6
OnBvc2l0aXZlSW5maW5pdGVUaW1lKCk7CisKKyAgICBpZiAoV1RGOjppc01haW5UaHJlYWQoKSkK
KyAgICAgICAgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoZGVtdXhlclNyY1BhZCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIENhbGwgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmso
KSBpbiB0aGUgbWFpbiB0aHJlYWQgYW5kIHdhaXQuCisgICAgICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fcGFkQWRkUmVtb3ZlTG9jayk7CisgICAgICAgIGlmICghbV9wbGF5ZXJQcml2YXRlKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0
X3N0cnVjdHVyZV9uZXcoImRlbXV4ZXItY29ubmVjdC10by1hcHBzaW5rIiwgImRlbXV4ZXItc3Jj
LXBhZCIsIEdfVFlQRV9PQkpFQ1QsIGRlbXV4ZXJTcmNQYWQsIG51bGxwdHIpOworICAgICAgICBH
c3RNZXNzYWdlKiBtZXNzYWdlID0gZ3N0X21lc3NhZ2VfbmV3X2FwcGxpY2F0aW9uKEdTVF9PQkpF
Q1QobV9kZW11eC5nZXQoKSksIHN0cnVjdHVyZSk7CisgICAgICAgIGdzdF9idXNfcG9zdChtX2J1
cy5nZXQoKSwgbWVzc2FnZSk7CisgICAgICAgIEdTVF9UUkFDRSgiZGVtdXhlci1jb25uZWN0LXRv
LWFwcHNpbmsgbWVzc2FnZSBwb3N0ZWQgdG8gYnVzIik7CisKKyAgICAgICAgbV9wYWRBZGRSZW1v
dmVDb25kaXRpb24ud2FpdChtX3BhZEFkZFJlbW92ZUxvY2spOworICAgIH0KKworICAgIC8vIE11
c3QgYmUgZG9uZSBpbiB0aGUgdGhyZWFkIHdlIHdlcmUgY2FsbGVkIGZyb20gKHVzdWFsbHkgc3Ry
ZWFtaW5nIHRocmVhZCkuCisgICAgYm9vbCBpc0RhdGEgPSAobV9zdHJlYW1UeXBlID09IFdlYkNv
cmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW8pCisgICAgICAgIHx8ICht
X3N0cmVhbVR5cGUgPT0gV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyOjpW
aWRlbykKKyAgICAgICAgfHwgKG1fc3RyZWFtVHlwZSA9PSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0
cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQpOworCisgICAgaWYgKGlzRGF0YSkgeworICAgICAgICAv
LyBGSVhNRTogT25seSBhZGQgYXBwc2luayBvbmUgdGltZS4gVGhpcyBtZXRob2QgY2FuIGJlIGNh
bGxlZCBzZXZlcmFsIHRpbWVzLgorICAgICAgICBHUmVmUHRyPEdzdE9iamVjdD4gcGFyZW50ID0g
YWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9wYXJlbnQobV9hcHBzaW5rLmdldCgpKSk7CisgICAg
ICAgIGlmICghcGFyZW50KQorICAgICAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTihtX3BpcGVs
aW5lLmdldCgpKSwgbV9hcHBzaW5rLmdldCgpKTsKKworI2lmIEVOQUJMRShMRUdBQ1lfRU5DUllQ
VEVEX01FRElBKQorICAgICAgICBpZiAobV9kZWNyeXB0b3IpIHsKKyAgICAgICAgICAgIGdzdF9v
YmplY3RfcmVmKG1fZGVjcnlwdG9yLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdT
VF9CSU4obV9waXBlbGluZS5nZXQoKSksIG1fZGVjcnlwdG9yLmdldCgpKTsKKworICAgICAgICAg
ICAgR1JlZlB0cjxHc3RQYWQ+IGRlY3J5cHRvclNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRpY19wYWQobV9kZWNyeXB0b3IuZ2V0KCksICJzaW5rIikpOworICAgICAgICAg
ICAgZ3N0X3BhZF9saW5rKGRlbXV4ZXJTcmNQYWQsIGRlY3J5cHRvclNpbmtQYWQuZ2V0KCkpOwor
CisgICAgICAgICAgICBHUmVmUHRyPEdzdFBhZD4gZGVjcnlwdG9yU3JjUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fZGVjcnlwdG9yLmdldCgpLCAic3JjIikpOwor
ICAgICAgICAgICAgZ3N0X3BhZF9saW5rKGRlY3J5cHRvclNyY1BhZC5nZXQoKSwgYXBwc2lua1Np
bmtQYWQuZ2V0KCkpOworCisgICAgICAgICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhf
cGFyZW50KG1fYXBwc2luay5nZXQoKSk7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zeW5jX3N0
YXRlX3dpdGhfcGFyZW50KG1fZGVjcnlwdG9yLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyNl
bmRpZgorICAgICAgICAgICAgZ3N0X3BhZF9saW5rKGRlbXV4ZXJTcmNQYWQsIGFwcHNpbmtTaW5r
UGFkLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJl
bnQobV9hcHBzaW5rLmdldCgpKTsKKyNpZiBFTkFCTEUoTEVHQUNZX0VOQ1JZUFRFRF9NRURJQSkK
KyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICB9Cit9CisKK3ZvaWQgQXBwZW5kUGlw
ZWxpbmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKEdzdFBhZCogZGVtdXhlclNyY1Bh
ZCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisgICAgR1NUX0RFQlVHKCJD
b25uZWN0aW5nIHRvIGFwcHNpbmsiKTsKKworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFkQWRk
UmVtb3ZlTG9jayk7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtTaW5rUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYXBwc2luay5nZXQoKSwgInNpbmsiKSk7CisK
KyAgICAvLyBPbmx5IG9uZSBzdHJlYW0gcGVyIGRlbXV4ZXIgaXMgc3VwcG9ydGVkLgorICAgIEFT
U0VSVCghZ3N0X3BhZF9pc19saW5rZWQoc2lua1NpbmtQYWQuZ2V0KCkpKTsKKworICAgIEdSZWZQ
dHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2NhcHMoR1NU
X1BBRChkZW11eGVyU3JjUGFkKSkpOworCisgICAgaWYgKCFjYXBzIHx8IG1fYXBwZW5kU3RhdGUg
PT0gQXBwZW5kU3RhdGU6OkludmFsaWQgfHwgIW1fcGxheWVyUHJpdmF0ZSkgeworICAgICAgICBt
X3BhZEFkZFJlbW92ZUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICB7CisgICAgICAgIEdVbmlx
dWVQdHI8Z2NoYXI+IHN0cmNhcHMoZ3N0X2NhcHNfdG9fc3RyaW5nKGNhcHMuZ2V0KCkpKTsKKyAg
ICAgICAgR1NUX0RFQlVHKCIlcyIsIHN0cmNhcHMuZ2V0KCkpOworICAgIH0KKyNlbmRpZgorCisg
ICAgaWYgKG1faW5pdGlhbER1cmF0aW9uID4gbV9tZWRpYVNvdXJjZUNsaWVudC0+ZHVyYXRpb24o
KSkKKyAgICAgICAgbV9tZWRpYVNvdXJjZUNsaWVudC0+ZHVyYXRpb25DaGFuZ2VkKG1faW5pdGlh
bER1cmF0aW9uKTsKKworICAgIG1fb2xkVHJhY2sgPSBtX3RyYWNrOworCisgICAgcGFyc2VEZW11
eGVyU3JjUGFkQ2Fwcyhnc3RfY2Fwc19yZWYoY2Fwcy5nZXQoKSkpOworCisgICAgc3dpdGNoICht
X3N0cmVhbVR5cGUpIHsKKyAgICBjYXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdT
dHJlYW1lcjo6QXVkaW86CisgICAgICAgIGlmIChtX3BsYXllclByaXZhdGUpCisgICAgICAgICAg
ICBtX3RyYWNrID0gV2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZSht
X3BsYXllclByaXZhdGUtPnBpcGVsaW5lKCksIGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3Ry
ZWFtZXI6OlZpZGVvOgorICAgICAgICBpZiAobV9wbGF5ZXJQcml2YXRlKQorICAgICAgICAgICAg
bV90cmFjayA9IFdlYkNvcmU6OlZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9w
bGF5ZXJQcml2YXRlLT5waXBlbGluZSgpLCBpZCgpLCBzaW5rU2lua1BhZC5nZXQoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVh
bWVyOjpUZXh0OgorICAgICAgICBtX3RyYWNrID0gV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKGlkKCksIHNpbmtTaW5rUGFkLmdldCgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gTm8gdXNlZnVsIGRhdGEsIGJ1dCBub3Rp
ZnkgYW55d2F5IHRvIGNvbXBsZXRlIHRoZSBhcHBlbmQgb3BlcmF0aW9uLgorICAgICAgICBHU1Rf
REVCVUcoIlJlY2VpdmVkIGFsbCBwZW5kaW5nIHNhbXBsZXMgKG5vIGRhdGEpIik7CisgICAgICAg
IG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+ZGlkUmVjZWl2ZUFsbFBlbmRpbmdTYW1wbGVzKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIG1fcGFkQWRkUmVtb3ZlQ29uZGl0aW9uLm5vdGlm
eU9uZSgpOworfQorCit2b2lkIEFwcGVuZFBpcGVsaW5lOjpkaXNjb25uZWN0RGVtdXhlclNyY1Bh
ZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZCgpCit7CisgICAgR1NUX0RFQlVHKCJEaXNjb25uZWN0
aW5nIGFwcHNpbmsiKTsKKworICAgIC8vIE11c3QgYmUgZG9uZSBpbiB0aGUgdGhyZWFkIHdlIHdl
cmUgY2FsbGVkIGZyb20gKHVzdWFsbHkgc3RyZWFtaW5nIHRocmVhZCkuCisjaWYgRU5BQkxFKExF
R0FDWV9FTkNSWVBURURfTUVESUEpCisgICAgaWYgKG1fZGVjcnlwdG9yKSB7CisgICAgICAgIGdz
dF9lbGVtZW50X3VubGluayhtX2RlY3J5cHRvci5nZXQoKSwgbV9hcHBzaW5rLmdldCgpKTsKKyAg
ICAgICAgZ3N0X2VsZW1lbnRfdW5saW5rKG1fZGVtdXguZ2V0KCksIG1fZGVjcnlwdG9yLmdldCgp
KTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fZGVjcnlwdG9yLmdldCgpLCBHU1Rf
U1RBVEVfTlVMTCk7CisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU4obV9waXBlbGluZS5n
ZXQoKSksIG1fZGVjcnlwdG9yLmdldCgpKTsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICBn
c3RfZWxlbWVudF91bmxpbmsobV9kZW11eC5nZXQoKSwgbV9hcHBzaW5rLmdldCgpKTsKK30KKwor
c3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzaW5rQ2Fwc0NoYW5nZWQoR09iamVjdCogYXBw
c2lua1BhZCwgR1BhcmFtU3BlYyosIEFwcGVuZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sK
KyAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9zdHJ1Y3R1cmVfbmV3X2VtcHR5KCJh
cHBzaW5rLWNhcHMtY2hhbmdlZCIpOworICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVz
c2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChhcHBzaW5rUGFkKSwgc3RydWN0dXJlKTsK
KyAgICBnc3RfYnVzX3Bvc3QoYXBwZW5kUGlwZWxpbmUtPmJ1cygpLCBtZXNzYWdlKTsKKyAgICBH
U1RfVFJBQ0UoImFwcHNpbmstY2Fwcy1jaGFuZ2VkIG1lc3NhZ2UgcG9zdGVkIHRvIGJ1cyIpOwor
fQorCitzdGF0aWMgR3N0UGFkUHJvYmVSZXR1cm4gYXBwZW5kUGlwZWxpbmVBcHBzcmNEYXRhTGVh
dmluZyhHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8sIEFwcGVuZFBpcGVsaW5lKiBhcHBl
bmRQaXBlbGluZSkKK3sKKyAgICBBU1NFUlQoR1NUX1BBRF9QUk9CRV9JTkZPX1RZUEUoaW5mbykg
JiBHU1RfUEFEX1BST0JFX1RZUEVfQlVGRkVSKTsKKworICAgIEdzdEJ1ZmZlciogYnVmZmVyID0g
R1NUX1BBRF9QUk9CRV9JTkZPX0JVRkZFUihpbmZvKTsKKyAgICBnc2l6ZSBidWZmZXJTaXplID0g
Z3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpOworCisgICAgR1NUX1RSQUNFKCJidWZmZXIgb2Yg
c2l6ZSAlIiBHX0dTSVpFX0ZPUk1BVCAiIGdvaW5nIHRocnUiLCBidWZmZXJTaXplKTsKKworICAg
IGFwcGVuZFBpcGVsaW5lLT5yZXBvcnRBcHBzcmNBdExlYXN0QUJ1ZmZlckxlZnQoKTsKKworICAg
IHJldHVybiBHU1RfUEFEX1BST0JFX09LOworfQorCisjaWYgIUxPR19ESVNBQkxFRAorc3RhdGlj
IEdzdFBhZFByb2JlUmV0dXJuIGFwcGVuZFBpcGVsaW5lUGFkUHJvYmVEZWJ1Z0luZm9ybWF0aW9u
KEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5mbywgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRp
b24qIHBhZFByb2JlSW5mb3JtYXRpb24pCit7CisgICAgQVNTRVJUKEdTVF9QQURfUFJPQkVfSU5G
T19UWVBFKGluZm8pICYgR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZFUik7CisgICAgR3N0QnVmZmVy
KiBidWZmZXIgPSBHU1RfUEFEX1BST0JFX0lORk9fQlVGRkVSKGluZm8pOworICAgIEdTVF9UUkFD
RSgiJXM6IGJ1ZmZlciBvZiBzaXplICUiIEdfR1NJWkVfRk9STUFUICIgZ29pbmcgdGhydSIsIHBh
ZFByb2JlSW5mb3JtYXRpb24tPmRlc2NyaXB0aW9uLCBnc3RfYnVmZmVyX2dldF9zaXplKGJ1ZmZl
cikpOworICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOworfQorI2VuZGlmCisKK3N0YXRpYyB2
b2lkIGFwcGVuZFBpcGVsaW5lQXBwc3JjTmVlZERhdGEoR3N0QXBwU3JjKiwgZ3VpbnQsIEFwcGVu
ZFBpcGVsaW5lKiBhcHBlbmRQaXBlbGluZSkKK3sKKyAgICBhcHBlbmRQaXBlbGluZS0+cmVwb3J0
QXBwc3JjTmVlZERhdGFSZWNlaXZlZCgpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRQaXBlbGlu
ZURlbXV4ZXJQYWRBZGRlZChHc3RFbGVtZW50KiwgR3N0UGFkKiBkZW11eGVyU3JjUGFkLCBBcHBl
bmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgYXBwZW5kUGlwZWxpbmUtPmNvbm5l
Y3REZW11eGVyU3JjUGFkVG9BcHBzaW5rRnJvbUFueVRocmVhZChkZW11eGVyU3JjUGFkKTsKK30K
Kworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVEZW11eGVyUGFkUmVtb3ZlZChHc3RFbGVtZW50
KiwgR3N0UGFkKiwgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5lKQoreworICAgIGFwcGVu
ZFBpcGVsaW5lLT5kaXNjb25uZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVh
ZCgpOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybiBhcHBlbmRQaXBlbGluZUFwcHNpbmtOZXdT
YW1wbGUoR3N0RWxlbWVudCogYXBwc2luaywgQXBwZW5kUGlwZWxpbmUqIGFwcGVuZFBpcGVsaW5l
KQoreworICAgIHJldHVybiBhcHBlbmRQaXBlbGluZS0+aGFuZGxlTmV3QXBwc2lua1NhbXBsZShh
cHBzaW5rKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kUGlwZWxpbmVBcHBzaW5rRU9TKEdzdEVs
ZW1lbnQqLCBBcHBlbmRQaXBlbGluZSogYXBwZW5kUGlwZWxpbmUpCit7CisgICAgaWYgKFdURjo6
aXNNYWluVGhyZWFkKCkpCisgICAgICAgIGFwcGVuZFBpcGVsaW5lLT5hcHBzaW5rRU9TKCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3N0cnVjdHVy
ZV9uZXdfZW1wdHkoImFwcHNpbmstZW9zIik7CisgICAgICAgIEdzdE1lc3NhZ2UqIG1lc3NhZ2Ug
PSBnc3RfbWVzc2FnZV9uZXdfYXBwbGljYXRpb24oR1NUX09CSkVDVChhcHBlbmRQaXBlbGluZS0+
YXBwc2luaygpKSwgc3RydWN0dXJlKTsKKyAgICAgICAgZ3N0X2J1c19wb3N0KGFwcGVuZFBpcGVs
aW5lLT5idXMoKSwgbWVzc2FnZSk7CisgICAgICAgIEdTVF9UUkFDRSgiYXBwc2luay1lb3MgbWVz
c2FnZSBwb3N0ZWQgdG8gYnVzIik7CisgICAgfQorCisgICAgR1NUX0RFQlVHKCIlcyBtYWluIHRo
cmVhZCIsIChXVEY6OmlzTWFpblRocmVhZCgpKSA/ICJJcyIgOiAiTm90Iik7Cit9CisKKworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvQXBw
ZW5kUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvQXBwZW5kUGlwZWxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2IwM2U0MDQ0ZWZmZDJiNGQxMmYy
YTYxYzEzZjZlMzNkZmYyZjVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5oCkBAIC0wLDAgKzEs
MTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQorCisj
aW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRS5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNF
LmgiCisjaW5jbHVkZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorCisjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBBcHBlbmRQaXBlbGluZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxBcHBlbmRQaXBlbGluZT4geworcHVibGljOgorICAgIGVudW0gY2xhc3MgQXBwZW5kU3Rh
dGUgeyBJbnZhbGlkLCBOb3RTdGFydGVkLCBPbmdvaW5nLCBLZXlOZWdvdGlhdGlvbiwgRGF0YVN0
YXJ2ZSwgU2FtcGxpbmcsIExhc3RTYW1wbGUsIEFib3J0aW5nIH07CisKKyAgICBBcHBlbmRQaXBl
bGluZShSZWY8TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U+LCBSZWY8U291cmNlQnVmZmVy
UHJpdmF0ZUdTdHJlYW1lcj4sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSYpOworICAg
IHZpcnR1YWwgfkFwcGVuZFBpcGVsaW5lKCk7CisKKyAgICB2b2lkIGhhbmRsZUVsZW1lbnRNZXNz
YWdlKEdzdE1lc3NhZ2UqKTsKKyAgICB2b2lkIGhhbmRsZUFwcGxpY2F0aW9uTWVzc2FnZShHc3RN
ZXNzYWdlKik7CisKKyAgICBnaW50IGlkKCk7CisgICAgQXBwZW5kU3RhdGUgYXBwZW5kU3RhdGUo
KSB7IHJldHVybiBtX2FwcGVuZFN0YXRlOyB9CisgICAgdm9pZCBzZXRBcHBlbmRTdGF0ZShBcHBl
bmRTdGF0ZSk7CisKKyAgICBHc3RGbG93UmV0dXJuIGhhbmRsZU5ld0FwcHNpbmtTYW1wbGUoR3N0
RWxlbWVudCopOworICAgIEdzdEZsb3dSZXR1cm4gcHVzaE5ld0J1ZmZlcihHc3RCdWZmZXIqKTsK
KworICAgIC8vIFRha2VzIG93bmVyc2hpcCBvZiBjYXBzLgorICAgIHZvaWQgcGFyc2VEZW11eGVy
U3JjUGFkQ2FwcyhHc3RDYXBzKik7CisgICAgdm9pZCBhcHBzaW5rQ2Fwc0NoYW5nZWQoKTsKKyAg
ICB2b2lkIGFwcHNpbmtOZXdTYW1wbGUoR3N0U2FtcGxlKik7CisgICAgdm9pZCBhcHBzaW5rRU9T
KCk7CisgICAgdm9pZCBkaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KCk7CisgICAgQXRv
bWljU3RyaW5nIHRyYWNrSWQoKTsKKyAgICB2b2lkIGFib3J0KCk7CisKKyAgICB2b2lkIGNsZWFy
UGxheWVyUHJpdmF0ZSgpOworICAgIFJlZjxTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyPiBz
b3VyY2VCdWZmZXJQcml2YXRlKCkgeyByZXR1cm4gbV9zb3VyY2VCdWZmZXJQcml2YXRlLmdldCgp
OyB9CisgICAgR3N0QnVzKiBidXMoKSB7IHJldHVybiBtX2J1cy5nZXQoKTsgfQorICAgIEdzdEVs
ZW1lbnQqIHBpcGVsaW5lKCkgeyByZXR1cm4gbV9waXBlbGluZS5nZXQoKTsgfQorICAgIEdzdEVs
ZW1lbnQqIGFwcHNyYygpIHsgcmV0dXJuIG1fYXBwc3JjLmdldCgpOyB9CisgICAgR3N0RWxlbWVu
dCogYXBwc2luaygpIHsgcmV0dXJuIG1fYXBwc2luay5nZXQoKTsgfQorICAgIEdzdENhcHMqIGRl
bXV4ZXJTcmNQYWRDYXBzKCkgeyByZXR1cm4gbV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKTsgfQor
ICAgIEdzdENhcHMqIGFwcHNpbmtDYXBzKCkgeyByZXR1cm4gbV9hcHBzaW5rQ2Fwcy5nZXQoKTsg
fQorICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiB0cmFjaygpIHsgcmV0dXJu
IG1fdHJhY2s7IH0KKyAgICBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXIg
c3RyZWFtVHlwZSgpIHsgcmV0dXJuIG1fc3RyZWFtVHlwZTsgfQorCisgICAgdm9pZCBkaXNjb25u
ZWN0RGVtdXhlclNyY1BhZEZyb21BcHBzaW5rRnJvbUFueVRocmVhZCgpOworICAgIHZvaWQgY29u
bmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCopOworICAgIHZv
aWQgY29ubmVjdERlbXV4ZXJTcmNQYWRUb0FwcHNpbmsoR3N0UGFkKik7CisKKyAgICB2b2lkIHJl
cG9ydEFwcHNyY0F0TGVhc3RBQnVmZmVyTGVmdCgpOworICAgIHZvaWQgcmVwb3J0QXBwc3JjTmVl
ZERhdGFSZWNlaXZlZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgcmVzZXRQaXBlbGluZSgpOwor
ICAgIHZvaWQgY2hlY2tFbmRPZkFwcGVuZCgpOworICAgIHZvaWQgaGFuZGxlQXBwc3JjQXRMZWFz
dEFCdWZmZXJMZWZ0KCk7CisgICAgdm9pZCBoYW5kbGVBcHBzcmNOZWVkRGF0YVJlY2VpdmVkKCk7
CisgICAgdm9pZCByZW1vdmVBcHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisgICAgdm9pZCBzZXRB
cHBzcmNEYXRhTGVhdmluZ1Byb2JlKCk7CisKK3ByaXZhdGU6CisgICAgUmVmPE1lZGlhU291cmNl
Q2xpZW50R1N0cmVhbWVyTVNFPiBtX21lZGlhU291cmNlQ2xpZW50OworICAgIFJlZjxTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyPiBtX3NvdXJjZUJ1ZmZlclByaXZhdGU7CisgICAgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKiBtX3BsYXllclByaXZhdGU7CisKKyAgICAvLyAobV9t
ZWRpYVR5cGUsIG1faWQpIGlzIHVuaXF1ZS4KKyAgICBnaW50IG1faWQ7CisKKyAgICBNZWRpYVRp
bWUgbV9pbml0aWFsRHVyYXRpb247CisKKyAgICBHc3RGbG93UmV0dXJuIG1fZmxvd1JldHVybjsK
KworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKyAgICBHUmVmUHRyPEdzdEJ1
cz4gbV9idXM7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2FwcHNyYzsKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fZGVtdXg7CisjaWYgRU5BQkxFKExFR0FDWV9FTkNSWVBURURfTUVESUEp
CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2RlY3J5cHRvcjsKKyNlbmRpZgorICAgIC8vIFRo
ZSBkZW11eGVyIGhhcyBvbmUgc3JjIHN0cmVhbSBvbmx5LCBzbyBvbmx5IG9uZSBhcHBzaW5rIGlz
IG5lZWRlZCBhbmQgbGlua2VkIHRvIGl0LgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hcHBz
aW5rOworCisgICAgTG9jayBtX25ld1NhbXBsZUxvY2s7CisgICAgQ29uZGl0aW9uIG1fbmV3U2Ft
cGxlQ29uZGl0aW9uOworICAgIExvY2sgbV9wYWRBZGRSZW1vdmVMb2NrOworICAgIENvbmRpdGlv
biBtX3BhZEFkZFJlbW92ZUNvbmRpdGlvbjsKKworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9hcHBz
aW5rQ2FwczsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fZGVtdXhlclNyY1BhZENhcHM7CisgICAg
RmxvYXRTaXplIG1fcHJlc2VudGF0aW9uU2l6ZTsKKworICAgIGJvb2wgbV9hcHBzcmNBdExlYXN0
QUJ1ZmZlckxlZnQ7CisgICAgYm9vbCBtX2FwcHNyY05lZWREYXRhUmVjZWl2ZWQ7CisKKyAgICBn
dWxvbmcgbV9hcHBzcmNEYXRhTGVhdmluZ1Byb2JlSWQ7CisjaWYgIUxPR19ESVNBQkxFRAorICAg
IHN0cnVjdCBQYWRQcm9iZUluZm9ybWF0aW9uIG1fZGVtdXhlckRhdGFFbnRlcmluZ1BhZFByb2Jl
SW5mb3JtYXRpb247CisgICAgc3RydWN0IFBhZFByb2JlSW5mb3JtYXRpb24gbV9hcHBzaW5rRGF0
YUVudGVyaW5nUGFkUHJvYmVJbmZvcm1hdGlvbjsKKyNlbmRpZgorCisgICAgLy8gS2VlcHMgdHJh
Y2sgb2YgdGhlIHN0YXRlcyBvZiBhcHBlbmQgcHJvY2Vzc2luZywgdG8gYXZvaWQgcGVyZm9ybWlu
ZyBhY3Rpb25zIGluYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IHN0YXRlCisgICAgLy8gKGVn
OiBwcm9jZXNzaW5nIG1vcmUgc2FtcGxlcyB3aGVuIHRoZSBsYXN0IG9uZSBoYXMgYmVlbiBkZXRl
Y3RlZCwgZXRjLikuIFNlZSBzZXRBcHBlbmRTdGF0ZSgpIGZvciB2YWxpZAorICAgIC8vIHRyYW5z
aXRpb25zLgorICAgIEFwcGVuZFN0YXRlIG1fYXBwZW5kU3RhdGU7CisKKyAgICAvLyBBYm9ydHMg
Y2FuIG9ubHkgYmUgY29tcGxldGVkIHdoZW4gdGhlIG5vcm1hbCBzYW1wbGUgZGV0ZWN0aW9uIGhh
cyBmaW5pc2hlZC4gTWVhbndoaWxlLCB0aGUgd2lsbGluZyB0byBhYm9ydCBpcworICAgIC8vIGV4
cHJlc3NlZCBpbiB0aGlzIGZpZWxkLgorICAgIGJvb2wgbV9hYm9ydFBlbmRpbmc7CisKKyAgICBX
ZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXIgbV9zdHJlYW1UeXBlOworICAg
IFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBtX29sZFRyYWNrOworICAgIFJlZlB0
cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiBtX3RyYWNrOworCisgICAgR1JlZlB0cjxHc3RC
dWZmZXI+IG1fcGVuZGluZ0J1ZmZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUuCisK
KyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>