<?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>143218</bug_id>
          
          <creation_ts>2015-03-30 07:22:46 -0700</creation_ts>
          <short_desc>[GStreamer] Move synchronous message handler to MediaPlayerPrivateGStreamerBase</short_desc>
          <delta_ts>2015-04-01 03:47:26 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1081151</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-03-30 07:22:46 -0700</bug_when>
    <thetext>Video rendering is handled in the base class so the GL context set-up code should also be there.

This is going to be needed anyway if we ever want to do WebRTC video rendering with glimagesink.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081174</commentid>
    <comment_count>1</comment_count>
      <attachid>249733</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-03-30 09:03:22 -0700</bug_when>
    <thetext>Created attachment 249733
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081578</commentid>
    <comment_count>2</comment_count>
      <attachid>249805</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-03-31 01:09:39 -0700</bug_when>
    <thetext>Created attachment 249805
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081949</commentid>
    <comment_count>3</comment_count>
      <attachid>249805</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-01 02:33:09 -0700</bug_when>
    <thetext>Comment on attachment 249805
patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:292
&gt; -    g_object_set(m_playBin.get(), &quot;uri&quot;, cleanURL.utf8().data(), NULL);
&gt; +    g_object_set(m_pipeline.get(), &quot;uri&quot;, cleanURL.utf8().data(), NULL);

nullptr.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:535
&gt; -    GstStateChangeReturn getStateResult = gst_element_get_state(m_playBin.get(), &amp;state, 0, 0);
&gt; +    GstStateChangeReturn getStateResult = gst_element_get_state(m_pipeline.get(), &amp;state, 0, 0);

&amp;state, 0, 0 -&gt; &amp;state, nullptr, 0

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:612
&gt; -        g_object_set(m_playBin.get(), &quot;mute&quot;, mute, NULL);
&gt; +        g_object_set(m_pipeline.get(), &quot;mute&quot;, mute, NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:644
&gt; -    gst_element_get_state(m_playBin.get(), &amp;state, 0, 0);
&gt; +    gst_element_get_state(m_pipeline.get(), &amp;state, 0, 0);

&amp;state, 0, 0 -&gt; &amp;state, nullptr, 0

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:667
&gt; -    if (m_playBin)
&gt; -        g_object_get(m_playBin.get(), &quot;n-video&quot;, &amp;numTracks, NULL);
&gt; +    if (m_pipeline)
&gt; +        g_object_get(m_pipeline.get(), &quot;n-video&quot;, &amp;numTracks, NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:674
&gt; -        g_signal_emit_by_name(m_playBin.get(), &quot;get-video-pad&quot;, i, &amp;pad.outPtr(), NULL);
&gt; +        g_signal_emit_by_name(m_pipeline.get(), &quot;get-video-pad&quot;, i, &amp;pad.outPtr(), NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:715
&gt; -    if (m_playBin)
&gt; -        g_object_get(m_playBin.get(), &quot;n-audio&quot;, &amp;numTracks, NULL);
&gt; +    if (m_pipeline)
&gt; +        g_object_get(m_pipeline.get(), &quot;n-audio&quot;, &amp;numTracks, NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:722
&gt; -        g_signal_emit_by_name(m_playBin.get(), &quot;get-audio-pad&quot;, i, &amp;pad.outPtr(), NULL);
&gt; +        g_signal_emit_by_name(m_pipeline.get(), &quot;get-audio-pad&quot;, i, &amp;pad.outPtr(), NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:758
&gt; -    if (m_playBin)
&gt; -        g_object_get(m_playBin.get(), &quot;n-text&quot;, &amp;numTracks, NULL);
&gt; +    if (m_pipeline)
&gt; +        g_object_get(m_pipeline.get(), &quot;n-text&quot;, &amp;numTracks, NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:762
&gt; -        g_signal_emit_by_name(m_playBin.get(), &quot;get-text-pad&quot;, i, &amp;pad.outPtr(), NULL);
&gt; +        g_signal_emit_by_name(m_pipeline.get(), &quot;get-text-pad&quot;, i, &amp;pad.outPtr(), NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:999
&gt; -        gst_element_get_state(m_playBin.get(), &amp;currentState, NULL, 250);
&gt; +        gst_element_get_state(m_pipeline.get(), &amp;currentState, NULL, 250);

nullptr. Doesn&apos;t 250 need to be multiplied by GST_NSECOND?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1322
&gt; -    g_object_get(m_playBin.get(), &quot;source&quot;, &amp;m_source.outPtr(), NULL);
&gt; +    g_object_get(m_pipeline.get(), &quot;source&quot;, &amp;m_source.outPtr(), NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1603
&gt; -            gst_element_get_state(m_playBin.get(), &amp;state, 0, 0);
&gt; +            gst_element_get_state(m_pipeline.get(), &amp;state, 0, 0);

&amp;state, 0, 0 -&gt; &amp;state, nullptr, 0

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1606
&gt; -                g_object_set(m_playBin.get(), &quot;uri&quot;, newUrl.string().utf8().data(), NULL);
&gt; +                g_object_set(m_pipeline.get(), &quot;uri&quot;, newUrl.string().utf8().data(), NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1660
&gt; -        if (gst_element_get_state(m_playBin.get(), &amp;state, 0, 0) == GST_STATE_CHANGE_SUCCESS &amp;&amp; state &gt; GST_STATE_READY)
&gt; +        if (gst_element_get_state(m_pipeline.get(), &amp;state, 0, 0) == GST_STATE_CHANGE_SUCCESS &amp;&amp; state &gt; GST_STATE_READY)

&amp;state, 0, 0 -&gt; &amp;state, nullptr, 0

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1827
&gt; -    g_object_get(m_playBin.get(), &quot;flags&quot;, &amp;flags, NULL);
&gt; +    g_object_get(m_pipeline.get(), &quot;flags&quot;, &amp;flags, NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1838
&gt; -        g_object_set(m_playBin.get(), &quot;flags&quot;, flags | flagDownload, NULL);
&gt; +        g_object_set(m_pipeline.get(), &quot;flags&quot;, flags | flagDownload, NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1842
&gt; -        g_object_set(m_playBin.get(), &quot;flags&quot;, flags &amp; ~flagDownload, NULL);
&gt; +        g_object_set(m_pipeline.get(), &quot;flags&quot;, flags &amp; ~flagDownload, NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1938
&gt; -    g_object_set(m_playBin.get(), &quot;mute&quot;, m_player-&gt;muted(), NULL);
&gt; +    g_object_set(m_pipeline.get(), &quot;mute&quot;, m_player-&gt;muted(), NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1949
&gt; -        g_object_set(m_playBin.get(), &quot;text-stream-combiner&quot;, textCombiner, NULL);
&gt; +        g_object_set(m_pipeline.get(), &quot;text-stream-combiner&quot;, textCombiner, NULL);

nullptr

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1960
&gt; -        g_object_set(m_playBin.get(), &quot;text-sink&quot;, m_textAppSink.get(), NULL);
&gt; +        g_object_set(m_pipeline.get(), &quot;text-sink&quot;, m_textAppSink.get(), NULL);

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081963</commentid>
    <comment_count>4</comment_count>
      <attachid>249805</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-04-01 03:45:16 -0700</bug_when>
    <thetext>Comment on attachment 249805
patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:999
&gt;&gt; +        gst_element_get_state(m_pipeline.get(), &amp;currentState, NULL, 250);
&gt; 
&gt; nullptr. Doesn&apos;t 250 need to be multiplied by GST_NSECOND?

Indeed :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081964</commentid>
    <comment_count>5</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2015-04-01 03:47:26 -0700</bug_when>
    <thetext>Committed r182229: &lt;http://trac.webkit.org/changeset/182229&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249733</attachid>
            <date>2015-03-30 09:03:22 -0700</date>
            <delta_ts>2015-03-31 01:09:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>41661</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA5OTRlZmMxZGU1ZjU4MGY4MTg5OGZkMTM1ZjdlMWFjZTVhYWJlMDZmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDMwIE1hciAyMDE1IDE3OjU0OjQ0ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgNTYgKysrKysKIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcCAgICAgIHwgMjUxICsrKysrKy0tLS0tLS0tLS0tLS0tLQogLi4uL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCAgICAgICAgfCAgMTIgLQogLi4uL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCAgfCAxMDggKysrKysrKysrCiAu
Li4vZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCAgICB8ICAxNSAr
LQogNSBmaWxlcyBjaGFuZ2VkLCAyNTMgaW5zZXJ0aW9ucygrKSwgMTg5IGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2N2UyODcwLi5mOTYwYmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjEg
QEAKIDIwMTUtMDMtMzAgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgog
CisgICAgICAgIFtHU3RyZWFtZXJdIE1vdmUgc3luY2hyb25vdXMgbWVzc2FnZSBoYW5kbGVyIHRv
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVkIHRoZSBwaXBlbGluZSBwb2ludGVyIHRvIHRo
ZSBiYXNlIGNsYXNzLCBzdWItY2xhc3NlcyBzaG91bGQKKyAgICAgICAgbm93IGludm9rZSBzZXRQ
aXBlbGluZSgpIHdoZW4gbG9hZGluZyBhIHJlc291cmNlLiBUaGUgYmFzZSBjbGFzcworICAgICAg
ICBub3cgdGFrZXMgY2FyZSBvZiBjb25maWd1cmluZyB0aGUgR0wgc2hhcmVkIGNvbnRleHQsIHRo
aXMgaXMgbW9yZQorICAgICAgICBsb2dpY2FsIGJlY2F1c2UgdmlkZW8gcmVuZGVyaW5nIGlzIGFs
c28gbWFuYWdlZCBieSB0aGlzIGNsYXNzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBp
cyBvbmx5IGEgY29kZSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBs
YXliYWNrUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjaGFuZ2VQaXBlbGluZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQ
bGF5ZXJPZkF1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNh
bmNlbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojphc3luY1N0YXRlQ2hhbmdlRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYWNoZUR1cmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0RG93bmxvYWRCdWZmZXJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRp
b1NpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c2ltdWxhdGVBdWRpb0ludGVycnVwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpt
ZWRpYVBsYXllclByaXZhdGVTeW5jTWVzc2FnZUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjplbnN1cmVHc3RHTENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptZWRpYVBsYXllclByaXZhdGVOZWVkQ29udGV4dE1l
c3NhZ2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRQaXBlbGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVO
ZWVkQ29udGV4dE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6ZW5zdXJlR3N0R0xDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oOgorCisy
MDE1LTAzLTMwICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKwogICAg
ICAgICBbR1N0cmVhbWVyXSBNb3JlIEdMIHNoYXJlZCBjb250ZXh0IGZpeGVzCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMyMTYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCAwNWMxZDNhLi5i
MzUzOWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcApAQCAtNjgsMjggKzY4LDYgQEAKICNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyR1N0
cmVhbWVyLmgiCiAjZW5kaWYKIAotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0jaW5jbHVkZSAiR0xD
b250ZXh0LmgiCi0KLSNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKLSNpbmNsdWRlIDxnc3Qv
Z2wvZ2wuaD4KLSN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQotCi0jaWYgVVNFKEdMWCkKLSNp
bmNsdWRlICJHTENvbnRleHRHTFguaCIKLSNpbmNsdWRlIDxnc3QvZ2wveDExL2dzdGdsZGlzcGxh
eV94MTEuaD4KLSNlbGlmIFVTRShFR0wpCi0jaW5jbHVkZSAiR0xDb250ZXh0RUdMLmgiCi0jaW5j
bHVkZSA8Z3N0L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmg+Ci0jZW5kaWYKLQotLy8gZ3N0Z2xh
cGkuaCBtYXkgaW5jbHVkZSBlZ2xwbGF0Zm9ybS5oIGFuZCBpdCBpbmNsdWRlcyBYLmgsIHdoaWNo
Ci0vLyBkZWZpbmVzIE5vbmUsIGJyZWFraW5nIE1lZGlhUGxheWVyOjpOb25lIGVudW0KLSNpZiBQ
TEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAotI3VuZGVmIE5vbmUKLSNl
bmRpZgotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KIC8vIE1heCBpbnRlcnZhbCBpbiBz
ZWNvbmRzIHRvIHN0YXkgaW4gdGhlIFJFQURZIHN0YXRlIG9uIG1hbnVhbAogLy8gc3RhdGUgY2hh
bmdlIHJlcXVlc3RzLgogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdSZWFkeVN0YXRlVGltZXJJbnRl
cnZhbCA9IDYwOwpAQCAtMTA2LDExICs4NCw2IEBAIHN0YXRpYyBnYm9vbGVhbiBtZWRpYVBsYXll
clByaXZhdGVNZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwKICAg
ICByZXR1cm4gcGxheWVyLT5oYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi1zdGF0aWMgdm9p
ZCBtZWRpYVBsYXllclByaXZhdGVTeW5jTWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyosIEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQotewotICAg
IHBsYXllci0+aGFuZGxlU3luY01lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIG1l
ZGlhUGxheWVyUHJpdmF0ZVNvdXJjZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3Bl
YyosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQogewogICAgIHBsYXllci0+
c291cmNlQ2hhbmdlZCgpOwpAQCAtMjczLDIyICsyNDYsMjEgQEAgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCkKIAogICAgIG1fcmVhZHlU
aW1lckhhbmRsZXIuY2FuY2VsKCk7CiAKLSAgICBpZiAobV9wbGF5QmluKSB7Ci0gICAgICAgIEdS
ZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJ
UEVMSU5FKG1fcGxheUJpbi5nZXQoKSkpKTsKKyAgICBpZiAobV9waXBlbGluZSkgeworICAgICAg
ICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdT
VF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOwogICAgICAgICBBU1NFUlQoYnVzKTsKICAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGJ1cy5nZXQoKSwgcmVp
bnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNr
KSwgdGhpcyk7CiAgICAgICAgIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaChidXMuZ2V0KCkp
OwogCi0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3BsYXlC
aW4uZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlhUGxheWVyUHJpdmF0ZVNv
dXJjZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2Z1bmMobV9wbGF5QmluLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2lu
dGVyPihtZWRpYVBsYXllclByaXZhdGVWaWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAg
ICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9wbGF5QmluLmdldCgp
LCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5n
ZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X2J5X2Z1bmMobV9waXBlbGluZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVk
aWFQbGF5ZXJQcml2YXRlU291cmNlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3BpcGVsaW5lLmdldCgpLCByZWlu
dGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVWaWRlb0NoYW5nZWRDYWxs
YmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1
bmMobV9waXBlbGluZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQbGF5
ZXJQcml2YXRlQXVkaW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCi0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3Bs
YXlCaW4uZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlhUGxheWVyUHJpdmF0
ZU5ld1RleHRTYW1wbGVDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMobV9wbGF5QmluLmdldCgpLCByZWludGVycHJldF9jYXN0PGdw
b2ludGVyPihtZWRpYVBsYXllclByaXZhdGVUZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3BpcGVsaW5lLmdl
dCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVOZXdUZXh0
U2FtcGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKG1fcGlwZWxpbmUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+
KG1lZGlhUGxheWVyUHJpdmF0ZVRleHRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICNlbmRpZgog
Ci0gICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksIEdTVF9TVEFU
RV9OVUxMKTsKLSAgICAgICAgbV9wbGF5QmluLmNsZWFyKCk7CisgICAgICAgIGdzdF9lbGVtZW50
X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CiAgICAgfQogCiAg
ICAgaWYgKG1fd2Via2l0VmlkZW9TaW5rKSB7CkBAIC0zMTEsMTMgKzI4MywxMyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykK
ICAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCiAgICAgICAgIGNsZWFuVVJMID0gY2xlYW5VUkwu
c3Vic3RyaW5nKDAsIHVybC5wYXRoRW5kKCkpOwogCi0gICAgaWYgKCFtX3BsYXlCaW4pCisgICAg
aWYgKCFtX3BpcGVsaW5lKQogICAgICAgICBjcmVhdGVHU1RQbGF5QmluKCk7CiAKLSAgICBBU1NF
UlQobV9wbGF5QmluKTsKKyAgICBBU1NFUlQobV9waXBlbGluZSk7CiAKICAgICBtX3VybCA9IFVS
TChVUkwoKSwgY2xlYW5VUkwpOwotICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4uZ2V0KCksICJ1
cmkiLCBjbGVhblVSTC51dGY4KCkuZGF0YSgpLCBOVUxMKTsKKyAgICBnX29iamVjdF9zZXQobV9w
aXBlbGluZS5nZXQoKSwgInVyaSIsIGNsZWFuVVJMLnV0ZjgoKS5kYXRhKCksIE5VTEwpOwogCiAg
ICAgSU5GT19NRURJQV9NRVNTQUdFKCJMb2FkICVzIiwgY2xlYW5VUkwudXRmOCgpLmRhdGEoKSk7
CiAKQEAgLTM4NCw3ICszNTYsNyBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnBsYXliYWNrUG9zaXRpb24oKSBjb25zdAogICAgIC8vIFBvc2l0aW9uIGlzIG9ubHkgYXZhaWxh
YmxlIGlmIG5vIGFzeW5jIHN0YXRlIGNoYW5nZSBpcyBnb2luZyBvbiBhbmQgdGhlIHN0YXRlIGlz
IGVpdGhlciBwYXVzZWQgb3IgcGxheWluZy4KICAgICBnaW50NjQgcG9zaXRpb24gPSBHU1RfQ0xP
Q0tfVElNRV9OT05FOwogICAgIEdzdFF1ZXJ5KiBxdWVyeT0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlv
bihHU1RfRk9STUFUX1RJTUUpOwotICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3BsYXlCaW4u
Z2V0KCksIHF1ZXJ5KSkKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQo
KSwgcXVlcnkpKQogICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZw
b3NpdGlvbik7CiAKICAgICBmbG9hdCByZXN1bHQgPSAwLjBmOwpAQCAtNDAyLDEyICszNzQsMTIg
QEAgZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5YmFja1Bvc2l0aW9uKCkg
Y29uc3QKIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5l
U3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCiB7Ci0gICAgQVNTRVJUKG1fcGxheUJpbik7CisgICAg
QVNTRVJUKG1fcGlwZWxpbmUpOwogCiAgICAgR3N0U3RhdGUgY3VycmVudFN0YXRlOwogICAgIEdz
dFN0YXRlIHBlbmRpbmc7CiAKLSAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9wbGF5QmluLmdl
dCgpLCAmY3VycmVudFN0YXRlLCAmcGVuZGluZywgMCk7CisgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0
YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nLCAwKTsKICAgICBp
ZiAoY3VycmVudFN0YXRlID09IG5ld1N0YXRlIHx8IHBlbmRpbmcgPT0gbmV3U3RhdGUpIHsKICAg
ICAgICAgTE9HX01FRElBX01FU1NBR0UoIlJlamVjdGVkIHN0YXRlIGNoYW5nZSB0byAlcyBmcm9t
ICVzIHdpdGggJXMgcGVuZGluZyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRl
KSwKICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSks
IGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKQEAgLTQxNyw3ICszODksNyBA
QCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZShH
c3RTdGF0ZSBuZXdTdGF0ZSkKICAgICBMT0dfTUVESUFfTUVTU0FHRSgiQ2hhbmdpbmcgc3RhdGUg
Y2hhbmdlIHRvICVzIGZyb20gJXMgd2l0aCAlcyBwZW5kaW5nIiwgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUobmV3U3RhdGUpLAogICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShj
dXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CiAKLSAg
ICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BsYXlCaW4uZ2V0KCksIG5ld1N0YXRlKTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVy
biBzZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgp
LCBuZXdTdGF0ZSk7CiAgICAgR3N0U3RhdGUgcGF1c2VkT3JQbGF5aW5nID0gbmV3U3RhdGUgPT0g
R1NUX1NUQVRFX1BMQVlJTkcgPyBHU1RfU1RBVEVfUEFVU0VEIDogR1NUX1NUQVRFX1BMQVlJTkc7
CiAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBwYXVzZWRPclBsYXlpbmcgJiYgc2V0U3RhdGVSZXN1
bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTQ2OCw3ICs0NDAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1
c2UoKQogewogICAgIG1fcGxheWJhY2tSYXRlUGF1c2UgPSBmYWxzZTsKICAgICBHc3RTdGF0ZSBj
dXJyZW50U3RhdGUsIHBlbmRpbmdTdGF0ZTsKLSAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9w
bGF5QmluLmdldCgpLCAmY3VycmVudFN0YXRlLCAmcGVuZGluZ1N0YXRlLCAwKTsKKyAgICBnc3Rf
ZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJmN1cnJlbnRTdGF0ZSwgJnBlbmRp
bmdTdGF0ZSwgMCk7CiAgICAgaWYgKGN1cnJlbnRTdGF0ZSA8IEdTVF9TVEFURV9QQVVTRUQgJiYg
cGVuZGluZ1N0YXRlIDw9IEdTVF9TVEFURV9QQVVTRUQpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NDgwLDcgKzQ1Miw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZSgp
CiAKIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVyYXRpb24oKSBjb25zdAog
ewotICAgIGlmICghbV9wbGF5QmluKQorICAgIGlmICghbV9waXBlbGluZSkKICAgICAgICAgcmV0
dXJuIDAuMGY7CiAKICAgICBpZiAobV9lcnJvck9jY3VyZWQpCkBAIC00OTYsNyArNDY4LDcgQEAg
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbigpIGNvbnN0CiAgICAg
R3N0Rm9ybWF0IHRpbWVGb3JtYXQgPSBHU1RfRk9STUFUX1RJTUU7CiAgICAgZ2ludDY0IHRpbWVM
ZW5ndGggPSAwOwogCi0gICAgYm9vbCBmYWlsdXJlID0gIWdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0
aW9uKG1fcGxheUJpbi5nZXQoKSwgdGltZUZvcm1hdCwgJnRpbWVMZW5ndGgpIHx8IHN0YXRpY19j
YXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpID09IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgYm9v
bCBmYWlsdXJlID0gIWdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fcGlwZWxpbmUuZ2V0KCks
IHRpbWVGb3JtYXQsICZ0aW1lTGVuZ3RoKSB8fCBzdGF0aWNfY2FzdDxndWludDY0Pih0aW1lTGVu
Z3RoKSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FOwogICAgIGlmIChmYWlsdXJlKSB7CiAgICAgICAg
IExPR19NRURJQV9NRVNTQUdFKCJUaW1lIGR1cmF0aW9uIHF1ZXJ5IGZhaWxlZCBmb3IgJXMiLCBt
X3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIG51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsKQEAgLTUxMSw3ICs0ODMsNyBAQCBmbG9hdCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uKCkgY29uc3QKIAogZmxvYXQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpjdXJyZW50VGltZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3Bs
YXlCaW4pCisgICAgaWYgKCFtX3BpcGVsaW5lKQogICAgICAgICByZXR1cm4gMC4wZjsKIAogICAg
IGlmIChtX2Vycm9yT2NjdXJlZCkKQEAgLTUzMyw3ICs1MDUsNyBAQCBmbG9hdCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRUaW1lKCkgY29uc3QKIAogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNlZWsoZmxvYXQgdGltZSkKIHsKLSAgICBpZiAoIW1fcGxheUJp
bikKKyAgICBpZiAoIW1fcGlwZWxpbmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2Vy
cm9yT2NjdXJlZCkKQEAgLTU2MCw3ICs1MzIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c2VlayhmbG9hdCB0aW1lKQogICAgIH0KIAogICAgIEdzdFN0YXRlIHN0YXRlOwot
ICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgJnN0YXRlLCAwLCAwKTsKKyAgICBHc3RTdGF0ZUNoYW5n
ZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5l
LmdldCgpLCAmc3RhdGUsIDAsIDApOwogICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RB
VEVfQ0hBTkdFX0ZBSUxVUkUgfHwgZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9O
T19QUkVST0xMKSB7CiAgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJbU2Vla10gY2Fubm90IHNl
ZWssIGN1cnJlbnQgc3RhdGUgY2hhbmdlIGlzICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdl
X3JldHVybl9nZXRfbmFtZShnZXRTdGF0ZVJlc3VsdCkpOwogICAgICAgICByZXR1cm47CkBAIC02
MTEsNyArNTgzLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayhn
aW50NjQgcG9zaXRpb24sIGZsb2F0IHJhdGUsIEdzdFNlZWtGbGEKICAgICBpZiAoIXJhdGUpCiAg
ICAgICAgIHJhdGUgPSAxLjA7CiAKLSAgICByZXR1cm4gZ3N0X2VsZW1lbnRfc2VlayhtX3BsYXlC
aW4uZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRfVElNRSwgc2Vla1R5cGUsCisgICAgcmV0dXJuIGdz
dF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5nZXQoKSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLCBz
ZWVrVHlwZSwKICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHN0YXJ0VGltZSwgR1NUX1NFRUtf
VFlQRV9TRVQsIGVuZFRpbWUpOwogfQogCkBAIC02MzcsNyArNjA5LDcgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCiAKICAgICBJTkZPX01F
RElBX01FU1NBR0UoIk5lZWQgdG8gbXV0ZSBhdWRpbz86ICVkIiwgKGludCkgbXV0ZSk7CiAgICAg
aWYgKGRvU2VlayhjdXJyZW50UG9zaXRpb24sIG1fcGxheWJhY2tSYXRlLCBzdGF0aWNfY2FzdDxH
c3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0gpKSkgewotICAgICAgICBnX29iamVjdF9z
ZXQobV9wbGF5QmluLmdldCgpLCAibXV0ZSIsIG11dGUsIE5VTEwpOworICAgICAgICBnX29iamVj
dF9zZXQobV9waXBlbGluZS5nZXQoKSwgIm11dGUiLCBtdXRlLCBOVUxMKTsKICAgICAgICAgbV9s
YXN0UGxheWJhY2tSYXRlID0gbV9wbGF5YmFja1JhdGU7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
bV9wbGF5YmFja1JhdGUgPSBtX2xhc3RQbGF5YmFja1JhdGU7CkBAIC02NDgsNyArNjIwLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCiAg
ICAgICAgIEdzdFN0YXRlIHN0YXRlOwogICAgICAgICBHc3RTdGF0ZSBwZW5kaW5nOwogCi0gICAg
ICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksICZzdGF0ZSwgJnBlbmRp
bmcsIDApOworICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwg
JnN0YXRlLCAmcGVuZGluZywgMCk7CiAgICAgICAgIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUExB
WUlORyAmJiBwZW5kaW5nICE9IEdTVF9TVEFURV9QTEFZSU5HKQogICAgICAgICAgICAgY2hhbmdl
UGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7CiAgICAgICAgIG1fcGxheWJhY2tSYXRl
UGF1c2UgPSBmYWxzZTsKQEAgLTY2OSw3ICs2NDEsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6cGF1c2VkKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
R3N0U3RhdGUgc3RhdGU7Ci0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGxheUJpbi5nZXQo
KSwgJnN0YXRlLCAwLCAwKTsKKyAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5n
ZXQoKSwgJnN0YXRlLCAwLCAwKTsKICAgICByZXR1cm4gc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNF
RDsKIH0KIApAQCAtNjkxLDE1ICs2NjMsMTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnZpZGVvQ2Fwc0NoYW5nZWQoKQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6Om5vdGlmeVBsYXllck9mVmlkZW8oKQogewogICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKLSAg
ICBpZiAobV9wbGF5QmluKQotICAgICAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLmdldCgpLCAi
bi12aWRlbyIsICZudW1UcmFja3MsIE5VTEwpOworICAgIGlmIChtX3BpcGVsaW5lKQorICAgICAg
ICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgIm4tdmlkZW8iLCAmbnVtVHJhY2tzLCBO
VUxMKTsKIAogICAgIG1faGFzVmlkZW8gPSBudW1UcmFja3MgPiAwOwogCiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQogICAgIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytpKSB7CiAg
ICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShtX3BsYXlCaW4uZ2V0KCksICJnZXQtdmlkZW8tcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgTlVM
TCk7CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0
LXZpZGVvLXBhZCIsIGksICZwYWQub3V0UHRyKCksIE5VTEwpOwogICAgICAgICBBU1NFUlQocGFk
KTsKIAogICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fdmlkZW9UcmFja3Muc2l6
ZSgpKSkgewpAQCAtNzA5LDcgKzY4MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJh
Y2sgPSBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1fcGxheUJpbiwgaSwgcGFk
KTsKKyAgICAgICAgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IFZp
ZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9waXBlbGluZSwgaSwgcGFkKTsKICAg
ICAgICAgbV92aWRlb1RyYWNrcy5hcHBlbmQodHJhY2spOwogICAgICAgICBtX3BsYXllci0+YWRk
VmlkZW9UcmFjayh0cmFjay5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTczOSwxNSArNzExLDE1IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWQoKQogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mQXVkaW8oKQogewogICAg
IGdpbnQgbnVtVHJhY2tzID0gMDsKLSAgICBpZiAobV9wbGF5QmluKQotICAgICAgICBnX29iamVj
dF9nZXQobV9wbGF5QmluLmdldCgpLCAibi1hdWRpbyIsICZudW1UcmFja3MsIE5VTEwpOworICAg
IGlmIChtX3BpcGVsaW5lKQorICAgICAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwg
Im4tYXVkaW8iLCAmbnVtVHJhY2tzLCBOVUxMKTsKIAogICAgIG1faGFzQXVkaW8gPSBudW1UcmFj
a3MgPiAwOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGZvciAoZ2ludCBpID0gMDsg
aSA8IG51bVRyYWNrczsgKytpKSB7CiAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7Ci0gICAg
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3BsYXlCaW4uZ2V0KCksICJnZXQtYXVkaW8tcGFk
IiwgaSwgJnBhZC5vdXRQdHIoKSwgTlVMTCk7CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LWF1ZGlvLXBhZCIsIGksICZwYWQub3V0UHRyKCksIE5V
TEwpOwogICAgICAgICBBU1NFUlQocGFkKTsKIAogICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0
PGdpbnQ+KG1fYXVkaW9UcmFja3Muc2l6ZSgpKSkgewpAQCAtNzU3LDcgKzcyOSw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKCkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxBdWRpb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6
Y3JlYXRlKG1fcGxheUJpbiwgaSwgcGFkKTsKKyAgICAgICAgUmVmUHRyPEF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyPiB0cmFjayA9IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUo
bV9waXBlbGluZSwgaSwgcGFkKTsKICAgICAgICAgbV9hdWRpb1RyYWNrcy5pbnNlcnQoaSwgdHJh
Y2spOwogICAgICAgICBtX3BsYXllci0+YWRkQXVkaW9UcmFjayh0cmFjay5yZWxlYXNlKCkpOwog
ICAgIH0KQEAgLTc4MiwxMiArNzU0LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjp0ZXh0Q2hhbmdlZCgpCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZUZXh0KCkKIHsKICAgICBnaW50IG51bVRyYWNrcyA9IDA7Ci0gICAgaWYgKG1f
cGxheUJpbikKLSAgICAgICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbi5nZXQoKSwgIm4tdGV4dCIs
ICZudW1UcmFja3MsIE5VTEwpOworICAgIGlmIChtX3BpcGVsaW5lKQorICAgICAgICBnX29iamVj
dF9nZXQobV9waXBlbGluZS5nZXQoKSwgIm4tdGV4dCIsICZudW1UcmFja3MsIE5VTEwpOwogCiAg
ICAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKICAgICAgICAgR1JlZlB0
cjxHc3RQYWQ+IHBhZDsKLSAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGxheUJpbi5n
ZXQoKSwgImdldC10ZXh0LXBhZCIsIGksICZwYWQub3V0UHRyKCksIE5VTEwpOworICAgICAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV9waXBlbGluZS5nZXQoKSwgImdldC10ZXh0LXBhZCIsIGks
ICZwYWQub3V0UHRyKCksIE5VTEwpOwogICAgICAgICBBU1NFUlQocGFkKTsKIAogICAgICAgICBp
ZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fdGV4dFRyYWNrcy5zaXplKCkpKSB7CkBAIC04Njgs
NyArODQwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFJhdGUoZmxv
YXQgcmF0ZSkKICAgICBtX3BsYXliYWNrUmF0ZSA9IHJhdGU7CiAgICAgbV9jaGFuZ2luZ1JhdGUg
PSB0cnVlOwogCi0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgJnN0
YXRlLCAmcGVuZGluZywgMCk7CisgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUu
Z2V0KCksICZzdGF0ZSwgJnBlbmRpbmcsIDApOwogCiAgICAgaWYgKCFyYXRlKSB7CiAgICAgICAg
IG1fY2hhbmdpbmdSYXRlID0gZmFsc2U7CkBAIC05MDcsNyArODc5LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpidWZm
ZXJlZCgpIGNvbnMKIAogICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYnVmZmVy
aW5nKEdTVF9GT1JNQVRfUEVSQ0VOVCk7CiAKLSAgICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5KG1f
cGxheUJpbi5nZXQoKSwgcXVlcnkpKSB7CisgICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3Bp
cGVsaW5lLmdldCgpLCBxdWVyeSkpIHsKICAgICAgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsK
ICAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXM7CiAgICAgfQpAQCAtOTMxLDc3ICs5MDMsNiBAQCBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmJ1ZmZlcmVkKCkgY29ucwogICAgIHJldHVybiB0aW1lUmFuZ2VzOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2Fn
ZSogbWVzc2FnZSkKLXsKLSAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpIHsK
LSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGNhc2UgR1NUX01FU1NBR0VfTkVFRF9DT05URVhU
OiB7Ci0gICAgICAgIGNvbnN0IGdjaGFyKiBjb250ZXh0VHlwZTsKLSAgICAgICAgZ3N0X21lc3Nh
Z2VfcGFyc2VfY29udGV4dF90eXBlKG1lc3NhZ2UsICZjb250ZXh0VHlwZSk7Ci0KLSAgICAgICAg
aWYgKCFlbnN1cmVHc3RHTENvbnRleHQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBF
KSkgewotICAgICAgICAgICAgR3N0Q29udGV4dCogZGlzcGxheUNvbnRleHQgPSBnc3RfY29udGV4
dF9uZXcoR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFLCBUUlVFKTsKLSAgICAgICAgICAgIGdz
dF9jb250ZXh0X3NldF9nbF9kaXNwbGF5KGRpc3BsYXlDb250ZXh0LCBtX2dsRGlzcGxheS5nZXQo
KSk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtZXNz
YWdlLT5zcmMpLCBkaXNwbGF5Q29udGV4dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImdzdC5nbC5hcHBfY29u
dGV4dCIpKSB7Ci0gICAgICAgICAgICBHc3RDb250ZXh0KiBhcHBDb250ZXh0ID0gZ3N0X2NvbnRl
eHRfbmV3KCJnc3QuZ2wuYXBwX2NvbnRleHQiLCBUUlVFKTsKLSAgICAgICAgICAgIEdzdFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGFwcENvbnRl
eHQpOwotICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4dCIs
IEdTVF9HTF9UWVBFX0NPTlRFWFQsIG1fZ2xDb250ZXh0LmdldCgpLCBudWxscHRyKTsKLSAgICAg
ICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyks
IGFwcENvbnRleHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1ib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR3N0R0xDb250ZXh0KCkKLXsKLSAgICBp
ZiAobV9nbENvbnRleHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFtX2dsRGlz
cGxheSkgewotI2lmIFBMQVRGT1JNKFgxMSkKLSAgICAgICAgRGlzcGxheSogZGlzcGxheSA9IEdM
Q29udGV4dDo6c2hhcmVkWDExRGlzcGxheSgpOwotICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9H
TF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRpc3BsYXkpKTsK
LSNlbGlmIFBMQVRGT1JNKFdBWUxBTkQpCi0gICAgICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IFdh
eWxhbmREaXNwbGF5OjppbnN0YW5jZSgpLT5lZ2xEaXNwbGF5KCk7Ci0gICAgICAgIG1fZ2xEaXNw
bGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNw
bGF5KGRpc3BsYXkpKTsKLSNlbmRpZgotICAgIH0KLQotICAgIEdMQ29udGV4dCogd2Via2l0Q29u
dGV4dCA9IEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKTsKLSAgICAvLyBFR0wgYW5kIEdMWCBh
cmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBubyBuZWVkIGZvciBpZmRlZnMgaGVyZS4KLSAgICBHc3RH
TFBsYXRmb3JtIGdsUGxhdGZvcm0gPSB3ZWJraXRDb250ZXh0LT5pc0VHTENvbnRleHQoKSA/IEdT
VF9HTF9QTEFURk9STV9FR0wgOiBHU1RfR0xfUExBVEZPUk1fR0xYOwotCi0jaWYgVVNFKE9QRU5H
TF9FU18yKQotICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9HTEVTMjsKLSNlbGlmIFVT
RShPUEVOR0wpCi0gICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKLSNlbHNl
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLQotICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgY29udGV4dEhhbmRsZSA9IHdlYmtpdENvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOwotICAgIGlmICghY29udGV4dEhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgbV9nbENvbnRleHQgPSBnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZChtX2dsRGlzcGxheS5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZv
cm0sIGdsQVBJKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVJfR0wpCi0KIGdib29sZWFuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogewogICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBl
cnI7CkBAIC0xMDI2LDcgKzkyNyw3IEBAIGdib29sZWFuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgIH0KIAogICAgIC8v
IFdlIGlnbm9yZSBzdGF0ZSBjaGFuZ2VzIGZyb20gaW50ZXJuYWwgZWxlbWVudHMuIFRoZXkgYXJl
IGZvcndhcmRlZCB0byBwbGF5YmluMiBhbnl3YXkuCi0gICAgYm9vbCBtZXNzYWdlU291cmNlSXNQ
bGF5YmluID0gR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpID09IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0
T2JqZWN0Kj4obV9wbGF5QmluLmdldCgpKTsKKyAgICBib29sIG1lc3NhZ2VTb3VyY2VJc1BsYXli
aW4gPSBHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkgPT0gcmVpbnRlcnByZXRfY2FzdDxHc3RPYmpl
Y3QqPihtX3BpcGVsaW5lLmdldCgpKTsKIAogICAgIExPR19NRURJQV9NRVNTQUdFKCJNZXNzYWdl
ICVzIHJlY2VpdmVkIGZyb20gZWxlbWVudCAlcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRShtZXNz
YWdlKSwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwogICAgIHN3aXRjaCAoR1NUX01F
U1NBR0VfVFlQRShtZXNzYWdlKSkgewpAQCAtMTAzOCw3ICs5MzksNyBAQCBnYm9vbGVhbiBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2Fn
ZSkKICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVyci5vdXRQdHIo
KSwgJmRlYnVnLm91dFB0cigpKTsKICAgICAgICAgRVJST1JfTUVESUFfTUVTU0FHRSgiRXJyb3Ig
JWQ6ICVzICh1cmw9JXMpIiwgZXJyLT5jb2RlLCBlcnItPm1lc3NhZ2UsIG1fdXJsLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lU
SF9UUyhHU1RfQklOKG1fcGxheUJpbi5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwg
IndlYmtpdC12aWRlby5lcnJvciIpOworICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxF
X1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1df
QUxMLCAid2Via2l0LXZpZGVvLmVycm9yIik7CiAKICAgICAgICAgZXJyb3IgPSBNZWRpYVBsYXll
cjo6RW1wdHk7CiAgICAgICAgIGlmIChlcnItPmNvZGUgPT0gR1NUX1NUUkVBTV9FUlJPUl9DT0RF
Q19OT1RfRk9VTkQKQEAgLTEwODIsNyArOTgzLDcgQEAgZ2Jvb2xlYW4gTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAg
IEdzdFN0YXRlIG5ld1N0YXRlOwogICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFu
Z2VkKG1lc3NhZ2UsICZjdXJyZW50U3RhdGUsICZuZXdTdGF0ZSwgMCk7CiAgICAgICAgIENTdHJp
bmcgZG90RmlsZU5hbWUgPSBTdHJpbmc6OmZvcm1hdCgid2Via2l0LXZpZGVvLiVzXyVzIiwgZ3N0
X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUobmV3U3RhdGUpKS51dGY4KCk7Ci0gICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9U
X0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGxheUJpbi5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9T
SE9XX0FMTCwgZG90RmlsZU5hbWUuZGF0YSgpKTsKKyAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19E
T1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQ
SF9TSE9XX0FMTCwgZG90RmlsZU5hbWUuZGF0YSgpKTsKIAogICAgICAgICBicmVhazsKICAgICB9
CkBAIC0xMDk1LDcgKzk5Niw3IEBAIGdib29sZWFuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEU6CiAgICAgICAgIGdzdF9tZXNzYWdlX3Bh
cnNlX3JlcXVlc3Rfc3RhdGUobWVzc2FnZSwgJnJlcXVlc3RlZFN0YXRlKTsKLSAgICAgICAgZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgJmN1cnJlbnRTdGF0ZSwgTlVMTCwg
MjUwKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZj
dXJyZW50U3RhdGUsIE5VTEwsIDI1MCk7CiAgICAgICAgIGlmIChyZXF1ZXN0ZWRTdGF0ZSA8IGN1
cnJlbnRTdGF0ZSkgewogICAgICAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZWxlbWVudE5hbWUo
Z3N0X2VsZW1lbnRfZ2V0X25hbWUoR1NUX0VMRU1FTlQobWVzc2FnZSkpKTsKICAgICAgICAgICAg
IElORk9fTUVESUFfTUVTU0FHRSgiRWxlbWVudCAlcyByZXF1ZXN0ZWQgc3RhdGUgY2hhbmdlIHRv
ICVzIiwgZWxlbWVudE5hbWUuZ2V0KCksCkBAIC0xMTE1LDggKzEwMTYsOCBAQCBnYm9vbGVhbiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKICAgICAgICAgLy8gaXMgZGlzYWJsZWQuIEl0IGFsc28gaGFwcGVucyByZWxhdGl2ZWx5
IG9mdGVuIHdpdGgKICAgICAgICAgLy8gSFRUUCBhZGFwdGl2ZSBzdHJlYW1zIHdoZW4gc3dpdGNo
aW5nIGJldHdlZW4gZGlmZmVyZW50CiAgICAgICAgIC8vIHZhcmlhbnRzIG9mIGEgc3RyZWFtLgot
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLmdldCgpLCBHU1RfU1RBVEVf
UEFVU0VEKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwg
R1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgR1NUX01FU1NBR0VfTEFURU5DWToKICAgICAgICAgLy8gUmVjYWxjdWxhdGUg
dGhlIGxhdGVuY3ksIHdlIGRvbid0IG5lZWQgYW55IHNwZWNpYWwgaGFuZGxpbmcKQEAgLTExMjQs
NyArMTAyNSw3IEBAIGdib29sZWFuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxl
TWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4g
aWYgdGhlIGxhdGVuY3kgb2YgbGl2ZSBlbGVtZW50cyBjaGFuZ2VzLCBvcgogICAgICAgICAvLyBm
b3Igb25lIHJlYXNvbiBvciBhbm90aGVyIGEgbmV3IGxpdmUgZWxlbWVudCBpcyBhZGRlZCBvcgog
ICAgICAgICAvLyByZW1vdmVkIGZyb20gdGhlIHBpcGVsaW5lLgotICAgICAgICBnc3RfYmluX3Jl
Y2FsY3VsYXRlX2xhdGVuY3koR1NUX0JJTihtX3BsYXlCaW4uZ2V0KCkpKTsKKyAgICAgICAgZ3N0
X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5KEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEdTVF9NRVNTQUdFX0VMRU1FTlQ6CiAgICAgICAgIGlmIChn
c3RfaXNfbWlzc2luZ19wbHVnaW5fbWVzc2FnZShtZXNzYWdlKSkgewpAQCAtMTI4Miw3ICsxMTgz
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKCkK
IHsKICAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhHU1RfRk9S
TUFUX1BFUkNFTlQpOwogCi0gICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3BsYXlCaW4uZ2V0
KCksIHF1ZXJ5KSkgeworICAgIGlmICghZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQo
KSwgcXVlcnkpKSB7CiAgICAgICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0xMzUxLDcgKzEyNTIsNyBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Om1heFRpbWVMb2FkZWQoKSBjb25zdAogCiBib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
cGxheUJpbiB8fCAhbV9tZWRpYUR1cmF0aW9uIHx8ICghaXNNZWRpYVNvdXJjZSgpICYmICF0b3Rh
bEJ5dGVzKCkpKQorICAgIGlmICghbV9waXBlbGluZSB8fCAhbV9tZWRpYUR1cmF0aW9uIHx8ICgh
aXNNZWRpYVNvdXJjZSgpICYmICF0b3RhbEJ5dGVzKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgZmxvYXQgY3VycmVudE1heFRpbWVMb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CiAgICAg
Ym9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MgPSBjdXJyZW50TWF4VGltZUxvYWRlZCAhPSBtX21heFRp
bWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7CkBAIC0xNDE4LDcgKzEzMTksNyBAQCB1
bnNpZ25lZCBsb25nIGxvbmcgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0b3RhbEJ5dGVz
KCkgY29uc3QKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VDaGFuZ2Vk
KCkKIHsKICAgICBtX3NvdXJjZS5jbGVhcigpOwotICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4u
Z2V0KCksICJzb3VyY2UiLCAmbV9zb3VyY2Uub3V0UHRyKCksIE5VTEwpOworICAgIGdfb2JqZWN0
X2dldChtX3BpcGVsaW5lLmdldCgpLCAic291cmNlIiwgJm1fc291cmNlLm91dFB0cigpLCBOVUxM
KTsKIAogICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkpCiAgICAgICAg
IHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKFdFQktJVF9XRUJfU1JDKG1fc291cmNlLmdldCgp
KSwgbV9wbGF5ZXIpOwpAQCAtMTQzNCwxMyArMTMzNSwxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y2FuY2VsTG9hZCgpCiAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVk
aWFQbGF5ZXI6OkxvYWRpbmcgfHwgbV9uZXR3b3JrU3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkxvYWRl
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcGxheUJpbikKKyAgICBpZiAobV9waXBl
bGluZSkKICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOwogfQog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXN5bmNTdGF0ZUNoYW5nZURvbmUo
KQogewotICAgIGlmICghbV9wbGF5QmluIHx8IG1fZXJyb3JPY2N1cmVkKQorICAgIGlmICghbV9w
aXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
c2Vla2luZykgewpAQCAtMTQ2Nyw3ICsxMzY4LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiB7Ci0gICAgaWYgKCFtX3BsYXlCaW4pCisgICAg
aWYgKCFtX3BpcGVsaW5lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9lcnJvck9jY3Vy
ZWQpCkBAIC0xNDc4LDcgKzEzNzksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6dXBkYXRlU3RhdGVzKCkKICAgICBHc3RTdGF0ZSBzdGF0ZTsKICAgICBHc3RTdGF0ZSBwZW5k
aW5nOwogCi0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxl
bWVudF9nZXRfc3RhdGUobV9wbGF5QmluLmdldCgpLCAmc3RhdGUsICZwZW5kaW5nLCAyNTAgKiBH
U1RfTlNFQ09ORCk7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGluZywg
MjUwICogR1NUX05TRUNPTkQpOwogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRl
ID0gZmFsc2U7CiAgICAgc3dpdGNoIChnZXRTdGF0ZVJlc3VsdCkgewpAQCAtMTY5OSwxMCArMTYw
MCwxMCBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZE5leHRMb2NhdGlv
bigpCiAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9SRUFEWSk7CiAK
ICAgICAgICAgICAgIEdzdFN0YXRlIHN0YXRlOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgJnN0YXRlLCAwLCAwKTsKKyAgICAgICAgICAgIGdzdF9l
bGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsIDAsIDApOwogICAgICAg
ICAgICAgaWYgKHN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWSkgewogICAgICAgICAgICAgICAgIC8v
IFNldCB0aGUgbmV3IHVyaSBhbmQgc3RhcnQgcGxheWluZy4KLSAgICAgICAgICAgICAgICBnX29i
amVjdF9zZXQobV9wbGF5QmluLmdldCgpLCAidXJpIiwgbmV3VXJsLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIE5VTEwpOworICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdl
dCgpLCAidXJpIiwgbmV3VXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIE5VTEwpOwogICAgICAg
ICAgICAgICAgIG1fdXJsID0gbmV3VXJsOwogICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5l
U3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMTc1Niw3ICsxNjU3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNh
Y2hlRHVyYXRpb24oKQogICAgIGlmIChzdGQ6OmlzaW5mKG5ld0R1cmF0aW9uKSkgewogICAgICAg
ICAvLyBPbmx5IHByZXRlbmQgdGhhdCBkdXJhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGlmIHRoZSB0
aGUgcXVlcnkgZmFpbGVkIGluIGEgc3RhYmxlIHBpcGVsaW5lIHN0YXRlLgogICAgICAgICBHc3RT
dGF0ZSBzdGF0ZTsKLSAgICAgICAgaWYgKGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BsYXlCaW4u
Z2V0KCksICZzdGF0ZSwgMCwgMCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTICYmIHN0YXRl
ID4gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICBpZiAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1f
cGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgMCwgMCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNT
ICYmIHN0YXRlID4gR1NUX1NUQVRFX1JFQURZKQogICAgICAgICAgICAgbV9tZWRpYUR1cmF0aW9u
S25vd24gPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5MTksMTEgKzE4MjAs
MTEgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUUKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5nKCkKIHsKLSAgICBpZiAoIW1fcGxheUJpbikK
KyAgICBpZiAoIW1fcGlwZWxpbmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGZs
YWdzOwotICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4uZ2V0KCksICJmbGFncyIsICZmbGFncywg
TlVMTCk7CisgICAgZ19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJmbGFncyIsICZmbGFn
cywgTlVMTCk7CiAKICAgICB1bnNpZ25lZCBmbGFnRG93bmxvYWQgPSBnZXRHc3RQbGF5RmxhZygi
ZG93bmxvYWQiKTsKIApAQCAtMTkzNCwxMSArMTgzNSwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6c2V0RG93bmxvYWRCdWZmZXJpbmcoKQogICAgIGJvb2wgc2hvdWxkRG93
bmxvYWQgPSAhaXNMaXZlU3RyZWFtKCkgJiYgbV9wcmVsb2FkID09IE1lZGlhUGxheWVyOjpBdXRv
OwogICAgIGlmIChzaG91bGREb3dubG9hZCkgewogICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgi
RW5hYmxpbmcgb24tZGlzayBidWZmZXJpbmciKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxh
eUJpbi5nZXQoKSwgImZsYWdzIiwgZmxhZ3MgfCBmbGFnRG93bmxvYWQsIE5VTEwpOworICAgICAg
ICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwgZmxhZ3MgfCBmbGFnRG93
bmxvYWQsIE5VTEwpOwogICAgICAgICBtX2ZpbGxUaW1lci5zdGFydFJlcGVhdGluZygwLjIpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJEaXNhYmxpbmcgb24tZGlz
ayBidWZmZXJpbmciKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgImZs
YWdzIiwgZmxhZ3MgJiB+ZmxhZ0Rvd25sb2FkLCBOVUxMKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0
KG1fcGlwZWxpbmUuZ2V0KCksICJmbGFncyIsIGZsYWdzICYgfmZsYWdEb3dubG9hZCwgTlVMTCk7
CiAgICAgICAgIG1fZmlsbFRpbWVyLnN0b3AoKTsKICAgICB9CiB9CkBAIC0yMDE3LDM3ICsxOTE4
LDM1IEBAIEdzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlQXVk
aW9TaW5rKCkKIEdzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9T
aW5rKCkgY29uc3QKIHsKICAgICBHc3RFbGVtZW50KiBzaW5rOwotICAgIGdfb2JqZWN0X2dldCht
X3BsYXlCaW4uZ2V0KCksICJhdWRpby1zaW5rIiwgJnNpbmssIG51bGxwdHIpOworICAgIGdfb2Jq
ZWN0X2dldChtX3BpcGVsaW5lLmdldCgpLCAiYXVkaW8tc2luayIsICZzaW5rLCBudWxscHRyKTsK
ICAgICByZXR1cm4gc2luazsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZUdTVFBsYXlCaW4oKQogewotICAgIEFTU0VSVCghbV9wbGF5QmluKTsKKyAgICBBU1NF
UlQoIW1fcGlwZWxpbmUpOwogCiAgICAgLy8gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCkgcmV0
dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZSBzbwogICAgIC8vIHdlIHNob3VsZCBub3QgYWRvcHQu
Ci0gICAgbV9wbGF5QmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJwbGF5YmluIiwgInBs
YXkiKTsKLSAgICBzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KEdTVF9TVFJFQU1fVk9MVU1FKG1fcGxh
eUJpbi5nZXQoKSkpOworICAgIHNldFBpcGVsaW5lKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgi
cGxheWJpbiIsICJwbGF5IikpOworICAgIHNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR1NUX1NUUkVB
TV9WT0xVTUUobV9waXBlbGluZS5nZXQoKSkpOwogCi0gICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9
IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9wbGF5QmluLmdl
dCgpKSkpOworICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5l
X2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CiAgICAgZ3N0X2J1c19h
ZGRfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0
KCksICJtZXNzYWdlIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2FsbGJh
Y2spLCB0aGlzKTsKLSAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24oYnVz
LmdldCgpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cy5nZXQoKSwgInN5bmMtbWVzc2FnZSIs
IEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlU3luY01lc3NhZ2VDYWxsYmFjayksIHRoaXMp
OwogCi0gICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgIm11dGUiLCBtX3BsYXllci0+
bXV0ZWQoKSwgTlVMTCk7CisgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJtdXRl
IiwgbV9wbGF5ZXItPm11dGVkKCksIE5VTEwpOwogCi0gICAgZ19zaWduYWxfY29ubmVjdChtX3Bs
YXlCaW4uZ2V0KCksICJub3RpZnk6OnNvdXJjZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2
YXRlU291cmNlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCht
X3BsYXlCaW4uZ2V0KCksICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclBy
aXZhdGVWaWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9wbGF5QmluLmdldCgpLCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQ
cml2YXRlQXVkaW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1fcGlwZWxpbmUuZ2V0KCksICJub3RpZnk6OnNvdXJjZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5
ZXJQcml2YXRlU291cmNlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29u
bmVjdChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQ
bGF5ZXJQcml2YXRlVmlkZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KG1fcGlwZWxpbmUuZ2V0KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRp
YVBsYXllclByaXZhdGVBdWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogI2lmIEVOQUJMRShW
SURFT19UUkFDSykKICAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDEsIDIpKSB7Ci0g
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLmdldCgpLCAidGV4dC1jaGFuZ2VkIiwg
R19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVUZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9waXBlbGluZS5nZXQoKSwgInRleHQtY2hhbmdl
ZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVGV4dENoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwogCiAgICAgICAgIEdzdEVsZW1lbnQqIHRleHRDb21iaW5lciA9IHdlYmtpdFRleHRDb21i
aW5lck5ldygpOwogICAgICAgICBBU1NFUlQodGV4dENvbWJpbmVyKTsKLSAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgInRleHQtc3RyZWFtLWNvbWJpbmVyIiwgdGV4dENvbWJp
bmVyLCBOVUxMKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ0ZXh0
LXN0cmVhbS1jb21iaW5lciIsIHRleHRDb21iaW5lciwgTlVMTCk7CiAKICAgICAgICAgbV90ZXh0
QXBwU2luayA9IHdlYmtpdFRleHRTaW5rTmV3KCk7CiAgICAgICAgIEFTU0VSVChtX3RleHRBcHBT
aW5rKTsKQEAgLTIwNTgsMTEgKzE5NTcsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogICAgICAgICBnX29iamVjdF9zZXQobV90ZXh0QXBw
U2luay5nZXQoKSwgImVtaXQtc2lnbmFscyIsIHRydWUsICJlbmFibGUtbGFzdC1zYW1wbGUiLCBm
YWxzZSwgImNhcHMiLCBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ0ZXh0L3Z0dCIpLCBOVUxM
KTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3RleHRBcHBTaW5rLmdldCgpLCAibmV3LXNh
bXBsZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlTmV3VGV4dFNhbXBsZUNhbGxiYWNr
KSwgdGhpcyk7CiAKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgInRleHQt
c2luayIsIG1fdGV4dEFwcFNpbmsuZ2V0KCksIE5VTEwpOworICAgICAgICBnX29iamVjdF9zZXQo
bV9waXBlbGluZS5nZXQoKSwgInRleHQtc2luayIsIG1fdGV4dEFwcFNpbmsuZ2V0KCksIE5VTEwp
OwogICAgIH0KICNlbmRpZgogCi0gICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgInZp
ZGVvLXNpbmsiLCBjcmVhdGVWaWRlb1NpbmsoKSwgImF1ZGlvLXNpbmsiLCBjcmVhdGVBdWRpb1Np
bmsoKSwgbnVsbHB0cik7CisgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ2aWRl
by1zaW5rIiwgY3JlYXRlVmlkZW9TaW5rKCksICJhdWRpby1zaW5rIiwgY3JlYXRlQXVkaW9TaW5r
KCksIG51bGxwdHIpOwogCiAgICAgLy8gT24gMS40LjIgYW5kIG5ld2VyIHdlIHVzZSB0aGUgYXVk
aW8tZmlsdGVyIHByb3BlcnR5IGluc3RlYWQuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVnemlsbGEu
Z25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU3NDggZm9yCkBAIC0yMDczLDcgKzE5NzIsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbigpCiAg
ICAgICAgIGlmICghc2NhbGUpCiAgICAgICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNy
ZWF0ZSBzY2FsZXRlbXBvIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfb2JqZWN0X3Nl
dChtX3BsYXlCaW4uZ2V0KCksICJhdWRpby1maWx0ZXIiLCBzY2FsZSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWZpbHRlciIsIHNj
YWxlLCBudWxscHRyKTsKICAgICB9CiAKICAgICBHUmVmUHRyPEdzdFBhZD4gdmlkZW9TaW5rUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Via2l0VmlkZW9TaW5r
LmdldCgpLCAic2luayIpKTsKQEAgLTIwODMsOCArMTk4Miw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKCkKIAogdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKQogewotICAgIEdzdE1l
c3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZShHU1RfT0JKRUNU
KG1fcGxheUJpbi5nZXQoKSksIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3Bv
c3RfbWVzc2FnZShtX3BsYXlCaW4uZ2V0KCksIG1lc3NhZ2UpOworICAgIEdzdE1lc3NhZ2UqIG1l
c3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZShHU1RfT0JKRUNUKG1fcGlwZWxp
bmUuZ2V0KCkpLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3Nh
Z2UobV9waXBlbGluZS5nZXQoKSwgbWVzc2FnZSk7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpkaWRQYXNzQ09SU0FjY2Vzc0NoZWNrKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCAzOTIyNmQyLi40YzI2ZjBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC00
Nyw4ICs0Nyw2IEBAIHR5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwogdHlwZWRl
ZiBzdHJ1Y3QgX0dzdE1lc3NhZ2UgR3N0TWVzc2FnZTsKIHR5cGVkZWYgc3RydWN0IF9Hc3RFbGVt
ZW50IEdzdEVsZW1lbnQ7CiB0eXBlZGVmIHN0cnVjdCBfR3N0TXBlZ3RzU2VjdGlvbiBHc3RNcGVn
dHNTZWN0aW9uOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7Ci10
eXBlZGVmIHN0cnVjdCBfR3N0R0xEaXNwbGF5IEdzdEdMRGlzcGxheTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC02OCw3ICs2Niw2IEBAIHB1YmxpYzoKICAgICB+TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKCk7CiAKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1l
ZGlhRW5naW5lUmVnaXN0cmFyKTsKLSAgICB2b2lkIGhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3Nh
Z2UqKTsKICAgICBnYm9vbGVhbiBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKICAgICB2b2lk
IGhhbmRsZVBsdWdpbkluc3RhbGxlclJlc3VsdChHc3RJbnN0YWxsUGx1Z2luc1JldHVybik7CiAK
QEAgLTE1OSwxMCArMTU2LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3JlYXRlR1NUUGxheUJp
bigpOwogCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBib29sIGVuc3VyZUdzdEdMQ29udGV4
dCgpOwotI2VuZGlmCi0KICAgICBib29sIGxvYWROZXh0TG9jYXRpb24oKTsKICAgICB2b2lkIG1l
ZGlhTG9jYXRpb25DaGFuZ2VkKEdzdE1lc3NhZ2UqKTsKIApAQCAtMTkzLDcgKzE4Niw2IEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGxh
eUJpbjsKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc291cmNlOwogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdGV4dEFwcFNpbms7CkBAIC0yNTgs
MTAgKzI1MCw2IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgaXNNZWRpYVNvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAg
IEdSZWZQdHI8R3N0R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKLSAgICBHUmVmUHRyPEdzdEdMRGlz
cGxheT4gbV9nbERpc3BsYXk7Ci0jZW5kaWYKIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAppbmRleCBmZTIxYjc1Li43NjMz
NTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuY3BwCkBAIC01MCw2ICs1MCwyOCBAQAogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5o
IgogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorI2luY2x1ZGUgIkdMQ29udGV4dC5o
IgorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L2dsL2dsLmg+
CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworI2lmIFVTRShHTFgpCisjaW5jbHVkZSAi
R0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSA8Z3N0L2dsL3gxMS9nc3RnbGRpc3BsYXlfeDExLmg+
CisjZWxpZiBVU0UoRUdMKQorI2luY2x1ZGUgIkdMQ29udGV4dEVHTC5oIgorI2luY2x1ZGUgPGdz
dC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgorI2VuZGlmCisKKy8vIGdzdGdsYXBpLmggbWF5
IGluY2x1ZGUgZWdscGxhdGZvcm0uaCBhbmQgaXQgaW5jbHVkZXMgWC5oLCB3aGljaAorLy8gZGVm
aW5lcyBOb25lLCBicmVha2luZyBNZWRpYVBsYXllcjo6Tm9uZSBlbnVtCisjaWYgUExBVEZPUk0o
WDExKSAmJiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKKyN1bmRlZiBOb25lCisjZW5kaWYKKyNl
bmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQorCiBHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X21l
ZGlhX3BsYXllcl9kZWJ1Zyk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFf
cGxheWVyX2RlYnVnCiAKQEAgLTg2LDYgKzEwOCwxMSBAQCBzdGF0aWMgdm9pZCBtZWRpYVBsYXll
clByaXZhdGVSZXBhaW50Q2FsbGJhY2soV2ViS2l0VmlkZW9TaW5rKiwgR3N0U2FtcGxlKiBzYW1w
bAogICAgIHBsYXllclByaXZhdGUtPnRyaWdnZXJSZXBhaW50KHNhbXBsZSk7CiB9CiAKK3N0YXRp
YyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZU5lZWRDb250ZXh0TWVzc2FnZUNhbGxiYWNrKEdzdEJ1
cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uq
IHBsYXllcikKK3sKKyAgICBwbGF5ZXItPmhhbmRsZU5lZWRDb250ZXh0TWVzc2FnZShtZXNzYWdl
KTsKK30KKwogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZShNZWRpYVBsYXllciogcGxheWVyKQogICAgIDogbV9wbGF5ZXIocGxh
eWVyKQogICAgICwgbV9mcHNTaW5rKDApCkBAIC0xMjQsMTIgKzE1MSw5MyBAQCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSgp
CiAgICAgICAgIG1fbXV0ZVNpZ25hbEhhbmRsZXIgPSAwOwogICAgIH0KIAorICAgIGlmIChtX3Bp
cGVsaW5lKSB7CisgICAgICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3Bp
cGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgICAg
IEFTU0VSVChidXMpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1
bmMoYnVzLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZh
dGVOZWVkQ29udGV4dE1lc3NhZ2VDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnc3RfYnVzX2Rp
c2FibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKGJ1cy5nZXQoKSk7CisgICAgICAgIG1fcGlwZWxp
bmUuY2xlYXIoKTsKKyAgICB9CisKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmICFVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQo
KS0+cGxhdGZvcm1MYXllcldpbGxCZURlc3Ryb3llZCgpOwogI2VuZGlmCiB9CiAKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0UGlwZWxpbmUoR3N0RWxlbWVudCogcGlw
ZWxpbmUpCit7CisgICAgbV9waXBlbGluZSA9IHBpcGVsaW5lOworCisgICAgR1JlZlB0cjxHc3RC
dXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9w
aXBlbGluZS5nZXQoKSkpKTsKKyAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Np
b24oYnVzLmdldCgpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cy5nZXQoKSwgInN5bmMtbWVz
c2FnZTo6bmVlZC1jb250ZXh0IiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVOZWVkQ29u
dGV4dE1lc3NhZ2VDYWxsYmFjayksIHRoaXMpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmhhbmRsZU5lZWRDb250ZXh0TWVzc2FnZShHc3RNZXNzYWdlKiBtZXNz
YWdlKQoreworI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgY29uc3QgZ2NoYXIqIGNvbnRleHRU
eXBlOworICAgIGdzdF9tZXNzYWdlX3BhcnNlX2NvbnRleHRfdHlwZShtZXNzYWdlLCAmY29udGV4
dFR5cGUpOworCisgICAgaWYgKCFlbnN1cmVHc3RHTENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUsIEdTVF9HTF9ESVNQTEFZX0NPTlRF
WFRfVFlQRSkpIHsKKyAgICAgICAgR3N0Q29udGV4dCogZGlzcGxheUNvbnRleHQgPSBnc3RfY29u
dGV4dF9uZXcoR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFLCBUUlVFKTsKKyAgICAgICAgZ3N0
X2NvbnRleHRfc2V0X2dsX2Rpc3BsYXkoZGlzcGxheUNvbnRleHQsIG1fZ2xEaXNwbGF5LmdldCgp
KTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobWVzc2FnZS0+
c3JjKSwgZGlzcGxheUNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFnX3N0cmNtcDAoY29udGV4dFR5cGUsICJnc3QuZ2wuYXBwX2NvbnRleHQiKSkgeworICAgICAg
ICBHc3RDb250ZXh0KiBhcHBDb250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KCJnc3QuZ2wuYXBwX2Nv
bnRleHQiLCBUUlVFKTsKKyAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY29u
dGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoYXBwQ29udGV4dCk7CisgICAgICAgIGdzdF9zdHJ1Y3R1
cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfR0xfVFlQRV9DT05URVhULCBtX2dsQ29u
dGV4dC5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdT
VF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyksIGFwcENvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCit9CisKKyNpZiBVU0UoR1NUUkVBTUVS
X0dMKQorYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjplbnN1cmVHc3RHTENv
bnRleHQoKQoreworICAgIGlmIChtX2dsQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoIW1fZ2xEaXNwbGF5KSB7CisjaWYgUExBVEZPUk0oWDExKQorICAgICAgICBEaXNw
bGF5KiBkaXNwbGF5ID0gR0xDb250ZXh0OjpzaGFyZWRYMTFEaXNwbGF5KCk7CisgICAgICAgIG1f
Z2xEaXNwbGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfeDExX25ld193aXRoX2Rp
c3BsYXkoZGlzcGxheSkpOworI2VsaWYgUExBVEZPUk0oV0FZTEFORCkKKyAgICAgICAgRUdMRGlz
cGxheSBkaXNwbGF5ID0gV2F5bGFuZERpc3BsYXk6Omluc3RhbmNlKCktPmVnbERpc3BsYXkoKTsK
KyAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElTUExBWShnc3RfZ2xfZGlzcGxheV9lZ2xf
bmV3X3dpdGhfZWdsX2Rpc3BsYXkoZGlzcGxheSkpOworI2VuZGlmCisgICAgfQorCisgICAgR0xD
b250ZXh0KiB3ZWJraXRDb250ZXh0ID0gR0xDb250ZXh0OjpzaGFyaW5nQ29udGV4dCgpOworICAg
IC8vIEVHTCBhbmQgR0xYIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIG5vIG5lZWQgZm9yIGlmZGVm
cyBoZXJlLgorICAgIEdzdEdMUGxhdGZvcm0gZ2xQbGF0Zm9ybSA9IHdlYmtpdENvbnRleHQtPmlz
RUdMQ29udGV4dCgpID8gR1NUX0dMX1BMQVRGT1JNX0VHTCA6IEdTVF9HTF9QTEFURk9STV9HTFg7
CisKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJ
X0dMRVMyOworI2VsaWYgVVNFKE9QRU5HTCkKKyAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9B
UElfT1BFTkdMOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorCisg
ICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBjb250ZXh0SGFuZGxlID0gd2Via2l0Q29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0SGFuZGxlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBtX2dsQ29udGV4dCA9IGdzdF9nbF9jb250ZXh0X25ld193cmFw
cGVkKG1fZ2xEaXNwbGF5LmdldCgpLCByZWludGVycHJldF9jYXN0PGd1aW50cHRyPihjb250ZXh0
SGFuZGxlKSwgZ2xQbGF0Zm9ybSwgZ2xBUEkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5k
aWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKKwogLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdmlk
ZW8KIEZsb2F0U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuYXR1cmFsU2l6
ZSgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2UuaAppbmRleCAwYmMwNWE4Li4zM2M4MmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKQEAgLTQwLDcgKzQwLDggQEAgdHlw
ZWRlZiBzdHJ1Y3QgX0dzdFNhbXBsZSBHc3RTYW1wbGU7CiB0eXBlZGVmIHN0cnVjdCBfR3N0RWxl
bWVudCBHc3RFbGVtZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dzdE1lc3NhZ2UgR3N0TWVzc2FnZTsK
IHR5cGVkZWYgc3RydWN0IF9Hc3RTdHJlYW1Wb2x1bWUgR3N0U3RyZWFtVm9sdW1lOwotdHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFZpZGVvU2luayBXZWJLaXRWaWRlb1Npbms7Cit0eXBlZGVmIHN0cnVj
dCBfR3N0R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RHTERpc3Bs
YXkgR3N0R0xEaXNwbGF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY0LDYgKzY1LDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIHZvbHVtZUNoYW5nZWQoKTsKICAgICB2b2lkIG5vdGlmeVBs
YXllck9mVm9sdW1lQ2hhbmdlKCk7CiAKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorICAgIGJvb2wg
ZW5zdXJlR3N0R0xDb250ZXh0KCk7CisjZW5kaWYKKyAgICB2b2lkIGhhbmRsZU5lZWRDb250ZXh0
TWVzc2FnZShHc3RNZXNzYWdlKik7CisKICAgICBib29sIHN1cHBvcnRzTXV0aW5nKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZvaWQgc2V0TXV0ZWQoYm9vbCk7CiAgICAgYm9vbCBtdXRl
ZCgpIGNvbnN0OwpAQCAtMTE1LDcgKzEyMSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBH
c3RFbGVtZW50KiBjcmVhdGVBdWRpb1NpbmsoKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBH
c3RFbGVtZW50KiBhdWRpb1NpbmsoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKKyAgICB2b2lkIHNl
dFBpcGVsaW5lKEdzdEVsZW1lbnQqKTsKKwogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKKyAg
ICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGlwZWxpbmU7CiAgICAgR1JlZlB0cjxHc3RTdHJlYW1W
b2x1bWU+IG1fdm9sdW1lRWxlbWVudDsKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fd2Via2l0
VmlkZW9TaW5rOwogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9mcHNTaW5rOwpAQCAtMTMzLDYg
KzE0MiwxMCBAQCBwcm90ZWN0ZWQ6CiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKSAmJiAhVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdXBk
YXRlVGV4dHVyZShUZXh0dXJlTWFwcGVyKik7CiAjZW5kaWYKKyNpZiBVU0UoR1NUUkVBTUVSX0dM
KQorICAgIEdSZWZQdHI8R3N0R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKKyAgICBHUmVmUHRyPEdz
dEdMRGlzcGxheT4gbV9nbERpc3BsYXk7CisjZW5kaWYKIH07CiB9CiAKLS0gCjIuMS40
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249805</attachid>
            <date>2015-03-31 01:09:39 -0700</date>
            <delta_ts>2015-04-01 02:33:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>41696</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBjMjRhNDBhMzJiZTc1NDI0MmNlOWUxODRjMzhjOWNiNThhOTRiOTJiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDMwIE1hciAyMDE1IDE3OjU0OjQ0ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgNTYgKysrKysKIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcCAgICAgIHwgMjUxICsrKysrKy0tLS0tLS0tLS0tLS0tLQogLi4uL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCAgICAgICAgfCAgMTIgLQogLi4uL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcCAgfCAxMTAgKysrKysrKysrCiAu
Li4vZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaCAgICB8ICAxNSAr
LQogNSBmaWxlcyBjaGFuZ2VkLCAyNTUgaW5zZXJ0aW9ucygrKSwgMTg5IGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2N2UyODcwLi5mOTYwYmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjEg
QEAKIDIwMTUtMDMtMzAgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgog
CisgICAgICAgIFtHU3RyZWFtZXJdIE1vdmUgc3luY2hyb25vdXMgbWVzc2FnZSBoYW5kbGVyIHRv
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmVkIHRoZSBwaXBlbGluZSBwb2ludGVyIHRvIHRo
ZSBiYXNlIGNsYXNzLCBzdWItY2xhc3NlcyBzaG91bGQKKyAgICAgICAgbm93IGludm9rZSBzZXRQ
aXBlbGluZSgpIHdoZW4gbG9hZGluZyBhIHJlc291cmNlLiBUaGUgYmFzZSBjbGFzcworICAgICAg
ICBub3cgdGFrZXMgY2FyZSBvZiBjb25maWd1cmluZyB0aGUgR0wgc2hhcmVkIGNvbnRleHQsIHRo
aXMgaXMgbW9yZQorICAgICAgICBsb2dpY2FsIGJlY2F1c2UgdmlkZW8gcmVuZGVyaW5nIGlzIGFs
c28gbWFuYWdlZCBieSB0aGlzIGNsYXNzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBp
cyBvbmx5IGEgY29kZSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBs
YXliYWNrUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjaGFuZ2VQaXBlbGluZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhdXNlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW8p
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQ
bGF5ZXJPZkF1ZGlvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bm90aWZ5UGxheWVyT2ZUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmJ1ZmZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNh
bmNlbExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojphc3luY1N0YXRlQ2hhbmdlRG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmxvYWROZXh0TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjYWNoZUR1cmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0RG93bmxvYWRCdWZmZXJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRp
b1NpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
cmVhdGVHU1RQbGF5QmluKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c2ltdWxhdGVBdWRpb0ludGVycnVwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpt
ZWRpYVBsYXllclByaXZhdGVTeW5jTWVzc2FnZUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2Up
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjplbnN1cmVHc3RHTENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptZWRpYVBsYXllclByaXZhdGVOZWVkQ29udGV4dE1l
c3NhZ2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpzZXRQaXBlbGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVO
ZWVkQ29udGV4dE1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6ZW5zdXJlR3N0R0xDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oOgorCisy
MDE1LTAzLTMwICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKwogICAg
ICAgICBbR1N0cmVhbWVyXSBNb3JlIEdMIHNoYXJlZCBjb250ZXh0IGZpeGVzCiAgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMyMTYKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCAwNWMxZDNhLi5i
MzUzOWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcApAQCAtNjgsMjggKzY4LDYgQEAKICNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyR1N0
cmVhbWVyLmgiCiAjZW5kaWYKIAotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi0jaW5jbHVkZSAiR0xD
b250ZXh0LmgiCi0KLSNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKLSNpbmNsdWRlIDxnc3Qv
Z2wvZ2wuaD4KLSN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQotCi0jaWYgVVNFKEdMWCkKLSNp
bmNsdWRlICJHTENvbnRleHRHTFguaCIKLSNpbmNsdWRlIDxnc3QvZ2wveDExL2dzdGdsZGlzcGxh
eV94MTEuaD4KLSNlbGlmIFVTRShFR0wpCi0jaW5jbHVkZSAiR0xDb250ZXh0RUdMLmgiCi0jaW5j
bHVkZSA8Z3N0L2dsL2VnbC9nc3RnbGRpc3BsYXlfZWdsLmg+Ci0jZW5kaWYKLQotLy8gZ3N0Z2xh
cGkuaCBtYXkgaW5jbHVkZSBlZ2xwbGF0Zm9ybS5oIGFuZCBpdCBpbmNsdWRlcyBYLmgsIHdoaWNo
Ci0vLyBkZWZpbmVzIE5vbmUsIGJyZWFraW5nIE1lZGlhUGxheWVyOjpOb25lIGVudW0KLSNpZiBQ
TEFURk9STShYMTEpICYmIEdTVF9HTF9IQVZFX1BMQVRGT1JNX0VHTAotI3VuZGVmIE5vbmUKLSNl
bmRpZgotI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCi0KIC8vIE1heCBpbnRlcnZhbCBpbiBz
ZWNvbmRzIHRvIHN0YXkgaW4gdGhlIFJFQURZIHN0YXRlIG9uIG1hbnVhbAogLy8gc3RhdGUgY2hh
bmdlIHJlcXVlc3RzLgogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdSZWFkeVN0YXRlVGltZXJJbnRl
cnZhbCA9IDYwOwpAQCAtMTA2LDExICs4NCw2IEBAIHN0YXRpYyBnYm9vbGVhbiBtZWRpYVBsYXll
clByaXZhdGVNZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwKICAg
ICByZXR1cm4gcGxheWVyLT5oYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi1zdGF0aWMgdm9p
ZCBtZWRpYVBsYXllclByaXZhdGVTeW5jTWVzc2FnZUNhbGxiYWNrKEdzdEJ1cyosIEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQotewotICAg
IHBsYXllci0+aGFuZGxlU3luY01lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIG1l
ZGlhUGxheWVyUHJpdmF0ZVNvdXJjZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFtU3Bl
YyosIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciogcGxheWVyKQogewogICAgIHBsYXllci0+
c291cmNlQ2hhbmdlZCgpOwpAQCAtMjczLDIyICsyNDYsMjEgQEAgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCkKIAogICAgIG1fcmVhZHlU
aW1lckhhbmRsZXIuY2FuY2VsKCk7CiAKLSAgICBpZiAobV9wbGF5QmluKSB7Ci0gICAgICAgIEdS
ZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJ
UEVMSU5FKG1fcGxheUJpbi5nZXQoKSkpKTsKKyAgICBpZiAobV9waXBlbGluZSkgeworICAgICAg
ICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdT
VF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOwogICAgICAgICBBU1NFUlQoYnVzKTsKICAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKGJ1cy5nZXQoKSwgcmVp
bnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQbGF5ZXJQcml2YXRlTWVzc2FnZUNhbGxiYWNr
KSwgdGhpcyk7CiAgICAgICAgIGdzdF9idXNfcmVtb3ZlX3NpZ25hbF93YXRjaChidXMuZ2V0KCkp
OwogCi0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3BsYXlC
aW4uZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlhUGxheWVyUHJpdmF0ZVNv
dXJjZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2Z1bmMobV9wbGF5QmluLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2lu
dGVyPihtZWRpYVBsYXllclByaXZhdGVWaWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAg
ICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMobV9wbGF5QmluLmdldCgp
LCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5n
ZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X2J5X2Z1bmMobV9waXBlbGluZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVk
aWFQbGF5ZXJQcml2YXRlU291cmNlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3BpcGVsaW5lLmdldCgpLCByZWlu
dGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVWaWRlb0NoYW5nZWRDYWxs
YmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1
bmMobV9waXBlbGluZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9pbnRlcj4obWVkaWFQbGF5
ZXJQcml2YXRlQXVkaW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCi0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3Bs
YXlCaW4uZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KG1lZGlhUGxheWVyUHJpdmF0
ZU5ld1RleHRTYW1wbGVDYWxsYmFjayksIHRoaXMpOwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMobV9wbGF5QmluLmdldCgpLCByZWludGVycHJldF9jYXN0PGdw
b2ludGVyPihtZWRpYVBsYXllclByaXZhdGVUZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX3BpcGVsaW5lLmdl
dCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZhdGVOZXdUZXh0
U2FtcGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKG1fcGlwZWxpbmUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+
KG1lZGlhUGxheWVyUHJpdmF0ZVRleHRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICNlbmRpZgog
Ci0gICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksIEdTVF9TVEFU
RV9OVUxMKTsKLSAgICAgICAgbV9wbGF5QmluLmNsZWFyKCk7CisgICAgICAgIGdzdF9lbGVtZW50
X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CiAgICAgfQogCiAg
ICAgaWYgKG1fd2Via2l0VmlkZW9TaW5rKSB7CkBAIC0zMTEsMTMgKzI4MywxMyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykK
ICAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCiAgICAgICAgIGNsZWFuVVJMID0gY2xlYW5VUkwu
c3Vic3RyaW5nKDAsIHVybC5wYXRoRW5kKCkpOwogCi0gICAgaWYgKCFtX3BsYXlCaW4pCisgICAg
aWYgKCFtX3BpcGVsaW5lKQogICAgICAgICBjcmVhdGVHU1RQbGF5QmluKCk7CiAKLSAgICBBU1NF
UlQobV9wbGF5QmluKTsKKyAgICBBU1NFUlQobV9waXBlbGluZSk7CiAKICAgICBtX3VybCA9IFVS
TChVUkwoKSwgY2xlYW5VUkwpOwotICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4uZ2V0KCksICJ1
cmkiLCBjbGVhblVSTC51dGY4KCkuZGF0YSgpLCBOVUxMKTsKKyAgICBnX29iamVjdF9zZXQobV9w
aXBlbGluZS5nZXQoKSwgInVyaSIsIGNsZWFuVVJMLnV0ZjgoKS5kYXRhKCksIE5VTEwpOwogCiAg
ICAgSU5GT19NRURJQV9NRVNTQUdFKCJMb2FkICVzIiwgY2xlYW5VUkwudXRmOCgpLmRhdGEoKSk7
CiAKQEAgLTM4NCw3ICszNTYsNyBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OnBsYXliYWNrUG9zaXRpb24oKSBjb25zdAogICAgIC8vIFBvc2l0aW9uIGlzIG9ubHkgYXZhaWxh
YmxlIGlmIG5vIGFzeW5jIHN0YXRlIGNoYW5nZSBpcyBnb2luZyBvbiBhbmQgdGhlIHN0YXRlIGlz
IGVpdGhlciBwYXVzZWQgb3IgcGxheWluZy4KICAgICBnaW50NjQgcG9zaXRpb24gPSBHU1RfQ0xP
Q0tfVElNRV9OT05FOwogICAgIEdzdFF1ZXJ5KiBxdWVyeT0gZ3N0X3F1ZXJ5X25ld19wb3NpdGlv
bihHU1RfRk9STUFUX1RJTUUpOwotICAgIGlmIChnc3RfZWxlbWVudF9xdWVyeShtX3BsYXlCaW4u
Z2V0KCksIHF1ZXJ5KSkKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQo
KSwgcXVlcnkpKQogICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVlcnksIDAsICZw
b3NpdGlvbik7CiAKICAgICBmbG9hdCByZXN1bHQgPSAwLjBmOwpAQCAtNDAyLDEyICszNzQsMTIg
QEAgZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5YmFja1Bvc2l0aW9uKCkg
Y29uc3QKIAogYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5l
U3RhdGUoR3N0U3RhdGUgbmV3U3RhdGUpCiB7Ci0gICAgQVNTRVJUKG1fcGxheUJpbik7CisgICAg
QVNTRVJUKG1fcGlwZWxpbmUpOwogCiAgICAgR3N0U3RhdGUgY3VycmVudFN0YXRlOwogICAgIEdz
dFN0YXRlIHBlbmRpbmc7CiAKLSAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9wbGF5QmluLmdl
dCgpLCAmY3VycmVudFN0YXRlLCAmcGVuZGluZywgMCk7CisgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0
YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZjdXJyZW50U3RhdGUsICZwZW5kaW5nLCAwKTsKICAgICBp
ZiAoY3VycmVudFN0YXRlID09IG5ld1N0YXRlIHx8IHBlbmRpbmcgPT0gbmV3U3RhdGUpIHsKICAg
ICAgICAgTE9HX01FRElBX01FU1NBR0UoIlJlamVjdGVkIHN0YXRlIGNoYW5nZSB0byAlcyBmcm9t
ICVzIHdpdGggJXMgcGVuZGluZyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKG5ld1N0YXRl
KSwKICAgICAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1cnJlbnRTdGF0ZSks
IGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKQEAgLTQxNyw3ICszODksNyBA
QCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y2hhbmdlUGlwZWxpbmVTdGF0ZShH
c3RTdGF0ZSBuZXdTdGF0ZSkKICAgICBMT0dfTUVESUFfTUVTU0FHRSgiQ2hhbmdpbmcgc3RhdGUg
Y2hhbmdlIHRvICVzIGZyb20gJXMgd2l0aCAlcyBwZW5kaW5nIiwgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUobmV3U3RhdGUpLAogICAgICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShj
dXJyZW50U3RhdGUpLCBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShwZW5kaW5nKSk7CiAKLSAg
ICBHc3RTdGF0ZUNoYW5nZVJldHVybiBzZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BsYXlCaW4uZ2V0KCksIG5ld1N0YXRlKTsKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVy
biBzZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgp
LCBuZXdTdGF0ZSk7CiAgICAgR3N0U3RhdGUgcGF1c2VkT3JQbGF5aW5nID0gbmV3U3RhdGUgPT0g
R1NUX1NUQVRFX1BMQVlJTkcgPyBHU1RfU1RBVEVfUEFVU0VEIDogR1NUX1NUQVRFX1BMQVlJTkc7
CiAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBwYXVzZWRPclBsYXlpbmcgJiYgc2V0U3RhdGVSZXN1
bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTQ2OCw3ICs0NDAsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1
c2UoKQogewogICAgIG1fcGxheWJhY2tSYXRlUGF1c2UgPSBmYWxzZTsKICAgICBHc3RTdGF0ZSBj
dXJyZW50U3RhdGUsIHBlbmRpbmdTdGF0ZTsKLSAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9w
bGF5QmluLmdldCgpLCAmY3VycmVudFN0YXRlLCAmcGVuZGluZ1N0YXRlLCAwKTsKKyAgICBnc3Rf
ZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJmN1cnJlbnRTdGF0ZSwgJnBlbmRp
bmdTdGF0ZSwgMCk7CiAgICAgaWYgKGN1cnJlbnRTdGF0ZSA8IEdTVF9TVEFURV9QQVVTRUQgJiYg
cGVuZGluZ1N0YXRlIDw9IEdTVF9TVEFURV9QQVVTRUQpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NDgwLDcgKzQ1Miw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZSgp
CiAKIGZsb2F0IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVyYXRpb24oKSBjb25zdAog
ewotICAgIGlmICghbV9wbGF5QmluKQorICAgIGlmICghbV9waXBlbGluZSkKICAgICAgICAgcmV0
dXJuIDAuMGY7CiAKICAgICBpZiAobV9lcnJvck9jY3VyZWQpCkBAIC00OTYsNyArNDY4LDcgQEAg
ZmxvYXQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbigpIGNvbnN0CiAgICAg
R3N0Rm9ybWF0IHRpbWVGb3JtYXQgPSBHU1RfRk9STUFUX1RJTUU7CiAgICAgZ2ludDY0IHRpbWVM
ZW5ndGggPSAwOwogCi0gICAgYm9vbCBmYWlsdXJlID0gIWdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0
aW9uKG1fcGxheUJpbi5nZXQoKSwgdGltZUZvcm1hdCwgJnRpbWVMZW5ndGgpIHx8IHN0YXRpY19j
YXN0PGd1aW50NjQ+KHRpbWVMZW5ndGgpID09IEdTVF9DTE9DS19USU1FX05PTkU7CisgICAgYm9v
bCBmYWlsdXJlID0gIWdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fcGlwZWxpbmUuZ2V0KCks
IHRpbWVGb3JtYXQsICZ0aW1lTGVuZ3RoKSB8fCBzdGF0aWNfY2FzdDxndWludDY0Pih0aW1lTGVu
Z3RoKSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FOwogICAgIGlmIChmYWlsdXJlKSB7CiAgICAgICAg
IExPR19NRURJQV9NRVNTQUdFKCJUaW1lIGR1cmF0aW9uIHF1ZXJ5IGZhaWxlZCBmb3IgJXMiLCBt
X3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIG51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsKQEAgLTUxMSw3ICs0ODMsNyBAQCBmbG9hdCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uKCkgY29uc3QKIAogZmxvYXQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpjdXJyZW50VGltZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3Bs
YXlCaW4pCisgICAgaWYgKCFtX3BpcGVsaW5lKQogICAgICAgICByZXR1cm4gMC4wZjsKIAogICAg
IGlmIChtX2Vycm9yT2NjdXJlZCkKQEAgLTUzMyw3ICs1MDUsNyBAQCBmbG9hdCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmN1cnJlbnRUaW1lKCkgY29uc3QKIAogdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnNlZWsoZmxvYXQgdGltZSkKIHsKLSAgICBpZiAoIW1fcGxheUJp
bikKKyAgICBpZiAoIW1fcGlwZWxpbmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2Vy
cm9yT2NjdXJlZCkKQEAgLTU2MCw3ICs1MzIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6c2VlayhmbG9hdCB0aW1lKQogICAgIH0KIAogICAgIEdzdFN0YXRlIHN0YXRlOwot
ICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgJnN0YXRlLCAwLCAwKTsKKyAgICBHc3RTdGF0ZUNoYW5n
ZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5l
LmdldCgpLCAmc3RhdGUsIDAsIDApOwogICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RB
VEVfQ0hBTkdFX0ZBSUxVUkUgfHwgZ2V0U3RhdGVSZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9O
T19QUkVST0xMKSB7CiAgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJbU2Vla10gY2Fubm90IHNl
ZWssIGN1cnJlbnQgc3RhdGUgY2hhbmdlIGlzICVzIiwgZ3N0X2VsZW1lbnRfc3RhdGVfY2hhbmdl
X3JldHVybl9nZXRfbmFtZShnZXRTdGF0ZVJlc3VsdCkpOwogICAgICAgICByZXR1cm47CkBAIC02
MTEsNyArNTgzLDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmRvU2Vlayhn
aW50NjQgcG9zaXRpb24sIGZsb2F0IHJhdGUsIEdzdFNlZWtGbGEKICAgICBpZiAoIXJhdGUpCiAg
ICAgICAgIHJhdGUgPSAxLjA7CiAKLSAgICByZXR1cm4gZ3N0X2VsZW1lbnRfc2VlayhtX3BsYXlC
aW4uZ2V0KCksIHJhdGUsIEdTVF9GT1JNQVRfVElNRSwgc2Vla1R5cGUsCisgICAgcmV0dXJuIGdz
dF9lbGVtZW50X3NlZWsobV9waXBlbGluZS5nZXQoKSwgcmF0ZSwgR1NUX0ZPUk1BVF9USU1FLCBz
ZWVrVHlwZSwKICAgICAgICAgR1NUX1NFRUtfVFlQRV9TRVQsIHN0YXJ0VGltZSwgR1NUX1NFRUtf
VFlQRV9TRVQsIGVuZFRpbWUpOwogfQogCkBAIC02MzcsNyArNjA5LDcgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCiAKICAgICBJTkZPX01F
RElBX01FU1NBR0UoIk5lZWQgdG8gbXV0ZSBhdWRpbz86ICVkIiwgKGludCkgbXV0ZSk7CiAgICAg
aWYgKGRvU2VlayhjdXJyZW50UG9zaXRpb24sIG1fcGxheWJhY2tSYXRlLCBzdGF0aWNfY2FzdDxH
c3RTZWVrRmxhZ3M+KEdTVF9TRUVLX0ZMQUdfRkxVU0gpKSkgewotICAgICAgICBnX29iamVjdF9z
ZXQobV9wbGF5QmluLmdldCgpLCAibXV0ZSIsIG11dGUsIE5VTEwpOworICAgICAgICBnX29iamVj
dF9zZXQobV9waXBlbGluZS5nZXQoKSwgIm11dGUiLCBtdXRlLCBOVUxMKTsKICAgICAgICAgbV9s
YXN0UGxheWJhY2tSYXRlID0gbV9wbGF5YmFja1JhdGU7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
bV9wbGF5YmFja1JhdGUgPSBtX2xhc3RQbGF5YmFja1JhdGU7CkBAIC02NDgsNyArNjIwLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVBsYXliYWNrUmF0ZSgpCiAg
ICAgICAgIEdzdFN0YXRlIHN0YXRlOwogICAgICAgICBHc3RTdGF0ZSBwZW5kaW5nOwogCi0gICAg
ICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BsYXlCaW4uZ2V0KCksICZzdGF0ZSwgJnBlbmRp
bmcsIDApOworICAgICAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwg
JnN0YXRlLCAmcGVuZGluZywgMCk7CiAgICAgICAgIGlmIChzdGF0ZSAhPSBHU1RfU1RBVEVfUExB
WUlORyAmJiBwZW5kaW5nICE9IEdTVF9TVEFURV9QTEFZSU5HKQogICAgICAgICAgICAgY2hhbmdl
UGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUExBWUlORyk7CiAgICAgICAgIG1fcGxheWJhY2tSYXRl
UGF1c2UgPSBmYWxzZTsKQEAgLTY2OSw3ICs2NDEsNyBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6cGF1c2VkKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
R3N0U3RhdGUgc3RhdGU7Ci0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGxheUJpbi5nZXQo
KSwgJnN0YXRlLCAwLCAwKTsKKyAgICBnc3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5n
ZXQoKSwgJnN0YXRlLCAwLCAwKTsKICAgICByZXR1cm4gc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNF
RDsKIH0KIApAQCAtNjkxLDE1ICs2NjMsMTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnZpZGVvQ2Fwc0NoYW5nZWQoKQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6Om5vdGlmeVBsYXllck9mVmlkZW8oKQogewogICAgIGdpbnQgbnVtVHJhY2tzID0gMDsKLSAg
ICBpZiAobV9wbGF5QmluKQotICAgICAgICBnX29iamVjdF9nZXQobV9wbGF5QmluLmdldCgpLCAi
bi12aWRlbyIsICZudW1UcmFja3MsIE5VTEwpOworICAgIGlmIChtX3BpcGVsaW5lKQorICAgICAg
ICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwgIm4tdmlkZW8iLCAmbnVtVHJhY2tzLCBO
VUxMKTsKIAogICAgIG1faGFzVmlkZW8gPSBudW1UcmFja3MgPiAwOwogCiAjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQogICAgIGZvciAoZ2ludCBpID0gMDsgaSA8IG51bVRyYWNrczsgKytpKSB7CiAg
ICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShtX3BsYXlCaW4uZ2V0KCksICJnZXQtdmlkZW8tcGFkIiwgaSwgJnBhZC5vdXRQdHIoKSwgTlVM
TCk7CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0
LXZpZGVvLXBhZCIsIGksICZwYWQub3V0UHRyKCksIE5VTEwpOwogICAgICAgICBBU1NFUlQocGFk
KTsKIAogICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fdmlkZW9UcmFja3Muc2l6
ZSgpKSkgewpAQCAtNzA5LDcgKzY4MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJh
Y2sgPSBWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1fcGxheUJpbiwgaSwgcGFk
KTsKKyAgICAgICAgUmVmUHRyPFZpZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyPiB0cmFjayA9IFZp
ZGVvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUobV9waXBlbGluZSwgaSwgcGFkKTsKICAg
ICAgICAgbV92aWRlb1RyYWNrcy5hcHBlbmQodHJhY2spOwogICAgICAgICBtX3BsYXllci0+YWRk
VmlkZW9UcmFjayh0cmFjay5yZWxlYXNlKCkpOwogICAgIH0KQEAgLTczOSwxNSArNzExLDE1IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWQoKQogdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5vdGlmeVBsYXllck9mQXVkaW8oKQogewogICAg
IGdpbnQgbnVtVHJhY2tzID0gMDsKLSAgICBpZiAobV9wbGF5QmluKQotICAgICAgICBnX29iamVj
dF9nZXQobV9wbGF5QmluLmdldCgpLCAibi1hdWRpbyIsICZudW1UcmFja3MsIE5VTEwpOworICAg
IGlmIChtX3BpcGVsaW5lKQorICAgICAgICBnX29iamVjdF9nZXQobV9waXBlbGluZS5nZXQoKSwg
Im4tYXVkaW8iLCAmbnVtVHJhY2tzLCBOVUxMKTsKIAogICAgIG1faGFzQXVkaW8gPSBudW1UcmFj
a3MgPiAwOwogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGZvciAoZ2ludCBpID0gMDsg
aSA8IG51bVRyYWNrczsgKytpKSB7CiAgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBwYWQ7Ci0gICAg
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3BsYXlCaW4uZ2V0KCksICJnZXQtYXVkaW8tcGFk
IiwgaSwgJnBhZC5vdXRQdHIoKSwgTlVMTCk7CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShtX3BpcGVsaW5lLmdldCgpLCAiZ2V0LWF1ZGlvLXBhZCIsIGksICZwYWQub3V0UHRyKCksIE5V
TEwpOwogICAgICAgICBBU1NFUlQocGFkKTsKIAogICAgICAgICBpZiAoaSA8IHN0YXRpY19jYXN0
PGdpbnQ+KG1fYXVkaW9UcmFja3Muc2l6ZSgpKSkgewpAQCAtNzU3LDcgKzcyOSw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZkF1ZGlvKCkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxBdWRpb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6
Y3JlYXRlKG1fcGxheUJpbiwgaSwgcGFkKTsKKyAgICAgICAgUmVmUHRyPEF1ZGlvVHJhY2tQcml2
YXRlR1N0cmVhbWVyPiB0cmFjayA9IEF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGUo
bV9waXBlbGluZSwgaSwgcGFkKTsKICAgICAgICAgbV9hdWRpb1RyYWNrcy5pbnNlcnQoaSwgdHJh
Y2spOwogICAgICAgICBtX3BsYXllci0+YWRkQXVkaW9UcmFjayh0cmFjay5yZWxlYXNlKCkpOwog
ICAgIH0KQEAgLTc4MiwxMiArNzU0LDEyIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjp0ZXh0Q2hhbmdlZCgpCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90
aWZ5UGxheWVyT2ZUZXh0KCkKIHsKICAgICBnaW50IG51bVRyYWNrcyA9IDA7Ci0gICAgaWYgKG1f
cGxheUJpbikKLSAgICAgICAgZ19vYmplY3RfZ2V0KG1fcGxheUJpbi5nZXQoKSwgIm4tdGV4dCIs
ICZudW1UcmFja3MsIE5VTEwpOworICAgIGlmIChtX3BpcGVsaW5lKQorICAgICAgICBnX29iamVj
dF9nZXQobV9waXBlbGluZS5nZXQoKSwgIm4tdGV4dCIsICZudW1UcmFja3MsIE5VTEwpOwogCiAg
ICAgZm9yIChnaW50IGkgPSAwOyBpIDwgbnVtVHJhY2tzOyArK2kpIHsKICAgICAgICAgR1JlZlB0
cjxHc3RQYWQ+IHBhZDsKLSAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fcGxheUJpbi5n
ZXQoKSwgImdldC10ZXh0LXBhZCIsIGksICZwYWQub3V0UHRyKCksIE5VTEwpOworICAgICAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV9waXBlbGluZS5nZXQoKSwgImdldC10ZXh0LXBhZCIsIGks
ICZwYWQub3V0UHRyKCksIE5VTEwpOwogICAgICAgICBBU1NFUlQocGFkKTsKIAogICAgICAgICBp
ZiAoaSA8IHN0YXRpY19jYXN0PGdpbnQ+KG1fdGV4dFRyYWNrcy5zaXplKCkpKSB7CkBAIC04Njgs
NyArODQwLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnNldFJhdGUoZmxv
YXQgcmF0ZSkKICAgICBtX3BsYXliYWNrUmF0ZSA9IHJhdGU7CiAgICAgbV9jaGFuZ2luZ1JhdGUg
PSB0cnVlOwogCi0gICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgJnN0
YXRlLCAmcGVuZGluZywgMCk7CisgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUu
Z2V0KCksICZzdGF0ZSwgJnBlbmRpbmcsIDApOwogCiAgICAgaWYgKCFyYXRlKSB7CiAgICAgICAg
IG1fY2hhbmdpbmdSYXRlID0gZmFsc2U7CkBAIC05MDcsNyArODc5LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpidWZm
ZXJlZCgpIGNvbnMKIAogICAgIEdzdFF1ZXJ5KiBxdWVyeSA9IGdzdF9xdWVyeV9uZXdfYnVmZmVy
aW5nKEdTVF9GT1JNQVRfUEVSQ0VOVCk7CiAKLSAgICBpZiAoIWdzdF9lbGVtZW50X3F1ZXJ5KG1f
cGxheUJpbi5nZXQoKSwgcXVlcnkpKSB7CisgICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3Bp
cGVsaW5lLmdldCgpLCBxdWVyeSkpIHsKICAgICAgICAgZ3N0X3F1ZXJ5X3VucmVmKHF1ZXJ5KTsK
ICAgICAgICAgcmV0dXJuIHRpbWVSYW5nZXM7CiAgICAgfQpAQCAtOTMxLDc3ICs5MDMsNiBAQCBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmJ1ZmZlcmVkKCkgY29ucwogICAgIHJldHVybiB0aW1lUmFuZ2VzOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3NhZ2UoR3N0TWVzc2Fn
ZSogbWVzc2FnZSkKLXsKLSAgICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpIHsK
LSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGNhc2UgR1NUX01FU1NBR0VfTkVFRF9DT05URVhU
OiB7Ci0gICAgICAgIGNvbnN0IGdjaGFyKiBjb250ZXh0VHlwZTsKLSAgICAgICAgZ3N0X21lc3Nh
Z2VfcGFyc2VfY29udGV4dF90eXBlKG1lc3NhZ2UsICZjb250ZXh0VHlwZSk7Ci0KLSAgICAgICAg
aWYgKCFlbnN1cmVHc3RHTENvbnRleHQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBF
KSkgewotICAgICAgICAgICAgR3N0Q29udGV4dCogZGlzcGxheUNvbnRleHQgPSBnc3RfY29udGV4
dF9uZXcoR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFLCBUUlVFKTsKLSAgICAgICAgICAgIGdz
dF9jb250ZXh0X3NldF9nbF9kaXNwbGF5KGRpc3BsYXlDb250ZXh0LCBtX2dsRGlzcGxheS5nZXQo
KSk7Ci0gICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfY29udGV4dChHU1RfRUxFTUVOVChtZXNz
YWdlLT5zcmMpLCBkaXNwbGF5Q29udGV4dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWdfc3RyY21wMChjb250ZXh0VHlwZSwgImdzdC5nbC5hcHBfY29u
dGV4dCIpKSB7Ci0gICAgICAgICAgICBHc3RDb250ZXh0KiBhcHBDb250ZXh0ID0gZ3N0X2NvbnRl
eHRfbmV3KCJnc3QuZ2wuYXBwX2NvbnRleHQiLCBUUlVFKTsKLSAgICAgICAgICAgIEdzdFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ3N0X2NvbnRleHRfd3JpdGFibGVfc3RydWN0dXJlKGFwcENvbnRl
eHQpOwotICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJlLCAiY29udGV4dCIs
IEdTVF9HTF9UWVBFX0NPTlRFWFQsIG1fZ2xDb250ZXh0LmdldCgpLCBudWxscHRyKTsKLSAgICAg
ICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdTVF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyks
IGFwcENvbnRleHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotI2lmIFVTRShHU1RSRUFNRVJfR0wpCi1ib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5zdXJlR3N0R0xDb250ZXh0KCkKLXsKLSAgICBp
ZiAobV9nbENvbnRleHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFtX2dsRGlz
cGxheSkgewotI2lmIFBMQVRGT1JNKFgxMSkKLSAgICAgICAgRGlzcGxheSogZGlzcGxheSA9IEdM
Q29udGV4dDo6c2hhcmVkWDExRGlzcGxheSgpOwotICAgICAgICBtX2dsRGlzcGxheSA9IEdTVF9H
TF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X3gxMV9uZXdfd2l0aF9kaXNwbGF5KGRpc3BsYXkpKTsK
LSNlbGlmIFBMQVRGT1JNKFdBWUxBTkQpCi0gICAgICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IFdh
eWxhbmREaXNwbGF5OjppbnN0YW5jZSgpLT5lZ2xEaXNwbGF5KCk7Ci0gICAgICAgIG1fZ2xEaXNw
bGF5ID0gR1NUX0dMX0RJU1BMQVkoZ3N0X2dsX2Rpc3BsYXlfZWdsX25ld193aXRoX2VnbF9kaXNw
bGF5KGRpc3BsYXkpKTsKLSNlbmRpZgotICAgIH0KLQotICAgIEdMQ29udGV4dCogd2Via2l0Q29u
dGV4dCA9IEdMQ29udGV4dDo6c2hhcmluZ0NvbnRleHQoKTsKLSAgICAvLyBFR0wgYW5kIEdMWCBh
cmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBubyBuZWVkIGZvciBpZmRlZnMgaGVyZS4KLSAgICBHc3RH
TFBsYXRmb3JtIGdsUGxhdGZvcm0gPSB3ZWJraXRDb250ZXh0LT5pc0VHTENvbnRleHQoKSA/IEdT
VF9HTF9QTEFURk9STV9FR0wgOiBHU1RfR0xfUExBVEZPUk1fR0xYOwotCi0jaWYgVVNFKE9QRU5H
TF9FU18yKQotICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9HTEVTMjsKLSNlbGlmIFVT
RShPUEVOR0wpCi0gICAgR3N0R0xBUEkgZ2xBUEkgPSBHU1RfR0xfQVBJX09QRU5HTDsKLSNlbHNl
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLQotICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0M0QgY29udGV4dEhhbmRsZSA9IHdlYmtpdENvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOwotICAgIGlmICghY29udGV4dEhhbmRsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgbV9nbENvbnRleHQgPSBnc3RfZ2xfY29udGV4dF9uZXdfd3JhcHBlZChtX2dsRGlzcGxheS5n
ZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxndWludHB0cj4oY29udGV4dEhhbmRsZSksIGdsUGxhdGZv
cm0sIGdsQVBJKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVJfR0wpCi0KIGdib29sZWFuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlTWVz
c2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogewogICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBl
cnI7CkBAIC0xMDI2LDcgKzkyNyw3IEBAIGdib29sZWFuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgIH0KIAogICAgIC8v
IFdlIGlnbm9yZSBzdGF0ZSBjaGFuZ2VzIGZyb20gaW50ZXJuYWwgZWxlbWVudHMuIFRoZXkgYXJl
IGZvcndhcmRlZCB0byBwbGF5YmluMiBhbnl3YXkuCi0gICAgYm9vbCBtZXNzYWdlU291cmNlSXNQ
bGF5YmluID0gR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpID09IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0
T2JqZWN0Kj4obV9wbGF5QmluLmdldCgpKTsKKyAgICBib29sIG1lc3NhZ2VTb3VyY2VJc1BsYXli
aW4gPSBHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkgPT0gcmVpbnRlcnByZXRfY2FzdDxHc3RPYmpl
Y3QqPihtX3BpcGVsaW5lLmdldCgpKTsKIAogICAgIExPR19NRURJQV9NRVNTQUdFKCJNZXNzYWdl
ICVzIHJlY2VpdmVkIGZyb20gZWxlbWVudCAlcyIsIEdTVF9NRVNTQUdFX1RZUEVfTkFNRShtZXNz
YWdlKSwgR1NUX01FU1NBR0VfU1JDX05BTUUobWVzc2FnZSkpOwogICAgIHN3aXRjaCAoR1NUX01F
U1NBR0VfVFlQRShtZXNzYWdlKSkgewpAQCAtMTAzOCw3ICs5MzksNyBAQCBnYm9vbGVhbiBNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2Fn
ZSkKICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVyci5vdXRQdHIo
KSwgJmRlYnVnLm91dFB0cigpKTsKICAgICAgICAgRVJST1JfTUVESUFfTUVTU0FHRSgiRXJyb3Ig
JWQ6ICVzICh1cmw9JXMpIiwgZXJyLT5jb2RlLCBlcnItPm1lc3NhZ2UsIG1fdXJsLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lU
SF9UUyhHU1RfQklOKG1fcGxheUJpbi5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwg
IndlYmtpdC12aWRlby5lcnJvciIpOworICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxF
X1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1df
QUxMLCAid2Via2l0LXZpZGVvLmVycm9yIik7CiAKICAgICAgICAgZXJyb3IgPSBNZWRpYVBsYXll
cjo6RW1wdHk7CiAgICAgICAgIGlmIChlcnItPmNvZGUgPT0gR1NUX1NUUkVBTV9FUlJPUl9DT0RF
Q19OT1RfRk9VTkQKQEAgLTEwODIsNyArOTgzLDcgQEAgZ2Jvb2xlYW4gTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgICAg
IEdzdFN0YXRlIG5ld1N0YXRlOwogICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdGF0ZV9jaGFu
Z2VkKG1lc3NhZ2UsICZjdXJyZW50U3RhdGUsICZuZXdTdGF0ZSwgMCk7CiAgICAgICAgIENTdHJp
bmcgZG90RmlsZU5hbWUgPSBTdHJpbmc6OmZvcm1hdCgid2Via2l0LXZpZGVvLiVzXyVzIiwgZ3N0
X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUoY3VycmVudFN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVf
Z2V0X25hbWUobmV3U3RhdGUpKS51dGY4KCk7Ci0gICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9U
X0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGxheUJpbi5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9T
SE9XX0FMTCwgZG90RmlsZU5hbWUuZGF0YSgpKTsKKyAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19E
T1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQ
SF9TSE9XX0FMTCwgZG90RmlsZU5hbWUuZGF0YSgpKTsKIAogICAgICAgICBicmVhazsKICAgICB9
CkBAIC0xMDk1LDcgKzk5Niw3IEBAIGdib29sZWFuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEdTVF9NRVNTQUdFX1JFUVVFU1RfU1RBVEU6CiAgICAgICAgIGdzdF9tZXNzYWdlX3Bh
cnNlX3JlcXVlc3Rfc3RhdGUobWVzc2FnZSwgJnJlcXVlc3RlZFN0YXRlKTsKLSAgICAgICAgZ3N0
X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgJmN1cnJlbnRTdGF0ZSwgTlVMTCwg
MjUwKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZj
dXJyZW50U3RhdGUsIE5VTEwsIDI1MCk7CiAgICAgICAgIGlmIChyZXF1ZXN0ZWRTdGF0ZSA8IGN1
cnJlbnRTdGF0ZSkgewogICAgICAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZWxlbWVudE5hbWUo
Z3N0X2VsZW1lbnRfZ2V0X25hbWUoR1NUX0VMRU1FTlQobWVzc2FnZSkpKTsKICAgICAgICAgICAg
IElORk9fTUVESUFfTUVTU0FHRSgiRWxlbWVudCAlcyByZXF1ZXN0ZWQgc3RhdGUgY2hhbmdlIHRv
ICVzIiwgZWxlbWVudE5hbWUuZ2V0KCksCkBAIC0xMTE1LDggKzEwMTYsOCBAQCBnYm9vbGVhbiBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVz
c2FnZSkKICAgICAgICAgLy8gaXMgZGlzYWJsZWQuIEl0IGFsc28gaGFwcGVucyByZWxhdGl2ZWx5
IG9mdGVuIHdpdGgKICAgICAgICAgLy8gSFRUUCBhZGFwdGl2ZSBzdHJlYW1zIHdoZW4gc3dpdGNo
aW5nIGJldHdlZW4gZGlmZmVyZW50CiAgICAgICAgIC8vIHZhcmlhbnRzIG9mIGEgc3RyZWFtLgot
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLmdldCgpLCBHU1RfU1RBVEVf
UEFVU0VEKTsKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwg
R1NUX1NUQVRFX1BMQVlJTkcpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgR1NUX01FU1NBR0VfTEFURU5DWToKICAgICAgICAgLy8gUmVjYWxjdWxhdGUg
dGhlIGxhdGVuY3ksIHdlIGRvbid0IG5lZWQgYW55IHNwZWNpYWwgaGFuZGxpbmcKQEAgLTExMjQs
NyArMTAyNSw3IEBAIGdib29sZWFuIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxl
TWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4g
aWYgdGhlIGxhdGVuY3kgb2YgbGl2ZSBlbGVtZW50cyBjaGFuZ2VzLCBvcgogICAgICAgICAvLyBm
b3Igb25lIHJlYXNvbiBvciBhbm90aGVyIGEgbmV3IGxpdmUgZWxlbWVudCBpcyBhZGRlZCBvcgog
ICAgICAgICAvLyByZW1vdmVkIGZyb20gdGhlIHBpcGVsaW5lLgotICAgICAgICBnc3RfYmluX3Jl
Y2FsY3VsYXRlX2xhdGVuY3koR1NUX0JJTihtX3BsYXlCaW4uZ2V0KCkpKTsKKyAgICAgICAgZ3N0
X2Jpbl9yZWNhbGN1bGF0ZV9sYXRlbmN5KEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEdTVF9NRVNTQUdFX0VMRU1FTlQ6CiAgICAgICAgIGlmIChn
c3RfaXNfbWlzc2luZ19wbHVnaW5fbWVzc2FnZShtZXNzYWdlKSkgewpAQCAtMTI4Miw3ICsxMTgz
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmZpbGxUaW1lckZpcmVkKCkK
IHsKICAgICBHc3RRdWVyeSogcXVlcnkgPSBnc3RfcXVlcnlfbmV3X2J1ZmZlcmluZyhHU1RfRk9S
TUFUX1BFUkNFTlQpOwogCi0gICAgaWYgKCFnc3RfZWxlbWVudF9xdWVyeShtX3BsYXlCaW4uZ2V0
KCksIHF1ZXJ5KSkgeworICAgIGlmICghZ3N0X2VsZW1lbnRfcXVlcnkobV9waXBlbGluZS5nZXQo
KSwgcXVlcnkpKSB7CiAgICAgICAgIGdzdF9xdWVyeV91bnJlZihxdWVyeSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0xMzUxLDcgKzEyNTIsNyBAQCBmbG9hdCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Om1heFRpbWVMb2FkZWQoKSBjb25zdAogCiBib29sIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6ZGlkTG9hZGluZ1Byb2dyZXNzKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
cGxheUJpbiB8fCAhbV9tZWRpYUR1cmF0aW9uIHx8ICghaXNNZWRpYVNvdXJjZSgpICYmICF0b3Rh
bEJ5dGVzKCkpKQorICAgIGlmICghbV9waXBlbGluZSB8fCAhbV9tZWRpYUR1cmF0aW9uIHx8ICgh
aXNNZWRpYVNvdXJjZSgpICYmICF0b3RhbEJ5dGVzKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgZmxvYXQgY3VycmVudE1heFRpbWVMb2FkZWQgPSBtYXhUaW1lTG9hZGVkKCk7CiAgICAg
Ym9vbCBkaWRMb2FkaW5nUHJvZ3Jlc3MgPSBjdXJyZW50TWF4VGltZUxvYWRlZCAhPSBtX21heFRp
bWVMb2FkZWRBdExhc3REaWRMb2FkaW5nUHJvZ3Jlc3M7CkBAIC0xNDE4LDcgKzEzMTksNyBAQCB1
bnNpZ25lZCBsb25nIGxvbmcgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0b3RhbEJ5dGVz
KCkgY29uc3QKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VDaGFuZ2Vk
KCkKIHsKICAgICBtX3NvdXJjZS5jbGVhcigpOwotICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4u
Z2V0KCksICJzb3VyY2UiLCAmbV9zb3VyY2Uub3V0UHRyKCksIE5VTEwpOworICAgIGdfb2JqZWN0
X2dldChtX3BpcGVsaW5lLmdldCgpLCAic291cmNlIiwgJm1fc291cmNlLm91dFB0cigpLCBOVUxM
KTsKIAogICAgIGlmIChXRUJLSVRfSVNfV0VCX1NSQyhtX3NvdXJjZS5nZXQoKSkpCiAgICAgICAg
IHdlYktpdFdlYlNyY1NldE1lZGlhUGxheWVyKFdFQktJVF9XRUJfU1JDKG1fc291cmNlLmdldCgp
KSwgbV9wbGF5ZXIpOwpAQCAtMTQzNCwxMyArMTMzNSwxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6Y2FuY2VsTG9hZCgpCiAgICAgaWYgKG1fbmV0d29ya1N0YXRlIDwgTWVk
aWFQbGF5ZXI6OkxvYWRpbmcgfHwgbV9uZXR3b3JrU3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkxvYWRl
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcGxheUJpbikKKyAgICBpZiAobV9waXBl
bGluZSkKICAgICAgICAgY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUkVBRFkpOwogfQog
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXN5bmNTdGF0ZUNoYW5nZURvbmUo
KQogewotICAgIGlmICghbV9wbGF5QmluIHx8IG1fZXJyb3JPY2N1cmVkKQorICAgIGlmICghbV9w
aXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
c2Vla2luZykgewpAQCAtMTQ2Nyw3ICsxMzY4LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKCkKIAogdm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiB7Ci0gICAgaWYgKCFtX3BsYXlCaW4pCisgICAg
aWYgKCFtX3BpcGVsaW5lKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9lcnJvck9jY3Vy
ZWQpCkBAIC0xNDc4LDcgKzEzNzksNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6dXBkYXRlU3RhdGVzKCkKICAgICBHc3RTdGF0ZSBzdGF0ZTsKICAgICBHc3RTdGF0ZSBwZW5k
aW5nOwogCi0gICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBnc3RfZWxl
bWVudF9nZXRfc3RhdGUobV9wbGF5QmluLmdldCgpLCAmc3RhdGUsICZwZW5kaW5nLCAyNTAgKiBH
U1RfTlNFQ09ORCk7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gZ2V0U3RhdGVSZXN1bHQgPSBn
c3RfZWxlbWVudF9nZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCAmcGVuZGluZywg
MjUwICogR1NUX05TRUNPTkQpOwogCiAgICAgYm9vbCBzaG91bGRVcGRhdGVQbGF5YmFja1N0YXRl
ID0gZmFsc2U7CiAgICAgc3dpdGNoIChnZXRTdGF0ZVJlc3VsdCkgewpAQCAtMTY5OSwxMCArMTYw
MCwxMCBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZE5leHRMb2NhdGlv
bigpCiAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9SRUFEWSk7CiAK
ICAgICAgICAgICAgIEdzdFN0YXRlIHN0YXRlOwotICAgICAgICAgICAgZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRlKG1fcGxheUJpbi5nZXQoKSwgJnN0YXRlLCAwLCAwKTsKKyAgICAgICAgICAgIGdzdF9l
bGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsIDAsIDApOwogICAgICAg
ICAgICAgaWYgKHN0YXRlIDw9IEdTVF9TVEFURV9SRUFEWSkgewogICAgICAgICAgICAgICAgIC8v
IFNldCB0aGUgbmV3IHVyaSBhbmQgc3RhcnQgcGxheWluZy4KLSAgICAgICAgICAgICAgICBnX29i
amVjdF9zZXQobV9wbGF5QmluLmdldCgpLCAidXJpIiwgbmV3VXJsLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIE5VTEwpOworICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3BpcGVsaW5lLmdl
dCgpLCAidXJpIiwgbmV3VXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIE5VTEwpOwogICAgICAg
ICAgICAgICAgIG1fdXJsID0gbmV3VXJsOwogICAgICAgICAgICAgICAgIGNoYW5nZVBpcGVsaW5l
U3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMTc1Niw3ICsxNjU3LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNh
Y2hlRHVyYXRpb24oKQogICAgIGlmIChzdGQ6OmlzaW5mKG5ld0R1cmF0aW9uKSkgewogICAgICAg
ICAvLyBPbmx5IHByZXRlbmQgdGhhdCBkdXJhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGlmIHRoZSB0
aGUgcXVlcnkgZmFpbGVkIGluIGEgc3RhYmxlIHBpcGVsaW5lIHN0YXRlLgogICAgICAgICBHc3RT
dGF0ZSBzdGF0ZTsKLSAgICAgICAgaWYgKGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BsYXlCaW4u
Z2V0KCksICZzdGF0ZSwgMCwgMCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTICYmIHN0YXRl
ID4gR1NUX1NUQVRFX1JFQURZKQorICAgICAgICBpZiAoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1f
cGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgMCwgMCkgPT0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNT
ICYmIHN0YXRlID4gR1NUX1NUQVRFX1JFQURZKQogICAgICAgICAgICAgbV9tZWRpYUR1cmF0aW9u
S25vd24gPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5MTksMTEgKzE4MjAs
MTEgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OnN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUUKIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnNldERvd25sb2FkQnVmZmVyaW5nKCkKIHsKLSAgICBpZiAoIW1fcGxheUJpbikK
KyAgICBpZiAoIW1fcGlwZWxpbmUpCiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIGZs
YWdzOwotICAgIGdfb2JqZWN0X2dldChtX3BsYXlCaW4uZ2V0KCksICJmbGFncyIsICZmbGFncywg
TlVMTCk7CisgICAgZ19vYmplY3RfZ2V0KG1fcGlwZWxpbmUuZ2V0KCksICJmbGFncyIsICZmbGFn
cywgTlVMTCk7CiAKICAgICB1bnNpZ25lZCBmbGFnRG93bmxvYWQgPSBnZXRHc3RQbGF5RmxhZygi
ZG93bmxvYWQiKTsKIApAQCAtMTkzNCwxMSArMTgzNSwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6c2V0RG93bmxvYWRCdWZmZXJpbmcoKQogICAgIGJvb2wgc2hvdWxkRG93
bmxvYWQgPSAhaXNMaXZlU3RyZWFtKCkgJiYgbV9wcmVsb2FkID09IE1lZGlhUGxheWVyOjpBdXRv
OwogICAgIGlmIChzaG91bGREb3dubG9hZCkgewogICAgICAgICBMT0dfTUVESUFfTUVTU0FHRSgi
RW5hYmxpbmcgb24tZGlzayBidWZmZXJpbmciKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxh
eUJpbi5nZXQoKSwgImZsYWdzIiwgZmxhZ3MgfCBmbGFnRG93bmxvYWQsIE5VTEwpOworICAgICAg
ICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImZsYWdzIiwgZmxhZ3MgfCBmbGFnRG93
bmxvYWQsIE5VTEwpOwogICAgICAgICBtX2ZpbGxUaW1lci5zdGFydFJlcGVhdGluZygwLjIpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIExPR19NRURJQV9NRVNTQUdFKCJEaXNhYmxpbmcgb24tZGlz
ayBidWZmZXJpbmciKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgImZs
YWdzIiwgZmxhZ3MgJiB+ZmxhZ0Rvd25sb2FkLCBOVUxMKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0
KG1fcGlwZWxpbmUuZ2V0KCksICJmbGFncyIsIGZsYWdzICYgfmZsYWdEb3dubG9hZCwgTlVMTCk7
CiAgICAgICAgIG1fZmlsbFRpbWVyLnN0b3AoKTsKICAgICB9CiB9CkBAIC0yMDE3LDM3ICsxOTE4
LDM1IEBAIEdzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlQXVk
aW9TaW5rKCkKIEdzdEVsZW1lbnQqIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6YXVkaW9T
aW5rKCkgY29uc3QKIHsKICAgICBHc3RFbGVtZW50KiBzaW5rOwotICAgIGdfb2JqZWN0X2dldCht
X3BsYXlCaW4uZ2V0KCksICJhdWRpby1zaW5rIiwgJnNpbmssIG51bGxwdHIpOworICAgIGdfb2Jq
ZWN0X2dldChtX3BpcGVsaW5lLmdldCgpLCAiYXVkaW8tc2luayIsICZzaW5rLCBudWxscHRyKTsK
ICAgICByZXR1cm4gc2luazsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZUdTVFBsYXlCaW4oKQogewotICAgIEFTU0VSVCghbV9wbGF5QmluKTsKKyAgICBBU1NF
UlQoIW1fcGlwZWxpbmUpOwogCiAgICAgLy8gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCkgcmV0
dXJucyBhIGZsb2F0aW5nIHJlZmVyZW5jZSBzbwogICAgIC8vIHdlIHNob3VsZCBub3QgYWRvcHQu
Ci0gICAgbV9wbGF5QmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJwbGF5YmluIiwgInBs
YXkiKTsKLSAgICBzZXRTdHJlYW1Wb2x1bWVFbGVtZW50KEdTVF9TVFJFQU1fVk9MVU1FKG1fcGxh
eUJpbi5nZXQoKSkpOworICAgIHNldFBpcGVsaW5lKGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgi
cGxheWJpbiIsICJwbGF5IikpOworICAgIHNldFN0cmVhbVZvbHVtZUVsZW1lbnQoR1NUX1NUUkVB
TV9WT0xVTUUobV9waXBlbGluZS5nZXQoKSkpOwogCi0gICAgR1JlZlB0cjxHc3RCdXM+IGJ1cyA9
IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9wbGF5QmluLmdl
dCgpKSkpOworICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5l
X2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CiAgICAgZ3N0X2J1c19h
ZGRfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0
KCksICJtZXNzYWdlIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVNZXNzYWdlQ2FsbGJh
Y2spLCB0aGlzKTsKLSAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Npb24oYnVz
LmdldCgpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cy5nZXQoKSwgInN5bmMtbWVzc2FnZSIs
IEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlU3luY01lc3NhZ2VDYWxsYmFjayksIHRoaXMp
OwogCi0gICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgIm11dGUiLCBtX3BsYXllci0+
bXV0ZWQoKSwgTlVMTCk7CisgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJtdXRl
IiwgbV9wbGF5ZXItPm11dGVkKCksIE5VTEwpOwogCi0gICAgZ19zaWduYWxfY29ubmVjdChtX3Bs
YXlCaW4uZ2V0KCksICJub3RpZnk6OnNvdXJjZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2
YXRlU291cmNlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCht
X3BsYXlCaW4uZ2V0KCksICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclBy
aXZhdGVWaWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9wbGF5QmluLmdldCgpLCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQ
cml2YXRlQXVkaW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1fcGlwZWxpbmUuZ2V0KCksICJub3RpZnk6OnNvdXJjZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5
ZXJQcml2YXRlU291cmNlQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29u
bmVjdChtX3BpcGVsaW5lLmdldCgpLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQ
bGF5ZXJQcml2YXRlVmlkZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KG1fcGlwZWxpbmUuZ2V0KCksICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRp
YVBsYXllclByaXZhdGVBdWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogI2lmIEVOQUJMRShW
SURFT19UUkFDSykKICAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDEsIDIpKSB7Ci0g
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLmdldCgpLCAidGV4dC1jaGFuZ2VkIiwg
R19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVUZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9waXBlbGluZS5nZXQoKSwgInRleHQtY2hhbmdl
ZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVGV4dENoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwogCiAgICAgICAgIEdzdEVsZW1lbnQqIHRleHRDb21iaW5lciA9IHdlYmtpdFRleHRDb21i
aW5lck5ldygpOwogICAgICAgICBBU1NFUlQodGV4dENvbWJpbmVyKTsKLSAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgInRleHQtc3RyZWFtLWNvbWJpbmVyIiwgdGV4dENvbWJp
bmVyLCBOVUxMKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ0ZXh0
LXN0cmVhbS1jb21iaW5lciIsIHRleHRDb21iaW5lciwgTlVMTCk7CiAKICAgICAgICAgbV90ZXh0
QXBwU2luayA9IHdlYmtpdFRleHRTaW5rTmV3KCk7CiAgICAgICAgIEFTU0VSVChtX3RleHRBcHBT
aW5rKTsKQEAgLTIwNTgsMTEgKzE5NTcsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogICAgICAgICBnX29iamVjdF9zZXQobV90ZXh0QXBw
U2luay5nZXQoKSwgImVtaXQtc2lnbmFscyIsIHRydWUsICJlbmFibGUtbGFzdC1zYW1wbGUiLCBm
YWxzZSwgImNhcHMiLCBnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ0ZXh0L3Z0dCIpLCBOVUxM
KTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3RleHRBcHBTaW5rLmdldCgpLCAibmV3LXNh
bXBsZSIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlTmV3VGV4dFNhbXBsZUNhbGxiYWNr
KSwgdGhpcyk7CiAKLSAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgInRleHQt
c2luayIsIG1fdGV4dEFwcFNpbmsuZ2V0KCksIE5VTEwpOworICAgICAgICBnX29iamVjdF9zZXQo
bV9waXBlbGluZS5nZXQoKSwgInRleHQtc2luayIsIG1fdGV4dEFwcFNpbmsuZ2V0KCksIE5VTEwp
OwogICAgIH0KICNlbmRpZgogCi0gICAgZ19vYmplY3Rfc2V0KG1fcGxheUJpbi5nZXQoKSwgInZp
ZGVvLXNpbmsiLCBjcmVhdGVWaWRlb1NpbmsoKSwgImF1ZGlvLXNpbmsiLCBjcmVhdGVBdWRpb1Np
bmsoKSwgbnVsbHB0cik7CisgICAgZ19vYmplY3Rfc2V0KG1fcGlwZWxpbmUuZ2V0KCksICJ2aWRl
by1zaW5rIiwgY3JlYXRlVmlkZW9TaW5rKCksICJhdWRpby1zaW5rIiwgY3JlYXRlQXVkaW9TaW5r
KCksIG51bGxwdHIpOwogCiAgICAgLy8gT24gMS40LjIgYW5kIG5ld2VyIHdlIHVzZSB0aGUgYXVk
aW8tZmlsdGVyIHByb3BlcnR5IGluc3RlYWQuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVnemlsbGEu
Z25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzU3NDggZm9yCkBAIC0yMDczLDcgKzE5NzIsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbigpCiAg
ICAgICAgIGlmICghc2NhbGUpCiAgICAgICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNy
ZWF0ZSBzY2FsZXRlbXBvIik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGdfb2JqZWN0X3Nl
dChtX3BsYXlCaW4uZ2V0KCksICJhdWRpby1maWx0ZXIiLCBzY2FsZSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgImF1ZGlvLWZpbHRlciIsIHNj
YWxlLCBudWxscHRyKTsKICAgICB9CiAKICAgICBHUmVmUHRyPEdzdFBhZD4gdmlkZW9TaW5rUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Via2l0VmlkZW9TaW5r
LmdldCgpLCAic2luayIpKTsKQEAgLTIwODMsOCArMTk4Miw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKCkKIAogdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24oKQogewotICAgIEdzdE1l
c3NhZ2UqIG1lc3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZShHU1RfT0JKRUNU
KG1fcGxheUJpbi5nZXQoKSksIEdTVF9TVEFURV9QQVVTRUQpOwotICAgIGdzdF9lbGVtZW50X3Bv
c3RfbWVzc2FnZShtX3BsYXlCaW4uZ2V0KCksIG1lc3NhZ2UpOworICAgIEdzdE1lc3NhZ2UqIG1l
c3NhZ2UgPSBnc3RfbWVzc2FnZV9uZXdfcmVxdWVzdF9zdGF0ZShHU1RfT0JKRUNUKG1fcGlwZWxp
bmUuZ2V0KCkpLCBHU1RfU1RBVEVfUEFVU0VEKTsKKyAgICBnc3RfZWxlbWVudF9wb3N0X21lc3Nh
Z2UobV9waXBlbGluZS5nZXQoKSwgbWVzc2FnZSk7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpkaWRQYXNzQ09SU0FjY2Vzc0NoZWNrKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCAzOTIyNmQyLi40YzI2ZjBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC00
Nyw4ICs0Nyw2IEBAIHR5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwogdHlwZWRl
ZiBzdHJ1Y3QgX0dzdE1lc3NhZ2UgR3N0TWVzc2FnZTsKIHR5cGVkZWYgc3RydWN0IF9Hc3RFbGVt
ZW50IEdzdEVsZW1lbnQ7CiB0eXBlZGVmIHN0cnVjdCBfR3N0TXBlZ3RzU2VjdGlvbiBHc3RNcGVn
dHNTZWN0aW9uOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7Ci10
eXBlZGVmIHN0cnVjdCBfR3N0R0xEaXNwbGF5IEdzdEdMRGlzcGxheTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC02OCw3ICs2Niw2IEBAIHB1YmxpYzoKICAgICB+TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyKCk7CiAKICAgICBzdGF0aWMgdm9pZCByZWdpc3Rlck1lZGlhRW5naW5lKE1l
ZGlhRW5naW5lUmVnaXN0cmFyKTsKLSAgICB2b2lkIGhhbmRsZVN5bmNNZXNzYWdlKEdzdE1lc3Nh
Z2UqKTsKICAgICBnYm9vbGVhbiBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKICAgICB2b2lk
IGhhbmRsZVBsdWdpbkluc3RhbGxlclJlc3VsdChHc3RJbnN0YWxsUGx1Z2luc1JldHVybik7CiAK
QEAgLTE1OSwxMCArMTU2LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3JlYXRlR1NUUGxheUJp
bigpOwogCi0jaWYgVVNFKEdTVFJFQU1FUl9HTCkKLSAgICBib29sIGVuc3VyZUdzdEdMQ29udGV4
dCgpOwotI2VuZGlmCi0KICAgICBib29sIGxvYWROZXh0TG9jYXRpb24oKTsKICAgICB2b2lkIG1l
ZGlhTG9jYXRpb25DaGFuZ2VkKEdzdE1lc3NhZ2UqKTsKIApAQCAtMTkzLDcgKzE4Niw2IEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGxh
eUJpbjsKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fc291cmNlOwogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdGV4dEFwcFNpbms7CkBAIC0yNTgs
MTAgKzI1MCw2IEBAIHByaXZhdGU6CiAjZWxzZQogICAgIGJvb2wgaXNNZWRpYVNvdXJjZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKLSNpZiBVU0UoR1NUUkVBTUVSX0dMKQotICAg
IEdSZWZQdHI8R3N0R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKLSAgICBHUmVmUHRyPEdzdEdMRGlz
cGxheT4gbV9nbERpc3BsYXk7Ci0jZW5kaWYKIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAppbmRleCBmZTIxYjc1Li5kZDhk
YjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ckJhc2UuY3BwCkBAIC01MCw2ICs1MCwyOCBAQAogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5o
IgogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVSX0dMKQorI2luY2x1ZGUgIkdMQ29udGV4dC5o
IgorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L2dsL2dsLmg+
CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworI2lmIFVTRShHTFgpCisjaW5jbHVkZSAi
R0xDb250ZXh0R0xYLmgiCisjaW5jbHVkZSA8Z3N0L2dsL3gxMS9nc3RnbGRpc3BsYXlfeDExLmg+
CisjZWxpZiBVU0UoRUdMKQorI2luY2x1ZGUgIkdMQ29udGV4dEVHTC5oIgorI2luY2x1ZGUgPGdz
dC9nbC9lZ2wvZ3N0Z2xkaXNwbGF5X2VnbC5oPgorI2VuZGlmCisKKy8vIGdzdGdsYXBpLmggbWF5
IGluY2x1ZGUgZWdscGxhdGZvcm0uaCBhbmQgaXQgaW5jbHVkZXMgWC5oLCB3aGljaAorLy8gZGVm
aW5lcyBOb25lLCBicmVha2luZyBNZWRpYVBsYXllcjo6Tm9uZSBlbnVtCisjaWYgUExBVEZPUk0o
WDExKSAmJiBHU1RfR0xfSEFWRV9QTEFURk9STV9FR0wKKyN1bmRlZiBOb25lCisjZW5kaWYKKyNl
bmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQorCiBHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X21l
ZGlhX3BsYXllcl9kZWJ1Zyk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfbWVkaWFf
cGxheWVyX2RlYnVnCiAKQEAgLTg2LDYgKzEwOCwxMSBAQCBzdGF0aWMgdm9pZCBtZWRpYVBsYXll
clByaXZhdGVSZXBhaW50Q2FsbGJhY2soV2ViS2l0VmlkZW9TaW5rKiwgR3N0U2FtcGxlKiBzYW1w
bAogICAgIHBsYXllclByaXZhdGUtPnRyaWdnZXJSZXBhaW50KHNhbXBsZSk7CiB9CiAKK3N0YXRp
YyB2b2lkIG1lZGlhUGxheWVyUHJpdmF0ZU5lZWRDb250ZXh0TWVzc2FnZUNhbGxiYWNrKEdzdEJ1
cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2Uq
IHBsYXllcikKK3sKKyAgICBwbGF5ZXItPmhhbmRsZU5lZWRDb250ZXh0TWVzc2FnZShtZXNzYWdl
KTsKK30KKwogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6TWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZShNZWRpYVBsYXllciogcGxheWVyKQogICAgIDogbV9wbGF5ZXIocGxh
eWVyKQogICAgICwgbV9mcHNTaW5rKDApCkBAIC0xMjQsMTIgKzE1MSw5NSBAQCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZSgp
CiAgICAgICAgIG1fbXV0ZVNpZ25hbEhhbmRsZXIgPSAwOwogICAgIH0KIAorICAgIGlmIChtX3Bp
cGVsaW5lKSB7CisgICAgICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3Bp
cGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgICAg
IEFTU0VSVChidXMpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1
bmMoYnVzLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZWRpYVBsYXllclByaXZh
dGVOZWVkQ29udGV4dE1lc3NhZ2VDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnc3RfYnVzX2Rp
c2FibGVfc3luY19tZXNzYWdlX2VtaXNzaW9uKGJ1cy5nZXQoKSk7CisgICAgICAgIG1fcGlwZWxp
bmUuY2xlYXIoKTsKKyAgICB9CisKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmICFVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgaWYgKGNsaWVudCgpKQogICAgICAgICBjbGllbnQo
KS0+cGxhdGZvcm1MYXllcldpbGxCZURlc3Ryb3llZCgpOwogI2VuZGlmCiB9CiAKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0UGlwZWxpbmUoR3N0RWxlbWVudCogcGlw
ZWxpbmUpCit7CisgICAgbV9waXBlbGluZSA9IHBpcGVsaW5lOworCisgICAgR1JlZlB0cjxHc3RC
dXM+IGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9w
aXBlbGluZS5nZXQoKSkpKTsKKyAgICBnc3RfYnVzX2VuYWJsZV9zeW5jX21lc3NhZ2VfZW1pc3Np
b24oYnVzLmdldCgpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KGJ1cy5nZXQoKSwgInN5bmMtbWVz
c2FnZTo6bmVlZC1jb250ZXh0IiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVOZWVkQ29u
dGV4dE1lc3NhZ2VDYWxsYmFjayksIHRoaXMpOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2U6OmhhbmRsZU5lZWRDb250ZXh0TWVzc2FnZShHc3RNZXNzYWdlKiBtZXNz
YWdlKQoreworI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgY29uc3QgZ2NoYXIqIGNvbnRleHRU
eXBlOworICAgIGdzdF9tZXNzYWdlX3BhcnNlX2NvbnRleHRfdHlwZShtZXNzYWdlLCAmY29udGV4
dFR5cGUpOworCisgICAgaWYgKCFlbnN1cmVHc3RHTENvbnRleHQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFnX3N0cmNtcDAoY29udGV4dFR5cGUsIEdTVF9HTF9ESVNQTEFZX0NPTlRF
WFRfVFlQRSkpIHsKKyAgICAgICAgR3N0Q29udGV4dCogZGlzcGxheUNvbnRleHQgPSBnc3RfY29u
dGV4dF9uZXcoR1NUX0dMX0RJU1BMQVlfQ09OVEVYVF9UWVBFLCBUUlVFKTsKKyAgICAgICAgZ3N0
X2NvbnRleHRfc2V0X2dsX2Rpc3BsYXkoZGlzcGxheUNvbnRleHQsIG1fZ2xEaXNwbGF5LmdldCgp
KTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2NvbnRleHQoR1NUX0VMRU1FTlQobWVzc2FnZS0+
c3JjKSwgZGlzcGxheUNvbnRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFnX3N0cmNtcDAoY29udGV4dFR5cGUsICJnc3QuZ2wuYXBwX2NvbnRleHQiKSkgeworICAgICAg
ICBHc3RDb250ZXh0KiBhcHBDb250ZXh0ID0gZ3N0X2NvbnRleHRfbmV3KCJnc3QuZ2wuYXBwX2Nv
bnRleHQiLCBUUlVFKTsKKyAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY29u
dGV4dF93cml0YWJsZV9zdHJ1Y3R1cmUoYXBwQ29udGV4dCk7CisgICAgICAgIGdzdF9zdHJ1Y3R1
cmVfc2V0KHN0cnVjdHVyZSwgImNvbnRleHQiLCBHU1RfR0xfVFlQRV9DT05URVhULCBtX2dsQ29u
dGV4dC5nZXQoKSwgbnVsbHB0cik7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9jb250ZXh0KEdT
VF9FTEVNRU5UKG1lc3NhZ2UtPnNyYyksIGFwcENvbnRleHQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obWVzc2FnZSk7CisjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9HTCkKK30KKworI2lmIFVTRShHU1RSRUFNRVJfR0wpCitib29sIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lckJhc2U6OmVuc3VyZUdzdEdMQ29udGV4dCgpCit7CisgICAgaWYgKG1f
Z2xDb250ZXh0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbV9nbERpc3BsYXkp
IHsKKyNpZiBQTEFURk9STShYMTEpCisgICAgICAgIERpc3BsYXkqIGRpc3BsYXkgPSBHTENvbnRl
eHQ6OnNoYXJlZFgxMURpc3BsYXkoKTsKKyAgICAgICAgbV9nbERpc3BsYXkgPSBHU1RfR0xfRElT
UExBWShnc3RfZ2xfZGlzcGxheV94MTFfbmV3X3dpdGhfZGlzcGxheShkaXNwbGF5KSk7CisjZWxp
ZiBQTEFURk9STShXQVlMQU5EKQorICAgICAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBXYXlsYW5k
RGlzcGxheTo6aW5zdGFuY2UoKS0+ZWdsRGlzcGxheSgpOworICAgICAgICBtX2dsRGlzcGxheSA9
IEdTVF9HTF9ESVNQTEFZKGdzdF9nbF9kaXNwbGF5X2VnbF9uZXdfd2l0aF9lZ2xfZGlzcGxheShk
aXNwbGF5KSk7CisjZW5kaWYKKyAgICB9CisKKyAgICBHTENvbnRleHQqIHdlYmtpdENvbnRleHQg
PSBHTENvbnRleHQ6OnNoYXJpbmdDb250ZXh0KCk7CisgICAgLy8gRUdMIGFuZCBHTFggYXJlIG11
dHVhbGx5IGV4Y2x1c2l2ZSwgbm8gbmVlZCBmb3IgaWZkZWZzIGhlcmUuCisgICAgR3N0R0xQbGF0
Zm9ybSBnbFBsYXRmb3JtID0gd2Via2l0Q29udGV4dC0+aXNFR0xDb250ZXh0KCkgPyBHU1RfR0xf
UExBVEZPUk1fRUdMIDogR1NUX0dMX1BMQVRGT1JNX0dMWDsKKworI2lmIFVTRShPUEVOR0xfRVNf
MikKKyAgICBHc3RHTEFQSSBnbEFQSSA9IEdTVF9HTF9BUElfR0xFUzI7CisjZWxpZiBVU0UoT1BF
TkdMKQorICAgIEdzdEdMQVBJIGdsQVBJID0gR1NUX0dMX0FQSV9PUEVOR0w7CisjZWxzZQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisKKyAgICBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEIGNvbnRleHRIYW5kbGUgPSB3ZWJraXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
KyAgICBpZiAoIWNvbnRleHRIYW5kbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1f
Z2xDb250ZXh0ID0gZ3N0X2dsX2NvbnRleHRfbmV3X3dyYXBwZWQobV9nbERpc3BsYXkuZ2V0KCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnRwdHI+KGNvbnRleHRIYW5kbGUpLCBnbFBsYXRmb3JtLCBn
bEFQSSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dM
KQorCiAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB2aWRlbwogRmxvYXRTaXplIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5hdHVyYWxTaXplKCkgY29uc3QKIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCmluZGV4IDBiYzA1
YTguLjMzYzgyZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lckJhc2UuaApAQCAtNDAsNyArNDAsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3N0U2FtcGxl
IEdzdFNhbXBsZTsKIHR5cGVkZWYgc3RydWN0IF9Hc3RFbGVtZW50IEdzdEVsZW1lbnQ7CiB0eXBl
ZGVmIHN0cnVjdCBfR3N0TWVzc2FnZSBHc3RNZXNzYWdlOwogdHlwZWRlZiBzdHJ1Y3QgX0dzdFN0
cmVhbVZvbHVtZSBHc3RTdHJlYW1Wb2x1bWU7Ci10eXBlZGVmIHN0cnVjdCBfV2ViS2l0VmlkZW9T
aW5rIFdlYktpdFZpZGVvU2luazsKK3R5cGVkZWYgc3RydWN0IF9Hc3RHTENvbnRleHQgR3N0R0xD
b250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgX0dzdEdMRGlzcGxheSBHc3RHTERpc3BsYXk7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjQsNiArNjUsMTEgQEAgcHVibGljOgogICAgIHZvaWQg
dm9sdW1lQ2hhbmdlZCgpOwogICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsK
IAorI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgYm9vbCBlbnN1cmVHc3RHTENvbnRleHQoKTsK
KyNlbmRpZgorICAgIHZvaWQgaGFuZGxlTmVlZENvbnRleHRNZXNzYWdlKEdzdE1lc3NhZ2UqKTsK
KwogICAgIGJvb2wgc3VwcG9ydHNNdXRpbmcoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dm9pZCBzZXRNdXRlZChib29sKTsKICAgICBib29sIG11dGVkKCkgY29uc3Q7CkBAIC0xMTUsNyAr
MTIxLDEwIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIEdzdEVsZW1lbnQqIGNyZWF0ZUF1ZGlv
U2luaygpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIEdzdEVsZW1lbnQqIGF1ZGlvU2luaygp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KIAorICAgIHZvaWQgc2V0UGlwZWxpbmUoR3N0RWxlbWVudCop
OworCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4g
bV9waXBlbGluZTsKICAgICBHUmVmUHRyPEdzdFN0cmVhbVZvbHVtZT4gbV92b2x1bWVFbGVtZW50
OwogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV93ZWJraXRWaWRlb1Npbms7CiAgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX2Zwc1Npbms7CkBAIC0xMzMsNiArMTQyLDEwIEBAIHByb3RlY3RlZDoK
ICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpICYmICFVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CiAgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiB1cGRhdGVUZXh0dXJlKFRleHR1cmVNYXBw
ZXIqKTsKICNlbmRpZgorI2lmIFVTRShHU1RSRUFNRVJfR0wpCisgICAgR1JlZlB0cjxHc3RHTENv
bnRleHQ+IG1fZ2xDb250ZXh0OworICAgIEdSZWZQdHI8R3N0R0xEaXNwbGF5PiBtX2dsRGlzcGxh
eTsKKyNlbmRpZgogfTsKIH0KIAotLSAKMi4xLjQ=
</data>
<flag name="review"
          id="274639"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>