<?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>76661</bug_id>
          
          <creation_ts>2012-01-19 13:39:29 -0800</creation_ts>
          <short_desc>[Qt] [WK2] Support threaded renderer in WK2</short_desc>
          <delta_ts>2012-03-11 00:26:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</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>Qt</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76674</dependson>
    
    <dependson>80296</dependson>
    
    <dependson>80714</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Viatcheslav Ostapenko">ostap73</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin+threading</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>538988</commentid>
    <comment_count>0</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-19 13:39:29 -0800</bug_when>
    <thetext>Should remove &quot;FIXME&quot; in Tools/MiniBrowser/qt/main.cpp/main() .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539010</commentid>
    <comment_count>1</comment_count>
      <attachid>123189</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-19 13:58:35 -0800</bug_when>
    <thetext>Created attachment 123189
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539036</commentid>
    <comment_count>2</comment_count>
      <attachid>123189</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-19 14:28:23 -0800</bug_when>
    <thetext>Comment on attachment 123189
Patch

Have to rebase after Jocelyns patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539043</commentid>
    <comment_count>3</comment_count>
      <attachid>123197</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-19 14:39:12 -0800</bug_when>
    <thetext>Created attachment 123197
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539068</commentid>
    <comment_count>4</comment_count>
      <attachid>123206</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-19 15:13:19 -0800</bug_when>
    <thetext>Created attachment 123206
Fix windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539080</commentid>
    <comment_count>5</comment_count>
      <attachid>123209</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-19 15:29:01 -0800</bug_when>
    <thetext>Created attachment 123209
One more windows build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539112</commentid>
    <comment_count>6</comment_count>
      <attachid>123209</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-19 15:53:12 -0800</bug_when>
    <thetext>Comment on attachment 123209
One more windows build fix.

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

OK, needs lots of work :)

&gt; Source/WebKit2/Target.pri:258
&gt; +    UIProcess/qt/LayerTreeHostProxyNodeQt.h \

Name is not by convention, since this is not a subclass of a WebCore/WebKit class.
How about QtLayerTreeSceneGraphNode

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:95
&gt; +    return 0;

Why are we returning zero?

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:41
&gt; +#include &lt;QObject&gt;

?

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:68
&gt; +    void paintToCurrentGLContext(const WebCore::TransformationMatrix&amp;, float, bool syncRemoteLayerData = true);

I tried to follow the logic of when syncRemoteLayerData is called and when not... I still don&apos;t get it.

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:187
&gt; +template&lt;typename T&gt; struct MainThreadMessageSender {
&gt; +    struct CallbackContext {
&gt; +        CallbackContext(const T&amp; message, LayerTreeHostProxy* layerTreeHostProxy) :
&gt; +                m_messageID(T::messageID)
&gt; +            ,   m_layerTreeHostProxy(layerTreeHostProxy)
&gt; +        {
&gt; +            m_encoder = CoreIPC::ArgumentEncoder::create(0);
&gt; +            m_encoder-&gt;encode(message);
&gt; +        }
&gt; +        ~CallbackContext()
&gt; +        {
&gt; +        }
&gt; +        OwnPtr&lt;CoreIPC::ArgumentEncoder&gt; m_encoder;
&gt; +        CoreIPC::MessageID m_messageID;
&gt; +        RefPtr&lt;LayerTreeHostProxy&gt; m_layerTreeHostProxy;
&gt; +    };
&gt; +    static void mainThreadCallback(void* data)
&gt; +    {
&gt; +        CallbackContext* context = static_cast&lt;CallbackContext*&gt;(data);
&gt; +        DrawingAreaProxy* drawingAreaProxy = context-&gt;m_layerTreeHostProxy-&gt;drawingAreaProxy();
&gt; +        if (drawingAreaProxy) {
&gt; +            // Have to initialize destanation ID here because this data cannot be accessed from
&gt; +            // painting thread.
&gt; +            *reinterpret_cast&lt;uint64_t*&gt;(context-&gt;m_encoder-&gt;buffer()) = drawingAreaProxy-&gt;page()-&gt;pageID();
&gt; +            CoreIPC::Connection* connection = drawingAreaProxy-&gt;page()-&gt;process()-&gt;connection();
&gt; +            if (connection)
&gt; +                connection-&gt;sendMessage(context-&gt;m_messageID, context-&gt;m_encoder.release(), 0);
&gt; +        }
&gt; +        delete context;
&gt; +    }
&gt; +
&gt; +    static void sendMessageOnMainThread(const T&amp; message, LayerTreeHostProxy* layerTreeHostProxy)
&gt; +    {
&gt; +        CallbackContext* context = new CallbackContext(message, layerTreeHostProxy);
&gt; +        callOnMainThread(&amp;mainThreadCallback, context);
&gt; +    }
&gt; +};

You need to do all that just to call updateViewport on the main thread?

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:220
&gt; +static updateViewportOnMainThread(LayerTreeHostProxy* layerTreeHostProxy)
&gt; +{
&gt; +    layerTreeHostProxy-&gt;updateViewport();
&gt; +}
&gt; +#endif

the pointer to LayerTreeHostProxy is not thread safe, since that proxy might be deleted before the painting stopped.

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:178
&gt; +    if (itemRect.isEmpty())
&gt; +        return;
&gt; +

Is this related?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539132</commentid>
    <comment_count>7</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-19 16:10:07 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 123209 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123209&amp;action=review
&gt; 
&gt; OK, needs lots of work :)
&gt; 
&gt; &gt; Source/WebKit2/Target.pri:258
&gt; &gt; +    UIProcess/qt/LayerTreeHostProxyNodeQt.h \
&gt; 
&gt; Name is not by convention, since this is not a subclass of a WebCore/WebKit class.
&gt; How about QtLayerTreeSceneGraphNode

Ok. I&apos;m very bad in naming ;)

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:95
&gt; &gt; +    return 0;
&gt; 
&gt; Why are we returning zero?

But what should it return if LayerTreeHostProxy is not allocated yet?
Allocation is moved to LayerTreeHostProxy::updatePaintNode

&gt; &gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:41
&gt; &gt; +#include &lt;QObject&gt;
&gt; 
&gt; ?

Oops!

&gt; &gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:68
&gt; &gt; +    void paintToCurrentGLContext(const WebCore::TransformationMatrix&amp;, float, bool syncRemoteLayerData = true);
&gt; 
&gt; I tried to follow the logic of when syncRemoteLayerData is called and when not... I still don&apos;t get it.

It&apos;s simple.
In Qt case it will be never call from paintToCurrentGLContext, only from updatePaintNode . It left there with default parameter if others use this function.

&gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:187
&gt; &gt; +template&lt;typename T&gt; struct MainThreadMessageSender {
&gt; &gt; +    struct CallbackContext {
&gt; &gt; +        CallbackContext(const T&amp; message, LayerTreeHostProxy* layerTreeHostProxy) :
&gt; &gt; +                m_messageID(T::messageID)
&gt; &gt; +            ,   m_layerTreeHostProxy(layerTreeHostProxy)
&gt; &gt; +        {
&gt; &gt; +            m_encoder = CoreIPC::ArgumentEncoder::create(0);
&gt; &gt; +            m_encoder-&gt;encode(message);
&gt; &gt; +        }
&gt; &gt; +        ~CallbackContext()
&gt; &gt; +        {
&gt; &gt; +        }
&gt; &gt; +        OwnPtr&lt;CoreIPC::ArgumentEncoder&gt; m_encoder;
&gt; &gt; +        CoreIPC::MessageID m_messageID;
&gt; &gt; +        RefPtr&lt;LayerTreeHostProxy&gt; m_layerTreeHostProxy;
&gt; &gt; +    };
&gt; &gt; +    static void mainThreadCallback(void* data)
&gt; &gt; +    {
&gt; &gt; +        CallbackContext* context = static_cast&lt;CallbackContext*&gt;(data);
&gt; &gt; +        DrawingAreaProxy* drawingAreaProxy = context-&gt;m_layerTreeHostProxy-&gt;drawingAreaProxy();
&gt; &gt; +        if (drawingAreaProxy) {
&gt; &gt; +            // Have to initialize destanation ID here because this data cannot be accessed from
&gt; &gt; +            // painting thread.
&gt; &gt; +            *reinterpret_cast&lt;uint64_t*&gt;(context-&gt;m_encoder-&gt;buffer()) = drawingAreaProxy-&gt;page()-&gt;pageID();
&gt; &gt; +            CoreIPC::Connection* connection = drawingAreaProxy-&gt;page()-&gt;process()-&gt;connection();
&gt; &gt; +            if (connection)
&gt; &gt; +                connection-&gt;sendMessage(context-&gt;m_messageID, context-&gt;m_encoder.release(), 0);
&gt; &gt; +        }
&gt; &gt; +        delete context;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    static void sendMessageOnMainThread(const T&amp; message, LayerTreeHostProxy* layerTreeHostProxy)
&gt; &gt; +    {
&gt; &gt; +        CallbackContext* context = new CallbackContext(message, layerTreeHostProxy);
&gt; &gt; +        callOnMainThread(&amp;mainThreadCallback, context);
&gt; &gt; +    }
&gt; &gt; +};
&gt; 
&gt; You need to do all that just to call updateViewport on the main thread?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:220
&gt; &gt; +static updateViewportOnMainThread(LayerTreeHostProxy* layerTreeHostProxy)
&gt; &gt; +{
&gt; &gt; +    layerTreeHostProxy-&gt;updateViewport();
&gt; &gt; +}
&gt; &gt; +#endif
&gt; 
&gt; the pointer to LayerTreeHostProxy is not thread safe, since that proxy might be deleted before the painting stopped.

No, it can&apos;t. Paint node holds the reference to LayerTreeHostProxy. I&apos;ve mentioned this in ChangeLog.

&gt; &gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:178
&gt; &gt; +    if (itemRect.isEmpty())
&gt; &gt; +        return;
&gt; &gt; +
&gt; 
&gt; Is this related?

I don&apos;t know, but I was getting division errors in this functions when I was running API tests. The item indeed was 0 size and was resized later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539138</commentid>
    <comment_count>8</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-19 16:16:56 -0800</bug_when>
    <thetext>&gt; But what should it return if LayerTreeHostProxy is not allocated yet?
&gt; Allocation is moved to LayerTreeHostProxy::updatePaintNode
OK.

&gt; It&apos;s simple.
&gt; In Qt case it will be never call from paintToCurrentGLContext, only from updatePaintNode . It left there with default parameter if others use this function.
&gt; 

How about just removing that parameter, and allowing people to call the sync function directly if they so choose. Otherwise it&apos;s a boolean trap.

&gt; &gt; You need to do all that just to call updateViewport on the main thread?
I&apos;m sure we can do the callOnMainThread stuff with less code. This is really elaborate.

&gt; No, it can&apos;t. Paint node holds the reference to LayerTreeHostProxy. I&apos;ve mentioned this in ChangeLog.
OK.

&gt; I don&apos;t know, but I was getting division errors in this functions when I was running API tests. The item indeed was 0 size and was resized later.
OK, should be a different patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539139</commentid>
    <comment_count>9</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-19 16:18:54 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 123209 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123209&amp;action=review
&gt; &gt; +    }
&gt; &gt; +};
&gt; 
&gt; You need to do all that just to call updateViewport on the main thread?

No. Sending messages to webprocess is bigger part and also has to be done from main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539140</commentid>
    <comment_count>10</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-19 16:22:11 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; But what should it return if LayerTreeHostProxy is not allocated yet?
&gt; &gt; Allocation is moved to LayerTreeHostProxy::updatePaintNode
&gt; OK.
&gt; 
&gt; &gt; It&apos;s simple.
&gt; &gt; In Qt case it will be never call from paintToCurrentGLContext, only from updatePaintNode . It left there with default parameter if others use this function.
&gt; &gt; 
&gt; 
&gt; How about just removing that parameter, and allowing people to call the sync function directly if they so choose. Otherwise it&apos;s a boolean trap.

Ok

&gt; &gt; &gt; You need to do all that just to call updateViewport on the main thread?
&gt; I&apos;m sure we can do the callOnMainThread stuff with less code. This is really elaborate.
&gt; 
&gt; &gt; No, it can&apos;t. Paint node holds the reference to LayerTreeHostProxy. I&apos;ve mentioned this in ChangeLog.
&gt; OK.
&gt; 
&gt; &gt; I don&apos;t know, but I was getting division errors in this functions when I was running API tests. The item indeed was 0 size and was resized later.
&gt; OK, should be a different patch.

Ok. I&apos;ll create patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539213</commentid>
    <comment_count>11</comment_count>
      <attachid>123234</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-19 18:20:26 -0800</bug_when>
    <thetext>Created attachment 123234
Reworked patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539502</commentid>
    <comment_count>12</comment_count>
      <attachid>123234</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-01-20 07:50:09 -0800</bug_when>
    <thetext>Comment on attachment 123234
Reworked patch.

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

Some more comments. Getting better!

&gt; Source/WebKit2/ChangeLog:52
&gt; +        (WebKit::QtLayerTreeSceneGraphNode::QtLayerTreeSceneGraphNode):

Sorry to ask you to rename something twice, let&apos;s do QtLayerTreeSGNode

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:93
&gt; +    DrawingAreaProxy* drawingArea = d-&gt;webPageProxy-&gt;drawingArea();
&gt; +    if (drawingArea &amp;&amp; drawingArea-&gt;layerTreeHostProxy())
&gt; +        return drawingArea-&gt;layerTreeHostProxy()-&gt;updatePaintNode(oldNode);

Add a layerTreeHostProxy() function to QQuickWebPagePrivate instead of doing this twice

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:138
&gt; +    DrawingAreaProxy* drawingArea = d-&gt;webPageProxy-&gt;drawingArea();
&gt; +    if (drawingArea &amp;&amp; drawingArea-&gt;layerTreeHostProxy())
&gt; +        return drawingArea-&gt;layerTreeHostProxy()-&gt;setPaintContentsScale(scale);

Ditto

&gt; Source/WebKit2/UIProcess/DrawingAreaProxyImpl.cpp:69
&gt;  #if USE(ACCELERATED_COMPOSITING)
&gt; +    // LayerTreeHostProxy can be still referenced by paint node,
&gt; +    // so drawing area should be cleared to avoid derefencing pointer to deallocated object.
&gt; +#if USE(TEXTURE_MAPPER)
&gt; +    if (m_layerTreeHostProxy)
&gt; +        m_layerTreeHostProxy-&gt;setDrawingAreaProxy(0);
&gt; +#endif

Instead, we should have a detachFromDrawingArea() function in layerTreeHostProxy; In that function you can call purgeBackingStores. That way, you don&apos;t need to send a requestPurge from the render thread, which would make the bridge even simpler (all you really need is updateViewport).

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:54
&gt; +#if PLATFORM(QT)
&gt; +class LayerTreeHostProxyBase : public ThreadSafeRefCounted&lt;LayerTreeHostProxyBase&gt;, public WebCore::GraphicsLayerClient {
&gt; +};
&gt; +#else
&gt; +class LayerTreeHostProxyBase : public RefCounted&lt;LayerTreeHostProxyBase&gt;, public WebCore::GraphicsLayerClient {
&gt; +};
&gt; +#endif

Not sure we need to make this separation. For now let&apos;s just make it ThreadSafeRefCounted, and other ports that want to use it simply won&apos;t use the ThreadSafe aspect.

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:56
&gt; +class LayerTreeHostProxy : public LayerTreeHostProxyBase {

If you remove the former #ifdef, this becomes unnecessary and you can simply subclass ThreadSafeRC&lt;&gt; and GraphicsLayerClient

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:85
&gt; +    void setPaintContentsScale(float scale) { m_paintContentsScale = scale; }

setContentsScale

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:149
&gt; +    float m_paintContentsScale;

m_contentsScale

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:157
&gt; +#ifndef NDEBUG
&gt; +    bool m_inPainting;
&gt; +#endif

Not needed, see other comments.

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:158
&gt; +    RefPtr&lt;LayerTreeHostProxy&gt; m_layerTreeHostProxy;

Shouldn&apos;t this be a ThreadSafeRefPtr?

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:247
&gt;  void LayerTreeHostProxy::didFireViewportUpdateTimer(Timer&lt;LayerTreeHostProxy&gt;*)
&gt;  {
&gt; -    updateViewport();
&gt; +    invokeMethodOnMainThread(&amp;WebKit::LayerTreeHostProxy::updateViewport);
&gt;  }

Is this timer still necessary? can&apos;t we just invoke the function from paintToCurrentGLContext ?

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:251
&gt; +    ASSERT(!m_inPainting);

ASSERT(isMainThread());

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:634
&gt; +    ASSERT(!m_inPainting);

ASSERT(isMainThread());

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:642
&gt; +    ASSERT(!m_inPainting);

ASSERT(isMainThread());

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:657
&gt; +    invokeMethodOnMainThread(&amp;WebKit::LayerTreeHostProxy::requestPurgeBackingStores);

See previous comment, suggesting we request the PurgeBackingStores when detaching from the drawing-area, which saves us this cross-thread call.

&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSceneGraphNode.cpp:50
&gt; +#ifndef NDEBUG
&gt; +    m_layerTreeHostProxy-&gt;m_inPainting = true;
&gt; +#endif

Not needed. See previous comments.

&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSceneGraphNode.cpp:59
&gt; +#ifndef NDEBUG
&gt; +    m_layerTreeHostProxy-&gt;m_inPainting = false;
&gt; +#endif

Not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539539</commentid>
    <comment_count>13</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-20 08:42:29 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 123234 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123234&amp;action=review
&gt; 
&gt; Some more comments. Getting better!
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:52
&gt; &gt; +        (WebKit::QtLayerTreeSceneGraphNode::QtLayerTreeSceneGraphNode):
&gt; 
&gt; Sorry to ask you to rename something twice, let&apos;s do QtLayerTreeSGNode
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:93
&gt; &gt; +    DrawingAreaProxy* drawingArea = d-&gt;webPageProxy-&gt;drawingArea();
&gt; &gt; +    if (drawingArea &amp;&amp; drawingArea-&gt;layerTreeHostProxy())
&gt; &gt; +        return drawingArea-&gt;layerTreeHostProxy()-&gt;updatePaintNode(oldNode);
&gt; 
&gt; Add a layerTreeHostProxy() function to QQuickWebPagePrivate instead of doing this twice
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:138
&gt; &gt; +    DrawingAreaProxy* drawingArea = d-&gt;webPageProxy-&gt;drawingArea();
&gt; &gt; +    if (drawingArea &amp;&amp; drawingArea-&gt;layerTreeHostProxy())
&gt; &gt; +        return drawingArea-&gt;layerTreeHostProxy()-&gt;setPaintContentsScale(scale);
&gt; 
&gt; Ditto
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/DrawingAreaProxyImpl.cpp:69
&gt; &gt;  #if USE(ACCELERATED_COMPOSITING)
&gt; &gt; +    // LayerTreeHostProxy can be still referenced by paint node,
&gt; &gt; +    // so drawing area should be cleared to avoid derefencing pointer to deallocated object.
&gt; &gt; +#if USE(TEXTURE_MAPPER)
&gt; &gt; +    if (m_layerTreeHostProxy)
&gt; &gt; +        m_layerTreeHostProxy-&gt;setDrawingAreaProxy(0);
&gt; &gt; +#endif
&gt; 
&gt; Instead, we should have a detachFromDrawingArea() function in layerTreeHostProxy; In that function you can call purgeBackingStores. That way, you don&apos;t need to send a requestPurge from the render thread, which would make the bridge even simpler (all you really need is updateViewport).
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:54
&gt; &gt; +#if PLATFORM(QT)
&gt; &gt; +class LayerTreeHostProxyBase : public ThreadSafeRefCounted&lt;LayerTreeHostProxyBase&gt;, public WebCore::GraphicsLayerClient {
&gt; &gt; +};
&gt; &gt; +#else
&gt; &gt; +class LayerTreeHostProxyBase : public RefCounted&lt;LayerTreeHostProxyBase&gt;, public WebCore::GraphicsLayerClient {
&gt; &gt; +};
&gt; &gt; +#endif
&gt; 
&gt; Not sure we need to make this separation. For now let&apos;s just make it ThreadSafeRefCounted, and other ports that want to use it simply won&apos;t use the ThreadSafe aspect.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:56
&gt; &gt; +class LayerTreeHostProxy : public LayerTreeHostProxyBase {
&gt; 
&gt; If you remove the former #ifdef, this becomes unnecessary and you can simply subclass ThreadSafeRC&lt;&gt; and GraphicsLayerClient
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:85
&gt; &gt; +    void setPaintContentsScale(float scale) { m_paintContentsScale = scale; }
&gt; 
&gt; setContentsScale
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:149
&gt; &gt; +    float m_paintContentsScale;
&gt; 
&gt; m_contentsScale
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:157
&gt; &gt; +#ifndef NDEBUG
&gt; &gt; +    bool m_inPainting;
&gt; &gt; +#endif
&gt; 
&gt; Not needed, see other comments.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:158
&gt; &gt; +    RefPtr&lt;LayerTreeHostProxy&gt; m_layerTreeHostProxy;
&gt; 
&gt; Shouldn&apos;t this be a ThreadSafeRefPtr?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:247
&gt; &gt;  void LayerTreeHostProxy::didFireViewportUpdateTimer(Timer&lt;LayerTreeHostProxy&gt;*)
&gt; &gt;  {
&gt; &gt; -    updateViewport();
&gt; &gt; +    invokeMethodOnMainThread(&amp;WebKit::LayerTreeHostProxy::updateViewport);
&gt; &gt;  }
&gt; 
&gt; Is this timer still necessary? can&apos;t we just invoke the function from paintToCurrentGLContext ?

I think this timer forces Qt to do repaint.
If nothing other happens Qt stops repainting.
IMHO, something could be marked dirty and this would cause repaint, but now I don&apos;t know what can be marked and this could be fixed later.

&gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:251
&gt; &gt; +    ASSERT(!m_inPainting);
&gt; 
&gt; ASSERT(isMainThread());

For some reason I decided, that isMainThread is not defined on Mac. Is it?

&gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:657
&gt; &gt; +    invokeMethodOnMainThread(&amp;WebKit::LayerTreeHostProxy::requestPurgeBackingStores);
&gt; 
&gt; See previous comment, suggesting we request the PurgeBackingStores when detaching from the drawing-area, which saves us this cross-thread call.

Destruction of LayerTreeHostProxy is not the only case.
Paint node is deallocated when item removed from scene. This how we force invisible pages to drop resources for memory saving.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539550</commentid>
    <comment_count>14</comment_count>
      <attachid>123234</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-01-20 08:55:10 -0800</bug_when>
    <thetext>Comment on attachment 123234
Reworked patch.

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

The clean up of QQuickWebPage looks very nice, some other comments:

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:36
&gt; +    setClip(true);

Why is this needed, isn&apos;t the texture mapper overriding the clip anyway?

&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:93
&gt;&gt; +        return drawingArea-&gt;layerTreeHostProxy()-&gt;updatePaintNode(oldNode);
&gt; 
&gt; Add a layerTreeHostProxy() function to QQuickWebPagePrivate instead of doing this twice

I don&apos;t like the idea of the LayerTreeHost being referenced both on the scene graph and in WebKit.
The problem is when the WebView gets destroyed on the UI thread, the rendering thread must be able to continue. And delaying the destruction of the LayerTreeHostProxy alone until the rendering thread is done destroying the scene graph nodes seems wrong to me.

Isn&apos;t it possible to instead move all the texture mapper related objects/nodes ownership to the scene graph node that we attach on the scene graph, and leave the LayerTreeHostProxy referenced by the UI thread only? To put it in other words, all the texture mapper node tree would be owned only by the object we return from updatePaintNode.

&gt; Source/WebKit2/UIProcess/DrawingAreaProxyImpl.cpp:68
&gt; +        m_layerTreeHostProxy-&gt;setDrawingAreaProxy(0);

This is the kind of hacks that results on having a dual ownership across threads. It strongly smells future maintenance problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539571</commentid>
    <comment_count>15</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-01-20 09:19:27 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 123234 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123234&amp;action=review
&gt; 
&gt; The clean up of QQuickWebPage looks very nice, some other comments:
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:36
&gt; &gt; +    setClip(true);
&gt; 
&gt; Why is this needed, isn&apos;t the texture mapper overriding the clip anyway?

1. It doesn&apos;t work if display doesn&apos;t have stencil buffer.
2. I think we shouldn&apos;t have clipping it texturemapper, because Qt does it more effectively choosing between stencil/scissor clipping.
3. It seems there is problems with clipping when we have overshoot panning. At least I&apos;ve seen painting artefacts and switching to item clipping solves it.

&gt; &gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:93
&gt; &gt;&gt; +        return drawingArea-&gt;layerTreeHostProxy()-&gt;updatePaintNode(oldNode);
&gt; &gt; 
&gt; &gt; Add a layerTreeHostProxy() function to QQuickWebPagePrivate instead of doing this twice
&gt; 
&gt; I don&apos;t like the idea of the LayerTreeHost being referenced both on the scene graph and in WebKit.
&gt; The problem is when the WebView gets destroyed on the UI thread, the rendering thread must be able to continue. And delaying the destruction of the LayerTreeHostProxy alone until the rendering thread is done destroying the scene graph nodes seems wrong to me.
&gt; 
&gt; Isn&apos;t it possible to instead move all the texture mapper related objects/nodes ownership to the scene graph node that we attach on the scene graph, and leave the LayerTreeHostProxy referenced by the UI thread only? To put it in other words, all the texture mapper node tree would be owned only by the object we return from updatePaintNode.

Just tried to keep patch minimal. Agreed with Noam on irc that we should do real move.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540319</commentid>
    <comment_count>16</comment_count>
      <attachid>123234</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-22 15:00:37 -0800</bug_when>
    <thetext>Comment on attachment 123234
Reworked patch.

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

&gt; Source/WebKit2/ChangeLog:10
&gt; +        Added threaded painting support to Qt Webkit2.
&gt; +        All TextureMapper and GraphicsLayer objects are created on rendering
&gt; +        thread and can be accessed through rendering thread only.

Maybe we should make it clear that we are talking about the ui side (which I guess we are without looking at the actual code)

&gt; Source/WebKit2/ChangeLog:18
&gt; +        Layer updates are received through m_messagesToRenderer queue and
&gt; +        applied to QtLayerTreeSceneGraphNode tree in updatePaintNode, when UI thread
&gt; +        is synchronously locked by render thread, so no extra synchronization 
&gt; +        is necessary.
&gt; +        Messages from TextureMapper are delivered back through &quot;callOnMainThread&quot;
&gt; +        interface.
&gt; +        LayerTreeHostProxy is thread safe ref-counted and held alive until paint
&gt; +        node or drawing area destruction.

I would like some newlines to make reading the changelog easier. Or add these details below (in the file listing) like others do

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:88
&gt; +    typedef void (LayerTreeHostProxy::*MethodPtr)();

Wouldnt it be nicer to have this closer to where it is used?

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:116
&gt; +    void requestPurgeBackingStores();

sounds weird to me. what about requestBackingStorePurge? or requestGlobalBackingStorePurge? noam?

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:153
&gt; +struct LayerTreeHostProxyMethodRef {

Ref is a bit overloaded.. it is mostly used for the C classes. Maybe we should just call it Reference, or Handle ?

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:154
&gt; +    LayerTreeHostProxyMethodRef(LayerTreeHostProxy* layerTreeHostProxy, LayerTreeHostProxy::MethodPtr method) :

coding style. Add the : to the next line

&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSceneGraphNode.cpp:63
&gt; +// FIXME: temporary until Qt Scenegraph will support custom painting.
&gt; +char const* const* QtLayerTreeSceneGraphNode::ProxyMaterialShader::attributeNames() const

any bug number?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570333</commentid>
    <comment_count>17</comment_count>
      <attachid>130040</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-04 18:13:06 -0800</bug_when>
    <thetext>Created attachment 130040
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570335</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-04 18:16:05 -0800</bug_when>
    <thetext>Attachment 130040 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:101:  Extra space before ( in function call  [whitespace/parens] [4]
Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:108:  Extra space before ( in function call  [whitespace/parens] [4]
Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:115:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570355</commentid>
    <comment_count>19</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-04 19:02:51 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Attachment 130040 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:101:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:108:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:115:  Extra space before ( in function call  [whitespace/parens] [4]
&gt; Total errors found: 3 in 11 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

False positives. Filed https://bugs.webkit.org/show_bug.cgi?id=80231</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570618</commentid>
    <comment_count>20</comment_count>
      <attachid>130040</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-03-05 06:16:45 -0800</bug_when>
    <thetext>Comment on attachment 130040
Patch

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

&gt; Source/WebKit2/ChangeLog:20
&gt; +        Based on a previous patch by Viatcheslav Ostapenko.

I would leave out &quot;previous&quot;

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:86
&gt; +    QtSGWebPageNode* node = static_cast&lt;QtSGWebPageNode*&gt;(oldNode);

Maybe QtWebPageSGNode* sceneNode would be more clear?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:149
&gt; +    MutexLocker lock(m_paintNodeAccessMutex);

isn&apos;t access included in mutex terminology?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage_p_p.h:39
&gt; +    virtual void didDeleteSGWebPageNode();

didDeleteSceneGraphNode() ?

&gt;&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:101
&gt;&gt; +    static void call(PassRefPtr&lt;T&gt; objectToGuard, const Function&lt;void ()&gt;&amp; function)
&gt; 
&gt; Extra space before ( in function call  [whitespace/parens] [4]

why void () ? and not void() ?

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:335
&gt; +    // The pending tiles state is on its way for the screen, tell the web process to render the next one.

to* the screen?

&gt; Source/WebKit2/UIProcess/qt/QtSGWebPageNode.cpp:29
&gt; +    , m_contentsScale(1.)

I think WebKit style says to use just 1 here

&gt; Source/WebKit2/UIProcess/qt/QtSGWebPageNode.cpp:45
&gt; +void QtSGWebPageNode::setContentsScale(float s)

scale</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570632</commentid>
    <comment_count>21</comment_count>
      <attachid>130115</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-05 06:39:23 -0800</bug_when>
    <thetext>Created attachment 130115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570638</commentid>
    <comment_count>22</comment_count>
      <attachid>130115</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-03-05 06:44:26 -0800</bug_when>
    <thetext>Comment on attachment 130115
Patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:86
&gt; +    QtSGWebPageNode* sceneNode = static_cast&lt;QtSGWebPageNode*&gt;(oldNode);

You didn&apos;t like the QtWebPageSGNode suggestion? tronical?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570658</commentid>
    <comment_count>23</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-05 07:03:17 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 130115 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130115&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:86
&gt; &gt; +    QtSGWebPageNode* sceneNode = static_cast&lt;QtSGWebPageNode*&gt;(oldNode);
&gt; 
&gt; You didn&apos;t like the QtWebPageSGNode suggestion? tronical?

Ah, completely missed it. I don&apos;t really mind either way :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570661</commentid>
    <comment_count>24</comment_count>
      <attachid>130115</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-03-05 07:07:32 -0800</bug_when>
    <thetext>Comment on attachment 130115
Patch

r=me with comments given on irc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570671</commentid>
    <comment_count>25</comment_count>
      <attachid>130126</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-05 07:22:09 -0800</bug_when>
    <thetext>Created attachment 130126
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570692</commentid>
    <comment_count>26</comment_count>
      <attachid>130126</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-05 07:52:32 -0800</bug_when>
    <thetext>Comment on attachment 130126
Patch for landing

Clearing flags on attachment: 130126

Committed r109748: &lt;http://trac.webkit.org/changeset/109748&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570693</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-05 07:52:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570739</commentid>
    <comment_count>28</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-03-05 08:47:21 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 130126 [details])
&gt; Clearing flags on attachment: 130126
&gt; 
&gt; Committed r109748: &lt;http://trac.webkit.org/changeset/109748&gt;

Great ... You made all tests crash. :( Could you guys fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570761</commentid>
    <comment_count>29</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-05 09:13:07 -0800</bug_when>
    <thetext>&gt; Great ... You made all tests crash. :( Could you guys fix it?

No worries, it&apos;s part of the trade when making large changes like this :)
btw a better way to say this is &quot;This patch made all the tests crash&quot; rather than &quot;you made all the tests crash&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570835</commentid>
    <comment_count>30</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-05 10:48:34 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #26)
&gt; &gt; (From update of attachment 130126 [details] [details])
&gt; &gt; Clearing flags on attachment: 130126
&gt; &gt; 
&gt; &gt; Committed r109748: &lt;http://trac.webkit.org/changeset/109748&gt;
&gt; 
&gt; Great ... You made all tests crash. :( Could you guys fix it?

Can you please point me to the exact place in waterfall where this happens? I spent a while and still couldn&apos;t figure out a place where all tests crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571054</commentid>
    <comment_count>31</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-05 14:34:10 -0800</bug_when>
    <thetext>Apparently this code is still very unstable. I&apos;ll research and post a new patch later on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571527</commentid>
    <comment_count>32</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-03-05 23:16:17 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; &gt; Great ... You made all tests crash. :( Could you guys fix it?
&gt; 
&gt; No worries, it&apos;s part of the trade when making large changes like this :)
&gt; btw a better way to say this is &quot;This patch made all the tests crash&quot; rather than &quot;you made all the tests crash&quot;.

I&apos;m so sorry for being too offensive. Of course not you made all tests crash, but your patch which is absolutely independent from you. :) Next time I try to be more polite and less aggressive if &quot;a patch contributed by you&quot; break anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571528</commentid>
    <comment_count>33</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-03-05 23:17:43 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #28)
&gt; &gt; (In reply to comment #26)
&gt; &gt; &gt; (From update of attachment 130126 [details] [details] [details])
&gt; &gt; &gt; Clearing flags on attachment: 130126
&gt; &gt; &gt; 
&gt; &gt; &gt; Committed r109748: &lt;http://trac.webkit.org/changeset/109748&gt;
&gt; &gt; 
&gt; &gt; Great ... You made all tests crash. :( Could you guys fix it?
&gt; 
&gt; Can you please point me to the exact place in waterfall where this happens? I spent a while and still couldn&apos;t figure out a place where all tests crash.

Sure, http://lmgtfy.com/?q=qtwebkit+buildbots (first hit)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571530</commentid>
    <comment_count>34</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-03-05 23:18:46 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; Apparently this code is still very unstable. I&apos;ll research and post a new patch later on.

Otherwise thanks for this rollout - http://trac.webkit.org/changeset/109748 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574585</commentid>
    <comment_count>35</comment_count>
      <attachid>130973</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-03-08 21:19:28 -0800</bug_when>
    <thetext>Created attachment 130973
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574618</commentid>
    <comment_count>36</comment_count>
      <attachid>130973</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-08 22:02:21 -0800</bug_when>
    <thetext>Comment on attachment 130973
Updated patch

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

Something about this doesn&apos;t feel right. I understand why the sequence of things and why it&apos;s needed for thread-safety, but the class abstraction seems a bit over-complicated. I have only minor suggestions right but let me look at it more thoroughly tomorrow to see if something can be simplified.
I&apos;m afraid that right now complex thread-safe code like this would be very prone to bugs that are hard to detect or fix.

&gt; Source/WebKit2/ChangeLog:101
&gt; +        (WebKit::QtLayerTreeSGNode::QtLayerTreeSGNode):

QtWebPageSGNode

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:69
&gt; +    QSGNode* updatePaintNode(QSGNode* oldNode);

Put in PLATFORM(QT)

&gt; Source/WebKit2/UIProcess/LayerTreePaintData.h:49
&gt; +    void paintToCurrentGLContext(const WebCore::TransformationMatrix&amp;, float, const WebCore::FloatRect&amp;);

Spell out:
float opacity
FloatRect clip

&gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:163
&gt; +void LayerTreeHostProxy::setPaintScale(float scale)

setScale

&gt; Source/WebKit2/UIProcess/qt/LayerTreePaintDataQt.cpp:22
&gt; +#include &quot;LayerTreePaintData.h&quot;

Let&apos;s call it WebLayerTreeRenderer

&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:22
&gt; +#if USE(ACCELERATED_COMPOSITING)

This is not needed

&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:43
&gt; +    QMatrix4x4 m;

m -&gt; matrix

&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:46
&gt; +    m.scale(m_layerTreePaintData-&gt;scale());

Please explain

&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:56
&gt; +static QPointF toViewPortCoordinates(const QPointF&amp; point, const QRectF&amp; viewport)

ViewPort -&gt; Viewport

&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:59
&gt; +    return QPointF((point.x() + 1) * viewport.width() * 0.5,
&gt; +                   viewport.height() - (point.y() + 1) * viewport.height() * 0.5);

Comment

&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:85
&gt; +        QMatrix4x4 m = *(state.projectionMatrix);

Hmmm... we&apos;re multiplying by the projectionMatrix and then applying toViewPortCoordinates which cancels it out. Seems like this is not 100% thought out.

&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:95
&gt; +            currentClip.setTopLeft(toViewPortCoordinates(m.map(clipRect.topLeft()), viewportRect));
&gt; +            adjustBoundingRect(currentClip, toViewPortCoordinates(m.map(clipRect.topRight()), viewportRect));
&gt; +            adjustBoundingRect(currentClip, toViewPortCoordinates(m.map(clipRect.bottomLeft()), viewportRect));
&gt; +            adjustBoundingRect(currentClip, toViewPortCoordinates(m.map(clipRect.bottomRight()), viewportRect));

This looks very much like a rect.unite... why not just do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574621</commentid>
    <comment_count>37</comment_count>
      <attachid>130973</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-08 22:04:04 -0800</bug_when>
    <thetext>Comment on attachment 130973
Updated patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:115
&gt; +        d-&gt;webPageProxy-&gt;drawingArea()-&gt;layerTreeHostProxy()-&gt;setPaintScale(scale);

Maybe we should just expose setTransform instead of setPaintScale</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574639</commentid>
    <comment_count>38</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-03-08 22:25:47 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 130973 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130973&amp;action=review
&gt; 
&gt; Something about this doesn&apos;t feel right. I understand why the sequence of things and why it&apos;s needed for thread-safety, but the class abstraction seems a bit over-complicated. I have only minor suggestions right but let me look at it more thoroughly tomorrow to see if something can be simplified.
&gt; I&apos;m afraid that right now complex thread-safe code like this would be very prone to bugs that are hard to detect or fix.

It is, actually, not more complex, then the previous implementation. 
It looks big change because of things moved, but, IMHO, it simplifies things a bit.
It was Jocelyns suggestion from irc talk to move paint objects to the separate class. Now it divides clearly, what can be used from paint thread and what from main thread with few exceptions.

&gt; &gt; Source/WebKit2/ChangeLog:101
&gt; &gt; +        (WebKit::QtLayerTreeSGNode::QtLayerTreeSGNode):
&gt; 
&gt; QtWebPageSGNode
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:69
&gt; &gt; +    QSGNode* updatePaintNode(QSGNode* oldNode);
&gt; 
&gt; Put in PLATFORM(QT)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/LayerTreePaintData.h:49
&gt; &gt; +    void paintToCurrentGLContext(const WebCore::TransformationMatrix&amp;, float, const WebCore::FloatRect&amp;);
&gt; 
&gt; Spell out:
&gt; float opacity
&gt; FloatRect clip

Style check will complain. I hate myself declaration without parameter names.

&gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:163
&gt; &gt; +void LayerTreeHostProxy::setPaintScale(float scale)
&gt; 
&gt; setScale

There is another scale which called contentScale. 

&gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreePaintDataQt.cpp:22
&gt; &gt; +#include &quot;LayerTreePaintData.h&quot;
&gt; 
&gt; Let&apos;s call it WebLayerTreeRenderer
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:22
&gt; &gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; 
&gt; This is not needed
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:43
&gt; &gt; +    QMatrix4x4 m;
&gt; 
&gt; m -&gt; matrix

Will conflict with matrix method.

&gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:46
&gt; &gt; +    m.scale(m_layerTreePaintData-&gt;scale());
&gt; 
&gt; Please explain

I would be happy to remove this matrix scaling. I don&apos;t understand, why we don&apos;t use item scaling and apply scale manually. Commit that introduced this manual scaling doesn&apos;t explain it clearly. 

&gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:56
&gt; &gt; +static QPointF toViewPortCoordinates(const QPointF&amp; point, const QRectF&amp; viewport)
&gt; 
&gt; ViewPort -&gt; Viewport
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:59
&gt; &gt; +    return QPointF((point.x() + 1) * viewport.width() * 0.5,
&gt; &gt; +                   viewport.height() - (point.y() + 1) * viewport.height() * 0.5);
&gt; 
&gt; Comment
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:85
&gt; &gt; +        QMatrix4x4 m = *(state.projectionMatrix);
&gt; 
&gt; Hmmm... we&apos;re multiplying by the projectionMatrix and then applying toViewPortCoordinates which cancels it out. Seems like this is not 100% thought out.

I just looked through scissor clipping code in SG and used it as a sample.
So far this works fine for rectangular clippings, but has to be fixed in any case for non-rectangular clippings.

&gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:95
&gt; &gt; +            currentClip.setTopLeft(toViewPortCoordinates(m.map(clipRect.topLeft()), viewportRect));
&gt; &gt; +            adjustBoundingRect(currentClip, toViewPortCoordinates(m.map(clipRect.topRight()), viewportRect));
&gt; &gt; +            adjustBoundingRect(currentClip, toViewPortCoordinates(m.map(clipRect.bottomLeft()), viewportRect));
&gt; &gt; +            adjustBoundingRect(currentClip, toViewPortCoordinates(m.map(clipRect.bottomRight()), viewportRect));
&gt; 
&gt; This looks very much like a rect.unite... why not just do that?

After mapping of coordinates through matrix the clipRect could be rotated and unite will not work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574641</commentid>
    <comment_count>39</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-03-08 22:27:15 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 130973 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130973&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:115
&gt; &gt; +        d-&gt;webPageProxy-&gt;drawingArea()-&gt;layerTreeHostProxy()-&gt;setPaintScale(scale);
&gt; 
&gt; Maybe we should just expose setTransform instead of setPaintScale

Oh no!
This will require mutexes which I&apos;d like to avoid.
I&apos;d better revert the patch which makes manual scaling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574852</commentid>
    <comment_count>40</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-09 06:23:27 -0800</bug_when>
    <thetext>&gt; Oh no!
&gt; This will require mutexes which I&apos;d like to avoid.
That&apos;s the kind of stuff you need to put in comments :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574855</commentid>
    <comment_count>41</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-09 06:29:29 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; (In reply to comment #36)
&gt; &gt; (From update of attachment 130973 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130973&amp;action=review
&gt; &gt; 
&gt; &gt; Something about this doesn&apos;t feel right. I understand why the sequence of things and why it&apos;s needed for thread-safety, but the class abstraction seems a bit over-complicated. I have only minor suggestions right but let me look at it more thoroughly tomorrow to see if something can be simplified.
&gt; &gt; I&apos;m afraid that right now complex thread-safe code like this would be very prone to bugs that are hard to detect or fix.
&gt; 
&gt; It is, actually, not more complex, then the previous implementation. 
&gt; It looks big change because of things moved, but, IMHO, it simplifies things a bit.
&gt; It was Jocelyns suggestion from irc talk to move paint objects to the separate class. Now it divides clearly, what can be used from paint thread and what from main thread with few exceptions.

&gt; &gt; 
&gt; &gt; Spell out:
&gt; &gt; float opacity
&gt; &gt; FloatRect clip
&gt; 
&gt; Style check will complain. I hate myself declaration without parameter names.
Style check will only complain if you do something like FloatRect rect or IntSize size.

&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/qt/LayerTreeHostProxyQt.cpp:163
&gt; &gt; &gt; +void LayerTreeHostProxy::setPaintScale(float scale)
&gt; &gt; 
&gt; &gt; setScale
&gt; 
&gt; There is another scale which called contentScale. 
setRenderScale

&gt; &gt; m -&gt; matrix
&gt; 
&gt; Will conflict with matrix method.
Then use renderMatrix.

&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:46
&gt; &gt; &gt; +    m.scale(m_layerTreePaintData-&gt;scale());
&gt; &gt; 
&gt; &gt; Please explain
&gt; 
&gt; I would be happy to remove this matrix scaling. I don&apos;t understand, why we don&apos;t use item scaling and apply scale manually. Commit that introduced this manual scaling doesn&apos;t explain it clearly. 
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:56
&gt; &gt; &gt; +static QPointF toViewPortCoordinates(const QPointF&amp; point, const QRectF&amp; viewport)
&gt; &gt; 
&gt; &gt; ViewPort -&gt; Viewport
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:59
&gt; &gt; &gt; +    return QPointF((point.x() + 1) * viewport.width() * 0.5,
&gt; &gt; &gt; +                   viewport.height() - (point.y() + 1) * viewport.height() * 0.5);
&gt; &gt; 
&gt; &gt; Comment
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:85
&gt; &gt; &gt; +        QMatrix4x4 m = *(state.projectionMatrix);
&gt; &gt; 
&gt; &gt; Hmmm... we&apos;re multiplying by the projectionMatrix and then applying toViewPortCoordinates which cancels it out. Seems like this is not 100% thought out.
&gt; 
&gt; I just looked through scissor clipping code in SG and used it as a sample.
Put that in a comment.

&gt; So far this works fine for rectangular clippings, but has to be fixed in any case for non-rectangular clippings.
Add a FIXME

&gt; &gt; &gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:95
&gt; &gt; &gt; +            currentClip.setTopLeft(toViewPortCoordinates(m.map(clipRect.topLeft()), viewportRect));
&gt; &gt; &gt; +            adjustBoundingRect(currentClip, toViewPortCoordinates(m.map(clipRect.topRight()), viewportRect));
&gt; &gt; &gt; +            adjustBoundingRect(currentClip, toViewPortCoordinates(m.map(clipRect.bottomLeft()), viewportRect));
&gt; &gt; &gt; +            adjustBoundingRect(currentClip, toViewPortCoordinates(m.map(clipRect.bottomRight()), viewportRect));
&gt; &gt; 
&gt; &gt; This looks very much like a rect.unite... why not just do that?
&gt; 
&gt; After mapping of coordinates through matrix the clipRect could be rotated and unite will not work.
unite(m.mapRect(...))

I need to investigate this code; It seems too much like a black box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574859</commentid>
    <comment_count>42</comment_count>
      <attachid>130973</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-09 06:43:46 -0800</bug_when>
    <thetext>Comment on attachment 130973
Updated patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:115
&gt;&gt;&gt; +        d-&gt;webPageProxy-&gt;drawingArea()-&gt;layerTreeHostProxy()-&gt;setPaintScale(scale);
&gt;&gt; 
&gt;&gt; Maybe we should just expose setTransform instead of setPaintScale
&gt; 
&gt; Oh no!
&gt; This will require mutexes which I&apos;d like to avoid.
&gt; I&apos;d better revert the patch which makes manual scaling.

I don&apos;t see how having one mutex to protect the matrix when committing the contentScale is an issue.

&gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:95
&gt;&gt;&gt;&gt; +            adjustBoundingRect(currentClip, toViewPortCoordinates(m.map(clipRect.bottomRight()), viewportRect));
&gt;&gt;&gt; 
&gt;&gt;&gt; This looks very much like a rect.unite... why not just do that?
&gt;&gt; 
&gt;&gt; After mapping of coordinates through matrix the clipRect could be rotated and unite will not work.
&gt; 
&gt; unite(m.mapRect(...))
&gt; 
&gt; I need to investigate this code; It seems too much like a black box.

Also, couldn&apos;t we use the existing scissor-box instead of regenerating it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574929</commentid>
    <comment_count>43</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-03-09 09:04:35 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; &gt; Oh no!
&gt; &gt; This will require mutexes which I&apos;d like to avoid.
&gt; That&apos;s the kind of stuff you need to put in comments :)

Actually, there is comment about this near setScale in LayerTreePaintData.cpp .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574939</commentid>
    <comment_count>44</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-03-09 09:17:53 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; (From update of attachment 130973 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130973&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:115
&gt; &gt;&gt;&gt; +        d-&gt;webPageProxy-&gt;drawingArea()-&gt;layerTreeHostProxy()-&gt;setPaintScale(scale);
&gt; &gt;&gt; 
&gt; &gt;&gt; Maybe we should just expose setTransform instead of setPaintScale
&gt; &gt; 
&gt; &gt; Oh no!
&gt; &gt; This will require mutexes which I&apos;d like to avoid.
&gt; &gt; I&apos;d better revert the patch which makes manual scaling.
&gt; 
&gt; I don&apos;t see how having one mutex to protect the matrix when committing the contentScale is an issue.

From my experience it is better to avoid mutexes for high performance and mobile systems. In this case atomic operation works just fine.

&gt; &gt;&gt;&gt;&gt; Source/WebKit2/UIProcess/qt/QtLayerTreeSGNode.cpp:95
&gt; &gt;&gt;&gt;&gt; +            adjustBoundingRect(currentClip, toViewPortCoordinates(m.map(clipRect.bottomRight()), viewportRect));
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; This looks very much like a rect.unite... why not just do that?
&gt; &gt;&gt; 
&gt; &gt;&gt; After mapping of coordinates through matrix the clipRect could be rotated and unite will not work.
&gt; &gt; 
&gt; &gt; unite(m.mapRect(...))
&gt; &gt; 
&gt; &gt; I need to investigate this code; It seems too much like a black box.
&gt; 
&gt; Also, couldn&apos;t we use the existing scissor-box instead of regenerating it?

On internal branch I just use clipping already created by scene graph renderer and it works fine (except for some bugs in clipping update that are already fixed on Qt trunk), but in general case we do not know what renderer is used and cannot rely on renderer scissor/stencil, so we have to generate clipping ourselves until further clarification.
BTW, I cleaned up clipping rect calculation based on your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>574955</commentid>
    <comment_count>45</comment_count>
      <attachid>131047</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-03-09 09:37:51 -0800</bug_when>
    <thetext>Created attachment 131047
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575522</commentid>
    <comment_count>46</comment_count>
      <attachid>131174</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-03-10 08:35:19 -0800</bug_when>
    <thetext>Created attachment 131174
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575525</commentid>
    <comment_count>47</comment_count>
      <attachid>131174</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-10 09:07:15 -0800</bug_when>
    <thetext>Comment on attachment 131174
Updated patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Add conversions from/to Qt QMatrix4x4. Used by Qt WebKit2

Add TransformationMatrix conversions

&gt; Source/WebKit2/ChangeLog:10
&gt; +        painting objects are moved to separate class WebLayerTreeRenderer. 

moved to a separate class called WebLayerTreeRenderer

&gt; Source/WebKit2/ChangeLog:14
&gt; +        from paint thread only.

from QtScenegraph&apos;s paint thread only.

&gt; Source/WebKit2/ChangeLog:18
&gt; +        Layer tree updates from render queue are fetched in
&gt; +        updatePaintNode call stack when main thread is locked.
&gt; +        Messages from paint thread to web process are passed through
&gt; +        MainThreadGuardedInvoker call gate (implemented by Noam Rosenthal).

Weird line endings...
(implemented by Noam Rosenthal and previously reviewed by Kenneth Rohde Christiansen)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:96
&gt; +        QMatrix4x4 renderMatirx = matrix() ? *matrix() : QMatrix4x4();

Matirx -&gt; Matrix

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:171
&gt; +        // This means that LayerTreeHostProxy was deleted and recreated
&gt; +        // while old paint node survived. This could happen if web process
&gt; +        // have crashed. In this case we have to recreate paint node.

Can be a few less lines... Try wrapping at 80 or 100

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.cpp:90
&gt; +

Extra space

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:70
&gt; +    WebLayerTreeRenderer* webLayerTreeRenderer() const { return m_webLayerTreeRenderer.get(); }

webLayerTreeRenderer() -&gt; layerTreeRenderer()

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.h:76
&gt; +    RefPtr&lt;WebLayerTreeRenderer&gt; m_webLayerTreeRenderer;

m_webLayerTreeRender -&gt; m_renderer

&gt; Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:379
&gt; +

extra line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575530</commentid>
    <comment_count>48</comment_count>
      <attachid>131174</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-10 09:47:21 -0800</bug_when>
    <thetext>Comment on attachment 131174
Updated patch

Attachment 131174 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11935140

New failing tests:
perf/array-reverse.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575531</commentid>
    <comment_count>49</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-10 09:53:23 -0800</bug_when>
    <thetext>(In reply to comment #48)
&gt; (From update of attachment 131174 [details])
&gt; Attachment 131174 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/11935140
&gt; 
&gt; New failing tests:
&gt; perf/array-reverse.html

Flaky, unrelated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575551</commentid>
    <comment_count>50</comment_count>
      <attachid>131181</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-03-10 11:59:17 -0800</bug_when>
    <thetext>Created attachment 131181
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575616</commentid>
    <comment_count>51</comment_count>
      <attachid>131181</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-10 19:36:33 -0800</bug_when>
    <thetext>Comment on attachment 131181
Updated patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:114
&gt; +
&gt; +    void setScale(float scale) { m_scale = scale; }

Empty line after the function instead of before

&gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.cpp:50
&gt; +    m_renderer-&gt;syncRemoteContent();

I think this line needs to be removed; We should only call syncRemoteContent from updateNode, and not from render; otherwise we might have a thread issue with m_renderQueue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575631</commentid>
    <comment_count>52</comment_count>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-03-10 21:30:25 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; (From update of attachment 131181 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131181&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp:114
&gt; &gt; +
&gt; &gt; +    void setScale(float scale) { m_scale = scale; }
&gt; 
&gt; Empty line after the function instead of before
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/LayerTreeHostProxy.cpp:50
&gt; &gt; +    m_renderer-&gt;syncRemoteContent();
&gt; 
&gt; I think this line needs to be removed; We should only call syncRemoteContent from updateNode, and not from render; otherwise we might have a thread issue with m_renderQueue.

We don&apos;t call LayerTreeHostProxy::paintToCurrentGLContext at all. Our painting calls rendering directly.
I just left it there if somebody else (EFL?) uses it. This way it works exactly as before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575632</commentid>
    <comment_count>53</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-03-10 21:36:33 -0800</bug_when>
    <thetext>&gt; &gt; I think this line needs to be removed; We should only call syncRemoteContent from updateNode, and not from render; otherwise we might have a thread issue with m_renderQueue.
&gt; 
&gt; We don&apos;t call LayerTreeHostProxy::paintToCurrentGLContext at all. Our painting calls rendering directly.
&gt; I just left it there if somebody else (EFL?) uses it. This way it works exactly as before.

Ah, ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575636</commentid>
    <comment_count>54</comment_count>
      <attachid>131204</attachid>
    <who name="Viatcheslav Ostapenko">ostap73</who>
    <bug_when>2012-03-10 22:00:52 -0800</bug_when>
    <thetext>Created attachment 131204
Patch for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575654</commentid>
    <comment_count>55</comment_count>
      <attachid>131204</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-11 00:26:24 -0800</bug_when>
    <thetext>Comment on attachment 131204
Patch for commit.

Clearing flags on attachment: 131204

Committed r110388: &lt;http://trac.webkit.org/changeset/110388&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575655</commentid>
    <comment_count>56</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-11 00:26:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123189</attachid>
            <date>2012-01-19 13:58:35 -0800</date>
            <delta_ts>2012-01-19 14:28:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>threaded_painting_02.diff</filename>
            <type>text/plain</type>
            <size>28671</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9U
YXJnZXQucHJpCmluZGV4IDM1OTgzZjAuLjNmMzQ3YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMjU1LDYg
KzI1NSw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFu
YWdlclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuaCBcCiAg
ICAgVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmggXAorICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVI
b3N0UHJveHlOb2RlUXQuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oIFwKICAg
ICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggXAogICAgIFVJUHJvY2Vzcy9x
dC9RdEdlc3R1cmVSZWNvZ25pemVyLmggXApAQCAtNTg1LDYgKzU4Niw3IEBAIFNPVVJDRVMgKz0g
XAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVByb2Nl
c3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcCBc
CisgICAgVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVj
b2duaXplci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2VicGFnZS5jcHAKaW5kZXggYThjMTcxOC4uYzJhNjJlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yNywxNCArMjcs
MTMgQEAKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3BfcC5oIgogI2luY2x1ZGUgInFxdWlja3dl
YnZpZXdfcC5oIgogI2luY2x1ZGUgPFF0UXVpY2svUVF1aWNrQ2FudmFzPgotI2luY2x1ZGUgPFF0
UXVpY2svUVNHR2VvbWV0cnlOb2RlPgotI2luY2x1ZGUgPFF0UXVpY2svUVNHTWF0ZXJpYWw+CiAK
IFFRdWlja1dlYlBhZ2U6OlFRdWlja1dlYlBhZ2UoUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVt
KQogICAgIDogUVF1aWNrSXRlbSh2aWV3cG9ydEl0ZW0pCiAgICAgLCBkKG5ldyBRUXVpY2tXZWJQ
YWdlUHJpdmF0ZSh0aGlzLCB2aWV3cG9ydEl0ZW0pKQogewogICAgIHNldEZsYWcoSXRlbUhhc0Nv
bnRlbnRzKTsKKyAgICBzZXRDbGlwKHRydWUpOwogCiAgICAgLy8gV2UgZG8gdGhlIHRyYW5zZm9y
bSBmcm9tIHRoZSB0b3AgbGVmdCBzbyB0aGUgdmlld3BvcnQgY2FuIGFzc3VtZSB0aGUgcG9zaXRp
b24gMCwgMAogICAgIC8vIGlzIGFsd2F5cyB3aGVyZSByZW5kZXJpbmcgc3RhcnRzLgpAQCAtNjgs
NyArNjcsNiBAQCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6UVF1aWNrV2ViUGFnZVByaXZhdGUoUVF1
aWNrV2ViUGFnZSogcSwgUVF1aWNrV2ViVmlldyogdmlldwogICAgICwgd2ViUGFnZVByb3h5KDAp
CiAgICAgLCBzZ1VwZGF0ZVF1ZXVlKHEpCiAgICAgLCBwYWludGluZ0lzSW5pdGlhbGl6ZWQoZmFs
c2UpCi0gICAgLCBtX3BhaW50Tm9kZSgwKQogICAgICwgY29udGVudFNjYWxlKDEpCiAgICAgLCB1
c2VUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIoZmFsc2UpCiB7CkBAIC04MCwxOCArNzgsNiBA
QCB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjppbml0aWFsaXplKFdlYktpdDo6V2ViUGFnZVBy
b3h5KiB3ZWJQYWdlUHJveHkpCiAgICAgZXZlbnRIYW5kbGVyLnJlc2V0KG5ldyBRdFdlYlBhZ2VF
dmVudEhhbmRsZXIodG9BUEkod2ViUGFnZVByb3h5KSwgcSwgdmlld3BvcnRJdGVtKSk7CiB9CiAK
LXN0YXRpYyBmbG9hdCBjb21wdXRlRWZmZWN0aXZlT3BhY2l0eShjb25zdCBRUXVpY2tJdGVtKiBp
dGVtKQotewotICAgIGlmICghaXRlbSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBmbG9hdCBv
cGFjaXR5ID0gaXRlbS0+b3BhY2l0eSgpOwotICAgIGlmIChvcGFjaXR5IDwgMC4wMSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gb3BhY2l0eSAqIGNvbXB1dGVFZmZlY3RpdmVPcGFj
aXR5KGl0ZW0tPnBhcmVudEl0ZW0oKSk7Ci19Ci0KIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6
OnNldERyYXdpbmdBcmVhU2l6ZShjb25zdCBRU2l6ZSYgc2l6ZSkKIHsKICAgICBEcmF3aW5nQXJl
YVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKQEAgLTEw
MCwxMzQgKzg2LDEzIEBAIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnNldERyYXdpbmdBcmVh
U2l6ZShjb25zdCBRU2l6ZSYgc2l6ZSkKICAgICBkcmF3aW5nQXJlYS0+c2V0U2l6ZShXZWJDb3Jl
OjpJbnRTaXplKHNpemUpLCBXZWJDb3JlOjpJbnRTaXplKCkpOwogfQogCi12b2lkIFFRdWlja1dl
YlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCgpCi17Ci0gICAgaWYgKCFxLT5p
c1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBxLT5pdGVtVHJhbnNmb3JtKDAsIDApOwotICAgIHRyYW5zZm9ybS5zY2FsZShjb250ZW50U2Nh
bGUsIGNvbnRlbnRTY2FsZSk7Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0gY29tcHV0ZUVmZmVjdGl2
ZU9wYWNpdHkocSk7Ci0gICAgUVJlY3RGIGNsaXBSZWN0ID0gcS0+cGFyZW50SXRlbSgpLT5tYXBS
ZWN0VG9TY2VuZShxLT5wYXJlbnRJdGVtKCktPmJvdW5kaW5nUmVjdCgpKTsKLQotICAgIGlmICgh
Y2xpcFJlY3QuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEcmF3aW5nQXJlYVBy
b3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBpZiAo
IWRyYXdpbmdBcmVhKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBu
byBHTCBlcnJvciBjb2RlIHN0YXlzIGZyb20gcHJldmlvdXMgUVQgb3BlcmF0aW9ucy4KLSAgICBn
bEdldEVycm9yKCk7Ci0KLSAgICBnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIEFTU0VS
VCghZ2xHZXRFcnJvcigpKTsKLSAgICBjb25zdCBpbnQgbGVmdCA9IGNsaXBSZWN0LmxlZnQoKTsK
LSAgICBjb25zdCBpbnQgd2lkdGggPSBjbGlwUmVjdC53aWR0aCgpOwotICAgIGNvbnN0IGludCBi
b3R0b20gPSBxLT5jYW52YXMoKS0+aGVpZ2h0KCkgLSAoY2xpcFJlY3QuYm90dG9tKCkgKyAxKTsK
LSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gY2xpcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICBnbFNjaXNz
b3IobGVmdCwgYm90dG9tLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBBU1NFUlQoIWdsR2V0RXJyb3Io
KSk7Ci0KLSAgICBkcmF3aW5nQXJlYS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3Jt
LCBvcGFjaXR5KTsKLQotICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIEFTU0VS
VCghZ2xHZXRFcnJvcigpKTsKLX0KLQotc3RydWN0IFBhZ2VQcm94eU1hdGVyaWFsOwotc3RydWN0
IFBhZ2VQcm94eU5vZGU7Ci0KLS8vIEZJWE1FOiB0ZW1wb3JhcnkgdW50aWwgUXQgU2NlbmVncmFw
aCB3aWxsIHN1cHBvcnQgY3VzdG9tIHBhaW50aW5nLgotc3RydWN0IFBhZ2VQcm94eU1hdGVyaWFs
U2hhZGVyIDogcHVibGljIFFTR01hdGVyaWFsU2hhZGVyIHsKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlU3RhdGUoY29uc3QgUmVuZGVyU3RhdGUmIHN0YXRlLCBRU0dNYXRlcmlhbCogbmV3TWF0ZXJp
YWwsIFFTR01hdGVyaWFsKiBvbGRNYXRlcmlhbCk7Ci0gICAgdmlydHVhbCBjaGFyIGNvbnN0KiBj
b25zdCogYXR0cmlidXRlTmFtZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljIGNoYXIg
Y29uc3QqIGNvbnN0IGF0dHJbXSA9IHsgInZlcnRleCIsIDAgfTsKLSAgICAgICAgcmV0dXJuIGF0
dHI7Ci0gICAgfQotCi0gICAgLy8gdmVydGV4U2hhZGVyIGFuZCBmcmFnbWVudFNoYWRlciBhcmUg
bm8tb3Agc2hhZGVycy4KLSAgICAvLyBBbGwgcmVhbCBwYWludGluZyBpcyBnb25lIGJ5IFRleHR1
cmVNYXBwZXIgdGhyb3VnaCBMYXllclRyZWVIb3N0UHJveHkuCi0gICAgdmlydHVhbCBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICJhdHRyaWJ1
dGUgaGlnaHAgdmVjNCB2ZXJ0ZXg7IFxuIgotICAgICAgICAgICAgICAgInZvaWQgbWFpbigpIHsg
Z2xfUG9zaXRpb24gPSB2ZXJ0ZXg7IH0iOwotICAgIH0KLQotICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICJ2b2lkIG1h
aW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsgfSI7Ci0gICAg
fQotfTsKLQotc3RydWN0IFBhZ2VQcm94eU1hdGVyaWFsIDogcHVibGljIFFTR01hdGVyaWFsIHsK
LSAgICBQYWdlUHJveHlNYXRlcmlhbChQYWdlUHJveHlOb2RlKiBub2RlKSA6IG1fbm9kZShub2Rl
KSB7IH0KLQotICAgIFFTR01hdGVyaWFsVHlwZSogdHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBzdGF0aWMgUVNHTWF0ZXJpYWxUeXBlIHR5cGU7Ci0gICAgICAgIHJldHVybiAmdHlwZTsKLSAg
ICB9Ci0KLSAgICBRU0dNYXRlcmlhbFNoYWRlciogY3JlYXRlU2hhZGVyKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBuZXcgUGFnZVByb3h5TWF0ZXJpYWxTaGFkZXI7Ci0gICAgfQotCi0g
ICAgUGFnZVByb3h5Tm9kZSogbV9ub2RlOwotfTsKLQotc3RydWN0IFBhZ2VQcm94eU5vZGUgOiBw
dWJsaWMgUVNHR2VvbWV0cnlOb2RlIHsKLSAgICBQYWdlUHJveHlOb2RlKFFRdWlja1dlYlBhZ2VQ
cml2YXRlKiBwYWdlKSA6Ci0gICAgICAgIG1fcGFnZVByaXZhdGUocGFnZSkKLSAgICAgICwgbV9t
YXRlcmlhbCh0aGlzKQotICAgICAgLCBtX2dlb21ldHJ5KFFTR0dlb21ldHJ5OjpkZWZhdWx0QXR0
cmlidXRlc19Qb2ludDJEKCksIDQpCi0gICAgewotICAgICAgICBzZXRHZW9tZXRyeSgmbV9nZW9t
ZXRyeSk7Ci0gICAgICAgIHNldE1hdGVyaWFsKCZtX21hdGVyaWFsKTsKLSAgICB9Ci0KLSAgICB+
UGFnZVByb3h5Tm9kZSgpCi0gICAgewotICAgICAgICBpZiAobV9wYWdlUHJpdmF0ZSkKLSAgICAg
ICAgICAgIG1fcGFnZVByaXZhdGUtPnJlc2V0UGFpbnROb2RlKCk7Ci0gICAgfQotCi0gICAgUVF1
aWNrV2ViUGFnZVByaXZhdGUqIG1fcGFnZVByaXZhdGU7Ci0gICAgUGFnZVByb3h5TWF0ZXJpYWwg
bV9tYXRlcmlhbDsKLSAgICBRU0dHZW9tZXRyeSBtX2dlb21ldHJ5OwotfTsKLQotdm9pZCBQYWdl
UHJveHlNYXRlcmlhbFNoYWRlcjo6dXBkYXRlU3RhdGUoY29uc3QgUmVuZGVyU3RhdGUmIHN0YXRl
LCBRU0dNYXRlcmlhbCogbmV3TWF0ZXJpYWwsIFFTR01hdGVyaWFsKiBvbGRNYXRlcmlhbCkKLXsK
LSAgICBpZiAoIW5ld01hdGVyaWFsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlUHJveHlO
b2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8UGFnZVByb3h5TWF0ZXJpYWwqPihuZXdNYXRlcmlhbCkt
Pm1fbm9kZTsKLSAgICAvLyBGSVhNRTogTm9ybWFsbHkgd2Ugd291bGRuJ3QgcGFpbnQgaW5zaWRl
IFFTR01hdGVyaWFsU2hhZGVyOjp1cGRhdGVTdGF0ZSwKLSAgICAvLyBidXQgdGhpcyBpcyBhIHRl
bXBvcmFyeSBoYWNrIHVudGlsIGN1c3RvbSBwYWludCBub2RlcyBhcmUgYXZhaWxhYmxlLgotICAg
IGlmIChub2RlLT5tX3BhZ2VQcml2YXRlKQotICAgICAgICBub2RlLT5tX3BhZ2VQcml2YXRlLT5w
YWludFRvQ3VycmVudEdMQ29udGV4dCgpOwotfQotCiBRU0dOb2RlKiBRUXVpY2tXZWJQYWdlOjp1
cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSwgVXBkYXRlUGFpbnROb2RlRGF0YSopCiB7
Ci0gICAgaWYgKCEoZmxhZ3MoKSAmIEl0ZW1IYXNDb250ZW50cykpIHsKLSAgICAgICAgaWYgKG9s
ZE5vZGUpCi0gICAgICAgICAgICBkZWxldGUgb2xkTm9kZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgUGFnZVByb3h5Tm9kZSogcHJveHlOb2RlID0gc3RhdGljX2Nhc3Q8UGFnZVBy
b3h5Tm9kZSo+KG9sZE5vZGUpOwotICAgIGlmICghcHJveHlOb2RlKSB7Ci0gICAgICAgIHByb3h5
Tm9kZSA9IG5ldyBQYWdlUHJveHlOb2RlKGQpOwotICAgICAgICBkLT5tX3BhaW50Tm9kZSA9IHBy
b3h5Tm9kZTsKLSAgICB9CisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBkLT53
ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7CisgICAgaWYgKGRyYXdpbmdBcmVhICYmIGRyYXdp
bmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVh
LT5sYXllclRyZWVIb3N0UHJveHkoKS0+dXBkYXRlUGFpbnROb2RlKG9sZE5vZGUpOwogCi0gICAg
cmV0dXJuIHByb3h5Tm9kZTsKKyAgICByZXR1cm4gMDsKIH0KIAogYm9vbCBRUXVpY2tXZWJQYWdl
Ojp1c2VzVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKCkgY29uc3QKQEAgLTI2Myw4ICsxMjgs
MTQgQEAgY29uc3QgUVNpemVGJiBRUXVpY2tXZWJQYWdlOjpjb250ZW50U2l6ZSgpIGNvbnN0CiB2
b2lkIFFRdWlja1dlYlBhZ2U6OnNldENvbnRlbnRTY2FsZShxcmVhbCBzY2FsZSkKIHsKICAgICBB
U1NFUlQoc2NhbGUgPiAwKTsKKyAgICBpZiAoc2NhbGUgPT0gZC0+Y29udGVudFNjYWxlKQorICAg
ICAgICByZXR1cm47CisKICAgICBkLT5jb250ZW50U2NhbGUgPSBzY2FsZTsKICAgICBkLT51cGRh
dGVTaXplKCk7CisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBkLT53ZWJQYWdl
UHJveHktPmRyYXdpbmdBcmVhKCk7CisgICAgaWYgKGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVh
LT5sYXllclRyZWVIb3N0UHJveHkoKSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5sYXll
clRyZWVIb3N0UHJveHkoKS0+c2V0UGFpbnRDb250ZW50c1NjYWxlKHNjYWxlKTsKIH0KIAogcXJl
YWwgUVF1aWNrV2ViUGFnZTo6Y29udGVudFNjYWxlKCkgY29uc3QKQEAgLTI4OSwxOCArMTYwLDQg
QEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSgpCiAgICAgcS0+c2V0U2l6
ZShzY2FsZWRTaXplKTsKIH0KIAotdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cmVzZXRQYWlu
dE5vZGUoKQotewotICAgIG1fcGFpbnROb2RlID0gMDsKLSAgICBEcmF3aW5nQXJlYVByb3h5KiBk
cmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBpZiAoZHJhd2lu
Z0FyZWEgJiYgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpKQotICAgICAgICBkcmF3
aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCktPnB1cmdlR0xSZXNvdXJjZXMoKTsKLX0KLQot
UVF1aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tXZWJQYWdlUHJpdmF0ZSgpCi17Ci0gICAgaWYg
KG1fcGFpbnROb2RlKQotICAgICAgICBzdGF0aWNfY2FzdDxQYWdlUHJveHlOb2RlKj4obV9wYWlu
dE5vZGUpLT5tX3BhZ2VQcml2YXRlID0gMDsKLX0KLQogI2luY2x1ZGUgIm1vY19xcXVpY2t3ZWJw
YWdlX3AuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJwYWdlX3BfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJwYWdlX3BfcC5oCmluZGV4IDk5Y2IyYzIuLjYxYzEyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKQEAgLTM1LDIz
ICszNSwxOCBAQCBjbGFzcyBRdFdlYlBhZ2VFdmVudEhhbmRsZXI7CiBjbGFzcyBRUXVpY2tXZWJQ
YWdlUHJpdmF0ZSB7CiBwdWJsaWM6CiAgICAgUVF1aWNrV2ViUGFnZVByaXZhdGUoUVF1aWNrV2Vi
UGFnZSogcSwgUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVtKTsKLSAgICB+UVF1aWNrV2ViUGFn
ZVByaXZhdGUoKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSop
OwogICAgIHZvaWQgc2V0RHJhd2luZ0FyZWFTaXplKGNvbnN0IFFTaXplJik7CiAKICAgICB2b2lk
IHVwZGF0ZVNpemUoKTsKIAotICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsKLSAg
ICB2b2lkIHJlc2V0UGFpbnROb2RlKCk7Ci0KICAgICBRU2NvcGVkUG9pbnRlcjxRdFdlYlBhZ2VF
dmVudEhhbmRsZXI+IGV2ZW50SGFuZGxlcjsKICAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBxOwog
ICAgIFFRdWlja1dlYlZpZXcqIGNvbnN0IHZpZXdwb3J0SXRlbTsKICAgICBXZWJLaXQ6OldlYlBh
Z2VQcm94eSogd2ViUGFnZVByb3h5OwogICAgIFdlYktpdDo6UXRTR1VwZGF0ZVF1ZXVlIHNnVXBk
YXRlUXVldWU7CiAgICAgYm9vbCBwYWludGluZ0lzSW5pdGlhbGl6ZWQ7Ci0gICAgUVNHTm9kZSog
bV9wYWludE5vZGU7CiAKICAgICBRU2l6ZUYgY29udGVudFNpemU7CiAgICAgcXJlYWwgY29udGVu
dFNjYWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
dmlldy5jcHAKaW5kZXggZDNkYWM1ZC4uZTVkYmZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC04MTcsNiArODE3LDcgQEAg
UVF1aWNrV2ViVmlldzo6UVF1aWNrV2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQpCiAgICAgLCBt
X2V4cGVyaW1lbnRhbChuZXcgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCh0aGlzKSkKIHsKICAg
ICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgc2V0Q2xpcCh0cnVlKTsKICAgICBkLT5pbml0aWFs
aXplKCk7CiAgICAgZC0+aW5pdGlhbGl6ZVRvdWNoKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuY3BwCmluZGV4IGFhMjVkZDEuLjVkY2U1MjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKQEAg
LTQ2LDYgKzQ2LDEwIEBAIERyYXdpbmdBcmVhUHJveHk6OkRyYXdpbmdBcmVhUHJveHkoRHJhd2lu
Z0FyZWFUeXBlIHR5cGUsIFdlYlBhZ2VQcm94eSogd2ViUGFnZVByCiAKIERyYXdpbmdBcmVhUHJv
eHk6On5EcmF3aW5nQXJlYVByb3h5KCkKIHsKKyAgICAvLyBMYXllclRyZWVIb3N0UHJveHkgY2Fu
IGJlIHN0aWxsIHJlZmVyZW5jZWQgYnkgcGFpbnQgbm9kZSwKKyAgICAvLyBzbyBkcmF3aW5nIGFy
ZWEgc2hvdWxkIGJlIGNsZWFyZWQgdG8gYXZvaWQgZGVyZWZlbmNpbmcgcG9pbnRlciB0byBkZWFs
bG9jYXRlZCBvYmplY3QuCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBt
X2xheWVyVHJlZUhvc3RQcm94eS0+c2V0RHJhd2luZ0FyZWFQcm94eSgwKTsKIH0KIAogdm9pZCBE
cmF3aW5nQXJlYVByb3h5OjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNp
emUmIHNjcm9sbE9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eS5oCmluZGV4IDJmNTgzMjIuLjEyNzg5NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RyYXdpbmdBcmVhUHJveHkuaApAQCAtMTExLDcgKzExMSw3IEBAIHByb3RlY3RlZDoKICAg
ICBXZWJDb3JlOjpJbnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgT3duUHRyPExheWVyVHJl
ZUhvc3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7CisgICAgUmVmUHRyPExheWVyVHJlZUhv
c3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4
IDdiMTUzODQuLjdiYWIwMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Ry
YXdpbmdBcmVhUHJveHlJbXBsLmNwcApAQCAtMzMwLDcgKzMzMCw3IEBAIHZvaWQgRHJhd2luZ0Fy
ZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJU
cmVlQ29udGV4CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIGlm
ICghbV9sYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5ID0g
YWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7CisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdFByb3h5ID0gYWRvcHRSZWYobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7CiAj
ZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJl
ZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94
eS5oCmluZGV4IGQ1MjgxZDMuLjllMWQ5ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTM3LDE0ICszNywyNyBAQAogI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJOb2RlLmgiCiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUg
PFFPYmplY3Q+CisjZW5kaWYKKworY2xhc3MgUVNHTm9kZTsKKwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIFdlYkxheWVySW5mbzsKIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKIAogY2xh
c3MgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI7CisjaWYgUExBVEZPUk0oUVQpCitjbGFzcyBM
YXllclRyZWVIb3N0UHJveHlCYXNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPExheWVy
VHJlZUhvc3RQcm94eUJhc2U+LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7
Cit9OworI2Vsc2UKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eUJhc2UgOiBwdWJsaWMgUmVmQ291
bnRlZDxMYXllclRyZWVIb3N0UHJveHlCYXNlPiwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDbGllbnQgeworfTsKKyNlbmRpZgogCi1jbGFzcyBMYXllclRyZWVIb3N0UHJveHkgOiBwdWJs
aWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitjbGFzcyBMYXllclRyZWVIb3N0UHJv
eHkgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdFByb3h5QmFzZSB7CiBwdWJsaWM6CiAgICAgTGF5ZXJU
cmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKICAgICB2aXJ0dWFsIH5MYXllclRyZWVI
b3N0UHJveHkoKTsKQEAgLTUyLDcgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlQ29t
cG9zaXRpbmdMYXllcihXZWJMYXllcklEKTsKICAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xh
eWVyKFdlYkxheWVySUQpOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7
Ci0gICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYsIGZsb2F0KTsKKyAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0
KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIGJvb2wgc3luY1Jl
bW90ZUxheWVyRGF0YSA9IHRydWUpOwogICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOwogICAg
IHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBmbG9hdCk7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKQEAgLTY5LDYgKzgyLDE3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RGb3JMYXllcihXZWJMYXllcklELCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwogI2Vu
ZGlmCisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSgpIGNvbnN0IHsgcmV0
dXJuIG1fZHJhd2luZ0FyZWFQcm94eTsgfQorICAgIHZvaWQgc2V0RHJhd2luZ0FyZWFQcm94eShE
cmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KSB7IG1fZHJhd2luZ0FyZWFQcm94eSA9
IGRyYXdpbmdBcmVhUHJveHk7IH0KKworI2lmIFBMQVRGT1JNKFFUKQorICAgIFFTR05vZGUqIHVw
ZGF0ZVBhaW50Tm9kZShRU0dOb2RlKik7CisgICAgdm9pZCBzZXRQYWludENvbnRlbnRzU2NhbGUo
ZmxvYXQgc2NhbGUpIHsgbV9wYWludENvbnRlbnRzU2NhbGUgPSBzY2FsZTsgfQorI2VuZGlmCisK
K3Byb3RlY3RlZCBzbG90czoKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9XZWJQcm9jZXNzU2xvdChp
bnQsIHZvaWQqKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2xvdCgpOwogCiBwcm90ZWN0ZWQ6
CiAgICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVMYXllcihXZWJM
YXllcklEKTsKQEAgLTEyNywxMSArMTUxLDE3IEBAIHByb3RlY3RlZDoKICNpZiBQTEFURk9STShR
VCkKICAgICB2b2lkIGRpZEZpcmVWaWV3cG9ydFVwZGF0ZVRpbWVyKFdlYkNvcmU6OlRpbWVyPExh
eWVyVHJlZUhvc3RQcm94eT4qKTsKICAgICBXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVIb3N0UHJv
eHk+IG1fdmlld3BvcnRVcGRhdGVUaW1lcjsKKyAgICBmbG9hdCBtX3BhaW50Q29udGVudHNTY2Fs
ZTsKICNlbmRpZgogCiAgICAgTGF5ZXJNYXAgbV9sYXllcnM7CiAgICAgV2ViTGF5ZXJJRCBtX3Jv
b3RMYXllcklEOwogICAgIGludCBtX2lkOworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1faW5Q
YWludGluZzsKKyNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIExheWVyVHJlZUhvc3RQcm94eU5v
ZGVRdDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9M
YXllclRyZWVIb3N0UHJveHlOb2RlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZGU5YjhjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlOb2RlUXQuY3BwCkBAIC0wLDAgKzEsMTA3IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKy8vICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0
LmgiCisKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKworI2luY2x1ZGUgPFF0UXVp
Y2svUVNHR2VvbWV0cnlOb2RlPgorI2luY2x1ZGUgPFF0UXVpY2svUVNHTWF0ZXJpYWw+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitMYXllclRyZWVIb3N0UHJveHlOb2RlUXQ6OkxheWVyVHJlZUhv
c3RQcm94eU5vZGVRdChMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSkgOgor
ICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eShsYXllclRyZWVIb3N0UHJveHkpCisgICAgLCAg
IG1fbWF0ZXJpYWwodGhpcykKKyAgICAsICAgbV9nZW9tZXRyeShRU0dHZW9tZXRyeTo6ZGVmYXVs
dEF0dHJpYnV0ZXNfUG9pbnQyRCgpLCA0KQoreworICAgIHNldEdlb21ldHJ5KCZtX2dlb21ldHJ5
KTsKKyAgICBzZXRNYXRlcmlhbCgmbV9tYXRlcmlhbCk7Cit9CisKK0xheWVyVHJlZUhvc3RQcm94
eU5vZGVRdDo6fkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdCgpCit7CisgICAgbV9sYXllclRyZWVI
b3N0UHJveHktPnB1cmdlR0xSZXNvdXJjZXMoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJv
eHlOb2RlUXQ6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCkKK3sKKyNpZm5kZWYgTkRFQlVHCisg
ICAgbV9sYXllclRyZWVIb3N0UHJveHktPm1faW5QYWludGluZyA9IHRydWU7CisjZW5kaWYKKyAg
ICBRVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICBpZiAobWF0cml4KCkpCisgICAgICAgIHRyYW5z
Zm9ybSA9IG1hdHJpeCgpLT50b1RyYW5zZm9ybSgpOworICAgIHFyZWFsIHNjYWxlID0gbV9sYXll
clRyZWVIb3N0UHJveHktPm1fcGFpbnRDb250ZW50c1NjYWxlOworICAgIHRyYW5zZm9ybS5zY2Fs
ZShzY2FsZSwgc2NhbGUpOworICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5wYWludFRvQ3VycmVu
dEdMQ29udGV4dCh0cmFuc2Zvcm0sIGluaGVyaXRlZE9wYWNpdHkoKSwgZmFsc2UpOworI2lmbmRl
ZiBOREVCVUcKKyAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+bV9pblBhaW50aW5nID0gZmFsc2U7
CisjZW5kaWYKK30KKworLy8gRklYTUU6IHRlbXBvcmFyeSB1bnRpbCBRdCBTY2VuZWdyYXBoIHdp
bGwgc3VwcG9ydCBjdXN0b20gcGFpbnRpbmcuCitjaGFyIGNvbnN0KiBjb25zdCogTGF5ZXJUcmVl
SG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVyOjphdHRyaWJ1dGVOYW1lcygpIGNv
bnN0Cit7CisgICAgc3RhdGljIGNoYXIgY29uc3QqIGNvbnN0IGF0dHJbXSA9IHsgInZlcnRleCIs
IDAgfTsKKyAgICByZXR1cm4gYXR0cjsKK30KKworLy8gdmVydGV4U2hhZGVyIGFuZCBmcmFnbWVu
dFNoYWRlciBhcmUgbm8tb3Agc2hhZGVycy4KKy8vIEFsbCByZWFsIHBhaW50aW5nIGlzIGdvbmUg
YnkgVGV4dHVyZU1hcHBlciB0aHJvdWdoIExheWVyVHJlZUhvc3RQcm94eS4KK2NvbnN0IGNoYXIq
IExheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlNYXRlcmlhbFNoYWRlcjo6dmVydGV4U2hh
ZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gImF0dHJpYnV0ZSBoaWdocCB2ZWM0IHZlcnRleDsg
XG4iCisgICAgICAgICAgICJ2b2lkIG1haW4oKSB7IGdsX1Bvc2l0aW9uID0gdmVydGV4OyB9IjsK
K30KKworY29uc3QgY2hhciogTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFs
U2hhZGVyOjpmcmFnbWVudFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuICJ2b2lkIG1haW4o
KSB7IGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsgfSI7Cit9CisKK3Zv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVyOjp1cGRhdGVT
dGF0ZShjb25zdCBSZW5kZXJTdGF0ZSYgc3RhdGUsIFFTR01hdGVyaWFsKiBuZXdNYXRlcmlhbCwg
UVNHTWF0ZXJpYWwqIG9sZE1hdGVyaWFsKQoreworICAgIGlmICghbmV3TWF0ZXJpYWwpCisgICAg
ICAgIHJldHVybjsKKworICAgIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdCogbm9kZSA9IHN0YXRp
Y19jYXN0PFByb3h5TWF0ZXJpYWwqPihuZXdNYXRlcmlhbCktPm1fbm9kZTsKKyAgICAvLyBGSVhN
RTogTm9ybWFsbHkgd2Ugd291bGRuJ3QgcGFpbnQgaW5zaWRlIFFTR01hdGVyaWFsU2hhZGVyOjp1
cGRhdGVTdGF0ZSwKKyAgICAvLyBidXQgdGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIHVudGlsIGN1
c3RvbSBwYWludCBub2RlcyBhcmUgYXZhaWxhYmxlLgorICAgIGlmIChub2RlKQorICAgICAgICBu
b2RlLT5wYWludFRvQ3VycmVudEdMQ29udGV4dCgpOworfQorCitRU0dNYXRlcmlhbFR5cGUqIExh
eWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlNYXRlcmlhbDo6dHlwZSgpIGNvbnN0Cit7Cisg
ICAgc3RhdGljIFFTR01hdGVyaWFsVHlwZSB0eXBlOworICAgIHJldHVybiAmdHlwZTsKK30KKwor
UVNHTWF0ZXJpYWxTaGFkZXIqIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlNYXRlcmlh
bDo6Y3JlYXRlU2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IFByb3h5TWF0ZXJpYWxT
aGFkZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisvLyAjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmEyNWRkODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0LmgKQEAgLTAsMCArMSw2NCBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXllclRyZWVIb3N0UHJveHlOb2RlUXRfaAor
I2RlZmluZSBMYXllclRyZWVIb3N0UHJveHlOb2RlUXRfaAorCisjaW5jbHVkZSA8UXRRdWljay9R
U0dHZW9tZXRyeU5vZGU+CisjaW5jbHVkZSA8UXRRdWljay9RU0dNYXRlcmlhbD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllclRyZWVI
b3N0UHJveHk7CitjbGFzcyBMYXllclRyZWVIb3N0UHJveHlOb2RlUXQgOiBwdWJsaWMgUVNHR2Vv
bWV0cnlOb2RlIHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVIb3N0UHJveHlOb2RlUXQoTGF5ZXJU
cmVlSG9zdFByb3h5Kik7CisgICAgfkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdCgpOworCisgICAg
dm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dCgpOworCitwcml2YXRlOgorCisgICAgc3RydWN0
IFByb3h5TWF0ZXJpYWxTaGFkZXIgOiBwdWJsaWMgUVNHTWF0ZXJpYWxTaGFkZXIgeworICAgICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgUmVuZGVyU3RhdGUmLCBRU0dNYXRlcmlh
bCosIFFTR01hdGVyaWFsKik7CisgICAgICAgIHZpcnR1YWwgY2hhciBjb25zdCogY29uc3QqIGF0
dHJpYnV0ZU5hbWVzKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0
ZXhTaGFkZXIoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNo
YWRlcigpIGNvbnN0OworICAgIH07CisKKyAgICBzdHJ1Y3QgUHJveHlNYXRlcmlhbCA6IHB1Ymxp
YyBRU0dNYXRlcmlhbCB7CisgICAgICAgIFByb3h5TWF0ZXJpYWwoTGF5ZXJUcmVlSG9zdFByb3h5
Tm9kZVF0KiBub2RlKSA6IG1fbm9kZShub2RlKSB7IH0KKworICAgICAgICBRU0dNYXRlcmlhbFR5
cGUqIHR5cGUoKSBjb25zdDsKKyAgICAgICAgUVNHTWF0ZXJpYWxTaGFkZXIqIGNyZWF0ZVNoYWRl
cigpIGNvbnN0OworCisgICAgICAgIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdCogbV9ub2RlOwor
ICAgIH07CisKKyAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQ
cm94eTsKKyAgICBQcm94eU1hdGVyaWFsIG1fbWF0ZXJpYWw7CisgICAgUVNHR2VvbWV0cnkgbV9n
ZW9tZXRyeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gTGF5ZXJU
cmVlSG9zdFByb3h5Tm9kZVF0X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKaW5kZXggODY1MDY5OC4uZDJjYzY2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5
UXQuY3BwCkBAIC0yMiw3ICsyMiw5IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgogCisjaW5jbHVkZSAiQXJndW1lbnRz
LmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTGF5ZXJU
cmVlSG9zdFByb3h5Tm9kZVF0LmgiCiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogI2luY2x1ZGUg
Ik1lc3NhZ2VJRC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgpAQCAtMTQ1LDYgKzE0
Nyw3OCBAQCBjbGFzcyBTZXRSb290TGF5ZXJNZXNzYWdlCiAgICAgICAgIDogcHVibGljIExheWVy
VHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8U2V0Um9vdExheWVyTWVzc2FnZURhdGEsIExh
eWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpTZXRSb290TGF5ZXI+IHsgfTsKIH0KIAorI2lmIFBM
QVRGT1JNKFFUKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE1haW5UaHJlYWRNZXNzYWdl
U2VuZGVyIHsKKyAgICBzdHJ1Y3QgQ2FsbGJhY2tDb250ZXh0IHsKKyAgICAgICAgQ2FsbGJhY2tD
b250ZXh0KGNvbnN0IFQmIG1lc3NhZ2UsIExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9z
dFByb3h5KSA6CisgICAgICAgICAgICAgICAgbV9tZXNzYWdlSUQoVDo6bWVzc2FnZUlEKQorICAg
ICAgICAgICAgLCAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5KGxheWVyVHJlZUhvc3RQcm94eSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9lbmNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVy
OjpjcmVhdGUoMCk7CisgICAgICAgICAgICBtX2VuY29kZXItPmVuY29kZShtZXNzYWdlKTsKKyAg
ICAgICAgfQorICAgICAgICB+Q2FsbGJhY2tDb250ZXh0KCkKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIE93blB0cjxDb3JlSVBDOjpBcmd1bWVudEVuY29kZXI+IG1fZW5jb2RlcjsKKyAg
ICAgICAgQ29yZUlQQzo6TWVzc2FnZUlEIG1fbWVzc2FnZUlEOworICAgICAgICBSZWZQdHI8TGF5
ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKKyAgICB9OworICAgIHN0YXRp
YyB2b2lkIG1haW5UaHJlYWRDYWxsYmFjayh2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgQ2Fs
bGJhY2tDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FsbGJhY2tDb250ZXh0Kj4oZGF0
YSk7CisgICAgICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkgPSBjb250ZXh0
LT5tX2xheWVyVHJlZUhvc3RQcm94eS0+ZHJhd2luZ0FyZWFQcm94eSgpOworICAgICAgICBpZiAo
ZHJhd2luZ0FyZWFQcm94eSkgeworICAgICAgICAgICAgLy8gSGF2ZSB0byBpbml0aWFsaXplIGRl
c3RhbmF0aW9uIElEIGhlcmUgYmVjYXVzZSB0aGlzIGRhdGEgY2Fubm90IGJlIGFjY2Vzc2VkIGZy
b20KKyAgICAgICAgICAgIC8vIHBhaW50aW5nIHRocmVhZC4KKyAgICAgICAgICAgICpyZWludGVy
cHJldF9jYXN0PHVpbnQ2NF90Kj4oY29udGV4dC0+bV9lbmNvZGVyLT5idWZmZXIoKSkgPSBkcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpOworICAgICAgICAgICAgQ29yZUlQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbiA9IGRyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2Vzcygp
LT5jb25uZWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoY29ubmVjdGlvbikKKyAgICAgICAgICAg
ICAgICBjb25uZWN0aW9uLT5zZW5kTWVzc2FnZShjb250ZXh0LT5tX21lc3NhZ2VJRCwgY29udGV4
dC0+bV9lbmNvZGVyLnJlbGVhc2UoKSwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIGNv
bnRleHQ7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgc2VuZE1lc3NhZ2VPbk1haW5UaHJlYWQo
Y29uc3QgVCYgbWVzc2FnZSwgTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkp
CisgICAgeworICAgICAgICBDYWxsYmFja0NvbnRleHQqIGNvbnRleHQgPSBuZXcgQ2FsbGJhY2tD
b250ZXh0KG1lc3NhZ2UsIGxheWVyVHJlZUhvc3RQcm94eSk7CisgICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoJm1haW5UaHJlYWRDYWxsYmFjaywgY29udGV4dCk7CisgICAgfQorfTsKKworc3RydWN0
IExheWVyVHJlZUhvc3RQcm94eVJlZiB7CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5UmVmKExheWVy
VHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KSA6IG1fbGF5ZXJUcmVlSG9zdFByb3h5
KGxheWVyVHJlZUhvc3RQcm94eSkKKyAgICB7IH0KKyAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdFBy
b3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKK307CisKK3N0YXRpYyB2b2lkIG1haW5UaHJlYWRV
cGRhdGVWaWV3cG9ydEludm9rZXIodm9pZCogZGF0YSkKK3sKKyAgICBMYXllclRyZWVIb3N0UHJv
eHlSZWYqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxMYXllclRyZWVIb3N0UHJveHlSZWYqPihkYXRh
KTsKKyAgICBjb250ZXh0LT5tX2xheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsK
KyAgICBkZWxldGUgY29udGV4dDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlVmlld3BvcnRPbk1h
aW5UaHJlYWQoTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkpCit7CisgICAg
TGF5ZXJUcmVlSG9zdFByb3h5UmVmKiBjb250ZXh0ID0gbmV3IExheWVyVHJlZUhvc3RQcm94eVJl
ZihsYXllclRyZWVIb3N0UHJveHkpOworICAgIGNhbGxPbk1haW5UaHJlYWQoJm1haW5UaHJlYWRV
cGRhdGVWaWV3cG9ydEludm9rZXIsIGNvbnRleHQpOworfQorI2Vsc2UKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBNYWluVGhyZWFkTWVzc2FnZVNlbmRlciB7CisgICAgc3RhdGljIHZvaWQg
c2VuZE1lc3NhZ2VPbk1haW5UaHJlYWQoY29uc3QgVCYgbWVzc2FnZSwgTGF5ZXJUcmVlSG9zdFBy
b3h5KiBsYXllclRyZWVIb3N0UHJveHkpCisgICAgeworICAgICAgICBEcmF3aW5nQXJlYVByb3h5
KiBkcmF3aW5nQXJlYVByb3h5ID0gbGF5ZXJUcmVlSG9zdFByb3h5LT5kcmF3aW5nQXJlYVByb3h5
KCk7CisgICAgICAgIGlmIChkcmF3aW5nQXJlYVByb3h5KQorICAgICAgICAgICAgZHJhd2luZ0Fy
ZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQobWVzc2FnZSwgZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgfQorfTsKK3N0YXRpYyB1cGRhdGVWaWV3cG9ydE9u
TWFpblRocmVhZChMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSkKK3sKKyAg
ICBsYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisjZW5kaWYKKwogUGFz
c093blB0cjxHcmFwaGljc0xheWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdl
YkxheWVySUQgbGF5ZXJJRCkKIHsKICAgICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBH
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcih0aGlzKTsKQEAgLTE1OCw3ICsyMzIsMTEgQEAgTGF5
ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSogZHJh
d2luZ0FyZWFQcm94eSkKICAgICA6IG1fYW5pbWF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0
aGlzLCAmTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCkKICAgICAsIG1fZHJhd2lu
Z0FyZWFQcm94eShkcmF3aW5nQXJlYVByb3h5KQogICAgICwgbV92aWV3cG9ydFVwZGF0ZVRpbWVy
KHRoaXMsICZMYXllclRyZWVIb3N0UHJveHk6OmRpZEZpcmVWaWV3cG9ydFVwZGF0ZVRpbWVyKQor
ICAgICwgbV9wYWludENvbnRlbnRzU2NhbGUoMS4wKQogICAgICwgbV9yb290TGF5ZXJJRCgwKQor
I2lmbmRlZiBOREVCVUcKKyAgICAsIG1faW5QYWludGluZyhmYWxzZSkKKyNlbmRpZgogewogfQog
CkBAIC0xNjcsMTIgKzI0NSwxNCBAQCBMYXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0
UHJveHkoKQogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJlZW50cmFudC4KLXZv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQordm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGJvb2wgc3luY1JlbW90ZUxheWVyRGF0YSkKIHsK
ICAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKICAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4
dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKIAotICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAg
aWYgKHN5bmNSZW1vdGVMYXllckRhdGEpCisgICAgICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CisK
ICAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CiAgICAg
aWYgKCFjdXJyZW50Um9vdExheWVyKQogICAgICAgICByZXR1cm47CkBAIC0yMjEsMTcgKzMwMSwx
OCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdAogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
ZGlkRmlyZVZpZXdwb3J0VXBkYXRlVGltZXIoVGltZXI8TGF5ZXJUcmVlSG9zdFByb3h5PiopCiB7
Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKKyAgICB1cGRhdGVWaWV3cG9ydE9uTWFpblRocmVhZCh0
aGlzKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKIHsK
KyAgICBBU1NFUlQoIW1faW5QYWludGluZyk7CiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT51cGRh
dGVWaWV3cG9ydCgpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdEZvckxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudFJlY3RGb3JMYXllcihsYXll
cklELCByZWN0KSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKKyAgICBN
YWluVGhyZWFkTWVzc2FnZVNlbmRlcjxNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJs
ZUNvbnRlbnRSZWN0Rm9yTGF5ZXI+OjpzZW5kTWVzc2FnZU9uTWFpblRocmVhZChNZXNzYWdlczo6
TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0Rm9yTGF5ZXIobGF5ZXJJRCwgcmVj
dCksIHRoaXMpOwogfQogCiBpbnQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdGVUaWxlSURUb05v
ZGVUaWxlSUQoaW50IHRpbGVJRCkgY29uc3QKQEAgLTUzNCw3ICs2MTUsNiBAQCB2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6c3luY1JlbW90ZUNvbnRlbnQoKQogdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OnB1c2hVcGRhdGVUb1F1ZXVlKFBhc3NPd25QdHI8TGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVy
ZXI+IG1lc3NhZ2UpCiB7CiAgICAgbV9tZXNzYWdlc1RvUmVuZGVyZXIuYXBwZW5kKG1lc3NhZ2Up
OwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpj
cmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKQEAgLTYxNCwxNCArNjk0LDE0IEBAIHZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkp
CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0
b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7Ci0gICAgbV9k
cmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJU
cmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5
VmVjdG9yKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKKyAgICBNYWlu
VGhyZWFkTWVzc2FnZVNlbmRlcjxNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNv
bnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcj46OnNlbmRNZXNzYWdlT25NYWluVGhyZWFkKE1lc3Nh
Z2VzOjpMYXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9y
KHRyYWplY3RvcnlWZWN0b3IpLCB0aGlzKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZShjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9h
dCBzY2FsZSkKIHsKICAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OwogICAgIG1fY29u
dGVudHNTY2FsZSA9IHNjYWxlOwotICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVj
dEFuZFNjYWxlKHJlY3QsIHNjYWxlKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJ
RCgpKTsKKyAgICBNYWluVGhyZWFkTWVzc2FnZVNlbmRlcjxNZXNzYWdlczo6TGF5ZXJUcmVlSG9z
dDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGU+OjpzZW5kTWVzc2FnZU9uTWFpblRocmVh
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0QW5kU2NhbGUo
cmVjdCwgc2NhbGUpLCB0aGlzKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1cmdl
R0xSZXNvdXJjZXMoKQpAQCAtNjM1LDcgKzcxNSwyMCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6cHVyZ2VHTFJlc291cmNlcygpCiAKICAgICBtX3RleHR1cmVNYXBwZXIuY2xlYXIoKTsKIAot
ICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUhvc3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cGFnZUlEKCkpOworICAgIE1haW5UaHJlYWRNZXNzYWdlU2VuZGVyPE1lc3NhZ2Vz
OjpMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9yZXM+OjpzZW5kTWVzc2FnZU9uTWFpblRo
cmVhZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIHRoaXMp
OworfQorCitRU0dOb2RlKiBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVBhaW50Tm9kZShRU0dO
b2RlKiBvbGROb2RlKQoreworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3Rl
eHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworCisgICAgc3luY1JlbW90
ZUNvbnRlbnQoKTsKKworICAgIGlmICghb2xkTm9kZSkKKyAgICAgICAgcmV0dXJuIG5ldyBMYXll
clRyZWVIb3N0UHJveHlOb2RlUXQodGhpcyk7CisKKyAgICByZXR1cm4gb2xkTm9kZTsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lLmNwcAppbmRleCBkMTJlYjBiLi44N2NiOWRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lLmNwcApAQCAtMTczLDYgKzE3Myw5IEBAIHFyZWFsIFF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6b3V0ZXJCb3VuZGVkQ1NTU2NhbGUocXJlYWwgY3NzU2NhbGUpCiAKIHZvaWQg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzZXRJdGVtUmVjdFZpc2libGUoY29uc3QgUVJl
Y3RGJiBpdGVtUmVjdCkKIHsKKyAgICBpZiAoaXRlbVJlY3QuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKHRoaXMpOwogCiAgICAg
cXJlYWwgaXRlbVNjYWxlID0gbV92aWV3cG9ydC0+d2lkdGgoKSAvIGl0ZW1SZWN0LndpZHRoKCk7
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcCBiL1Rvb2xzL01pbmlC
cm93c2VyL3F0L21haW4uY3BwCmluZGV4IGZlYWUxNGEuLjM2NjM3NzMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL01pbmlCcm93c2VyL3F0L21haW4uY3BwCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L21h
aW4uY3BwCkBAIC0zOSw5ICszOSw2IEBACiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKIHsKLSAgICAvLyBGSVhNRTogV2UgbXVzdCBhZGQgc3VwcG9ydCBmb3IgdGhlIHRocmVhZGVk
IHJlbmRlcmluZyBhcyBpdCBpcyB0aGUgZGVmYXVsdC4KLSAgICBxcHV0ZW52KCJRTUxfTk9fVEhS
RUFERURfUkVOREVSRVIiLCBRQnl0ZUFycmF5KCIxIikpOwotCiAgICAgTWluaUJyb3dzZXJBcHBs
aWNhdGlvbiBhcHAoYXJnYywgYXJndik7CiAKICAgICBpZiAoYXBwLmlzUm9ib3RpemVkKCkpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123197</attachid>
            <date>2012-01-19 14:39:12 -0800</date>
            <delta_ts>2012-01-19 15:13:38 -0800</delta_ts>
            <desc>Updated patch.</desc>
            <filename>threaded_painting_03.diff</filename>
            <type>text/plain</type>
            <size>32908</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxOWE0MmEzLi42MTlkNjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzIg
QEAKKzIwMTItMDEtMTkgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hl
c2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVkIHJl
bmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCB0aHJlYWRlZCBwYWludGluZyBzdXBwb3J0IHRvIFF0IFdlYmtpdDIuCisgICAg
ICAgIEFsbCBUZXh0dXJlTWFwcGVyIGFuZCBHcmFwaGljc0xheWVyIG9iamVjdCBhcmUgY3JlYXRl
ZCBvbiByZW5kZXJpbmcKKyAgICAgICAgdGhyZWFkIGFuZCBjYW4gYmUgYWNjZXNzZWQgdGhyb3Vn
aCByZW5kZXJpbmcgdGhyZWFkIG9ubHkuCisgICAgICAgIExheWVyIHVwZGF0ZXMgYXJlIHJlY2Vp
dmVkIHRocm91Z2ggbV9tZXNzYWdlc1RvUmVuZGVyZXIgcXVldWUgYW5kCisgICAgICAgIGFwcGxp
ZWQgdG8gVGV4dHVyZU1hcHBlck5vZGUgdHJlZSBpbiB1cGRhdGVQYWludE5vZGUsIHdoZW4gVUkg
dGhyZWFkCisgICAgICAgIGlzIHN5bmNocm9ub3VzbHkgbG9ja2VkIGJ5IHJlbmRlciB0aHJlYWQs
IHNvIG5vIGV4dHJhIHN5bmNocm9uaXphdGlvbiAKKyAgICAgICAgaXMgbmVjZXNzYXJ5LgorICAg
ICAgICBNZXNzYWdlcyBmcm9tIFRleHR1cmVNYXBwZXIgYXJlIGRlbGl2ZXJlZCBiYWNrIHRocm91
Z2ggImNhbGxPbk1haW5UaHJlYWQiCisgICAgICAgIGludGVyZmFjZS4KKyAgICAgICAgTGF5ZXJU
cmVlSG9zdFByb3h5IGlzIHRocmVhZCBzYWZlIHJlZi1jb3VudGVkIGFuZCBoZWxkIGFsaXZlIHVu
dGlsIHBhaW50CisgICAgICAgIG5vZGUgb3IgZHJhd2luZyBhcmVhIGRlc3RydWN0aW9uLgorCisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnBhZ2UuY3BwOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6UVF1aWNrV2ViUGFnZSk6CisgICAg
ICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6UVF1aWNrV2ViUGFnZVByaXZhdGUpOgorICAgICAg
ICAoUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKToKKyAgICAgICAgKFFRdWlja1dlYlBh
Z2U6OnNldENvbnRlbnRTY2FsZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlX3BfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdB
cmVhUHJveHk6On5EcmF3aW5nQXJlYVByb3h5KToKKyAgICAgICAgKiBVSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBsOjplbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFBy
b3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6ZHJhd2luZ0FyZWFQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2V0RHJhd2luZ0Fy
ZWFQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2V0UGFpbnRD
b250ZW50c1NjYWxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5
Tm9kZVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5v
ZGVRdDo6TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdFByb3h5Tm9kZVF0Ojp+TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0KToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpwYWludFRvQ3VycmVudEdMQ29udGV4
dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlNYXRl
cmlhbFNoYWRlcjo6YXR0cmlidXRlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHlOb2RlUXQ6OlByb3h5TWF0ZXJpYWxTaGFkZXI6OnZlcnRleFNoYWRlcik6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlNYXRlcmlhbFNoYWRl
cjo6ZnJhZ21lbnRTaGFkZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHlO
b2RlUXQ6OlByb3h5TWF0ZXJpYWxTaGFkZXI6OnVwZGF0ZVN0YXRlKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsOjp0eXBlKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsOjpjcmVh
dGVTaGFkZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlOb2Rl
UXQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6
UHJveHlNYXRlcmlhbDo6UHJveHlNYXRlcmlhbCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0xh
eWVyVHJlZUhvc3RQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TWFpblRocmVhZE1lc3Nh
Z2VTZW5kZXI6OkNhbGxiYWNrQ29udGV4dDo6Q2FsbGJhY2tDb250ZXh0KToKKyAgICAgICAgKFdl
YktpdDo6TWFpblRocmVhZE1lc3NhZ2VTZW5kZXI6OkNhbGxiYWNrQ29udGV4dDo6fkNhbGxiYWNr
Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJlYWRNZXNzYWdlU2VuZGVyOjptYWlu
VGhyZWFkQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpNYWluVGhyZWFkTWVzc2FnZVNlbmRl
cjo6c2VuZE1lc3NhZ2VPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHlSZWY6OkxheWVyVHJlZUhvc3RQcm94eVJlZik6CisgICAgICAgIChXZWJLaXQ6Om1h
aW5UaHJlYWRVcGRhdGVWaWV3cG9ydEludm9rZXIpOgorICAgICAgICAoV2ViS2l0Ojp1cGRhdGVW
aWV3cG9ydE9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94
eTo6TGF5ZXJUcmVlSG9zdFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RQcm94eTo6ZGlkRmlyZVZpZXdwb3J0VXBkYXRlVGltZXIpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjpwdXNoVXBkYXRlVG9RdWV1ZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rv
cik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRl
bnRzUmVjdEFuZFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpw
dXJnZUdMUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1
cGRhdGVQYWludE5vZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OnNldEl0ZW1SZWN0VmlzaWJsZSk6CisKIDIwMTItMDEtMTggIEFkYSBDaGFuICA8YWRh
Y2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgTmVlZCBhIFdlYktpdDIgQVBJIGZvciBzZXR0aW5n
IG1lZGlhIHZvbHVtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1Nv
dXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggMzU5ODNmMC4uM2YzNDdiYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCkBAIC0yNTUsNiArMjU1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYlJl
c291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9h
ZENsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuaCBcCisgICAgVUlQcm9jZXNz
L3F0L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJD
b250ZXh0LmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCBcCiAg
ICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaCBcCkBAIC01ODUsNiArNTg2LDcg
QEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZENsaWVudC5jcHAg
XAogICAgIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdl
YkNvbnRleHQuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0
LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBcCiAgICAg
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9x
dC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAppbmRleCBhOGMxNzE4Li5jMmE2MmU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAK
QEAgLTI3LDE0ICsyNywxMyBAQAogI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcF9wLmgiCiAjaW5j
bHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVkZSA8UXRRdWljay9RUXVpY2tDYW52YXM+
Ci0jaW5jbHVkZSA8UXRRdWljay9RU0dHZW9tZXRyeU5vZGU+Ci0jaW5jbHVkZSA8UXRRdWljay9R
U0dNYXRlcmlhbD4KIAogUVF1aWNrV2ViUGFnZTo6UVF1aWNrV2ViUGFnZShRUXVpY2tXZWJWaWV3
KiB2aWV3cG9ydEl0ZW0pCiAgICAgOiBRUXVpY2tJdGVtKHZpZXdwb3J0SXRlbSkKICAgICAsIGQo
bmV3IFFRdWlja1dlYlBhZ2VQcml2YXRlKHRoaXMsIHZpZXdwb3J0SXRlbSkpCiB7CiAgICAgc2V0
RmxhZyhJdGVtSGFzQ29udGVudHMpOworICAgIHNldENsaXAodHJ1ZSk7CiAKICAgICAvLyBXZSBk
byB0aGUgdHJhbnNmb3JtIGZyb20gdGhlIHRvcCBsZWZ0IHNvIHRoZSB2aWV3cG9ydCBjYW4gYXNz
dW1lIHRoZSBwb3NpdGlvbiAwLCAwCiAgICAgLy8gaXMgYWx3YXlzIHdoZXJlIHJlbmRlcmluZyBz
dGFydHMuCkBAIC02OCw3ICs2Nyw2IEBAIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpRUXVpY2tXZWJQ
YWdlUHJpdmF0ZShRUXVpY2tXZWJQYWdlKiBxLCBRUXVpY2tXZWJWaWV3KiB2aWV3CiAgICAgLCB3
ZWJQYWdlUHJveHkoMCkKICAgICAsIHNnVXBkYXRlUXVldWUocSkKICAgICAsIHBhaW50aW5nSXNJ
bml0aWFsaXplZChmYWxzZSkKLSAgICAsIG1fcGFpbnROb2RlKDApCiAgICAgLCBjb250ZW50U2Nh
bGUoMSkKICAgICAsIHVzZVRyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cihmYWxzZSkKIHsKQEAg
LTgwLDE4ICs3OCw2IEBAIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OmluaXRpYWxpemUoV2Vi
S2l0OjpXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKICAgICBldmVudEhhbmRsZXIucmVzZXQo
bmV3IFF0V2ViUGFnZUV2ZW50SGFuZGxlcih0b0FQSSh3ZWJQYWdlUHJveHkpLCBxLCB2aWV3cG9y
dEl0ZW0pKTsKIH0KIAotc3RhdGljIGZsb2F0IGNvbXB1dGVFZmZlY3RpdmVPcGFjaXR5KGNvbnN0
IFFRdWlja0l0ZW0qIGl0ZW0pCi17Ci0gICAgaWYgKCFpdGVtKQotICAgICAgICByZXR1cm4gMTsK
LQotICAgIGZsb2F0IG9wYWNpdHkgPSBpdGVtLT5vcGFjaXR5KCk7Ci0gICAgaWYgKG9wYWNpdHkg
PCAwLjAxKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBvcGFjaXR5ICogY29tcHV0
ZUVmZmVjdGl2ZU9wYWNpdHkoaXRlbS0+cGFyZW50SXRlbSgpKTsKLX0KLQogdm9pZCBRUXVpY2tX
ZWJQYWdlUHJpdmF0ZTo6c2V0RHJhd2luZ0FyZWFTaXplKGNvbnN0IFFTaXplJiBzaXplKQogewog
ICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gd2ViUGFnZVByb3h5LT5kcmF3aW5n
QXJlYSgpOwpAQCAtMTAwLDEzNCArODYsMTMgQEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6
c2V0RHJhd2luZ0FyZWFTaXplKGNvbnN0IFFTaXplJiBzaXplKQogICAgIGRyYXdpbmdBcmVhLT5z
ZXRTaXplKFdlYkNvcmU6OkludFNpemUoc2l6ZSksIFdlYkNvcmU6OkludFNpemUoKSk7CiB9CiAK
LXZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCkKLXsK
LSAgICBpZiAoIXEtPmlzVmlzaWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRVHJhbnNm
b3JtIHRyYW5zZm9ybSA9IHEtPml0ZW1UcmFuc2Zvcm0oMCwgMCk7Ci0gICAgdHJhbnNmb3JtLnNj
YWxlKGNvbnRlbnRTY2FsZSwgY29udGVudFNjYWxlKTsKLQotICAgIGZsb2F0IG9wYWNpdHkgPSBj
b21wdXRlRWZmZWN0aXZlT3BhY2l0eShxKTsKLSAgICBRUmVjdEYgY2xpcFJlY3QgPSBxLT5wYXJl
bnRJdGVtKCktPm1hcFJlY3RUb1NjZW5lKHEtPnBhcmVudEl0ZW0oKS0+Ym91bmRpbmdSZWN0KCkp
OwotCi0gICAgaWYgKCFjbGlwUmVjdC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJl
YSgpOwotICAgIGlmICghZHJhd2luZ0FyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IG5vIEdMIGVycm9yIGNvZGUgc3RheXMgZnJvbSBwcmV2aW91cyBRVCBvcGVy
YXRpb25zLgotICAgIGdsR2V0RXJyb3IoKTsKLQotICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVT
VCk7Ci0gICAgQVNTRVJUKCFnbEdldEVycm9yKCkpOwotICAgIGNvbnN0IGludCBsZWZ0ID0gY2xp
cFJlY3QubGVmdCgpOwotICAgIGNvbnN0IGludCB3aWR0aCA9IGNsaXBSZWN0LndpZHRoKCk7Ci0g
ICAgY29uc3QgaW50IGJvdHRvbSA9IHEtPmNhbnZhcygpLT5oZWlnaHQoKSAtIChjbGlwUmVjdC5i
b3R0b20oKSArIDEpOwotICAgIGNvbnN0IGludCBoZWlnaHQgPSBjbGlwUmVjdC5oZWlnaHQoKTsK
LQotICAgIGdsU2Npc3NvcihsZWZ0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQpOwotICAgIEFTU0VS
VCghZ2xHZXRFcnJvcigpKTsKLQotICAgIGRyYXdpbmdBcmVhLT5wYWludFRvQ3VycmVudEdMQ29u
dGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHkpOwotCi0gICAgZ2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVT
VCk7Ci0gICAgQVNTRVJUKCFnbEdldEVycm9yKCkpOwotfQotCi1zdHJ1Y3QgUGFnZVByb3h5TWF0
ZXJpYWw7Ci1zdHJ1Y3QgUGFnZVByb3h5Tm9kZTsKLQotLy8gRklYTUU6IHRlbXBvcmFyeSB1bnRp
bCBRdCBTY2VuZWdyYXBoIHdpbGwgc3VwcG9ydCBjdXN0b20gcGFpbnRpbmcuCi1zdHJ1Y3QgUGFn
ZVByb3h5TWF0ZXJpYWxTaGFkZXIgOiBwdWJsaWMgUVNHTWF0ZXJpYWxTaGFkZXIgewotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBSZW5kZXJTdGF0ZSYgc3RhdGUsIFFTR01hdGVy
aWFsKiBuZXdNYXRlcmlhbCwgUVNHTWF0ZXJpYWwqIG9sZE1hdGVyaWFsKTsKLSAgICB2aXJ0dWFs
IGNoYXIgY29uc3QqIGNvbnN0KiBhdHRyaWJ1dGVOYW1lcygpIGNvbnN0Ci0gICAgewotICAgICAg
ICBzdGF0aWMgY2hhciBjb25zdCogY29uc3QgYXR0cltdID0geyAidmVydGV4IiwgMCB9OwotICAg
ICAgICByZXR1cm4gYXR0cjsKLSAgICB9Ci0KLSAgICAvLyB2ZXJ0ZXhTaGFkZXIgYW5kIGZyYWdt
ZW50U2hhZGVyIGFyZSBuby1vcCBzaGFkZXJzLgotICAgIC8vIEFsbCByZWFsIHBhaW50aW5nIGlz
IGdvbmUgYnkgVGV4dHVyZU1hcHBlciB0aHJvdWdoIExheWVyVHJlZUhvc3RQcm94eS4KLSAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gImF0dHJpYnV0ZSBoaWdocCB2ZWM0IHZlcnRleDsgXG4iCi0gICAgICAgICAgICAgICAi
dm9pZCBtYWluKCkgeyBnbF9Qb3NpdGlvbiA9IHZlcnRleDsgfSI7Ci0gICAgfQotCi0gICAgdmly
dHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gInZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAw
LjApOyB9IjsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgUGFnZVByb3h5TWF0ZXJpYWwgOiBwdWJsaWMg
UVNHTWF0ZXJpYWwgewotICAgIFBhZ2VQcm94eU1hdGVyaWFsKFBhZ2VQcm94eU5vZGUqIG5vZGUp
IDogbV9ub2RlKG5vZGUpIHsgfQotCi0gICAgUVNHTWF0ZXJpYWxUeXBlKiB0eXBlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHN0YXRpYyBRU0dNYXRlcmlhbFR5cGUgdHlwZTsKLSAgICAgICAgcmV0
dXJuICZ0eXBlOwotICAgIH0KLQotICAgIFFTR01hdGVyaWFsU2hhZGVyKiBjcmVhdGVTaGFkZXIo
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBQYWdlUHJveHlNYXRlcmlhbFNoYWRl
cjsKLSAgICB9Ci0KLSAgICBQYWdlUHJveHlOb2RlKiBtX25vZGU7Ci19OwotCi1zdHJ1Y3QgUGFn
ZVByb3h5Tm9kZSA6IHB1YmxpYyBRU0dHZW9tZXRyeU5vZGUgewotICAgIFBhZ2VQcm94eU5vZGUo
UVF1aWNrV2ViUGFnZVByaXZhdGUqIHBhZ2UpIDoKLSAgICAgICAgbV9wYWdlUHJpdmF0ZShwYWdl
KQotICAgICAgLCBtX21hdGVyaWFsKHRoaXMpCi0gICAgICAsIG1fZ2VvbWV0cnkoUVNHR2VvbWV0
cnk6OmRlZmF1bHRBdHRyaWJ1dGVzX1BvaW50MkQoKSwgNCkKLSAgICB7Ci0gICAgICAgIHNldEdl
b21ldHJ5KCZtX2dlb21ldHJ5KTsKLSAgICAgICAgc2V0TWF0ZXJpYWwoJm1fbWF0ZXJpYWwpOwot
ICAgIH0KLQotICAgIH5QYWdlUHJveHlOb2RlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3BhZ2VQ
cml2YXRlKQotICAgICAgICAgICAgbV9wYWdlUHJpdmF0ZS0+cmVzZXRQYWludE5vZGUoKTsKLSAg
ICB9Ci0KLSAgICBRUXVpY2tXZWJQYWdlUHJpdmF0ZSogbV9wYWdlUHJpdmF0ZTsKLSAgICBQYWdl
UHJveHlNYXRlcmlhbCBtX21hdGVyaWFsOwotICAgIFFTR0dlb21ldHJ5IG1fZ2VvbWV0cnk7Ci19
OwotCi12b2lkIFBhZ2VQcm94eU1hdGVyaWFsU2hhZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBSZW5k
ZXJTdGF0ZSYgc3RhdGUsIFFTR01hdGVyaWFsKiBuZXdNYXRlcmlhbCwgUVNHTWF0ZXJpYWwqIG9s
ZE1hdGVyaWFsKQotewotICAgIGlmICghbmV3TWF0ZXJpYWwpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFBhZ2VQcm94eU5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxQYWdlUHJveHlNYXRlcmlhbCo+
KG5ld01hdGVyaWFsKS0+bV9ub2RlOwotICAgIC8vIEZJWE1FOiBOb3JtYWxseSB3ZSB3b3VsZG4n
dCBwYWludCBpbnNpZGUgUVNHTWF0ZXJpYWxTaGFkZXI6OnVwZGF0ZVN0YXRlLAotICAgIC8vIGJ1
dCB0aGlzIGlzIGEgdGVtcG9yYXJ5IGhhY2sgdW50aWwgY3VzdG9tIHBhaW50IG5vZGVzIGFyZSBh
dmFpbGFibGUuCi0gICAgaWYgKG5vZGUtPm1fcGFnZVByaXZhdGUpCi0gICAgICAgIG5vZGUtPm1f
cGFnZVByaXZhdGUtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7Ci19Ci0KIFFTR05vZGUqIFFR
dWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWlu
dE5vZGVEYXRhKikKIHsKLSAgICBpZiAoIShmbGFncygpICYgSXRlbUhhc0NvbnRlbnRzKSkgewot
ICAgICAgICBpZiAob2xkTm9kZSkKLSAgICAgICAgICAgIGRlbGV0ZSBvbGROb2RlOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBQYWdlUHJveHlOb2RlKiBwcm94eU5vZGUgPSBzdGF0
aWNfY2FzdDxQYWdlUHJveHlOb2RlKj4ob2xkTm9kZSk7Ci0gICAgaWYgKCFwcm94eU5vZGUpIHsK
LSAgICAgICAgcHJveHlOb2RlID0gbmV3IFBhZ2VQcm94eU5vZGUoZCk7Ci0gICAgICAgIGQtPm1f
cGFpbnROb2RlID0gcHJveHlOb2RlOwotICAgIH0KKyAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3
aW5nQXJlYSA9IGQtPndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKKyAgICBpZiAoZHJhd2lu
Z0FyZWEgJiYgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpKQorICAgICAgICByZXR1
cm4gZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpLT51cGRhdGVQYWludE5vZGUob2xk
Tm9kZSk7CiAKLSAgICByZXR1cm4gcHJveHlOb2RlOworICAgIHJldHVybiAwOwogfQogCiBib29s
IFFRdWlja1dlYlBhZ2U6OnVzZXNUcmFkaXRpb25hbERlc2t0b3BCZWhhdmlvdXIoKSBjb25zdApA
QCAtMjYzLDggKzEyOCwxNCBAQCBjb25zdCBRU2l6ZUYmIFFRdWlja1dlYlBhZ2U6OmNvbnRlbnRT
aXplKCkgY29uc3QKIHZvaWQgUVF1aWNrV2ViUGFnZTo6c2V0Q29udGVudFNjYWxlKHFyZWFsIHNj
YWxlKQogewogICAgIEFTU0VSVChzY2FsZSA+IDApOworICAgIGlmIChzY2FsZSA9PSBkLT5jb250
ZW50U2NhbGUpCisgICAgICAgIHJldHVybjsKKwogICAgIGQtPmNvbnRlbnRTY2FsZSA9IHNjYWxl
OwogICAgIGQtPnVwZGF0ZVNpemUoKTsKKyAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJl
YSA9IGQtPndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKKyAgICBpZiAoZHJhd2luZ0FyZWEg
JiYgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpKQorICAgICAgICByZXR1cm4gZHJh
d2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpLT5zZXRQYWludENvbnRlbnRzU2NhbGUoc2Nh
bGUpOwogfQogCiBxcmVhbCBRUXVpY2tXZWJQYWdlOjpjb250ZW50U2NhbGUoKSBjb25zdApAQCAt
Mjg5LDE4ICsxNjAsNCBAQCB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVTaXplKCkK
ICAgICBxLT5zZXRTaXplKHNjYWxlZFNpemUpOwogfQogCi12b2lkIFFRdWlja1dlYlBhZ2VQcml2
YXRlOjpyZXNldFBhaW50Tm9kZSgpCi17Ci0gICAgbV9wYWludE5vZGUgPSAwOwotICAgIERyYXdp
bmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwot
ICAgIGlmIChkcmF3aW5nQXJlYSAmJiBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCkp
Ci0gICAgICAgIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKS0+cHVyZ2VHTFJlc291
cmNlcygpOwotfQotCi1RUXVpY2tXZWJQYWdlUHJpdmF0ZTo6flFRdWlja1dlYlBhZ2VQcml2YXRl
KCkKLXsKLSAgICBpZiAobV9wYWludE5vZGUpCi0gICAgICAgIHN0YXRpY19jYXN0PFBhZ2VQcm94
eU5vZGUqPihtX3BhaW50Tm9kZSktPm1fcGFnZVByaXZhdGUgPSAwOwotfQotCiAjaW5jbHVkZSAi
bW9jX3FxdWlja3dlYnBhZ2VfcC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKaW5kZXggOTljYjJjMi4uNjFjMTIyYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3Bf
cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9w
X3AuaApAQCAtMzUsMjMgKzM1LDE4IEBAIGNsYXNzIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjsKIGNs
YXNzIFFRdWlja1dlYlBhZ2VQcml2YXRlIHsKIHB1YmxpYzoKICAgICBRUXVpY2tXZWJQYWdlUHJp
dmF0ZShRUXVpY2tXZWJQYWdlKiBxLCBRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydEl0ZW0pOwotICAg
IH5RUXVpY2tXZWJQYWdlUHJpdmF0ZSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplKFdlYktpdDo6
V2ViUGFnZVByb3h5Kik7CiAgICAgdm9pZCBzZXREcmF3aW5nQXJlYVNpemUoY29uc3QgUVNpemUm
KTsKIAogICAgIHZvaWQgdXBkYXRlU2l6ZSgpOwogCi0gICAgdm9pZCBwYWludFRvQ3VycmVudEdM
Q29udGV4dCgpOwotICAgIHZvaWQgcmVzZXRQYWludE5vZGUoKTsKLQogICAgIFFTY29wZWRQb2lu
dGVyPFF0V2ViUGFnZUV2ZW50SGFuZGxlcj4gZXZlbnRIYW5kbGVyOwogICAgIFFRdWlja1dlYlBh
Z2UqIGNvbnN0IHE7CiAgICAgUVF1aWNrV2ViVmlldyogY29uc3Qgdmlld3BvcnRJdGVtOwogICAg
IFdlYktpdDo6V2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHk7CiAgICAgV2ViS2l0OjpRdFNHVXBk
YXRlUXVldWUgc2dVcGRhdGVRdWV1ZTsKICAgICBib29sIHBhaW50aW5nSXNJbml0aWFsaXplZDsK
LSAgICBRU0dOb2RlKiBtX3BhaW50Tm9kZTsKIAogICAgIFFTaXplRiBjb250ZW50U2l6ZTsKICAg
ICBxcmVhbCBjb250ZW50U2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRleCA1NTk2NzUwLi4xYjU4NWE5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTgz
NCw2ICs4MzQsNyBAQCBRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KFFRdWlja0l0ZW0qIHBh
cmVudCkKICAgICAsIG1fZXhwZXJpbWVudGFsKG5ldyBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFs
KHRoaXMpKQogewogICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBzZXRDbGlwKHRydWUpOwog
ICAgIGQtPmluaXRpYWxpemUoKTsKICAgICBkLT5pbml0aWFsaXplVG91Y2godGhpcyk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKaW5kZXggYWEy
NWRkMS4uNWRjZTUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmNwcApAQCAtNDYsNiArNDYsMTAgQEAgRHJhd2luZ0FyZWFQcm94eTo6RHJhd2luZ0Fy
ZWFQcm94eShEcmF3aW5nQXJlYVR5cGUgdHlwZSwgV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHIKIAog
RHJhd2luZ0FyZWFQcm94eTo6fkRyYXdpbmdBcmVhUHJveHkoKQogeworICAgIC8vIExheWVyVHJl
ZUhvc3RQcm94eSBjYW4gYmUgc3RpbGwgcmVmZXJlbmNlZCBieSBwYWludCBub2RlLAorICAgIC8v
IHNvIGRyYXdpbmcgYXJlYSBzaG91bGQgYmUgY2xlYXJlZCB0byBhdm9pZCBkZXJlZmVuY2luZyBw
b2ludGVyIHRvIGRlYWxsb2NhdGVkIG9iamVjdC4KKyAgICBpZiAobV9sYXllclRyZWVIb3N0UHJv
eHkpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5zZXREcmF3aW5nQXJlYVByb3h5KDAp
OwogfQogCiB2b2lkIERyYXdpbmdBcmVhUHJveHk6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgY29uc3QgSW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggMmY1ODMyMi4uMTI3ODk1ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCkBAIC0xMTEsNyArMTExLDcgQEAg
cHJvdGVjdGVkOgogICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7CiAKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBP
d25QdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKKyAgICBSZWZQ
dHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKICNlbmRpZgogCiBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHlJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
SW1wbC5jcHAKaW5kZXggN2IxNTM4NC4uN2JhYjAwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCkBAIC0zMzAsNyArMzMwLDcgQEAg
dm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZShjb25zdCBMYXllclRyZWVDb250ZXgKICAgICBtX3dlYlBhZ2VQcm94eS0+ZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKICNpZiBVU0UoVEVYVFVSRV9N
QVBQRVIpCiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRy
ZWVIb3N0UHJveHkgPSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkgPSBhZG9wdFJlZihuZXcgTGF5ZXJUcmVlSG9zdFBy
b3h5KHRoaXMpKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5
ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggODlkNWZiZS4uNWFmZTQzMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApAQCAtMzcsMTQgKzM3LDI3IEBA
CiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
UVQpCisjaW5jbHVkZSA8UU9iamVjdD4KKyNlbmRpZgorCitjbGFzcyBRU0dOb2RlOworCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViTGF5ZXJJbmZvOwogY2xhc3MgV2ViTGF5ZXJVcGRh
dGVJbmZvOwogCiBjbGFzcyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjsKKyNpZiBQTEFURk9S
TShRVCkKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eUJhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8TGF5ZXJUcmVlSG9zdFByb3h5QmFzZT4sIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2xpZW50IHsKK307CisjZWxzZQorY2xhc3MgTGF5ZXJUcmVlSG9zdFByb3h5QmFzZSA6
IHB1YmxpYyBSZWZDb3VudGVkPExheWVyVHJlZUhvc3RQcm94eUJhc2U+LCBwdWJsaWMgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsaWVudCB7Cit9OworI2VuZGlmCiAKLWNsYXNzIExheWVyVHJlZUhv
c3RQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKK2NsYXNzIExh
eWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBMYXllclRyZWVIb3N0UHJveHlCYXNlIHsKIHB1Ymxp
YzoKICAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSopOwogICAgIHZpcnR1
YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOwpAQCAtNTIsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOwogICAgIHZvaWQgc2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1
bWVudERlY29kZXIqKTsKLSAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQpOworICAgIHZvaWQgcGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCwgYm9vbCBzeW5jUmVtb3RlTGF5ZXJEYXRhID0gdHJ1ZSk7CiAgICAgdm9pZCBwdXJnZUdMUmVz
b3VyY2VzKCk7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUoY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0KTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVj
dFRyYWplY3RvcnlWZWN0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwpAQCAtNjgsNiAr
ODEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6
QXJndW1lbnREZWNvZGVyKik7CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwogI2VuZGlmCisg
ICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZHJhd2luZ0FyZWFQcm94eTsgfQorICAgIHZvaWQgc2V0RHJhd2luZ0FyZWFQcm94eShEcmF3aW5n
QXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KSB7IG1fZHJhd2luZ0FyZWFQcm94eSA9IGRyYXdp
bmdBcmVhUHJveHk7IH0KKworI2lmIFBMQVRGT1JNKFFUKQorICAgIFFTR05vZGUqIHVwZGF0ZVBh
aW50Tm9kZShRU0dOb2RlKik7CisgICAgdm9pZCBzZXRQYWludENvbnRlbnRzU2NhbGUoZmxvYXQg
c2NhbGUpIHsgbV9wYWludENvbnRlbnRzU2NhbGUgPSBzY2FsZTsgfQorI2VuZGlmCisKK3Byb3Rl
Y3RlZCBzbG90czoKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9XZWJQcm9jZXNzU2xvdChpbnQsIHZv
aWQqKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2xvdCgpOwogCiBwcm90ZWN0ZWQ6CiAgICAg
UGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVMYXllcihXZWJMYXllcklE
KTsKQEAgLTEyNiwxMSArMTUwLDE3IEBAIHByb3RlY3RlZDoKICNpZiBQTEFURk9STShRVCkKICAg
ICB2b2lkIGRpZEZpcmVWaWV3cG9ydFVwZGF0ZVRpbWVyKFdlYkNvcmU6OlRpbWVyPExheWVyVHJl
ZUhvc3RQcm94eT4qKTsKICAgICBXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVIb3N0UHJveHk+IG1f
dmlld3BvcnRVcGRhdGVUaW1lcjsKKyAgICBmbG9hdCBtX3BhaW50Q29udGVudHNTY2FsZTsKICNl
bmRpZgogCiAgICAgTGF5ZXJNYXAgbV9sYXllcnM7CiAgICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXll
cklEOwogICAgIGludCBtX2lkOworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1faW5QYWludGlu
ZzsKKyNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdDsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRy
ZWVIb3N0UHJveHlOb2RlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVy
VHJlZUhvc3RQcm94eU5vZGVRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZGU5YjhjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9MYXllclRyZWVIb3N0UHJveHlOb2RlUXQuY3BwCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKy8vICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0LmgiCisK
KyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKworI2luY2x1ZGUgPFF0UXVpY2svUVNH
R2VvbWV0cnlOb2RlPgorI2luY2x1ZGUgPFF0UXVpY2svUVNHTWF0ZXJpYWw+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitMYXllclRyZWVIb3N0UHJveHlOb2RlUXQ6OkxheWVyVHJlZUhvc3RQcm94
eU5vZGVRdChMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSkgOgorICAgICAg
ICBtX2xheWVyVHJlZUhvc3RQcm94eShsYXllclRyZWVIb3N0UHJveHkpCisgICAgLCAgIG1fbWF0
ZXJpYWwodGhpcykKKyAgICAsICAgbV9nZW9tZXRyeShRU0dHZW9tZXRyeTo6ZGVmYXVsdEF0dHJp
YnV0ZXNfUG9pbnQyRCgpLCA0KQoreworICAgIHNldEdlb21ldHJ5KCZtX2dlb21ldHJ5KTsKKyAg
ICBzZXRNYXRlcmlhbCgmbV9tYXRlcmlhbCk7Cit9CisKK0xheWVyVHJlZUhvc3RQcm94eU5vZGVR
dDo6fkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdCgpCit7CisgICAgbV9sYXllclRyZWVIb3N0UHJv
eHktPnB1cmdlR0xSZXNvdXJjZXMoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHlOb2Rl
UXQ6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9s
YXllclRyZWVIb3N0UHJveHktPm1faW5QYWludGluZyA9IHRydWU7CisjZW5kaWYKKyAgICBRVHJh
bnNmb3JtIHRyYW5zZm9ybTsKKyAgICBpZiAobWF0cml4KCkpCisgICAgICAgIHRyYW5zZm9ybSA9
IG1hdHJpeCgpLT50b1RyYW5zZm9ybSgpOworICAgIHFyZWFsIHNjYWxlID0gbV9sYXllclRyZWVI
b3N0UHJveHktPm1fcGFpbnRDb250ZW50c1NjYWxlOworICAgIHRyYW5zZm9ybS5zY2FsZShzY2Fs
ZSwgc2NhbGUpOworICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5wYWludFRvQ3VycmVudEdMQ29u
dGV4dCh0cmFuc2Zvcm0sIGluaGVyaXRlZE9wYWNpdHkoKSwgZmFsc2UpOworI2lmbmRlZiBOREVC
VUcKKyAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+bV9pblBhaW50aW5nID0gZmFsc2U7CisjZW5k
aWYKK30KKworLy8gRklYTUU6IHRlbXBvcmFyeSB1bnRpbCBRdCBTY2VuZWdyYXBoIHdpbGwgc3Vw
cG9ydCBjdXN0b20gcGFpbnRpbmcuCitjaGFyIGNvbnN0KiBjb25zdCogTGF5ZXJUcmVlSG9zdFBy
b3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVyOjphdHRyaWJ1dGVOYW1lcygpIGNvbnN0Cit7
CisgICAgc3RhdGljIGNoYXIgY29uc3QqIGNvbnN0IGF0dHJbXSA9IHsgInZlcnRleCIsIDAgfTsK
KyAgICByZXR1cm4gYXR0cjsKK30KKworLy8gdmVydGV4U2hhZGVyIGFuZCBmcmFnbWVudFNoYWRl
ciBhcmUgbm8tb3Agc2hhZGVycy4KKy8vIEFsbCByZWFsIHBhaW50aW5nIGlzIGdvbmUgYnkgVGV4
dHVyZU1hcHBlciB0aHJvdWdoIExheWVyVHJlZUhvc3RQcm94eS4KK2NvbnN0IGNoYXIqIExheWVy
VHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlNYXRlcmlhbFNoYWRlcjo6dmVydGV4U2hhZGVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gImF0dHJpYnV0ZSBoaWdocCB2ZWM0IHZlcnRleDsgXG4iCisg
ICAgICAgICAgICJ2b2lkIG1haW4oKSB7IGdsX1Bvc2l0aW9uID0gdmVydGV4OyB9IjsKK30KKwor
Y29uc3QgY2hhciogTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVy
OjpmcmFnbWVudFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuICJ2b2lkIG1haW4oKSB7IGds
X0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsgfSI7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVyOjp1cGRhdGVTdGF0ZShj
b25zdCBSZW5kZXJTdGF0ZSYgc3RhdGUsIFFTR01hdGVyaWFsKiBuZXdNYXRlcmlhbCwgUVNHTWF0
ZXJpYWwqIG9sZE1hdGVyaWFsKQoreworICAgIGlmICghbmV3TWF0ZXJpYWwpCisgICAgICAgIHJl
dHVybjsKKworICAgIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdCogbm9kZSA9IHN0YXRpY19jYXN0
PFByb3h5TWF0ZXJpYWwqPihuZXdNYXRlcmlhbCktPm1fbm9kZTsKKyAgICAvLyBGSVhNRTogTm9y
bWFsbHkgd2Ugd291bGRuJ3QgcGFpbnQgaW5zaWRlIFFTR01hdGVyaWFsU2hhZGVyOjp1cGRhdGVT
dGF0ZSwKKyAgICAvLyBidXQgdGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIHVudGlsIGN1c3RvbSBw
YWludCBub2RlcyBhcmUgYXZhaWxhYmxlLgorICAgIGlmIChub2RlKQorICAgICAgICBub2RlLT5w
YWludFRvQ3VycmVudEdMQ29udGV4dCgpOworfQorCitRU0dNYXRlcmlhbFR5cGUqIExheWVyVHJl
ZUhvc3RQcm94eU5vZGVRdDo6UHJveHlNYXRlcmlhbDo6dHlwZSgpIGNvbnN0Cit7CisgICAgc3Rh
dGljIFFTR01hdGVyaWFsVHlwZSB0eXBlOworICAgIHJldHVybiAmdHlwZTsKK30KKworUVNHTWF0
ZXJpYWxTaGFkZXIqIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlNYXRlcmlhbDo6Y3Jl
YXRlU2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IFByb3h5TWF0ZXJpYWxTaGFkZXI7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisvLyAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmEyNWRkODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXllclRyZWVIb3N0UHJveHlOb2RlUXRfaAorI2RlZmlu
ZSBMYXllclRyZWVIb3N0UHJveHlOb2RlUXRfaAorCisjaW5jbHVkZSA8UXRRdWljay9RU0dHZW9t
ZXRyeU5vZGU+CisjaW5jbHVkZSA8UXRRdWljay9RU0dNYXRlcmlhbD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllclRyZWVIb3N0UHJv
eHk7CitjbGFzcyBMYXllclRyZWVIb3N0UHJveHlOb2RlUXQgOiBwdWJsaWMgUVNHR2VvbWV0cnlO
b2RlIHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVIb3N0UHJveHlOb2RlUXQoTGF5ZXJUcmVlSG9z
dFByb3h5Kik7CisgICAgfkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdCgpOworCisgICAgdm9pZCBw
YWludFRvQ3VycmVudEdMQ29udGV4dCgpOworCitwcml2YXRlOgorCisgICAgc3RydWN0IFByb3h5
TWF0ZXJpYWxTaGFkZXIgOiBwdWJsaWMgUVNHTWF0ZXJpYWxTaGFkZXIgeworICAgICAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgUmVuZGVyU3RhdGUmLCBRU0dNYXRlcmlhbCosIFFT
R01hdGVyaWFsKik7CisgICAgICAgIHZpcnR1YWwgY2hhciBjb25zdCogY29uc3QqIGF0dHJpYnV0
ZU5hbWVzKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFk
ZXIoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlcigp
IGNvbnN0OworICAgIH07CisKKyAgICBzdHJ1Y3QgUHJveHlNYXRlcmlhbCA6IHB1YmxpYyBRU0dN
YXRlcmlhbCB7CisgICAgICAgIFByb3h5TWF0ZXJpYWwoTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0
KiBub2RlKSA6IG1fbm9kZShub2RlKSB7IH0KKworICAgICAgICBRU0dNYXRlcmlhbFR5cGUqIHR5
cGUoKSBjb25zdDsKKyAgICAgICAgUVNHTWF0ZXJpYWxTaGFkZXIqIGNyZWF0ZVNoYWRlcigpIGNv
bnN0OworCisgICAgICAgIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdCogbV9ub2RlOworICAgIH07
CisKKyAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsK
KyAgICBQcm94eU1hdGVyaWFsIG1fbWF0ZXJpYWw7CisgICAgUVNHR2VvbWV0cnkgbV9nZW9tZXRy
eTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gTGF5ZXJUcmVlSG9z
dFByb3h5Tm9kZVF0X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9M
YXllclRyZWVIb3N0UHJveHlRdC5jcHAKaW5kZXggZjlhYmY0OS4uOGRiZmU3MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3Bw
CkBAIC0yMiw3ICsyMiw5IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lu
Y2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgogCisjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAj
aW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9z
dFByb3h5Tm9kZVF0LmgiCiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VJRC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgpAQCAtMTQ1LDYgKzE0Nyw3OCBA
QCBjbGFzcyBTZXRSb290TGF5ZXJNZXNzYWdlCiAgICAgICAgIDogcHVibGljIExheWVyVHJlZU1l
c3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8U2V0Um9vdExheWVyTWVzc2FnZURhdGEsIExheWVyVHJl
ZU1lc3NhZ2VUb1JlbmRlcmVyOjpTZXRSb290TGF5ZXI+IHsgfTsKIH0KIAorI2lmIFBMQVRGT1JN
KFFUKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE1haW5UaHJlYWRNZXNzYWdlU2VuZGVy
IHsKKyAgICBzdHJ1Y3QgQ2FsbGJhY2tDb250ZXh0IHsKKyAgICAgICAgQ2FsbGJhY2tDb250ZXh0
KGNvbnN0IFQmIG1lc3NhZ2UsIExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5
KSA6CisgICAgICAgICAgICAgICAgbV9tZXNzYWdlSUQoVDo6bWVzc2FnZUlEKQorICAgICAgICAg
ICAgLCAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5KGxheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9lbmNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjpjcmVh
dGUoMCk7CisgICAgICAgICAgICBtX2VuY29kZXItPmVuY29kZShtZXNzYWdlKTsKKyAgICAgICAg
fQorICAgICAgICB+Q2FsbGJhY2tDb250ZXh0KCkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIE93blB0cjxDb3JlSVBDOjpBcmd1bWVudEVuY29kZXI+IG1fZW5jb2RlcjsKKyAgICAgICAg
Q29yZUlQQzo6TWVzc2FnZUlEIG1fbWVzc2FnZUlEOworICAgICAgICBSZWZQdHI8TGF5ZXJUcmVl
SG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKKyAgICB9OworICAgIHN0YXRpYyB2b2lk
IG1haW5UaHJlYWRDYWxsYmFjayh2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgQ2FsbGJhY2tD
b250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FsbGJhY2tDb250ZXh0Kj4oZGF0YSk7Cisg
ICAgICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkgPSBjb250ZXh0LT5tX2xh
eWVyVHJlZUhvc3RQcm94eS0+ZHJhd2luZ0FyZWFQcm94eSgpOworICAgICAgICBpZiAoZHJhd2lu
Z0FyZWFQcm94eSkgeworICAgICAgICAgICAgLy8gSGF2ZSB0byBpbml0aWFsaXplIGRlc3RhbmF0
aW9uIElEIGhlcmUgYmVjYXVzZSB0aGlzIGRhdGEgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20KKyAg
ICAgICAgICAgIC8vIHBhaW50aW5nIHRocmVhZC4KKyAgICAgICAgICAgICpyZWludGVycHJldF9j
YXN0PHVpbnQ2NF90Kj4oY29udGV4dC0+bV9lbmNvZGVyLT5idWZmZXIoKSkgPSBkcmF3aW5nQXJl
YVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpOworICAgICAgICAgICAgQ29yZUlQQzo6Q29ubmVjdGlv
biogY29ubmVjdGlvbiA9IGRyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5jb25u
ZWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoY29ubmVjdGlvbikKKyAgICAgICAgICAgICAgICBj
b25uZWN0aW9uLT5zZW5kTWVzc2FnZShjb250ZXh0LT5tX21lc3NhZ2VJRCwgY29udGV4dC0+bV9l
bmNvZGVyLnJlbGVhc2UoKSwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIGNvbnRleHQ7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgc2VuZE1lc3NhZ2VPbk1haW5UaHJlYWQoY29uc3Qg
VCYgbWVzc2FnZSwgTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkpCisgICAg
eworICAgICAgICBDYWxsYmFja0NvbnRleHQqIGNvbnRleHQgPSBuZXcgQ2FsbGJhY2tDb250ZXh0
KG1lc3NhZ2UsIGxheWVyVHJlZUhvc3RQcm94eSk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
Jm1haW5UaHJlYWRDYWxsYmFjaywgY29udGV4dCk7CisgICAgfQorfTsKKworc3RydWN0IExheWVy
VHJlZUhvc3RQcm94eVJlZiB7CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5UmVmKExheWVyVHJlZUhv
c3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KSA6IG1fbGF5ZXJUcmVlSG9zdFByb3h5KGxheWVy
VHJlZUhvc3RQcm94eSkKKyAgICB7IH0KKyAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBt
X2xheWVyVHJlZUhvc3RQcm94eTsKK307CisKK3N0YXRpYyB2b2lkIG1haW5UaHJlYWRVcGRhdGVW
aWV3cG9ydEludm9rZXIodm9pZCogZGF0YSkKK3sKKyAgICBMYXllclRyZWVIb3N0UHJveHlSZWYq
IGNvbnRleHQgPSBzdGF0aWNfY2FzdDxMYXllclRyZWVIb3N0UHJveHlSZWYqPihkYXRhKTsKKyAg
ICBjb250ZXh0LT5tX2xheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKKyAgICBk
ZWxldGUgY29udGV4dDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlVmlld3BvcnRPbk1haW5UaHJl
YWQoTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkpCit7CisgICAgTGF5ZXJU
cmVlSG9zdFByb3h5UmVmKiBjb250ZXh0ID0gbmV3IExheWVyVHJlZUhvc3RQcm94eVJlZihsYXll
clRyZWVIb3N0UHJveHkpOworICAgIGNhbGxPbk1haW5UaHJlYWQoJm1haW5UaHJlYWRVcGRhdGVW
aWV3cG9ydEludm9rZXIsIGNvbnRleHQpOworfQorI2Vsc2UKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBNYWluVGhyZWFkTWVzc2FnZVNlbmRlciB7CisgICAgc3RhdGljIHZvaWQgc2VuZE1l
c3NhZ2VPbk1haW5UaHJlYWQoY29uc3QgVCYgbWVzc2FnZSwgTGF5ZXJUcmVlSG9zdFByb3h5KiBs
YXllclRyZWVIb3N0UHJveHkpCisgICAgeworICAgICAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3
aW5nQXJlYVByb3h5ID0gbGF5ZXJUcmVlSG9zdFByb3h5LT5kcmF3aW5nQXJlYVByb3h5KCk7Cisg
ICAgICAgIGlmIChkcmF3aW5nQXJlYVByb3h5KQorICAgICAgICAgICAgZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQobWVzc2FnZSwgZHJhd2luZ0FyZWFQcm94eS0+cGFn
ZSgpLT5wYWdlSUQoKSk7CisgICAgfQorfTsKK3N0YXRpYyB1cGRhdGVWaWV3cG9ydE9uTWFpblRo
cmVhZChMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSkKK3sKKyAgICBsYXll
clRyZWVIb3N0UHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisjZW5kaWYKKwogUGFzc093blB0
cjxHcmFwaGljc0xheWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVy
SUQgbGF5ZXJJRCkKIHsKICAgICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcih0aGlzKTsKQEAgLTE1OCw3ICsyMzIsMTEgQEAgTGF5ZXJUcmVl
SG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0Fy
ZWFQcm94eSkKICAgICA6IG1fYW5pbWF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAm
TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCkKICAgICAsIG1fZHJhd2luZ0FyZWFQ
cm94eShkcmF3aW5nQXJlYVByb3h5KQogICAgICwgbV92aWV3cG9ydFVwZGF0ZVRpbWVyKHRoaXMs
ICZMYXllclRyZWVIb3N0UHJveHk6OmRpZEZpcmVWaWV3cG9ydFVwZGF0ZVRpbWVyKQorICAgICwg
bV9wYWludENvbnRlbnRzU2NhbGUoMS4wKQogICAgICwgbV9yb290TGF5ZXJJRCgwKQorI2lmbmRl
ZiBOREVCVUcKKyAgICAsIG1faW5QYWludGluZyhmYWxzZSkKKyNlbmRpZgogewogfQogCkBAIC0x
NjcsMTIgKzI0NSwxNCBAQCBMYXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJveHko
KQogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJlZW50cmFudC4KLXZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQordm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHksIGJvb2wgc3luY1JlbW90ZUxheWVyRGF0YSkKIHsKICAgICBp
ZiAoIW1fdGV4dHVyZU1hcHBlcikKICAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1h
cHBlckdMOjpjcmVhdGUoKTsKIAotICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgaWYgKHN5
bmNSZW1vdGVMYXllckRhdGEpCisgICAgICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CisKICAgICBH
cmFwaGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CiAgICAgaWYgKCFj
dXJyZW50Um9vdExheWVyKQogICAgICAgICByZXR1cm47CkBAIC0yMDYsMTEgKzI4NiwxMiBAQCB2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdAogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlkRmly
ZVZpZXdwb3J0VXBkYXRlVGltZXIoVGltZXI8TGF5ZXJUcmVlSG9zdFByb3h5PiopCiB7Ci0gICAg
dXBkYXRlVmlld3BvcnQoKTsKKyAgICB1cGRhdGVWaWV3cG9ydE9uTWFpblRocmVhZCh0aGlzKTsK
IH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKIHsKKyAgICBB
U1NFUlQoIW1faW5QYWludGluZyk7CiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT51cGRhdGVWaWV3
cG9ydCgpOwogfQogCkBAIC01MTQsNyArNTk1LDYgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnN5bmNSZW1vdGVDb250ZW50KCkKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXNoVXBkYXRl
VG9RdWV1ZShQYXNzT3duUHRyPExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPiBtZXNzYWdlKQog
ewogICAgIG1fbWVzc2FnZXNUb1JlbmRlcmVyLmFwcGVuZChtZXNzYWdlKTsKLSAgICB1cGRhdGVW
aWV3cG9ydCgpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZUZvckxh
eWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8pCkBAIC01OTQsMTQgKzY3NCwxNCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQogCiB2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25z
dCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewotICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3RvciksIG1fZHJh
d2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgTWFpblRocmVhZE1lc3NhZ2VT
ZW5kZXI8TWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdFRyYWpl
Y3RvcnlWZWN0b3I+OjpzZW5kTWVzc2FnZU9uTWFpblRocmVhZChNZXNzYWdlczo6TGF5ZXJUcmVl
SG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVj
dG9yKSwgdGhpcyk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29u
dGVudHNSZWN0QW5kU2NhbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUpCiB7CiAg
ICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKICAgICBtX2NvbnRlbnRzU2NhbGUgPSBz
Y2FsZTsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShyZWN0
LCBzY2FsZSksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgTWFp
blRocmVhZE1lc3NhZ2VTZW5kZXI8TWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVD
b250ZW50UmVjdEFuZFNjYWxlPjo6c2VuZE1lc3NhZ2VPbk1haW5UaHJlYWQoTWVzc2FnZXM6Okxh
eWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlKHJlY3QsIHNjYWxlKSwg
dGhpcyk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUdMUmVzb3VyY2VzKCkK
QEAgLTYxNSw3ICs2OTUsMjAgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlR0xSZXNv
dXJjZXMoKQogCiAgICAgbV90ZXh0dXJlTWFwcGVyLmNsZWFyKCk7CiAKLSAgICBtX2RyYXdpbmdB
cmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0
OjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJ
RCgpKTsKKyAgICBNYWluVGhyZWFkTWVzc2FnZVNlbmRlcjxNZXNzYWdlczo6TGF5ZXJUcmVlSG9z
dDo6UHVyZ2VCYWNraW5nU3RvcmVzPjo6c2VuZE1lc3NhZ2VPbk1haW5UaHJlYWQoTWVzc2FnZXM6
OkxheWVyVHJlZUhvc3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCB0aGlzKTsKK30KKworUVNHTm9k
ZSogTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSkK
K3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0g
VGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKworICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CisK
KyAgICBpZiAoIW9sZE5vZGUpCisgICAgICAgIHJldHVybiBuZXcgTGF5ZXJUcmVlSG9zdFByb3h5
Tm9kZVF0KHRoaXMpOworCisgICAgcmV0dXJuIG9sZE5vZGU7CiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZS5jcHAKaW5kZXggZDEyZWIwYi4uODdjYjlkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAK
QEAgLTE3Myw2ICsxNzMsOSBAQCBxcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Om91
dGVyQm91bmRlZENTU1NjYWxlKHFyZWFsIGNzc1NjYWxlKQogCiB2b2lkIFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6c2V0SXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3Qp
CiB7CisgICAgaWYgKGl0ZW1SZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Vmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKIAogICAgIHFyZWFsIGl0ZW1TY2Fs
ZSA9IG1fdmlld3BvcnQtPndpZHRoKCkgLyBpdGVtUmVjdC53aWR0aCgpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDkwNjc5ZTMuLjMwNDJiOTYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxMi0wMS0xOSAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtv
LnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFtXSzJdIFN1cHBvcnQgdGhy
ZWFkZWQgcmVuZGVyZXIgaW4gV0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03NjY2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlbW92ZWQgYWRkaW5nIG9mIFFNTF9OT19USFJFQURFRF9SRU5ERVJFUiB0
byBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9tYWlu
LmNwcDoKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTAxLTE5ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNvbWUgcGVyZiB0ZXN0cyB0aW1lIG91dCB3aGVuIHJh
biBieSBydW4tcGVyZi10ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFp
bi5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAppbmRleCBmZWFlMTRhLi4zNjYz
NzczIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAorKysgYi9Ub29s
cy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcApAQCAtMzksOSArMzksNiBAQAogCiBpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgLy8gRklYTUU6IFdlIG11c3QgYWRkIHN1cHBv
cnQgZm9yIHRoZSB0aHJlYWRlZCByZW5kZXJpbmcgYXMgaXQgaXMgdGhlIGRlZmF1bHQuCi0gICAg
cXB1dGVudigiUU1MX05PX1RIUkVBREVEX1JFTkRFUkVSIiwgUUJ5dGVBcnJheSgiMSIpKTsKLQog
ICAgIE1pbmlCcm93c2VyQXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwogCiAgICAgaWYgKGFw
cC5pc1JvYm90aXplZCgpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123206</attachid>
            <date>2012-01-19 15:13:19 -0800</date>
            <delta_ts>2012-01-19 15:29:01 -0800</delta_ts>
            <desc>Fix windows build.</desc>
            <filename>threaded_painting_04.diff</filename>
            <type>text/plain</type>
            <size>32719</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxOWE0MmEzLi5hMjcxZjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEg
QEAKKzIwMTItMDEtMTkgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hl
c2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVkIHJl
bmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCB0aHJlYWRlZCBwYWludGluZyBzdXBwb3J0IHRvIFF0IFdlYmtpdDIuCisgICAg
ICAgIEFsbCBUZXh0dXJlTWFwcGVyIGFuZCBHcmFwaGljc0xheWVyIG9iamVjdCBhcmUgY3JlYXRl
ZCBvbiByZW5kZXJpbmcKKyAgICAgICAgdGhyZWFkIGFuZCBjYW4gYmUgYWNjZXNzZWQgdGhyb3Vn
aCByZW5kZXJpbmcgdGhyZWFkIG9ubHkuCisgICAgICAgIExheWVyIHVwZGF0ZXMgYXJlIHJlY2Vp
dmVkIHRocm91Z2ggbV9tZXNzYWdlc1RvUmVuZGVyZXIgcXVldWUgYW5kCisgICAgICAgIGFwcGxp
ZWQgdG8gVGV4dHVyZU1hcHBlck5vZGUgdHJlZSBpbiB1cGRhdGVQYWludE5vZGUsIHdoZW4gVUkg
dGhyZWFkCisgICAgICAgIGlzIHN5bmNocm9ub3VzbHkgbG9ja2VkIGJ5IHJlbmRlciB0aHJlYWQs
IHNvIG5vIGV4dHJhIHN5bmNocm9uaXphdGlvbiAKKyAgICAgICAgaXMgbmVjZXNzYXJ5LgorICAg
ICAgICBNZXNzYWdlcyBmcm9tIFRleHR1cmVNYXBwZXIgYXJlIGRlbGl2ZXJlZCBiYWNrIHRocm91
Z2ggImNhbGxPbk1haW5UaHJlYWQiCisgICAgICAgIGludGVyZmFjZS4KKyAgICAgICAgTGF5ZXJU
cmVlSG9zdFByb3h5IGlzIHRocmVhZCBzYWZlIHJlZi1jb3VudGVkIGFuZCBoZWxkIGFsaXZlIHVu
dGlsIHBhaW50CisgICAgICAgIG5vZGUgb3IgZHJhd2luZyBhcmVhIGRlc3RydWN0aW9uLgorCisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnBhZ2UuY3BwOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6UVF1aWNrV2ViUGFnZSk6CisgICAg
ICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6UVF1aWNrV2ViUGFnZVByaXZhdGUpOgorICAgICAg
ICAoUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKToKKyAgICAgICAgKFFRdWlja1dlYlBh
Z2U6OnNldENvbnRlbnRTY2FsZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlX3BfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBs
Ojp+RHJhd2luZ0FyZWFQcm94eUltcGwpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6OmRyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6OnNldERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OnNldFBhaW50Q29udGVudHNTY2FsZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3F0L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHlOb2RlUXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6fkxheWVyVHJlZUhvc3RQ
cm94eU5vZGVRdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6
cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHlOb2RlUXQ6OlByb3h5TWF0ZXJpYWxTaGFkZXI6OmF0dHJpYnV0ZU5hbWVzKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVy
Ojp2ZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHlOb2Rl
UXQ6OlByb3h5TWF0ZXJpYWxTaGFkZXI6OmZyYWdtZW50U2hhZGVyKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVyOjp1cGRhdGVT
dGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlN
YXRlcmlhbDo6dHlwZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVR
dDo6UHJveHlNYXRlcmlhbDo6Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQv
TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHlOb2RlUXQ6OlByb3h5TWF0ZXJpYWw6OlByb3h5TWF0ZXJpYWwpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok1haW5UaHJlYWRNZXNzYWdlU2VuZGVyOjpDYWxsYmFja0NvbnRleHQ6OkNhbGxiYWNr
Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJlYWRNZXNzYWdlU2VuZGVyOjpDYWxs
YmFja0NvbnRleHQ6On5DYWxsYmFja0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpNYWluVGhy
ZWFkTWVzc2FnZVNlbmRlcjo6bWFpblRocmVhZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
TWFpblRocmVhZE1lc3NhZ2VTZW5kZXI6OnNlbmRNZXNzYWdlT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5UmVmOjpMYXllclRyZWVIb3N0UHJveHlSZWYp
OgorICAgICAgICAoV2ViS2l0OjptYWluVGhyZWFkVXBkYXRlVmlld3BvcnRJbnZva2VyKToKKyAg
ICAgICAgKFdlYktpdDo6dXBkYXRlVmlld3BvcnRPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UHJveHk6OkxheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmRpZEZpcmVWaWV3cG9ydFVwZGF0ZVRp
bWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9y
dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cHVzaFVwZGF0ZVRvUXVl
dWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VHTFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlUGFpbnROb2RlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzZXRJdGVtUmVjdFZpc2libGUpOgorCiAyMDEy
LTAxLTE4ICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgogCiAgICAgICAgIE5lZWQgYSBX
ZWJLaXQyIEFQSSBmb3Igc2V0dGluZyBtZWRpYSB2b2x1bWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDM1OTgz
ZjAuLjNmMzQ3YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMjU1LDYgKzI1NSw3IEBAIEhFQURFUlMgKz0g
XAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5LmggXAogICAgIFVJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1dlYlVJQ2xp
ZW50LmggXAorICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlOb2RlUXQuaCBcCiAg
ICAgVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlRXZlbnRIYW5kbGVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVy
LmggXApAQCAtNTg1LDYgKzU4Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L0xh
eWVyVHJlZUhvc3RQcm94eU5vZGVRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVI
b3N0UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIu
Y3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5kZXgg
YThjMTcxOC4uYzJhNjJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yNywxNCArMjcsMTMgQEAKICNpbmNsdWRlICJxcXVp
Y2t3ZWJwYWdlX3BfcC5oIgogI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgogI2luY2x1ZGUg
PFF0UXVpY2svUVF1aWNrQ2FudmFzPgotI2luY2x1ZGUgPFF0UXVpY2svUVNHR2VvbWV0cnlOb2Rl
PgotI2luY2x1ZGUgPFF0UXVpY2svUVNHTWF0ZXJpYWw+CiAKIFFRdWlja1dlYlBhZ2U6OlFRdWlj
a1dlYlBhZ2UoUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVtKQogICAgIDogUVF1aWNrSXRlbSh2
aWV3cG9ydEl0ZW0pCiAgICAgLCBkKG5ldyBRUXVpY2tXZWJQYWdlUHJpdmF0ZSh0aGlzLCB2aWV3
cG9ydEl0ZW0pKQogewogICAgIHNldEZsYWcoSXRlbUhhc0NvbnRlbnRzKTsKKyAgICBzZXRDbGlw
KHRydWUpOwogCiAgICAgLy8gV2UgZG8gdGhlIHRyYW5zZm9ybSBmcm9tIHRoZSB0b3AgbGVmdCBz
byB0aGUgdmlld3BvcnQgY2FuIGFzc3VtZSB0aGUgcG9zaXRpb24gMCwgMAogICAgIC8vIGlzIGFs
d2F5cyB3aGVyZSByZW5kZXJpbmcgc3RhcnRzLgpAQCAtNjgsNyArNjcsNiBAQCBRUXVpY2tXZWJQ
YWdlUHJpdmF0ZTo6UVF1aWNrV2ViUGFnZVByaXZhdGUoUVF1aWNrV2ViUGFnZSogcSwgUVF1aWNr
V2ViVmlldyogdmlldwogICAgICwgd2ViUGFnZVByb3h5KDApCiAgICAgLCBzZ1VwZGF0ZVF1ZXVl
KHEpCiAgICAgLCBwYWludGluZ0lzSW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAgLCBtX3BhaW50Tm9k
ZSgwKQogICAgICwgY29udGVudFNjYWxlKDEpCiAgICAgLCB1c2VUcmFkaXRpb25hbERlc2t0b3BC
ZWhhdmlvdXIoZmFsc2UpCiB7CkBAIC04MCwxOCArNzgsNiBAQCB2b2lkIFFRdWlja1dlYlBhZ2VQ
cml2YXRlOjppbml0aWFsaXplKFdlYktpdDo6V2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkpCiAg
ICAgZXZlbnRIYW5kbGVyLnJlc2V0KG5ldyBRdFdlYlBhZ2VFdmVudEhhbmRsZXIodG9BUEkod2Vi
UGFnZVByb3h5KSwgcSwgdmlld3BvcnRJdGVtKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBjb21wdXRl
RWZmZWN0aXZlT3BhY2l0eShjb25zdCBRUXVpY2tJdGVtKiBpdGVtKQotewotICAgIGlmICghaXRl
bSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0gaXRlbS0+b3BhY2l0
eSgpOwotICAgIGlmIChvcGFjaXR5IDwgMC4wMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gb3BhY2l0eSAqIGNvbXB1dGVFZmZlY3RpdmVPcGFjaXR5KGl0ZW0tPnBhcmVudEl0ZW0o
KSk7Ci19Ci0KIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnNldERyYXdpbmdBcmVhU2l6ZShj
b25zdCBRU2l6ZSYgc2l6ZSkKIHsKICAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9
IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKQEAgLTEwMCwxMzQgKzg2LDEzIEBAIHZvaWQg
UVF1aWNrV2ViUGFnZVByaXZhdGU6OnNldERyYXdpbmdBcmVhU2l6ZShjb25zdCBRU2l6ZSYgc2l6
ZSkKICAgICBkcmF3aW5nQXJlYS0+c2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplKHNpemUpLCBXZWJD
b3JlOjpJbnRTaXplKCkpOwogfQogCi12b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRv
Q3VycmVudEdMQ29udGV4dCgpCi17Ci0gICAgaWYgKCFxLT5pc1Zpc2libGUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBxLT5pdGVtVHJhbnNmb3JtKDAs
IDApOwotICAgIHRyYW5zZm9ybS5zY2FsZShjb250ZW50U2NhbGUsIGNvbnRlbnRTY2FsZSk7Ci0K
LSAgICBmbG9hdCBvcGFjaXR5ID0gY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHkocSk7Ci0gICAgUVJl
Y3RGIGNsaXBSZWN0ID0gcS0+cGFyZW50SXRlbSgpLT5tYXBSZWN0VG9TY2VuZShxLT5wYXJlbnRJ
dGVtKCktPmJvdW5kaW5nUmVjdCgpKTsKLQotICAgIGlmICghY2xpcFJlY3QuaXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHdl
YlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBpZiAoIWRyYXdpbmdBcmVhKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBHTCBlcnJvciBjb2RlIHN0YXlz
IGZyb20gcHJldmlvdXMgUVQgb3BlcmF0aW9ucy4KLSAgICBnbEdldEVycm9yKCk7Ci0KLSAgICBn
bEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIEFTU0VSVCghZ2xHZXRFcnJvcigpKTsKLSAg
ICBjb25zdCBpbnQgbGVmdCA9IGNsaXBSZWN0LmxlZnQoKTsKLSAgICBjb25zdCBpbnQgd2lkdGgg
PSBjbGlwUmVjdC53aWR0aCgpOwotICAgIGNvbnN0IGludCBib3R0b20gPSBxLT5jYW52YXMoKS0+
aGVpZ2h0KCkgLSAoY2xpcFJlY3QuYm90dG9tKCkgKyAxKTsKLSAgICBjb25zdCBpbnQgaGVpZ2h0
ID0gY2xpcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICBnbFNjaXNzb3IobGVmdCwgYm90dG9tLCB3aWR0
aCwgaGVpZ2h0KTsKLSAgICBBU1NFUlQoIWdsR2V0RXJyb3IoKSk7Ci0KLSAgICBkcmF3aW5nQXJl
YS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtLCBvcGFjaXR5KTsKLQotICAgIGds
RGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIEFTU0VSVCghZ2xHZXRFcnJvcigpKTsKLX0K
LQotc3RydWN0IFBhZ2VQcm94eU1hdGVyaWFsOwotc3RydWN0IFBhZ2VQcm94eU5vZGU7Ci0KLS8v
IEZJWE1FOiB0ZW1wb3JhcnkgdW50aWwgUXQgU2NlbmVncmFwaCB3aWxsIHN1cHBvcnQgY3VzdG9t
IHBhaW50aW5nLgotc3RydWN0IFBhZ2VQcm94eU1hdGVyaWFsU2hhZGVyIDogcHVibGljIFFTR01h
dGVyaWFsU2hhZGVyIHsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgUmVuZGVy
U3RhdGUmIHN0YXRlLCBRU0dNYXRlcmlhbCogbmV3TWF0ZXJpYWwsIFFTR01hdGVyaWFsKiBvbGRN
YXRlcmlhbCk7Ci0gICAgdmlydHVhbCBjaGFyIGNvbnN0KiBjb25zdCogYXR0cmlidXRlTmFtZXMo
KSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljIGNoYXIgY29uc3QqIGNvbnN0IGF0dHJbXSA9
IHsgInZlcnRleCIsIDAgfTsKLSAgICAgICAgcmV0dXJuIGF0dHI7Ci0gICAgfQotCi0gICAgLy8g
dmVydGV4U2hhZGVyIGFuZCBmcmFnbWVudFNoYWRlciBhcmUgbm8tb3Agc2hhZGVycy4KLSAgICAv
LyBBbGwgcmVhbCBwYWludGluZyBpcyBnb25lIGJ5IFRleHR1cmVNYXBwZXIgdGhyb3VnaCBMYXll
clRyZWVIb3N0UHJveHkuCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXIoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICJhdHRyaWJ1dGUgaGlnaHAgdmVjNCB2ZXJ0ZXg7
IFxuIgotICAgICAgICAgICAgICAgInZvaWQgbWFpbigpIHsgZ2xfUG9zaXRpb24gPSB2ZXJ0ZXg7
IH0iOwotICAgIH0KLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXIoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICJ2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9
IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsgfSI7Ci0gICAgfQotfTsKLQotc3RydWN0IFBhZ2VQ
cm94eU1hdGVyaWFsIDogcHVibGljIFFTR01hdGVyaWFsIHsKLSAgICBQYWdlUHJveHlNYXRlcmlh
bChQYWdlUHJveHlOb2RlKiBub2RlKSA6IG1fbm9kZShub2RlKSB7IH0KLQotICAgIFFTR01hdGVy
aWFsVHlwZSogdHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGF0aWMgUVNHTWF0ZXJpYWxU
eXBlIHR5cGU7Ci0gICAgICAgIHJldHVybiAmdHlwZTsKLSAgICB9Ci0KLSAgICBRU0dNYXRlcmlh
bFNoYWRlciogY3JlYXRlU2hhZGVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
UGFnZVByb3h5TWF0ZXJpYWxTaGFkZXI7Ci0gICAgfQotCi0gICAgUGFnZVByb3h5Tm9kZSogbV9u
b2RlOwotfTsKLQotc3RydWN0IFBhZ2VQcm94eU5vZGUgOiBwdWJsaWMgUVNHR2VvbWV0cnlOb2Rl
IHsKLSAgICBQYWdlUHJveHlOb2RlKFFRdWlja1dlYlBhZ2VQcml2YXRlKiBwYWdlKSA6Ci0gICAg
ICAgIG1fcGFnZVByaXZhdGUocGFnZSkKLSAgICAgICwgbV9tYXRlcmlhbCh0aGlzKQotICAgICAg
LCBtX2dlb21ldHJ5KFFTR0dlb21ldHJ5OjpkZWZhdWx0QXR0cmlidXRlc19Qb2ludDJEKCksIDQp
Ci0gICAgewotICAgICAgICBzZXRHZW9tZXRyeSgmbV9nZW9tZXRyeSk7Ci0gICAgICAgIHNldE1h
dGVyaWFsKCZtX21hdGVyaWFsKTsKLSAgICB9Ci0KLSAgICB+UGFnZVByb3h5Tm9kZSgpCi0gICAg
ewotICAgICAgICBpZiAobV9wYWdlUHJpdmF0ZSkKLSAgICAgICAgICAgIG1fcGFnZVByaXZhdGUt
PnJlc2V0UGFpbnROb2RlKCk7Ci0gICAgfQotCi0gICAgUVF1aWNrV2ViUGFnZVByaXZhdGUqIG1f
cGFnZVByaXZhdGU7Ci0gICAgUGFnZVByb3h5TWF0ZXJpYWwgbV9tYXRlcmlhbDsKLSAgICBRU0dH
ZW9tZXRyeSBtX2dlb21ldHJ5OwotfTsKLQotdm9pZCBQYWdlUHJveHlNYXRlcmlhbFNoYWRlcjo6
dXBkYXRlU3RhdGUoY29uc3QgUmVuZGVyU3RhdGUmIHN0YXRlLCBRU0dNYXRlcmlhbCogbmV3TWF0
ZXJpYWwsIFFTR01hdGVyaWFsKiBvbGRNYXRlcmlhbCkKLXsKLSAgICBpZiAoIW5ld01hdGVyaWFs
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlUHJveHlOb2RlKiBub2RlID0gc3RhdGljX2Nh
c3Q8UGFnZVByb3h5TWF0ZXJpYWwqPihuZXdNYXRlcmlhbCktPm1fbm9kZTsKLSAgICAvLyBGSVhN
RTogTm9ybWFsbHkgd2Ugd291bGRuJ3QgcGFpbnQgaW5zaWRlIFFTR01hdGVyaWFsU2hhZGVyOjp1
cGRhdGVTdGF0ZSwKLSAgICAvLyBidXQgdGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIHVudGlsIGN1
c3RvbSBwYWludCBub2RlcyBhcmUgYXZhaWxhYmxlLgotICAgIGlmIChub2RlLT5tX3BhZ2VQcml2
YXRlKQotICAgICAgICBub2RlLT5tX3BhZ2VQcml2YXRlLT5wYWludFRvQ3VycmVudEdMQ29udGV4
dCgpOwotfQotCiBRU0dOb2RlKiBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoUVNHTm9k
ZSogb2xkTm9kZSwgVXBkYXRlUGFpbnROb2RlRGF0YSopCiB7Ci0gICAgaWYgKCEoZmxhZ3MoKSAm
IEl0ZW1IYXNDb250ZW50cykpIHsKLSAgICAgICAgaWYgKG9sZE5vZGUpCi0gICAgICAgICAgICBk
ZWxldGUgb2xkTm9kZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUGFnZVByb3h5
Tm9kZSogcHJveHlOb2RlID0gc3RhdGljX2Nhc3Q8UGFnZVByb3h5Tm9kZSo+KG9sZE5vZGUpOwot
ICAgIGlmICghcHJveHlOb2RlKSB7Ci0gICAgICAgIHByb3h5Tm9kZSA9IG5ldyBQYWdlUHJveHlO
b2RlKGQpOwotICAgICAgICBkLT5tX3BhaW50Tm9kZSA9IHByb3h5Tm9kZTsKLSAgICB9CisgICAg
RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdB
cmVhKCk7CisgICAgaWYgKGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0
UHJveHkoKSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHko
KS0+dXBkYXRlUGFpbnROb2RlKG9sZE5vZGUpOwogCi0gICAgcmV0dXJuIHByb3h5Tm9kZTsKKyAg
ICByZXR1cm4gMDsKIH0KIAogYm9vbCBRUXVpY2tXZWJQYWdlOjp1c2VzVHJhZGl0aW9uYWxEZXNr
dG9wQmVoYXZpb3VyKCkgY29uc3QKQEAgLTI2Myw4ICsxMjgsMTQgQEAgY29uc3QgUVNpemVGJiBR
UXVpY2tXZWJQYWdlOjpjb250ZW50U2l6ZSgpIGNvbnN0CiB2b2lkIFFRdWlja1dlYlBhZ2U6OnNl
dENvbnRlbnRTY2FsZShxcmVhbCBzY2FsZSkKIHsKICAgICBBU1NFUlQoc2NhbGUgPiAwKTsKKyAg
ICBpZiAoc2NhbGUgPT0gZC0+Y29udGVudFNjYWxlKQorICAgICAgICByZXR1cm47CisKICAgICBk
LT5jb250ZW50U2NhbGUgPSBzY2FsZTsKICAgICBkLT51cGRhdGVTaXplKCk7CisgICAgRHJhd2lu
Z0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7
CisgICAgaWYgKGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHko
KSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKS0+c2V0
UGFpbnRDb250ZW50c1NjYWxlKHNjYWxlKTsKIH0KIAogcXJlYWwgUVF1aWNrV2ViUGFnZTo6Y29u
dGVudFNjYWxlKCkgY29uc3QKQEAgLTI4OSwxOCArMTYwLDQgQEAgdm9pZCBRUXVpY2tXZWJQYWdl
UHJpdmF0ZTo6dXBkYXRlU2l6ZSgpCiAgICAgcS0+c2V0U2l6ZShzY2FsZWRTaXplKTsKIH0KIAot
dm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cmVzZXRQYWludE5vZGUoKQotewotICAgIG1fcGFp
bnROb2RlID0gMDsKLSAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQ
cm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBpZiAoZHJhd2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEt
PmxheWVyVHJlZUhvc3RQcm94eSgpKQotICAgICAgICBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9z
dFByb3h5KCktPnB1cmdlR0xSZXNvdXJjZXMoKTsKLX0KLQotUVF1aWNrV2ViUGFnZVByaXZhdGU6
On5RUXVpY2tXZWJQYWdlUHJpdmF0ZSgpCi17Ci0gICAgaWYgKG1fcGFpbnROb2RlKQotICAgICAg
ICBzdGF0aWNfY2FzdDxQYWdlUHJveHlOb2RlKj4obV9wYWludE5vZGUpLT5tX3BhZ2VQcml2YXRl
ID0gMDsKLX0KLQogI2luY2x1ZGUgIm1vY19xcXVpY2t3ZWJwYWdlX3AuY3BwIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oCmluZGV4
IDk5Y2IyYzIuLjYxYzEyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKQEAgLTM1LDIzICszNSwxOCBAQCBjbGFzcyBRdFdl
YlBhZ2VFdmVudEhhbmRsZXI7CiBjbGFzcyBRUXVpY2tXZWJQYWdlUHJpdmF0ZSB7CiBwdWJsaWM6
CiAgICAgUVF1aWNrV2ViUGFnZVByaXZhdGUoUVF1aWNrV2ViUGFnZSogcSwgUVF1aWNrV2ViVmll
dyogdmlld3BvcnRJdGVtKTsKLSAgICB+UVF1aWNrV2ViUGFnZVByaXZhdGUoKTsKIAogICAgIHZv
aWQgaW5pdGlhbGl6ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwogICAgIHZvaWQgc2V0RHJhd2lu
Z0FyZWFTaXplKGNvbnN0IFFTaXplJik7CiAKICAgICB2b2lkIHVwZGF0ZVNpemUoKTsKIAotICAg
IHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsKLSAgICB2b2lkIHJlc2V0UGFpbnROb2Rl
KCk7Ci0KICAgICBRU2NvcGVkUG9pbnRlcjxRdFdlYlBhZ2VFdmVudEhhbmRsZXI+IGV2ZW50SGFu
ZGxlcjsKICAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBxOwogICAgIFFRdWlja1dlYlZpZXcqIGNv
bnN0IHZpZXdwb3J0SXRlbTsKICAgICBXZWJLaXQ6OldlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5
OwogICAgIFdlYktpdDo6UXRTR1VwZGF0ZVF1ZXVlIHNnVXBkYXRlUXVldWU7CiAgICAgYm9vbCBw
YWludGluZ0lzSW5pdGlhbGl6ZWQ7Ci0gICAgUVNHTm9kZSogbV9wYWludE5vZGU7CiAKICAgICBR
U2l6ZUYgY29udGVudFNpemU7CiAgICAgcXJlYWwgY29udGVudFNjYWxlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggNTU5Njc1
MC4uMWI1ODVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXcuY3BwCkBAIC04MzQsNiArODM0LDcgQEAgUVF1aWNrV2ViVmlldzo6UVF1aWNr
V2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQpCiAgICAgLCBtX2V4cGVyaW1lbnRhbChuZXcgUVF1
aWNrV2ViVmlld0V4cGVyaW1lbnRhbCh0aGlzKSkKIHsKICAgICBRX0QoUVF1aWNrV2ViVmlldyk7
CisgICAgc2V0Q2xpcCh0cnVlKTsKICAgICBkLT5pbml0aWFsaXplKCk7CiAgICAgZC0+aW5pdGlh
bGl6ZVRvdWNoKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmgKaW5kZXggMmY1ODMyMi4uMTI3ODk1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCkBAIC0xMTEsNyArMTExLDcgQEAgcHJvdGVjdGVkOgog
ICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBPd25QdHI8TGF5ZXJU
cmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKKyAgICBSZWZQdHI8TGF5ZXJUcmVl
SG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5k
ZXggN2IxNTM4NC4uZjdhOTFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCkBAIC02MSw2ICs2MSwxMSBAQCBEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6RHJhd2luZ0FyZWFQcm94eUltcGwoV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkp
CiBEcmF3aW5nQXJlYVByb3h5SW1wbDo6fkRyYXdpbmdBcmVhUHJveHlJbXBsKCkKIHsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLy8gTGF5ZXJUcmVlSG9zdFByb3h5IGNh
biBiZSBzdGlsbCByZWZlcmVuY2VkIGJ5IHBhaW50IG5vZGUsCisgICAgLy8gc28gZHJhd2luZyBh
cmVhIHNob3VsZCBiZSBjbGVhcmVkIHRvIGF2b2lkIGRlcmVmZW5jaW5nIHBvaW50ZXIgdG8gZGVh
bGxvY2F0ZWQgb2JqZWN0LgorICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0UHJveHktPnNldERyYXdpbmdBcmVhUHJveHkoMCk7CisKICAgICAvLyBN
YWtlIHN1cmUgdG8gZXhpdCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLgogICAgIGlmIChp
c0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSkKICAgICAgICAgZXhpdEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCk7CkBAIC0zMzAsNyArMzM1LDcgQEAgdm9pZCBEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVD
b250ZXgKICAgICBtX3dlYlBhZ2VQcm94eS0+ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZShsYXllclRyZWVDb250ZXh0KTsKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgaWYgKCFt
X2xheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkgPSBhZG9w
dFB0cihuZXcgTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0UHJveHkgPSBhZG9wdFJlZihuZXcgTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9z
dFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgK
aW5kZXggODlkNWZiZS4uNWFmZTQzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXllclRyZWVIb3N0UHJveHkuaApAQCAtMzcsMTQgKzM3LDI3IEBACiAjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlck5vZGUuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UU9i
amVjdD4KKyNlbmRpZgorCitjbGFzcyBRU0dOb2RlOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgV2ViTGF5ZXJJbmZvOwogY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogCiBjbGFzcyBM
YXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjsKKyNpZiBQTEFURk9STShRVCkKK2NsYXNzIExheWVy
VHJlZUhvc3RQcm94eUJhc2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TGF5ZXJUcmVl
SG9zdFByb3h5QmFzZT4sIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKK307
CisjZWxzZQorY2xhc3MgTGF5ZXJUcmVlSG9zdFByb3h5QmFzZSA6IHB1YmxpYyBSZWZDb3VudGVk
PExheWVyVHJlZUhvc3RQcm94eUJhc2U+LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNs
aWVudCB7Cit9OworI2VuZGlmCiAKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6
IHB1YmxpYyBMYXllclRyZWVIb3N0UHJveHlCYXNlIHsKIHB1YmxpYzoKICAgICBMYXllclRyZWVI
b3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSopOwogICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQ
cm94eSgpOwpAQCAtNTIsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVDb21wb3Np
dGluZ0xheWVyKFdlYkxheWVySUQpOwogICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
V2ViTGF5ZXJJRCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0
aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAg
ICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQpOworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29u
c3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgYm9vbCBzeW5jUmVtb3Rl
TGF5ZXJEYXRhID0gdHJ1ZSk7CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CiAgICAgdm9p
ZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IGZsb2F0KTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3Io
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwpAQCAtNjgsNiArODEsMTcgQEAgcHVibGljOgog
ICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29u
bmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7
CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwogI2VuZGlmCisgICAgRHJhd2luZ0FyZWFQcm94
eSogZHJhd2luZ0FyZWFQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0FyZWFQcm94eTsg
fQorICAgIHZvaWQgc2V0RHJhd2luZ0FyZWFQcm94eShEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5n
QXJlYVByb3h5KSB7IG1fZHJhd2luZ0FyZWFQcm94eSA9IGRyYXdpbmdBcmVhUHJveHk7IH0KKwor
I2lmIFBMQVRGT1JNKFFUKQorICAgIFFTR05vZGUqIHVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKik7
CisgICAgdm9pZCBzZXRQYWludENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9wYWludENv
bnRlbnRzU2NhbGUgPSBzY2FsZTsgfQorI2VuZGlmCisKK3Byb3RlY3RlZCBzbG90czoKKyAgICB2
b2lkIHNlbmRNZXNzYWdlVG9XZWJQcm9jZXNzU2xvdChpbnQsIHZvaWQqKTsKKyAgICB2b2lkIHVw
ZGF0ZVZpZXdwb3J0U2xvdCgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgUGFzc093blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBjcmVhdGVMYXllcihXZWJMYXllcklEKTsKQEAgLTEyNiwxMSArMTUw
LDE3IEBAIHByb3RlY3RlZDoKICNpZiBQTEFURk9STShRVCkKICAgICB2b2lkIGRpZEZpcmVWaWV3
cG9ydFVwZGF0ZVRpbWVyKFdlYkNvcmU6OlRpbWVyPExheWVyVHJlZUhvc3RQcm94eT4qKTsKICAg
ICBXZWJDb3JlOjpUaW1lcjxMYXllclRyZWVIb3N0UHJveHk+IG1fdmlld3BvcnRVcGRhdGVUaW1l
cjsKKyAgICBmbG9hdCBtX3BhaW50Q29udGVudHNTY2FsZTsKICNlbmRpZgogCiAgICAgTGF5ZXJN
YXAgbV9sYXllcnM7CiAgICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOwogICAgIGludCBtX2lk
OworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIG1faW5QYWludGluZzsKKyNlbmRpZgorCisgICAg
ZnJpZW5kIGNsYXNzIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdDsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlOb2RlUXQu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eU5vZGVR
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5YjhjNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJv
eHlOb2RlUXQuY3BwCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKy8vICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisj
aW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0LmgiCisKKyNpbmNsdWRlICJMYXllclRy
ZWVIb3N0UHJveHkuaCIKKworI2luY2x1ZGUgPFF0UXVpY2svUVNHR2VvbWV0cnlOb2RlPgorI2lu
Y2x1ZGUgPFF0UXVpY2svUVNHTWF0ZXJpYWw+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitMYXll
clRyZWVIb3N0UHJveHlOb2RlUXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdChMYXllclRyZWVI
b3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSkgOgorICAgICAgICBtX2xheWVyVHJlZUhvc3RQ
cm94eShsYXllclRyZWVIb3N0UHJveHkpCisgICAgLCAgIG1fbWF0ZXJpYWwodGhpcykKKyAgICAs
ICAgbV9nZW9tZXRyeShRU0dHZW9tZXRyeTo6ZGVmYXVsdEF0dHJpYnV0ZXNfUG9pbnQyRCgpLCA0
KQoreworICAgIHNldEdlb21ldHJ5KCZtX2dlb21ldHJ5KTsKKyAgICBzZXRNYXRlcmlhbCgmbV9t
YXRlcmlhbCk7Cit9CisKK0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6fkxheWVyVHJlZUhvc3RQ
cm94eU5vZGVRdCgpCit7CisgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnB1cmdlR0xSZXNvdXJj
ZXMoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHlOb2RlUXQ6OnBhaW50VG9DdXJyZW50
R0xDb250ZXh0KCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9sYXllclRyZWVIb3N0UHJveHkt
Pm1faW5QYWludGluZyA9IHRydWU7CisjZW5kaWYKKyAgICBRVHJhbnNmb3JtIHRyYW5zZm9ybTsK
KyAgICBpZiAobWF0cml4KCkpCisgICAgICAgIHRyYW5zZm9ybSA9IG1hdHJpeCgpLT50b1RyYW5z
Zm9ybSgpOworICAgIHFyZWFsIHNjYWxlID0gbV9sYXllclRyZWVIb3N0UHJveHktPm1fcGFpbnRD
b250ZW50c1NjYWxlOworICAgIHRyYW5zZm9ybS5zY2FsZShzY2FsZSwgc2NhbGUpOworICAgIG1f
bGF5ZXJUcmVlSG9zdFByb3h5LT5wYWludFRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm0sIGlu
aGVyaXRlZE9wYWNpdHkoKSwgZmFsc2UpOworI2lmbmRlZiBOREVCVUcKKyAgICBtX2xheWVyVHJl
ZUhvc3RQcm94eS0+bV9pblBhaW50aW5nID0gZmFsc2U7CisjZW5kaWYKK30KKworLy8gRklYTUU6
IHRlbXBvcmFyeSB1bnRpbCBRdCBTY2VuZWdyYXBoIHdpbGwgc3VwcG9ydCBjdXN0b20gcGFpbnRp
bmcuCitjaGFyIGNvbnN0KiBjb25zdCogTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1h
dGVyaWFsU2hhZGVyOjphdHRyaWJ1dGVOYW1lcygpIGNvbnN0Cit7CisgICAgc3RhdGljIGNoYXIg
Y29uc3QqIGNvbnN0IGF0dHJbXSA9IHsgInZlcnRleCIsIDAgfTsKKyAgICByZXR1cm4gYXR0cjsK
K30KKworLy8gdmVydGV4U2hhZGVyIGFuZCBmcmFnbWVudFNoYWRlciBhcmUgbm8tb3Agc2hhZGVy
cy4KKy8vIEFsbCByZWFsIHBhaW50aW5nIGlzIGdvbmUgYnkgVGV4dHVyZU1hcHBlciB0aHJvdWdo
IExheWVyVHJlZUhvc3RQcm94eS4KK2NvbnN0IGNoYXIqIExheWVyVHJlZUhvc3RQcm94eU5vZGVR
dDo6UHJveHlNYXRlcmlhbFNoYWRlcjo6dmVydGV4U2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gImF0dHJpYnV0ZSBoaWdocCB2ZWM0IHZlcnRleDsgXG4iCisgICAgICAgICAgICJ2b2lkIG1h
aW4oKSB7IGdsX1Bvc2l0aW9uID0gdmVydGV4OyB9IjsKK30KKworY29uc3QgY2hhciogTGF5ZXJU
cmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVyOjpmcmFnbWVudFNoYWRlcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuICJ2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZlYzQo
MC4wLCAwLjAsIDAuMCwgMC4wKTsgfSI7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Tm9k
ZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBSZW5kZXJTdGF0ZSYg
c3RhdGUsIFFTR01hdGVyaWFsKiBuZXdNYXRlcmlhbCwgUVNHTWF0ZXJpYWwqIG9sZE1hdGVyaWFs
KQoreworICAgIGlmICghbmV3TWF0ZXJpYWwpCisgICAgICAgIHJldHVybjsKKworICAgIExheWVy
VHJlZUhvc3RQcm94eU5vZGVRdCogbm9kZSA9IHN0YXRpY19jYXN0PFByb3h5TWF0ZXJpYWwqPihu
ZXdNYXRlcmlhbCktPm1fbm9kZTsKKyAgICAvLyBGSVhNRTogTm9ybWFsbHkgd2Ugd291bGRuJ3Qg
cGFpbnQgaW5zaWRlIFFTR01hdGVyaWFsU2hhZGVyOjp1cGRhdGVTdGF0ZSwKKyAgICAvLyBidXQg
dGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIHVudGlsIGN1c3RvbSBwYWludCBub2RlcyBhcmUgYXZh
aWxhYmxlLgorICAgIGlmIChub2RlKQorICAgICAgICBub2RlLT5wYWludFRvQ3VycmVudEdMQ29u
dGV4dCgpOworfQorCitRU0dNYXRlcmlhbFR5cGUqIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6
UHJveHlNYXRlcmlhbDo6dHlwZSgpIGNvbnN0Cit7CisgICAgc3RhdGljIFFTR01hdGVyaWFsVHlw
ZSB0eXBlOworICAgIHJldHVybiAmdHlwZTsKK30KKworUVNHTWF0ZXJpYWxTaGFkZXIqIExheWVy
VHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlNYXRlcmlhbDo6Y3JlYXRlU2hhZGVyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbmV3IFByb3h5TWF0ZXJpYWxTaGFkZXI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisvLyAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eU5vZGVRdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eU5vZGVRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNWRkODEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9z
dFByb3h5Tm9kZVF0LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lm
bmRlZiBMYXllclRyZWVIb3N0UHJveHlOb2RlUXRfaAorI2RlZmluZSBMYXllclRyZWVIb3N0UHJv
eHlOb2RlUXRfaAorCisjaW5jbHVkZSA8UXRRdWljay9RU0dHZW9tZXRyeU5vZGU+CisjaW5jbHVk
ZSA8UXRRdWljay9RU0dNYXRlcmlhbD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllclRyZWVIb3N0UHJveHk7CitjbGFzcyBMYXllclRy
ZWVIb3N0UHJveHlOb2RlUXQgOiBwdWJsaWMgUVNHR2VvbWV0cnlOb2RlIHsKK3B1YmxpYzoKKyAg
ICBMYXllclRyZWVIb3N0UHJveHlOb2RlUXQoTGF5ZXJUcmVlSG9zdFByb3h5Kik7CisgICAgfkxh
eWVyVHJlZUhvc3RQcm94eU5vZGVRdCgpOworCisgICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29u
dGV4dCgpOworCitwcml2YXRlOgorCisgICAgc3RydWN0IFByb3h5TWF0ZXJpYWxTaGFkZXIgOiBw
dWJsaWMgUVNHTWF0ZXJpYWxTaGFkZXIgeworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3Rh
dGUoY29uc3QgUmVuZGVyU3RhdGUmLCBRU0dNYXRlcmlhbCosIFFTR01hdGVyaWFsKik7CisgICAg
ICAgIHZpcnR1YWwgY2hhciBjb25zdCogY29uc3QqIGF0dHJpYnV0ZU5hbWVzKCkgY29uc3Q7CisK
KyAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXIoKSBjb25zdDsKKyAgICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlcigpIGNvbnN0OworICAgIH07CisK
KyAgICBzdHJ1Y3QgUHJveHlNYXRlcmlhbCA6IHB1YmxpYyBRU0dNYXRlcmlhbCB7CisgICAgICAg
IFByb3h5TWF0ZXJpYWwoTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0KiBub2RlKSA6IG1fbm9kZShu
b2RlKSB7IH0KKworICAgICAgICBRU0dNYXRlcmlhbFR5cGUqIHR5cGUoKSBjb25zdDsKKyAgICAg
ICAgUVNHTWF0ZXJpYWxTaGFkZXIqIGNyZWF0ZVNoYWRlcigpIGNvbnN0OworCisgICAgICAgIExh
eWVyVHJlZUhvc3RQcm94eU5vZGVRdCogbV9ub2RlOworICAgIH07CisKKyAgICBSZWZQdHI8TGF5
ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKKyAgICBQcm94eU1hdGVyaWFs
IG1fbWF0ZXJpYWw7CisgICAgUVNHR2VvbWV0cnkgbV9nZW9tZXRyeTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0X2gKKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlR
dC5jcHAKaW5kZXggZjlhYmY0OS4uOGRiZmU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCkBAIC0yMiw3ICsyMiw5IEBA
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkxheWVyVHJlZUhv
c3RQcm94eS5oIgogCisjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0LmgiCiAj
aW5jbHVkZSAiTWFpblRocmVhZC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgogI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgpAQCAtMTQ1LDYgKzE0Nyw3OCBAQCBjbGFzcyBTZXRSb290TGF5
ZXJNZXNzYWdlCiAgICAgICAgIDogcHVibGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0
aERhdGE8U2V0Um9vdExheWVyTWVzc2FnZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVy
OjpTZXRSb290TGF5ZXI+IHsgfTsKIH0KIAorI2lmIFBMQVRGT1JNKFFUKQordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RydWN0IE1haW5UaHJlYWRNZXNzYWdlU2VuZGVyIHsKKyAgICBzdHJ1Y3QgQ2Fs
bGJhY2tDb250ZXh0IHsKKyAgICAgICAgQ2FsbGJhY2tDb250ZXh0KGNvbnN0IFQmIG1lc3NhZ2Us
IExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KSA6CisgICAgICAgICAgICAg
ICAgbV9tZXNzYWdlSUQoVDo6bWVzc2FnZUlEKQorICAgICAgICAgICAgLCAgIG1fbGF5ZXJUcmVl
SG9zdFByb3h5KGxheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9l
bmNvZGVyID0gQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjpjcmVhdGUoMCk7CisgICAgICAgICAg
ICBtX2VuY29kZXItPmVuY29kZShtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICB+Q2FsbGJh
Y2tDb250ZXh0KCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIE93blB0cjxDb3JlSVBD
OjpBcmd1bWVudEVuY29kZXI+IG1fZW5jb2RlcjsKKyAgICAgICAgQ29yZUlQQzo6TWVzc2FnZUlE
IG1fbWVzc2FnZUlEOworICAgICAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVy
VHJlZUhvc3RQcm94eTsKKyAgICB9OworICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDYWxsYmFj
ayh2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgQ2FsbGJhY2tDb250ZXh0KiBjb250ZXh0ID0g
c3RhdGljX2Nhc3Q8Q2FsbGJhY2tDb250ZXh0Kj4oZGF0YSk7CisgICAgICAgIERyYXdpbmdBcmVh
UHJveHkqIGRyYXdpbmdBcmVhUHJveHkgPSBjb250ZXh0LT5tX2xheWVyVHJlZUhvc3RQcm94eS0+
ZHJhd2luZ0FyZWFQcm94eSgpOworICAgICAgICBpZiAoZHJhd2luZ0FyZWFQcm94eSkgeworICAg
ICAgICAgICAgLy8gSGF2ZSB0byBpbml0aWFsaXplIGRlc3RhbmF0aW9uIElEIGhlcmUgYmVjYXVz
ZSB0aGlzIGRhdGEgY2Fubm90IGJlIGFjY2Vzc2VkIGZyb20KKyAgICAgICAgICAgIC8vIHBhaW50
aW5nIHRocmVhZC4KKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PHVpbnQ2NF90Kj4oY29u
dGV4dC0+bV9lbmNvZGVyLT5idWZmZXIoKSkgPSBkcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBh
Z2VJRCgpOworICAgICAgICAgICAgQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiA9IGRy
YXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5jb25uZWN0aW9uKCk7CisgICAgICAg
ICAgICBpZiAoY29ubmVjdGlvbikKKyAgICAgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kTWVz
c2FnZShjb250ZXh0LT5tX21lc3NhZ2VJRCwgY29udGV4dC0+bV9lbmNvZGVyLnJlbGVhc2UoKSwg
MCk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIGNvbnRleHQ7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgc2VuZE1lc3NhZ2VPbk1haW5UaHJlYWQoY29uc3QgVCYgbWVzc2FnZSwgTGF5ZXJU
cmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkpCisgICAgeworICAgICAgICBDYWxsYmFj
a0NvbnRleHQqIGNvbnRleHQgPSBuZXcgQ2FsbGJhY2tDb250ZXh0KG1lc3NhZ2UsIGxheWVyVHJl
ZUhvc3RQcm94eSk7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoJm1haW5UaHJlYWRDYWxsYmFj
aywgY29udGV4dCk7CisgICAgfQorfTsKKworc3RydWN0IExheWVyVHJlZUhvc3RQcm94eVJlZiB7
CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5UmVmKExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVl
SG9zdFByb3h5KSA6IG1fbGF5ZXJUcmVlSG9zdFByb3h5KGxheWVyVHJlZUhvc3RQcm94eSkKKyAg
ICB7IH0KKyAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94
eTsKK307CisKK3N0YXRpYyB2b2lkIG1haW5UaHJlYWRVcGRhdGVWaWV3cG9ydEludm9rZXIodm9p
ZCogZGF0YSkKK3sKKyAgICBMYXllclRyZWVIb3N0UHJveHlSZWYqIGNvbnRleHQgPSBzdGF0aWNf
Y2FzdDxMYXllclRyZWVIb3N0UHJveHlSZWYqPihkYXRhKTsKKyAgICBjb250ZXh0LT5tX2xheWVy
VHJlZUhvc3RQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKKyAgICBkZWxldGUgY29udGV4dDsKK30K
Kworc3RhdGljIHZvaWQgdXBkYXRlVmlld3BvcnRPbk1haW5UaHJlYWQoTGF5ZXJUcmVlSG9zdFBy
b3h5KiBsYXllclRyZWVIb3N0UHJveHkpCit7CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5UmVmKiBj
b250ZXh0ID0gbmV3IExheWVyVHJlZUhvc3RQcm94eVJlZihsYXllclRyZWVIb3N0UHJveHkpOwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoJm1haW5UaHJlYWRVcGRhdGVWaWV3cG9ydEludm9rZXIsIGNv
bnRleHQpOworfQorI2Vsc2UKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBNYWluVGhyZWFk
TWVzc2FnZVNlbmRlciB7CisgICAgc3RhdGljIHZvaWQgc2VuZE1lc3NhZ2VPbk1haW5UaHJlYWQo
Y29uc3QgVCYgbWVzc2FnZSwgTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkp
CisgICAgeworICAgICAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5ID0gbGF5
ZXJUcmVlSG9zdFByb3h5LT5kcmF3aW5nQXJlYVByb3h5KCk7CisgICAgICAgIGlmIChkcmF3aW5n
QXJlYVByb3h5KQorICAgICAgICAgICAgZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNz
KCktPnNlbmQobWVzc2FnZSwgZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cisg
ICAgfQorfTsKK3N0YXRpYyB1cGRhdGVWaWV3cG9ydE9uTWFpblRocmVhZChMYXllclRyZWVIb3N0
UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSkKK3sKKyAgICBsYXllclRyZWVIb3N0UHJveHktPnVw
ZGF0ZVZpZXdwb3J0KCk7Cit9CisjZW5kaWYKKwogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBM
YXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKIHsKICAg
ICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
cih0aGlzKTsKQEAgLTE1OCw3ICsyMzIsMTEgQEAgTGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRy
ZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKICAgICA6IG1f
YW5pbWF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmTGF5ZXJUcmVlSG9zdFByb3h5
Ojp1cGRhdGVWaWV3cG9ydCkKICAgICAsIG1fZHJhd2luZ0FyZWFQcm94eShkcmF3aW5nQXJlYVBy
b3h5KQogICAgICwgbV92aWV3cG9ydFVwZGF0ZVRpbWVyKHRoaXMsICZMYXllclRyZWVIb3N0UHJv
eHk6OmRpZEZpcmVWaWV3cG9ydFVwZGF0ZVRpbWVyKQorICAgICwgbV9wYWludENvbnRlbnRzU2Nh
bGUoMS4wKQogICAgICwgbV9yb290TGF5ZXJJRCgwKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1f
aW5QYWludGluZyhmYWxzZSkKKyNlbmRpZgogewogfQogCkBAIC0xNjcsMTIgKzI0NSwxNCBAQCBM
YXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJveHkoKQogfQogCiAvLyBUaGlzIGZ1
bmN0aW9uIG5lZWRzIHRvIGJlIHJlZW50cmFudC4KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpw
YWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4
LCBmbG9hdCBvcGFjaXR5KQordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50
R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNp
dHksIGJvb2wgc3luY1JlbW90ZUxheWVyRGF0YSkKIHsKICAgICBpZiAoIW1fdGV4dHVyZU1hcHBl
cikKICAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsK
IAotICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgaWYgKHN5bmNSZW1vdGVMYXllckRhdGEp
CisgICAgICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CisKICAgICBHcmFwaGljc0xheWVyKiBjdXJy
ZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CiAgICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQog
ICAgICAgICByZXR1cm47CkBAIC0yMDYsMTEgKzI4NiwxMiBAQCB2b2lkIExheWVyVHJlZUhvc3RQ
cm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG1hdAogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlkRmlyZVZpZXdwb3J0VXBkYXRlVGlt
ZXIoVGltZXI8TGF5ZXJUcmVlSG9zdFByb3h5PiopCiB7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsK
KyAgICB1cGRhdGVWaWV3cG9ydE9uTWFpblRocmVhZCh0aGlzKTsKIH0KIAogdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKIHsKKyAgICBBU1NFUlQoIW1faW5QYWludGlu
Zyk7CiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOwogfQogCkBAIC01
MTQsNyArNTk1LDYgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNSZW1vdGVDb250ZW50
KCkKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXNoVXBkYXRlVG9RdWV1ZShQYXNzT3duUHRy
PExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyPiBtZXNzYWdlKQogewogICAgIG1fbWVzc2FnZXNU
b1JlbmRlcmVyLmFwcGVuZChtZXNzYWdlKTsKLSAgICB1cGRhdGVWaWV3cG9ydCgpOwogfQogCiB2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBp
bnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCkBAIC01OTQs
MTQgKzY3NCwxNCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29t
cG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0
VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFq
ZWN0b3J5VmVjdG9yKQogewotICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFn
ZSgpLT5wYWdlSUQoKSk7CisgICAgTWFpblRocmVhZE1lc3NhZ2VTZW5kZXI8TWVzc2FnZXM6Okxh
eWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3I+OjpzZW5k
TWVzc2FnZU9uTWFpblRocmVhZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNv
bnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKSwgdGhpcyk7CiB9CiAK
IHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUo
Y29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUpCiB7CiAgICAgbV92aXNpYmxlQ29udGVu
dHNSZWN0ID0gcmVjdDsKICAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKLSAgICBtX2RyYXdp
bmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVI
b3N0OjpTZXRWaXNpYmxlQ29udGVudFJlY3RBbmRTY2FsZShyZWN0LCBzY2FsZSksIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgTWFpblRocmVhZE1lc3NhZ2VTZW5k
ZXI8TWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxl
Pjo6c2VuZE1lc3NhZ2VPbk1haW5UaHJlYWQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZp
c2libGVDb250ZW50UmVjdEFuZFNjYWxlKHJlY3QsIHNjYWxlKSwgdGhpcyk7CiB9CiAKIHZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUdMUmVzb3VyY2VzKCkKQEAgLTYxNSw3ICs2OTUsMjAg
QEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlR0xSZXNvdXJjZXMoKQogCiAgICAgbV90
ZXh0dXJlTWFwcGVyLmNsZWFyKCk7CiAKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9y
ZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKKyAgICBNYWluVGhy
ZWFkTWVzc2FnZVNlbmRlcjxNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5nU3Rv
cmVzPjo6c2VuZE1lc3NhZ2VPbk1haW5UaHJlYWQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlB1
cmdlQmFja2luZ1N0b3JlcygpLCB0aGlzKTsKK30KKworUVNHTm9kZSogTGF5ZXJUcmVlSG9zdFBy
b3h5Ojp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSkKK3sKKyAgICBpZiAoIW1fdGV4
dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpj
cmVhdGUoKTsKKworICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CisKKyAgICBpZiAoIW9sZE5vZGUp
CisgICAgICAgIHJldHVybiBuZXcgTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0KHRoaXMpOworCisg
ICAgcmV0dXJuIG9sZE5vZGU7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKaW5kZXggZDEy
ZWIwYi4uODdjYjlkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKQEAgLTE3Myw2ICsxNzMsOSBA
QCBxcmVhbCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Om91dGVyQm91bmRlZENTU1NjYWxl
KHFyZWFsIGNzc1NjYWxlKQogCiB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2V0
SXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCiB7CisgICAgaWYgKGl0ZW1S
ZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgVmlld3BvcnRVcGRhdGVEZWZl
cnJlciBndWFyZCh0aGlzKTsKIAogICAgIHFyZWFsIGl0ZW1TY2FsZSA9IG1fdmlld3BvcnQtPndp
ZHRoKCkgLyBpdGVtUmVjdC53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDkwNjc5ZTMuLjMwNDJiOTYgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0w
MS0xOSAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lh
LmNvbT4KKworICAgICAgICBbUXRdIFtXSzJdIFN1cHBvcnQgdGhyZWFkZWQgcmVuZGVyZXIgaW4g
V0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92
ZWQgYWRkaW5nIG9mIFFNTF9OT19USFJFQURFRF9SRU5ERVJFUiB0byBlbnZpcm9ubWVudCB2YXJp
YWJsZXMuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9tYWluLmNwcDoKKyAgICAgICAgKG1h
aW4pOgorCiAyMDEyLTAxLTE5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFNvbWUgcGVyZiB0ZXN0cyB0aW1lIG91dCB3aGVuIHJhbiBieSBydW4tcGVyZi10ZXN0
cwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAgYi9Ub29scy9NaW5p
QnJvd3Nlci9xdC9tYWluLmNwcAppbmRleCBmZWFlMTRhLi4zNjYzNzczIDEwMDY0NAotLS0gYS9U
b29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9t
YWluLmNwcApAQCAtMzksOSArMzksNiBAQAogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCiB7Ci0gICAgLy8gRklYTUU6IFdlIG11c3QgYWRkIHN1cHBvcnQgZm9yIHRoZSB0aHJlYWRl
ZCByZW5kZXJpbmcgYXMgaXQgaXMgdGhlIGRlZmF1bHQuCi0gICAgcXB1dGVudigiUU1MX05PX1RI
UkVBREVEX1JFTkRFUkVSIiwgUUJ5dGVBcnJheSgiMSIpKTsKLQogICAgIE1pbmlCcm93c2VyQXBw
bGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwogCiAgICAgaWYgKGFwcC5pc1JvYm90aXplZCgpKSB7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123209</attachid>
            <date>2012-01-19 15:29:01 -0800</date>
            <delta_ts>2012-01-19 18:20:26 -0800</delta_ts>
            <desc>One more windows build fix.</desc>
            <filename>threaded_painting_05.diff</filename>
            <type>text/plain</type>
            <size>32752</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxOWE0MmEzLi5hMjcxZjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEg
QEAKKzIwMTItMDEtMTkgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hl
c2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVkIHJl
bmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCB0aHJlYWRlZCBwYWludGluZyBzdXBwb3J0IHRvIFF0IFdlYmtpdDIuCisgICAg
ICAgIEFsbCBUZXh0dXJlTWFwcGVyIGFuZCBHcmFwaGljc0xheWVyIG9iamVjdCBhcmUgY3JlYXRl
ZCBvbiByZW5kZXJpbmcKKyAgICAgICAgdGhyZWFkIGFuZCBjYW4gYmUgYWNjZXNzZWQgdGhyb3Vn
aCByZW5kZXJpbmcgdGhyZWFkIG9ubHkuCisgICAgICAgIExheWVyIHVwZGF0ZXMgYXJlIHJlY2Vp
dmVkIHRocm91Z2ggbV9tZXNzYWdlc1RvUmVuZGVyZXIgcXVldWUgYW5kCisgICAgICAgIGFwcGxp
ZWQgdG8gVGV4dHVyZU1hcHBlck5vZGUgdHJlZSBpbiB1cGRhdGVQYWludE5vZGUsIHdoZW4gVUkg
dGhyZWFkCisgICAgICAgIGlzIHN5bmNocm9ub3VzbHkgbG9ja2VkIGJ5IHJlbmRlciB0aHJlYWQs
IHNvIG5vIGV4dHJhIHN5bmNocm9uaXphdGlvbiAKKyAgICAgICAgaXMgbmVjZXNzYXJ5LgorICAg
ICAgICBNZXNzYWdlcyBmcm9tIFRleHR1cmVNYXBwZXIgYXJlIGRlbGl2ZXJlZCBiYWNrIHRocm91
Z2ggImNhbGxPbk1haW5UaHJlYWQiCisgICAgICAgIGludGVyZmFjZS4KKyAgICAgICAgTGF5ZXJU
cmVlSG9zdFByb3h5IGlzIHRocmVhZCBzYWZlIHJlZi1jb3VudGVkIGFuZCBoZWxkIGFsaXZlIHVu
dGlsIHBhaW50CisgICAgICAgIG5vZGUgb3IgZHJhd2luZyBhcmVhIGRlc3RydWN0aW9uLgorCisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnBhZ2UuY3BwOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6UVF1aWNrV2ViUGFnZSk6CisgICAg
ICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6UVF1aWNrV2ViUGFnZVByaXZhdGUpOgorICAgICAg
ICAoUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKToKKyAgICAgICAgKFFRdWlja1dlYlBh
Z2U6OnNldENvbnRlbnRTY2FsZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlX3BfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJbXBs
Ojp+RHJhd2luZ0FyZWFQcm94eUltcGwpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6OmRyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6OnNldERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OnNldFBhaW50Q29udGVudHNTY2FsZSk6CisgICAgICAgICogVUlQcm9jZXNz
L3F0L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHlOb2RlUXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdCk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6fkxheWVyVHJlZUhvc3RQ
cm94eU5vZGVRdCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6
cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHlOb2RlUXQ6OlByb3h5TWF0ZXJpYWxTaGFkZXI6OmF0dHJpYnV0ZU5hbWVzKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVy
Ojp2ZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHlOb2Rl
UXQ6OlByb3h5TWF0ZXJpYWxTaGFkZXI6OmZyYWdtZW50U2hhZGVyKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVyOjp1cGRhdGVT
dGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlN
YXRlcmlhbDo6dHlwZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eU5vZGVR
dDo6UHJveHlNYXRlcmlhbDo6Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQv
TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHlOb2RlUXQ6OlByb3h5TWF0ZXJpYWw6OlByb3h5TWF0ZXJpYWwpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok1haW5UaHJlYWRNZXNzYWdlU2VuZGVyOjpDYWxsYmFja0NvbnRleHQ6OkNhbGxiYWNr
Q29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJlYWRNZXNzYWdlU2VuZGVyOjpDYWxs
YmFja0NvbnRleHQ6On5DYWxsYmFja0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpNYWluVGhy
ZWFkTWVzc2FnZVNlbmRlcjo6bWFpblRocmVhZENhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
TWFpblRocmVhZE1lc3NhZ2VTZW5kZXI6OnNlbmRNZXNzYWdlT25NYWluVGhyZWFkKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5UmVmOjpMYXllclRyZWVIb3N0UHJveHlSZWYp
OgorICAgICAgICAoV2ViS2l0OjptYWluVGhyZWFkVXBkYXRlVmlld3BvcnRJbnZva2VyKToKKyAg
ICAgICAgKFdlYktpdDo6dXBkYXRlVmlld3BvcnRPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UHJveHk6OkxheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmRpZEZpcmVWaWV3cG9ydFVwZGF0ZVRp
bWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9y
dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cHVzaFVwZGF0ZVRvUXVl
dWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250
ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RBbmRTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VHTFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlUGFpbnROb2RlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzZXRJdGVtUmVjdFZpc2libGUpOgorCiAyMDEy
LTAxLTE4ICBBZGEgQ2hhbiAgPGFkYWNoYW5AYXBwbGUuY29tPgogCiAgICAgICAgIE5lZWQgYSBX
ZWJLaXQyIEFQSSBmb3Igc2V0dGluZyBtZWRpYSB2b2x1bWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDM1OTgz
ZjAuLjNmMzQ3YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMjU1LDYgKzI1NSw3IEBAIEhFQURFUlMgKz0g
XAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5LmggXAogICAgIFVJ
UHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1dlYlVJQ2xp
ZW50LmggXAorICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlOb2RlUXQuaCBcCiAg
ICAgVUlQcm9jZXNzL3F0L1F0V2ViQ29udGV4dC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlRXZlbnRIYW5kbGVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVy
LmggXApAQCAtNTg1LDYgKzU4Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJS
ZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L0xh
eWVyVHJlZUhvc3RQcm94eU5vZGVRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVI
b3N0UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIu
Y3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5kZXgg
YThjMTcxOC4uYzJhNjJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yNywxNCArMjcsMTMgQEAKICNpbmNsdWRlICJxcXVp
Y2t3ZWJwYWdlX3BfcC5oIgogI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgogI2luY2x1ZGUg
PFF0UXVpY2svUVF1aWNrQ2FudmFzPgotI2luY2x1ZGUgPFF0UXVpY2svUVNHR2VvbWV0cnlOb2Rl
PgotI2luY2x1ZGUgPFF0UXVpY2svUVNHTWF0ZXJpYWw+CiAKIFFRdWlja1dlYlBhZ2U6OlFRdWlj
a1dlYlBhZ2UoUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVtKQogICAgIDogUVF1aWNrSXRlbSh2
aWV3cG9ydEl0ZW0pCiAgICAgLCBkKG5ldyBRUXVpY2tXZWJQYWdlUHJpdmF0ZSh0aGlzLCB2aWV3
cG9ydEl0ZW0pKQogewogICAgIHNldEZsYWcoSXRlbUhhc0NvbnRlbnRzKTsKKyAgICBzZXRDbGlw
KHRydWUpOwogCiAgICAgLy8gV2UgZG8gdGhlIHRyYW5zZm9ybSBmcm9tIHRoZSB0b3AgbGVmdCBz
byB0aGUgdmlld3BvcnQgY2FuIGFzc3VtZSB0aGUgcG9zaXRpb24gMCwgMAogICAgIC8vIGlzIGFs
d2F5cyB3aGVyZSByZW5kZXJpbmcgc3RhcnRzLgpAQCAtNjgsNyArNjcsNiBAQCBRUXVpY2tXZWJQ
YWdlUHJpdmF0ZTo6UVF1aWNrV2ViUGFnZVByaXZhdGUoUVF1aWNrV2ViUGFnZSogcSwgUVF1aWNr
V2ViVmlldyogdmlldwogICAgICwgd2ViUGFnZVByb3h5KDApCiAgICAgLCBzZ1VwZGF0ZVF1ZXVl
KHEpCiAgICAgLCBwYWludGluZ0lzSW5pdGlhbGl6ZWQoZmFsc2UpCi0gICAgLCBtX3BhaW50Tm9k
ZSgwKQogICAgICwgY29udGVudFNjYWxlKDEpCiAgICAgLCB1c2VUcmFkaXRpb25hbERlc2t0b3BC
ZWhhdmlvdXIoZmFsc2UpCiB7CkBAIC04MCwxOCArNzgsNiBAQCB2b2lkIFFRdWlja1dlYlBhZ2VQ
cml2YXRlOjppbml0aWFsaXplKFdlYktpdDo6V2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkpCiAg
ICAgZXZlbnRIYW5kbGVyLnJlc2V0KG5ldyBRdFdlYlBhZ2VFdmVudEhhbmRsZXIodG9BUEkod2Vi
UGFnZVByb3h5KSwgcSwgdmlld3BvcnRJdGVtKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBjb21wdXRl
RWZmZWN0aXZlT3BhY2l0eShjb25zdCBRUXVpY2tJdGVtKiBpdGVtKQotewotICAgIGlmICghaXRl
bSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBmbG9hdCBvcGFjaXR5ID0gaXRlbS0+b3BhY2l0
eSgpOwotICAgIGlmIChvcGFjaXR5IDwgMC4wMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gb3BhY2l0eSAqIGNvbXB1dGVFZmZlY3RpdmVPcGFjaXR5KGl0ZW0tPnBhcmVudEl0ZW0o
KSk7Ci19Ci0KIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnNldERyYXdpbmdBcmVhU2l6ZShj
b25zdCBRU2l6ZSYgc2l6ZSkKIHsKICAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9
IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKQEAgLTEwMCwxMzQgKzg2LDEzIEBAIHZvaWQg
UVF1aWNrV2ViUGFnZVByaXZhdGU6OnNldERyYXdpbmdBcmVhU2l6ZShjb25zdCBRU2l6ZSYgc2l6
ZSkKICAgICBkcmF3aW5nQXJlYS0+c2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplKHNpemUpLCBXZWJD
b3JlOjpJbnRTaXplKCkpOwogfQogCi12b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRv
Q3VycmVudEdMQ29udGV4dCgpCi17Ci0gICAgaWYgKCFxLT5pc1Zpc2libGUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBxLT5pdGVtVHJhbnNmb3JtKDAs
IDApOwotICAgIHRyYW5zZm9ybS5zY2FsZShjb250ZW50U2NhbGUsIGNvbnRlbnRTY2FsZSk7Ci0K
LSAgICBmbG9hdCBvcGFjaXR5ID0gY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHkocSk7Ci0gICAgUVJl
Y3RGIGNsaXBSZWN0ID0gcS0+cGFyZW50SXRlbSgpLT5tYXBSZWN0VG9TY2VuZShxLT5wYXJlbnRJ
dGVtKCktPmJvdW5kaW5nUmVjdCgpKTsKLQotICAgIGlmICghY2xpcFJlY3QuaXNWYWxpZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHdl
YlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBpZiAoIWRyYXdpbmdBcmVhKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBHTCBlcnJvciBjb2RlIHN0YXlz
IGZyb20gcHJldmlvdXMgUVQgb3BlcmF0aW9ucy4KLSAgICBnbEdldEVycm9yKCk7Ci0KLSAgICBn
bEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIEFTU0VSVCghZ2xHZXRFcnJvcigpKTsKLSAg
ICBjb25zdCBpbnQgbGVmdCA9IGNsaXBSZWN0LmxlZnQoKTsKLSAgICBjb25zdCBpbnQgd2lkdGgg
PSBjbGlwUmVjdC53aWR0aCgpOwotICAgIGNvbnN0IGludCBib3R0b20gPSBxLT5jYW52YXMoKS0+
aGVpZ2h0KCkgLSAoY2xpcFJlY3QuYm90dG9tKCkgKyAxKTsKLSAgICBjb25zdCBpbnQgaGVpZ2h0
ID0gY2xpcFJlY3QuaGVpZ2h0KCk7Ci0KLSAgICBnbFNjaXNzb3IobGVmdCwgYm90dG9tLCB3aWR0
aCwgaGVpZ2h0KTsKLSAgICBBU1NFUlQoIWdsR2V0RXJyb3IoKSk7Ci0KLSAgICBkcmF3aW5nQXJl
YS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtLCBvcGFjaXR5KTsKLQotICAgIGds
RGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIEFTU0VSVCghZ2xHZXRFcnJvcigpKTsKLX0K
LQotc3RydWN0IFBhZ2VQcm94eU1hdGVyaWFsOwotc3RydWN0IFBhZ2VQcm94eU5vZGU7Ci0KLS8v
IEZJWE1FOiB0ZW1wb3JhcnkgdW50aWwgUXQgU2NlbmVncmFwaCB3aWxsIHN1cHBvcnQgY3VzdG9t
IHBhaW50aW5nLgotc3RydWN0IFBhZ2VQcm94eU1hdGVyaWFsU2hhZGVyIDogcHVibGljIFFTR01h
dGVyaWFsU2hhZGVyIHsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgUmVuZGVy
U3RhdGUmIHN0YXRlLCBRU0dNYXRlcmlhbCogbmV3TWF0ZXJpYWwsIFFTR01hdGVyaWFsKiBvbGRN
YXRlcmlhbCk7Ci0gICAgdmlydHVhbCBjaGFyIGNvbnN0KiBjb25zdCogYXR0cmlidXRlTmFtZXMo
KSBjb25zdAotICAgIHsKLSAgICAgICAgc3RhdGljIGNoYXIgY29uc3QqIGNvbnN0IGF0dHJbXSA9
IHsgInZlcnRleCIsIDAgfTsKLSAgICAgICAgcmV0dXJuIGF0dHI7Ci0gICAgfQotCi0gICAgLy8g
dmVydGV4U2hhZGVyIGFuZCBmcmFnbWVudFNoYWRlciBhcmUgbm8tb3Agc2hhZGVycy4KLSAgICAv
LyBBbGwgcmVhbCBwYWludGluZyBpcyBnb25lIGJ5IFRleHR1cmVNYXBwZXIgdGhyb3VnaCBMYXll
clRyZWVIb3N0UHJveHkuCi0gICAgdmlydHVhbCBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXIoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICJhdHRyaWJ1dGUgaGlnaHAgdmVjNCB2ZXJ0ZXg7
IFxuIgotICAgICAgICAgICAgICAgInZvaWQgbWFpbigpIHsgZ2xfUG9zaXRpb24gPSB2ZXJ0ZXg7
IH0iOwotICAgIH0KLQotICAgIHZpcnR1YWwgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkZXIoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICJ2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9
IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsgfSI7Ci0gICAgfQotfTsKLQotc3RydWN0IFBhZ2VQ
cm94eU1hdGVyaWFsIDogcHVibGljIFFTR01hdGVyaWFsIHsKLSAgICBQYWdlUHJveHlNYXRlcmlh
bChQYWdlUHJveHlOb2RlKiBub2RlKSA6IG1fbm9kZShub2RlKSB7IH0KLQotICAgIFFTR01hdGVy
aWFsVHlwZSogdHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBzdGF0aWMgUVNHTWF0ZXJpYWxU
eXBlIHR5cGU7Ci0gICAgICAgIHJldHVybiAmdHlwZTsKLSAgICB9Ci0KLSAgICBRU0dNYXRlcmlh
bFNoYWRlciogY3JlYXRlU2hhZGVyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcg
UGFnZVByb3h5TWF0ZXJpYWxTaGFkZXI7Ci0gICAgfQotCi0gICAgUGFnZVByb3h5Tm9kZSogbV9u
b2RlOwotfTsKLQotc3RydWN0IFBhZ2VQcm94eU5vZGUgOiBwdWJsaWMgUVNHR2VvbWV0cnlOb2Rl
IHsKLSAgICBQYWdlUHJveHlOb2RlKFFRdWlja1dlYlBhZ2VQcml2YXRlKiBwYWdlKSA6Ci0gICAg
ICAgIG1fcGFnZVByaXZhdGUocGFnZSkKLSAgICAgICwgbV9tYXRlcmlhbCh0aGlzKQotICAgICAg
LCBtX2dlb21ldHJ5KFFTR0dlb21ldHJ5OjpkZWZhdWx0QXR0cmlidXRlc19Qb2ludDJEKCksIDQp
Ci0gICAgewotICAgICAgICBzZXRHZW9tZXRyeSgmbV9nZW9tZXRyeSk7Ci0gICAgICAgIHNldE1h
dGVyaWFsKCZtX21hdGVyaWFsKTsKLSAgICB9Ci0KLSAgICB+UGFnZVByb3h5Tm9kZSgpCi0gICAg
ewotICAgICAgICBpZiAobV9wYWdlUHJpdmF0ZSkKLSAgICAgICAgICAgIG1fcGFnZVByaXZhdGUt
PnJlc2V0UGFpbnROb2RlKCk7Ci0gICAgfQotCi0gICAgUVF1aWNrV2ViUGFnZVByaXZhdGUqIG1f
cGFnZVByaXZhdGU7Ci0gICAgUGFnZVByb3h5TWF0ZXJpYWwgbV9tYXRlcmlhbDsKLSAgICBRU0dH
ZW9tZXRyeSBtX2dlb21ldHJ5OwotfTsKLQotdm9pZCBQYWdlUHJveHlNYXRlcmlhbFNoYWRlcjo6
dXBkYXRlU3RhdGUoY29uc3QgUmVuZGVyU3RhdGUmIHN0YXRlLCBRU0dNYXRlcmlhbCogbmV3TWF0
ZXJpYWwsIFFTR01hdGVyaWFsKiBvbGRNYXRlcmlhbCkKLXsKLSAgICBpZiAoIW5ld01hdGVyaWFs
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlUHJveHlOb2RlKiBub2RlID0gc3RhdGljX2Nh
c3Q8UGFnZVByb3h5TWF0ZXJpYWwqPihuZXdNYXRlcmlhbCktPm1fbm9kZTsKLSAgICAvLyBGSVhN
RTogTm9ybWFsbHkgd2Ugd291bGRuJ3QgcGFpbnQgaW5zaWRlIFFTR01hdGVyaWFsU2hhZGVyOjp1
cGRhdGVTdGF0ZSwKLSAgICAvLyBidXQgdGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIHVudGlsIGN1
c3RvbSBwYWludCBub2RlcyBhcmUgYXZhaWxhYmxlLgotICAgIGlmIChub2RlLT5tX3BhZ2VQcml2
YXRlKQotICAgICAgICBub2RlLT5tX3BhZ2VQcml2YXRlLT5wYWludFRvQ3VycmVudEdMQ29udGV4
dCgpOwotfQotCiBRU0dOb2RlKiBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoUVNHTm9k
ZSogb2xkTm9kZSwgVXBkYXRlUGFpbnROb2RlRGF0YSopCiB7Ci0gICAgaWYgKCEoZmxhZ3MoKSAm
IEl0ZW1IYXNDb250ZW50cykpIHsKLSAgICAgICAgaWYgKG9sZE5vZGUpCi0gICAgICAgICAgICBk
ZWxldGUgb2xkTm9kZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUGFnZVByb3h5
Tm9kZSogcHJveHlOb2RlID0gc3RhdGljX2Nhc3Q8UGFnZVByb3h5Tm9kZSo+KG9sZE5vZGUpOwot
ICAgIGlmICghcHJveHlOb2RlKSB7Ci0gICAgICAgIHByb3h5Tm9kZSA9IG5ldyBQYWdlUHJveHlO
b2RlKGQpOwotICAgICAgICBkLT5tX3BhaW50Tm9kZSA9IHByb3h5Tm9kZTsKLSAgICB9CisgICAg
RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdB
cmVhKCk7CisgICAgaWYgKGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0
UHJveHkoKSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHko
KS0+dXBkYXRlUGFpbnROb2RlKG9sZE5vZGUpOwogCi0gICAgcmV0dXJuIHByb3h5Tm9kZTsKKyAg
ICByZXR1cm4gMDsKIH0KIAogYm9vbCBRUXVpY2tXZWJQYWdlOjp1c2VzVHJhZGl0aW9uYWxEZXNr
dG9wQmVoYXZpb3VyKCkgY29uc3QKQEAgLTI2Myw4ICsxMjgsMTQgQEAgY29uc3QgUVNpemVGJiBR
UXVpY2tXZWJQYWdlOjpjb250ZW50U2l6ZSgpIGNvbnN0CiB2b2lkIFFRdWlja1dlYlBhZ2U6OnNl
dENvbnRlbnRTY2FsZShxcmVhbCBzY2FsZSkKIHsKICAgICBBU1NFUlQoc2NhbGUgPiAwKTsKKyAg
ICBpZiAoc2NhbGUgPT0gZC0+Y29udGVudFNjYWxlKQorICAgICAgICByZXR1cm47CisKICAgICBk
LT5jb250ZW50U2NhbGUgPSBzY2FsZTsKICAgICBkLT51cGRhdGVTaXplKCk7CisgICAgRHJhd2lu
Z0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7
CisgICAgaWYgKGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHko
KSkKKyAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKS0+c2V0
UGFpbnRDb250ZW50c1NjYWxlKHNjYWxlKTsKIH0KIAogcXJlYWwgUVF1aWNrV2ViUGFnZTo6Y29u
dGVudFNjYWxlKCkgY29uc3QKQEAgLTI4OSwxOCArMTYwLDQgQEAgdm9pZCBRUXVpY2tXZWJQYWdl
UHJpdmF0ZTo6dXBkYXRlU2l6ZSgpCiAgICAgcS0+c2V0U2l6ZShzY2FsZWRTaXplKTsKIH0KIAot
dm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cmVzZXRQYWludE5vZGUoKQotewotICAgIG1fcGFp
bnROb2RlID0gMDsKLSAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQ
cm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBpZiAoZHJhd2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEt
PmxheWVyVHJlZUhvc3RQcm94eSgpKQotICAgICAgICBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9z
dFByb3h5KCktPnB1cmdlR0xSZXNvdXJjZXMoKTsKLX0KLQotUVF1aWNrV2ViUGFnZVByaXZhdGU6
On5RUXVpY2tXZWJQYWdlUHJpdmF0ZSgpCi17Ci0gICAgaWYgKG1fcGFpbnROb2RlKQotICAgICAg
ICBzdGF0aWNfY2FzdDxQYWdlUHJveHlOb2RlKj4obV9wYWludE5vZGUpLT5tX3BhZ2VQcml2YXRl
ID0gMDsKLX0KLQogI2luY2x1ZGUgIm1vY19xcXVpY2t3ZWJwYWdlX3AuY3BwIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oCmluZGV4
IDk5Y2IyYzIuLjYxYzEyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKQEAgLTM1LDIzICszNSwxOCBAQCBjbGFzcyBRdFdl
YlBhZ2VFdmVudEhhbmRsZXI7CiBjbGFzcyBRUXVpY2tXZWJQYWdlUHJpdmF0ZSB7CiBwdWJsaWM6
CiAgICAgUVF1aWNrV2ViUGFnZVByaXZhdGUoUVF1aWNrV2ViUGFnZSogcSwgUVF1aWNrV2ViVmll
dyogdmlld3BvcnRJdGVtKTsKLSAgICB+UVF1aWNrV2ViUGFnZVByaXZhdGUoKTsKIAogICAgIHZv
aWQgaW5pdGlhbGl6ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwogICAgIHZvaWQgc2V0RHJhd2lu
Z0FyZWFTaXplKGNvbnN0IFFTaXplJik7CiAKICAgICB2b2lkIHVwZGF0ZVNpemUoKTsKIAotICAg
IHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsKLSAgICB2b2lkIHJlc2V0UGFpbnROb2Rl
KCk7Ci0KICAgICBRU2NvcGVkUG9pbnRlcjxRdFdlYlBhZ2VFdmVudEhhbmRsZXI+IGV2ZW50SGFu
ZGxlcjsKICAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBxOwogICAgIFFRdWlja1dlYlZpZXcqIGNv
bnN0IHZpZXdwb3J0SXRlbTsKICAgICBXZWJLaXQ6OldlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5
OwogICAgIFdlYktpdDo6UXRTR1VwZGF0ZVF1ZXVlIHNnVXBkYXRlUXVldWU7CiAgICAgYm9vbCBw
YWludGluZ0lzSW5pdGlhbGl6ZWQ7Ci0gICAgUVNHTm9kZSogbV9wYWludE5vZGU7CiAKICAgICBR
U2l6ZUYgY29udGVudFNpemU7CiAgICAgcXJlYWwgY29udGVudFNjYWxlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggNTU5Njc1
MC4uMWI1ODVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXcuY3BwCkBAIC04MzQsNiArODM0LDcgQEAgUVF1aWNrV2ViVmlldzo6UVF1aWNr
V2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQpCiAgICAgLCBtX2V4cGVyaW1lbnRhbChuZXcgUVF1
aWNrV2ViVmlld0V4cGVyaW1lbnRhbCh0aGlzKSkKIHsKICAgICBRX0QoUVF1aWNrV2ViVmlldyk7
CisgICAgc2V0Q2xpcCh0cnVlKTsKICAgICBkLT5pbml0aWFsaXplKCk7CiAgICAgZC0+aW5pdGlh
bGl6ZVRvdWNoKHRoaXMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmgKaW5kZXggMmY1ODMyMi4uMTI3ODk1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCkBAIC0xMTEsNyArMTExLDcgQEAgcHJvdGVjdGVkOgog
ICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpICYmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICBPd25QdHI8TGF5ZXJU
cmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKKyAgICBSZWZQdHI8TGF5ZXJUcmVl
SG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5k
ZXggN2IxNTM4NC4uODljYjNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCkBAIC02MSw2ICs2MSwxMyBAQCBEcmF3aW5nQXJlYVBy
b3h5SW1wbDo6RHJhd2luZ0FyZWFQcm94eUltcGwoV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkp
CiBEcmF3aW5nQXJlYVByb3h5SW1wbDo6fkRyYXdpbmdBcmVhUHJveHlJbXBsKCkKIHsKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLy8gTGF5ZXJUcmVlSG9zdFByb3h5IGNh
biBiZSBzdGlsbCByZWZlcmVuY2VkIGJ5IHBhaW50IG5vZGUsCisgICAgLy8gc28gZHJhd2luZyBh
cmVhIHNob3VsZCBiZSBjbGVhcmVkIHRvIGF2b2lkIGRlcmVmZW5jaW5nIHBvaW50ZXIgdG8gZGVh
bGxvY2F0ZWQgb2JqZWN0LgorI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBpZiAobV9sYXll
clRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5zZXREcmF3aW5n
QXJlYVByb3h5KDApOworI2VuZGlmCisKICAgICAvLyBNYWtlIHN1cmUgdG8gZXhpdCBhY2NlbGVy
YXRlZCBjb21wb3NpdGluZyBtb2RlLgogICAgIGlmIChpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoKSkKICAgICAgICAgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7CkBAIC0z
MzAsNyArMzM3LDcgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXgKICAgICBtX3dlYlBhZ2VQcm94
eS0+ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKICNp
ZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3RQcm94eSkKLSAg
ICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkgPSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlSG9zdFBy
b3h5KHRoaXMpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkgPSBhZG9wdFJlZihuZXcg
TGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggODlkNWZiZS4uNWFmZTQzMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaApAQCAt
MzcsMTQgKzM3LDI3IEBACiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlck5vZGUuaCIKICNlbmRpZgog
CisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UU9iamVjdD4KKyNlbmRpZgorCitjbGFzcyBR
U0dOb2RlOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViTGF5ZXJJbmZvOwogY2xh
c3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogCiBjbGFzcyBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJl
cjsKKyNpZiBQTEFURk9STShRVCkKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eUJhc2UgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TGF5ZXJUcmVlSG9zdFByb3h5QmFzZT4sIHB1YmxpYyBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKK307CisjZWxzZQorY2xhc3MgTGF5ZXJUcmVl
SG9zdFByb3h5QmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPExheWVyVHJlZUhvc3RQcm94eUJhc2U+
LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7Cit9OworI2VuZGlmCiAKLWNs
YXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBMYXllclRyZWVIb3N0UHJv
eHlCYXNlIHsKIHB1YmxpYzoKICAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94
eSopOwogICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOwpAQCAtNTIsNyArNjUsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOwog
ICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CiAgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlE
LCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xD
b250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQpOworICAg
IHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCwgYm9vbCBzeW5jUmVtb3RlTGF5ZXJEYXRhID0gdHJ1ZSk7CiAgICAg
dm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0
QW5kU2NhbGUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0KTsKICAgICB2b2lkIHNldFZp
c2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYpOwpAQCAtNjgsNiArODEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmVjZWl2ZUxheWVy
VHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3Nh
Z2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAgICAgdm9pZCB1cGRhdGVWaWV3cG9y
dCgpOwogI2VuZGlmCisgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSgpIGNv
bnN0IHsgcmV0dXJuIG1fZHJhd2luZ0FyZWFQcm94eTsgfQorICAgIHZvaWQgc2V0RHJhd2luZ0Fy
ZWFQcm94eShEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KSB7IG1fZHJhd2luZ0Fy
ZWFQcm94eSA9IGRyYXdpbmdBcmVhUHJveHk7IH0KKworI2lmIFBMQVRGT1JNKFFUKQorICAgIFFT
R05vZGUqIHVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKik7CisgICAgdm9pZCBzZXRQYWludENvbnRl
bnRzU2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9wYWludENvbnRlbnRzU2NhbGUgPSBzY2FsZTsgfQor
I2VuZGlmCisKK3Byb3RlY3RlZCBzbG90czoKKyAgICB2b2lkIHNlbmRNZXNzYWdlVG9XZWJQcm9j
ZXNzU2xvdChpbnQsIHZvaWQqKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2xvdCgpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVM
YXllcihXZWJMYXllcklEKTsKQEAgLTEyNiwxMSArMTUwLDE3IEBAIHByb3RlY3RlZDoKICNpZiBQ
TEFURk9STShRVCkKICAgICB2b2lkIGRpZEZpcmVWaWV3cG9ydFVwZGF0ZVRpbWVyKFdlYkNvcmU6
OlRpbWVyPExheWVyVHJlZUhvc3RQcm94eT4qKTsKICAgICBXZWJDb3JlOjpUaW1lcjxMYXllclRy
ZWVIb3N0UHJveHk+IG1fdmlld3BvcnRVcGRhdGVUaW1lcjsKKyAgICBmbG9hdCBtX3BhaW50Q29u
dGVudHNTY2FsZTsKICNlbmRpZgogCiAgICAgTGF5ZXJNYXAgbV9sYXllcnM7CiAgICAgV2ViTGF5
ZXJJRCBtX3Jvb3RMYXllcklEOwogICAgIGludCBtX2lkOworI2lmbmRlZiBOREVCVUcKKyAgICBi
b29sIG1faW5QYWludGluZzsKKyNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIExheWVyVHJlZUhv
c3RQcm94eU5vZGVRdDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlOb2RlUXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZGU5YjhjNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlOb2RlUXQuY3BwCkBAIC0wLDAgKzEs
MTA3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKy8vICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFBy
b3h5Tm9kZVF0LmgiCisKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKworI2luY2x1
ZGUgPFF0UXVpY2svUVNHR2VvbWV0cnlOb2RlPgorI2luY2x1ZGUgPFF0UXVpY2svUVNHTWF0ZXJp
YWw+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitMYXllclRyZWVIb3N0UHJveHlOb2RlUXQ6Okxh
eWVyVHJlZUhvc3RQcm94eU5vZGVRdChMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQ
cm94eSkgOgorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eShsYXllclRyZWVIb3N0UHJveHkp
CisgICAgLCAgIG1fbWF0ZXJpYWwodGhpcykKKyAgICAsICAgbV9nZW9tZXRyeShRU0dHZW9tZXRy
eTo6ZGVmYXVsdEF0dHJpYnV0ZXNfUG9pbnQyRCgpLCA0KQoreworICAgIHNldEdlb21ldHJ5KCZt
X2dlb21ldHJ5KTsKKyAgICBzZXRNYXRlcmlhbCgmbV9tYXRlcmlhbCk7Cit9CisKK0xheWVyVHJl
ZUhvc3RQcm94eU5vZGVRdDo6fkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdCgpCit7CisgICAgbV9s
YXllclRyZWVIb3N0UHJveHktPnB1cmdlR0xSZXNvdXJjZXMoKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UHJveHlOb2RlUXQ6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KCkKK3sKKyNpZm5kZWYg
TkRFQlVHCisgICAgbV9sYXllclRyZWVIb3N0UHJveHktPm1faW5QYWludGluZyA9IHRydWU7Cisj
ZW5kaWYKKyAgICBRVHJhbnNmb3JtIHRyYW5zZm9ybTsKKyAgICBpZiAobWF0cml4KCkpCisgICAg
ICAgIHRyYW5zZm9ybSA9IG1hdHJpeCgpLT50b1RyYW5zZm9ybSgpOworICAgIHFyZWFsIHNjYWxl
ID0gbV9sYXllclRyZWVIb3N0UHJveHktPm1fcGFpbnRDb250ZW50c1NjYWxlOworICAgIHRyYW5z
Zm9ybS5zY2FsZShzY2FsZSwgc2NhbGUpOworICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5wYWlu
dFRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm0sIGluaGVyaXRlZE9wYWNpdHkoKSwgZmFsc2Up
OworI2lmbmRlZiBOREVCVUcKKyAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+bV9pblBhaW50aW5n
ID0gZmFsc2U7CisjZW5kaWYKK30KKworLy8gRklYTUU6IHRlbXBvcmFyeSB1bnRpbCBRdCBTY2Vu
ZWdyYXBoIHdpbGwgc3VwcG9ydCBjdXN0b20gcGFpbnRpbmcuCitjaGFyIGNvbnN0KiBjb25zdCog
TGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVyOjphdHRyaWJ1dGVO
YW1lcygpIGNvbnN0Cit7CisgICAgc3RhdGljIGNoYXIgY29uc3QqIGNvbnN0IGF0dHJbXSA9IHsg
InZlcnRleCIsIDAgfTsKKyAgICByZXR1cm4gYXR0cjsKK30KKworLy8gdmVydGV4U2hhZGVyIGFu
ZCBmcmFnbWVudFNoYWRlciBhcmUgbm8tb3Agc2hhZGVycy4KKy8vIEFsbCByZWFsIHBhaW50aW5n
IGlzIGdvbmUgYnkgVGV4dHVyZU1hcHBlciB0aHJvdWdoIExheWVyVHJlZUhvc3RQcm94eS4KK2Nv
bnN0IGNoYXIqIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlNYXRlcmlhbFNoYWRlcjo6
dmVydGV4U2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gImF0dHJpYnV0ZSBoaWdocCB2ZWM0
IHZlcnRleDsgXG4iCisgICAgICAgICAgICJ2b2lkIG1haW4oKSB7IGdsX1Bvc2l0aW9uID0gdmVy
dGV4OyB9IjsKK30KKworY29uc3QgY2hhciogTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94
eU1hdGVyaWFsU2hhZGVyOjpmcmFnbWVudFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuICJ2
b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgMC4wKTsgfSI7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0OjpQcm94eU1hdGVyaWFsU2hhZGVy
Ojp1cGRhdGVTdGF0ZShjb25zdCBSZW5kZXJTdGF0ZSYgc3RhdGUsIFFTR01hdGVyaWFsKiBuZXdN
YXRlcmlhbCwgUVNHTWF0ZXJpYWwqIG9sZE1hdGVyaWFsKQoreworICAgIGlmICghbmV3TWF0ZXJp
YWwpCisgICAgICAgIHJldHVybjsKKworICAgIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdCogbm9k
ZSA9IHN0YXRpY19jYXN0PFByb3h5TWF0ZXJpYWwqPihuZXdNYXRlcmlhbCktPm1fbm9kZTsKKyAg
ICAvLyBGSVhNRTogTm9ybWFsbHkgd2Ugd291bGRuJ3QgcGFpbnQgaW5zaWRlIFFTR01hdGVyaWFs
U2hhZGVyOjp1cGRhdGVTdGF0ZSwKKyAgICAvLyBidXQgdGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNr
IHVudGlsIGN1c3RvbSBwYWludCBub2RlcyBhcmUgYXZhaWxhYmxlLgorICAgIGlmIChub2RlKQor
ICAgICAgICBub2RlLT5wYWludFRvQ3VycmVudEdMQ29udGV4dCgpOworfQorCitRU0dNYXRlcmlh
bFR5cGUqIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6UHJveHlNYXRlcmlhbDo6dHlwZSgpIGNv
bnN0Cit7CisgICAgc3RhdGljIFFTR01hdGVyaWFsVHlwZSB0eXBlOworICAgIHJldHVybiAmdHlw
ZTsKK30KKworUVNHTWF0ZXJpYWxTaGFkZXIqIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdDo6UHJv
eHlNYXRlcmlhbDo6Y3JlYXRlU2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IFByb3h5
TWF0ZXJpYWxTaGFkZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisvLyAjZW5kaWYg
Ly8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eU5vZGVRdC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNWRkODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0LmgKQEAgLTAsMCAr
MSw2NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBMYXllclRyZWVIb3N0UHJveHlO
b2RlUXRfaAorI2RlZmluZSBMYXllclRyZWVIb3N0UHJveHlOb2RlUXRfaAorCisjaW5jbHVkZSA8
UXRRdWljay9RU0dHZW9tZXRyeU5vZGU+CisjaW5jbHVkZSA8UXRRdWljay9RU0dNYXRlcmlhbD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBM
YXllclRyZWVIb3N0UHJveHk7CitjbGFzcyBMYXllclRyZWVIb3N0UHJveHlOb2RlUXQgOiBwdWJs
aWMgUVNHR2VvbWV0cnlOb2RlIHsKK3B1YmxpYzoKKyAgICBMYXllclRyZWVIb3N0UHJveHlOb2Rl
UXQoTGF5ZXJUcmVlSG9zdFByb3h5Kik7CisgICAgfkxheWVyVHJlZUhvc3RQcm94eU5vZGVRdCgp
OworCisgICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dCgpOworCitwcml2YXRlOgorCisg
ICAgc3RydWN0IFByb3h5TWF0ZXJpYWxTaGFkZXIgOiBwdWJsaWMgUVNHTWF0ZXJpYWxTaGFkZXIg
eworICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgUmVuZGVyU3RhdGUmLCBR
U0dNYXRlcmlhbCosIFFTR01hdGVyaWFsKik7CisgICAgICAgIHZpcnR1YWwgY2hhciBjb25zdCog
Y29uc3QqIGF0dHJpYnV0ZU5hbWVzKCkgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBjb25zdCBj
aGFyKiB2ZXJ0ZXhTaGFkZXIoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRlcigpIGNvbnN0OworICAgIH07CisKKyAgICBzdHJ1Y3QgUHJveHlNYXRlcmlh
bCA6IHB1YmxpYyBRU0dNYXRlcmlhbCB7CisgICAgICAgIFByb3h5TWF0ZXJpYWwoTGF5ZXJUcmVl
SG9zdFByb3h5Tm9kZVF0KiBub2RlKSA6IG1fbm9kZShub2RlKSB7IH0KKworICAgICAgICBRU0dN
YXRlcmlhbFR5cGUqIHR5cGUoKSBjb25zdDsKKyAgICAgICAgUVNHTWF0ZXJpYWxTaGFkZXIqIGNy
ZWF0ZVNoYWRlcigpIGNvbnN0OworCisgICAgICAgIExheWVyVHJlZUhvc3RQcm94eU5vZGVRdCog
bV9ub2RlOworICAgIH07CisKKyAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVy
VHJlZUhvc3RQcm94eTsKKyAgICBQcm94eU1hdGVyaWFsIG1fbWF0ZXJpYWw7CisgICAgUVNHR2Vv
bWV0cnkgbV9nZW9tZXRyeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKaW5kZXggZjlhYmY0OS4uOGRi
ZmU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhv
c3RQcm94eVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVl
SG9zdFByb3h5UXQuY3BwCkBAIC0yMiw3ICsyMiw5IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgogCisjaW5jbHVkZSAi
QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVk
ZSAiTGF5ZXJUcmVlSG9zdFByb3h5Tm9kZVF0LmgiCiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgpAQCAt
MTQ1LDYgKzE0Nyw3OCBAQCBjbGFzcyBTZXRSb290TGF5ZXJNZXNzYWdlCiAgICAgICAgIDogcHVi
bGljIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyV2l0aERhdGE8U2V0Um9vdExheWVyTWVzc2Fn
ZURhdGEsIExheWVyVHJlZU1lc3NhZ2VUb1JlbmRlcmVyOjpTZXRSb290TGF5ZXI+IHsgfTsKIH0K
IAorI2lmIFBMQVRGT1JNKFFUKQordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE1haW5UaHJl
YWRNZXNzYWdlU2VuZGVyIHsKKyAgICBzdHJ1Y3QgQ2FsbGJhY2tDb250ZXh0IHsKKyAgICAgICAg
Q2FsbGJhY2tDb250ZXh0KGNvbnN0IFQmIG1lc3NhZ2UsIExheWVyVHJlZUhvc3RQcm94eSogbGF5
ZXJUcmVlSG9zdFByb3h5KSA6CisgICAgICAgICAgICAgICAgbV9tZXNzYWdlSUQoVDo6bWVzc2Fn
ZUlEKQorICAgICAgICAgICAgLCAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5KGxheWVyVHJlZUhvc3RQ
cm94eSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9lbmNvZGVyID0gQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyOjpjcmVhdGUoMCk7CisgICAgICAgICAgICBtX2VuY29kZXItPmVuY29kZShtZXNz
YWdlKTsKKyAgICAgICAgfQorICAgICAgICB+Q2FsbGJhY2tDb250ZXh0KCkKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIE93blB0cjxDb3JlSVBDOjpBcmd1bWVudEVuY29kZXI+IG1fZW5j
b2RlcjsKKyAgICAgICAgQ29yZUlQQzo6TWVzc2FnZUlEIG1fbWVzc2FnZUlEOworICAgICAgICBS
ZWZQdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKKyAgICB9Owor
ICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDYWxsYmFjayh2b2lkKiBkYXRhKQorICAgIHsKKyAg
ICAgICAgQ2FsbGJhY2tDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FsbGJhY2tDb250
ZXh0Kj4oZGF0YSk7CisgICAgICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkg
PSBjb250ZXh0LT5tX2xheWVyVHJlZUhvc3RQcm94eS0+ZHJhd2luZ0FyZWFQcm94eSgpOworICAg
ICAgICBpZiAoZHJhd2luZ0FyZWFQcm94eSkgeworICAgICAgICAgICAgLy8gSGF2ZSB0byBpbml0
aWFsaXplIGRlc3RhbmF0aW9uIElEIGhlcmUgYmVjYXVzZSB0aGlzIGRhdGEgY2Fubm90IGJlIGFj
Y2Vzc2VkIGZyb20KKyAgICAgICAgICAgIC8vIHBhaW50aW5nIHRocmVhZC4KKyAgICAgICAgICAg
ICpyZWludGVycHJldF9jYXN0PHVpbnQ2NF90Kj4oY29udGV4dC0+bV9lbmNvZGVyLT5idWZmZXIo
KSkgPSBkcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpOworICAgICAgICAgICAgQ29y
ZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiA9IGRyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cHJvY2VzcygpLT5jb25uZWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoY29ubmVjdGlvbikKKyAg
ICAgICAgICAgICAgICBjb25uZWN0aW9uLT5zZW5kTWVzc2FnZShjb250ZXh0LT5tX21lc3NhZ2VJ
RCwgY29udGV4dC0+bV9lbmNvZGVyLnJlbGVhc2UoKSwgMCk7CisgICAgICAgIH0KKyAgICAgICAg
ZGVsZXRlIGNvbnRleHQ7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgc2VuZE1lc3NhZ2VPbk1h
aW5UaHJlYWQoY29uc3QgVCYgbWVzc2FnZSwgTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVI
b3N0UHJveHkpCisgICAgeworICAgICAgICBDYWxsYmFja0NvbnRleHQqIGNvbnRleHQgPSBuZXcg
Q2FsbGJhY2tDb250ZXh0KG1lc3NhZ2UsIGxheWVyVHJlZUhvc3RQcm94eSk7CisgICAgICAgIGNh
bGxPbk1haW5UaHJlYWQoJm1haW5UaHJlYWRDYWxsYmFjaywgY29udGV4dCk7CisgICAgfQorfTsK
Kworc3RydWN0IExheWVyVHJlZUhvc3RQcm94eVJlZiB7CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5
UmVmKExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KSA6IG1fbGF5ZXJUcmVl
SG9zdFByb3h5KGxheWVyVHJlZUhvc3RQcm94eSkKKyAgICB7IH0KKyAgICBSZWZQdHI8TGF5ZXJU
cmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3RQcm94eTsKK307CisKK3N0YXRpYyB2b2lkIG1h
aW5UaHJlYWRVcGRhdGVWaWV3cG9ydEludm9rZXIodm9pZCogZGF0YSkKK3sKKyAgICBMYXllclRy
ZWVIb3N0UHJveHlSZWYqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxMYXllclRyZWVIb3N0UHJveHlS
ZWYqPihkYXRhKTsKKyAgICBjb250ZXh0LT5tX2xheWVyVHJlZUhvc3RQcm94eS0+dXBkYXRlVmll
d3BvcnQoKTsKKyAgICBkZWxldGUgY29udGV4dDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlVmll
d3BvcnRPbk1haW5UaHJlYWQoTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkp
Cit7CisgICAgTGF5ZXJUcmVlSG9zdFByb3h5UmVmKiBjb250ZXh0ID0gbmV3IExheWVyVHJlZUhv
c3RQcm94eVJlZihsYXllclRyZWVIb3N0UHJveHkpOworICAgIGNhbGxPbk1haW5UaHJlYWQoJm1h
aW5UaHJlYWRVcGRhdGVWaWV3cG9ydEludm9rZXIsIGNvbnRleHQpOworfQorI2Vsc2UKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBNYWluVGhyZWFkTWVzc2FnZVNlbmRlciB7CisgICAgc3Rh
dGljIHZvaWQgc2VuZE1lc3NhZ2VPbk1haW5UaHJlYWQoY29uc3QgVCYgbWVzc2FnZSwgTGF5ZXJU
cmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkpCisgICAgeworICAgICAgICBEcmF3aW5n
QXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5ID0gbGF5ZXJUcmVlSG9zdFByb3h5LT5kcmF3aW5n
QXJlYVByb3h5KCk7CisgICAgICAgIGlmIChkcmF3aW5nQXJlYVByb3h5KQorICAgICAgICAgICAg
ZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQobWVzc2FnZSwgZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgfQorfTsKK3N0YXRpYyB1cGRhdGVW
aWV3cG9ydE9uTWFpblRocmVhZChMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94
eSkKK3sKKyAgICBsYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisjZW5k
aWYKKwogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKIHsKICAgICBHcmFwaGljc0xheWVyKiBuZXdMYXll
ciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcih0aGlzKTsKQEAgLTE1OCw3ICsyMzIs
MTEgQEAgTGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQ
cm94eSogZHJhd2luZ0FyZWFQcm94eSkKICAgICA6IG1fYW5pbWF0aW9uVGltZXIoUnVuTG9vcDo6
bWFpbigpLCB0aGlzLCAmTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCkKICAgICAs
IG1fZHJhd2luZ0FyZWFQcm94eShkcmF3aW5nQXJlYVByb3h5KQogICAgICwgbV92aWV3cG9ydFVw
ZGF0ZVRpbWVyKHRoaXMsICZMYXllclRyZWVIb3N0UHJveHk6OmRpZEZpcmVWaWV3cG9ydFVwZGF0
ZVRpbWVyKQorICAgICwgbV9wYWludENvbnRlbnRzU2NhbGUoMS4wKQogICAgICwgbV9yb290TGF5
ZXJJRCgwKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1faW5QYWludGluZyhmYWxzZSkKKyNlbmRp
ZgogewogfQogCkBAIC0xNjcsMTIgKzI0NSwxNCBAQCBMYXllclRyZWVIb3N0UHJveHk6On5MYXll
clRyZWVIb3N0UHJveHkoKQogfQogCiAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJlZW50
cmFudC4KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQordm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGJvb2wgc3luY1JlbW90ZUxheWVy
RGF0YSkKIHsKICAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKICAgICAgICAgbV90ZXh0dXJlTWFw
cGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKIAotICAgIHN5bmNSZW1vdGVDb250ZW50
KCk7CisgICAgaWYgKHN5bmNSZW1vdGVMYXllckRhdGEpCisgICAgICAgIHN5bmNSZW1vdGVDb250
ZW50KCk7CisKICAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVy
KCk7CiAgICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQogICAgICAgICByZXR1cm47CkBAIC0yMDYs
MTEgKzI4NiwxMiBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENv
bnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdAogCiB2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6ZGlkRmlyZVZpZXdwb3J0VXBkYXRlVGltZXIoVGltZXI8TGF5ZXJUcmVlSG9zdFBy
b3h5PiopCiB7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKKyAgICB1cGRhdGVWaWV3cG9ydE9uTWFp
blRocmVhZCh0aGlzKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdw
b3J0KCkKIHsKKyAgICBBU1NFUlQoIW1faW5QYWludGluZyk7CiAgICAgbV9kcmF3aW5nQXJlYVBy
b3h5LT51cGRhdGVWaWV3cG9ydCgpOwogfQogCkBAIC01MTQsNyArNTk1LDYgQEAgdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnN5bmNSZW1vdGVDb250ZW50KCkKIHZvaWQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjpwdXNoVXBkYXRlVG9RdWV1ZShQYXNzT3duUHRyPExheWVyVHJlZU1lc3NhZ2VUb1JlbmRl
cmVyPiBtZXNzYWdlKQogewogICAgIG1fbWVzc2FnZXNUb1JlbmRlcmVyLmFwcGVuZChtZXNzYWdl
KTsKLSAgICB1cGRhdGVWaWV3cG9ydCgpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6
OlVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCkBAIC01OTQsMTQgKzY3NCwxNCBAQCB2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5
KQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVj
dG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewotICAgIG1f
ZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVy
VHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9y
eVZlY3RvciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgTWFp
blRocmVhZE1lc3NhZ2VTZW5kZXI8TWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVD
b250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3I+OjpzZW5kTWVzc2FnZU9uTWFpblRocmVhZChNZXNz
YWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rv
cih0cmFqZWN0b3J5VmVjdG9yKSwgdGhpcyk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxv
YXQgc2NhbGUpCiB7CiAgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKICAgICBtX2Nv
bnRlbnRzU2NhbGUgPSBzY2FsZTsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJv
Y2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudFJl
Y3RBbmRTY2FsZShyZWN0LCBzY2FsZSksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdl
SUQoKSk7CisgICAgTWFpblRocmVhZE1lc3NhZ2VTZW5kZXI8TWVzc2FnZXM6OkxheWVyVHJlZUhv
c3Q6OlNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxlPjo6c2VuZE1lc3NhZ2VPbk1haW5UaHJl
YWQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdEFuZFNjYWxl
KHJlY3QsIHNjYWxlKSwgdGhpcyk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJn
ZUdMUmVzb3VyY2VzKCkKQEAgLTYxNSw3ICs2OTUsMjAgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OnB1cmdlR0xSZXNvdXJjZXMoKQogCiAgICAgbV90ZXh0dXJlTWFwcGVyLmNsZWFyKCk7CiAK
LSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2Vz
OjpMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5
LT5wYWdlKCktPnBhZ2VJRCgpKTsKKyAgICBNYWluVGhyZWFkTWVzc2FnZVNlbmRlcjxNZXNzYWdl
czo6TGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5nU3RvcmVzPjo6c2VuZE1lc3NhZ2VPbk1haW5U
aHJlYWQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCB0aGlz
KTsKK30KKworUVNHTm9kZSogTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVQYWludE5vZGUoUVNH
Tm9kZSogb2xkTm9kZSkKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90
ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKworICAgIHN5bmNSZW1v
dGVDb250ZW50KCk7CisKKyAgICBpZiAoIW9sZE5vZGUpCisgICAgICAgIHJldHVybiBuZXcgTGF5
ZXJUcmVlSG9zdFByb3h5Tm9kZVF0KHRoaXMpOworCisgICAgcmV0dXJuIG9sZE5vZGU7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKaW5kZXggZDEyZWIwYi4uODdjYjlkYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZS5jcHAKQEAgLTE3Myw2ICsxNzMsOSBAQCBxcmVhbCBRdFZpZXdwb3J0SW50ZXJh
Y3Rpb25FbmdpbmU6Om91dGVyQm91bmRlZENTU1NjYWxlKHFyZWFsIGNzc1NjYWxlKQogCiB2b2lk
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2V0SXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFS
ZWN0RiYgaXRlbVJlY3QpCiB7CisgICAgaWYgKGl0ZW1SZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKIAogICAg
IHFyZWFsIGl0ZW1TY2FsZSA9IG1fdmlld3BvcnQtPndpZHRoKCkgLyBpdGVtUmVjdC53aWR0aCgp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDkw
Njc5ZTMuLjMwNDJiOTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMS0xOSAgVmlhdGNoZXNsYXYgT3N0YXBl
bmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFtX
SzJdIFN1cHBvcnQgdGhyZWFkZWQgcmVuZGVyZXIgaW4gV0syCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2MQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgYWRkaW5nIG9mIFFNTF9OT19USFJF
QURFRF9SRU5ERVJFUiB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKKyAgICAgICAgKiBNaW5p
QnJvd3Nlci9xdC9tYWluLmNwcDoKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTAxLTE5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNvbWUgcGVyZiB0ZXN0cyB0
aW1lIG91dCB3aGVuIHJhbiBieSBydW4tcGVyZi10ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWlu
aUJyb3dzZXIvcXQvbWFpbi5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAppbmRl
eCBmZWFlMTRhLi4zNjYzNzczIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWlu
LmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcApAQCAtMzksOSArMzksNiBA
QAogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAgLy8gRklYTUU6IFdl
IG11c3QgYWRkIHN1cHBvcnQgZm9yIHRoZSB0aHJlYWRlZCByZW5kZXJpbmcgYXMgaXQgaXMgdGhl
IGRlZmF1bHQuCi0gICAgcXB1dGVudigiUU1MX05PX1RIUkVBREVEX1JFTkRFUkVSIiwgUUJ5dGVB
cnJheSgiMSIpKTsKLQogICAgIE1pbmlCcm93c2VyQXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3Yp
OwogCiAgICAgaWYgKGFwcC5pc1JvYm90aXplZCgpKSB7Cg==
</data>
<flag name="review"
          id="124219"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="124220"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123234</attachid>
            <date>2012-01-19 18:20:26 -0800</date>
            <delta_ts>2012-03-04 18:12:58 -0800</delta_ts>
            <desc>Reworked patch.</desc>
            <filename>threaded_painting_06.diff</filename>
            <type>text/plain</type>
            <size>29255</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAxOWE0MmEzLi5iYjc3YTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYg
QEAKKzIwMTItMDEtMTkgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hl
c2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVkIHJl
bmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGRlZCB0aHJlYWRlZCBwYWludGluZyBzdXBwb3J0IHRvIFF0IFdlYmtpdDIuCisgICAg
ICAgIEFsbCBUZXh0dXJlTWFwcGVyIGFuZCBHcmFwaGljc0xheWVyIG9iamVjdHMgYXJlIGNyZWF0
ZWQgb24gcmVuZGVyaW5nCisgICAgICAgIHRocmVhZCBhbmQgY2FuIGJlIGFjY2Vzc2VkIHRocm91
Z2ggcmVuZGVyaW5nIHRocmVhZCBvbmx5LgorICAgICAgICBMYXllciB1cGRhdGVzIGFyZSByZWNl
aXZlZCB0aHJvdWdoIG1fbWVzc2FnZXNUb1JlbmRlcmVyIHF1ZXVlIGFuZAorICAgICAgICBhcHBs
aWVkIHRvIFF0TGF5ZXJUcmVlU2NlbmVHcmFwaE5vZGUgdHJlZSBpbiB1cGRhdGVQYWludE5vZGUs
IHdoZW4gVUkgdGhyZWFkCisgICAgICAgIGlzIHN5bmNocm9ub3VzbHkgbG9ja2VkIGJ5IHJlbmRl
ciB0aHJlYWQsIHNvIG5vIGV4dHJhIHN5bmNocm9uaXphdGlvbiAKKyAgICAgICAgaXMgbmVjZXNz
YXJ5LgorICAgICAgICBNZXNzYWdlcyBmcm9tIFRleHR1cmVNYXBwZXIgYXJlIGRlbGl2ZXJlZCBi
YWNrIHRocm91Z2ggImNhbGxPbk1haW5UaHJlYWQiCisgICAgICAgIGludGVyZmFjZS4KKyAgICAg
ICAgTGF5ZXJUcmVlSG9zdFByb3h5IGlzIHRocmVhZCBzYWZlIHJlZi1jb3VudGVkIGFuZCBoZWxk
IGFsaXZlIHVudGlsIHBhaW50CisgICAgICAgIG5vZGUgb3IgZHJhd2luZyBhcmVhIGRlc3RydWN0
aW9uLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6UVF1aWNrV2ViUGFn
ZSk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6UVF1aWNrV2ViUGFnZVByaXZhdGUp
OgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKToKKyAgICAgICAgKFFR
dWlja1dlYlBhZ2U6OnNldENvbnRlbnRTY2FsZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJwYWdlX3BfcC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlldy5jcHA6CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
UHJveHlJbXBsOjp+RHJhd2luZ0FyZWFQcm94eUltcGwpOgorICAgICAgICAoV2ViS2l0OjpEcmF3
aW5nQXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UHJveHk6OmRyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UHJveHk6OnNldERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHk6OnNldFBhaW50Q29udGVudHNTY2FsZSk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5TWV0aG9kUmVmOjpMYXllclRyZWVIb3N0UHJveHlNZXRob2RSZWYp
OgorICAgICAgICAoV2ViS2l0OjptYWluVGhyZWFkTWV0aG9kSW52b2tlcik6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6aW52b2tlTWV0aG9kT25NYWluVGhyZWFkKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250
ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRGaXJlVmlld3Bv
cnRVcGRhdGVUaW1lcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnB1c2hV
cGRhdGVUb1F1ZXVlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRW
aXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0QW5kU2NhbGUpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlR0xSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnJlcXVlc3RQdXJnZUJhY2tpbmdTdG9yZXMp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVBhaW50Tm9kZSk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0TGF5ZXJUcmVlU2NlbmVHcmFwaE5vZGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UXRMYXllclRyZWVTY2VuZUdyYXBoTm9kZTo6UXRMYXll
clRyZWVTY2VuZUdyYXBoTm9kZSk6CisgICAgICAgIChXZWJLaXQ6OlF0TGF5ZXJUcmVlU2NlbmVH
cmFwaE5vZGU6On5RdExheWVyVHJlZVNjZW5lR3JhcGhOb2RlKToKKyAgICAgICAgKFdlYktpdDo6
UXRMYXllclRyZWVTY2VuZUdyYXBoTm9kZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQpOgorICAg
ICAgICAoV2ViS2l0OjpRdExheWVyVHJlZVNjZW5lR3JhcGhOb2RlOjpQcm94eU1hdGVyaWFsU2hh
ZGVyOjphdHRyaWJ1dGVOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OlF0TGF5ZXJUcmVlU2NlbmVH
cmFwaE5vZGU6OlByb3h5TWF0ZXJpYWxTaGFkZXI6OnZlcnRleFNoYWRlcik6CisgICAgICAgIChX
ZWJLaXQ6OlF0TGF5ZXJUcmVlU2NlbmVHcmFwaE5vZGU6OlByb3h5TWF0ZXJpYWxTaGFkZXI6OmZy
YWdtZW50U2hhZGVyKToKKyAgICAgICAgKFdlYktpdDo6UXRMYXllclRyZWVTY2VuZUdyYXBoTm9k
ZTo6UHJveHlNYXRlcmlhbFNoYWRlcjo6dXBkYXRlU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpR
dExheWVyVHJlZVNjZW5lR3JhcGhOb2RlOjpQcm94eU1hdGVyaWFsOjp0eXBlKToKKyAgICAgICAg
KFdlYktpdDo6UXRMYXllclRyZWVTY2VuZUdyYXBoTm9kZTo6UHJveHlNYXRlcmlhbDo6Y3JlYXRl
U2hhZGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRMYXllclRyZWVTY2VuZUdyYXBoTm9k
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UXRMYXllclRyZWVTY2VuZUdyYXBoTm9kZTo6
UHJveHlNYXRlcmlhbDo6UHJveHlNYXRlcmlhbCk6CisKIDIwMTItMDEtMTggIEFkYSBDaGFuICA8
YWRhY2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAgTmVlZCBhIFdlYktpdDIgQVBJIGZvciBzZXR0
aW5nIG1lZGlhIHZvbHVtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXggMzU5ODNmMC4uMzU4MzgwMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpCkBAIC0yNTUsNiArMjU1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL1dl
YlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYlJlc291cmNl
TG9hZENsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuaCBcCisgICAgVUlQcm9j
ZXNzL3F0L1F0TGF5ZXJUcmVlU2NlbmVHcmFwaE5vZGUuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0
V2ViQ29udGV4dC5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgg
XAogICAgIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmggXApAQCAtNTg1LDYgKzU4
Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJSZXNvdXJjZUxvYWRDbGllbnQu
Y3BwIFwKICAgICBVSVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQv
UXRXZWJDb250ZXh0LmNwcCBcCisgICAgVUlQcm9jZXNzL3F0L1F0TGF5ZXJUcmVlU2NlbmVHcmFw
aE5vZGUuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCmluZGV4IGE4YzE3MTguLmMyYTYyZTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdl
LmNwcApAQCAtMjcsMTQgKzI3LDEzIEBACiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wX3AuaCIK
ICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKICNpbmNsdWRlIDxRdFF1aWNrL1FRdWlja0Nh
bnZhcz4KLSNpbmNsdWRlIDxRdFF1aWNrL1FTR0dlb21ldHJ5Tm9kZT4KLSNpbmNsdWRlIDxRdFF1
aWNrL1FTR01hdGVyaWFsPgogCiBRUXVpY2tXZWJQYWdlOjpRUXVpY2tXZWJQYWdlKFFRdWlja1dl
YlZpZXcqIHZpZXdwb3J0SXRlbSkKICAgICA6IFFRdWlja0l0ZW0odmlld3BvcnRJdGVtKQogICAg
ICwgZChuZXcgUVF1aWNrV2ViUGFnZVByaXZhdGUodGhpcywgdmlld3BvcnRJdGVtKSkKIHsKICAg
ICBzZXRGbGFnKEl0ZW1IYXNDb250ZW50cyk7CisgICAgc2V0Q2xpcCh0cnVlKTsKIAogICAgIC8v
IFdlIGRvIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgdG9wIGxlZnQgc28gdGhlIHZpZXdwb3J0IGNh
biBhc3N1bWUgdGhlIHBvc2l0aW9uIDAsIDAKICAgICAvLyBpcyBhbHdheXMgd2hlcmUgcmVuZGVy
aW5nIHN0YXJ0cy4KQEAgLTY4LDcgKzY3LDYgQEAgUVF1aWNrV2ViUGFnZVByaXZhdGU6OlFRdWlj
a1dlYlBhZ2VQcml2YXRlKFFRdWlja1dlYlBhZ2UqIHEsIFFRdWlja1dlYlZpZXcqIHZpZXcKICAg
ICAsIHdlYlBhZ2VQcm94eSgwKQogICAgICwgc2dVcGRhdGVRdWV1ZShxKQogICAgICwgcGFpbnRp
bmdJc0luaXRpYWxpemVkKGZhbHNlKQotICAgICwgbV9wYWludE5vZGUoMCkKICAgICAsIGNvbnRl
bnRTY2FsZSgxKQogICAgICwgdXNlVHJhZGl0aW9uYWxEZXNrdG9wQmVoYXZpb3VyKGZhbHNlKQog
ewpAQCAtODAsMTggKzc4LDYgQEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6aW5pdGlhbGl6
ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQogICAgIGV2ZW50SGFuZGxlci5y
ZXNldChuZXcgUXRXZWJQYWdlRXZlbnRIYW5kbGVyKHRvQVBJKHdlYlBhZ2VQcm94eSksIHEsIHZp
ZXdwb3J0SXRlbSkpOwogfQogCi1zdGF0aWMgZmxvYXQgY29tcHV0ZUVmZmVjdGl2ZU9wYWNpdHko
Y29uc3QgUVF1aWNrSXRlbSogaXRlbSkKLXsKLSAgICBpZiAoIWl0ZW0pCi0gICAgICAgIHJldHVy
biAxOwotCi0gICAgZmxvYXQgb3BhY2l0eSA9IGl0ZW0tPm9wYWNpdHkoKTsKLSAgICBpZiAob3Bh
Y2l0eSA8IDAuMDEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG9wYWNpdHkgKiBj
b21wdXRlRWZmZWN0aXZlT3BhY2l0eShpdGVtLT5wYXJlbnRJdGVtKCkpOwotfQotCiB2b2lkIFFR
dWlja1dlYlBhZ2VQcml2YXRlOjpzZXREcmF3aW5nQXJlYVNpemUoY29uc3QgUVNpemUmIHNpemUp
CiB7CiAgICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSB3ZWJQYWdlUHJveHktPmRy
YXdpbmdBcmVhKCk7CkBAIC0xMDAsMTM0ICs4NiwxMyBAQCB2b2lkIFFRdWlja1dlYlBhZ2VQcml2
YXRlOjpzZXREcmF3aW5nQXJlYVNpemUoY29uc3QgUVNpemUmIHNpemUpCiAgICAgZHJhd2luZ0Fy
ZWEtPnNldFNpemUoV2ViQ29yZTo6SW50U2l6ZShzaXplKSwgV2ViQ29yZTo6SW50U2l6ZSgpKTsK
IH0KIAotdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQo
KQotewotICAgIGlmICghcS0+aXNWaXNpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFU
cmFuc2Zvcm0gdHJhbnNmb3JtID0gcS0+aXRlbVRyYW5zZm9ybSgwLCAwKTsKLSAgICB0cmFuc2Zv
cm0uc2NhbGUoY29udGVudFNjYWxlLCBjb250ZW50U2NhbGUpOwotCi0gICAgZmxvYXQgb3BhY2l0
eSA9IGNvbXB1dGVFZmZlY3RpdmVPcGFjaXR5KHEpOwotICAgIFFSZWN0RiBjbGlwUmVjdCA9IHEt
PnBhcmVudEl0ZW0oKS0+bWFwUmVjdFRvU2NlbmUocS0+cGFyZW50SXRlbSgpLT5ib3VuZGluZ1Jl
Y3QoKSk7Ci0KLSAgICBpZiAoIWNsaXBSZWN0LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSB3ZWJQYWdlUHJveHktPmRyYXdp
bmdBcmVhKCk7Ci0gICAgaWYgKCFkcmF3aW5nQXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gTWFrZSBzdXJlIHRoYXQgbm8gR0wgZXJyb3IgY29kZSBzdGF5cyBmcm9tIHByZXZpb3VzIFFU
IG9wZXJhdGlvbnMuCi0gICAgZ2xHZXRFcnJvcigpOwotCi0gICAgZ2xFbmFibGUoR0xfU0NJU1NP
Ul9URVNUKTsKLSAgICBBU1NFUlQoIWdsR2V0RXJyb3IoKSk7Ci0gICAgY29uc3QgaW50IGxlZnQg
PSBjbGlwUmVjdC5sZWZ0KCk7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gY2xpcFJlY3Qud2lkdGgo
KTsKLSAgICBjb25zdCBpbnQgYm90dG9tID0gcS0+Y2FudmFzKCktPmhlaWdodCgpIC0gKGNsaXBS
ZWN0LmJvdHRvbSgpICsgMSk7Ci0gICAgY29uc3QgaW50IGhlaWdodCA9IGNsaXBSZWN0LmhlaWdo
dCgpOwotCi0gICAgZ2xTY2lzc29yKGxlZnQsIGJvdHRvbSwgd2lkdGgsIGhlaWdodCk7Ci0gICAg
QVNTRVJUKCFnbEdldEVycm9yKCkpOwotCi0gICAgZHJhd2luZ0FyZWEtPnBhaW50VG9DdXJyZW50
R0xDb250ZXh0KHRyYW5zZm9ybSwgb3BhY2l0eSk7Ci0KLSAgICBnbERpc2FibGUoR0xfU0NJU1NP
Ul9URVNUKTsKLSAgICBBU1NFUlQoIWdsR2V0RXJyb3IoKSk7Ci19Ci0KLXN0cnVjdCBQYWdlUHJv
eHlNYXRlcmlhbDsKLXN0cnVjdCBQYWdlUHJveHlOb2RlOwotCi0vLyBGSVhNRTogdGVtcG9yYXJ5
IHVudGlsIFF0IFNjZW5lZ3JhcGggd2lsbCBzdXBwb3J0IGN1c3RvbSBwYWludGluZy4KLXN0cnVj
dCBQYWdlUHJveHlNYXRlcmlhbFNoYWRlciA6IHB1YmxpYyBRU0dNYXRlcmlhbFNoYWRlciB7Ci0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IFJlbmRlclN0YXRlJiBzdGF0ZSwgUVNH
TWF0ZXJpYWwqIG5ld01hdGVyaWFsLCBRU0dNYXRlcmlhbCogb2xkTWF0ZXJpYWwpOwotICAgIHZp
cnR1YWwgY2hhciBjb25zdCogY29uc3QqIGF0dHJpYnV0ZU5hbWVzKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0KiBjb25zdCBhdHRyW10gPSB7ICJ2ZXJ0ZXgiLCAwIH07
Ci0gICAgICAgIHJldHVybiBhdHRyOwotICAgIH0KLQotICAgIC8vIHZlcnRleFNoYWRlciBhbmQg
ZnJhZ21lbnRTaGFkZXIgYXJlIG5vLW9wIHNoYWRlcnMuCi0gICAgLy8gQWxsIHJlYWwgcGFpbnRp
bmcgaXMgZ29uZSBieSBUZXh0dXJlTWFwcGVyIHRocm91Z2ggTGF5ZXJUcmVlSG9zdFByb3h5Lgot
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogdmVydGV4U2hhZGVyKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAiYXR0cmlidXRlIGhpZ2hwIHZlYzQgdmVydGV4OyBcbiIKLSAgICAgICAgICAg
ICAgICJ2b2lkIG1haW4oKSB7IGdsX1Bvc2l0aW9uID0gdmVydGV4OyB9IjsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAidm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAw
LjAsIDAuMCk7IH0iOwotICAgIH0KLX07Ci0KLXN0cnVjdCBQYWdlUHJveHlNYXRlcmlhbCA6IHB1
YmxpYyBRU0dNYXRlcmlhbCB7Ci0gICAgUGFnZVByb3h5TWF0ZXJpYWwoUGFnZVByb3h5Tm9kZSog
bm9kZSkgOiBtX25vZGUobm9kZSkgeyB9Ci0KLSAgICBRU0dNYXRlcmlhbFR5cGUqIHR5cGUoKSBj
b25zdAotICAgIHsKLSAgICAgICAgc3RhdGljIFFTR01hdGVyaWFsVHlwZSB0eXBlOwotICAgICAg
ICByZXR1cm4gJnR5cGU7Ci0gICAgfQotCi0gICAgUVNHTWF0ZXJpYWxTaGFkZXIqIGNyZWF0ZVNo
YWRlcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbmV3IFBhZ2VQcm94eU1hdGVyaWFs
U2hhZGVyOwotICAgIH0KLQotICAgIFBhZ2VQcm94eU5vZGUqIG1fbm9kZTsKLX07Ci0KLXN0cnVj
dCBQYWdlUHJveHlOb2RlIDogcHVibGljIFFTR0dlb21ldHJ5Tm9kZSB7Ci0gICAgUGFnZVByb3h5
Tm9kZShRUXVpY2tXZWJQYWdlUHJpdmF0ZSogcGFnZSkgOgotICAgICAgICBtX3BhZ2VQcml2YXRl
KHBhZ2UpCi0gICAgICAsIG1fbWF0ZXJpYWwodGhpcykKLSAgICAgICwgbV9nZW9tZXRyeShRU0dH
ZW9tZXRyeTo6ZGVmYXVsdEF0dHJpYnV0ZXNfUG9pbnQyRCgpLCA0KQotICAgIHsKLSAgICAgICAg
c2V0R2VvbWV0cnkoJm1fZ2VvbWV0cnkpOwotICAgICAgICBzZXRNYXRlcmlhbCgmbV9tYXRlcmlh
bCk7Ci0gICAgfQotCi0gICAgflBhZ2VQcm94eU5vZGUoKQotICAgIHsKLSAgICAgICAgaWYgKG1f
cGFnZVByaXZhdGUpCi0gICAgICAgICAgICBtX3BhZ2VQcml2YXRlLT5yZXNldFBhaW50Tm9kZSgp
OwotICAgIH0KLQotICAgIFFRdWlja1dlYlBhZ2VQcml2YXRlKiBtX3BhZ2VQcml2YXRlOwotICAg
IFBhZ2VQcm94eU1hdGVyaWFsIG1fbWF0ZXJpYWw7Ci0gICAgUVNHR2VvbWV0cnkgbV9nZW9tZXRy
eTsKLX07Ci0KLXZvaWQgUGFnZVByb3h5TWF0ZXJpYWxTaGFkZXI6OnVwZGF0ZVN0YXRlKGNvbnN0
IFJlbmRlclN0YXRlJiBzdGF0ZSwgUVNHTWF0ZXJpYWwqIG5ld01hdGVyaWFsLCBRU0dNYXRlcmlh
bCogb2xkTWF0ZXJpYWwpCi17Ci0gICAgaWYgKCFuZXdNYXRlcmlhbCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUGFnZVByb3h5Tm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PFBhZ2VQcm94eU1hdGVy
aWFsKj4obmV3TWF0ZXJpYWwpLT5tX25vZGU7Ci0gICAgLy8gRklYTUU6IE5vcm1hbGx5IHdlIHdv
dWxkbid0IHBhaW50IGluc2lkZSBRU0dNYXRlcmlhbFNoYWRlcjo6dXBkYXRlU3RhdGUsCi0gICAg
Ly8gYnV0IHRoaXMgaXMgYSB0ZW1wb3JhcnkgaGFjayB1bnRpbCBjdXN0b20gcGFpbnQgbm9kZXMg
YXJlIGF2YWlsYWJsZS4KLSAgICBpZiAobm9kZS0+bV9wYWdlUHJpdmF0ZSkKLSAgICAgICAgbm9k
ZS0+bV9wYWdlUHJpdmF0ZS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsKLX0KLQogUVNHTm9k
ZSogUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0
ZVBhaW50Tm9kZURhdGEqKQogewotICAgIGlmICghKGZsYWdzKCkgJiBJdGVtSGFzQ29udGVudHMp
KSB7Ci0gICAgICAgIGlmIChvbGROb2RlKQotICAgICAgICAgICAgZGVsZXRlIG9sZE5vZGU7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFBhZ2VQcm94eU5vZGUqIHByb3h5Tm9kZSA9
IHN0YXRpY19jYXN0PFBhZ2VQcm94eU5vZGUqPihvbGROb2RlKTsKLSAgICBpZiAoIXByb3h5Tm9k
ZSkgewotICAgICAgICBwcm94eU5vZGUgPSBuZXcgUGFnZVByb3h5Tm9kZShkKTsKLSAgICAgICAg
ZC0+bV9wYWludE5vZGUgPSBwcm94eU5vZGU7Ci0gICAgfQorICAgIERyYXdpbmdBcmVhUHJveHkq
IGRyYXdpbmdBcmVhID0gZC0+d2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOworICAgIGlmIChk
cmF3aW5nQXJlYSAmJiBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCkpCisgICAgICAg
IHJldHVybiBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCktPnVwZGF0ZVBhaW50Tm9k
ZShvbGROb2RlKTsKIAotICAgIHJldHVybiBwcm94eU5vZGU7CisgICAgcmV0dXJuIDA7CiB9CiAK
IGJvb2wgUVF1aWNrV2ViUGFnZTo6dXNlc1RyYWRpdGlvbmFsRGVza3RvcEJlaGF2aW91cigpIGNv
bnN0CkBAIC0yNjMsOCArMTI4LDE0IEBAIGNvbnN0IFFTaXplRiYgUVF1aWNrV2ViUGFnZTo6Y29u
dGVudFNpemUoKSBjb25zdAogdm9pZCBRUXVpY2tXZWJQYWdlOjpzZXRDb250ZW50U2NhbGUocXJl
YWwgc2NhbGUpCiB7CiAgICAgQVNTRVJUKHNjYWxlID4gMCk7CisgICAgaWYgKHNjYWxlID09IGQt
PmNvbnRlbnRTY2FsZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZC0+Y29udGVudFNjYWxlID0g
c2NhbGU7CiAgICAgZC0+dXBkYXRlU2l6ZSgpOworICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdp
bmdBcmVhID0gZC0+d2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOworICAgIGlmIChkcmF3aW5n
QXJlYSAmJiBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCkpCisgICAgICAgIHJldHVy
biBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCktPnNldFBhaW50Q29udGVudHNTY2Fs
ZShzY2FsZSk7CiB9CiAKIHFyZWFsIFFRdWlja1dlYlBhZ2U6OmNvbnRlbnRTY2FsZSgpIGNvbnN0
CkBAIC0yODksMTggKzE2MCw0IEBAIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNp
emUoKQogICAgIHEtPnNldFNpemUoc2NhbGVkU2l6ZSk7CiB9CiAKLXZvaWQgUVF1aWNrV2ViUGFn
ZVByaXZhdGU6OnJlc2V0UGFpbnROb2RlKCkKLXsKLSAgICBtX3BhaW50Tm9kZSA9IDA7Ci0gICAg
RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSB3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVh
KCk7Ci0gICAgaWYgKGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJv
eHkoKSkKLSAgICAgICAgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpLT5wdXJnZUdM
UmVzb3VyY2VzKCk7Ci19Ci0KLVFRdWlja1dlYlBhZ2VQcml2YXRlOjp+UVF1aWNrV2ViUGFnZVBy
aXZhdGUoKQotewotICAgIGlmIChtX3BhaW50Tm9kZSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFn
ZVByb3h5Tm9kZSo+KG1fcGFpbnROb2RlKS0+bV9wYWdlUHJpdmF0ZSA9IDA7Ci19Ci0KICNpbmNs
dWRlICJtb2NfcXF1aWNrd2VicGFnZV9wLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaAppbmRleCA5OWNiMmMyLi42MWMxMjJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBh
Z2VfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJw
YWdlX3BfcC5oCkBAIC0zNSwyMyArMzUsMTggQEAgY2xhc3MgUXRXZWJQYWdlRXZlbnRIYW5kbGVy
OwogY2xhc3MgUVF1aWNrV2ViUGFnZVByaXZhdGUgewogcHVibGljOgogICAgIFFRdWlja1dlYlBh
Z2VQcml2YXRlKFFRdWlja1dlYlBhZ2UqIHEsIFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRlbSk7
Ci0gICAgflFRdWlja1dlYlBhZ2VQcml2YXRlKCk7CiAKICAgICB2b2lkIGluaXRpYWxpemUoV2Vi
S2l0OjpXZWJQYWdlUHJveHkqKTsKICAgICB2b2lkIHNldERyYXdpbmdBcmVhU2l6ZShjb25zdCBR
U2l6ZSYpOwogCiAgICAgdm9pZCB1cGRhdGVTaXplKCk7CiAKLSAgICB2b2lkIHBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KCk7Ci0gICAgdm9pZCByZXNldFBhaW50Tm9kZSgpOwotCiAgICAgUVNjb3Bl
ZFBvaW50ZXI8UXRXZWJQYWdlRXZlbnRIYW5kbGVyPiBldmVudEhhbmRsZXI7CiAgICAgUVF1aWNr
V2ViUGFnZSogY29uc3QgcTsKICAgICBRUXVpY2tXZWJWaWV3KiBjb25zdCB2aWV3cG9ydEl0ZW07
CiAgICAgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eTsKICAgICBXZWJLaXQ6OlF0
U0dVcGRhdGVRdWV1ZSBzZ1VwZGF0ZVF1ZXVlOwogICAgIGJvb2wgcGFpbnRpbmdJc0luaXRpYWxp
emVkOwotICAgIFFTR05vZGUqIG1fcGFpbnROb2RlOwogCiAgICAgUVNpemVGIGNvbnRlbnRTaXpl
OwogICAgIHFyZWFsIGNvbnRlbnRTY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IDU1OTY3NTAuLjFiNTg1YTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApA
QCAtODM0LDYgKzgzNCw3IEBAIFFRdWlja1dlYlZpZXc6OlFRdWlja1dlYlZpZXcoUVF1aWNrSXRl
bSogcGFyZW50KQogICAgICwgbV9leHBlcmltZW50YWwobmV3IFFRdWlja1dlYlZpZXdFeHBlcmlt
ZW50YWwodGhpcykpCiB7CiAgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIHNldENsaXAodHJ1
ZSk7CiAgICAgZC0+aW5pdGlhbGl6ZSgpOwogICAgIGQtPmluaXRpYWxpemVUb3VjaCh0aGlzKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IDJm
NTgzMjIuLjEyNzg5NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHkuaApAQCAtMTExLDcgKzExMSw3IEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJbnRT
aXplIG1fc2Nyb2xsT2Zmc2V0OwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAm
JiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgT3duUHRyPExheWVyVHJlZUhvc3RQcm94eT4gbV9s
YXllclRyZWVIb3N0UHJveHk7CisgICAgUmVmUHRyPExheWVyVHJlZUhvc3RQcm94eT4gbV9sYXll
clRyZWVIb3N0UHJveHk7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IDdiMTUzODQuLjg5Y2Iz
Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJ
bXBsLmNwcApAQCAtNjEsNiArNjEsMTMgQEAgRHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdpbmdB
cmVhUHJveHlJbXBsKFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQogRHJhd2luZ0FyZWFQcm94
eUltcGw6On5EcmF3aW5nQXJlYVByb3h5SW1wbCgpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorICAgIC8vIExheWVyVHJlZUhvc3RQcm94eSBjYW4gYmUgc3RpbGwgcmVmZXJl
bmNlZCBieSBwYWludCBub2RlLAorICAgIC8vIHNvIGRyYXdpbmcgYXJlYSBzaG91bGQgYmUgY2xl
YXJlZCB0byBhdm9pZCBkZXJlZmVuY2luZyBwb2ludGVyIHRvIGRlYWxsb2NhdGVkIG9iamVjdC4K
KyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQor
ICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+c2V0RHJhd2luZ0FyZWFQcm94eSgwKTsKKyNl
bmRpZgorCiAgICAgLy8gTWFrZSBzdXJlIHRvIGV4aXQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcg
bW9kZS4KICAgICBpZiAoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpCiAgICAgICAg
IGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpOwpAQCAtMzMwLDcgKzMzNyw3IEBAIHZv
aWQgRHJhd2luZ0FyZWFQcm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
Y29uc3QgTGF5ZXJUcmVlQ29udGV4CiAgICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJUcmVlQ29udGV4dCk7CiAjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSKQogICAgIGlmICghbV9sYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1fbGF5ZXJUcmVl
SG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5ID0gYWRvcHRSZWYobmV3IExheWVyVHJlZUhvc3RQcm94
eSh0aGlzKSk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUhvc3RQcm94eS5oCmluZGV4IDg5ZDVmYmUuLmJiNTU4NTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTM3LDE0ICszNywyMyBAQAog
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJOb2RlLmgiCiAjZW5kaWYKIAorY2xhc3MgUVNHTm9kZTsK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkxheWVySW5mbzsKIGNsYXNzIFdlYkxh
eWVyVXBkYXRlSW5mbzsKIAogY2xhc3MgTGF5ZXJUcmVlTWVzc2FnZVRvUmVuZGVyZXI7CisjaWYg
UExBVEZPUk0oUVQpCitjbGFzcyBMYXllclRyZWVIb3N0UHJveHlCYXNlIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPExheWVyVHJlZUhvc3RQcm94eUJhc2U+LCBwdWJsaWMgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudCB7Cit9OworI2Vsc2UKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94
eUJhc2UgOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclRyZWVIb3N0UHJveHlCYXNlPiwgcHVibGlj
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworfTsKKyNlbmRpZgogCi1jbGFzcyBMYXll
clRyZWVIb3N0UHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7Citj
bGFzcyBMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdFByb3h5QmFzZSB7
CiBwdWJsaWM6CiAgICAgTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKICAg
ICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0UHJveHkoKTsKQEAgLTY4LDYgKzc3LDE1IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6
OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciopOwogICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKICNlbmRpZgorICAgIERyYXdpbmdBcmVh
UHJveHkqIGRyYXdpbmdBcmVhUHJveHkoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdBcmVhUHJv
eHk7IH0KKyAgICB2b2lkIHNldERyYXdpbmdBcmVhUHJveHkoRHJhd2luZ0FyZWFQcm94eSogZHJh
d2luZ0FyZWFQcm94eSkgeyBtX2RyYXdpbmdBcmVhUHJveHkgPSBkcmF3aW5nQXJlYVByb3h5OyB9
CisKKyNpZiBQTEFURk9STShRVCkKKyAgICBRU0dOb2RlKiB1cGRhdGVQYWludE5vZGUoUVNHTm9k
ZSopOworICAgIHZvaWQgc2V0UGFpbnRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKSB7IG1fcGFp
bnRDb250ZW50c1NjYWxlID0gc2NhbGU7IH0KKyNlbmRpZgorCisgICAgdHlwZWRlZiB2b2lkIChM
YXllclRyZWVIb3N0UHJveHk6OipNZXRob2RQdHIpKCk7CiAKIHByb3RlY3RlZDoKICAgICBQYXNz
T3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUxheWVyKFdlYkxheWVySUQpOwpA
QCAtOTIsNyArMTEwLDEwIEBAIHByb3RlY3RlZDoKICAgICBNZXNzYWdlUXVldWU8TGF5ZXJUcmVl
TWVzc2FnZVRvUmVuZGVyZXI+IG1fbWVzc2FnZXNUb1JlbmRlcmVyOwogICAgIHZvaWQgcHVzaFVw
ZGF0ZVRvUXVldWUoUGFzc093blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4pOwogCisg
ICAgdm9pZCBpbnZva2VNZXRob2RPbk1haW5UaHJlYWQoTWV0aG9kUHRyKTsKKwogI2lmIFVTRShU
RVhUVVJFX01BUFBFUikKKyAgICB2b2lkIHJlcXVlc3RQdXJnZUJhY2tpbmdTdG9yZXMoKTsKICAg
ICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwogI2VuZGlm
CiAKQEAgLTExNyw3ICsxMzgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmbHVzaExheWVyQ2hh
bmdlcygpOwogICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CiAgICAgdm9pZCBlbnN1cmVMYXll
cihXZWJMYXllcklEKTsKLQogI2VuZGlmCiAKICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcj4gbV9yb290TGF5ZXI7CkBAIC0xMjYsMTEgKzE0NiwxNyBAQCBwcm90ZWN0ZWQ6CiAjaWYg
UExBVEZPUk0oUVQpCiAgICAgdm9pZCBkaWRGaXJlVmlld3BvcnRVcGRhdGVUaW1lcihXZWJDb3Jl
OjpUaW1lcjxMYXllclRyZWVIb3N0UHJveHk+Kik7CiAgICAgV2ViQ29yZTo6VGltZXI8TGF5ZXJU
cmVlSG9zdFByb3h5PiBtX3ZpZXdwb3J0VXBkYXRlVGltZXI7CisgICAgZmxvYXQgbV9wYWludENv
bnRlbnRzU2NhbGU7CiAjZW5kaWYKIAogICAgIExheWVyTWFwIG1fbGF5ZXJzOwogICAgIFdlYkxh
eWVySUQgbV9yb290TGF5ZXJJRDsKICAgICBpbnQgbV9pZDsKKyNpZm5kZWYgTkRFQlVHCisgICAg
Ym9vbCBtX2luUGFpbnRpbmc7CisjZW5kaWYKKworICAgIGZyaWVuZCBjbGFzcyBRdExheWVyVHJl
ZVNjZW5lR3JhcGhOb2RlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKaW5kZXggZjlhYmY0OS4uNzFkZDA2NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFBy
b3h5UXQuY3BwCkBAIC0yMiw3ICsyMiw5IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgogCisjaW5jbHVkZSAiQXJndW1l
bnRzLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUXRM
YXllclRyZWVTY2VuZUdyYXBoTm9kZS5oIgogI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKICNpbmNs
dWRlICJNZXNzYWdlSUQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKQEAgLTE0NSw2
ICsxNDcsMzggQEAgY2xhc3MgU2V0Um9vdExheWVyTWVzc2FnZQogICAgICAgICA6IHB1YmxpYyBM
YXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcldpdGhEYXRhPFNldFJvb3RMYXllck1lc3NhZ2VEYXRh
LCBMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcjo6U2V0Um9vdExheWVyPiB7IH07CiB9CiAKKwor
CisjaWYgUExBVEZPUk0oUVQpCitzdHJ1Y3QgTGF5ZXJUcmVlSG9zdFByb3h5TWV0aG9kUmVmIHsK
KyAgICBMYXllclRyZWVIb3N0UHJveHlNZXRob2RSZWYoTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXll
clRyZWVIb3N0UHJveHksIExheWVyVHJlZUhvc3RQcm94eTo6TWV0aG9kUHRyIG1ldGhvZCkgOgor
ICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkobGF5ZXJUcmVlSG9zdFByb3h5KQorICAg
ICAgICAsICAgbV9tZXRob2QobWV0aG9kKQorICAgIHsgfQorICAgIFJlZlB0cjxMYXllclRyZWVI
b3N0UHJveHk+IG1fbGF5ZXJUcmVlSG9zdFByb3h5OworICAgIExheWVyVHJlZUhvc3RQcm94eTo6
TWV0aG9kUHRyIG1fbWV0aG9kOworfTsKKworc3RhdGljIHZvaWQgbWFpblRocmVhZE1ldGhvZElu
dm9rZXIodm9pZCogZGF0YSkKK3sKKyAgICBMYXllclRyZWVIb3N0UHJveHlNZXRob2RSZWYqIGNv
bnRleHQgPSBzdGF0aWNfY2FzdDxMYXllclRyZWVIb3N0UHJveHlNZXRob2RSZWYqPihkYXRhKTsK
KyAgICBMYXllclRyZWVIb3N0UHJveHk6Ok1ldGhvZFB0ciBtZXRob2QgPSBjb250ZXh0LT5tX21l
dGhvZDsKKyAgICAoKCooY29udGV4dC0+bV9sYXllclRyZWVIb3N0UHJveHkpKS4qbWV0aG9kKSgp
OworICAgIGRlbGV0ZSBjb250ZXh0OworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6aW52
b2tlTWV0aG9kT25NYWluVGhyZWFkKE1ldGhvZFB0ciBtZXRob2QpCit7CisgICAgTGF5ZXJUcmVl
SG9zdFByb3h5TWV0aG9kUmVmKiBjb250ZXh0ID0gbmV3IExheWVyVHJlZUhvc3RQcm94eU1ldGhv
ZFJlZih0aGlzLCBtZXRob2QpOworICAgIGNhbGxPbk1haW5UaHJlYWQoJm1haW5UaHJlYWRNZXRo
b2RJbnZva2VyLCBjb250ZXh0KTsKK30KKyNlbHNlCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
aW52b2tlTWV0aG9kT25NYWluVGhyZWFkKE1ldGhvZFB0ciBtZXRob2QpCit7CisgICAgKCgqdGhp
cykuKm1ldGhvZCkoKTsKK30KKyNlbmRpZgorCiBQYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IExh
eWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQogewogICAg
IEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KHRoaXMpOwpAQCAtMTU4LDcgKzE5MiwxMSBAQCBMYXllclRyZWVIb3N0UHJveHk6OkxheWVyVHJl
ZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KQogICAgIDogbV9h
bmltYXRpb25UaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZMYXllclRyZWVIb3N0UHJveHk6
OnVwZGF0ZVZpZXdwb3J0KQogICAgICwgbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdpbmdBcmVhUHJv
eHkpCiAgICAgLCBtX3ZpZXdwb3J0VXBkYXRlVGltZXIodGhpcywgJkxheWVyVHJlZUhvc3RQcm94
eTo6ZGlkRmlyZVZpZXdwb3J0VXBkYXRlVGltZXIpCisgICAgLCBtX3BhaW50Q29udGVudHNTY2Fs
ZSgxLjApCiAgICAgLCBtX3Jvb3RMYXllcklEKDApCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9p
blBhaW50aW5nKGZhbHNlKQorI2VuZGlmCiB7CiB9CiAKQEAgLTE3Miw3ICsyMTAsNiBAQCB2b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1hdAogICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQogICAgICAgICBt
X3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOwogCi0gICAgc3luY1Jl
bW90ZUNvbnRlbnQoKTsKICAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9v
dExheWVyKCk7CiAgICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQogICAgICAgICByZXR1cm47CkBA
IC0yMDYsMTEgKzI0MywxMiBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJl
bnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdAogCiB2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6ZGlkRmlyZVZpZXdwb3J0VXBkYXRlVGltZXIoVGltZXI8TGF5ZXJUcmVl
SG9zdFByb3h5PiopCiB7Ci0gICAgdXBkYXRlVmlld3BvcnQoKTsKKyAgICBpbnZva2VNZXRob2RP
bk1haW5UaHJlYWQoJldlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCk7
CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiB7CisgICAg
QVNTRVJUKCFtX2luUGFpbnRpbmcpOwogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlVmll
d3BvcnQoKTsKIH0KIApAQCAtNTE0LDcgKzU1Miw2IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpzeW5jUmVtb3RlQ29udGVudCgpCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cHVzaFVwZGF0
ZVRvUXVldWUoUGFzc093blB0cjxMYXllclRyZWVNZXNzYWdlVG9SZW5kZXJlcj4gbWVzc2FnZSkK
IHsKICAgICBtX21lc3NhZ2VzVG9SZW5kZXJlci5hcHBlbmQobWVzc2FnZSk7Ci0gICAgdXBkYXRl
Vmlld3BvcnQoKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JM
YXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvKQpAQCAtNTk0LDYgKzYzMSw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpk
ZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCiAKIHZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0
IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCiB7CisgICAgQVNTRVJUKCFtX2luUGFpbnRp
bmcpOwogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50UmVjdFRyYWplY3RvcnlWZWN0
b3IodHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQo
KSk7CiB9CiAKQEAgLTYwMSw2ICs2MzksNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdEFuZFNjYWxlKGNvbnN0IEludFJlY3QmIHJlY3QsIGZsbwogewog
ICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7CiAgICAgbV9jb250ZW50c1NjYWxlID0g
c2NhbGU7CisgICAgQVNTRVJUKCFtX2luUGFpbnRpbmcpOwogICAgIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlNldFZp
c2libGVDb250ZW50UmVjdEFuZFNjYWxlKHJlY3QsIHNjYWxlKSwgbV9kcmF3aW5nQXJlYVByb3h5
LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KIApAQCAtNjE1LDggKzY1NCwyOSBAQCB2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6cHVyZ2VHTFJlc291cmNlcygpCiAKICAgICBtX3RleHR1cmVNYXBwZXIu
Y2xlYXIoKTsKIAorICAgIGludm9rZU1ldGhvZE9uTWFpblRocmVhZCgmV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OnJlcXVlc3RQdXJnZUJhY2tpbmdTdG9yZXMpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6cmVxdWVzdFB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgaWYgKCFt
X2RyYXdpbmdBcmVhUHJveHkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fZHJhd2luZ0FyZWFQ
cm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlB1
cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkp
OwogfQogCitRU0dOb2RlKiBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVBhaW50Tm9kZShRU0dO
b2RlKiBvbGROb2RlKQoreworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3Rl
eHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworCisgICAgc3luY1JlbW90
ZUNvbnRlbnQoKTsKKworICAgIGlmICghb2xkTm9kZSkKKyAgICAgICAgcmV0dXJuIG5ldyBRdExh
eWVyVHJlZVNjZW5lR3JhcGhOb2RlKHRoaXMpOworCisgICAgcmV0dXJuIG9sZE5vZGU7Cit9CisK
IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0TGF5
ZXJUcmVlU2NlbmVHcmFwaE5vZGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
TGF5ZXJUcmVlU2NlbmVHcmFwaE5vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmYzYWNhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRMYXllclRyZWVTY2VuZUdyYXBoTm9kZS5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworLy8gI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNsdWRlICJRdExheWVyVHJlZVNjZW5lR3JhcGhOb2Rl
LmgiCisKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKworI2luY2x1ZGUgPFF0UXVp
Y2svUVNHR2VvbWV0cnlOb2RlPgorI2luY2x1ZGUgPFF0UXVpY2svUVNHTWF0ZXJpYWw+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitRdExheWVyVHJlZVNjZW5lR3JhcGhOb2RlOjpRdExheWVyVHJl
ZVNjZW5lR3JhcGhOb2RlKExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KSA6
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5KGxheWVyVHJlZUhvc3RQcm94eSkKKyAgICAs
ICAgbV9tYXRlcmlhbCh0aGlzKQorICAgICwgICBtX2dlb21ldHJ5KFFTR0dlb21ldHJ5OjpkZWZh
dWx0QXR0cmlidXRlc19Qb2ludDJEKCksIDQpCit7CisgICAgc2V0R2VvbWV0cnkoJm1fZ2VvbWV0
cnkpOworICAgIHNldE1hdGVyaWFsKCZtX21hdGVyaWFsKTsKK30KKworUXRMYXllclRyZWVTY2Vu
ZUdyYXBoTm9kZTo6flF0TGF5ZXJUcmVlU2NlbmVHcmFwaE5vZGUoKQoreworICAgIG1fbGF5ZXJU
cmVlSG9zdFByb3h5LT5wdXJnZUdMUmVzb3VyY2VzKCk7Cit9CisKK3ZvaWQgUXRMYXllclRyZWVT
Y2VuZUdyYXBoTm9kZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKQoreworI2lmbmRlZiBOREVC
VUcKKyAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+bV9pblBhaW50aW5nID0gdHJ1ZTsKKyNlbmRp
ZgorICAgIFFUcmFuc2Zvcm0gdHJhbnNmb3JtOworICAgIGlmIChtYXRyaXgoKSkKKyAgICAgICAg
dHJhbnNmb3JtID0gbWF0cml4KCktPnRvVHJhbnNmb3JtKCk7CisgICAgcXJlYWwgc2NhbGUgPSBt
X2xheWVyVHJlZUhvc3RQcm94eS0+bV9wYWludENvbnRlbnRzU2NhbGU7CisgICAgdHJhbnNmb3Jt
LnNjYWxlKHNjYWxlLCBzY2FsZSk7CisgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnBhaW50VG9D
dXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybSwgaW5oZXJpdGVkT3BhY2l0eSgpKTsKKyNpZm5kZWYg
TkRFQlVHCisgICAgbV9sYXllclRyZWVIb3N0UHJveHktPm1faW5QYWludGluZyA9IGZhbHNlOwor
I2VuZGlmCit9CisKKy8vIEZJWE1FOiB0ZW1wb3JhcnkgdW50aWwgUXQgU2NlbmVncmFwaCB3aWxs
IHN1cHBvcnQgY3VzdG9tIHBhaW50aW5nLgorY2hhciBjb25zdCogY29uc3QqIFF0TGF5ZXJUcmVl
U2NlbmVHcmFwaE5vZGU6OlByb3h5TWF0ZXJpYWxTaGFkZXI6OmF0dHJpYnV0ZU5hbWVzKCkgY29u
c3QKK3sKKyAgICBzdGF0aWMgY2hhciBjb25zdCogY29uc3QgYXR0cltdID0geyAidmVydGV4Iiwg
MCB9OworICAgIHJldHVybiBhdHRyOworfQorCisvLyB2ZXJ0ZXhTaGFkZXIgYW5kIGZyYWdtZW50
U2hhZGVyIGFyZSBuby1vcCBzaGFkZXJzLgorLy8gQWxsIHJlYWwgcGFpbnRpbmcgaXMgZ29uZSBi
eSBUZXh0dXJlTWFwcGVyIHRocm91Z2ggTGF5ZXJUcmVlSG9zdFByb3h5LgorY29uc3QgY2hhciog
UXRMYXllclRyZWVTY2VuZUdyYXBoTm9kZTo6UHJveHlNYXRlcmlhbFNoYWRlcjo6dmVydGV4U2hh
ZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gImF0dHJpYnV0ZSBoaWdocCB2ZWM0IHZlcnRleDsg
XG4iCisgICAgICAgICAgICJ2b2lkIG1haW4oKSB7IGdsX1Bvc2l0aW9uID0gdmVydGV4OyB9IjsK
K30KKworY29uc3QgY2hhciogUXRMYXllclRyZWVTY2VuZUdyYXBoTm9kZTo6UHJveHlNYXRlcmlh
bFNoYWRlcjo6ZnJhZ21lbnRTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiAidm9pZCBtYWlu
KCkgeyBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDAuMCk7IH0iOworfQorCit2
b2lkIFF0TGF5ZXJUcmVlU2NlbmVHcmFwaE5vZGU6OlByb3h5TWF0ZXJpYWxTaGFkZXI6OnVwZGF0
ZVN0YXRlKGNvbnN0IFJlbmRlclN0YXRlJiBzdGF0ZSwgUVNHTWF0ZXJpYWwqIG5ld01hdGVyaWFs
LCBRU0dNYXRlcmlhbCogb2xkTWF0ZXJpYWwpCit7CisgICAgaWYgKCFuZXdNYXRlcmlhbCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUXRMYXllclRyZWVTY2VuZUdyYXBoTm9kZSogbm9kZSA9IHN0
YXRpY19jYXN0PFByb3h5TWF0ZXJpYWwqPihuZXdNYXRlcmlhbCktPm1fbm9kZTsKKyAgICAvLyBG
SVhNRTogTm9ybWFsbHkgd2Ugd291bGRuJ3QgcGFpbnQgaW5zaWRlIFFTR01hdGVyaWFsU2hhZGVy
Ojp1cGRhdGVTdGF0ZSwKKyAgICAvLyBidXQgdGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIHVudGls
IGN1c3RvbSBwYWludCBub2RlcyBhcmUgYXZhaWxhYmxlLgorICAgIGlmIChub2RlKQorICAgICAg
ICBub2RlLT5wYWludFRvQ3VycmVudEdMQ29udGV4dCgpOworfQorCitRU0dNYXRlcmlhbFR5cGUq
IFF0TGF5ZXJUcmVlU2NlbmVHcmFwaE5vZGU6OlByb3h5TWF0ZXJpYWw6OnR5cGUoKSBjb25zdAor
eworICAgIHN0YXRpYyBRU0dNYXRlcmlhbFR5cGUgdHlwZTsKKyAgICByZXR1cm4gJnR5cGU7Cit9
CisKK1FTR01hdGVyaWFsU2hhZGVyKiBRdExheWVyVHJlZVNjZW5lR3JhcGhOb2RlOjpQcm94eU1h
dGVyaWFsOjpjcmVhdGVTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiBuZXcgUHJveHlNYXRl
cmlhbFNoYWRlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKy8vICNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRMYXllclRyZWVTY2VuZUdyYXBoTm9kZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0TGF5ZXJUcmVlU2NlbmVHcmFwaE5vZGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5iOGMwNGIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0TGF5ZXJUcmVlU2NlbmVHcmFwaE5vZGUuaApAQCAtMCwwICsx
LDY0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFF0TGF5ZXJUcmVlU2NlbmVHcmFw
aE5vZGVfaAorI2RlZmluZSBRdExheWVyVHJlZVNjZW5lR3JhcGhOb2RlX2gKKworI2luY2x1ZGUg
PFF0UXVpY2svUVNHR2VvbWV0cnlOb2RlPgorI2luY2x1ZGUgPFF0UXVpY2svUVNHTWF0ZXJpYWw+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
TGF5ZXJUcmVlSG9zdFByb3h5OworY2xhc3MgUXRMYXllclRyZWVTY2VuZUdyYXBoTm9kZSA6IHB1
YmxpYyBRU0dHZW9tZXRyeU5vZGUgeworcHVibGljOgorICAgIFF0TGF5ZXJUcmVlU2NlbmVHcmFw
aE5vZGUoTGF5ZXJUcmVlSG9zdFByb3h5Kik7CisgICAgflF0TGF5ZXJUcmVlU2NlbmVHcmFwaE5v
ZGUoKTsKKworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoKTsKKworcHJpdmF0ZToK
KworICAgIHN0cnVjdCBQcm94eU1hdGVyaWFsU2hhZGVyIDogcHVibGljIFFTR01hdGVyaWFsU2hh
ZGVyIHsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IFJlbmRlclN0YXRl
JiwgUVNHTWF0ZXJpYWwqLCBRU0dNYXRlcmlhbCopOworICAgICAgICB2aXJ0dWFsIGNoYXIgY29u
c3QqIGNvbnN0KiBhdHRyaWJ1dGVOYW1lcygpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgY29u
c3QgY2hhciogdmVydGV4U2hhZGVyKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogZnJhZ21lbnRTaGFkZXIoKSBjb25zdDsKKyAgICB9OworCisgICAgc3RydWN0IFByb3h5TWF0
ZXJpYWwgOiBwdWJsaWMgUVNHTWF0ZXJpYWwgeworICAgICAgICBQcm94eU1hdGVyaWFsKFF0TGF5
ZXJUcmVlU2NlbmVHcmFwaE5vZGUqIG5vZGUpIDogbV9ub2RlKG5vZGUpIHsgfQorCisgICAgICAg
IFFTR01hdGVyaWFsVHlwZSogdHlwZSgpIGNvbnN0OworICAgICAgICBRU0dNYXRlcmlhbFNoYWRl
ciogY3JlYXRlU2hhZGVyKCkgY29uc3Q7CisKKyAgICAgICAgUXRMYXllclRyZWVTY2VuZUdyYXBo
Tm9kZSogbV9ub2RlOworICAgIH07CisKKyAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBt
X2xheWVyVHJlZUhvc3RQcm94eTsKKyAgICBQcm94eU1hdGVyaWFsIG1fbWF0ZXJpYWw7CisgICAg
UVNHR2VvbWV0cnkgbV9nZW9tZXRyeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gUXRMYXllclRyZWVTY2VuZUdyYXBoTm9kZV9oCisKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5MDY3OWUzLi4zMDQyYjk2IDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTItMDEtMTkgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0
Y2hlc2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVk
IHJlbmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW1vdmVkIGFkZGluZyBvZiBRTUxfTk9fVEhSRUFERURfUkVOREVSRVIgdG8gZW52
aXJvbm1lbnQgdmFyaWFibGVzLgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvbWFpbi5jcHA6
CisgICAgICAgIChtYWluKToKKwogMjAxMi0wMS0xOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBTb21lIHBlcmYgdGVzdHMgdGltZSBvdXQgd2hlbiByYW4gYnkg
cnVuLXBlcmYtdGVzdHMKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L21haW4uY3Bw
IGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAKaW5kZXggZmVhZTE0YS4uMzY2Mzc3MyAx
MDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAKKysrIGIvVG9vbHMvTWlu
aUJyb3dzZXIvcXQvbWFpbi5jcHAKQEAgLTM5LDkgKzM5LDYgQEAKIAogaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogewotICAgIC8vIEZJWE1FOiBXZSBtdXN0IGFkZCBzdXBwb3J0IGZv
ciB0aGUgdGhyZWFkZWQgcmVuZGVyaW5nIGFzIGl0IGlzIHRoZSBkZWZhdWx0LgotICAgIHFwdXRl
bnYoIlFNTF9OT19USFJFQURFRF9SRU5ERVJFUiIsIFFCeXRlQXJyYXkoIjEiKSk7Ci0KICAgICBN
aW5pQnJvd3NlckFwcGxpY2F0aW9uIGFwcChhcmdjLCBhcmd2KTsKIAogICAgIGlmIChhcHAuaXNS
b2JvdGl6ZWQoKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130040</attachid>
            <date>2012-03-04 18:13:06 -0800</date>
            <delta_ts>2012-03-05 06:39:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76661-20120304181305.patch</filename>
            <type>text/plain</type>
            <size>26600</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDg3YzRlMTY4MTI2YzY2
YmJlN2IxZWRlMDVjZmJhZWRhYWU3YjE2Yy4uZDRmOWNkMDAyMjRlOTBmMWY5OTM1YWNiMzcwZGFj
NjQ3YWQ3OThhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAzLTA0ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBb
V0syXSBTdXBwb3J0IHRocmVhZGVkIHJlbmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NjEKKworICAgICAgICBNYWRlIHRoZSBh
cHByb3ByaWF0ZSBmaXhlcyBpbiB0aGUgVUkgcHJvY2VzcyBjb2RlIHRvIG1ha2UgcmVuZGVyaW5n
IHRocmVhZC1zYWZlLgorICAgICAgICAtIFNlcGFyYXRlZCB0aGUgc2NlbmVncmFwaCBub2RlIGNv
ZGUgdG8gUXRTR1dlYlBhZ2VOb2RlLiBRdFNHV2ViUGFnZU5vZGUgaGFzIGRpcmVjdCBhY2Nlc3MK
KyAgICAgICAgICB0byBMYXllclRyZWVIb3N0UHJveHkuCisKKyAgICAgICAgLSBFYWNoIGZ1bmN0
aW9uIGluIExheWVyVHJlZUhvc3RQcm94eSBjYW4gYmUgZWl0aGVyIGNhbGxlZCBmcm9tIHRoZSBt
YWluIHByb2Nlc3MgKGhhbmRsaW5nCisgICAgICAgICAgbWVzc2FnZXMgZnJvbSB0aGUgd2ViIHBy
b2Nlc3MpLCBvciBmcm9tIHRoZSByZW5kZXJlciBwcm9jZXNzIChoYW5kbGluZyB0aGUgR0wgY29u
dGV4dCkuCisgICAgICAgICAgVGhlIHJlbmRlci1xdWV1ZSBpcyBsb2NrZWQgd2l0aCBhIG11dGV4
LCBhbmQgbWVzc2FnZXMgYmFjayB0byB0aGUgd2ViIHByb2Nlc3MgYXJlIHNlbnQKKyAgICAgICAg
ICB2aWEgY2FsbE9uTWFpblRocmVhZC4KKworICAgICAgICAtIExheWVyVHJlZUhvc3RQcm94eSBp
cyBub3cgVGhyZWFkU2FmZVJlZkNvdW50ZWQuIFRoYXQgaXMgZG9uZSB0byBtYWtlIHN1cmUgdGhh
dCB0aGUgR0wKKyAgICAgICAgICByZXNvdXJjZXMgaXQgY3JlYXRlcyBhcmUgb25seSBmcmVlZCB3
aGVuIHRoZSBRdFNHV2ViUGFnZU5vZGUgaXMgZGVsZXRlZCwgd2hpY2ggY2FuIGJlCisgICAgICAg
ICAgYmVmb3JlIG9yIGFmdGVyIHRoZSBvd25pbmcgRHJhd2luZ0FyZWFQcm94eSBpcyBkZWxldGVk
LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgY2xhc3MgaXMKKyAgICAgICAgICBkZWxldGVkIG9ubHkg
YWZ0ZXIgaXRzIEdMIHJlc291cmNlcyBhcmUgZnJlZWQsIG90aGVyd2lzZSB0aG9zZSByZXNvdXJj
ZXMgbWF5IGxlYWsuCisKKyAgICAgICAgQmFzZWQgb24gYSBwcmV2aW91cyBwYXRjaCBieSBWaWF0
Y2hlc2xhdiBPc3RhcGVua28uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUYXJnZXQucHJpOiBBZGRlZCBuZXcgZmlsZXMuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDogTW92ZWQgUXRTR1dlYlBhZ2VOb2RlIG91
dC4KKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6IENhbGwgUXRTR1dl
YlBhZ2VOb2RlCisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSk6IENh
bGwgUXRTR1dlYlBhZ2VOb2RlCisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6ZGlkRGVs
ZXRlU0dXZWJQYWdlTm9kZSk6IE92ZXJyaWRlIFF0U0dXZWJQQWdlTm9kZTo6Q2xpZW50CisgICAg
ICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6flFRdWlja1dlYlBhZ2VQcml2YXRlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmg6CisgICAgICAgIChRUXVp
Y2tXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHku
aDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6
OmxheWVyVHJlZUhvc3RQcm94eSk6IE1hZGUgTGF5ZXJUcmVlSG9zdFByb3h5IHJlZi1jb3VudGVk
LgorICAgICAgICAoRHJhd2luZ0FyZWFQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdp
bmdBcmVhUHJveHlJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUlt
cGw6OkRyYXdpbmdBcmVhUHJveHlJbXBsKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQ
cm94eUltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKExheWVyVHJl
ZUhvc3RQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVu
dEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoTWFpblRocmVhZEd1YXJk
ZWRJbnZva2VyKToKKyAgICAgICAgICAgIEEgY2xhc3MgdGhhdCBhbGxvd3MgaW52b2tpbmcgZnVu
Y3Rpb25zIGluIHRoZSBtYWluIHRocmVhZCwgd2hpbGUgZ3VhcmRpbmcgYSByZWYtCisgICAgICAg
ICAgICBjb3VudGVkIG9iamVjdC4KKworICAgICAgICAoV2ViS2l0OjpNYWluVGhyZWFkR3VhcmRl
ZEludm9rZXI6OmNhbGwpOgorICAgICAgICAoV2ViS2l0OjpNYWluVGhyZWFkR3VhcmRlZEludm9r
ZXI6Ok1haW5UaHJlYWRHdWFyZGVkSW52b2tlcik6CisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJl
YWRHdWFyZGVkSW52b2tlcjo6aW52b2tlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFByb3h5OjpzeW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQ
cm94eTo6dXBkYXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJv
eHk6OmRldGFjaERyYXdpbmdBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFByb3h5OjpzZXRTaG91bGRSZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHk6OmZsdXNoTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHk6OnN5bmNSZW1vdGVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpkaXNwYXRjaFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZUhvc3RQcm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlR0xSZXNvdXJjZXMpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9xdC9RdFNHV2ViUGFnZU5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvUXRTR1dlYlBhZ2VOb2RlLmg6IEFkZGVkLgorCiAyMDEyLTAzLTAzICBObydhbSBS
b3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBVc2Ug
dGhlIGV4aXN0aW5nIGluaGVyaXRlZE9wYWNpdHkvbWF0cml4IHByb3BlcnRpZXMgb2YgUVNHTm9k
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQy
L1RhcmdldC5wcmkKaW5kZXggNGJkYjNjOWQ5ZWRjYWQ0ZDI1Zjk0MWQ0NTY3OWQ3OTUzNTJjY2Mz
YS4uZGQwYjkyMjMzYjMwYjY5MTNmNmZmNWNmYzg4YjRjZmYwNjAzZWI2MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
CkBAIC0yNjEsNiArMjYxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2Vz
dHVyZVJlY29nbml6ZXIuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6
ZXIuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5oIFwKKyAg
ICBVSVByb2Nlc3MvcXQvUXRTR1dlYlBhZ2VOb2RlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFRh
cEdlc3R1cmVSZWNvZ25pemVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmggXAog
ICAgIFVJUHJvY2Vzcy9xdC9RdERpYWxvZ1J1bm5lci5oIFwKQEAgLTU5Miw2ICs1OTMsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9R
dFNHV2ViUGFnZU5vZGUuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2du
aXplci5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0RGlhbG9nUnVubmVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAppbmRleCBkNThmZWZlYzg2OTIzY2UzMTc2MzRh
YTg4MzI5OWJkYzllMWNjYjJiLi40Nzc4ZGM4MzUxMGNkYzEwOTA5NTk5YTQ2OWI2NjcxMzhkOGRl
MmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
cGFnZS5jcHAKQEAgLTIyLDE0ICsyMiwxMSBAQAogI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5o
IgogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAiUXRTR1dlYlBh
Z2VOb2RlLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3BfcC5oIgog
I2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgotI2luY2x1ZGUgPFF0UXVpY2svUVF1aWNrQ2Fu
dmFzPgotI2luY2x1ZGUgPFF0UXVpY2svUVNHR2VvbWV0cnlOb2RlPgotI2luY2x1ZGUgPFF0UXVp
Y2svUVNHTWF0ZXJpYWw+Ci0jaW5jbHVkZSA8cHJpdmF0ZS9xc2dyZW5kZXJub2RlX3AuaD4KIAog
UVF1aWNrV2ViUGFnZTo6UVF1aWNrV2ViUGFnZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydEl0ZW0p
CiAgICAgOiBRUXVpY2tJdGVtKHZpZXdwb3J0SXRlbSkKQEAgLTc3LDUwICs3NCw2IEBAIHZvaWQg
UVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50KFFQYWludGVyKiBwYWludGVyKQogICAgICAgICB3
ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPnBhaW50TGF5ZXJUcmVlKHBhaW50ZXIpOwogfQog
Ci12b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25z
dCBRVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgaWYgKCFxLT5p
c1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVJlY3RGIGNsaXBSZWN0ID0gdmll
d3BvcnRJdGVtLT5tYXBSZWN0VG9TY2VuZSh2aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpKTsK
LQotICAgIGlmICghY2xpcFJlY3QuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBE
cmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEo
KTsKLSAgICBpZiAoIWRyYXdpbmdBcmVhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkcmF3aW5n
QXJlYS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoUVRyYW5zZm9ybSh0cmFuc2Zvcm0pLnNjYWxl
KGNvbnRlbnRzU2NhbGUsIGNvbnRlbnRzU2NhbGUpLCBvcGFjaXR5LCBjbGlwUmVjdCk7Ci19Ci0K
LXN0cnVjdCBQYWdlUHJveHlOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgewotICAgIFBhZ2VQ
cm94eU5vZGUoUVF1aWNrV2ViUGFnZVByaXZhdGUqIHBhZ2UpCi0gICAgICAgIDogbV9wYWdlUHJp
dmF0ZShwYWdlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFN0YXRlRmxhZ3MgY2hhbmdl
ZFN0YXRlcygpCi0gICAgewotICAgICAgICByZXR1cm4gU3RhdGVGbGFncyhTdGVuY2lsU3RhdGUp
IHwgQ29sb3JTdGF0ZSB8IEJsZW5kU3RhdGU7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJl
bmRlcihjb25zdCBSZW5kZXJTdGF0ZSYpCi0gICAgewotICAgICAgICBpZiAoIW1fcGFnZVByaXZh
dGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0g
bWF0cml4KCkgPyBtYXRyaXgoKS0+dG9UcmFuc2Zvcm0oKSA6IFFUcmFuc2Zvcm0oKTsKLSAgICAg
ICAgbV9wYWdlUHJpdmF0ZS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtLCBpbmhl
cml0ZWRPcGFjaXR5KCkpOwotICAgIH0KLQotICAgIH5QYWdlUHJveHlOb2RlKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX3BhZ2VQcml2YXRlKQotICAgICAgICAgICAgbV9wYWdlUHJpdmF0ZS0+cmVz
ZXRQYWludE5vZGUoKTsKLSAgICB9Ci0KLSAgICBRUXVpY2tXZWJQYWdlUHJpdmF0ZSogbV9wYWdl
UHJpdmF0ZTsKLX07CiAKIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShR
U0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikKIHsKQEAgLTEzMCwxMyArODMs
MTYgQEAgUVNHTm9kZSogUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9s
ZE5vZGUsIFVwZGF0ZVBhaW50Tm9kZURhdGEqKQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBQYWdlUHJveHlOb2RlKiBwcm94eU5vZGUgPSBzdGF0aWNfY2FzdDxQYWdlUHJveHlOb2Rl
Kj4ob2xkTm9kZSk7Ci0gICAgaWYgKCFwcm94eU5vZGUpIHsKLSAgICAgICAgcHJveHlOb2RlID0g
bmV3IFBhZ2VQcm94eU5vZGUoZCk7Ci0gICAgICAgIGQtPm1fcGFpbnROb2RlID0gcHJveHlOb2Rl
OworICAgIFF0U0dXZWJQYWdlTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PFF0U0dXZWJQYWdlTm9k
ZSo+KG9sZE5vZGUpOworICAgIGlmIChub2RlKQorICAgICAgICByZXR1cm4gbm9kZTsKKyAgICBu
b2RlID0gbmV3IFF0U0dXZWJQYWdlTm9kZShkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkt
PmxheWVyVHJlZUhvc3RQcm94eSgpLCBkKTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxv
Y2soZC0+bV9wYWludE5vZGVBY2Nlc3NNdXRleCk7CisgICAgICAgIGQtPm1fcGFpbnROb2RlID0g
bm9kZTsKICAgICB9Ci0KLSAgICByZXR1cm4gcHJveHlOb2RlOworICAgIGQtPnVwZGF0ZVNpemUo
KTsKKyAgICByZXR1cm4gbm9kZTsKIH0KIAogUXRXZWJQYWdlRXZlbnRIYW5kbGVyKiBRUXVpY2tX
ZWJQYWdlOjpldmVudEhhbmRsZXIoKSBjb25zdApAQCAtMTg4LDIwICsxNDQsMjMgQEAgdm9pZCBR
UXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSgpCiAgICAgUVNpemVGIHNjYWxlZFNpemUg
PSBjb250ZW50c1NpemUgKiBjb250ZW50c1NjYWxlOwogICAgIHEtPnNldFNpemUoc2NhbGVkU2l6
ZSk7CiAgICAgdmlld3BvcnRJdGVtLT51cGRhdGVDb250ZW50c1NpemUoc2NhbGVkU2l6ZSk7Cisg
ICAgUVJlY3RGIGNsaXBSZWN0ID0gdmlld3BvcnRJdGVtLT5tYXBSZWN0VG9TY2VuZSh2aWV3cG9y
dEl0ZW0tPmJvdW5kaW5nUmVjdCgpKTsKKworICAgIE11dGV4TG9ja2VyIGxvY2sobV9wYWludE5v
ZGVBY2Nlc3NNdXRleCk7CisgICAgaWYgKCFtX3BhaW50Tm9kZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fcGFpbnROb2RlLT5zZXRDbGlwUmVjdChjbGlwUmVjdCk7CisgICAgbV9wYWludE5vZGUt
PnNldENvbnRlbnRzU2NhbGUoY29udGVudHNTY2FsZSk7CiB9CiAKLXZvaWQgUVF1aWNrV2ViUGFn
ZVByaXZhdGU6OnJlc2V0UGFpbnROb2RlKCkKK3ZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OmRp
ZERlbGV0ZVNHV2ViUGFnZU5vZGUoKQogeworICAgIE11dGV4TG9ja2VyIGxvY2sobV9wYWludE5v
ZGVBY2Nlc3NNdXRleCk7CiAgICAgbV9wYWludE5vZGUgPSAwOwotICAgIERyYXdpbmdBcmVhUHJv
eHkqIGRyYXdpbmdBcmVhID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwotICAgIGlmIChk
cmF3aW5nQXJlYSAmJiBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCkpCi0gICAgICAg
IGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKS0+cHVyZ2VHTFJlc291cmNlcygpOwog
fQogCiBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6flFRdWlja1dlYlBhZ2VQcml2YXRlKCkKIHsKLSAg
ICBpZiAobV9wYWludE5vZGUpCi0gICAgICAgIHN0YXRpY19jYXN0PFBhZ2VQcm94eU5vZGUqPiht
X3BhaW50Tm9kZSktPm1fcGFnZVByaXZhdGUgPSAwOwogfQogCiAjaW5jbHVkZSAibW9jX3FxdWlj
a3dlYnBhZ2VfcC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2VfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2VfcF9wLmgKaW5kZXggZmE3ZDY4Y2VkMTVlM2FmN2UxMjFjMThmMTc1ZDcy
MDNjZTI4Y2EwNS4uODU3YWE0MDc2MzBhYzZiNjI5MGU4MmQzMjg5NzM4YWIxMzU0YjBmOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3Bf
cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9w
X3AuaApAQCAtMjEsNiArMjEsNyBAQAogI2lmbmRlZiBxcXVpY2t3ZWJwYWdlX3BfcF9oCiAjZGVm
aW5lIHFxdWlja3dlYnBhZ2VfcF9wX2gKIAorI2luY2x1ZGUgIlF0U0dXZWJQYWdlTm9kZS5oIgog
I2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgogI2luY2x1ZGUgPFFUcmFuc2Zvcm0+CiAKQEAg
LTMxLDE3ICszMiwxNiBAQCBjbGFzcyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU7CiAKIGNs
YXNzIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjsKIAotY2xhc3MgUVF1aWNrV2ViUGFnZVByaXZhdGUg
eworY2xhc3MgUVF1aWNrV2ViUGFnZVByaXZhdGUgOiBwdWJsaWMgUXRTR1dlYlBhZ2VOb2RlOjpD
bGllbnQgewogcHVibGljOgogICAgIFFRdWlja1dlYlBhZ2VQcml2YXRlKFFRdWlja1dlYlBhZ2Uq
IHEsIFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRlbSk7CiAgICAgflFRdWlja1dlYlBhZ2VQcml2
YXRlKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZERlbGV0ZVNHV2ViUGFnZU5vZGUoKTsKIAogICAg
IHZvaWQgaW5pdGlhbGl6ZShXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwogICAgIHZvaWQgc2V0RHJh
d2luZ0FyZWFTaXplKGNvbnN0IFFTaXplJik7CiAKICAgICB2b2lkIHVwZGF0ZVNpemUoKTsKLQot
ICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgUVRyYW5zZm9ybSYsIGZsb2F0
IG9wYWNpdHkpOwogICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqKTsKICAgICB2b2lkIHJlc2V0UGFp
bnROb2RlKCk7CiAKQEAgLTUwLDcgKzUwLDggQEAgcHVibGljOgogICAgIFFRdWlja1dlYlZpZXcq
IGNvbnN0IHZpZXdwb3J0SXRlbTsKICAgICBXZWJLaXQ6OldlYlBhZ2VQcm94eSogd2ViUGFnZVBy
b3h5OwogICAgIGJvb2wgcGFpbnRpbmdJc0luaXRpYWxpemVkOwotICAgIFFTR05vZGUqIG1fcGFp
bnROb2RlOworICAgIFF0U0dXZWJQYWdlTm9kZSogbV9wYWludE5vZGU7CisgICAgTXV0ZXggbV9w
YWludE5vZGVBY2Nlc3NNdXRleDsKIAogICAgIFFTaXplRiBjb250ZW50c1NpemU7CiAgICAgcXJl
YWwgY29udGVudHNTY2FsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9E
cmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eS5oCmluZGV4IDkwMDFhY2I2OTI3NWExYzI4NWRjZDQ2ZGRiMGViOTdhYzgzZThkNjAuLjlj
ZDA4M2JkMzliZTdiMDc0NTI3Mjg0YWYzMWUxYjk4YjA2YjVjYWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5j
bHVkZSAiQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbmZvLmgiCisjaW5j
bHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CiAjaW5jbHVkZSA8c3RkaW50Lmg+CkBAIC01
NCw3ICs1NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBj
bGFzcyBMYXllclRyZWVDb250ZXh0OwotY2xhc3MgTGF5ZXJUcmVlSG9zdFByb3h5OwogY2xhc3Mg
VXBkYXRlSW5mbzsKIGNsYXNzIFdlYkxheWVyVHJlZUluZm87CiBjbGFzcyBXZWJMYXllclVwZGF0
ZUluZm87CkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNCYWNr
aW5nU3RvcmVSZWFkeSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgeyB9CiAgICAgdmlydHVhbCB2
b2lkIHBhaW50TGF5ZXJUcmVlKEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQp
IHsgfQotICAgIExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllclRyZWVIb3N0UHJveHkuZ2V0KCk7IH0KKyAgICBQYXNzUmVmUHRyPExh
eWVyVHJlZUhvc3RQcm94eT4gbGF5ZXJUcmVlSG9zdFByb3h5KCkgY29uc3QgeyByZXR1cm4gbV9s
YXllclRyZWVIb3N0UHJveHk7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRz
UmVjdEZvclNjYWxpbmcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVj
dCwgZmxvYXQgc2NhbGUpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNS
ZWN0Rm9yUGFubmluZyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNpYmxlQ29udGVudHNSZWN0
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKSB7IH0KICAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBj
b25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKSB7IH0KQEAgLTExMCw3ICsxMTAsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKIAogI2lmIFVTRShVSV9T
SURFX0NPTVBPU0lUSU5HKQotICAgIE93blB0cjxMYXllclRyZWVIb3N0UHJveHk+IG1fbGF5ZXJU
cmVlSG9zdFByb3h5OworICAgIFJlZlB0cjxMYXllclRyZWVIb3N0UHJveHk+IG1fbGF5ZXJUcmVl
SG9zdFByb3h5OwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcAppbmRleCBjMGQwNDRiZjg5MmEzYWY1MjM1
MjNjNzQzNDU4MzBhMzlhMDViYWJkLi5hNWRjM2E5ZjNlNjQ0YzM1Y2Y5Y2Y3MTEwNGZhOGUzYTU3
ZjY5YWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVBy
b3h5SW1wbC5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgRHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdp
bmdBcmVhUHJveHlJbXBsKFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQogI2lmIFVTRShVSV9T
SURFX0NPTVBPU0lUSU5HKQogICAgIC8vIENvbnN0cnVjdCB0aGUgcHJveHkgZWFybHkgdG8gYWxs
b3cgbWVzc2FnZXMgdG8gYmUgc2VudCB0byB0aGUgd2ViIHByb2Nlc3Mgd2hpbGUgQUMgaXMgZW50
ZXJlZCB0aGVyZS4KICAgICBpZiAod2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5j
ZXMoKS0+Zm9yY2VDb21wb3NpdGluZ01vZGUoKSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJv
eHkgPSBhZG9wdFB0cihuZXcgTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0UHJveHkgPSBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZSh0aGlzKTsKICNl
bmRpZgogfQogCkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6
ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXgKICAg
ICBtX3dlYlBhZ2VQcm94eS0+ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRy
ZWVDb250ZXh0KTsKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKICAgICBpZiAoIW1fbGF5
ZXJUcmVlSG9zdFByb3h5KQotICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eSA9IGFkb3B0UHRy
KG5ldyBMYXllclRyZWVIb3N0UHJveHkodGhpcykpOworICAgICAgICBtX2xheWVyVHJlZUhvc3RQ
cm94eSA9IExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlKHRoaXMpOwogI2VuZGlmCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAppbmRleCBiM2Q1
MTJmMWJhZTY0YmE3YzBkM2UyODU2MWRmN2Y4NTk4MjNhMmZkLi40MjJkZWM4Mjk5N2EyYjRjODkz
MmJkMzU5NTVhMWViZWRjY2MyYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUhvc3RQcm94eS5oCkBAIC0yMyw3ICsyMyw3IEBACiAjaWYgVVNFKFVJX1NJREVfQ09N
UE9TSVRJTkcpCiAKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJEcmF3aW5n
QXJlYVByb3h5LmgiCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlJlZ2lvbi5o
IgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlLmgiCkBAIC0zNiwxNyArMzYsMTcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVy
Lmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKK2NsYXNzIERyYXdpbmdBcmVhUHJveHk7CiBjbGFzcyBMYXllckJhY2tpbmdTdG9y
ZTsKIGNsYXNzIFdlYkxheWVySW5mbzsKIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKIAotY2xh
c3MgTGF5ZXJUcmVlSG9zdFByb3h5IDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGll
bnQgeworY2xhc3MgTGF5ZXJUcmVlSG9zdFByb3h5IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPExheWVyVHJlZUhvc3RQcm94eT4sIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50IHsKIHB1YmxpYzoKLSAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSop
OwogICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOwogICAgIHZvaWQgc3luY0NvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8mKTsKICAgICB2b2lkIGRlbGV0ZUNv
bXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CkBAIC02OCw2ICs2OCw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5l
Y3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwog
ICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVy
VHJlZUhvc3RQcm94eT4gY3JlYXRlKERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgTGF5ZXJUcmVlSG9zdFByb3h5KGRyYXdpbmdBcmVhKSk7IH0KKwog
cHJvdGVjdGVkOgogICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRl
TGF5ZXIoV2ViTGF5ZXJJRCk7CiAKQEAgLTg4LDcgKzkwLDEwIEBAIHByb3RlY3RlZDoKICAgICBm
bG9hdCBtX2NvbnRlbnRzU2NhbGU7CiAKICAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1f
cmVuZGVyUXVldWU7CisgICAgV1RGOjpNdXRleCBtX3JlbmRlclF1ZXVlTXV0ZXg7CiAgICAgdm9p
ZCBkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCBkZXRh
Y2hEcmF3aW5nQXJlYSgpOworICAgIHZvaWQgc2V0U2hvdWxkUmVuZGVyTmV4dEZyYW1lKCk7CiAK
ICNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXI+IG1fdGV4dHVyZU1hcHBlcjsKQEAgLTExMywxMyArMTE4LDE0IEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIGVuc3VyZUxheWVyKFdlYkxheWVySUQpOwogICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsK
ICAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7CisgICAgdm9pZCB1cGRhdGVWaWV3cG9ydE9uTWFp
blRocmVhZCgpOworICAgIExheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5Kik7CiAK
ICAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAgICAgVmVj
dG9yPFdlYkxheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CiAKICAgICBMYXllck1hcCBtX2xheWVy
czsKICAgICBXZWJMYXllcklEIG1fcm9vdExheWVySUQ7Ci0gICAgaW50IG1faWQ7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFBy
b3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eVF0LmNwcAppbmRleCAyMWZiOTk1NGM1NGRjYWFlMzQzN2Q2ODNjMWQ5N2E1MDZkMDgyMmJiLi41
ZGRjZDk5MzEyNjMyNTQ5ODJjNTdmYmMxMDU4ZDJiYjgxNDQ3NzU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKQEAgLTk1
LDYgKzk1LDMyIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29u
dGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0CiAgICAgc3luY0FuaW1hdGlvbnMo
KTsKIH0KIAordGVtcGxhdGU8Y2xhc3MgVD4KK2NsYXNzIE1haW5UaHJlYWRHdWFyZGVkSW52b2tl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgY2FsbChQYXNzUmVmUHRyPFQ+IG9iamVjdFRv
R3VhcmQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQgKCk+JiBmdW5jdGlvbikKKyAgICB7CisgICAgICAg
IE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxUPiogaW52b2tlciA9IG5ldyBNYWluVGhyZWFkR3Vh
cmRlZEludm9rZXI8VD4ob2JqZWN0VG9HdWFyZCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT25N
YWluVGhyZWFkKGludm9rZSwgaW52b2tlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5U
aHJlYWRHdWFyZGVkSW52b2tlcihQYXNzUmVmUHRyPFQ+IG9iamVjdCwgY29uc3QgRnVuY3Rpb248
dm9pZCAoKT4mIG5ld0Z1bmN0aW9uKQorICAgICAgICA6IG9iamVjdFRvR3VhcmQob2JqZWN0KQor
ICAgICAgICAsIGZ1bmN0aW9uKG5ld0Z1bmN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQ
dHI8VD4gb2JqZWN0VG9HdWFyZDsKKyAgICBGdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbjsKKyAg
ICBzdGF0aWMgdm9pZCBpbnZva2Uodm9pZCogZGF0YSkKKyAgICB7CisgICAgICAgIE1haW5UaHJl
YWRHdWFyZGVkSW52b2tlcjxUPiogaW52b2tlciA9IHN0YXRpY19jYXN0PE1haW5UaHJlYWRHdWFy
ZGVkSW52b2tlcjxUPio+KGRhdGEpOworICAgICAgICBpbnZva2VyLT5mdW5jdGlvbigpOworICAg
ICAgICBkZWxldGUgaW52b2tlcjsKKyAgICB9Cit9OworCiB2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6c3luY0FuaW1hdGlvbnMoKQogewogICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0
b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7CkBAIC0xMDIsNyArMTI4LDcgQEAgdm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNBbmltYXRpb25zKCkKIAogICAgIGxheWVyLT5zeW5j
QW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7CiAgICAgaWYgKGxheWVyLT5kZXNjZW5kYW50c09yU2Vs
ZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQotICAgICAgICB1cGRhdGVWaWV3cG9ydCgpOworICAg
ICAgICBNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8TGF5ZXJUcmVlSG9zdFByb3h5Pjo6Y2FsbCh0
aGlzLCBiaW5kKCZMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0LCB0aGlzKSk7CiB9
CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvR3JhcGhpY3NDb250ZXh0KFFQYWlu
dGVyKiBwYWludGVyKQpAQCAtMTI3LDcgKzE1MywxMyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChRUGFpbnRlciogcGFpbnRlcikKIAogdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKIHsKLSAgICBtX2RyYXdpbmdBcmVhUHJv
eHktPnVwZGF0ZVZpZXdwb3J0KCk7CisgICAgaWYgKG1fZHJhd2luZ0FyZWFQcm94eSkKKyAgICAg
ICAgbV9kcmF3aW5nQXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6ZGV0YWNoRHJhd2luZ0FyZWEoKQoreworICAgIG1fZHJhd2luZ0FyZWFQ
cm94eSA9IDA7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0
ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZvKQpAQCAtMTg1LDExICsyMTcsMTQgQEAg
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5
ZXJJbmZvJiBsYXllckluZm8pCiAgICAgICAgIGNhc2UgV2ViS2l0OjpXZWJMYXllckFuaW1hdGlv
bjo6UmVtb3ZlQW5pbWF0aW9uOgogICAgICAgICAgICAgbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihh
bmltLm5hbWUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViS2l0OjpXZWJM
YXllckFuaW1hdGlvbjo6UGF1c2VBbmltYXRpb246CisgICAgICAgIGNhc2UgV2ViS2l0OjpXZWJM
YXllckFuaW1hdGlvbjo6UGF1c2VBbmltYXRpb246IHsKICAgICAgICAgICAgIGRvdWJsZSBvZmZz
ZXQgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSBhbmltLnN0YXJ0VGltZTsKICAgICAgICAgICAgIGxh
eWVyLT5wYXVzZUFuaW1hdGlvbihhbmltLm5hbWUsIG9mZnNldCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBpZiAobGF5ZXJJbmZvLmlzUm9vdExheWVyICYmIG1fcm9vdExh
eWVySUQgIT0gaWQpCkBAIC0yOTUsMTMgKzMzMCwxNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6c3dhcEJ1ZmZlcnMoKQogICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5j
bGVhcigpOwogfQogCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0U2hvdWxkUmVuZGVyTmV4
dEZyYW1lKCkKK3sKKyAgICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMgd2F5
IGZvciB0aGUgc2NyZWVuLCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQg
b25lLgorICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVz
c2FnZXM6OkxheWVyVHJlZUhvc3Q6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJv
eHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Zmx1
c2hMYXllckNoYW5nZXMoKQogewogICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZShGbG9hdFJlY3QoKSk7CiAgICAgc3dhcEJ1ZmZlcnMoKTsKLQotICAgIC8vIFRoZSBwZW5kaW5n
IHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9yIHRoZSBzY3JlZW4sIHRlbGwgdGhlIHdlYiBw
cm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUuCi0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5w
YWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4
dEZyYW1lKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgTWFp
blRocmVhZEd1YXJkZWRJbnZva2VyPExheWVyVHJlZUhvc3RQcm94eT46OmNhbGwodGhpcywgYmlu
ZCgmTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRTaG91bGRSZW5kZXJOZXh0RnJhbWUsIHRoaXMpKTsK
IH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcigpCkBAIC0zMTUs
MTQgKzM1NCwxMyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlUm9vdExheWVyKCkK
IAogICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0
IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCiAgICAgbV9yb290TGF5ZXItPnNldFNpemUoRmxvYXRT
aXplKDEuMCwgMS4wKSk7Ci0gICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4
dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xN
b2RlKTsKICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFRl
eHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OnN5bmNSZW1vdGVDb250ZW50KCkKIHsKICAgICAvLyBXZSBlbnF1ZXVlIG1lc3Nh
Z2VzIGFuZCBleGVjdXRlIHRoZW0gZHVyaW5nIHBhaW50LCBhcyB0aGV5IHJlcXVpcmUgYW4gYWN0
aXZlIEdMIGNvbnRleHQuCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVyUXVldWVNdXRl
eCk7CiAgICAgZW5zdXJlUm9vdExheWVyKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fcmVuZGVyUXVldWUuc2l6ZSgpOyArK2kpCkBAIC0zMzMsNiArMzcxLDcgQEAgdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnN5bmNSZW1vdGVDb250ZW50KCkKIAogdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQog
eworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3JlbmRlclF1ZXVlTXV0ZXgpOwogICAgIG1fcmVu
ZGVyUXVldWUuYXBwZW5kKGZ1bmN0aW9uKTsKICAgICB1cGRhdGVWaWV3cG9ydCgpOwogfQpAQCAt
MzU3LDcgKzM5Niw2IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlRm9yTGF5
ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQpCiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlLCB0aGlzLCBsYXllcklELCB0aWxlSUQpKTsKIH0K
IAotCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJM
YXllcklEIGlkKQogewogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94
eTo6ZGVsZXRlTGF5ZXIsIHRoaXMsIGlkKSk7CkBAIC0zODAsNiArNDE4LDcgQEAgdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKCkKIAogdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OmNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBjb25zdCBXZWJL
aXQ6OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCiB7CisgICAgLy8gRXZlbiB0aG91
Z2ggU2hhcmVhYmxlQml0bWFwIGlzIG5vdCBUaHJlYWRTYWZlUmVmQ291bnRlZCwgd2UgY2FuIHNh
ZmVseSBtb3ZlIGl0IHRvIHRoZSByZW5kZXJlciB0aHJlYWQgYXMgdGhlIG1haW4gdGhyZWFkIHdp
bGwgbm90IHRvdWNoIGl0IGFueW1vcmUuCiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0
bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKICAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlLCB0aGlzLCBrZXksIGJpdG1h
cCkpOwogfQpAQCAtNDAzLDYgKzQ0Miw4IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRW
aXNpYmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhjb25zdCBJbnRSZWN0JiByZWN0LCBmCiAKIHZv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUdMUmVzb3VyY2VzKCkKIHsKKyAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9yZW5kZXJRdWV1ZU11dGV4KTsKKyAgICBtX3JlbmRlclF1ZXVlLmNsZWFy
KCk7CiAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVy
KHJvb3RMYXllcigpKTsKIAogICAgIGlmIChsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFNHV2ViUGFnZU5vZGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0U0dXZWJQYWdlTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODgyMTNlMTc3NWM3ZjFi
ZmMxNjVkNjQ3NDQ5MGZiMDY3OWJjYjdiZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFNHV2ViUGFnZU5vZGUuY3BwCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRTR1dlYlBh
Z2VOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitRdFNHV2ViUGFnZU5vZGU6OlF0U0dX
ZWJQYWdlTm9kZShQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RQcm94eT4gbGF5ZXJUcmVlSG9zdCwg
Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKKyAg
ICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fY29udGVudHNTY2FsZSgxLikKK3sKK30KKwor
UVNHUmVuZGVyTm9kZTo6U3RhdGVGbGFncyBRdFNHV2ViUGFnZU5vZGU6OmNoYW5nZWRTdGF0ZXMo
KQoreworICAgIHJldHVybiBTdGF0ZUZsYWdzKFN0ZW5jaWxTdGF0ZSkgfCBDb2xvclN0YXRlIHwg
QmxlbmRTdGF0ZTsKK30KKwordm9pZCBRdFNHV2ViUGFnZU5vZGU6OnJlbmRlcihjb25zdCBSZW5k
ZXJTdGF0ZSYgc3RhdGUpCit7CisgICAgUVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtYXRyaXgoKSA/
IG1hdHJpeCgpLT50b1RyYW5zZm9ybSgpIDogUVRyYW5zZm9ybSgpOworICAgIGZsb2F0IHNjYWxl
ID0gY29udGVudHNTY2FsZSgpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGFpbnRUb0N1cnJlbnRH
TENvbnRleHQoUVRyYW5zZm9ybSh0cmFuc2Zvcm0pLnNjYWxlKHNjYWxlLCBzY2FsZSksIGluaGVy
aXRlZE9wYWNpdHkoKSwgY2xpcFJlY3QoKSk7Cit9CisKK3ZvaWQgUXRTR1dlYlBhZ2VOb2RlOjpz
ZXRDb250ZW50c1NjYWxlKGZsb2F0IHMpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4
KTsKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzOworfQorCitmbG9hdCBRdFNHV2ViUGFnZU5vZGU6
OmNvbnRlbnRzU2NhbGUoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAg
cmV0dXJuIG1fY29udGVudHNTY2FsZTsKK30KKwordm9pZCBRdFNHV2ViUGFnZU5vZGU6OnNldENs
aXBSZWN0KGNvbnN0IFFSZWN0RiYgcmVjdCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0
ZXgpOworICAgIG1fY2xpcFJlY3QgPSByZWN0OworfQorCitRUmVjdEYgUXRTR1dlYlBhZ2VOb2Rl
OjpjbGlwUmVjdCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1
cm4gbV9jbGlwUmVjdDsKK30KKworUXRTR1dlYlBhZ2VOb2RlOjp+UXRTR1dlYlBhZ2VOb2RlKCkK
K3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnB1
cmdlR0xSZXNvdXJjZXMoKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQt
PmRpZERlbGV0ZVNHV2ViUGFnZU5vZGUoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0U0dXZWJQYWdlTm9kZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0U0dXZWJQYWdlTm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4NzNkMTljN2NjNDg0MjU2
YTczOGJjZDAyMjljODE1YTNlNjQ5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRTR1dlYlBhZ2VOb2RlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgUXRTR1dlYlBhZ2VOb2RlX2gKKyNkZWZpbmUgUXRTR1dlYlBh
Z2VOb2RlX2gKKworI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorI2luY2x1ZGUgPHBy
aXZhdGUvcXNncmVuZGVybm9kZV9wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3Qg
UXRTR1dlYlBhZ2VOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgeworcHVibGljOgorICAgIHN0
cnVjdCBDbGllbnQgeworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRGVsZXRlU0dXZWJQYWdlTm9k
ZSgpIHsgfQorICAgIH07CisKKyAgICBRdFNHV2ViUGFnZU5vZGUoUGFzc1JlZlB0cjxMYXllclRy
ZWVIb3N0UHJveHk+LCBDbGllbnQqKTsKKyAgICB+UXRTR1dlYlBhZ2VOb2RlKCk7CisgICAgdmly
dHVhbCBTdGF0ZUZsYWdzIGNoYW5nZWRTdGF0ZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVy
KGNvbnN0IFJlbmRlclN0YXRlJik7CisgICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsK
KyAgICBmbG9hdCBjb250ZW50c1NjYWxlKCk7CisgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBR
UmVjdEYmKTsKKyAgICBRUmVjdEYgY2xpcFJlY3QoKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8
TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVyVHJlZUhvc3Q7CisgICAgQ2xpZW50KiBtX2NsaWVu
dDsKKyAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7CisgICAgUVJlY3RGIG1fY2xpcFJlY3Q7Cisg
ICAgTXV0ZXggbV9tdXRleDsKK307CisKK30KKyNlbmRpZiAvKiBRdFNHV2ViUGFnZU5vZGVfaCAq
LwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY2
NjNiOTQwYmMwMjZmNTYyYTFhYjRlMzFmNjNmMzU3YTFlNTAxMGEuLjE1NDFiNTc3ZWVkNDNlZjg4
Y2E2YmZlZDAwNmQxNTE3NTBkZDk3OTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0wNCAgTm8nYW0gUm9z
ZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtRdF0gW1dLMl0g
U3VwcG9ydCB0aHJlYWRlZCByZW5kZXJlciBpbiBXSzIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NjYxCisKKyAgICAgICAgUmVtb3ZlIHRoZSBRTUxf
Tk9fVEhSRUFERURfUkVOREVSRVIgZW52aXJvbm1lbnQgdmFyaWFibGUgZnJvbSBNaW5pQnJvd3Nl
ci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1p
bmlCcm93c2VyL3F0L21haW4uY3BwOgorICAgICAgICAobWFpbik6CisKIDIwMTItMDMtMDIgIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGNvbW1pdCBx
dWV1ZSwgcmVtb3ZlIGR1cGxpY2F0ZSBlbnRyeS4KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93
c2VyL3F0L21haW4uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAKaW5kZXggZmVh
ZTE0YWRlZjM4ZjU1YzYwMjBmNGZiZDYxNDQxYmY5OTA1OGUyOC4uMzY2Mzc3M2FiMmQ4MTM3YjU3
MTllNzVmMDA5M2I5MDNjZmMzZTUxYyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQv
bWFpbi5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAKQEAgLTM5LDkgKzM5
LDYgQEAKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIC8vIEZJWE1F
OiBXZSBtdXN0IGFkZCBzdXBwb3J0IGZvciB0aGUgdGhyZWFkZWQgcmVuZGVyaW5nIGFzIGl0IGlz
IHRoZSBkZWZhdWx0LgotICAgIHFwdXRlbnYoIlFNTF9OT19USFJFQURFRF9SRU5ERVJFUiIsIFFC
eXRlQXJyYXkoIjEiKSk7Ci0KICAgICBNaW5pQnJvd3NlckFwcGxpY2F0aW9uIGFwcChhcmdjLCBh
cmd2KTsKIAogICAgIGlmIChhcHAuaXNSb2JvdGl6ZWQoKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130115</attachid>
            <date>2012-03-05 06:39:23 -0800</date>
            <delta_ts>2012-03-05 07:22:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76661-20120305063922.patch</filename>
            <type>text/plain</type>
            <size>26608</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDg3YzRlMTY4MTI2YzY2
YmJlN2IxZWRlMDVjZmJhZWRhYWU3YjE2Yy4uNmY0Y2UxYzhhOTExMDk3OGU5MGJjOTFhYmJmMmFl
OTFjZjM4YmZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAzLTA0ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBb
V0syXSBTdXBwb3J0IHRocmVhZGVkIHJlbmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NjEKKworICAgICAgICBNYWRlIHRoZSBh
cHByb3ByaWF0ZSBmaXhlcyBpbiB0aGUgVUkgcHJvY2VzcyBjb2RlIHRvIG1ha2UgcmVuZGVyaW5n
IHRocmVhZC1zYWZlLgorICAgICAgICAtIFNlcGFyYXRlZCB0aGUgc2NlbmVncmFwaCBub2RlIGNv
ZGUgdG8gUXRTR1dlYlBhZ2VOb2RlLiBRdFNHV2ViUGFnZU5vZGUgaGFzIGRpcmVjdCBhY2Nlc3MK
KyAgICAgICAgICB0byBMYXllclRyZWVIb3N0UHJveHkuCisKKyAgICAgICAgLSBFYWNoIGZ1bmN0
aW9uIGluIExheWVyVHJlZUhvc3RQcm94eSBjYW4gYmUgZWl0aGVyIGNhbGxlZCBmcm9tIHRoZSBt
YWluIHByb2Nlc3MgKGhhbmRsaW5nCisgICAgICAgICAgbWVzc2FnZXMgZnJvbSB0aGUgd2ViIHBy
b2Nlc3MpLCBvciBmcm9tIHRoZSByZW5kZXJlciBwcm9jZXNzIChoYW5kbGluZyB0aGUgR0wgY29u
dGV4dCkuCisgICAgICAgICAgVGhlIHJlbmRlci1xdWV1ZSBpcyBsb2NrZWQgd2l0aCBhIG11dGV4
LCBhbmQgbWVzc2FnZXMgYmFjayB0byB0aGUgd2ViIHByb2Nlc3MgYXJlIHNlbnQKKyAgICAgICAg
ICB2aWEgY2FsbE9uTWFpblRocmVhZC4KKworICAgICAgICAtIExheWVyVHJlZUhvc3RQcm94eSBp
cyBub3cgVGhyZWFkU2FmZVJlZkNvdW50ZWQuIFRoYXQgaXMgZG9uZSB0byBtYWtlIHN1cmUgdGhh
dCB0aGUgR0wKKyAgICAgICAgICByZXNvdXJjZXMgaXQgY3JlYXRlcyBhcmUgb25seSBmcmVlZCB3
aGVuIHRoZSBRdFNHV2ViUGFnZU5vZGUgaXMgZGVsZXRlZCwgd2hpY2ggY2FuIGJlCisgICAgICAg
ICAgYmVmb3JlIG9yIGFmdGVyIHRoZSBvd25pbmcgRHJhd2luZ0FyZWFQcm94eSBpcyBkZWxldGVk
LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgY2xhc3MgaXMKKyAgICAgICAgICBkZWxldGVkIG9ubHkg
YWZ0ZXIgaXRzIEdMIHJlc291cmNlcyBhcmUgZnJlZWQsIG90aGVyd2lzZSB0aG9zZSByZXNvdXJj
ZXMgbWF5IGxlYWsuCisKKyAgICAgICAgQmFzZWQgb24gYSBwYXRjaCBieSBWaWF0Y2hlc2xhdiBP
c3RhcGVua28uCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBUYXJnZXQucHJpOiBBZGRlZCBuZXcgZmlsZXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDogTW92ZWQgUXRTR1dlYlBhZ2VOb2RlIG91dC4KKyAgICAg
ICAgKFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6IENhbGwgUXRTR1dlYlBhZ2VOb2Rl
CisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSk6IENhbGwgUXRTR1dl
YlBhZ2VOb2RlCisgICAgICAgIChRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6ZGlkRGVsZXRlU0dXZWJQ
YWdlTm9kZSk6IE92ZXJyaWRlIFF0U0dXZWJQQWdlTm9kZTo6Q2xpZW50CisgICAgICAgIChRUXVp
Y2tXZWJQYWdlUHJpdmF0ZTo6flFRdWlja1dlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmg6CisgICAgICAgIChRUXVpY2tXZWJQYWdl
UHJpdmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaDoKKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHk6OmxheWVyVHJl
ZUhvc3RQcm94eSk6IE1hZGUgTGF5ZXJUcmVlSG9zdFByb3h5IHJlZi1jb3VudGVkLgorICAgICAg
ICAoRHJhd2luZ0FyZWFQcm94eSk6CisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJv
eHlJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdp
bmdBcmVhUHJveHlJbXBsKToKKyAgICAgICAgKFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eUltcGw6
OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9M
YXllclRyZWVIb3N0UHJveHkuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKExheWVyVHJlZUhvc3RQcm94
eSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4
dCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoTWFpblRocmVhZEd1YXJkZWRJbnZva2Vy
KToKKyAgICAgICAgICAgIEEgY2xhc3MgdGhhdCBhbGxvd3MgaW52b2tpbmcgZnVuY3Rpb25zIGlu
IHRoZSBtYWluIHRocmVhZCwgd2hpbGUgZ3VhcmRpbmcgYSByZWYtCisgICAgICAgICAgICBjb3Vu
dGVkIG9iamVjdC4KKworICAgICAgICAoV2ViS2l0OjpNYWluVGhyZWFkR3VhcmRlZEludm9rZXI6
OmNhbGwpOgorICAgICAgICAoV2ViS2l0OjpNYWluVGhyZWFkR3VhcmRlZEludm9rZXI6Ok1haW5U
aHJlYWRHdWFyZGVkSW52b2tlcik6CisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJlYWRHdWFyZGVk
SW52b2tlcjo6aW52b2tlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpz
eW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmRldGFj
aERyYXdpbmdBcmVhKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5j
TGF5ZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojpz
ZXRTaG91bGRSZW5kZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHk6OmZsdXNoTGF5ZXJDaGFuZ2VzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFByb3h5OjplbnN1cmVSb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHk6OnN5bmNSZW1vdGVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFByb3h5OjpkaXNwYXRjaFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQ
cm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVIb3N0UHJveHk6OnB1cmdlR0xSZXNvdXJjZXMpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9RdFNHV2ViUGFnZU5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQv
UXRTR1dlYlBhZ2VOb2RlLmg6IEFkZGVkLgorCiAyMDEyLTAzLTAzICBObydhbSBSb3NlbnRoYWwg
IDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBVc2UgdGhlIGV4aXN0
aW5nIGluaGVyaXRlZE9wYWNpdHkvbWF0cml4IHByb3BlcnRpZXMgb2YgUVNHTm9kZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkKaW5kZXggNGJkYjNjOWQ5ZWRjYWQ0ZDI1Zjk0MWQ0NTY3OWQ3OTUzNTJjY2MzYS4uZGQwYjky
MjMzYjMwYjY5MTNmNmZmNWNmYzg4YjRjZmYwNjAzZWI2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0yNjEs
NiArMjYxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29n
bml6ZXIuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaCBcCiAg
ICAgVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5oIFwKKyAgICBVSVByb2Nl
c3MvcXQvUXRTR1dlYlBhZ2VOb2RlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVS
ZWNvZ25pemVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmggXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdERpYWxvZ1J1bm5lci5oIFwKQEAgLTU5Miw2ICs1OTMsNyBAQCBTT1VSQ0VTICs9
IFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0
UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9RdFNHV2ViUGFn
ZU5vZGUuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5jcHAg
XAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkVycm9yLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0
RGlhbG9nUnVubmVyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJwYWdlLmNwcAppbmRleCBkNThmZWZlYzg2OTIzY2UzMTc2MzRhYTg4MzI5OWJk
YzllMWNjYjJiLi42MTYzZDM5MzAwOTEyYzkyM2EzNTZjZmZiODU3YzM3ZDA4MGQ0NDg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAK
QEAgLTIyLDE0ICsyMiwxMSBAQAogI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgogCiAjaW5j
bHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAiUXRTR1dlYlBhZ2VOb2RlLmgi
CiAjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3BfcC5oIgogI2luY2x1ZGUg
InFxdWlja3dlYnZpZXdfcC5oIgotI2luY2x1ZGUgPFF0UXVpY2svUVF1aWNrQ2FudmFzPgotI2lu
Y2x1ZGUgPFF0UXVpY2svUVNHR2VvbWV0cnlOb2RlPgotI2luY2x1ZGUgPFF0UXVpY2svUVNHTWF0
ZXJpYWw+Ci0jaW5jbHVkZSA8cHJpdmF0ZS9xc2dyZW5kZXJub2RlX3AuaD4KIAogUVF1aWNrV2Vi
UGFnZTo6UVF1aWNrV2ViUGFnZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydEl0ZW0pCiAgICAgOiBR
UXVpY2tJdGVtKHZpZXdwb3J0SXRlbSkKQEAgLTc3LDUwICs3NCw2IEBAIHZvaWQgUVF1aWNrV2Vi
UGFnZVByaXZhdGU6OnBhaW50KFFQYWludGVyKiBwYWludGVyKQogICAgICAgICB3ZWJQYWdlUHJv
eHktPmRyYXdpbmdBcmVhKCktPnBhaW50TGF5ZXJUcmVlKHBhaW50ZXIpOwogfQogCi12b2lkIFFR
dWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBRVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgaWYgKCFxLT5pc1Zpc2libGUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVJlY3RGIGNsaXBSZWN0ID0gdmlld3BvcnRJdGVt
LT5tYXBSZWN0VG9TY2VuZSh2aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpKTsKLQotICAgIGlm
ICghY2xpcFJlY3QuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEcmF3aW5nQXJl
YVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBp
ZiAoIWRyYXdpbmdBcmVhKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkcmF3aW5nQXJlYS0+cGFp
bnRUb0N1cnJlbnRHTENvbnRleHQoUVRyYW5zZm9ybSh0cmFuc2Zvcm0pLnNjYWxlKGNvbnRlbnRz
U2NhbGUsIGNvbnRlbnRzU2NhbGUpLCBvcGFjaXR5LCBjbGlwUmVjdCk7Ci19Ci0KLXN0cnVjdCBQ
YWdlUHJveHlOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgewotICAgIFBhZ2VQcm94eU5vZGUo
UVF1aWNrV2ViUGFnZVByaXZhdGUqIHBhZ2UpCi0gICAgICAgIDogbV9wYWdlUHJpdmF0ZShwYWdl
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIFN0YXRlRmxhZ3MgY2hhbmdlZFN0YXRlcygp
Ci0gICAgewotICAgICAgICByZXR1cm4gU3RhdGVGbGFncyhTdGVuY2lsU3RhdGUpIHwgQ29sb3JT
dGF0ZSB8IEJsZW5kU3RhdGU7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHJlbmRlcihjb25z
dCBSZW5kZXJTdGF0ZSYpCi0gICAgewotICAgICAgICBpZiAoIW1fcGFnZVByaXZhdGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbWF0cml4KCkg
PyBtYXRyaXgoKS0+dG9UcmFuc2Zvcm0oKSA6IFFUcmFuc2Zvcm0oKTsKLSAgICAgICAgbV9wYWdl
UHJpdmF0ZS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtLCBpbmhlcml0ZWRPcGFj
aXR5KCkpOwotICAgIH0KLQotICAgIH5QYWdlUHJveHlOb2RlKCkKLSAgICB7Ci0gICAgICAgIGlm
IChtX3BhZ2VQcml2YXRlKQotICAgICAgICAgICAgbV9wYWdlUHJpdmF0ZS0+cmVzZXRQYWludE5v
ZGUoKTsKLSAgICB9Ci0KLSAgICBRUXVpY2tXZWJQYWdlUHJpdmF0ZSogbV9wYWdlUHJpdmF0ZTsK
LX07CiAKIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBv
bGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikKIHsKQEAgLTEzMCwxMyArODMsMTYgQEAgUVNH
Tm9kZSogUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVw
ZGF0ZVBhaW50Tm9kZURhdGEqKQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBQYWdl
UHJveHlOb2RlKiBwcm94eU5vZGUgPSBzdGF0aWNfY2FzdDxQYWdlUHJveHlOb2RlKj4ob2xkTm9k
ZSk7Ci0gICAgaWYgKCFwcm94eU5vZGUpIHsKLSAgICAgICAgcHJveHlOb2RlID0gbmV3IFBhZ2VQ
cm94eU5vZGUoZCk7Ci0gICAgICAgIGQtPm1fcGFpbnROb2RlID0gcHJveHlOb2RlOworICAgIFF0
U0dXZWJQYWdlTm9kZSogc2NlbmVOb2RlID0gc3RhdGljX2Nhc3Q8UXRTR1dlYlBhZ2VOb2RlKj4o
b2xkTm9kZSk7CisgICAgaWYgKHNjZW5lTm9kZSkKKyAgICAgICAgcmV0dXJuIHNjZW5lTm9kZTsK
KyAgICBzY2VuZU5vZGUgPSBuZXcgUXRTR1dlYlBhZ2VOb2RlKGQtPndlYlBhZ2VQcm94eS0+ZHJh
d2luZ0FyZWEoKS0+bGF5ZXJUcmVlSG9zdFByb3h5KCksIGQpOworICAgIHsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9jayhkLT5tX3BhaW50Tm9kZU11dGV4KTsKKyAgICAgICAgZC0+bV9wYWludE5v
ZGUgPSBzY2VuZU5vZGU7CiAgICAgfQotCi0gICAgcmV0dXJuIHByb3h5Tm9kZTsKKyAgICBkLT51
cGRhdGVTaXplKCk7CisgICAgcmV0dXJuIHNjZW5lTm9kZTsKIH0KIAogUXRXZWJQYWdlRXZlbnRI
YW5kbGVyKiBRUXVpY2tXZWJQYWdlOjpldmVudEhhbmRsZXIoKSBjb25zdApAQCAtMTg4LDIwICsx
NDQsMjMgQEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6dXBkYXRlU2l6ZSgpCiAgICAgUVNp
emVGIHNjYWxlZFNpemUgPSBjb250ZW50c1NpemUgKiBjb250ZW50c1NjYWxlOwogICAgIHEtPnNl
dFNpemUoc2NhbGVkU2l6ZSk7CiAgICAgdmlld3BvcnRJdGVtLT51cGRhdGVDb250ZW50c1NpemUo
c2NhbGVkU2l6ZSk7CisgICAgUVJlY3RGIGNsaXBSZWN0ID0gdmlld3BvcnRJdGVtLT5tYXBSZWN0
VG9TY2VuZSh2aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpKTsKKworICAgIE11dGV4TG9ja2Vy
IGxvY2sobV9wYWludE5vZGVNdXRleCk7CisgICAgaWYgKCFtX3BhaW50Tm9kZSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fcGFpbnROb2RlLT5zZXRDbGlwUmVjdChjbGlwUmVjdCk7CisgICAgbV9w
YWludE5vZGUtPnNldENvbnRlbnRzU2NhbGUoY29udGVudHNTY2FsZSk7CiB9CiAKLXZvaWQgUVF1
aWNrV2ViUGFnZVByaXZhdGU6OnJlc2V0UGFpbnROb2RlKCkKK3ZvaWQgUVF1aWNrV2ViUGFnZVBy
aXZhdGU6OndpbGxEZWxldGVTY2VuZWdyYXBoTm9kZSgpCiB7CisgICAgTXV0ZXhMb2NrZXIgbG9j
ayhtX3BhaW50Tm9kZU11dGV4KTsKICAgICBtX3BhaW50Tm9kZSA9IDA7Ci0gICAgRHJhd2luZ0Fy
ZWFQcm94eSogZHJhd2luZ0FyZWEgPSB3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7Ci0gICAg
aWYgKGRyYXdpbmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKSkKLSAg
ICAgICAgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpLT5wdXJnZUdMUmVzb3VyY2Vz
KCk7CiB9CiAKIFFRdWlja1dlYlBhZ2VQcml2YXRlOjp+UVF1aWNrV2ViUGFnZVByaXZhdGUoKQog
ewotICAgIGlmIChtX3BhaW50Tm9kZSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFnZVByb3h5Tm9k
ZSo+KG1fcGFpbnROb2RlKS0+bV9wYWdlUHJpdmF0ZSA9IDA7CiB9CiAKICNpbmNsdWRlICJtb2Nf
cXF1aWNrd2VicGFnZV9wLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaAppbmRleCBmYTdkNjhjZWQxNWUzYWY3ZTEyMWMxOGYx
NzVkNzIwM2NlMjhjYTA1Li42YzNiMTNhZWNlMzMwMTA1NGViMDIzOThiOWRmZDg4ZWM1MWQyMmMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBh
Z2VfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJw
YWdlX3BfcC5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaWZuZGVmIHFxdWlja3dlYnBhZ2VfcF9wX2gK
ICNkZWZpbmUgcXF1aWNrd2VicGFnZV9wX3BfaAogCisjaW5jbHVkZSAiUXRTR1dlYlBhZ2VOb2Rl
LmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAjaW5jbHVkZSA8UVRyYW5zZm9ybT4K
IApAQCAtMzEsMTcgKzMyLDE2IEBAIGNsYXNzIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTsK
IAogY2xhc3MgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOwogCi1jbGFzcyBRUXVpY2tXZWJQYWdlUHJp
dmF0ZSB7CitjbGFzcyBRUXVpY2tXZWJQYWdlUHJpdmF0ZSA6IHB1YmxpYyBRdFNHV2ViUGFnZU5v
ZGU6OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgUVF1aWNrV2ViUGFnZVByaXZhdGUoUVF1aWNrV2Vi
UGFnZSogcSwgUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVtKTsKICAgICB+UVF1aWNrV2ViUGFn
ZVByaXZhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbERlbGV0ZVNjZW5lZ3JhcGhOb2RlKCk7
CiAKICAgICB2b2lkIGluaXRpYWxpemUoV2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKICAgICB2b2lk
IHNldERyYXdpbmdBcmVhU2l6ZShjb25zdCBRU2l6ZSYpOwogCiAgICAgdm9pZCB1cGRhdGVTaXpl
KCk7Ci0KLSAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFFUcmFuc2Zvcm0m
LCBmbG9hdCBvcGFjaXR5KTsKICAgICB2b2lkIHBhaW50KFFQYWludGVyKik7CiAgICAgdm9pZCBy
ZXNldFBhaW50Tm9kZSgpOwogCkBAIC01MCw3ICs1MCw4IEBAIHB1YmxpYzoKICAgICBRUXVpY2tX
ZWJWaWV3KiBjb25zdCB2aWV3cG9ydEl0ZW07CiAgICAgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHdl
YlBhZ2VQcm94eTsKICAgICBib29sIHBhaW50aW5nSXNJbml0aWFsaXplZDsKLSAgICBRU0dOb2Rl
KiBtX3BhaW50Tm9kZTsKKyAgICBRdFNHV2ViUGFnZU5vZGUqIG1fcGFpbnROb2RlOworICAgIE11
dGV4IG1fcGFpbnROb2RlTXV0ZXg7CiAKICAgICBRU2l6ZUYgY29udGVudHNTaXplOwogICAgIHFy
ZWFsIGNvbnRlbnRzU2NhbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHkuaAppbmRleCA5MDAxYWNiNjkyNzVhMWMyODVkY2Q0NmRkYjBlYjk3YWM4M2U4ZDYwLi45
Y2QwODNiZDM5YmU3YjA3NDUyNzI4NGFmMzFlMWI5OGIwNmI1Y2FiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lu
Y2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW5mby5oIgorI2lu
Y2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgpAQCAt
NTQsNyArNTUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgTGF5ZXJUcmVlQ29udGV4dDsKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKIGNsYXNz
IFVwZGF0ZUluZm87CiBjbGFzcyBXZWJMYXllclRyZWVJbmZvOwogY2xhc3MgV2ViTGF5ZXJVcGRh
dGVJbmZvOwpAQCAtOTAsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzQmFj
a2luZ1N0b3JlUmVhZHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBwYWludExheWVyVHJlZShCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KSB7IH0KLSAgICBMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdFByb3h5LmdldCgpOyB9CisgICAgUGFzc1JlZlB0cjxM
YXllclRyZWVIb3N0UHJveHk+IGxheWVyVHJlZUhvc3RQcm94eSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5ZXJUcmVlSG9zdFByb3h5OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50
c1JlY3RGb3JTY2FsaW5nKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1Jl
Y3QsIGZsb2F0IHNjYWxlKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRz
UmVjdEZvclBhbm5pbmcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVj
dCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikgeyB9CiAgICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwg
Y29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJikgeyB9CkBAIC0xMTAsNyArMTEwLDcgQEAgcHJvdGVj
dGVkOgogICAgIFdlYkNvcmU6OkludFNpemUgbV9zY3JvbGxPZmZzZXQ7CiAKICNpZiBVU0UoVUlf
U0lERV9DT01QT1NJVElORykKLSAgICBPd25QdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVy
VHJlZUhvc3RQcm94eTsKKyAgICBSZWZQdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBtX2xheWVyVHJl
ZUhvc3RQcm94eTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKaW5kZXggYzBkMDQ0YmY4OTJhM2FmNTIz
NTIzYzc0MzQ1ODMwYTM5YTA1YmFiZC4uYTVkYzNhOWYzZTY0NGMzNWNmOWNmNzExMDRmYThlM2E1
N2Y2OWFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVh
UHJveHlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eUltcGwuY3BwCkBAIC02MSw3ICs2MSw3IEBAIERyYXdpbmdBcmVhUHJveHlJbXBsOjpEcmF3
aW5nQXJlYVByb3h5SW1wbChXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKICNpZiBVU0UoVUlf
U0lERV9DT01QT1NJVElORykKICAgICAvLyBDb25zdHJ1Y3QgdGhlIHByb3h5IGVhcmx5IHRvIGFs
bG93IG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhlIHdlYiBwcm9jZXNzIHdoaWxlIEFDIGlzIGVu
dGVyZWQgdGhlcmUuCiAgICAgaWYgKHdlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVu
Y2VzKCktPmZvcmNlQ29tcG9zaXRpbmdNb2RlKCkpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdFBy
b3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdFByb3h5ID0gTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGUodGhpcyk7CiAj
ZW5kaWYKIH0KIApAQCAtMzM3LDcgKzMzNyw3IEBAIHZvaWQgRHJhd2luZ0FyZWFQcm94eUltcGw6
OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4CiAg
ICAgbV93ZWJQYWdlUHJveHktPmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5ZXJU
cmVlQ29udGV4dCk7CiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCiAgICAgaWYgKCFtX2xh
eWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHkgPSBhZG9wdFB0
cihuZXcgTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
UHJveHkgPSBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZSh0aGlzKTsKICNlbmRpZgogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKaW5kZXggYjNk
NTEyZjFiYWU2NGJhN2MwZDNlMjg1NjFkZjdmODU5ODIzYTJmZC4uNDIyZGVjODI5OTdhMmI0Yzg5
MzJiZDM1OTU1YTFlYmVkY2NjMmFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXllclRyZWVIb3N0UHJveHkuaApAQCAtMjMsNyArMjMsNyBAQAogI2lmIFVTRShVSV9TSURFX0NP
TVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiRHJhd2lu
Z0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJSZWdpb24u
aCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZS5oIgpAQCAtMzYsMTcgKzM2LDE3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1l
ci5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KLQorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCitjbGFzcyBEcmF3aW5nQXJlYVByb3h5OwogY2xhc3MgTGF5ZXJCYWNraW5nU3Rv
cmU7CiBjbGFzcyBXZWJMYXllckluZm87CiBjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CiAKLWNs
YXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxMYXllclRyZWVIb3N0UHJveHk+LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNs
aWVudCB7CiBwdWJsaWM6Ci0gICAgTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkq
KTsKICAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0UHJveHkoKTsKICAgICB2b2lkIHN5bmNDb21w
b3NpdGluZ0xheWVyU3RhdGUoY29uc3QgV2ViTGF5ZXJJbmZvJik7CiAgICAgdm9pZCBkZWxldGVD
b21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOwpAQCAtNjgsNiArNjgsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25u
ZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsK
ICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXll
clRyZWVIb3N0UHJveHk+IGNyZWF0ZShEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IExheWVyVHJlZUhvc3RQcm94eShkcmF3aW5nQXJlYSkpOyB9CisK
IHByb3RlY3RlZDoKICAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0
ZUxheWVyKFdlYkxheWVySUQpOwogCkBAIC04OCw3ICs5MCwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ZmxvYXQgbV9jb250ZW50c1NjYWxlOwogCiAgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBt
X3JlbmRlclF1ZXVlOworICAgIFdURjo6TXV0ZXggbV9yZW5kZXJRdWV1ZU11dGV4OwogICAgIHZv
aWQgZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgZGV0
YWNoRHJhd2luZ0FyZWEoKTsKKyAgICB2b2lkIHNldFNob3VsZFJlbmRlck5leHRGcmFtZSgpOwog
CiAjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQogICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFw
cGVyPiBtX3RleHR1cmVNYXBwZXI7CkBAIC0xMTMsMTMgKzExOCwxNCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsKICAgICB2b2lkIHN3YXBCdWZmZXJzKCk7
CiAgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOworICAgIHZvaWQgdXBkYXRlVmlld3BvcnRPbk1h
aW5UaHJlYWQoKTsKKyAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSopOwog
CiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwogICAgIFZl
Y3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwogCiAgICAgTGF5ZXJNYXAgbV9sYXll
cnM7CiAgICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOwotICAgIGludCBtX2lkOwogfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQ
cm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJv
eHlRdC5jcHAKaW5kZXggMjFmYjk5NTRjNTRkY2FhZTM0MzdkNjgzYzFkOTdhNTA2ZDA4MjJiYi4u
YjVkMzM5MjQwYTEzZDljNTdiZmI3YmNiMTJmMjEzNzE4YjgyZTczMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCkBAIC05
NSw2ICs5NSwzMiBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENv
bnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdAogICAgIHN5bmNBbmltYXRpb25z
KCk7CiB9CiAKK3RlbXBsYXRlPGNsYXNzIFQ+CitjbGFzcyBNYWluVGhyZWFkR3VhcmRlZEludm9r
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNhbGwoUGFzc1JlZlB0cjxUPiBvYmplY3RU
b0d1YXJkLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICB7CisgICAgICAg
IE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxUPiogaW52b2tlciA9IG5ldyBNYWluVGhyZWFkR3Vh
cmRlZEludm9rZXI8VD4ob2JqZWN0VG9HdWFyZCwgZnVuY3Rpb24pOworICAgICAgICBjYWxsT25N
YWluVGhyZWFkKGludm9rZSwgaW52b2tlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5U
aHJlYWRHdWFyZGVkSW52b2tlcihQYXNzUmVmUHRyPFQ+IG9iamVjdCwgY29uc3QgRnVuY3Rpb248
dm9pZCgpPiYgbmV3RnVuY3Rpb24pCisgICAgICAgIDogb2JqZWN0VG9HdWFyZChvYmplY3QpCisg
ICAgICAgICwgZnVuY3Rpb24obmV3RnVuY3Rpb24pCisgICAgeworICAgIH0KKworICAgIFJlZlB0
cjxUPiBvYmplY3RUb0d1YXJkOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247CisgICAg
c3RhdGljIHZvaWQgaW52b2tlKHZvaWQqIGRhdGEpCisgICAgeworICAgICAgICBNYWluVGhyZWFk
R3VhcmRlZEludm9rZXI8VD4qIGludm9rZXIgPSBzdGF0aWNfY2FzdDxNYWluVGhyZWFkR3VhcmRl
ZEludm9rZXI8VD4qPihkYXRhKTsKKyAgICAgICAgaW52b2tlci0+ZnVuY3Rpb24oKTsKKyAgICAg
ICAgZGVsZXRlIGludm9rZXI7CisgICAgfQorfTsKKwogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnN5bmNBbmltYXRpb25zKCkKIHsKICAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9U
ZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOwpAQCAtMTAyLDcgKzEyOCw3IEBAIHZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQW5pbWF0aW9ucygpCiAKICAgICBsYXllci0+c3luY0Fu
aW1hdGlvbnNSZWN1cnNpdmVseSgpOwogICAgIGlmIChsYXllci0+ZGVzY2VuZGFudHNPclNlbGZI
YXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKLSAgICAgICAgdXBkYXRlVmlld3BvcnQoKTsKKyAgICAg
ICAgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyPExheWVyVHJlZUhvc3RQcm94eT46OmNhbGwodGhp
cywgYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCwgdGhpcykpOwogfQog
CiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChRUGFpbnRl
ciogcGFpbnRlcikKQEAgLTEyNyw3ICsxNTMsMTMgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnBhaW50VG9HcmFwaGljc0NvbnRleHQoUVBhaW50ZXIqIHBhaW50ZXIpCiAKIHZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiB7Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5
LT51cGRhdGVWaWV3cG9ydCgpOworICAgIGlmIChtX2RyYXdpbmdBcmVhUHJveHkpCisgICAgICAg
IG1fZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OmRldGFjaERyYXdpbmdBcmVhKCkKK3sKKyAgICBtX2RyYXdpbmdBcmVhUHJv
eHkgPSAwOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY0xheWVyUGFyYW1ldGVy
cyhjb25zdCBXZWJMYXllckluZm8mIGxheWVySW5mbykKQEAgLTE4NSwxMSArMjE3LDE0IEBAIHZv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVy
SW5mbyYgbGF5ZXJJbmZvKQogICAgICAgICBjYXNlIFdlYktpdDo6V2ViTGF5ZXJBbmltYXRpb246
OlJlbW92ZUFuaW1hdGlvbjoKICAgICAgICAgICAgIGxheWVyLT5yZW1vdmVBbmltYXRpb24oYW5p
bS5uYW1lKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYktpdDo6V2ViTGF5
ZXJBbmltYXRpb246OlBhdXNlQW5pbWF0aW9uOgorICAgICAgICBjYXNlIFdlYktpdDo6V2ViTGF5
ZXJBbmltYXRpb246OlBhdXNlQW5pbWF0aW9uOiB7CiAgICAgICAgICAgICBkb3VibGUgb2Zmc2V0
ID0gV1RGOjpjdXJyZW50VGltZSgpIC0gYW5pbS5zdGFydFRpbWU7CiAgICAgICAgICAgICBsYXll
ci0+cGF1c2VBbmltYXRpb24oYW5pbS5uYW1lLCBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgaWYgKGxheWVySW5mby5pc1Jvb3RMYXllciAmJiBtX3Jvb3RMYXll
cklEICE9IGlkKQpAQCAtMjk1LDEzICszMzAsMTcgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnN3YXBCdWZmZXJzKCkKICAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xl
YXIoKTsKIH0KIAordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFNob3VsZFJlbmRlck5leHRG
cmFtZSgpCit7CisgICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMgc3RhdGUgaXMgb24gaXRzIHdheSB0
byB0aGUgc2NyZWVuLCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQgb25l
LgorICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2Fn
ZXM6OkxheWVyVHJlZUhvc3Q6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Zmx1c2hM
YXllckNoYW5nZXMoKQogewogICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZShG
bG9hdFJlY3QoKSk7CiAgICAgc3dhcEJ1ZmZlcnMoKTsKLQotICAgIC8vIFRoZSBwZW5kaW5nIHRp
bGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9yIHRoZSBzY3JlZW4sIHRlbGwgdGhlIHdlYiBwcm9j
ZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUuCi0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4dEZy
YW1lKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CisgICAgTWFpblRo
cmVhZEd1YXJkZWRJbnZva2VyPExheWVyVHJlZUhvc3RQcm94eT46OmNhbGwodGhpcywgYmluZCgm
TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRTaG91bGRSZW5kZXJOZXh0RnJhbWUsIHRoaXMpKTsKIH0K
IAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcigpCkBAIC0zMTUsMTQg
KzM1NCwxMyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlUm9vdExheWVyKCkKIAog
ICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdv
dWxkIGJlIG9wdGltaXplZCBvdXQuCiAgICAgbV9yb290TGF5ZXItPnNldFNpemUoRmxvYXRTaXpl
KDEuMCwgMS4wKSk7Ci0gICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVy
ZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2Rl
KTsKICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1
cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnN5bmNSZW1vdGVDb250ZW50KCkKIHsKICAgICAvLyBXZSBlbnF1ZXVlIG1lc3NhZ2Vz
IGFuZCBleGVjdXRlIHRoZW0gZHVyaW5nIHBhaW50LCBhcyB0aGV5IHJlcXVpcmUgYW4gYWN0aXZl
IEdMIGNvbnRleHQuCisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVyUXVldWVNdXRleCk7
CiAgICAgZW5zdXJlUm9vdExheWVyKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
cmVuZGVyUXVldWUuc2l6ZSgpOyArK2kpCkBAIC0zMzMsNiArMzcxLDcgQEAgdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnN5bmNSZW1vdGVDb250ZW50KCkKIAogdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQogewor
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3JlbmRlclF1ZXVlTXV0ZXgpOwogICAgIG1fcmVuZGVy
UXVldWUuYXBwZW5kKGZ1bmN0aW9uKTsKICAgICB1cGRhdGVWaWV3cG9ydCgpOwogfQpAQCAtMzU3
LDcgKzM5Niw2IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIo
aW50IGxheWVySUQsIGludCB0aWxlSUQpCiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJU
cmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlLCB0aGlzLCBsYXllcklELCB0aWxlSUQpKTsKIH0KIAot
CiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJMYXll
cklEIGlkKQogewogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6
ZGVsZXRlTGF5ZXIsIHRoaXMsIGlkKSk7CkBAIC0zODAsNiArNDE4LDcgQEAgdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKCkKIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OmNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBjb25zdCBXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCiB7CisgICAgLy8gRXZlbiB0aG91Z2gg
U2hhcmVhYmxlQml0bWFwIGlzIG5vdCBUaHJlYWRTYWZlUmVmQ291bnRlZCwgd2UgY2FuIHNhZmVs
eSBtb3ZlIGl0IHRvIHRoZSByZW5kZXJlciB0aHJlYWQgYXMgdGhlIG1haW4gdGhyZWFkIHdpbGwg
bm90IHRvdWNoIGl0IGFueW1vcmUuCiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFw
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKICAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlLCB0aGlzLCBrZXksIGJpdG1hcCkp
OwogfQpAQCAtNDAzLDYgKzQ0Miw4IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNp
YmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhjb25zdCBJbnRSZWN0JiByZWN0LCBmCiAKIHZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUdMUmVzb3VyY2VzKCkKIHsKKyAgICBNdXRleExvY2tl
ciBsb2NrZXIobV9yZW5kZXJRdWV1ZU11dGV4KTsKKyAgICBtX3JlbmRlclF1ZXVlLmNsZWFyKCk7
CiAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJv
b3RMYXllcigpKTsKIAogICAgIGlmIChsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFNHV2ViUGFnZU5vZGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0U0dXZWJQYWdlTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWJmN2VkZmRmNjA5ZjRlNzAx
YjgwNTQ0YjFiNWZiZWI3N2Q3YTA2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFNHV2ViUGFnZU5vZGUuY3BwCkBAIC0wLDAgKzEsNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUXRTR1dlYlBhZ2VO
b2RlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitRdFNHV2ViUGFnZU5vZGU6OlF0U0dXZWJQ
YWdlTm9kZShQYXNzUmVmUHRyPExheWVyVHJlZUhvc3RQcm94eT4gbGF5ZXJUcmVlSG9zdCwgQ2xp
ZW50KiBjbGllbnQpCisgICAgOiBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKKyAgICAs
IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fY29udGVudHNTY2FsZSgxKQoreworfQorCitRU0dS
ZW5kZXJOb2RlOjpTdGF0ZUZsYWdzIFF0U0dXZWJQYWdlTm9kZTo6Y2hhbmdlZFN0YXRlcygpCit7
CisgICAgcmV0dXJuIFN0YXRlRmxhZ3MoU3RlbmNpbFN0YXRlKSB8IENvbG9yU3RhdGUgfCBCbGVu
ZFN0YXRlOworfQorCit2b2lkIFF0U0dXZWJQYWdlTm9kZTo6cmVuZGVyKGNvbnN0IFJlbmRlclN0
YXRlJiBzdGF0ZSkKK3sKKyAgICBRVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1hdHJpeCgpID8gbWF0
cml4KCktPnRvVHJhbnNmb3JtKCkgOiBRVHJhbnNmb3JtKCk7CisgICAgZmxvYXQgc2NhbGUgPSBj
b250ZW50c1NjYWxlKCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5wYWludFRvQ3VycmVudEdMQ29u
dGV4dChRVHJhbnNmb3JtKHRyYW5zZm9ybSkuc2NhbGUoc2NhbGUsIHNjYWxlKSwgaW5oZXJpdGVk
T3BhY2l0eSgpLCBjbGlwUmVjdCgpKTsKK30KKwordm9pZCBRdFNHV2ViUGFnZU5vZGU6OnNldENv
bnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4
KTsKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKK30KKworZmxvYXQgUXRTR1dlYlBhZ2VO
b2RlOjpjb250ZW50c1NjYWxlKCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOwor
ICAgIHJldHVybiBtX2NvbnRlbnRzU2NhbGU7Cit9CisKK3ZvaWQgUXRTR1dlYlBhZ2VOb2RlOjpz
ZXRDbGlwUmVjdChjb25zdCBRUmVjdEYmIHJlY3QpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayht
X211dGV4KTsKKyAgICBtX2NsaXBSZWN0ID0gcmVjdDsKK30KKworUVJlY3RGIFF0U0dXZWJQYWdl
Tm9kZTo6Y2xpcFJlY3QoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAg
cmV0dXJuIG1fY2xpcFJlY3Q7Cit9CisKK1F0U0dXZWJQYWdlTm9kZTo6flF0U0dXZWJQYWdlTm9k
ZSgpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5wdXJnZUdMUmVzb3VyY2VzKCk7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xp
ZW50LT53aWxsRGVsZXRlU2NlbmVncmFwaE5vZGUoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0U0dXZWJQYWdlTm9kZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0U0dXZWJQYWdlTm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxNTYyZmFkYzUy
Y2ZlZTM1YzJhOTg2ZmRkZDE2YTZmN2ZhMDY0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRTR1dlYlBhZ2VOb2RlLmgKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUXRTR1dlYlBhZ2VOb2RlX2gKKyNkZWZpbmUgUXRT
R1dlYlBhZ2VOb2RlX2gKKworI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorI2luY2x1
ZGUgPHByaXZhdGUvcXNncmVuZGVybm9kZV9wLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitz
dHJ1Y3QgUXRTR1dlYlBhZ2VOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgeworcHVibGljOgor
ICAgIHN0cnVjdCBDbGllbnQgeworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbERlbGV0ZVNjZW5l
Z3JhcGhOb2RlKCkgeyB9CisgICAgfTsKKworICAgIFF0U0dXZWJQYWdlTm9kZShQYXNzUmVmUHRy
PExheWVyVHJlZUhvc3RQcm94eT4sIENsaWVudCopOworICAgIH5RdFNHV2ViUGFnZU5vZGUoKTsK
KyAgICB2aXJ0dWFsIFN0YXRlRmxhZ3MgY2hhbmdlZFN0YXRlcygpOworICAgIHZpcnR1YWwgdm9p
ZCByZW5kZXIoY29uc3QgUmVuZGVyU3RhdGUmKTsKKyAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUo
ZmxvYXQpOworICAgIGZsb2F0IGNvbnRlbnRzU2NhbGUoKTsKKyAgICB2b2lkIHNldENsaXBSZWN0
KGNvbnN0IFFSZWN0RiYpOworICAgIFFSZWN0RiBjbGlwUmVjdCgpOworCitwcml2YXRlOgorICAg
IFJlZlB0cjxMYXllclRyZWVIb3N0UHJveHk+IG1fbGF5ZXJUcmVlSG9zdDsKKyAgICBDbGllbnQq
IG1fY2xpZW50OworICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKyAgICBRUmVjdEYgbV9jbGlw
UmVjdDsKKyAgICBNdXRleCBtX211dGV4OworfTsKKworfQorI2VuZGlmIC8qIFF0U0dXZWJQYWdl
Tm9kZV9oICovCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggNjY2M2I5NDBiYzAyNmY1NjJhMWFiNGUzMWY2M2YzNTdhMWU1MDEwYS4uMTU0MWI1Nzdl
ZWQ0M2VmODhjYTZiZmVkMDA2ZDE1MTc1MGRkOTc5NSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTA0ICBO
bydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0
XSBbV0syXSBTdXBwb3J0IHRocmVhZGVkIHJlbmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NjEKKworICAgICAgICBSZW1vdmUg
dGhlIFFNTF9OT19USFJFQURFRF9SRU5ERVJFUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBmcm9tIE1p
bmlCcm93c2VyLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogTWluaUJyb3dzZXIvcXQvbWFpbi5jcHA6CisgICAgICAgIChtYWluKToKKwogMjAxMi0w
My0wMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXgg
Y29tbWl0IHF1ZXVlLCByZW1vdmUgZHVwbGljYXRlIGVudHJ5LgpkaWZmIC0tZ2l0IGEvVG9vbHMv
TWluaUJyb3dzZXIvcXQvbWFpbi5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcApp
bmRleCBmZWFlMTRhZGVmMzhmNTVjNjAyMGY0ZmJkNjE0NDFiZjk5MDU4ZTI4Li4zNjYzNzczYWIy
ZDgxMzdiNTcxOWU3NWYwMDkzYjkwM2NmYzNlNTFjIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJv
d3Nlci9xdC9tYWluLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcApAQCAt
MzksOSArMzksNiBAQAogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7Ci0gICAg
Ly8gRklYTUU6IFdlIG11c3QgYWRkIHN1cHBvcnQgZm9yIHRoZSB0aHJlYWRlZCByZW5kZXJpbmcg
YXMgaXQgaXMgdGhlIGRlZmF1bHQuCi0gICAgcXB1dGVudigiUU1MX05PX1RIUkVBREVEX1JFTkRF
UkVSIiwgUUJ5dGVBcnJheSgiMSIpKTsKLQogICAgIE1pbmlCcm93c2VyQXBwbGljYXRpb24gYXBw
KGFyZ2MsIGFyZ3YpOwogCiAgICAgaWYgKGFwcC5pc1JvYm90aXplZCgpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130126</attachid>
            <date>2012-03-05 07:22:09 -0800</date>
            <delta_ts>2012-03-08 21:19:28 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-76661-20120305072207.patch</filename>
            <type>text/plain</type>
            <size>26600</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5NjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDg3YzRlMTY4MTI2YzY2
YmJlN2IxZWRlMDVjZmJhZWRhYWU3YjE2Yy4uZDdlM2MxMWE4NjljZWE5NjEyYjM1ZTlhNzk4YjNk
ZDNmNjgzMDZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAzLTA0ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBb
V0syXSBTdXBwb3J0IHRocmVhZGVkIHJlbmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NjEKKworICAgICAgICBNYWRlIHRoZSBh
cHByb3ByaWF0ZSBmaXhlcyBpbiB0aGUgVUkgcHJvY2VzcyBjb2RlIHRvIG1ha2UgcmVuZGVyaW5n
IHRocmVhZC1zYWZlLgorICAgICAgICAtIFNlcGFyYXRlZCB0aGUgc2NlbmVncmFwaCBub2RlIGNv
ZGUgdG8gUXRXZWJQYWdlU0dOb2RlLiBRdFdlYlBhZ2VTR05vZGUgaGFzIGRpcmVjdCBhY2Nlc3MK
KyAgICAgICAgICB0byBMYXllclRyZWVIb3N0UHJveHkuCisKKyAgICAgICAgLSBFYWNoIGZ1bmN0
aW9uIGluIExheWVyVHJlZUhvc3RQcm94eSBjYW4gYmUgZWl0aGVyIGNhbGxlZCBmcm9tIHRoZSBt
YWluIHRocmVhZCAoaGFuZGxpbmcKKyAgICAgICAgICBtZXNzYWdlcyBmcm9tIHRoZSB3ZWIgcHJv
Y2VzcyksIG9yIGZyb20gdGhlIHJlbmRlcmVyIHRocmVhZCAoaGFuZGxpbmcgdGhlIEdMIGNvbnRl
eHQpLgorICAgICAgICAgIFRoZSByZW5kZXItcXVldWUgaXMgbG9ja2VkIHdpdGggYSBtdXRleCwg
YW5kIG1lc3NhZ2VzIGJhY2sgdG8gdGhlIHdlYiBwcm9jZXNzIGFyZSBzZW50CisgICAgICAgICAg
dmlhIGNhbGxPbk1haW5UaHJlYWQuCisKKyAgICAgICAgLSBMYXllclRyZWVIb3N0UHJveHkgaXMg
bm93IFRocmVhZFNhZmVSZWZDb3VudGVkLiBUaGF0IGlzIGRvbmUgdG8gbWFrZSBzdXJlIHRoYXQg
dGhlIEdMCisgICAgICAgICAgcmVzb3VyY2VzIGl0IGNyZWF0ZXMgYXJlIG9ubHkgZnJlZWQgd2hl
biB0aGUgUXRXZWJQYWdlU0dOb2RlIGlzIGRlbGV0ZWQsIHdoaWNoIGNhbiBiZQorICAgICAgICAg
IGJlZm9yZSBvciBhZnRlciB0aGUgb3duaW5nIERyYXdpbmdBcmVhUHJveHkgaXMgZGVsZXRlZC4g
VGhpcyBlbnN1cmVzIHRoYXQgdGhlIGNsYXNzIGlzCisgICAgICAgICAgZGVsZXRlZCBvbmx5IGFm
dGVyIGl0cyBHTCByZXNvdXJjZXMgYXJlIGZyZWVkLCBvdGhlcndpc2UgdGhvc2UgcmVzb3VyY2Vz
IG1heSBsZWFrLgorCisgICAgICAgIEJhc2VkIG9uIGEgcGF0Y2ggYnkgVmlhdGNoZXNsYXYgT3N0
YXBlbmtvLgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
LgorCisgICAgICAgICogVGFyZ2V0LnByaTogQWRkZWQgbmV3IGZpbGVzLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHA6IE1vdmVkIFF0V2ViUGFnZVNHTm9kZSBv
dXQuCisgICAgICAgIChRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUpOiBDYWxsIFF0V2Vi
UGFnZVNHTm9kZQorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUpOiBD
YWxsIFF0V2ViUGFnZVNHTm9kZQorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OmRpZERl
bGV0ZVNHV2ViUGFnZU5vZGUpOiBPdmVycmlkZSBRdFdlYlBhZ2VTR05vZGU6OkNsaWVudAorICAg
ICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tXZWJQYWdlUHJpdmF0ZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oOgorICAgICAgICAoUVF1
aWNrV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5
Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5
OjpsYXllclRyZWVIb3N0UHJveHkpOiBNYWRlIExheWVyVHJlZUhvc3RQcm94eSByZWYtY291bnRl
ZC4KKyAgICAgICAgKERyYXdpbmdBcmVhUHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9EcmF3
aW5nQXJlYVByb3h5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlJ
bXBsOjpEcmF3aW5nQXJlYVByb3h5SW1wbCk6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVh
UHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChMYXllclRy
ZWVIb3N0UHJveHkpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlR
dC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJl
bnRHTENvbnRleHQpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKE1haW5UaHJlYWRHdWFy
ZGVkSW52b2tlcik6CisgICAgICAgICAgICBBIGNsYXNzIHRoYXQgYWxsb3dzIGludm9raW5nIGZ1
bmN0aW9ucyBpbiB0aGUgbWFpbiB0aHJlYWQsIHdoaWxlIGd1YXJkaW5nIGEgcmVmLQorICAgICAg
ICAgICAgY291bnRlZCBvYmplY3QuCisKKyAgICAgICAgKFdlYktpdDo6TWFpblRocmVhZEd1YXJk
ZWRJbnZva2VyOjpjYWxsKToKKyAgICAgICAgKFdlYktpdDo6TWFpblRocmVhZEd1YXJkZWRJbnZv
a2VyOjpNYWluVGhyZWFkR3VhcmRlZEludm9rZXIpOgorICAgICAgICAoV2ViS2l0OjpNYWluVGhy
ZWFkR3VhcmRlZEludm9rZXI6Omludm9rZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RQcm94eTo6c3luY0FuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHk6OnVwZGF0ZVZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpkZXRhY2hEcmF3aW5nQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQ
cm94eTo6c3luY0xheWVyUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhv
c3RQcm94eTo6c2V0U2hvdWxkUmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpmbHVzaExheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlUm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlSG9zdFByb3h5OjpzeW5jUmVtb3RlQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXll
clRyZWVIb3N0UHJveHk6OmNyZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUdMUmVzb3VyY2VzKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmNwcDogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oOiBBZGRlZC4KKwogMjAxMi0wMy0wMyAgTm8nYW0g
Um9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gVXNl
IHRoZSBleGlzdGluZyBpbmhlcml0ZWRPcGFjaXR5L21hdHJpeCBwcm9wZXJ0aWVzIG9mIFFTR05v
ZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpCmluZGV4IDRiZGIzYzlkOWVkY2FkNGQyNWY5NDFkNDU2NzlkNzk1MzUyY2Nj
M2EuLmMyOGExMmViZTE5MDlkODYwOTc4NGVmOTU4ZGM3ZDdhNzQ0MGZjNGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnBy
aQpAQCAtMjYxLDYgKzI2MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9RdEdl
c3R1cmVSZWNvZ25pemVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25p
emVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaCBcCisg
ICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRU
YXBHZXN0dXJlUmVjb2duaXplci5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5oIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXREaWFsb2dSdW5uZXIuaCBcCkBAIC01OTIsNiArNTkzLDcgQEAg
U09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKKyAgICBVSVByb2Nlc3MvcXQv
UXRXZWJQYWdlU0dOb2RlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0VGFwR2VzdHVyZVJlY29n
bml6ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5jcHAgXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdERpYWxvZ1J1bm5lci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5kZXggZDU4ZmVmZWM4NjkyM2NlMzE3NjM0
YWE4ODMyOTliZGM5ZTFjY2IyYi4uOGU5MTc2M2Q3Mjk0MWJmMTkwNjU3ZTA0NmVlNzUzMjU3ZDQ3
MTBkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnBhZ2UuY3BwCkBAIC0yMywxMyArMjMsMTAgQEAKIAogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQ
cm94eS5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIlF0
V2ViUGFnZVNHTm9kZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5j
bHVkZSAicXF1aWNrd2VicGFnZV9wX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIK
LSNpbmNsdWRlIDxRdFF1aWNrL1FRdWlja0NhbnZhcz4KLSNpbmNsdWRlIDxRdFF1aWNrL1FTR0dl
b21ldHJ5Tm9kZT4KLSNpbmNsdWRlIDxRdFF1aWNrL1FTR01hdGVyaWFsPgotI2luY2x1ZGUgPHBy
aXZhdGUvcXNncmVuZGVybm9kZV9wLmg+CiAKIFFRdWlja1dlYlBhZ2U6OlFRdWlja1dlYlBhZ2Uo
UVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVtKQogICAgIDogUVF1aWNrSXRlbSh2aWV3cG9ydEl0
ZW0pCkBAIC03Nyw1MCArNzQsNiBAQCB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludChR
UGFpbnRlciogcGFpbnRlcikKICAgICAgICAgd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpLT5w
YWludExheWVyVHJlZShwYWludGVyKTsKIH0KIAotdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6
cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgUVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9h
dCBvcGFjaXR5KQotewotICAgIGlmICghcS0+aXNWaXNpYmxlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFFSZWN0RiBjbGlwUmVjdCA9IHZpZXdwb3J0SXRlbS0+bWFwUmVjdFRvU2NlbmUodmll
d3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKSk7Ci0KLSAgICBpZiAoIWNsaXBSZWN0LmlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEg
PSB3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7Ci0gICAgaWYgKCFkcmF3aW5nQXJlYSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZHJhd2luZ0FyZWEtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0
KFFUcmFuc2Zvcm0odHJhbnNmb3JtKS5zY2FsZShjb250ZW50c1NjYWxlLCBjb250ZW50c1NjYWxl
KSwgb3BhY2l0eSwgY2xpcFJlY3QpOwotfQotCi1zdHJ1Y3QgUGFnZVByb3h5Tm9kZSA6IHB1Ymxp
YyBRU0dSZW5kZXJOb2RlIHsKLSAgICBQYWdlUHJveHlOb2RlKFFRdWlja1dlYlBhZ2VQcml2YXRl
KiBwYWdlKQotICAgICAgICA6IG1fcGFnZVByaXZhdGUocGFnZSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCBTdGF0ZUZsYWdzIGNoYW5nZWRTdGF0ZXMoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIFN0YXRlRmxhZ3MoU3RlbmNpbFN0YXRlKSB8IENvbG9yU3RhdGUgfCBCbGVuZFN0YXRlOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZW5kZXIoY29uc3QgUmVuZGVyU3RhdGUmKQotICAg
IHsKLSAgICAgICAgaWYgKCFtX3BhZ2VQcml2YXRlKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBRVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1hdHJpeCgpID8gbWF0cml4KCktPnRvVHJhbnNm
b3JtKCkgOiBRVHJhbnNmb3JtKCk7Ci0gICAgICAgIG1fcGFnZVByaXZhdGUtPnBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KHRyYW5zZm9ybSwgaW5oZXJpdGVkT3BhY2l0eSgpKTsKLSAgICB9Ci0KLSAg
ICB+UGFnZVByb3h5Tm9kZSgpCi0gICAgewotICAgICAgICBpZiAobV9wYWdlUHJpdmF0ZSkKLSAg
ICAgICAgICAgIG1fcGFnZVByaXZhdGUtPnJlc2V0UGFpbnROb2RlKCk7Ci0gICAgfQotCi0gICAg
UVF1aWNrV2ViUGFnZVByaXZhdGUqIG1fcGFnZVByaXZhdGU7Ci19OwogCiBRU0dOb2RlKiBRUXVp
Y2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSwgVXBkYXRlUGFpbnRO
b2RlRGF0YSopCiB7CkBAIC0xMzAsMTMgKzgzLDE2IEBAIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6
OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUGFnZVByb3h5Tm9kZSogcHJveHlOb2Rl
ID0gc3RhdGljX2Nhc3Q8UGFnZVByb3h5Tm9kZSo+KG9sZE5vZGUpOwotICAgIGlmICghcHJveHlO
b2RlKSB7Ci0gICAgICAgIHByb3h5Tm9kZSA9IG5ldyBQYWdlUHJveHlOb2RlKGQpOwotICAgICAg
ICBkLT5tX3BhaW50Tm9kZSA9IHByb3h5Tm9kZTsKKyAgICBRdFdlYlBhZ2VTR05vZGUqIHNjZW5l
Tm9kZSA9IHN0YXRpY19jYXN0PFF0V2ViUGFnZVNHTm9kZSo+KG9sZE5vZGUpOworICAgIGlmIChz
Y2VuZU5vZGUpCisgICAgICAgIHJldHVybiBzY2VuZU5vZGU7CisgICAgc2NlbmVOb2RlID0gbmV3
IFF0V2ViUGFnZVNHTm9kZShkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJl
ZUhvc3RQcm94eSgpLCBkKTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2soZC0+bV9w
YWludE5vZGVNdXRleCk7CisgICAgICAgIGQtPm1fcGFpbnROb2RlID0gc2NlbmVOb2RlOwogICAg
IH0KLQotICAgIHJldHVybiBwcm94eU5vZGU7CisgICAgZC0+dXBkYXRlU2l6ZSgpOworICAgIHJl
dHVybiBzY2VuZU5vZGU7CiB9CiAKIFF0V2ViUGFnZUV2ZW50SGFuZGxlciogUVF1aWNrV2ViUGFn
ZTo6ZXZlbnRIYW5kbGVyKCkgY29uc3QKQEAgLTE4OCwyMCArMTQ0LDIzIEBAIHZvaWQgUVF1aWNr
V2ViUGFnZVByaXZhdGU6OnVwZGF0ZVNpemUoKQogICAgIFFTaXplRiBzY2FsZWRTaXplID0gY29u
dGVudHNTaXplICogY29udGVudHNTY2FsZTsKICAgICBxLT5zZXRTaXplKHNjYWxlZFNpemUpOwog
ICAgIHZpZXdwb3J0SXRlbS0+dXBkYXRlQ29udGVudHNTaXplKHNjYWxlZFNpemUpOworICAgIFFS
ZWN0RiBjbGlwUmVjdCA9IHZpZXdwb3J0SXRlbS0+bWFwUmVjdFRvU2NlbmUodmlld3BvcnRJdGVt
LT5ib3VuZGluZ1JlY3QoKSk7CisKKyAgICBNdXRleExvY2tlciBsb2NrKG1fcGFpbnROb2RlTXV0
ZXgpOworICAgIGlmICghbV9wYWludE5vZGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX3BhaW50
Tm9kZS0+c2V0Q2xpcFJlY3QoY2xpcFJlY3QpOworICAgIG1fcGFpbnROb2RlLT5zZXRDb250ZW50
c1NjYWxlKGNvbnRlbnRzU2NhbGUpOwogfQogCi12b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpy
ZXNldFBhaW50Tm9kZSgpCit2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjp3aWxsRGVsZXRlU2Nl
bmVncmFwaE5vZGUoKQogeworICAgIE11dGV4TG9ja2VyIGxvY2sobV9wYWludE5vZGVNdXRleCk7
CiAgICAgbV9wYWludE5vZGUgPSAwOwotICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVh
ID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwotICAgIGlmIChkcmF3aW5nQXJlYSAmJiBk
cmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCkpCi0gICAgICAgIGRyYXdpbmdBcmVhLT5s
YXllclRyZWVIb3N0UHJveHkoKS0+cHVyZ2VHTFJlc291cmNlcygpOwogfQogCiBRUXVpY2tXZWJQ
YWdlUHJpdmF0ZTo6flFRdWlja1dlYlBhZ2VQcml2YXRlKCkKIHsKLSAgICBpZiAobV9wYWludE5v
ZGUpCi0gICAgICAgIHN0YXRpY19jYXN0PFBhZ2VQcm94eU5vZGUqPihtX3BhaW50Tm9kZSktPm1f
cGFnZVByaXZhdGUgPSAwOwogfQogCiAjaW5jbHVkZSAibW9jX3FxdWlja3dlYnBhZ2VfcC5jcHAi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBh
Z2VfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2Vf
cF9wLmgKaW5kZXggZmE3ZDY4Y2VkMTVlM2FmN2UxMjFjMThmMTc1ZDcyMDNjZTI4Y2EwNS4uNWFj
OTRlOTU0YzNkNWY1NDJhZDdlNjJmZmY0ZGJjYTJlYmNkZTMyMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaApAQCAtMjEsNiAr
MjEsNyBAQAogI2lmbmRlZiBxcXVpY2t3ZWJwYWdlX3BfcF9oCiAjZGVmaW5lIHFxdWlja3dlYnBh
Z2VfcF9wX2gKIAorI2luY2x1ZGUgIlF0V2ViUGFnZVNHTm9kZS5oIgogI2luY2x1ZGUgInFxdWlj
a3dlYnBhZ2VfcC5oIgogI2luY2x1ZGUgPFFUcmFuc2Zvcm0+CiAKQEAgLTMxLDE3ICszMiwxNiBA
QCBjbGFzcyBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU7CiAKIGNsYXNzIFF0V2ViUGFnZUV2
ZW50SGFuZGxlcjsKIAotY2xhc3MgUVF1aWNrV2ViUGFnZVByaXZhdGUgeworY2xhc3MgUVF1aWNr
V2ViUGFnZVByaXZhdGUgOiBwdWJsaWMgUXRXZWJQYWdlU0dOb2RlOjpDbGllbnQgewogcHVibGlj
OgogICAgIFFRdWlja1dlYlBhZ2VQcml2YXRlKFFRdWlja1dlYlBhZ2UqIHEsIFFRdWlja1dlYlZp
ZXcqIHZpZXdwb3J0SXRlbSk7CiAgICAgflFRdWlja1dlYlBhZ2VQcml2YXRlKCk7CisgICAgdmly
dHVhbCB2b2lkIHdpbGxEZWxldGVTY2VuZWdyYXBoTm9kZSgpOwogCiAgICAgdm9pZCBpbml0aWFs
aXplKFdlYktpdDo6V2ViUGFnZVByb3h5Kik7CiAgICAgdm9pZCBzZXREcmF3aW5nQXJlYVNpemUo
Y29uc3QgUVNpemUmKTsKIAogICAgIHZvaWQgdXBkYXRlU2l6ZSgpOwotCi0gICAgdm9pZCBwYWlu
dFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBRVHJhbnNmb3JtJiwgZmxvYXQgb3BhY2l0eSk7CiAg
ICAgdm9pZCBwYWludChRUGFpbnRlciopOwogICAgIHZvaWQgcmVzZXRQYWludE5vZGUoKTsKIApA
QCAtNTAsNyArNTAsOCBAQCBwdWJsaWM6CiAgICAgUVF1aWNrV2ViVmlldyogY29uc3Qgdmlld3Bv
cnRJdGVtOwogICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHk7CiAgICAgYm9v
bCBwYWludGluZ0lzSW5pdGlhbGl6ZWQ7Ci0gICAgUVNHTm9kZSogbV9wYWludE5vZGU7CisgICAg
UXRXZWJQYWdlU0dOb2RlKiBtX3BhaW50Tm9kZTsKKyAgICBNdXRleCBtX3BhaW50Tm9kZU11dGV4
OwogCiAgICAgUVNpemVGIGNvbnRlbnRzU2l6ZTsKICAgICBxcmVhbCBjb250ZW50c1NjYWxlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggOTAwMWFj
YjY5Mjc1YTFjMjg1ZGNkNDZkZGIwZWI5N2FjODNlOGQ2MC4uOWNkMDgzYmQzOWJlN2IwNzQ1Mjcy
ODRhZjMxZTFiOThiMDZiNWNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0RyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eS5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJCYWNraW5nU3RvcmUu
aCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKKyNpbmNsdWRlICJMYXllclRyZWVIb3N0
UHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ludFNpemUuaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KQEAgLTU0LDcgKzU1LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIExheWVyVHJlZUNvbnRl
eHQ7Ci1jbGFzcyBMYXllclRyZWVIb3N0UHJveHk7CiBjbGFzcyBVcGRhdGVJbmZvOwogY2xhc3Mg
V2ViTGF5ZXJUcmVlSW5mbzsKIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKQEAgLTkwLDcgKzkw
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tpbmdTdG9yZVJlYWR5KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludFRvQ3VycmVudEdMQ29u
dGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRMYXllclRyZWUo
QmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkgeyB9Ci0gICAgTGF5ZXJUcmVl
SG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJl
ZUhvc3RQcm94eS5nZXQoKTsgfQorICAgIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBs
YXllclRyZWVIb3N0UHJveHkoKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJlZUhvc3RQcm94eTsg
fQogICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCBzY2FsZSkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RGb3JQYW5uaW5nKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVU
aWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRl
SW5mbyYpIHsgfQpAQCAtMTEwLDcgKzExMCw3IEBAIHByb3RlY3RlZDoKICAgICBXZWJDb3JlOjpJ
bnRTaXplIG1fc2Nyb2xsT2Zmc2V0OwogCiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCi0g
ICAgT3duUHRyPExheWVyVHJlZUhvc3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7CisgICAg
UmVmUHRyPExheWVyVHJlZUhvc3RQcm94eT4gbV9sYXllclRyZWVIb3N0UHJveHk7CiAjZW5kaWYK
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5n
QXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eUltcGwuY3BwCmluZGV4IGMwZDA0NGJmODkyYTNhZjUyMzUyM2M3NDM0NTgzMGEzOWEwNWJh
YmQuLmE1ZGMzYTlmM2U2NDRjMzVjZjljZjcxMTA0ZmE4ZTNhNTdmNjlhYWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcApAQCAtNjEs
NyArNjEsNyBAQCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6RHJhd2luZ0FyZWFQcm94eUltcGwoV2Vi
UGFnZVByb3h5KiB3ZWJQYWdlUHJveHkpCiAjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCiAg
ICAgLy8gQ29uc3RydWN0IHRoZSBwcm94eSBlYXJseSB0byBhbGxvdyBtZXNzYWdlcyB0byBiZSBz
ZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyB3aGlsZSBBQyBpcyBlbnRlcmVkIHRoZXJlLgogICAgIGlm
ICh3ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5mb3JjZUNvbXBvc2l0
aW5nTW9kZSgpKQotICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eSA9IGFkb3B0UHRyKG5ldyBM
YXllclRyZWVIb3N0UHJveHkodGhpcykpOworICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eSA9
IExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlKHRoaXMpOwogI2VuZGlmCiB9CiAKQEAgLTMzNyw3
ICszMzcsNyBAQCB2b2lkIERyYXdpbmdBcmVhUHJveHlJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleAogICAgIG1fd2ViUGFnZVByb3h5LT5l
bnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOwogI2lmIFVT
RShVSV9TSURFX0NPTVBPU0lUSU5HKQogICAgIGlmICghbV9sYXllclRyZWVIb3N0UHJveHkpCi0g
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IExheWVyVHJlZUhvc3RQ
cm94eSh0aGlzKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5ID0gTGF5ZXJUcmVlSG9z
dFByb3h5OjpjcmVhdGUodGhpcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCmluZGV4IGIzZDUxMmYxYmFlNjRiYTdjMGQzZTI4
NTYxZGY3Zjg1OTgyM2EyZmQuLjQyMmRlYzgyOTk3YTJiNGM4OTMyYmQzNTk1NWExZWJlZGNjYzJh
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgK
QEAgLTIzLDcgKzIzLDcgQEAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykKIAogI2luY2x1
ZGUgIkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKKyNpbmNs
dWRlICJDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKQEAgLTM2
LDE3ICszNiwxNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KICNpbmNsdWRlIDx3dGYv
RnVuY3Rpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nUHJpbWl0aXZlcy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgRHJh
d2luZ0FyZWFQcm94eTsKIGNsYXNzIExheWVyQmFja2luZ1N0b3JlOwogY2xhc3MgV2ViTGF5ZXJJ
bmZvOwogY2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOwogCi1jbGFzcyBMYXllclRyZWVIb3N0UHJv
eHkgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitjbGFzcyBMYXllclRy
ZWVIb3N0UHJveHkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TGF5ZXJUcmVlSG9zdFBy
b3h5PiwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgewogcHVibGljOgotICAg
IExheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5Kik7CiAgICAgdmlydHVhbCB+TGF5
ZXJUcmVlSG9zdFByb3h5KCk7CiAgICAgdm9pZCBzeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKGNv
bnN0IFdlYkxheWVySW5mbyYpOwogICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJM
YXllcklEKTsKQEAgLTY4LDYgKzY4LDggQEAgcHVibGljOgogICAgIHZvaWQgZGlkUmVjZWl2ZUxh
eWVyVHJlZUhvc3RQcm94eU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1l
c3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CiAgICAgdm9pZCB1cGRhdGVWaWV3
cG9ydCgpOwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJUcmVlSG9zdFByb3h5PiBjcmVh
dGUoRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBM
YXllclRyZWVIb3N0UHJveHkoZHJhd2luZ0FyZWEpKTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgUGFz
c093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVMYXllcihXZWJMYXllcklEKTsK
IApAQCAtODgsNyArOTAsMTAgQEAgcHJvdGVjdGVkOgogICAgIGZsb2F0IG1fY29udGVudHNTY2Fs
ZTsKIAogICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1ZTsKKyAgICBX
VEY6Ok11dGV4IG1fcmVuZGVyUXVldWVNdXRleDsKICAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIGRldGFjaERyYXdpbmdBcmVhKCk7Cisg
ICAgdm9pZCBzZXRTaG91bGRSZW5kZXJOZXh0RnJhbWUoKTsKIAogI2lmIFVTRShURVhUVVJFX01B
UFBFUikKICAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVy
OwpAQCAtMTEzLDEzICsxMTgsMTQgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZW5zdXJlTGF5ZXIo
V2ViTGF5ZXJJRCk7CiAgICAgdm9pZCBzd2FwQnVmZmVycygpOwogICAgIHZvaWQgc3luY0FuaW1h
dGlvbnMoKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0T25NYWluVGhyZWFkKCk7CisgICAgTGF5
ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKIAogICAgIE93blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKICAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9s
YXllcnNUb0RlbGV0ZTsKIAogICAgIExheWVyTWFwIG1fbGF5ZXJzOwogICAgIFdlYkxheWVySUQg
bV9yb290TGF5ZXJJRDsKLSAgICBpbnQgbV9pZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCmluZGV4IDIxZmI5
OTU0YzU0ZGNhYWUzNDM3ZDY4M2MxZDk3YTUwNmQwODIyYmIuLmI1ZDMzOTI0MGExM2Q5YzU3YmZi
N2JjYjEyZjIxMzcxOGI4MmU3MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApAQCAtOTUsNiArOTUsMzIgQEAgdm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXQKICAgICBzeW5jQW5pbWF0aW9ucygpOwogfQogCit0ZW1wbGF0ZTxj
bGFzcyBUPgorY2xhc3MgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgdm9pZCBjYWxsKFBhc3NSZWZQdHI8VD4gb2JqZWN0VG9HdWFyZCwgY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgeworICAgICAgICBNYWluVGhyZWFkR3VhcmRlZElu
dm9rZXI8VD4qIGludm9rZXIgPSBuZXcgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyPFQ+KG9iamVj
dFRvR3VhcmQsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChpbnZva2UsIGlu
dm9rZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNYWluVGhyZWFkR3VhcmRlZEludm9rZXIo
UGFzc1JlZlB0cjxUPiBvYmplY3QsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIG5ld0Z1bmN0aW9u
KQorICAgICAgICA6IG9iamVjdFRvR3VhcmQob2JqZWN0KQorICAgICAgICAsIGZ1bmN0aW9uKG5l
d0Z1bmN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8VD4gb2JqZWN0VG9HdWFyZDsK
KyAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uOworICAgIHN0YXRpYyB2b2lkIGludm9rZSh2
b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyPFQ+KiBp
bnZva2VyID0gc3RhdGljX2Nhc3Q8TWFpblRocmVhZEd1YXJkZWRJbnZva2VyPFQ+Kj4oZGF0YSk7
CisgICAgICAgIGludm9rZXItPmZ1bmN0aW9uKCk7CisgICAgICAgIGRlbGV0ZSBpbnZva2VyOwor
ICAgIH0KK307CisKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQW5pbWF0aW9ucygpCiB7
CiAgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJv
b3RMYXllcigpKTsKQEAgLTEwMiw3ICsxMjgsNyBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
c3luY0FuaW1hdGlvbnMoKQogCiAgICAgbGF5ZXItPnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHko
KTsKICAgICBpZiAobGF5ZXItPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25z
KCkpCi0gICAgICAgIHVwZGF0ZVZpZXdwb3J0KCk7CisgICAgICAgIE1haW5UaHJlYWRHdWFyZGVk
SW52b2tlcjxMYXllclRyZWVIb3N0UHJveHk+OjpjYWxsKHRoaXMsIGJpbmQoJkxheWVyVHJlZUhv
c3RQcm94eTo6dXBkYXRlVmlld3BvcnQsIHRoaXMpKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoUVBhaW50ZXIqIHBhaW50ZXIpCkBAIC0xMjcs
NyArMTUzLDEzIEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvR3JhcGhpY3NDb250
ZXh0KFFQYWludGVyKiBwYWludGVyKQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRl
Vmlld3BvcnQoKQogewotICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsK
KyAgICBpZiAobV9kcmF3aW5nQXJlYVByb3h5KQorICAgICAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXRhY2hE
cmF3aW5nQXJlYSgpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5ID0gMDsKIH0KIAogdm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZv
JiBsYXllckluZm8pCkBAIC0xODUsMTEgKzIxNywxNCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6c3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJMYXllckluZm8mIGxheWVySW5mbykKICAg
ICAgICAgY2FzZSBXZWJLaXQ6OldlYkxheWVyQW5pbWF0aW9uOjpSZW1vdmVBbmltYXRpb246CiAg
ICAgICAgICAgICBsYXllci0+cmVtb3ZlQW5pbWF0aW9uKGFuaW0ubmFtZSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBXZWJLaXQ6OldlYkxheWVyQW5pbWF0aW9uOjpQYXVzZUFu
aW1hdGlvbjoKKyAgICAgICAgY2FzZSBXZWJLaXQ6OldlYkxheWVyQW5pbWF0aW9uOjpQYXVzZUFu
aW1hdGlvbjogewogICAgICAgICAgICAgZG91YmxlIG9mZnNldCA9IFdURjo6Y3VycmVudFRpbWUo
KSAtIGFuaW0uc3RhcnRUaW1lOwogICAgICAgICAgICAgbGF5ZXItPnBhdXNlQW5pbWF0aW9uKGFu
aW0ubmFtZSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlm
IChsYXllckluZm8uaXNSb290TGF5ZXIgJiYgbV9yb290TGF5ZXJJRCAhPSBpZCkKQEAgLTI5NSwx
MyArMzMwLDE3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpzd2FwQnVmZmVycygpCiAgICAg
bV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CiB9CiAKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRTaG91bGRSZW5kZXJOZXh0RnJhbWUoKQoreworICAgIC8vIFRo
ZSBwZW5kaW5nIHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgdG8gdGhlIHNjcmVlbiwgdGVsbCB0
aGUgd2ViIHByb2Nlc3MgdG8gcmVuZGVyIHRoZSBuZXh0IG9uZS4KKyAgICBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpS
ZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsK
K30KKwogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKIHsKICAg
ICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOwogICAgIHN3
YXBCdWZmZXJzKCk7Ci0KLSAgICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMg
d2F5IGZvciB0aGUgc2NyZWVuLCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5l
eHQgb25lLgotICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQo
TWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxM
YXllclRyZWVIb3N0UHJveHk+OjpjYWxsKHRoaXMsIGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6
c2V0U2hvdWxkUmVuZGVyTmV4dEZyYW1lLCB0aGlzKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjplbnN1cmVSb290TGF5ZXIoKQpAQCAtMzE1LDE0ICszNTQsMTMgQEAgdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcigpCiAKICAgICAvLyBUaGUgcm9vdCBsYXll
ciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0
LgogICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOwotICAgIGlm
ICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFw
cGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CiAgICAgdG9UZXh0dXJlTWFw
cGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1h
cHBlci5nZXQoKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jUmVtb3RlQ29u
dGVudCgpCiB7CiAgICAgLy8gV2UgZW5xdWV1ZSBtZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVtIGR1
cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJlIGFuIGFjdGl2ZSBHTCBjb250ZXh0LgorICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3JlbmRlclF1ZXVlTXV0ZXgpOwogICAgIGVuc3VyZVJvb3RMYXll
cigpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlbmRlclF1ZXVlLnNpemUoKTsg
KytpKQpAQCAtMzMzLDYgKzM3MSw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jUmVt
b3RlQ29udGVudCgpCiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkaXNwYXRjaFVwZGF0ZShj
b25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKIHsKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV9yZW5kZXJRdWV1ZU11dGV4KTsKICAgICBtX3JlbmRlclF1ZXVlLmFwcGVuZChmdW5jdGlv
bik7CiAgICAgdXBkYXRlVmlld3BvcnQoKTsKIH0KQEAgLTM1Nyw3ICszOTYsNiBAQCB2b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGls
ZUlEKQogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6cmVtb3Zl
VGlsZSwgdGhpcywgbGF5ZXJJRCwgdGlsZUlEKSk7CiB9CiAKLQogdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKIHsKICAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUxheWVyLCB0aGlzLCBp
ZCkpOwpAQCAtMzgwLDYgKzQxOCw3IEBAIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5k
ZXJGcmFtZSgpCiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSYgaGFuZGxlKQogeworICAgIC8vIEV2ZW4gdGhvdWdoIFNoYXJlYWJsZUJpdG1hcCBpcyBu
b3QgVGhyZWFkU2FmZVJlZkNvdW50ZWQsIHdlIGNhbiBzYWZlbHkgbW92ZSBpdCB0byB0aGUgcmVu
ZGVyZXIgdGhyZWFkIGFzIHRoZSBtYWluIHRocmVhZCB3aWxsIG5vdCB0b3VjaCBpdCBhbnltb3Jl
LgogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlKGhhbmRsZSk7CiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFBy
b3h5OjpjcmVhdGVJbWFnZSwgdGhpcywga2V5LCBiaXRtYXApKTsKIH0KQEAgLTQwMyw2ICs0NDIs
OCBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvclNj
YWxpbmcoY29uc3QgSW50UmVjdCYgcmVjdCwgZgogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
cHVyZ2VHTFJlc291cmNlcygpCiB7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVyUXVl
dWVNdXRleCk7CisgICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOwogICAgIFRleHR1cmVNYXBwZXJM
YXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7CiAKICAgICBp
ZiAobGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlU0dOb2RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05v
ZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM0NmY3M2M4ZGY1MjI3MGQ4NTZiOTRlZTdhZjdkZDQyNDQ5MDdh
YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlU0dOb2RlLmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlF0V2ViUGFnZVNHTm9kZS5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworUXRXZWJQYWdlU0dOb2RlOjpRdFdlYlBhZ2VTR05vZGUoUGFzc1JlZlB0cjxM
YXllclRyZWVIb3N0UHJveHk+IGxheWVyVHJlZUhvc3QsIENsaWVudCogY2xpZW50KQorICAgIDog
bV9sYXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisg
ICAgLCBtX2NvbnRlbnRzU2NhbGUoMSkKK3sKK30KKworUVNHUmVuZGVyTm9kZTo6U3RhdGVGbGFn
cyBRdFdlYlBhZ2VTR05vZGU6OmNoYW5nZWRTdGF0ZXMoKQoreworICAgIHJldHVybiBTdGF0ZUZs
YWdzKFN0ZW5jaWxTdGF0ZSkgfCBDb2xvclN0YXRlIHwgQmxlbmRTdGF0ZTsKK30KKwordm9pZCBR
dFdlYlBhZ2VTR05vZGU6OnJlbmRlcihjb25zdCBSZW5kZXJTdGF0ZSYgc3RhdGUpCit7CisgICAg
UVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtYXRyaXgoKSA/IG1hdHJpeCgpLT50b1RyYW5zZm9ybSgp
IDogUVRyYW5zZm9ybSgpOworICAgIGZsb2F0IHNjYWxlID0gY29udGVudHNTY2FsZSgpOworICAg
IG1fbGF5ZXJUcmVlSG9zdC0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoUVRyYW5zZm9ybSh0cmFu
c2Zvcm0pLnNjYWxlKHNjYWxlLCBzY2FsZSksIGluaGVyaXRlZE9wYWNpdHkoKSwgY2xpcFJlY3Qo
KSk7Cit9CisKK3ZvaWQgUXRXZWJQYWdlU0dOb2RlOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNj
YWxlKQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgbV9jb250ZW50c1Nj
YWxlID0gc2NhbGU7Cit9CisKK2Zsb2F0IFF0V2ViUGFnZVNHTm9kZTo6Y29udGVudHNTY2FsZSgp
Cit7CisgICAgTXV0ZXhMb2NrZXIgbG9jayhtX211dGV4KTsKKyAgICByZXR1cm4gbV9jb250ZW50
c1NjYWxlOworfQorCit2b2lkIFF0V2ViUGFnZVNHTm9kZTo6c2V0Q2xpcFJlY3QoY29uc3QgUVJl
Y3RGJiByZWN0KQoreworICAgIE11dGV4TG9ja2VyIGxvY2sobV9tdXRleCk7CisgICAgbV9jbGlw
UmVjdCA9IHJlY3Q7Cit9CisKK1FSZWN0RiBRdFdlYlBhZ2VTR05vZGU6OmNsaXBSZWN0KCkKK3sK
KyAgICBNdXRleExvY2tlciBsb2NrKG1fbXV0ZXgpOworICAgIHJldHVybiBtX2NsaXBSZWN0Owor
fQorCitRdFdlYlBhZ2VTR05vZGU6On5RdFdlYlBhZ2VTR05vZGUoKQoreworICAgIGlmIChtX2xh
eWVyVHJlZUhvc3QpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cHVyZ2VHTFJlc291cmNlcygp
OworCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+d2lsbERlbGV0ZVNjZW5l
Z3JhcGhOb2RlKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VTR05vZGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdl
YlBhZ2VTR05vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzcyZTRhNDY5ODE2MGJkODFiNjNkYmU5MGIzZjdj
YWU5NzgwZDFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZVNHTm9kZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aWZuZGVmIFF0V2ViUGFnZVNHTm9kZV9oCisjZGVmaW5lIFF0V2ViUGFnZVNHTm9kZV9oCisKKyNp
bmNsdWRlICJMYXllclRyZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRlIDxwcml2YXRlL3FzZ3JlbmRl
cm5vZGVfcC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFF0V2ViUGFnZVNHTm9k
ZSA6IHB1YmxpYyBRU0dSZW5kZXJOb2RlIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ2xpZW50IHsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxEZWxldGVTY2VuZWdyYXBoTm9kZSgpIHsgfQorICAg
IH07CisKKyAgICBRdFdlYlBhZ2VTR05vZGUoUGFzc1JlZlB0cjxMYXllclRyZWVIb3N0UHJveHk+
LCBDbGllbnQqKTsKKyAgICB+UXRXZWJQYWdlU0dOb2RlKCk7CisgICAgdmlydHVhbCBTdGF0ZUZs
YWdzIGNoYW5nZWRTdGF0ZXMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyKGNvbnN0IFJlbmRl
clN0YXRlJik7CisgICAgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KTsKKyAgICBmbG9hdCBj
b250ZW50c1NjYWxlKCk7CisgICAgdm9pZCBzZXRDbGlwUmVjdChjb25zdCBRUmVjdEYmKTsKKyAg
ICBRUmVjdEYgY2xpcFJlY3QoKTsKKworcHJpdmF0ZToKKyAgICBSZWZQdHI8TGF5ZXJUcmVlSG9z
dFByb3h5PiBtX2xheWVyVHJlZUhvc3Q7CisgICAgQ2xpZW50KiBtX2NsaWVudDsKKyAgICBmbG9h
dCBtX2NvbnRlbnRzU2NhbGU7CisgICAgUVJlY3RGIG1fY2xpcFJlY3Q7CisgICAgTXV0ZXggbV9t
dXRleDsKK307CisKK30KKyNlbmRpZiAvKiBRdFdlYlBhZ2VTR05vZGVfaCAqLwpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY2NjNiOTQwYmMwMjZm
NTYyYTFhYjRlMzFmNjNmMzU3YTFlNTAxMGEuLjE3MjM3ZjQ5Yzc3N2UwNDg3YThlNGFjNjk2YmQy
MzlkYmYyZTMxYjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0wNCAgTm8nYW0gUm9zZW50aGFsICA8bm9h
bS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFtRdF0gW1dLMl0gU3VwcG9ydCB0aHJl
YWRlZCByZW5kZXJlciBpbiBXSzIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc2NjYxCisKKyAgICAgICAgUmVtb3ZlIHRoZSBRTUxfTk9fVEhSRUFERURf
UkVOREVSRVIgZW52aXJvbm1lbnQgdmFyaWFibGUgZnJvbSBNaW5pQnJvd3Nlci4KKworICAgICAg
ICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KKworICAgICAgICAqIE1p
bmlCcm93c2VyL3F0L21haW4uY3BwOgorICAgICAgICAobWFpbik6CisKIDIwMTItMDMtMDIgIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGNvbW1pdCBx
dWV1ZSwgcmVtb3ZlIGR1cGxpY2F0ZSBlbnRyeS4KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93
c2VyL3F0L21haW4uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAKaW5kZXggZmVh
ZTE0YWRlZjM4ZjU1YzYwMjBmNGZiZDYxNDQxYmY5OTA1OGUyOC4uMzY2Mzc3M2FiMmQ4MTM3YjU3
MTllNzVmMDA5M2I5MDNjZmMzZTUxYyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQv
bWFpbi5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAKQEAgLTM5LDkgKzM5
LDYgQEAKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIC8vIEZJWE1F
OiBXZSBtdXN0IGFkZCBzdXBwb3J0IGZvciB0aGUgdGhyZWFkZWQgcmVuZGVyaW5nIGFzIGl0IGlz
IHRoZSBkZWZhdWx0LgotICAgIHFwdXRlbnYoIlFNTF9OT19USFJFQURFRF9SRU5ERVJFUiIsIFFC
eXRlQXJyYXkoIjEiKSk7Ci0KICAgICBNaW5pQnJvd3NlckFwcGxpY2F0aW9uIGFwcChhcmdjLCBh
cmd2KTsKIAogICAgIGlmIChhcHAuaXNSb2JvdGl6ZWQoKSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130973</attachid>
            <date>2012-03-08 21:19:28 -0800</date>
            <delta_ts>2012-03-09 20:58:02 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>ThreadedPainting_01.diff</filename>
            <type>text/plain</type>
            <size>61219</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZGU4YTg3Li40ODIyZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTItMDMtMDggIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hl
c2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVkIHJl
bmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgY29udmVyc2lvbnMgZnJvbS90byBRdCBRTWF0cml4NHg0IC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIFFNYXRyaXg0eDQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6VHJhbnNmb3JtYXRpb25NYXRyaXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKFRyYW5zZm9ybWF0aW9u
TWF0cml4KToKKwogMjAxMi0wMy0wNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0Lmh0bWwg
aXMgZmxha3kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAKaW5kZXggNmE1NzM1Yi4uN2ZmNDMy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNm
b3JtYXRpb25NYXRyaXhRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAKQEAgLTUwLDYgKzUwLDIyIEBAIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBRVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCiAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tMzEoKSwgdHJhbnNmb3JtLm0zMigp
LCAwLCB0cmFuc2Zvcm0ubTMzKCkpOwogfQogCitUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0
b3IgUU1hdHJpeDR4NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFNYXRyaXg0eDQobTExKCksIG0x
MigpLCBtMTMoKSwgbTE0KCksCisgICAgICAgICAgICAgICAgICAgICAgbTIxKCksIG0yMigpLCBt
MjMoKSwgbTI0KCksCisgICAgICAgICAgICAgICAgICAgICAgbTMxKCksIG0zMigpLCBtMzMoKSwg
bTM0KCksCisgICAgICAgICAgICAgICAgICAgICAgbTQxKCksIG00MigpLCBtNDMoKSwgbTQ0KCkp
OworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3Qg
UU1hdHJpeDR4NCYgbWF0cml4KQoreworICAgIHNldE1hdHJpeChtYXRyaXgoMCwgMCksIG1hdHJp
eCgxLCAwKSwgbWF0cml4KDIsIDApLCBtYXRyaXgoMywgMCksCisgICAgICAgICAgICAgIG1hdHJp
eCgwLCAxKSwgbWF0cml4KDEsIDEpLCBtYXRyaXgoMiwgMSksIG1hdHJpeCgzLCAxKSwKKyAgICAg
ICAgICAgICAgbWF0cml4KDAsIDIpLCBtYXRyaXgoMSwgMiksIG1hdHJpeCgyLCAyKSwgbWF0cml4
KDMsIDIpLAorICAgICAgICAgICAgICBtYXRyaXgoMCwgMyksIG1hdHJpeCgxLCAzKSwgbWF0cml4
KDIsIDMpLCBtYXRyaXgoMywgMykpOworfQorCiB9CiAKIC8vIHZpbTogdHM9NCBzdz00IGV0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Ry
YW5zZm9ybWF0aW9uTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKaW5kZXggYTk4ZDcwZS4uNzY1ZTc4MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaApAQCAtNDEsNiArNDEsNyBAQCB0
eXBlZGVmIHN0cnVjdCBDR0FmZmluZVRyYW5zZm9ybSBDR0FmZmluZVRyYW5zZm9ybTsKICNlbGlm
IFBMQVRGT1JNKE9QRU5WRykKICNpbmNsdWRlICJWR1V0aWxzLmgiCiAjZWxpZiBQTEFURk9STShR
VCkKKyNpbmNsdWRlIDxRTWF0cml4NHg0PgogI2luY2x1ZGUgPFFUcmFuc2Zvcm0+CiAjZWxpZiBV
U0UoU0tJQSkKICNpbmNsdWRlIDxTa01hdHJpeC5oPgpAQCAtODIsNiArODMsNyBAQCBwdWJsaWM6
CiAKICNpZiBQTEFURk9STShRVCkKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBRVHJh
bnNmb3JtJik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgUU1hdHJpeDR4NCYpOwog
I2VuZGlmCiAKICAgICB2b2lkIHNldE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBj
LCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQpAQCAtMzI4LDYgKzMzMCw3IEBAIHB1Ymxp
YzoKICAgICBvcGVyYXRvciBWR01hdHJpeCgpIGNvbnN0OwogI2VsaWYgUExBVEZPUk0oUVQpCiAg
ICAgb3BlcmF0b3IgUVRyYW5zZm9ybSgpIGNvbnN0OworICAgIG9wZXJhdG9yIFFNYXRyaXg0eDQo
KSBjb25zdDsKICNlbGlmIFVTRShTS0lBKQogICAgIG9wZXJhdG9yIFNrTWF0cml4KCkgY29uc3Q7
CiAjZWxpZiBQTEFURk9STShXWCkgJiYgVVNFKFdYR0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzNmYWU4MC4u
ZWM2OTcwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNSBAQAorMjAxMi0wMy0wOCAgVmlhdGNo
ZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAg
ICAgICBbUXRdIFtXSzJdIFN1cHBvcnQgdGhyZWFkZWQgcmVuZGVyZXIgaW4gV0syCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBRdDUgdGhy
ZWFkZWQgcmVuZGVyaW5nIHN1cHBvcnQgZm9yIFF0IFdlYktpdDIuCisgICAgICAgIFBhcnRzIG9m
IExheWVyVHJlZUhvc3RQcm94eSB3aGljaCBjb250YWluIGxheWVyIHRyZWUgYW5kIGxheWVyIHRy
ZWUgCisgICAgICAgIHBhaW50aW5nIG9iamVjdHMgYXJlIG1vdmVkIHRvIHNlcGFyYXRlIGNsYXNz
IExheWVyVHJlZVBhaW50RGF0YS4gCisgICAgICAgIExheWVyVHJlZVBhaW50RGF0YSBpcyB0aHJl
YWQgc2FmZSByZWYgY291bnRlZCBhbmQgcmVmZXJlbmNlZCAKKyAgICAgICAgYnkgTGF5ZXJUcmVl
SG9zdFByb3h5IGFuZCBwYWludCBub2RlLgorICAgICAgICBBbGwgbGF5ZXIgdHJlZSBhbmQgZ3Jh
cGhpY3Mgb2JqZWN0cyBhcmUgY3JlYXRlZCwgYWNjZXNzZWQgYW5kIGRlYWxsb2NhdGVkCisgICAg
ICAgIGZyb20gcGFpbnQgdGhyZWFkIG9ubHkuCisgICAgICAgIExheWVyIHRyZWUgdXBkYXRlcyBm
cm9tIHJlbmRlciBxdWV1ZSBhcmUgZmV0Y2hlZCBpbgorICAgICAgICB1cGRhdGVQYWludE5vZGUg
Y2FsbCBzdGFjayB3aGVuIG1haW4gdGhyZWFkIGlzIGxvY2tlZC4KKyAgICAgICAgTWVzc2FnZXMg
ZnJvbSBwYWludCB0aHJlYWQgdG8gd2ViIHByb2Nlc3MgYXJlIHBhc3NlZCB0aHJvdWdoCisgICAg
ICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlciBjYWxsIGdhdGUgKGltcGxlbWVudGVkIGJ5IE5v
YW0gUm9zZW50aGFsKS4KKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OlFR
dWlja1dlYlBhZ2UpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKToK
KyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoUVF1
aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tXZWJQYWdlUHJpdmF0ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6
OlFRdWlja1dlYlZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHku
aDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChMYXllclRyZWVIb3N0UHJveHkpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9MYXllclRyZWVQYWludERhdGEuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKExheWVyVHJlZVBhaW50RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZVBhaW50RGF0YTo6bGF5ZXJCeUlEKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUGFp
bnREYXRhOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWludERhdGE6
Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWlu
dERhdGE6Om5vdGlmeVN5bmNSZXF1aXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVBh
aW50RGF0YTo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVBh
aW50RGF0YTo6c2hvd1JlcGFpbnRDb3VudGVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVl
UGFpbnREYXRhOjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvTGF5ZXJU
cmVlSG9zdFByb3h5UXQuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpkaXNwYXRjaFVwZGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKToK
KyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXll
cik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlQ29tcG9zaXRp
bmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnN5
bmNDb21wb3NpdGluZ0xheWVyU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHk6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9y
U2NhbGluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cmVuZGVyTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUJhY2tp
bmdTdG9yZXMpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVBh
aW50Tm9kZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2V0UGFpbnRT
Y2FsZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L0xheWVyVHJlZVBhaW50RGF0YVF0LmNwcDog
Q29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94
eVF0LmNwcC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChNYWluVGhyZWFkR3VhcmRlZElu
dm9rZXIpOgorICAgICAgICAoV2ViS2l0OjpNYWluVGhyZWFkR3VhcmRlZEludm9rZXI6OmNhbGwp
OgorICAgICAgICAoV2ViS2l0OjpNYWluVGhyZWFkR3VhcmRlZEludm9rZXI6Ok1haW5UaHJlYWRH
dWFyZGVkSW52b2tlcik6CisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJlYWRHdWFyZGVkSW52b2tl
cjo6aW52b2tlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUGFpbnREYXRhOjpjYWxsT25N
YWluVHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWludERhdGE6OkxheWVyVHJl
ZVBhaW50RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVBhaW50RGF0YTo6fkxheWVy
VHJlZVBhaW50RGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVBhaW50RGF0YTo6Y3Jl
YXRlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWludERhdGE6OnBhaW50VG9D
dXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUGFpbnREYXRhOjpz
eW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVBhaW50RGF0YTo6cGFp
bnRUb0dyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVBhaW50RGF0
YTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvclNjYWxpbmcpOgorICAgICAgICAoV2ViS2l0OjpM
YXllclRyZWVQYWludERhdGE6OnVwZGF0ZVZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlUGFpbnREYXRhOjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlUGFpbnREYXRhOjpkZWxldGVMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVy
VHJlZVBhaW50RGF0YTo6ZW5zdXJlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVQ
YWludERhdGE6OnNldFJvb3RMYXllcklEKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUGFp
bnREYXRhOjpnZXRCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWlu
dERhdGE6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWludERhdGE6
OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWludERhdGE6OnVwZGF0
ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWludERhdGE6OmNyZWF0ZUltYWdl
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUGFpbnREYXRhOjpkZXN0cm95SW1hZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWludERhdGE6OmFzc2lnbkltYWdlVG9MYXllcik6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVBhaW50RGF0YTo6c3dhcEJ1ZmZlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWludERhdGE6OmZsdXNoTGF5ZXJDaGFuZ2VzKToKKyAg
ICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlUGFpbnREYXRhOjpyZW5kZXJOZXh0RnJhbWUpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWludERhdGE6OmVuc3VyZVJvb3RMYXllcik6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZVBhaW50RGF0YTo6c3luY1JlbW90ZUNvbnRlbnQpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWludERhdGE6OnB1cmdlR0xSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWludERhdGE6OnB1cmdlQmFja2luZ1N0b3Jlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZVBhaW50RGF0YTo6c2NhbGUpOgorICAgICAgICAoV2Vi
S2l0OjpMYXllclRyZWVQYWludERhdGE6OnNldFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6TGF5
ZXJUcmVlUGFpbnREYXRhOjpkZXRhY2gpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVQYWlu
dERhdGE6OmFwcGVuZFVwZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0TGF5ZXJUcmVl
U0dOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpR
dExheWVyVHJlZVNHTm9kZTo6UXRMYXllclRyZWVTR05vZGUpOgorICAgICAgICAoV2ViS2l0OjpR
dExheWVyVHJlZVNHTm9kZTo6flF0TGF5ZXJUcmVlU0dOb2RlKToKKyAgICAgICAgKFdlYktpdDo6
UXRMYXllclRyZWVTR05vZGU6OnJlbmRlcik6CisgICAgICAgIChXZWJLaXQ6OlF0TGF5ZXJUcmVl
U0dOb2RlOjpjaGFuZ2VkU3RhdGVzKToKKyAgICAgICAgKFdlYktpdDo6dG9WaWV3UG9ydENvb3Jk
aW5hdGVzKToKKyAgICAgICAgKFdlYktpdDo6YWRqdXN0Qm91bmRpbmdSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6UXRMYXllclRyZWVTR05vZGU6OmNsaXBSZWN0KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUXRMYXllclRyZWVTR05vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoUXRMYXllclRyZWVTR05vZGUpOgorICAgICAgICAoV2ViS2l0OjpRdExheWVyVHJlZVNH
Tm9kZTo6bGF5ZXJUcmVlUGFpbnREYXRhKToKKwogMjAxMi0wMy0wNyAgS2VubmV0aCBSb2hkZSBD
aHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGluY2ggem9vbSBh
Y3RzIHdlaXJkbHkgb24gbnl0aW1lcy5jb20gd2hpbGUgbG9hZGluZwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXgg
MTMyMDU2YS4uMzI5NmRhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0yMDEsNiArMjAxLDcgQEAgSEVBREVS
UyArPSBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hlci5oIFwKICAgICBV
SVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuaCBcCiAgICAgVUlQcm9jZXNzL0xheWVy
VHJlZUhvc3RQcm94eS5oIFwKKyAgICBVSVByb2Nlc3MvTGF5ZXJUcmVlUGFpbnREYXRhLmggXAog
ICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
LmggXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5v
dGlmaWNhdGlvbi5oIFwKQEAgLTI1OSw2ICsyNjAsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVBy
b2Nlc3MvcXQvUXRXZWJDb250ZXh0LmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaCBcCisg
ICAgVUlQcm9jZXNzL3F0L1F0TGF5ZXJUcmVlU0dOb2RlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9R
dFBhbkdlc3R1cmVSZWNvZ25pemVyLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVy
ZVJlY29nbml6ZXIuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0VGFwR2VzdHVyZVJlY29nbml6ZXIu
aCBcCkBAIC01ODgsNiArNTkwLDggQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1F0
V2ViQ29udGV4dC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9MYXllckJhY2tpbmdTdG9yZS5jcHAg
XAogICAgIFVJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgXAorICAgIFVJUHJv
Y2Vzcy9xdC9MYXllclRyZWVQYWludERhdGFRdC5jcHAgXAorICAgIFVJUHJvY2Vzcy9xdC9RdExh
eWVyVHJlZVNHTm9kZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRs
ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAg
IFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAppbmRleCBkNThmZWZl
Li44ODdjODZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2VicGFnZS5jcHAKQEAgLTM2LDYgKzM2LDcgQEAgUVF1aWNrV2ViUGFnZTo6UVF1aWNrV2Vi
UGFnZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydEl0ZW0pCiAgICAgLCBkKG5ldyBRUXVpY2tXZWJQ
YWdlUHJpdmF0ZSh0aGlzLCB2aWV3cG9ydEl0ZW0pKQogewogICAgIHNldEZsYWcoSXRlbUhhc0Nv
bnRlbnRzKTsKKyAgICBzZXRDbGlwKHRydWUpOwogCiAgICAgLy8gV2UgZG8gdGhlIHRyYW5zZm9y
bSBmcm9tIHRoZSB0b3AgbGVmdCBzbyB0aGUgdmlld3BvcnQgY2FuIGFzc3VtZSB0aGUgcG9zaXRp
b24gMCwgMAogICAgIC8vIGlzIGFsd2F5cyB3aGVyZSByZW5kZXJpbmcgc3RhcnRzLgpAQCAtNzcs
NjYgKzc4LDEyIEBAIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50KFFQYWludGVyKiBw
YWludGVyKQogICAgICAgICB3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPnBhaW50TGF5ZXJU
cmVlKHBhaW50ZXIpOwogfQogCi12b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3Vy
cmVudEdMQ29udGV4dChjb25zdCBRVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHkp
Ci17Ci0gICAgaWYgKCFxLT5pc1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUVJl
Y3RGIGNsaXBSZWN0ID0gdmlld3BvcnRJdGVtLT5tYXBSZWN0VG9TY2VuZSh2aWV3cG9ydEl0ZW0t
PmJvdW5kaW5nUmVjdCgpKTsKLQotICAgIGlmICghY2xpcFJlY3QuaXNWYWxpZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQ
cm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBpZiAoIWRyYXdpbmdBcmVhKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBkcmF3aW5nQXJlYS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoUVRyYW5zZm9y
bSh0cmFuc2Zvcm0pLnNjYWxlKGNvbnRlbnRzU2NhbGUsIGNvbnRlbnRzU2NhbGUpLCBvcGFjaXR5
LCBjbGlwUmVjdCk7Ci19Ci0KLXN0cnVjdCBQYWdlUHJveHlOb2RlIDogcHVibGljIFFTR1JlbmRl
ck5vZGUgewotICAgIFBhZ2VQcm94eU5vZGUoUVF1aWNrV2ViUGFnZVByaXZhdGUqIHBhZ2UpCi0g
ICAgICAgIDogbV9wYWdlUHJpdmF0ZShwYWdlKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IFN0YXRlRmxhZ3MgY2hhbmdlZFN0YXRlcygpCi0gICAgewotICAgICAgICByZXR1cm4gU3RhdGVG
bGFncyhTdGVuY2lsU3RhdGUpIHwgQ29sb3JTdGF0ZSB8IEJsZW5kU3RhdGU7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHJlbmRlcihjb25zdCBSZW5kZXJTdGF0ZSYpCi0gICAgewotICAgICAg
ICBpZiAoIW1fcGFnZVByaXZhdGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFFUcmFu
c2Zvcm0gdHJhbnNmb3JtID0gbWF0cml4KCkgPyBtYXRyaXgoKS0+dG9UcmFuc2Zvcm0oKSA6IFFU
cmFuc2Zvcm0oKTsKLSAgICAgICAgbV9wYWdlUHJpdmF0ZS0+cGFpbnRUb0N1cnJlbnRHTENvbnRl
eHQodHJhbnNmb3JtLCBpbmhlcml0ZWRPcGFjaXR5KCkpOwotICAgIH0KLQotICAgIH5QYWdlUHJv
eHlOb2RlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3BhZ2VQcml2YXRlKQotICAgICAgICAgICAg
bV9wYWdlUHJpdmF0ZS0+cmVzZXRQYWludE5vZGUoKTsKLSAgICB9Ci0KLSAgICBRUXVpY2tXZWJQ
YWdlUHJpdmF0ZSogbV9wYWdlUHJpdmF0ZTsKLX07Ci0KIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6
OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikK
IHsKLSAgICBpZiAoIShmbGFncygpICYgSXRlbUhhc0NvbnRlbnRzKSkgewotICAgICAgICBpZiAo
b2xkTm9kZSkKLSAgICAgICAgICAgIGRlbGV0ZSBvbGROb2RlOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9CisgICAgaWYgKGQtPndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSkKKyAgICAgICAg
cmV0dXJuIGQtPndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlSG9zdFByb3h5
KCktPnVwZGF0ZVBhaW50Tm9kZShvbGROb2RlKTsKIAotICAgIFBhZ2VQcm94eU5vZGUqIHByb3h5
Tm9kZSA9IHN0YXRpY19jYXN0PFBhZ2VQcm94eU5vZGUqPihvbGROb2RlKTsKLSAgICBpZiAoIXBy
b3h5Tm9kZSkgewotICAgICAgICBwcm94eU5vZGUgPSBuZXcgUGFnZVByb3h5Tm9kZShkKTsKLSAg
ICAgICAgZC0+bV9wYWludE5vZGUgPSBwcm94eU5vZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBy
b3h5Tm9kZTsKKyAgICByZXR1cm4gb2xkTm9kZTsKIH0KIAogUXRXZWJQYWdlRXZlbnRIYW5kbGVy
KiBRUXVpY2tXZWJQYWdlOjpldmVudEhhbmRsZXIoKSBjb25zdApAQCAtMTY0LDYgKzExMSw4IEBA
IHZvaWQgUVF1aWNrV2ViUGFnZTo6c2V0Q29udGVudHNTY2FsZShxcmVhbCBzY2FsZSkKICAgICBB
U1NFUlQoc2NhbGUgPiAwKTsKICAgICBkLT5jb250ZW50c1NjYWxlID0gc2NhbGU7CiAgICAgZC0+
dXBkYXRlU2l6ZSgpOworICAgIGlmIChkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpCisg
ICAgICAgIGQtPndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlSG9zdFByb3h5
KCktPnNldFBhaW50U2NhbGUoc2NhbGUpOwogfQogCiBxcmVhbCBRUXVpY2tXZWJQYWdlOjpjb250
ZW50c1NjYWxlKCkgY29uc3QKQEAgLTE5MCwxOCArMTM5LDggQEAgdm9pZCBRUXVpY2tXZWJQYWdl
UHJpdmF0ZTo6dXBkYXRlU2l6ZSgpCiAgICAgdmlld3BvcnRJdGVtLT51cGRhdGVDb250ZW50c1Np
emUoc2NhbGVkU2l6ZSk7CiB9CiAKLXZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnJlc2V0UGFp
bnROb2RlKCkKLXsKLSAgICBtX3BhaW50Tm9kZSA9IDA7Ci0gICAgRHJhd2luZ0FyZWFQcm94eSog
ZHJhd2luZ0FyZWEgPSB3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7Ci0gICAgaWYgKGRyYXdp
bmdBcmVhICYmIGRyYXdpbmdBcmVhLT5sYXllclRyZWVIb3N0UHJveHkoKSkKLSAgICAgICAgZHJh
d2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpLT5wdXJnZUdMUmVzb3VyY2VzKCk7Ci19Ci0K
IFFRdWlja1dlYlBhZ2VQcml2YXRlOjp+UVF1aWNrV2ViUGFnZVByaXZhdGUoKQogewotICAgIGlm
IChtX3BhaW50Tm9kZSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8UGFnZVByb3h5Tm9kZSo+KG1fcGFp
bnROb2RlKS0+bV9wYWdlUHJpdmF0ZSA9IDA7CiB9CiAKICNpbmNsdWRlICJtb2NfcXF1aWNrd2Vi
cGFnZV9wLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXcuY3BwCmluZGV4IGYwMWNlMDIuLmRhN2I3YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAtMTEyNyw2ICsxMTI3
LDcgQEAgUVF1aWNrV2ViVmlldzo6UVF1aWNrV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmUKIHsKICAgICBRX0QoUVF1aWNrV2ViVmlldyk7
CiAgICAgZC0+aW5pdGlhbGl6ZShjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOworICAgIHNldENs
aXAodHJ1ZSk7CiB9CiAKIFFRdWlja1dlYlZpZXc6On5RUXVpY2tXZWJWaWV3KCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaAppbmRleCBiM2Q1MTJmLi4y
NjMyMmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9z
dFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94
eS5oCkBAIC0yNSw4ICsyNSw2IEBACiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVk
ZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgotI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CkBAIC0zNywxNCAr
MzUsMTUgQEAKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAKK2NsYXNzIFFTR05vZGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBM
YXllckJhY2tpbmdTdG9yZTsKK2NsYXNzIExheWVyVHJlZVBhaW50RGF0YTsKIGNsYXNzIFdlYkxh
eWVySW5mbzsKIGNsYXNzIFdlYkxheWVyVXBkYXRlSW5mbzsKIAotY2xhc3MgTGF5ZXJUcmVlSG9z
dFByb3h5IDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworY2xhc3MgTGF5
ZXJUcmVlSG9zdFByb3h5IHsKIHB1YmxpYzoKICAgICBMYXllclRyZWVIb3N0UHJveHkoRHJhd2lu
Z0FyZWFQcm94eSopOwogICAgIHZpcnR1YWwgfkxheWVyVHJlZUhvc3RQcm94eSgpOwpAQCAtNTcs
OCArNTYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CiAgICAgdm9p
ZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiwgZmxvYXQpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvclBhbm5pbmcoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKLSAgICB2
b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAgdm9pZCBzd2FwQ29udGVudEJ1ZmZlcnMoKTsK
ICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CiAgICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIo
aW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwogICAg
IHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBX
ZWJLaXQ6OlVwZGF0ZUluZm8mKTsKQEAgLTY3LDU5ICs2NCwxNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCk7CiAgICAgdm9pZCBkaWRS
ZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29y
ZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKICAgICB2b2lkIHVw
ZGF0ZVZpZXdwb3J0KCk7CisgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2b2lkIHB1
cmdlQmFja2luZ1N0b3JlcygpOworICAgIFFTR05vZGUqIHVwZGF0ZVBhaW50Tm9kZShRU0dOb2Rl
KiBvbGROb2RlKTsKKyAgICB2b2lkIHNldFBhaW50U2NhbGUoZmxvYXQpOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBjcmVhdGVMYXllcihXZWJM
YXllcklEKTsKLQotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChXZWJMYXll
cklEIGlkKSB7IHJldHVybiAoaWQgPT0gSW52YWxpZFdlYkxheWVySUQpID8gMCA6IG1fbGF5ZXJz
LmdldChpZCk7IH0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJl
dHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQotCi0gICAgLy8gUmVpbXBsZW1lbnRhdGlvbnMgZnJv
bSBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50LgotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlB
bmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopIHsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG93RGVidWdCb3JkZXJzKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZp
cnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IHsgfQotCi0gICAgRHJhd2luZ0FyZWFQcm94eSogbV9kcmF3aW5nQXJlYVByb3h5OwotCi0gICAg
dHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXll
ck1hcDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKLSAgICBm
bG9hdCBtX2NvbnRlbnRzU2NhbGU7Ci0KLSAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1f
cmVuZGVyUXVldWU7CiAgICAgdm9pZCBkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lk
KCk+Jik7CiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgT3duUHRyPFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKLSAgICBQYXNzUmVmUHRyPExheWVyQmFja2lu
Z1N0b3JlPiBnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCk7Ci0gICAgSGFzaE1hcDxpbnQ2NF90
LCBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPiBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlczsKLSAgICBIYXNoU2V0PFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4g
PiBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnM7Ci0jZW5kaWYKLQotICAgIHZvaWQg
c2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7Ci0gICAgdm9pZCBzeW5jaHJvbml6ZVZpZXdwb3J0KCk7
Ci0gICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklEKTsKLSAgICB2b2lkIHNldFJvb3RMYXll
cklEKFdlYkxheWVySUQpOwotICAgIHZvaWQgc3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJM
YXllckluZm8mKTsKLSAgICB2b2lkIGNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBmbG9hdCBz
Y2FsZSk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKFdlYkxheWVySUQsIGludCk7Ci0gICAgdm9pZCB1
cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4pOwotICAgIHZv
aWQgY3JlYXRlSW1hZ2UoaW50NjRfdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKLSAg
ICB2b2lkIGRlc3Ryb3lJbWFnZShpbnQ2NF90KTsKLSAgICB2b2lkIGFzc2lnbkltYWdlVG9MYXll
cihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgaW50NjRfdCBpbWFnZUlEKTsKLSAgICB2b2lkIGZs
dXNoTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKLSAgICB2b2lk
IGVuc3VyZUxheWVyKFdlYkxheWVySUQpOwotICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKLSAgICB2
b2lkIHN5bmNBbmltYXRpb25zKCk7Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXll
cj4gbV9yb290TGF5ZXI7Ci0gICAgVmVjdG9yPFdlYkxheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7
Ci0KLSAgICBMYXllck1hcCBtX2xheWVyczsKLSAgICBXZWJMYXllcklEIG1fcm9vdExheWVySUQ7
Ci0gICAgaW50IG1faWQ7CisgICAgRHJhd2luZ0FyZWFQcm94eSogbV9kcmF3aW5nQXJlYVByb3h5
OworICAgIFJlZlB0cjxMYXllclRyZWVQYWludERhdGE+IG1fbGF5ZXJUcmVlUGFpbnREYXRhOwog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZVBh
aW50RGF0YS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZVBhaW50RGF0YS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMTI1YmEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlUGFpbnREYXRhLmgKQEAg
LTAsMCArMSwxMjEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgTGF5ZXJUcmVlUGFp
bnREYXRhX2gKKyNkZWZpbmUgTGF5ZXJUcmVlUGFpbnREYXRhX2gKKworI2luY2x1ZGUgIkJhY2tp
bmdTdG9yZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiV2ViTGF5ZXJUcmVlSW5mby5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIExheWVyQmFja2lu
Z1N0b3JlOworY2xhc3MgTGF5ZXJUcmVlSG9zdFByb3h5OworY2xhc3MgV2ViTGF5ZXJJbmZvOwor
Y2xhc3MgV2ViTGF5ZXJVcGRhdGVJbmZvOworCisKK2NsYXNzIExheWVyVHJlZVBhaW50RGF0YSA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxMYXllclRyZWVQYWludERhdGE+LCBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgTGF5ZXJUcmVlUGFp
bnREYXRhKExheWVyVHJlZUhvc3RQcm94eSopOworICAgIHZpcnR1YWwgfkxheWVyVHJlZVBhaW50
RGF0YSgpOworICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOworICAgIHZvaWQgcGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBwYWludFRvR3JhcGhpY3ND
b250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOworICAgIHZvaWQg
c3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RGb3JT
Y2FsaW5nKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCk7CisKKyAgICBmbG9hdCBzY2Fs
ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U2NhbGUoZmxvYXQpOworICAgIHZvaWQgZGV0YWNoKCk7
CisgICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZv
aWQgdXBkYXRlVmlld3BvcnQoKTsKKworICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7
CisgICAgdm9pZCBzZXRSb290TGF5ZXJJRChXZWJMYXllcklEKTsKKyAgICB2b2lkIHN5bmNMYXll
clBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdm9pZCBjcmVhdGVUaWxlKFdl
YkxheWVySUQsIGludCwgZmxvYXQgc2NhbGUpOworICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXll
cklELCBpbnQpOworICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+KTsKKyAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBj
cmVhdGVJbWFnZShpbnQ2NF90LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4pOworICAgIHZv
aWQgZGVzdHJveUltYWdlKGludDY0X3QpOworCitwcml2YXRlOgorICAgIFBhc3NPd25QdHI8V2Vi
Q29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyAgICBXZWJD
b3JlOjpHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBpZCkgeyByZXR1cm4gKGlk
ID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQoaWQpOyB9CisgICAgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0
KCk7IH0KKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFp
bnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2b2lkIGNhbGxP
bk1haW5UcmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICB0eXBlZGVmIEhhc2hN
YXA8V2ViTGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IExheWVyTWFwOworICAgIFdl
YkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OworICAgIGZsb2F0IG1fY29udGVu
dHNTY2FsZTsKKworICAgIC8vIFJlbmRlciBxdWV1ZSBjYW4gYmUgYWNjZXNzZWQgb255IGZyb20g
bWFpbiB0aHJlYWQgb3IgdXBkYXRlUGFpbnROb2RlIGNhbGwgc3RhY2shCisgICAgVmVjdG9yPEZ1
bmN0aW9uPHZvaWQoKT4gPiBtX3JlbmRlclF1ZXVlOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVS
KQorICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7Cisg
ICAgUGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gZ2V0QmFja2luZ1N0b3JlKFdlYkxheWVy
SUQpOworICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJC
YWNraW5nU3RvcmU+ID4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7CisgICAgSGFzaFNldDxS
ZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZm
ZXJzOworI2VuZGlmCisKKyAgICB2b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgpOworICAgIHZv
aWQgc3luY2hyb25pemVWaWV3cG9ydCgpOworICAgIHZvaWQgYXNzaWduSW1hZ2VUb0xheWVyKFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdlSUQpOworICAgIHZvaWQgZW5zdXJl
Um9vdExheWVyKCk7CisgICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lk
IHN3YXBCdWZmZXJzKCk7CisgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOworICAgIHZvaWQgcmVu
ZGVyTmV4dEZyYW1lKCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIExh
eWVyVHJlZUhvc3RQcm94eSogbV9sYXllclRyZWVIb3N0UHJveHk7CisgICAgT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJMYXllcklEPiBt
X2xheWVyc1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgV2ViTGF5ZXJJ
RCBtX3Jvb3RMYXllcklEOworICAgIHVuc2lnbmVkIG1fc2NhbGU7Cit9OworCit9OworCisjZW5k
aWYgLy8gTGF5ZXJUcmVlUGFpbnREYXRhX2gKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcAppbmRleCAyMWZiOTk1Li4zYjlh
YTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9z
dFByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVI
b3N0UHJveHlRdC5jcHAKQEAgLTIxLDEwOCArMjEsMzkgQEAKIAogI2luY2x1ZGUgIkxheWVyVHJl
ZUhvc3RQcm94eS5oIgogCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIK
LSNpbmNsdWRlICJMYXllckJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUhvc3RN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQu
aCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJMYXllci5oIgorI2luY2x1ZGUgIkxheWVyVHJlZVBhaW50RGF0YS5oIgorI2lu
Y2x1ZGUgIlF0TGF5ZXJUcmVlU0dOb2RlLmgiCiAjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldlYkxheWVyVHJlZUlu
Zm8uaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJv
eHkuaCIKLSNpbmNsdWRlIDxPcGVuR0xTaGltcy5oPgotI2luY2x1ZGUgPFFEYXRlVGltZT4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzT3du
UHRyPEdyYXBoaWNzTGF5ZXI+IExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlTGF5ZXIoV2ViTGF5
ZXJJRCBsYXllcklEKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMpOwotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5
ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihuZXdMYXllcik7Ci0gICAgbGF5ZXItPnNldFNob3Vs
ZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXllcihmYWxzZSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRy
KG5ld0xheWVyKTsKLX0KLQogTGF5ZXJUcmVlSG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHko
RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKICAgICA6IG1fZHJhd2luZ0FyZWFQ
cm94eShkcmF3aW5nQXJlYVByb3h5KQotICAgICwgbV9yb290TGF5ZXJJRCgwKQorICAgICwgbV9s
YXllclRyZWVQYWludERhdGEoYWRvcHRSZWYobmV3IExheWVyVHJlZVBhaW50RGF0YSh0aGlzKSkp
CiB7CiB9CiAKIExheWVyVHJlZUhvc3RQcm94eTo6fkxheWVyVHJlZUhvc3RQcm94eSgpCiB7Cisg
ICAgbV9sYXllclRyZWVQYWludERhdGEtPmRldGFjaCgpOwogfQogCi0vLyBUaGlzIGZ1bmN0aW9u
IG5lZWRzIHRvIGJlIHJlZW50cmFudC4KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRv
Q3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9h
dCBvcGFjaXR5LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJl
TWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUp
OwotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0
dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKLQotICAgIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAg
R3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwotICAgIGlmICgh
Y3VycmVudFJvb3RMYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVGV4dHVyZU1hcHBlckxh
eWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGN1cnJlbnRSb290TGF5ZXIpOwotCi0g
ICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldFRleHR1cmVN
YXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2lu
UGFpbnRpbmcoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOwotICAgIG1f
dGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNsaXBSZWN0
KTsKLQotICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5vcGFjaXR5KCkgIT0gb3BhY2l0eSB8fCBj
dXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRyaXgpIHsKLSAgICAgICAgY3VycmVu
dFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICAgICAgY3VycmVudFJvb3RMYXll
ci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnN5bmND
b21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIH0KLQotICAgIGxheWVyLT5w
YWludCgpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOwotICAgIG1fdGV4dHVyZU1h
cHBlci0+ZW5kUGFpbnRpbmcoKTsKLQotICAgIHN5bmNBbmltYXRpb25zKCk7CisgICAgbV9sYXll
clRyZWVQYWludERhdGEtPnN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgbV9sYXllclRyZWVQYWlu
dERhdGEtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KG1hdHJpeCwgb3BhY2l0eSwgcmVjdCk7CiB9
CiAKLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQW5pbWF0aW9ucygpCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0IGNvbnRleHQpCiB7Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBs
YXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJvb3RMYXllcigpKTsKLSAgICBBU1NFUlQobGF5
ZXIpOwotCi0gICAgbGF5ZXItPnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKLSAgICBpZiAo
bGF5ZXItPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCi0gICAgICAg
IHVwZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRv
R3JhcGhpY3NDb250ZXh0KFFQYWludGVyKiBwYWludGVyKQotewotICAgIGlmICghbV90ZXh0dXJl
TWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUo
KTsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4
dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKLSAgICBzeW5jUmVtb3RlQ29udGVudCgpOwotICAg
IFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5
ZXIoKSk7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+
c2V0R3JhcGhpY3NDb250ZXh0KCZncmFwaGljc0NvbnRleHQpOwotICAgIG1fdGV4dHVyZU1hcHBl
ci0+YmVnaW5QYWludGluZygpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7
Ci0gICAgbGF5ZXItPnBhaW50KCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygp
OwotICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KDApOworICAgIG1fbGF5
ZXJUcmVlUGFpbnREYXRhLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogfQogCiB2
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQoKQpAQCAtMTMwLDIxNiArNjEs
MTUgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKICAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYgbGF5ZXJJbmZv
KQotewotICAgIFdlYkxheWVySUQgaWQgPSBsYXllckluZm8uaWQ7Ci0gICAgZW5zdXJlTGF5ZXIo
aWQpOwotICAgIExheWVyTWFwOjppdGVyYXRvciBpdCA9IG1fbGF5ZXJzLmZpbmQoaWQpOwotICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gaXQtPnNlY29uZDsKLSAgICBib29sIG5lZWRzVG9VcGRh
dGVJbWFnZVRpbGVzID0gbGF5ZXJJbmZvLmltYWdlSXNVcGRhdGVkIHx8IChsYXllckluZm8uY29u
dGVudHNSZWN0ICE9IGxheWVyLT5jb250ZW50c1JlY3QoKSAmJiBsYXllckluZm8uaW1hZ2VCYWNr
aW5nU3RvcmVJRCk7Ci0KLSAgICBsYXllci0+c2V0TmFtZShsYXllckluZm8ubmFtZSk7Ci0KLSAg
ICBsYXllci0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5yZXBsaWNh
KSk7Ci0gICAgbGF5ZXItPnNldE1hc2tMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLm1hc2spKTsK
LQotICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllckluZm8ucG9zKTsKLSAgICBsYXllci0+c2V0
U2l6ZShsYXllckluZm8uc2l6ZSk7Ci0gICAgbGF5ZXItPnNldFRyYW5zZm9ybShsYXllckluZm8u
dHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJJbmZvLmFuY2hvclBv
aW50KTsKLSAgICBsYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVu
VHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5i
YWNrZmFjZVZpc2libGUpOwotICAgIGxheWVyLT5zZXRDb250ZW50c09wYXF1ZShsYXllckluZm8u
Y29udGVudHNPcGFxdWUpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNv
bnRlbnRzUmVjdCk7Ci0gICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8uZHJhd3ND
b250ZW50KTsKLQotICAgIGlmIChuZWVkc1RvVXBkYXRlSW1hZ2VUaWxlcykKLSAgICAgICAgYXNz
aWduSW1hZ2VUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1hZ2VCYWNraW5nU3RvcmVJRCk7Ci0K
LSAgICAvLyBOZXZlciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCi0gICAgbGF5ZXItPnNldE1h
c2tzVG9Cb3VuZHMobGF5ZXJJbmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFz
a3NUb0JvdW5kcyk7Ci0gICAgbGF5ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOwot
ICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOwotICAgIFZl
Y3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxheWVySW5mby5jaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBXZWJMYXllcklE
IGNoaWxkSUQgPSBsYXllckluZm8uY2hpbGRyZW5baV07Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXIq
IGNoaWxkID0gbGF5ZXJCeUlEKGNoaWxkSUQpOwotICAgICAgICBpZiAoIWNoaWxkKSB7Ci0gICAg
ICAgICAgICBjaGlsZCA9IGNyZWF0ZUxheWVyKGNoaWxkSUQpLmxlYWtQdHIoKTsKLSAgICAgICAg
ICAgIG1fbGF5ZXJzLmFkZChjaGlsZElELCBjaGlsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2hp
bGRyZW4uYXBwZW5kKGNoaWxkKTsKLSAgICB9Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxk
cmVuKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbmZvLmFuaW1hdGlvbnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJMYXllckFuaW1hdGlvbiBh
bmltID0gbGF5ZXJJbmZvLmFuaW1hdGlvbnNbaV07Ci0KLSAgICAgICAgc3dpdGNoIChhbmltLm9w
ZXJhdGlvbikgewotICAgICAgICBjYXNlIFdlYktpdDo6V2ViTGF5ZXJBbmltYXRpb246OkFkZEFu
aW1hdGlvbjogewotICAgICAgICAgICAgY29uc3QgSW50U2l6ZSBib3hTaXplID0gYW5pbS5ib3hT
aXplOwotICAgICAgICAgICAgbGF5ZXItPmFkZEFuaW1hdGlvbihhbmltLmtleWZyYW1lTGlzdCwg
Ym94U2l6ZSwgYW5pbS5hbmltYXRpb24uZ2V0KCksIGFuaW0ubmFtZSwgYW5pbS5zdGFydFRpbWUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBXZWJLaXQ6Oldl
YkxheWVyQW5pbWF0aW9uOjpSZW1vdmVBbmltYXRpb246Ci0gICAgICAgICAgICBsYXllci0+cmVt
b3ZlQW5pbWF0aW9uKGFuaW0ubmFtZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBXZWJLaXQ6OldlYkxheWVyQW5pbWF0aW9uOjpQYXVzZUFuaW1hdGlvbjoKLSAgICAgICAgICAg
IGRvdWJsZSBvZmZzZXQgPSBXVEY6OmN1cnJlbnRUaW1lKCkgLSBhbmltLnN0YXJ0VGltZTsKLSAg
ICAgICAgICAgIGxheWVyLT5wYXVzZUFuaW1hdGlvbihhbmltLm5hbWUsIG9mZnNldCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChsYXllckluZm8uaXNS
b290TGF5ZXIgJiYgbV9yb290TGF5ZXJJRCAhPSBpZCkKLSAgICAgICAgc2V0Um9vdExheWVySUQo
aWQpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJ
RCBsYXllcklEKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVy
SUQpOwotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5yZW1v
dmVGcm9tUGFyZW50KCk7Ci0gICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOwotICAgIGRlbGV0
ZSBsYXllcjsKLX0KLQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlTGF5ZXIoV2Vi
TGF5ZXJJRCBpZCkKLXsKLSAgICAvLyBXZSBoYXZlIHRvIGxlYWsgdGhlIG5ldyBsYXllcidzIHBv
aW50ZXIgYW5kIG1hbmFnZSBpdCBvdXJzZWx2ZXMsCi0gICAgLy8gYmVjYXVzZSBPd25QdHIgaXMg
bm90IGNvcHlhYmxlLgotICAgIGlmIChtX2xheWVycy5maW5kKGlkKSA9PSBtX2xheWVycy5lbmQo
KSkKLSAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBjcmVhdGVMYXllcihpZCkubGVha1B0cigpKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RMYXllcklEKFdlYkxheWVySUQg
bGF5ZXJJRCkKLXsKLSAgICBpZiAobGF5ZXJJRCA9PSBtX3Jvb3RMYXllcklEKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllcklEID0gbGF5ZXJJRDsKLQotICAgIG1fcm9vdExheWVy
LT5yZW1vdmVBbGxDaGlsZHJlbigpOwotCi0gICAgaWYgKCFsYXllcklEKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKLSAg
ICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hp
bGQobGF5ZXIpOwotfQotCi1QYXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBMYXllclRyZWVI
b3N0UHJveHk6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEIGlkKQotewotICAgIGVuc3VyZUxh
eWVyKGlkKTsKLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVy
TGF5ZXIobGF5ZXJCeUlEKGlkKSk7Ci0gICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxMYXllckJhY2tpbmdTdG9yZSo+KGxheWVyLT5iYWNraW5n
U3RvcmUoKS5nZXQoKSk7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKLSAgICAgICAgYmFja2lu
Z1N0b3JlID0gTGF5ZXJCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAgICAgICBsYXllci0+c2V0
QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZS5nZXQoKSk7Ci0gICAgfQotICAgIEFTU0VSVChiYWNr
aW5nU3RvcmUpOwotICAgIHJldHVybiBiYWNraW5nU3RvcmU7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxv
YXQgc2NhbGUpCi17Ci0gICAgZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpLT5jcmVhdGVUaWxlKHRp
bGVJRCwgc2NhbGUpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZShX
ZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQpCi17Ci0gICAgZ2V0QmFja2luZ1N0b3JlKGxh
eWVySUQpLT5yZW1vdmVUaWxlKHRpbGVJRCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
Ojp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgUGFzc1JlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IHdlYWtCaXRtYXApCi17Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
Yml0bWFwID0gd2Vha0JpdG1hcDsKLSAgICBSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSA9IGdldEJhY2tpbmdTdG9yZShsYXllcklEKTsKLSAgICBiYWNraW5nU3RvcmUtPnVw
ZGF0ZVRpbGUodGlsZUlELCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRtYXAuZ2V0KCkpOwot
ICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJ
RCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHdlYWtCaXRtYXApCi17Ci0gICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gd2Vha0JpdG1hcDsKLSAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGls
ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVu
dHMobV90ZXh0dXJlTWFwcGVyLmdldCgpLCBiaXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCksIEJp
dG1hcFRleHR1cmU6OkJHUkFGb3JtYXQpOwotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Vz
LnNldChpbWFnZUlELCBiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6ZGVzdHJveUltYWdlKGludDY0X3QgaW1hZ2VJRCkKLXsKLSAgICBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5yZW1vdmUoaW1hZ2VJRCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
Ojphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludDY0X3QgaW1hZ2VJ
RCkKLXsKLSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxUZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmZpbmQoaW1h
Z2VJRCk7Ci0gICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmVuZCgp
KTsKLSAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT5zZWNvbmQuZ2V0KCkpOwotfQot
Ci12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3dhcEJ1ZmZlcnMoKQotewotICAgIEhhc2hTZXQ8
UmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBlbmQgPSBtX2JhY2tpbmdTdG9y
ZXNXaXRoUGVuZGluZ0J1ZmZlcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJlZlB0cjxMYXll
ckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGlu
Z0J1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+c3dhcEJ1
ZmZlcnMobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLQotICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQ
ZW5kaW5nQnVmZmVycy5jbGVhcigpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Zmx1
c2hMYXllckNoYW5nZXMoKQotewotICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZShGbG9hdFJlY3QoKSk7Ci0gICAgc3dhcEJ1ZmZlcnMoKTsKLQotICAgIC8vIFRoZSBwZW5kaW5n
IHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9yIHRoZSBzY3JlZW4sIHRlbGwgdGhlIHdlYiBw
cm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUuCi0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5w
YWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UmVuZGVyTmV4
dEZyYW1lKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVSb290TGF5ZXIoKQotewotICAgIGlmIChtX3Jv
b3RMYXllcikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcm9vdExheWVyID0gY3JlYXRlTGF5ZXIo
SW52YWxpZFdlYkxheWVySUQpOwotICAgIG1fcm9vdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZh
bHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLSAgICBtX3Jv
b3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKLQotICAgIC8v
IFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJl
IG9wdGltaXplZCBvdXQuCi0gICAgbV9yb290TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwg
MS4wKSk7Ci0gICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBl
ciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKLSAg
ICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1cmVNYXBw
ZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnN5bmNSZW1vdGVDb250ZW50KCkKLXsKLSAgICAvLyBXZSBlbnF1ZXVlIG1lc3NhZ2VzIGFuZCBl
eGVjdXRlIHRoZW0gZHVyaW5nIHBhaW50LCBhcyB0aGV5IHJlcXVpcmUgYW4gYWN0aXZlIEdMIGNv
bnRleHQuCi0gICAgZW5zdXJlUm9vdExheWVyKCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fcmVuZGVyUXVldWUuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcmVuZGVyUXVldWVbaV0o
KTsKLQotICAgIG1fcmVuZGVyUXVldWUuY2xlYXIoKTsKLX0KLQogdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQog
ewotICAgIG1fcmVuZGVyUXVldWUuYXBwZW5kKGZ1bmN0aW9uKTsKKyAgICBtX2xheWVyVHJlZVBh
aW50RGF0YS0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9uKTsKICAgICB1cGRhdGVWaWV3cG9ydCgpOwog
fQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVyKGludCBsYXll
cklELCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxl
LCB0aGlzLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8udXBkYXRlU2NhbGVGYWN0b3IpKTsK
KyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVQYWludERhdGE6OmNyZWF0ZVRpbGUs
IG1fbGF5ZXJUcmVlUGFpbnREYXRhLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8u
dXBkYXRlU2NhbGVGYWN0b3IpKTsKICAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGls
ZUlELCB1cGRhdGVJbmZvKTsKIH0KIApAQCAtMzQ5LDQ0ICs3OSw0NCBAQCB2b2lkIExheWVyVHJl
ZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlELCBj
b25zdCBXZWJLaQogICAgIEludFJlY3Qgc291cmNlUmVjdCA9IHVwZGF0ZUluZm8udXBkYXRlUmVj
dHMuZmlyc3QoKTsKICAgICBJbnRSZWN0IHRhcmdldFJlY3QgPSB1cGRhdGVJbmZvLnVwZGF0ZVJl
Y3RCb3VuZHM7CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGUodXBkYXRlSW5mby5iaXRtYXBIYW5kbGUpOwotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZSwgdGhpcywgbGF5ZXJJRCwg
dGlsZUlELCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRtYXApKTsKKyAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZMYXllclRyZWVQYWludERhdGE6OnVwZGF0ZVRpbGUsIG1fbGF5ZXJUcmVlUGFp
bnREYXRhLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGJp
dG1hcCkpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVy
KGludCBsYXllcklELCBpbnQgdGlsZUlEKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxh
eWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZSwgdGhpcywgbGF5ZXJJRCwgdGlsZUlEKSk7Cisg
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUGFpbnREYXRhOjpyZW1vdmVUaWxlLCBt
X2xheWVyVHJlZVBhaW50RGF0YS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlEKSk7CiB9CiAKIAogdm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBp
ZCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0
ZUxheWVyLCB0aGlzLCBpZCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVBh
aW50RGF0YTo6ZGVsZXRlTGF5ZXIsIG1fbGF5ZXJUcmVlUGFpbnREYXRhLmdldCgpLCBpZCkpOwog
fQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2Vi
TGF5ZXJJRCBpZCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVIb3N0UHJv
eHk6OnNldFJvb3RMYXllcklELCB0aGlzLCBpZCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JkxheWVyVHJlZVBhaW50RGF0YTo6c2V0Um9vdExheWVySUQsIG1fbGF5ZXJUcmVlUGFpbnREYXRh
LmdldCgpLCBpZCkpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY0NvbXBvc2l0
aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8mIGluZm8pCiB7Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jTGF5ZXJQYXJhbWV0ZXJzLCB0aGlz
LCBpbmZvKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUGFpbnREYXRhOjpz
eW5jTGF5ZXJQYXJhbWV0ZXJzLCBtX2xheWVyVHJlZVBhaW50RGF0YS5nZXQoKSwgaW5mbykpOwog
fQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoKQogewotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6Zmx1c2hMYXllckNoYW5nZXMs
IHRoaXMpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVQYWludERhdGE6OmZs
dXNoTGF5ZXJDaGFuZ2VzLCBtX2xheWVyVHJlZVBhaW50RGF0YS5nZXQoKSkpOwogfQogCiB2b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRf
dCBrZXksIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKIHsK
ICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZShoYW5kbGUpOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94
eTo6Y3JlYXRlSW1hZ2UsIHRoaXMsIGtleSwgYml0bWFwKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmTGF5ZXJUcmVlUGFpbnREYXRhOjpjcmVhdGVJbWFnZSwgbV9sYXllclRyZWVQYWludERh
dGEuZ2V0KCksIGtleSwgYml0bWFwKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpk
ZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCiB7Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95SW1hZ2UsIHRoaXMsIGtl
eSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVBhaW50RGF0YTo6ZGVzdHJv
eUltYWdlLCBtX2xheWVyVHJlZVBhaW50RGF0YS5nZXQoKSwga2V5KSk7CiB9CiAKIHZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yUGFubmluZyhjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQpAQCAtMzk2
LDIyICsxMjYsNDMgQEAgdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50
c1JlY3RGb3JQYW5uaW5nKGNvbnN0IEludFJlY3QmIHJlY3QsIGMKIAogdm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RGb3JTY2FsaW5nKGNvbnN0IEludFJlY3Qm
IHJlY3QsIGZsb2F0IHNjYWxlKQogewotICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7
Ci0gICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisgICAgbV9sYXllclRyZWVQYWludERhdGEt
PnNldFZpc2libGVDb250ZW50c1JlY3RGb3JTY2FsaW5nKHJlY3QsIHNjYWxlKTsKICAgICBtX2Ry
YXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRy
ZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhyZWN0LCBzY2FsZSksIG1f
ZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpwdXJnZUdMUmVzb3VyY2VzKCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpy
ZW5kZXJOZXh0RnJhbWUoKQogewotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1Rl
eHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7Ci0KLSAgICBpZiAobGF5ZXIpCi0gICAgICAg
IGxheWVyLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKKyAgICBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpS
ZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsK
K30KIAotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7Ci0gICAgbV90ZXh0
dXJlTWFwcGVyLmNsZWFyKCk7Ci0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
LmNsZWFyKCk7Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkK
K3sKICAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3Nh
Z2VzOjpMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVBy
b3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KIAorUVNHTm9kZSogTGF5ZXJUcmVlSG9zdFByb3h5
Ojp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSkKK3sKKyAgICBRdExheWVyVHJlZVNH
Tm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PFF0TGF5ZXJUcmVlU0dOb2RlKj4ob2xkTm9kZSk7CisK
KyAgICBpZiAobm9kZSAmJiBub2RlLT5sYXllclRyZWVQYWludERhdGEoKSAhPSBtX2xheWVyVHJl
ZVBhaW50RGF0YSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgTGF5ZXJUcmVlSG9zdFBy
b3h5IHdhcyBkZWxldGVkIGFuZCByZWNyZWF0ZWQKKyAgICAgICAgLy8gd2hpbGUgb2xkIHBhaW50
IG5vZGUgc3Vydml2ZWQuIFRoaXMgY291bGQgaGFwcGVuIGlmIHdlYiBwcm9jZXNzCisgICAgICAg
IC8vIGhhdmUgY3Jhc2hlZC4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gcmVjcmVhdGUgcGFpbnQg
bm9kZS4KKyAgICAgICAgZGVsZXRlIG5vZGU7CisgICAgICAgIG5vZGUgPSAwOworICAgIH0KKwor
ICAgIG1fbGF5ZXJUcmVlUGFpbnREYXRhLT5zeW5jUmVtb3RlQ29udGVudCgpOworCisgICAgaWYg
KCFub2RlKQorICAgICAgICBub2RlID0gbmV3IFF0TGF5ZXJUcmVlU0dOb2RlKG1fbGF5ZXJUcmVl
UGFpbnREYXRhKTsKKworICAgIHJldHVybiBub2RlOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQ
cm94eTo6c2V0UGFpbnRTY2FsZShmbG9hdCBzY2FsZSkKK3sKKyAgICBtX2xheWVyVHJlZVBhaW50
RGF0YS0+c2V0U2NhbGUoc2NhbGUpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlUGFpbnREYXRhUXQuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L0xheWVyVHJlZVBhaW50RGF0YVF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42OGQ0ZWYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZVBhaW50RGF0YVF0LmNwcApAQCAtMCwwICsxLDQyNCBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
TGF5ZXJUcmVlUGFpbnREYXRhLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlci5oIgorI2luY2x1ZGUgIkxheWVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiTGF5ZXJU
cmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAiTWFpblRocmVhZC5oIgorI2luY2x1ZGUgIk1lc3Nh
Z2VJRC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2luY2x1
ZGUgPE9wZW5HTFNoaW1zLmg+CisjaW5jbHVkZSA8UURhdGVUaW1lPgorI2luY2x1ZGUgPHd0Zi9B
dG9taWNzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBjYWxsKFBhc3NSZWZQdHI8VD4gb2JqZWN0VG9HdWFy
ZCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgeworICAgICAgICBNYWlu
VGhyZWFkR3VhcmRlZEludm9rZXI8VD4qIGludm9rZXIgPSBuZXcgTWFpblRocmVhZEd1YXJkZWRJ
bnZva2VyPFQ+KG9iamVjdFRvR3VhcmQsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9uTWFpblRo
cmVhZChpbnZva2UsIGludm9rZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNYWluVGhyZWFk
R3VhcmRlZEludm9rZXIoUGFzc1JlZlB0cjxUPiBvYmplY3QsIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
KT4mIG5ld0Z1bmN0aW9uKQorICAgICAgICA6IG9iamVjdFRvR3VhcmQob2JqZWN0KQorICAgICAg
ICAsIGZ1bmN0aW9uKG5ld0Z1bmN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8VD4g
b2JqZWN0VG9HdWFyZDsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uOworICAgIHN0YXRp
YyB2b2lkIGludm9rZSh2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgTWFpblRocmVhZEd1YXJk
ZWRJbnZva2VyPFQ+KiBpbnZva2VyID0gc3RhdGljX2Nhc3Q8TWFpblRocmVhZEd1YXJkZWRJbnZv
a2VyPFQ+Kj4oZGF0YSk7CisgICAgICAgIGludm9rZXItPmZ1bmN0aW9uKCk7CisgICAgICAgIGRl
bGV0ZSBpbnZva2VyOworICAgIH0KK307CisKK3ZvaWQgTGF5ZXJUcmVlUGFpbnREYXRhOjpjYWxs
T25NYWluVHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgaWYg
KGlzTWFpblRocmVhZCgpKQorICAgICAgICBmdW5jdGlvbigpOworICAgIGVsc2UKKyAgICAgICAg
TWFpblRocmVhZEd1YXJkZWRJbnZva2VyPExheWVyVHJlZVBhaW50RGF0YT46OmNhbGwodGhpcywg
ZnVuY3Rpb24pOworfQorCitMYXllclRyZWVQYWludERhdGE6OkxheWVyVHJlZVBhaW50RGF0YShM
YXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSkKKyAgICA6IG1fbGF5ZXJUcmVl
SG9zdFByb3h5KGxheWVyVHJlZUhvc3RQcm94eSkKKyAgICAsIG1fcm9vdExheWVySUQoMCkKK3sK
KyAgICBzZXRTY2FsZSgxKTsKK30KKworTGF5ZXJUcmVlUGFpbnREYXRhOjp+TGF5ZXJUcmVlUGFp
bnREYXRhKCkKK3sKK30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBMYXllclRyZWVQYWlu
dERhdGE6OmNyZWF0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBHcmFwaGljc0xh
eWVyKiBuZXdMYXllciA9IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcih0aGlzKTsKKyAg
ICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIobmV3TGF5
ZXIpOworICAgIGxheWVyLT5zZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoZmFs
c2UpOworICAgIHJldHVybiBhZG9wdFB0cihuZXdMYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVl
UGFpbnREYXRhOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0KQor
eworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CisgICAgQVNT
RVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6
Ok9wZW5HTE1vZGUpOworCisgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICBHcmFwaGljc0xh
eWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CisgICAgaWYgKCFjdXJyZW50Um9v
dExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVy
ID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RMYXllcik7CisKKyAgICBpZiAoIWxh
eWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3Rl
eHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygp
OworICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CisgICAgbV90ZXh0dXJlTWFw
cGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3QpOworCisgICAg
aWYgKGN1cnJlbnRSb290TGF5ZXItPm9wYWNpdHkoKSAhPSBvcGFjaXR5IHx8IGN1cnJlbnRSb290
TGF5ZXItPnRyYW5zZm9ybSgpICE9IG1hdHJpeCkgeworICAgICAgICBjdXJyZW50Um9vdExheWVy
LT5zZXRPcGFjaXR5KG9wYWNpdHkpOworICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRUcmFu
c2Zvcm0obWF0cml4KTsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c3luY0NvbXBvc2l0aW5n
U3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgfQorCisgICAgbGF5ZXItPnBhaW50KCk7Cisg
ICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQ
YWludGluZygpOworCisgICAgc3luY0FuaW1hdGlvbnMoKTsKK30KKwordm9pZCBMYXllclRyZWVQ
YWludERhdGE6OnN5bmNBbmltYXRpb25zKCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxh
eWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOworICAgIEFTU0VSVChsYXll
cik7CisKKyAgICBsYXllci0+c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSgpOworICAgIGlmIChs
YXllci0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChiaW5kKCZMYXllclRyZWVQYWludERhdGE6OnVwZGF0ZVZpZXdwb3J0
LCB0aGlzKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUGFpbnREYXRhOjpwYWludFRvR3JhcGhpY3ND
b250ZXh0KFFQYWludGVyKiBwYWludGVyKQoreworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQor
ICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKKyAgICBB
U1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBl
cjo6U29mdHdhcmVNb2RlKTsKKyAgICBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIFRleHR1cmVN
YXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7CisK
KyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQg
Z3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhp
Y3NDb250ZXh0KCZncmFwaGljc0NvbnRleHQpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5Q
YWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7CisgICAgbGF5
ZXItPnBhaW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOworICAgIG1f
dGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KDApOworfQorCit2b2lkIExheWVyVHJl
ZVBhaW50RGF0YTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvclNjYWxpbmcoY29uc3QgSW50UmVj
dCYgcmVjdCwgZmxvYXQgc2NhbGUpCit7CisgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVj
dDsKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKK30KKwordm9pZCBMYXllclRyZWVQYWlu
dERhdGE6OnVwZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkp
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT51cGRhdGVWaWV3cG9ydCgpOworfQorCit2
b2lkIExheWVyVHJlZVBhaW50RGF0YTo6c3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJMYXll
ckluZm8mIGxheWVySW5mbykKK3sKKyAgICBXZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlkOwor
ICAgIGVuc3VyZUxheWVyKGlkKTsKKyAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVy
cy5maW5kKGlkKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7CisgICAg
Ym9vbCBuZWVkc1RvVXBkYXRlSW1hZ2VUaWxlcyA9IGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCB8
fCAobGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCAhPSBsYXllci0+Y29udGVudHNSZWN0KCkgJiYgbGF5
ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworCisgICAgbGF5ZXItPnNldE5hbWUobGF5ZXJJ
bmZvLm5hbWUpOworCisgICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVyQnlJRChs
YXllckluZm8ucmVwbGljYSkpOworICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIobGF5ZXJCeUlEKGxh
eWVySW5mby5tYXNrKSk7CisKKyAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7
CisgICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOworICAgIGxheWVyLT5zZXRUcmFu
c2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxh
eWVySW5mby5hbmNob3JQb2ludCk7CisgICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxh
eWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJp
bGl0eShsYXllckluZm8uYmFja2ZhY2VWaXNpYmxlKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNP
cGFxdWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNS
ZWN0KGxheWVySW5mby5jb250ZW50c1JlY3QpOworICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQo
bGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7CisKKyAgICBpZiAobmVlZHNUb1VwZGF0ZUltYWdlVGls
ZXMpCisgICAgICAgIGFzc2lnbkltYWdlVG9MYXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlQmFj
a2luZ1N0b3JlSUQpOworCisgICAgLy8gTmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgor
ICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKGxheWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNl
IDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMpOworICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVy
SW5mby5vcGFjaXR5KTsKKyAgICBsYXllci0+c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNl
cnZlczNEKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOworCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsYXllckluZm8uY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgV2ViTGF5ZXJJRCBjaGlsZElEID0gbGF5ZXJJbmZvLmNoaWxkcmVuW2ldOworICAgICAg
ICBHcmFwaGljc0xheWVyKiBjaGlsZCA9IGxheWVyQnlJRChjaGlsZElEKTsKKyAgICAgICAgaWYg
KCFjaGlsZCkgeworICAgICAgICAgICAgY2hpbGQgPSBjcmVhdGVMYXllcihjaGlsZElEKS5sZWFr
UHRyKCk7CisgICAgICAgICAgICBtX2xheWVycy5hZGQoY2hpbGRJRCwgY2hpbGQpOworICAgICAg
ICB9CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgfQorICAgIGxheWVyLT5z
ZXRDaGlsZHJlbihjaGlsZHJlbik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVy
SW5mby5hbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFdlYktpdDo6V2Vi
TGF5ZXJBbmltYXRpb24gYW5pbSA9IGxheWVySW5mby5hbmltYXRpb25zW2ldOworCisgICAgICAg
IHN3aXRjaCAoYW5pbS5vcGVyYXRpb24pIHsKKyAgICAgICAgY2FzZSBXZWJLaXQ6OldlYkxheWVy
QW5pbWF0aW9uOjpBZGRBbmltYXRpb246IHsKKyAgICAgICAgICAgIGNvbnN0IEludFNpemUgYm94
U2l6ZSA9IGFuaW0uYm94U2l6ZTsKKyAgICAgICAgICAgIGxheWVyLT5hZGRBbmltYXRpb24oYW5p
bS5rZXlmcmFtZUxpc3QsIGJveFNpemUsIGFuaW0uYW5pbWF0aW9uLmdldCgpLCBhbmltLm5hbWUs
IGFuaW0uc3RhcnRUaW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgV2ViS2l0OjpXZWJMYXllckFuaW1hdGlvbjo6UmVtb3ZlQW5pbWF0aW9uOgorICAgICAg
ICAgICAgbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihhbmltLm5hbWUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV2ViS2l0OjpXZWJMYXllckFuaW1hdGlvbjo6UGF1c2VBbmltYXRp
b246CisgICAgICAgICAgICBkb3VibGUgb2Zmc2V0ID0gV1RGOjpjdXJyZW50VGltZSgpIC0gYW5p
bS5zdGFydFRpbWU7CisgICAgICAgICAgICBsYXllci0+cGF1c2VBbmltYXRpb24oYW5pbS5uYW1l
LCBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAobGF5ZXJJbmZvLmlzUm9vdExheWVyICYmIG1fcm9vdExheWVySUQgIT0gaWQpCisgICAgICAg
IHNldFJvb3RMYXllcklEKGlkKTsKK30KKwordm9pZCBMYXllclRyZWVQYWludERhdGE6OmRlbGV0
ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9
IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBsYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fbGF5ZXJzLnJlbW92ZShsYXll
cklEKTsKKyAgICBkZWxldGUgbGF5ZXI7Cit9CisKKwordm9pZCBMYXllclRyZWVQYWludERhdGE6
OmVuc3VyZUxheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgLy8gV2UgaGF2ZSB0byBsZWFrIHRo
ZSBuZXcgbGF5ZXIncyBwb2ludGVyIGFuZCBtYW5hZ2UgaXQgb3Vyc2VsdmVzLAorICAgIC8vIGJl
Y2F1c2UgT3duUHRyIGlzIG5vdCBjb3B5YWJsZS4KKyAgICBpZiAobV9sYXllcnMuZmluZChpZCkg
PT0gbV9sYXllcnMuZW5kKCkpCisgICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgY3JlYXRlTGF5ZXIo
aWQpLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUGFpbnREYXRhOjpzZXRSb290TGF5
ZXJJRChXZWJMYXllcklEIGxheWVySUQpCit7CisgICAgaWYgKGxheWVySUQgPT0gbV9yb290TGF5
ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7CisK
KyAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgIGlmICghbGF5ZXJJ
RCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5
SUQobGF5ZXJJRCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9y
b290TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKK30KKworUGFzc1JlZlB0cjxMYXllckJhY2tpbmdT
dG9yZT4gTGF5ZXJUcmVlUGFpbnREYXRhOjpnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCBpZCkK
K3sKKyAgICBlbnN1cmVMYXllcihpZCk7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9
IHRvVGV4dHVyZU1hcHBlckxheWVyKGxheWVyQnlJRChpZCkpOworICAgIFJlZlB0cjxMYXllckJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gc3RhdGljX2Nhc3Q8TGF5ZXJCYWNraW5nU3RvcmUq
PihsYXllci0+YmFja2luZ1N0b3JlKCkuZ2V0KCkpOworICAgIGlmICghYmFja2luZ1N0b3JlKSB7
CisgICAgICAgIGJhY2tpbmdTdG9yZSA9IExheWVyQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAg
ICAgICAgbGF5ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0KCkpOworICAgIH0K
KyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gYmFja2luZ1N0b3JlOworfQor
Cit2b2lkIExheWVyVHJlZVBhaW50RGF0YTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQs
IGludCB0aWxlSUQsIGZsb2F0IHNjYWxlKQoreworICAgIGdldEJhY2tpbmdTdG9yZShsYXllcklE
KS0+Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKK30KKwordm9pZCBMYXllclRyZWVQYWludERh
dGE6OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQoreworICAgIGdl
dEJhY2tpbmdTdG9yZShsYXllcklEKS0+cmVtb3ZlVGlsZSh0aWxlSUQpOworfQorCit2b2lkIExh
eWVyVHJlZVBhaW50RGF0YTo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxl
SUQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3Qs
IFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFwKQoreworICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7CisgICAgUmVmUHRyPExheWVyQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCk7CisgICAg
YmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwg
Yml0bWFwLmdldCgpKTsKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRk
KGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUGFpbnREYXRhOjpjcmVhdGVJbWFn
ZShpbnQ2NF90IGltYWdlSUQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFw
KQoreworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7Cisg
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0g
VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICBiYWNraW5nU3Rv
cmUtPnVwZGF0ZUNvbnRlbnRzKG1fdGV4dHVyZU1hcHBlci5nZXQoKSwgYml0bWFwLT5jcmVhdGVJ
bWFnZSgpLmdldCgpLCBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0KTsKKyAgICBtX2RpcmVjdGx5
Q29tcG9zaXRlZEltYWdlcy5zZXQoaW1hZ2VJRCwgYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBM
YXllclRyZWVQYWludERhdGE6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCit7CisgICAg
bV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOworfQorCit2b2lkIExh
eWVyVHJlZVBhaW50RGF0YTo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVy
LCBpbnQ2NF90IGltYWdlSUQpCit7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5maW5kKGltYWdlSUQpOworICAgIEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5lbmQoKSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+c2Vj
b25kLmdldCgpKTsKK30KKwordm9pZCBMYXllclRyZWVQYWludERhdGE6OnN3YXBCdWZmZXJzKCkK
K3sKKyAgICBIYXNoU2V0PFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5k
ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgpOworICAgIGZvciAoSGFz
aFNldDxSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5n
U3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgKCppdCktPnN3YXBCdWZmZXJzKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisKKyAgICBtX2Jh
Y2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKK30KKwordm9pZCBMYXllclRy
ZWVQYWludERhdGE6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBtX3Jvb3RMYXllci0+c3lu
Y0NvbXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOworICAgIHN3YXBCdWZmZXJzKCk7CisKKyAg
ICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMgd2F5IGZvciB0aGUgc2NyZWVu
LCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQgb25lLgorICAgIGNhbGxP
bk1haW5UaHJlYWQoYmluZCgmTGF5ZXJUcmVlUGFpbnREYXRhOjpyZW5kZXJOZXh0RnJhbWUsIHRo
aXMpKTsKK30KKwordm9pZCBMYXllclRyZWVQYWludERhdGE6OnJlbmRlck5leHRGcmFtZSgpCit7
CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQ
cm94eS0+cmVuZGVyTmV4dEZyYW1lKCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUGFpbnREYXRhOjpl
bnN1cmVSb290TGF5ZXIoKQoreworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CisKKyAgICBt
X3Jvb3RMYXllciA9IGNyZWF0ZUxheWVyKEludmFsaWRXZWJMYXllcklEKTsKKyAgICBtX3Jvb3RM
YXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldERyYXdz
Q29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQzRCgwLCAwLCAwKSk7CisKKyAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUg
emVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgorICAgIG1fcm9vdExheWVy
LT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVy
KG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0
KCkpOworfQorCit2b2lkIExheWVyVHJlZVBhaW50RGF0YTo6c3luY1JlbW90ZUNvbnRlbnQoKQor
eworICAgIC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFp
bnQsIGFzIHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wgY29udGV4dC4KKyAgICBlbnN1cmVSb290
TGF5ZXIoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZW5kZXJRdWV1ZS5zaXpl
KCk7ICsraSkKKyAgICAgICAgbV9yZW5kZXJRdWV1ZVtpXSgpOworCisgICAgbV9yZW5kZXJRdWV1
ZS5jbGVhcigpOworfQorCisKK3ZvaWQgTGF5ZXJUcmVlUGFpbnREYXRhOjpwdXJnZUdMUmVzb3Vy
Y2VzKCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVy
TGF5ZXIocm9vdExheWVyKCkpOworCisgICAgaWYgKGxheWVyKQorICAgICAgICBsYXllci0+Y2xl
YXJCYWNraW5nU3RvcmVzUmVjdXJzaXZlKCk7CisKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlcy5jbGVhcigpOworICAgIG1fdGV4dHVyZU1hcHBlci5jbGVhcigpOworICAgIG1fYmFja2lu
Z1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOworCisgICAgY2FsbE9uTWFpblRocmVh
ZChiaW5kKCZMYXllclRyZWVQYWludERhdGE6OnB1cmdlQmFja2luZ1N0b3JlcywgdGhpcykpOwor
fQorCit2b2lkIExheWVyVHJlZVBhaW50RGF0YTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKKyAg
ICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5
LT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKK30KKworLy8gRml4ZWQgcG9pbnQgdmFsdWUgc3RvcmVk
IGZvciBzY2FsZSBpbiB1bnNpZ25lZCBpbnRlZ2VyIHRvIGF2b2lkCisvLyB1c2Ugb2YgbXV0ZXgg
YnkgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zLgorY29uc3QgdW5zaWduZWQgRmxvYXRUb0ZpeGVk
TXVsdGlwbGllciA9IDEgPDwgMTY7CitmbG9hdCBMYXllclRyZWVQYWludERhdGE6OnNjYWxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmxvYXQobV9zY2FsZSkgLyBGbG9hdFRvRml4ZWRNdWx0aXBs
aWVyOworfQorCit2b2lkIExheWVyVHJlZVBhaW50RGF0YTo6c2V0U2NhbGUoZmxvYXQgc2NhbGUp
Cit7CisgICAgQVNTRVJUKHNjYWxlID49IDApOworICAgIHVuc2lnbmVkIGZpeGVkID0gdW5zaWdu
ZWQoc2NhbGUgKiBGbG9hdFRvRml4ZWRNdWx0aXBsaWVyKTsKKyAgICBXVEY6OndlYWtDb21wYXJl
QW5kU3dhcCgmbV9zY2FsZSwgbV9zY2FsZSwgZml4ZWQpOworfQorCit2b2lkIExheWVyVHJlZVBh
aW50RGF0YTo6ZGV0YWNoKCkKK3sKKyAgICBtX2xheWVyVHJlZUhvc3RQcm94eSA9IDA7Cit9CisK
K3ZvaWQgTGF5ZXJUcmVlUGFpbnREYXRhOjphcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9p
ZCgpPiYgZnVuY3Rpb24pCit7CisgICAgbV9yZW5kZXJRdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdExheWVyVHJlZVNHTm9kZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRMYXllclRyZWVTR05vZGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQyMTE4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRMYXllclRyZWVTR05vZGUuY3BwCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisjaW5jbHVkZSAiUXRMYXllclRyZWVTR05vZGUuaCIKKworI2luY2x1ZGUgIkxh
eWVyVHJlZVBhaW50RGF0YS5oIgorCisjaW5jbHVkZSA8UXRRdWljay9RdFF1aWNrPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworUXRMYXllclRyZWVTR05vZGU6OlF0TGF5ZXJUcmVlU0dOb2RlKFBh
c3NSZWZQdHI8TGF5ZXJUcmVlUGFpbnREYXRhPiBsYXllclRyZWVQYWludERhdGEpIDoKKyAgICAg
ICAgbV9sYXllclRyZWVQYWludERhdGEobGF5ZXJUcmVlUGFpbnREYXRhKQoreworfQorCitRdExh
eWVyVHJlZVNHTm9kZTo6flF0TGF5ZXJUcmVlU0dOb2RlKCkKK3sKKyAgICBtX2xheWVyVHJlZVBh
aW50RGF0YS0+cHVyZ2VHTFJlc291cmNlcygpOworfQorCit2b2lkIFF0TGF5ZXJUcmVlU0dOb2Rl
OjpyZW5kZXIoY29uc3QgUmVuZGVyU3RhdGUmIHN0YXRlKQoreworICAgIFFNYXRyaXg0eDQgbTsK
KyAgICBpZiAobWF0cml4KCkpCisgICAgICAgIG0gPSAqKG1hdHJpeCgpKTsKKyAgICBtLnNjYWxl
KG1fbGF5ZXJUcmVlUGFpbnREYXRhLT5zY2FsZSgpKTsKKyAgICBtX2xheWVyVHJlZVBhaW50RGF0
YS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgo
bSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
aGVyaXRlZE9wYWNpdHkoKSwgY2xpcFJlY3Qoc3RhdGUpKTsKK30KKworUVNHUmVuZGVyTm9kZTo6
U3RhdGVGbGFncyBRdExheWVyVHJlZVNHTm9kZTo6Y2hhbmdlZFN0YXRlcygpCit7CisgICAgcmV0
dXJuIFN0YXRlRmxhZ3MoU3RlbmNpbFN0YXRlKSB8IENvbG9yU3RhdGUgfCBCbGVuZFN0YXRlOwor
fQorCitzdGF0aWMgUVBvaW50RiB0b1ZpZXdQb3J0Q29vcmRpbmF0ZXMoY29uc3QgUVBvaW50RiYg
cG9pbnQsIGNvbnN0IFFSZWN0RiYgdmlld3BvcnQpCit7CisgICAgcmV0dXJuIFFQb2ludEYoKHBv
aW50LngoKSArIDEpICogdmlld3BvcnQud2lkdGgoKSAqIDAuNSwKKyAgICAgICAgICAgICAgICAg
ICB2aWV3cG9ydC5oZWlnaHQoKSAtIChwb2ludC55KCkgKyAxKSAqIHZpZXdwb3J0LmhlaWdodCgp
ICogMC41KTsKK30KKworc3RhdGljIHZvaWQgYWRqdXN0Qm91bmRpbmdSZWN0KFFSZWN0RiYgcmVj
dCwgY29uc3QgUVBvaW50RiYgcG9pbnQpCit7CisgICAgaWYgKHJlY3QudG9wKCkgPiBwb2ludC55
KCkpCisgICAgICAgIHJlY3Quc2V0VG9wKHBvaW50LnkoKSk7CisgICAgZWxzZSBpZiAocmVjdC5i
b3R0b20oKSA8IHBvaW50LnkoKSkKKyAgICAgICAgcmVjdC5zZXRCb3R0b20ocG9pbnQueSgpKTsK
KworICAgIGlmIChyZWN0LmxlZnQoKSA+IHBvaW50LngoKSkKKyAgICAgICAgcmVjdC5zZXRMZWZ0
KHBvaW50LngoKSk7CisgICAgZWxzZSBpZiAocmVjdC5yaWdodCgpIDwgcG9pbnQueCgpKQorICAg
ICAgICByZWN0LnNldFJpZ2h0KHBvaW50LngoKSk7Cit9CisKK1FSZWN0RiBRdExheWVyVHJlZVNH
Tm9kZTo6Y2xpcFJlY3QoY29uc3QgUmVuZGVyU3RhdGUgJnN0YXRlKSBjb25zdAoreworICAgIGNv
bnN0IFFTR0NsaXBOb2RlKiBjbGlwID0gY2xpcExpc3QoKTsKKyAgICBRUmVjdEYgcmV0UmVjdCgw
LCAwLCAtMSwgLTEpOworCisgICAgR0xpbnQgdmlld3BvcnRbNF07CisgICAgZ2xHZXRJbnRlZ2Vy
dihHTF9WSUVXUE9SVCwgdmlld3BvcnQpOworICAgIFFSZWN0RiB2aWV3cG9ydFJlY3Qodmlld3Bv
cnRbMF0sIHZpZXdwb3J0WzFdLCB2aWV3cG9ydFsyXSwgdmlld3BvcnRbM10pOworCisgICAgd2hp
bGUgKGNsaXApIHsKKyAgICAgICAgUU1hdHJpeDR4NCBtID0gKihzdGF0ZS5wcm9qZWN0aW9uTWF0
cml4KTsKKyAgICAgICAgaWYgKGNsaXAtPm1hdHJpeCgpKQorICAgICAgICAgICAgbSAqPSAqY2xp
cC0+bWF0cml4KCk7CisgICAgICAgIFFSZWN0RiBjdXJyZW50Q2xpcDsKKworICAgICAgICBpZiAo
Y2xpcC0+aXNSZWN0YW5ndWxhcigpKSB7CisgICAgICAgICAgICBRUmVjdEYgY2xpcFJlY3QgPSBj
bGlwLT5jbGlwUmVjdCgpOworICAgICAgICAgICAgY3VycmVudENsaXAuc2V0VG9wTGVmdCh0b1Zp
ZXdQb3J0Q29vcmRpbmF0ZXMobS5tYXAoY2xpcFJlY3QudG9wTGVmdCgpKSwgdmlld3BvcnRSZWN0
KSk7CisgICAgICAgICAgICBhZGp1c3RCb3VuZGluZ1JlY3QoY3VycmVudENsaXAsIHRvVmlld1Bv
cnRDb29yZGluYXRlcyhtLm1hcChjbGlwUmVjdC50b3BSaWdodCgpKSwgdmlld3BvcnRSZWN0KSk7
CisgICAgICAgICAgICBhZGp1c3RCb3VuZGluZ1JlY3QoY3VycmVudENsaXAsIHRvVmlld1BvcnRD
b29yZGluYXRlcyhtLm1hcChjbGlwUmVjdC5ib3R0b21MZWZ0KCkpLCB2aWV3cG9ydFJlY3QpKTsK
KyAgICAgICAgICAgIGFkanVzdEJvdW5kaW5nUmVjdChjdXJyZW50Q2xpcCwgdG9WaWV3UG9ydENv
b3JkaW5hdGVzKG0ubWFwKGNsaXBSZWN0LmJvdHRvbVJpZ2h0KCkpLCB2aWV3cG9ydFJlY3QpKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnN0IFFTR0dlb21ldHJ5KiBnZW9tZXRy
eSA9IGNsaXAtPmdlb21ldHJ5KCk7CisgICAgICAgICAgICAvLyBBc3N1bWUgaGVyZSB0aGF0IGNs
aXBOb2RlIGhhcyBvbmx5IGNvb3JkaW5hdGUgZGF0YS4KKyAgICAgICAgICAgIGNvbnN0IFFTR0dl
b21ldHJ5OjpQb2ludDJEKiBnZW9tZXRyeVBvaW50cyA9IGdlb21ldHJ5LT52ZXJ0ZXhEYXRhQXNQ
b2ludDJEKCk7CisKKyAgICAgICAgICAgIGlmIChnZW9tZXRyeS0+dmVydGV4Q291bnQoKSA+IDEp
IHsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q2xpcC5zZXRUb3BMZWZ0KAorICAgICAgICAgICAg
ICAgICAgICB0b1ZpZXdQb3J0Q29vcmRpbmF0ZXMobS5tYXAoUVBvaW50KGdlb21ldHJ5UG9pbnRz
WzBdLngsIGdlb21ldHJ5UG9pbnRzWzBdLnkpKSwgdmlld3BvcnRSZWN0KSk7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGdlb21ldHJ5LT52ZXJ0ZXhDb3VudCgpOyBpKysp
CisgICAgICAgICAgICAgICAgICAgIGFkanVzdEJvdW5kaW5nUmVjdChjdXJyZW50Q2xpcCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRvVmlld1BvcnRDb29yZGluYXRlcyhtLm1hcChRUG9pbnQo
Z2VvbWV0cnlQb2ludHNbaV0ueCwgZ2VvbWV0cnlQb2ludHNbaV0ueSkpLCB2aWV3cG9ydFJlY3Qp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghY3VycmVudENsaXAu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAocmV0UmVjdC5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgcmV0UmVjdCAmPSBjdXJyZW50Q2xpcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICByZXRSZWN0ID0gY3VycmVudENsaXA7CisgICAgICAgIH0KKworICAgICAgICBj
bGlwID0gY2xpcC0+Y2xpcExpc3QoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0UmVjdDsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRMYXll
clRyZWVTR05vZGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdExheWVyVHJlZVNH
Tm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDE2M2UKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRMYXllclRyZWVTR05v
ZGUuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFF0TGF5
ZXJUcmVlU0dOb2RlX2gKKyNkZWZpbmUgUXRMYXllclRyZWVTR05vZGVfaAorCisjaW5jbHVkZSA8
cHJpdmF0ZS9xc2dyZW5kZXJub2RlX3AuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK2Ns
YXNzIFFRdWlja0l0ZW07CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTGF5ZXJUcmVlUGFp
bnREYXRhOworY2xhc3MgUXRMYXllclRyZWVTR05vZGUgOiBwdWJsaWMgUVNHUmVuZGVyTm9kZSB7
CitwdWJsaWM6CisgICAgUXRMYXllclRyZWVTR05vZGUoUGFzc1JlZlB0cjxMYXllclRyZWVQYWlu
dERhdGE+KTsKKyAgICB+UXRMYXllclRyZWVTR05vZGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBy
ZW5kZXIoY29uc3QgUmVuZGVyU3RhdGUmKTsKKyAgICB2aXJ0dWFsIFN0YXRlRmxhZ3MgY2hhbmdl
ZFN0YXRlcygpOworICAgIExheWVyVHJlZVBhaW50RGF0YSogbGF5ZXJUcmVlUGFpbnREYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVQYWludERhdGEuZ2V0KCk7IH0KKworcHJpdmF0ZToK
KyAgICBRUmVjdEYgY2xpcFJlY3QoY29uc3QgUmVuZGVyU3RhdGUmKSBjb25zdDsKKyAgICBSZWZQ
dHI8TGF5ZXJUcmVlUGFpbnREYXRhPiBtX2xheWVyVHJlZVBhaW50RGF0YTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUXRMYXllclRyZWVTR05vZGVfaApkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ5MTUyYTUuLmJi
NzRiYTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0wOCAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8b3N0
YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFtXSzJdIFN1cHBv
cnQgdGhyZWFkZWQgcmVuZGVyZXIgaW4gV0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZSBkaXNhYmxpbmcgb2YgdGhyZWFkZWQgcmVuZGVyaW5n
LgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvbWFpbi5jcHA6CisgICAgICAgIChtYWluKToK
KwogMjAxMi0wMy0wNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW0dUS10gcmVtb3ZlIHdlYmtpdHB5IGRlcGVuZGVuY3kgaW4gcnVuLWd0ay10ZXN0
cwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAgYi9Ub29scy9NaW5p
QnJvd3Nlci9xdC9tYWluLmNwcAppbmRleCBmZWFlMTRhLi4zNjYzNzczIDEwMDY0NAotLS0gYS9U
b29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9t
YWluLmNwcApAQCAtMzksOSArMzksNiBAQAogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFy
Z3YpCiB7Ci0gICAgLy8gRklYTUU6IFdlIG11c3QgYWRkIHN1cHBvcnQgZm9yIHRoZSB0aHJlYWRl
ZCByZW5kZXJpbmcgYXMgaXQgaXMgdGhlIGRlZmF1bHQuCi0gICAgcXB1dGVudigiUU1MX05PX1RI
UkVBREVEX1JFTkRFUkVSIiwgUUJ5dGVBcnJheSgiMSIpKTsKLQogICAgIE1pbmlCcm93c2VyQXBw
bGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwogCiAgICAgaWYgKGFwcC5pc1JvYm90aXplZCgpKSB7
Cg==
</data>
<flag name="review"
          id="134133"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="134134"
          type_id="3"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131047</attachid>
            <date>2012-03-09 09:37:51 -0800</date>
            <delta_ts>2012-03-10 08:35:19 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>ThreadedPainting_02.diff</filename>
            <type>text/plain</type>
            <size>61222</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZGU4YTg3Li4zYzc1ZDEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTItMDMtMDkgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hl
c2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVkIHJl
bmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgY29udmVyc2lvbnMgZnJvbS90byBRdCBRTWF0cml4NHg0IC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIFFNYXRyaXg0eDQpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6VHJhbnNmb3JtYXRpb25NYXRyaXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Ry
YW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaDoKKyAgICAgICAgKFRyYW5zZm9ybWF0aW9u
TWF0cml4KToKKwogMjAxMi0wMy0wNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0Lmh0bWwg
aXMgZmxha3kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAKaW5kZXggNmE1NzM1Yi4uN2ZmNDMy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNm
b3JtYXRpb25NYXRyaXhRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAKQEAgLTUwLDYgKzUwLDIyIEBAIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBRVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCiAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tMzEoKSwgdHJhbnNmb3JtLm0zMigp
LCAwLCB0cmFuc2Zvcm0ubTMzKCkpOwogfQogCitUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0
b3IgUU1hdHJpeDR4NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFNYXRyaXg0eDQobTExKCksIG0x
MigpLCBtMTMoKSwgbTE0KCksCisgICAgICAgICAgICAgICAgICAgICAgbTIxKCksIG0yMigpLCBt
MjMoKSwgbTI0KCksCisgICAgICAgICAgICAgICAgICAgICAgbTMxKCksIG0zMigpLCBtMzMoKSwg
bTM0KCksCisgICAgICAgICAgICAgICAgICAgICAgbTQxKCksIG00MigpLCBtNDMoKSwgbTQ0KCkp
OworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3Qg
UU1hdHJpeDR4NCYgbWF0cml4KQoreworICAgIHNldE1hdHJpeChtYXRyaXgoMCwgMCksIG1hdHJp
eCgxLCAwKSwgbWF0cml4KDIsIDApLCBtYXRyaXgoMywgMCksCisgICAgICAgICAgICAgIG1hdHJp
eCgwLCAxKSwgbWF0cml4KDEsIDEpLCBtYXRyaXgoMiwgMSksIG1hdHJpeCgzLCAxKSwKKyAgICAg
ICAgICAgICAgbWF0cml4KDAsIDIpLCBtYXRyaXgoMSwgMiksIG1hdHJpeCgyLCAyKSwgbWF0cml4
KDMsIDIpLAorICAgICAgICAgICAgICBtYXRyaXgoMCwgMyksIG1hdHJpeCgxLCAzKSwgbWF0cml4
KDIsIDMpLCBtYXRyaXgoMywgMykpOworfQorCiB9CiAKIC8vIHZpbTogdHM9NCBzdz00IGV0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1Ry
YW5zZm9ybWF0aW9uTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKaW5kZXggYTk4ZDcwZS4uNzY1ZTc4MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9U
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaApAQCAtNDEsNiArNDEsNyBAQCB0
eXBlZGVmIHN0cnVjdCBDR0FmZmluZVRyYW5zZm9ybSBDR0FmZmluZVRyYW5zZm9ybTsKICNlbGlm
IFBMQVRGT1JNKE9QRU5WRykKICNpbmNsdWRlICJWR1V0aWxzLmgiCiAjZWxpZiBQTEFURk9STShR
VCkKKyNpbmNsdWRlIDxRTWF0cml4NHg0PgogI2luY2x1ZGUgPFFUcmFuc2Zvcm0+CiAjZWxpZiBV
U0UoU0tJQSkKICNpbmNsdWRlIDxTa01hdHJpeC5oPgpAQCAtODIsNiArODMsNyBAQCBwdWJsaWM6
CiAKICNpZiBQTEFURk9STShRVCkKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBRVHJh
bnNmb3JtJik7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgUU1hdHJpeDR4NCYpOwog
I2VuZGlmCiAKICAgICB2b2lkIHNldE1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBj
LCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQpAQCAtMzI4LDYgKzMzMCw3IEBAIHB1Ymxp
YzoKICAgICBvcGVyYXRvciBWR01hdHJpeCgpIGNvbnN0OwogI2VsaWYgUExBVEZPUk0oUVQpCiAg
ICAgb3BlcmF0b3IgUVRyYW5zZm9ybSgpIGNvbnN0OworICAgIG9wZXJhdG9yIFFNYXRyaXg0eDQo
KSBjb25zdDsKICNlbGlmIFVTRShTS0lBKQogICAgIG9wZXJhdG9yIFNrTWF0cml4KCkgY29uc3Q7
CiAjZWxpZiBQTEFURk9STShXWCkgJiYgVVNFKFdYR0MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzNmYWU4MC4u
ZmU0MTQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNCBAQAorMjAxMi0wMy0wOSAgVmlhdGNo
ZXNsYXYgT3N0YXBlbmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAg
ICAgICBbUXRdIFtXSzJdIFN1cHBvcnQgdGhyZWFkZWQgcmVuZGVyZXIgaW4gV0syCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBRdDUgdGhy
ZWFkZWQgcmVuZGVyaW5nIHN1cHBvcnQgZm9yIFF0IFdlYktpdDIuCisgICAgICAgIFBhcnRzIG9m
IExheWVyVHJlZUhvc3RQcm94eSB3aGljaCBjb250YWluIGxheWVyIHRyZWUgYW5kIGxheWVyIHRy
ZWUgCisgICAgICAgIHBhaW50aW5nIG9iamVjdHMgYXJlIG1vdmVkIHRvIHNlcGFyYXRlIGNsYXNz
IFdlYkxheWVyVHJlZVJlbmRlcmVyLiAKKyAgICAgICAgV2ViTGF5ZXJUcmVlUmVuZGVyZXIgaXMg
dGhyZWFkIHNhZmUgcmVmIGNvdW50ZWQgYW5kIHJlZmVyZW5jZWQgCisgICAgICAgIGJ5IExheWVy
VHJlZUhvc3RQcm94eSBhbmQgcGFpbnQgbm9kZS4KKyAgICAgICAgQWxsIGxheWVyIHRyZWUgYW5k
IGdyYXBoaWNzIG9iamVjdHMgYXJlIGNyZWF0ZWQsIGFjY2Vzc2VkIGFuZCBkZWFsbG9jYXRlZAor
ICAgICAgICBmcm9tIHBhaW50IHRocmVhZCBvbmx5LgorICAgICAgICBMYXllciB0cmVlIHVwZGF0
ZXMgZnJvbSByZW5kZXIgcXVldWUgYXJlIGZldGNoZWQgaW4KKyAgICAgICAgdXBkYXRlUGFpbnRO
b2RlIGNhbGwgc3RhY2sgd2hlbiBtYWluIHRocmVhZCBpcyBsb2NrZWQuCisgICAgICAgIE1lc3Nh
Z2VzIGZyb20gcGFpbnQgdGhyZWFkIHRvIHdlYiBwcm9jZXNzIGFyZSBwYXNzZWQgdGhyb3VnaAor
ICAgICAgICBNYWluVGhyZWFkR3VhcmRlZEludm9rZXIgY2FsbCBnYXRlIChpbXBsZW1lbnRlZCBi
eSBOb2FtIFJvc2VudGhhbCkuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHA6CisgICAgICAgIChRUXVpY2tXZWJQYWdl
OjpRUXVpY2tXZWJQYWdlKToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9k
ZSk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAg
KFFRdWlja1dlYlBhZ2VQcml2YXRlOjp+UVF1aWNrV2ViUGFnZVByaXZhdGUpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHA6CisgICAgICAgIChRUXVpY2tXZWJW
aWV3OjpRUXVpY2tXZWJWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFBy
b3h5Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoTGF5ZXJUcmVlSG9zdFByb3h5KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oLgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmxheWVyQnlJRCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVJlbmRlcmVyOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVSZW5kZXJlcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVJlbmRlcmVyOjpub3RpZnlTeW5jUmVxdWlyZWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzaG93UmVwYWludENvdW50ZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRDb250ZW50cyk6CisgICAgICAg
ICogVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6TGF5ZXJUcmVlSG9zdFBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp+TGF5ZXJUcmVlSG9z
dFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3Vy
cmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFp
bnRUb0dyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94
eTo6ZGlzcGF0Y2hVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6
OmNyZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94
eTo6dXBkYXRlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFBy
b3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0
UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKToKKyAgICAgICAg
KFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZSk6CisgICAgICAgIChX
ZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2Up
OgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lEaXJlY3RseUNv
bXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdEZvclNjYWxpbmcpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJl
ZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJU
cmVlSG9zdFByb3h5Ojp1cGRhdGVQYWludE5vZGUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OnNldFJlbmRlclNjYWxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlU0dOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0OjpRdFdlYlBhZ2VTR05vZGU6OlF0V2ViUGFnZVNHTm9kZSk6CisgICAgICAgIChXZWJLaXQ6
OlF0V2ViUGFnZVNHTm9kZTo6flF0V2ViUGFnZVNHTm9kZSk6CisgICAgICAgIChXZWJLaXQ6OlF0
V2ViUGFnZVNHTm9kZTo6cmVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlU0dOb2Rl
OjpjaGFuZ2VkU3RhdGVzKToKKyAgICAgICAgKFdlYktpdDo6YWRqdXN0Qm91bmRpbmdSZWN0KToK
KyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlU0dOb2RlOjpjbGlwUmVjdCk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChRdFdlYlBhZ2VTR05vZGUpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VT
R05vZGU6OndlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvV2Vi
TGF5ZXJUcmVlUmVuZGVyZXJRdC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAuCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoTWFpblRocmVhZEd1YXJkZWRJbnZva2VyKToKKyAgICAgICAgKFdlYktpdDo6TWFpblRo
cmVhZEd1YXJkZWRJbnZva2VyOjpjYWxsKToKKyAgICAgICAgKFdlYktpdDo6TWFpblRocmVhZEd1
YXJkZWRJbnZva2VyOjpNYWluVGhyZWFkR3VhcmRlZEludm9rZXIpOgorICAgICAgICAoV2ViS2l0
OjpNYWluVGhyZWFkR3VhcmRlZEludm9rZXI6Omludm9rZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVJlbmRlcmVyOjpjYWxsT25NYWluVHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllclRyZWVSZW5kZXJlcjo6V2ViTGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6fldlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUxheWVyKToKKyAgICAgICAg
KFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNBbmltYXRpb25zKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9HcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdEZvclNjYWxpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVS
ZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVS
ZW5kZXJlcjo6c3luY0xheWVyUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
VHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVJlbmRlcmVyOjplbnN1cmVMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJl
bmRlcmVyOjpzZXRSb290TGF5ZXJJRCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJl
bmRlcmVyOjpnZXRCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVS
ZW5kZXJlcjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRl
cmVyOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3Jl
YXRlSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJv
eUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFzc2lnbklt
YWdlVG9MYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzd2Fw
QnVmZmVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExh
eWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW5k
ZXJOZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6ZW5z
dXJlUm9vdExheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5
bmNSZW1vdGVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnB1cmdlR0xSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJl
cjo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OnNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjphcHBlbmRVcGRhdGUpOgor
CiAyMDEyLTAzLTA3ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0
Lm9yZz4KIAogICAgICAgICBQaW5jaCB6b29tIGFjdHMgd2VpcmRseSBvbiBueXRpbWVzLmNvbSB3
aGlsZSBsb2FkaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291
cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCAxMzIwNTZhLi5hNTg2MDg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5w
cmkKQEAgLTI0Miw2ICsyNDIsNyBAQCBIRUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvV2ViSWNv
bkRhdGFiYXNlQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5oIFwK
ICAgICBVSVByb2Nlc3MvV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlclByb3h5LmggXAorICAgIFVJ
UHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oIFwKICAgICBVSVByb2Nlc3MvV2ViTG9hZGVy
Q2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9XZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5LmggXAog
ICAgIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uRGF0YS5oIFwKQEAgLTI2OCw2ICsyNjksNyBAQCBI
RUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmggXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VMb2FkQ2xpZW50LmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VQb2xpY3lDbGllbnQuaCBcCisgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlVUlDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL3F0
L1F0RmxpY2tQcm92aWRlci5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lLmggXApAQCAtNTk5LDYgKzYwMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJv
Y2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlTG9h
ZENsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VQb2xpY3lDbGllbnQuY3Bw
IFwKKyAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmNwcCBcCiAgICAgVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZVVJQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1RleHRDaGVja2Vy
UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmNwcCBcCkBAIC02MDgs
NiArNjExLDcgQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYkdlb2xvY2F0aW9u
UHJvdmlkZXJRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViSW5zcGVjdG9yUHJveHlRdC5jcHAgXAor
ICAgIFVJUHJvY2Vzcy9xdC9XZWJMYXllclRyZWVSZW5kZXJlclF0LmNwcCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1dlYlBhZ2VQcm94eVF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1dlYlBvcHVwTWVu
dVByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvV2ViUHJlZmVyZW5jZXNRdC5jcHAgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAK
aW5kZXggZDU4ZmVmZS4uZjg5NjgzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0zNiw2ICszNiw3IEBAIFFRdWlja1dlYlBh
Z2U6OlFRdWlja1dlYlBhZ2UoUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVtKQogICAgICwgZChu
ZXcgUVF1aWNrV2ViUGFnZVByaXZhdGUodGhpcywgdmlld3BvcnRJdGVtKSkKIHsKICAgICBzZXRG
bGFnKEl0ZW1IYXNDb250ZW50cyk7CisgICAgc2V0Q2xpcCh0cnVlKTsKIAogICAgIC8vIFdlIGRv
IHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgdG9wIGxlZnQgc28gdGhlIHZpZXdwb3J0IGNhbiBhc3N1
bWUgdGhlIHBvc2l0aW9uIDAsIDAKICAgICAvLyBpcyBhbHdheXMgd2hlcmUgcmVuZGVyaW5nIHN0
YXJ0cy4KQEAgLTc3LDY2ICs3OCwxMiBAQCB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWlu
dChRUGFpbnRlciogcGFpbnRlcikKICAgICAgICAgd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgp
LT5wYWludExheWVyVHJlZShwYWludGVyKTsKIH0KIAotdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0
ZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgUVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBm
bG9hdCBvcGFjaXR5KQotewotICAgIGlmICghcS0+aXNWaXNpYmxlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFFSZWN0RiBjbGlwUmVjdCA9IHZpZXdwb3J0SXRlbS0+bWFwUmVjdFRvU2NlbmUo
dmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKSk7Ci0KLSAgICBpZiAoIWNsaXBSZWN0LmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0Fy
ZWEgPSB3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7Ci0gICAgaWYgKCFkcmF3aW5nQXJlYSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZHJhd2luZ0FyZWEtPnBhaW50VG9DdXJyZW50R0xDb250
ZXh0KFFUcmFuc2Zvcm0odHJhbnNmb3JtKS5zY2FsZShjb250ZW50c1NjYWxlLCBjb250ZW50c1Nj
YWxlKSwgb3BhY2l0eSwgY2xpcFJlY3QpOwotfQotCi1zdHJ1Y3QgUGFnZVByb3h5Tm9kZSA6IHB1
YmxpYyBRU0dSZW5kZXJOb2RlIHsKLSAgICBQYWdlUHJveHlOb2RlKFFRdWlja1dlYlBhZ2VQcml2
YXRlKiBwYWdlKQotICAgICAgICA6IG1fcGFnZVByaXZhdGUocGFnZSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCBTdGF0ZUZsYWdzIGNoYW5nZWRTdGF0ZXMoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIFN0YXRlRmxhZ3MoU3RlbmNpbFN0YXRlKSB8IENvbG9yU3RhdGUgfCBCbGVuZFN0YXRl
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCByZW5kZXIoY29uc3QgUmVuZGVyU3RhdGUmKQot
ICAgIHsKLSAgICAgICAgaWYgKCFtX3BhZ2VQcml2YXRlKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBRVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1hdHJpeCgpID8gbWF0cml4KCktPnRvVHJh
bnNmb3JtKCkgOiBRVHJhbnNmb3JtKCk7Ci0gICAgICAgIG1fcGFnZVByaXZhdGUtPnBhaW50VG9D
dXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybSwgaW5oZXJpdGVkT3BhY2l0eSgpKTsKLSAgICB9Ci0K
LSAgICB+UGFnZVByb3h5Tm9kZSgpCi0gICAgewotICAgICAgICBpZiAobV9wYWdlUHJpdmF0ZSkK
LSAgICAgICAgICAgIG1fcGFnZVByaXZhdGUtPnJlc2V0UGFpbnROb2RlKCk7Ci0gICAgfQotCi0g
ICAgUVF1aWNrV2ViUGFnZVByaXZhdGUqIG1fcGFnZVByaXZhdGU7Ci19OwotCiBRU0dOb2RlKiBR
UXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSwgVXBkYXRlUGFp
bnROb2RlRGF0YSopCiB7Ci0gICAgaWYgKCEoZmxhZ3MoKSAmIEl0ZW1IYXNDb250ZW50cykpIHsK
LSAgICAgICAgaWYgKG9sZE5vZGUpCi0gICAgICAgICAgICBkZWxldGUgb2xkTm9kZTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGlmIChkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVh
KCkpCisgICAgICAgIHJldHVybiBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVy
VHJlZUhvc3RQcm94eSgpLT51cGRhdGVQYWludE5vZGUob2xkTm9kZSk7CiAKLSAgICBQYWdlUHJv
eHlOb2RlKiBwcm94eU5vZGUgPSBzdGF0aWNfY2FzdDxQYWdlUHJveHlOb2RlKj4ob2xkTm9kZSk7
Ci0gICAgaWYgKCFwcm94eU5vZGUpIHsKLSAgICAgICAgcHJveHlOb2RlID0gbmV3IFBhZ2VQcm94
eU5vZGUoZCk7Ci0gICAgICAgIGQtPm1fcGFpbnROb2RlID0gcHJveHlOb2RlOwotICAgIH0KLQot
ICAgIHJldHVybiBwcm94eU5vZGU7CisgICAgcmV0dXJuIG9sZE5vZGU7CiB9CiAKIFF0V2ViUGFn
ZUV2ZW50SGFuZGxlciogUVF1aWNrV2ViUGFnZTo6ZXZlbnRIYW5kbGVyKCkgY29uc3QKQEAgLTE2
NCw2ICsxMTEsOCBAQCB2b2lkIFFRdWlja1dlYlBhZ2U6OnNldENvbnRlbnRzU2NhbGUocXJlYWwg
c2NhbGUpCiAgICAgQVNTRVJUKHNjYWxlID4gMCk7CiAgICAgZC0+Y29udGVudHNTY2FsZSA9IHNj
YWxlOwogICAgIGQtPnVwZGF0ZVNpemUoKTsKKyAgICBpZiAoZC0+d2ViUGFnZVByb3h5LT5kcmF3
aW5nQXJlYSgpKQorICAgICAgICBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVy
VHJlZUhvc3RQcm94eSgpLT5zZXRSZW5kZXJTY2FsZShzY2FsZSk7CiB9CiAKIHFyZWFsIFFRdWlj
a1dlYlBhZ2U6OmNvbnRlbnRzU2NhbGUoKSBjb25zdApAQCAtMTkwLDE4ICsxMzksOCBAQCB2b2lk
IFFRdWlja1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVTaXplKCkKICAgICB2aWV3cG9ydEl0ZW0tPnVw
ZGF0ZUNvbnRlbnRzU2l6ZShzY2FsZWRTaXplKTsKIH0KIAotdm9pZCBRUXVpY2tXZWJQYWdlUHJp
dmF0ZTo6cmVzZXRQYWludE5vZGUoKQotewotICAgIG1fcGFpbnROb2RlID0gMDsKLSAgICBEcmF3
aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsK
LSAgICBpZiAoZHJhd2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgp
KQotICAgICAgICBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCktPnB1cmdlR0xSZXNv
dXJjZXMoKTsKLX0KLQogUVF1aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tXZWJQYWdlUHJpdmF0
ZSgpCiB7Ci0gICAgaWYgKG1fcGFpbnROb2RlKQotICAgICAgICBzdGF0aWNfY2FzdDxQYWdlUHJv
eHlOb2RlKj4obV9wYWludE5vZGUpLT5tX3BhZ2VQcml2YXRlID0gMDsKIH0KIAogI2luY2x1ZGUg
Im1vY19xcXVpY2t3ZWJwYWdlX3AuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggZjAxY2UwMi4uZGE3YjdiZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBA
IC0xMTI3LDYgKzExMjcsNyBAQCBRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZQogewogICAgIFFfRChR
UXVpY2tXZWJWaWV3KTsKICAgICBkLT5pbml0aWFsaXplKGNvbnRleHRSZWYsIHBhZ2VHcm91cFJl
Zik7CisgICAgc2V0Q2xpcCh0cnVlKTsKIH0KIAogUVF1aWNrV2ViVmlldzo6flFRdWlja1dlYlZp
ZXcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCmlu
ZGV4IGIzZDUxMmYuLjgzYTY4ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5
ZXJUcmVlSG9zdFByb3h5LmgKQEAgLTI1LDggKzI1LDYgQEAKICNpbmNsdWRlICJCYWNraW5nU3Rv
cmUuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgi
Ci0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaCIKICNpbmNsdWRlICJXZWJMYXllclRyZWVJbmZvLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIu
aD4KQEAgLTM3LDE0ICszNSwxNSBAQAogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KIAorY2xhc3MgUVNHTm9kZTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLWNsYXNzIExheWVyQmFja2luZ1N0b3JlOwogY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xh
c3MgV2ViTGF5ZXJUcmVlUmVuZGVyZXI7CiBjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CiAKLWNs
YXNzIExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK2NsYXNzIExheWVyVHJlZUhvc3RQcm94eSB7CiBwdWJsaWM6CiAgICAgTGF5ZXJUcmVl
SG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKICAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0
UHJveHkoKTsKQEAgLTUyLDEzICs1MSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVDb21w
b3NpdGluZ0xheWVyKFdlYkxheWVySUQpOwogICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIoV2ViTGF5ZXJJRCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25u
ZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsK
LSAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZv
aWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCBvcGFjaXR5LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXApOwog
ICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0KTsKICAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKICAgICB2b2lkIHNl
dFZpc2libGVDb250ZW50c1JlY3RGb3JTY2FsaW5nKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBm
bG9hdCk7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yUGFubmluZyhjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHZvaWQg
c3luY1JlbW90ZUNvbnRlbnQoKTsKLSAgICB2b2lkIHN3YXBDb250ZW50QnVmZmVycygpOwogICAg
IHZvaWQgZGlkUmVuZGVyRnJhbWUoKTsKICAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJik7CiAgICAgdm9p
ZCB1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktp
dDo6VXBkYXRlSW5mbyYpOwpAQCAtNjcsNTkgKzY0LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRl
c3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90KTsKICAgICB2b2lkIGRpZFJlY2Vp
dmVMYXllclRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBD
OjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwogICAgIHZvaWQgdXBkYXRl
Vmlld3BvcnQoKTsKKyAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VC
YWNraW5nU3RvcmVzKCk7CisjaWYgUExBVEZPUk0oUVQpCisgICAgUVNHTm9kZSogdXBkYXRlUGFp
bnROb2RlKFFTR05vZGUqIG9sZE5vZGUpOworI2VuZGlmCisgICAgdm9pZCBzZXRSZW5kZXJTY2Fs
ZShmbG9hdCk7CiAKIHByb3RlY3RlZDoKLSAgICBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IGNyZWF0ZUxheWVyKFdlYkxheWVySUQpOwotCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciogbGF5ZXJCeUlEKFdlYkxheWVySUQgaWQpIHsgcmV0dXJuIChpZCA9PSBJbnZhbGlkV2Vi
TGF5ZXJJRCkgPyAwIDogbV9sYXllcnMuZ2V0KGlkKTsgfQotICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9Ci0KLSAgICAv
LyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQuCi0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIGRvdWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5bmNSZXF1
aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9Ci0gICAgdmlydHVhbCBib29s
IHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRlcihjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9Ci0KLSAgICBEcmF3aW5nQXJlYVByb3h5KiBtX2Ry
YXdpbmdBcmVhUHJveHk7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllcio+IExheWVyTWFwOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNp
YmxlQ29udGVudHNSZWN0OwotICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKLQotICAgIFZlY3Rv
cjxGdW5jdGlvbjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1ZTsKICAgICB2b2lkIGRpc3BhdGNoVXBk
YXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKIAotI2lmIFVTRShURVhUVVJFX01BUFBFUikK
LSAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwotICAg
IFBhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGdldEJhY2tpbmdTdG9yZShXZWJMYXllcklE
KTsKLSAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFj
a2luZ1N0b3JlPiA+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOwotICAgIEhhc2hTZXQ8UmVm
UHRyPExheWVyQmFja2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVy
czsKLSNlbmRpZgotCi0gICAgdm9pZCBzY2hlZHVsZVdlYlZpZXdVcGRhdGUoKTsKLSAgICB2b2lk
IHN5bmNocm9uaXplVmlld3BvcnQoKTsKLSAgICB2b2lkIGRlbGV0ZUxheWVyKFdlYkxheWVySUQp
OwotICAgIHZvaWQgc2V0Um9vdExheWVySUQoV2ViTGF5ZXJJRCk7Ci0gICAgdm9pZCBzeW5jTGF5
ZXJQYXJhbWV0ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYpOwotICAgIHZvaWQgY3JlYXRlVGlsZShX
ZWJMYXllcklELCBpbnQsIGZsb2F0IHNjYWxlKTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5
ZXJJRCwgaW50KTsKLSAgICB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPik7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBQYXNzUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4pOwotICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOwotICAg
IHZvaWQgYXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90
IGltYWdlSUQpOwotICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGVuc3Vy
ZVJvb3RMYXllcigpOwotICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0gICAgdm9p
ZCBzd2FwQnVmZmVycygpOwotICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKLQotICAgIE93blB0
cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKLSAgICBWZWN0b3I8V2ViTGF5
ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKLQotICAgIExheWVyTWFwIG1fbGF5ZXJzOwotICAgIFdl
YkxheWVySUQgbV9yb290TGF5ZXJJRDsKLSAgICBpbnQgbV9pZDsKKyAgICBEcmF3aW5nQXJlYVBy
b3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7CisgICAgUmVmUHRyPFdlYkxheWVyVHJlZVJlbmRlcmVy
PiBtX3dlYkxheWVyVHJlZVJlbmRlcmVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kZmMxYWU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpZm5kZWYgV2ViTGF5ZXJUcmVlUmVuZGVyZXJfaAorI2RlZmluZSBXZWJM
YXllclRyZWVSZW5kZXJlcl9oCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5o
IgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KKyNp
bmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllckJhY2tpbmdTdG9yZTsKK2NsYXNzIExheWVy
VHJlZUhvc3RQcm94eTsKK2NsYXNzIFdlYkxheWVySW5mbzsKK2NsYXNzIFdlYkxheWVyVXBkYXRl
SW5mbzsKKworCitjbGFzcyBXZWJMYXllclRyZWVSZW5kZXJlciA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxXZWJMYXllclRyZWVSZW5kZXJlcj4sIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBXZWJMYXllclRyZWVSZW5kZXJlcihMYXllclRy
ZWVIb3N0UHJveHkqKTsKKyAgICB2aXJ0dWFsIH5XZWJMYXllclRyZWVSZW5kZXJlcigpOworICAg
IHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRl
eHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0KEJhY2tp
bmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOworICAgIHZvaWQgc3luY1JlbW90ZUNv
bnRlbnQoKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RGb3JTY2FsaW5nKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCk7CisKKyAgICBmbG9hdCBzY2FsZSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0U2NhbGUoZmxvYXQpOworICAgIHZvaWQgZGV0YWNoKCk7CisgICAgdm9pZCBh
cHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgdXBkYXRlVmll
d3BvcnQoKTsKKworICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBz
ZXRSb290TGF5ZXJJRChXZWJMYXllcklEKTsKKyAgICB2b2lkIHN5bmNMYXllclBhcmFtZXRlcnMo
Y29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdm9pZCBjcmVhdGVUaWxlKFdlYkxheWVySUQsIGlu
dCwgZmxvYXQgc2NhbGUpOworICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXllcklELCBpbnQpOwor
ICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+
KTsKKyAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjcmVhdGVJbWFnZShp
bnQ2NF90LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4pOworICAgIHZvaWQgZGVzdHJveUlt
YWdlKGludDY0X3QpOworCitwcml2YXRlOgorICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhp
Y3NMYXllcj4gY3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CisKKyAgICBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBpZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRX
ZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQoaWQpOyB9CisgICAgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KKworICAg
IC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudC4K
KyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1Jl
cXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2Us
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2b2lkIGNhbGxPbk1haW5UcmVhZChj
b25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViTGF5ZXJJ
RCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IExheWVyTWFwOworICAgIFdlYkNvcmU6OkludFJl
Y3QgbV92aXNpYmxlQ29udGVudHNSZWN0OworICAgIGZsb2F0IG1fY29udGVudHNTY2FsZTsKKwor
ICAgIC8vIFJlbmRlciBxdWV1ZSBjYW4gYmUgYWNjZXNzZWQgb255IGZyb20gbWFpbiB0aHJlYWQg
b3IgdXBkYXRlUGFpbnROb2RlIGNhbGwgc3RhY2shCisgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQo
KT4gPiBtX3JlbmRlclF1ZXVlOworCisjaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQorICAgIE93blB0
cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CisgICAgUGFzc1JlZlB0
cjxMYXllckJhY2tpbmdTdG9yZT4gZ2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQpOworICAgIEhh
c2hNYXA8aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+
ID4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7CisgICAgSGFzaFNldDxSZWZQdHI8TGF5ZXJC
YWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOworI2VuZGlm
CisKKyAgICB2b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgpOworICAgIHZvaWQgc3luY2hyb25p
emVWaWV3cG9ydCgpOworICAgIHZvaWQgYXNzaWduSW1hZ2VUb0xheWVyKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdlSUQpOworICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7
CisgICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJz
KCk7CisgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOworICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1l
KCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIExheWVyVHJlZUhvc3RQ
cm94eSogbV9sYXllclRyZWVIb3N0UHJveHk7CisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJMYXllcklEPiBtX2xheWVyc1RvRGVs
ZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgV2ViTGF5ZXJJRCBtX3Jvb3RMYXll
cklEOworICAgIHVuc2lnbmVkIG1fc2NhbGU7Cit9OworCit9OworCisjZW5kaWYgLy8gV2ViTGF5
ZXJUcmVlUmVuZGVyZXJfaAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCmluZGV4IDIxZmI5OTUuLmI5MGRiZGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0
LmNwcApAQCAtMjEsMTA4ICsyMSwzOSBAQAogCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5
LmgiCiAKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUg
IkxheWVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgi
Ci0jaW5jbHVkZSAiTWFpblRocmVhZC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckxheWVyLmgiCisjaW5jbHVkZSAiUXRXZWJQYWdlU0dOb2RlLmgiCiAjaW5jbHVkZSAiVXBkYXRl
SW5mby5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldl
YkxheWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5kZXJlci5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2lu
Y2x1ZGUgPE9wZW5HTFNoaW1zLmg+Ci0jaW5jbHVkZSA8UURhdGVUaW1lPgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NPd25QdHI8R3JhcGhp
Y3NMYXllcj4gTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVMYXllcihXZWJMYXllcklEIGxheWVy
SUQpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbmV3TGF5ZXIgPSBuZXcgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIodGhpcyk7Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4
dHVyZU1hcHBlckxheWVyKG5ld0xheWVyKTsKLSAgICBsYXllci0+c2V0U2hvdWxkVXBkYXRlQmFj
a2luZ1N0b3JlRnJvbUxheWVyKGZhbHNlKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3TGF5ZXIp
OwotfQotCiBMYXllclRyZWVIb3N0UHJveHk6OkxheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJl
YVByb3h5KiBkcmF3aW5nQXJlYVByb3h5KQogICAgIDogbV9kcmF3aW5nQXJlYVByb3h5KGRyYXdp
bmdBcmVhUHJveHkpCi0gICAgLCBtX3Jvb3RMYXllcklEKDApCisgICAgLCBtX3dlYkxheWVyVHJl
ZVJlbmRlcmVyKGFkb3B0UmVmKG5ldyBXZWJMYXllclRyZWVSZW5kZXJlcih0aGlzKSkpCiB7CiB9
CiAKIExheWVyVHJlZUhvc3RQcm94eTo6fkxheWVyVHJlZUhvc3RQcm94eSgpCiB7CisgICAgbV93
ZWJMYXllclRyZWVSZW5kZXJlci0+ZGV0YWNoKCk7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gbmVl
ZHMgdG8gYmUgcmVlbnRyYW50Lgotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9w
YWNpdHksIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QpCit2b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBw
ZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7Ci0g
ICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVN
YXBwZXI6Ok9wZW5HTE1vZGUpOwotCi0gICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKLSAgICBHcmFw
aGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7Ci0gICAgaWYgKCFjdXJy
ZW50Um9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIq
IGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RMYXllcik7Ci0KLSAgICBp
ZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0VGV4dHVyZU1hcHBl
cihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWlu
dGluZygpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7Ci0gICAgbV90ZXh0
dXJlTWFwcGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3QpOwot
Ci0gICAgaWYgKGN1cnJlbnRSb290TGF5ZXItPm9wYWNpdHkoKSAhPSBvcGFjaXR5IHx8IGN1cnJl
bnRSb290TGF5ZXItPnRyYW5zZm9ybSgpICE9IG1hdHJpeCkgewotICAgICAgICBjdXJyZW50Um9v
dExheWVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgICAgICBjdXJyZW50Um9vdExheWVyLT5z
ZXRUcmFuc2Zvcm0obWF0cml4KTsKLSAgICAgICAgY3VycmVudFJvb3RMYXllci0+c3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgfQotCi0gICAgbGF5ZXItPnBhaW50
KCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVy
LT5lbmRQYWludGluZygpOwotCi0gICAgc3luY0FuaW1hdGlvbnMoKTsKKyAgICBtX3dlYkxheWVy
VHJlZVJlbmRlcmVyLT5zeW5jUmVtb3RlQ29udGVudCgpOworICAgIG1fd2ViTGF5ZXJUcmVlUmVu
ZGVyZXItPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KG1hdHJpeCwgb3BhY2l0eSwgcmVjdCk7CiB9
CiAKLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQW5pbWF0aW9ucygpCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0IGNvbnRleHQpCiB7Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBs
YXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJvb3RMYXllcigpKTsKLSAgICBBU1NFUlQobGF5
ZXIpOwotCi0gICAgbGF5ZXItPnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKLSAgICBpZiAo
bGF5ZXItPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCi0gICAgICAg
IHVwZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRv
R3JhcGhpY3NDb250ZXh0KFFQYWludGVyKiBwYWludGVyKQotewotICAgIGlmICghbV90ZXh0dXJl
TWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUo
KTsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4
dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKLSAgICBzeW5jUmVtb3RlQ29udGVudCgpOwotICAg
IFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5
ZXIoKSk7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+
c2V0R3JhcGhpY3NDb250ZXh0KCZncmFwaGljc0NvbnRleHQpOwotICAgIG1fdGV4dHVyZU1hcHBl
ci0+YmVnaW5QYWludGluZygpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7
Ci0gICAgbGF5ZXItPnBhaW50KCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygp
OwotICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KDApOworICAgIG1fd2Vi
TGF5ZXJUcmVlUmVuZGVyZXItPnBhaW50VG9HcmFwaGljc0NvbnRleHQoY29udGV4dCk7CiB9CiAK
IHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCkBAIC0xMzAsMjE2ICs2
MSwxNSBAQCB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQoKQogICAgIG1f
ZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKIH0KIAotdm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllcklu
Zm8pCi17Ci0gICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5pZDsKLSAgICBlbnN1cmVMYXll
cihpZCk7Ci0gICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7Ci0g
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOwotICAgIGJvb2wgbmVlZHNUb1Vw
ZGF0ZUltYWdlVGlsZXMgPSBsYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgfHwgKGxheWVySW5mby5j
b250ZW50c1JlY3QgIT0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpICYmIGxheWVySW5mby5pbWFnZUJh
Y2tpbmdTdG9yZUlEKTsKLQotICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKLQot
ICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLnJlcGxp
Y2EpKTsKLSAgICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8ubWFzaykp
OwotCi0gICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOwotICAgIGxheWVyLT5z
ZXRTaXplKGxheWVySW5mby5zaXplKTsKLSAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5m
by50cmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8uYW5jaG9y
UG9pbnQpOwotICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8uY2hpbGRy
ZW5UcmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJJbmZv
LmJhY2tmYWNlVmlzaWJsZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxheWVySW5m
by5jb250ZW50c09wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8u
Y29udGVudHNSZWN0KTsKLSAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3
c0NvbnRlbnQpOwotCi0gICAgaWYgKG5lZWRzVG9VcGRhdGVJbWFnZVRpbGVzKQotICAgICAgICBh
c3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsK
LQotICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xpcC4KLSAgICBsYXllci0+c2V0
TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5t
YXNrc1RvQm91bmRzKTsKLSAgICBsYXllci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7
Ci0gICAgbGF5ZXItPnNldFByZXNlcnZlczNEKGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7Ci0gICAg
VmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGF5ZXJJbmZvLmNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYkxheWVy
SUQgY2hpbGRJRCA9IGxheWVySW5mby5jaGlsZHJlbltpXTsKLSAgICAgICAgR3JhcGhpY3NMYXll
ciogY2hpbGQgPSBsYXllckJ5SUQoY2hpbGRJRCk7Ci0gICAgICAgIGlmICghY2hpbGQpIHsKLSAg
ICAgICAgICAgIGNoaWxkID0gY3JlYXRlTGF5ZXIoY2hpbGRJRCkubGVha1B0cigpOwotICAgICAg
ICAgICAgbV9sYXllcnMuYWRkKGNoaWxkSUQsIGNoaWxkKTsKLSAgICAgICAgfQotICAgICAgICBj
aGlsZHJlbi5hcHBlbmQoY2hpbGQpOwotICAgIH0KLSAgICBsYXllci0+c2V0Q2hpbGRyZW4oY2hp
bGRyZW4pOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckluZm8uYW5pbWF0aW9u
cy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBXZWJLaXQ6OldlYkxheWVyQW5pbWF0aW9u
IGFuaW0gPSBsYXllckluZm8uYW5pbWF0aW9uc1tpXTsKLQotICAgICAgICBzd2l0Y2ggKGFuaW0u
b3BlcmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgV2ViS2l0OjpXZWJMYXllckFuaW1hdGlvbjo6QWRk
QW5pbWF0aW9uOiB7Ci0gICAgICAgICAgICBjb25zdCBJbnRTaXplIGJveFNpemUgPSBhbmltLmJv
eFNpemU7Ci0gICAgICAgICAgICBsYXllci0+YWRkQW5pbWF0aW9uKGFuaW0ua2V5ZnJhbWVMaXN0
LCBib3hTaXplLCBhbmltLmFuaW1hdGlvbi5nZXQoKSwgYW5pbS5uYW1lLCBhbmltLnN0YXJ0VGlt
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYktpdDo6
V2ViTGF5ZXJBbmltYXRpb246OlJlbW92ZUFuaW1hdGlvbjoKLSAgICAgICAgICAgIGxheWVyLT5y
ZW1vdmVBbmltYXRpb24oYW5pbS5uYW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFdlYktpdDo6V2ViTGF5ZXJBbmltYXRpb246OlBhdXNlQW5pbWF0aW9uOgotICAgICAgICAg
ICAgZG91YmxlIG9mZnNldCA9IFdURjo6Y3VycmVudFRpbWUoKSAtIGFuaW0uc3RhcnRUaW1lOwot
ICAgICAgICAgICAgbGF5ZXItPnBhdXNlQW5pbWF0aW9uKGFuaW0ubmFtZSwgb2Zmc2V0KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxheWVySW5mby5p
c1Jvb3RMYXllciAmJiBtX3Jvb3RMYXllcklEICE9IGlkKQotICAgICAgICBzZXRSb290TGF5ZXJJ
RChpZCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVMYXllcihXZWJMYXll
cklEIGxheWVySUQpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5
ZXJJRCk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnJl
bW92ZUZyb21QYXJlbnQoKTsKLSAgICBtX2xheWVycy5yZW1vdmUobGF5ZXJJRCk7Ci0gICAgZGVs
ZXRlIGxheWVyOwotfQotCi0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVMYXllcihX
ZWJMYXllcklEIGlkKQotewotICAgIC8vIFdlIGhhdmUgdG8gbGVhayB0aGUgbmV3IGxheWVyJ3Mg
cG9pbnRlciBhbmQgbWFuYWdlIGl0IG91cnNlbHZlcywKLSAgICAvLyBiZWNhdXNlIE93blB0ciBp
cyBub3QgY29weWFibGUuCi0gICAgaWYgKG1fbGF5ZXJzLmZpbmQoaWQpID09IG1fbGF5ZXJzLmVu
ZCgpKQotICAgICAgICBtX2xheWVycy5hZGQoaWQsIGNyZWF0ZUxheWVyKGlkKS5sZWFrUHRyKCkp
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdExheWVySUQoV2ViTGF5ZXJJ
RCBsYXllcklEKQotewotICAgIGlmIChsYXllcklEID09IG1fcm9vdExheWVySUQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fcm9vdExheWVySUQgPSBsYXllcklEOwotCi0gICAgbV9yb290TGF5
ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7Ci0KLSAgICBpZiAoIWxheWVySUQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOwot
ICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcm9vdExheWVyLT5hZGRD
aGlsZChsYXllcik7Ci19Ci0KLVBhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IExheWVyVHJl
ZUhvc3RQcm94eTo6Z2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQgaWQpCi17Ci0gICAgZW5zdXJl
TGF5ZXIoaWQpOwotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBw
ZXJMYXllcihsYXllckJ5SUQoaWQpKTsKLSAgICBSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGJh
Y2tpbmdTdG9yZSA9IHN0YXRpY19jYXN0PExheWVyQmFja2luZ1N0b3JlKj4obGF5ZXItPmJhY2tp
bmdTdG9yZSgpLmdldCgpKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICBiYWNr
aW5nU3RvcmUgPSBMYXllckJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAgICAgIGxheWVyLT5z
ZXRCYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlLmdldCgpKTsKLSAgICB9Ci0gICAgQVNTRVJUKGJh
Y2tpbmdTdG9yZSk7Ci0gICAgcmV0dXJuIGJhY2tpbmdTdG9yZTsKLX0KLQotdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBm
bG9hdCBzY2FsZSkKLXsKLSAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPmNyZWF0ZVRpbGUo
dGlsZUlELCBzY2FsZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxl
KFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKLXsKLSAgICBnZXRCYWNraW5nU3RvcmUo
bGF5ZXJJRCktPnJlbW92ZVRpbGUodGlsZUlEKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OnVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBQYXNzUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKLXsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBiaXRtYXAgPSB3ZWFrQml0bWFwOwotICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpOwotICAgIGJhY2tpbmdTdG9yZS0+
dXBkYXRlVGlsZSh0aWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGJpdG1hcC5nZXQoKSk7
Ci0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUp
OwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFn
ZUlELCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKLXsKLSAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFrQml0bWFwOwotICAgIFJlZlB0cjxUZXh0
dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBwZXJU
aWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAgYmFja2luZ1N0b3JlLT51cGRhdGVDb250
ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSwg
Qml0bWFwVGV4dHVyZTo6QkdSQUZvcm1hdCk7Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFn
ZXMuc2V0KGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFBy
b3h5OjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQotewotICAgIG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OmFzc2lnbkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFn
ZUlEKQotewotICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5n
U3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChp
bWFnZUlEKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5k
KCkpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnNlY29uZC5nZXQoKSk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpzd2FwQnVmZmVycygpCi17Ci0gICAgSGFzaFNl
dDxSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGVuZCA9IG1fYmFja2luZ1N0
b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPExh
eWVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5k
aW5nQnVmZmVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5zd2Fw
QnVmZmVycyhtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotCi0gICAgbV9iYWNraW5nU3RvcmVzV2l0
aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojpm
bHVzaExheWVyQ2hhbmdlcygpCi17Ci0gICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0
YXRlKEZsb2F0UmVjdCgpKTsKLSAgICBzd2FwQnVmZmVycygpOwotCi0gICAgLy8gVGhlIHBlbmRp
bmcgdGlsZXMgc3RhdGUgaXMgb24gaXRzIHdheSBmb3IgdGhlIHNjcmVlbiwgdGVsbCB0aGUgd2Vi
IHByb2Nlc3MgdG8gcmVuZGVyIHRoZSBuZXh0IG9uZS4KLSAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpSZW5kZXJO
ZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcigpCi17Ci0gICAgaWYgKG1f
cm9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0gICAgbV9yb290TGF5ZXIgPSBjcmVhdGVMYXll
cihJbnZhbGlkV2ViTGF5ZXJJRCk7Ci0gICAgbV9yb290TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMo
ZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIG1f
cm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMCwgMCkpOwotCi0gICAg
Ly8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIHplcm8gc2l6ZSwgb3IgaXQgd291bGQg
YmUgb3B0aW1pemVkIG91dC4KLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShGbG9hdFNpemUoMS4w
LCAxLjApKTsKLSAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFw
cGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwot
ICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1h
cHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94
eTo6c3luY1JlbW90ZUNvbnRlbnQoKQotewotICAgIC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5k
IGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wg
Y29udGV4dC4KLSAgICBlbnN1cmVSb290TGF5ZXIoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9yZW5kZXJRdWV1ZS5zaXplKCk7ICsraSkKLSAgICAgICAgbV9yZW5kZXJRdWV1ZVtp
XSgpOwotCi0gICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOwotfQotCiB2b2lkIExheWVyVHJlZUhv
c3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24p
CiB7Ci0gICAgbV9yZW5kZXJRdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOworICAgIG1fd2ViTGF5ZXJU
cmVlUmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CiAgICAgdXBkYXRlVmlld3BvcnQo
KTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihpbnQg
bGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
KQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRl
VGlsZSwgdGhpcywgbGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnVwZGF0ZVNjYWxlRmFjdG9y
KSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0
ZVRpbGUsIG1fd2ViTGF5ZXJUcmVlUmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgdXBk
YXRlSW5mby51cGRhdGVTY2FsZUZhY3RvcikpOwogICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXll
cklELCB0aWxlSUQsIHVwZGF0ZUluZm8pOwogfQogCkBAIC0zNDksNDQgKzc5LDQ0IEBAIHZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0
aWxlSUQsIGNvbnN0IFdlYktpCiAgICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdXBkYXRlSW5mby51
cGRhdGVSZWN0cy5maXJzdCgpOwogICAgIEludFJlY3QgdGFyZ2V0UmVjdCA9IHVwZGF0ZUluZm8u
dXBkYXRlUmVjdEJvdW5kczsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZSh1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSk7Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlLCB0aGlzLCBs
YXllcklELCB0aWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGJpdG1hcCkpOworICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBtX3dl
YkxheWVyVHJlZVJlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHNvdXJjZVJlY3QsIHRh
cmdldFJlY3QsIGJpdG1hcCkpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3Zl
VGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlEKQogewotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZSwgdGhpcywgbGF5ZXJJRCwg
dGlsZUlEKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnJlbW92ZVRpbGUsIG1fd2ViTGF5ZXJUcmVlUmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJ
RCkpOwogfQogCiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xh
eWVyKFdlYkxheWVySUQgaWQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVl
SG9zdFByb3h5OjpkZWxldGVMYXllciwgdGhpcywgaWQpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIsIG1fd2ViTGF5ZXJUcmVlUmVu
ZGVyZXIuZ2V0KCksIGlkKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290
Q29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEIGlkKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdExheWVySUQsIHRoaXMsIGlkKSk7CisgICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklE
LCBtX3dlYkxheWVyVHJlZVJlbmRlcmVyLmdldCgpLCBpZCkpOwogfQogCiB2b2lkIExheWVyVHJl
ZUhvc3RQcm94eTo6c3luY0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8m
IGluZm8pCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5Ojpz
eW5jTGF5ZXJQYXJhbWV0ZXJzLCB0aGlzLCBpbmZvKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRlcnMsIG1fd2ViTGF5ZXJU
cmVlUmVuZGVyZXIuZ2V0KCksIGluZm8pKTsKIH0KIAogdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OmRpZFJlbmRlckZyYW1lKCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVI
b3N0UHJveHk6OmZsdXNoTGF5ZXJDaGFuZ2VzLCB0aGlzKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUo
YmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3dlYkxheWVy
VHJlZVJlbmRlcmVyLmdldCgpKSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVh
dGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFy
ZWFibGVCaXRtYXA6OkhhbmRsZSYgaGFuZGxlKQogewogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZSwgdGhpcywga2V5
LCBiaXRtYXApKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJl
cjo6Y3JlYXRlSW1hZ2UsIG1fd2ViTGF5ZXJUcmVlUmVuZGVyZXIuZ2V0KCksIGtleSwgYml0bWFw
KSk7CiB9CiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2UoaW50NjRfdCBrZXkpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJU
cmVlSG9zdFByb3h5OjpkZXN0cm95SW1hZ2UsIHRoaXMsIGtleSkpOworICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1fd2ViTGF5ZXJU
cmVlUmVuZGVyZXIuZ2V0KCksIGtleSkpOwogfQogCiB2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvclBhbm5pbmcoY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKQEAgLTM5NiwyMiArMTI2LDQzIEBAIHZv
aWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yUGFubmluZyhj
b25zdCBJbnRSZWN0JiByZWN0LCBjCiAKIHZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNp
YmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2Fs
ZSkKIHsKLSAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OwotICAgIG1fY29udGVudHNT
Y2FsZSA9IHNjYWxlOworICAgIG1fd2ViTGF5ZXJUcmVlUmVuZGVyZXItPnNldFZpc2libGVDb250
ZW50c1JlY3RGb3JTY2FsaW5nKHJlY3QsIHNjYWxlKTsKICAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpTZXRWaXNp
YmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhyZWN0LCBzY2FsZSksIG1fZHJhd2luZ0FyZWFQcm94
eS0+cGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAKLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJn
ZUdMUmVzb3VyY2VzKCkKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW5kZXJOZXh0RnJhbWUo
KQogewotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXll
cihyb290TGF5ZXIoKSk7Ci0KLSAgICBpZiAobGF5ZXIpCi0gICAgICAgIGxheWVyLT5jbGVhckJh
Y2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUo
KSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KIAotICAgIG1fZGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLmNsZWFy
KCk7Ci0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7Cit2b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKICAgICBtX2RyYXdp
bmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVI
b3N0OjpQdXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBh
Z2VJRCgpKTsKIH0KIAorUVNHTm9kZSogTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVQYWludE5v
ZGUoUVNHTm9kZSogb2xkTm9kZSkKK3sKKyAgICBRdFdlYlBhZ2VTR05vZGUqIG5vZGUgPSBzdGF0
aWNfY2FzdDxRdFdlYlBhZ2VTR05vZGUqPihvbGROb2RlKTsKKworICAgIGlmIChub2RlICYmIG5v
ZGUtPndlYkxheWVyVHJlZVJlbmRlcmVyKCkgIT0gbV93ZWJMYXllclRyZWVSZW5kZXJlcikgewor
ICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgTGF5ZXJUcmVlSG9zdFByb3h5IHdhcyBkZWxldGVk
IGFuZCByZWNyZWF0ZWQKKyAgICAgICAgLy8gd2hpbGUgb2xkIHBhaW50IG5vZGUgc3Vydml2ZWQu
IFRoaXMgY291bGQgaGFwcGVuIGlmIHdlYiBwcm9jZXNzCisgICAgICAgIC8vIGhhdmUgY3Jhc2hl
ZC4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gcmVjcmVhdGUgcGFpbnQgbm9kZS4KKyAgICAgICAg
ZGVsZXRlIG5vZGU7CisgICAgICAgIG5vZGUgPSAwOworICAgIH0KKworICAgIG1fd2ViTGF5ZXJU
cmVlUmVuZGVyZXItPnN5bmNSZW1vdGVDb250ZW50KCk7CisKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIG5vZGUgPSBuZXcgUXRXZWJQYWdlU0dOb2RlKG1fd2ViTGF5ZXJUcmVlUmVuZGVyZXIpOwor
CisgICAgcmV0dXJuIG5vZGU7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSZW5k
ZXJTY2FsZShmbG9hdCBzY2FsZSkKK3sKKyAgICBtX3dlYkxheWVyVHJlZVJlbmRlcmVyLT5zZXRT
Y2FsZShzY2FsZSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZVNHTm9kZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJk
ZWI2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdl
YlBhZ2VTR05vZGUuY3BwCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJRdFdlYlBhZ2VTR05vZGUuaCIKKworI2lu
Y2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVyLmgiCisKKyNpbmNsdWRlIDxRdFF1aWNrL1F0UXVp
Y2s+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitRdFdlYlBhZ2VTR05vZGU6OlF0V2ViUGFnZVNH
Tm9kZShQYXNzUmVmUHRyPFdlYkxheWVyVHJlZVJlbmRlcmVyPiBXZWJMYXllclRyZWVSZW5kZXJl
cikgOgorICAgICAgICBtX3dlYkxheWVyVHJlZVJlbmRlcmVyKFdlYkxheWVyVHJlZVJlbmRlcmVy
KQoreworfQorCitRdFdlYlBhZ2VTR05vZGU6On5RdFdlYlBhZ2VTR05vZGUoKQoreworICAgIG1f
d2ViTGF5ZXJUcmVlUmVuZGVyZXItPnB1cmdlR0xSZXNvdXJjZXMoKTsKK30KKwordm9pZCBRdFdl
YlBhZ2VTR05vZGU6OnJlbmRlcihjb25zdCBSZW5kZXJTdGF0ZSYgc3RhdGUpCit7CisgICAgUU1h
dHJpeDR4NCBtOworICAgIGlmIChtYXRyaXgoKSkKKyAgICAgICAgbSA9ICoobWF0cml4KCkpOwor
CisgICAgLy8gSGF2ZSB0byBhcHBseSByZW5kZXIgc2NhbGUgbWFudWFseSBiZWNhdXNlIGl0IGlz
IG5vIGFwcGxpZWQgb24gcGFnZSBpdGVtLgorICAgIC8vIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcv
Y2hhbmdlc2V0LzEwNDQ1MAorICAgIG0uc2NhbGUobV93ZWJMYXllclRyZWVSZW5kZXJlci0+c2Nh
bGUoKSk7CisgICAgbV93ZWJMYXllclRyZWVSZW5kZXJlci0+cGFpbnRUb0N1cnJlbnRHTENvbnRl
eHQoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgobSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXRlZE9wYWNpdHkoKSwgY2xpcFJl
Y3Qoc3RhdGUpKTsKK30KKworUVNHUmVuZGVyTm9kZTo6U3RhdGVGbGFncyBRdFdlYlBhZ2VTR05v
ZGU6OmNoYW5nZWRTdGF0ZXMoKQoreworICAgIHJldHVybiBTdGF0ZUZsYWdzKFN0ZW5jaWxTdGF0
ZSkgfCBDb2xvclN0YXRlIHwgQmxlbmRTdGF0ZTsKK30KKworc3RhdGljIHZvaWQgYWRqdXN0Qm91
bmRpbmdSZWN0KFFSZWN0RiYgcmVjdCwgY29uc3QgUVBvaW50RiYgcG9pbnQpCit7CisgICAgaWYg
KHJlY3QudG9wKCkgPiBwb2ludC55KCkpCisgICAgICAgIHJlY3Quc2V0VG9wKHBvaW50LnkoKSk7
CisgICAgZWxzZSBpZiAocmVjdC5ib3R0b20oKSA8IHBvaW50LnkoKSkKKyAgICAgICAgcmVjdC5z
ZXRCb3R0b20ocG9pbnQueSgpKTsKKworICAgIGlmIChyZWN0LmxlZnQoKSA+IHBvaW50LngoKSkK
KyAgICAgICAgcmVjdC5zZXRMZWZ0KHBvaW50LngoKSk7CisgICAgZWxzZSBpZiAocmVjdC5yaWdo
dCgpIDwgcG9pbnQueCgpKQorICAgICAgICByZWN0LnNldFJpZ2h0KHBvaW50LngoKSk7Cit9CisK
K1FSZWN0RiBRdFdlYlBhZ2VTR05vZGU6OmNsaXBSZWN0KGNvbnN0IFJlbmRlclN0YXRlICZzdGF0
ZSkgY29uc3QKK3sKKyAgICBjb25zdCBRU0dDbGlwTm9kZSogY2xpcCA9IGNsaXBMaXN0KCk7Cisg
ICAgUVJlY3RGIHJldFJlY3QoMCwgMCwgLTEsIC0xKTsKKworICAgIHdoaWxlIChjbGlwKSB7Cisg
ICAgICAgIFFNYXRyaXg0eDQgbTsKKyAgICAgICAgaWYgKGNsaXAtPm1hdHJpeCgpKQorICAgICAg
ICAgICAgbSAqPSAqY2xpcC0+bWF0cml4KCk7CisgICAgICAgIFFSZWN0RiBjdXJyZW50Q2xpcDsK
KworICAgICAgICBpZiAoY2xpcC0+aXNSZWN0YW5ndWxhcigpKQorICAgICAgICAgICAgY3VycmVu
dENsaXAgPSBtLm1hcFJlY3QoY2xpcC0+Y2xpcFJlY3QoKSk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgY29uc3QgUVNHR2VvbWV0cnkqIGdlb21ldHJ5ID0gY2xpcC0+Z2VvbWV0cnkoKTsK
KyAgICAgICAgICAgIC8vIEFzc3VtZSBoZXJlIHRoYXQgY2xpcE5vZGUgaGFzIG9ubHkgY29vcmRp
bmF0ZSBkYXRhLgorICAgICAgICAgICAgY29uc3QgUVNHR2VvbWV0cnk6OlBvaW50MkQqIGdlb21l
dHJ5UG9pbnRzID0gZ2VvbWV0cnktPnZlcnRleERhdGFBc1BvaW50MkQoKTsKKworICAgICAgICAg
ICAgaWYgKGdlb21ldHJ5LT52ZXJ0ZXhDb3VudCgpID4gMSkgeworICAgICAgICAgICAgICAgIGN1
cnJlbnRDbGlwLnNldFRvcExlZnQobS5tYXAoUVBvaW50KGdlb21ldHJ5UG9pbnRzWzBdLngsIGdl
b21ldHJ5UG9pbnRzWzBdLnkpKSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsg
aSA8IGdlb21ldHJ5LT52ZXJ0ZXhDb3VudCgpOyBpKyspCisgICAgICAgICAgICAgICAgICAgIGFk
anVzdEJvdW5kaW5nUmVjdChjdXJyZW50Q2xpcCwgbS5tYXAoUVBvaW50KGdlb21ldHJ5UG9pbnRz
W2ldLngsIGdlb21ldHJ5UG9pbnRzW2ldLnkpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIWN1cnJlbnRDbGlwLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYg
KHJldFJlY3QuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldFJlY3QgJj0gY3VycmVudENs
aXA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0UmVjdCA9IGN1cnJlbnRD
bGlwOworICAgICAgICB9CisKKyAgICAgICAgY2xpcCA9IGNsaXAtPmNsaXBMaXN0KCk7CisgICAg
fQorCisgICAgcmV0dXJuIHJldFJlY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZWEyZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmgKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBRdFdlYlBhZ2VTR05vZGVfaAorI2RlZmlu
ZSBRdFdlYlBhZ2VTR05vZGVfaAorCisjaW5jbHVkZSA8cHJpdmF0ZS9xc2dyZW5kZXJub2RlX3Au
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK2NsYXNzIFFRdWlja0l0ZW07CituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViTGF5ZXJUcmVlUmVuZGVyZXI7CitjbGFzcyBRdFdlYlBh
Z2VTR05vZGUgOiBwdWJsaWMgUVNHUmVuZGVyTm9kZSB7CitwdWJsaWM6CisgICAgUXRXZWJQYWdl
U0dOb2RlKFBhc3NSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+KTsKKyAgICB+UXRXZWJQYWdl
U0dOb2RlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyKGNvbnN0IFJlbmRlclN0YXRlJik7
CisgICAgdmlydHVhbCBTdGF0ZUZsYWdzIGNoYW5nZWRTdGF0ZXMoKTsKKyAgICBXZWJMYXllclRy
ZWVSZW5kZXJlciogd2ViTGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYkxh
eWVyVHJlZVJlbmRlcmVyLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgUVJlY3RGIGNsaXBSZWN0
KGNvbnN0IFJlbmRlclN0YXRlJikgY29uc3Q7CisgICAgUmVmUHRyPFdlYkxheWVyVHJlZVJlbmRl
cmVyPiBtX3dlYkxheWVyVHJlZVJlbmRlcmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBRdFdlYlBhZ2VTR05vZGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1dlYkxheWVyVHJlZVJlbmRlcmVyUXQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1dlYkxheWVyVHJlZVJlbmRlcmVyUXQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZjdmM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViTGF5ZXJUcmVlUmVuZGVyZXJRdC5jcHAKQEAgLTAsMCAr
MSw0MjQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVyLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIkxheWVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVk
ZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAiTWFpblRocmVhZC5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgi
CisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5o
IgorI2luY2x1ZGUgPE9wZW5HTFNoaW1zLmg+CisjaW5jbHVkZSA8UURhdGVUaW1lPgorI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKwordGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTWFpblRocmVhZEd1YXJkZWRJ
bnZva2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBjYWxsKFBhc3NSZWZQdHI8VD4gb2Jq
ZWN0VG9HdWFyZCwgY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgeworICAg
ICAgICBNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8VD4qIGludm9rZXIgPSBuZXcgTWFpblRocmVh
ZEd1YXJkZWRJbnZva2VyPFQ+KG9iamVjdFRvR3VhcmQsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChpbnZva2UsIGludm9rZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBN
YWluVGhyZWFkR3VhcmRlZEludm9rZXIoUGFzc1JlZlB0cjxUPiBvYmplY3QsIGNvbnN0IEZ1bmN0
aW9uPHZvaWQoKT4mIG5ld0Z1bmN0aW9uKQorICAgICAgICA6IG9iamVjdFRvR3VhcmQob2JqZWN0
KQorICAgICAgICAsIGZ1bmN0aW9uKG5ld0Z1bmN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBS
ZWZQdHI8VD4gb2JqZWN0VG9HdWFyZDsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uOwor
ICAgIHN0YXRpYyB2b2lkIGludm9rZSh2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgTWFpblRo
cmVhZEd1YXJkZWRJbnZva2VyPFQ+KiBpbnZva2VyID0gc3RhdGljX2Nhc3Q8TWFpblRocmVhZEd1
YXJkZWRJbnZva2VyPFQ+Kj4oZGF0YSk7CisgICAgICAgIGludm9rZXItPmZ1bmN0aW9uKCk7Cisg
ICAgICAgIGRlbGV0ZSBpbnZva2VyOworICAgIH0KK307CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OmNhbGxPbk1haW5UcmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikK
K3sKKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgZWxz
ZQorICAgICAgICBNYWluVGhyZWFkR3VhcmRlZEludm9rZXI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+
OjpjYWxsKHRoaXMsIGZ1bmN0aW9uKTsKK30KKworV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OldlYkxh
eWVyVHJlZVJlbmRlcmVyKExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KQor
ICAgIDogbV9sYXllclRyZWVIb3N0UHJveHkobGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICwgbV9y
b290TGF5ZXJJRCgwKQoreworICAgIHNldFNjYWxlKDEpOworfQorCitXZWJMYXllclRyZWVSZW5k
ZXJlcjo6fldlYkxheWVyVHJlZVJlbmRlcmVyKCkKK3sKK30KKworUGFzc093blB0cjxHcmFwaGlj
c0xheWVyPiBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXll
cklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1Rl
eHR1cmVNYXBwZXJMYXllcihuZXdMYXllcik7CisgICAgbGF5ZXItPnNldFNob3VsZFVwZGF0ZUJh
Y2tpbmdTdG9yZUZyb21MYXllcihmYWxzZSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xheWVy
KTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0N1cnJlbnRHTENvbnRl
eHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAg
ICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBw
ZXI6Ok9wZW5HTE1vZGUpOworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlv
bk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKKworICAgIHN5bmNSZW1vdGVD
b250ZW50KCk7CisgICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXll
cigpOworICAgIGlmICghY3VycmVudFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
VGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGN1cnJlbnRS
b290TGF5ZXIpOworCisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF5
ZXItPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKyAgICBtX3RleHR1
cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRTdXJm
YWNlKDApOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIGNsaXBSZWN0KTsKKworICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5vcGFjaXR5KCkg
IT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRyaXgpIHsK
KyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICAgICAg
Y3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgICAgIGN1cnJlbnRS
b290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIH0K
KworICAgIGxheWVyLT5wYWludCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOwor
ICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAgIHN5bmNBbmltYXRpb25z
KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNBbmltYXRpb25zKCkKK3sK
KyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9v
dExheWVyKCkpOworICAgIEFTU0VSVChsYXllcik7CisKKyAgICBsYXllci0+c3luY0FuaW1hdGlv
bnNSZWN1cnNpdmVseSgpOworICAgIGlmIChsYXllci0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVu
bmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChiaW5kKCZXZWJMYXll
clRyZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQsIHRoaXMpKTsKK30KKwordm9pZCBXZWJMYXll
clRyZWVSZW5kZXJlcjo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChRUGFpbnRlciogcGFpbnRlcikK
K3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0g
VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCk7CisgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNj
ZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6OlNvZnR3YXJlTW9kZSk7CisgICAgc3lu
Y1JlbW90ZUNvbnRlbnQoKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0
dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOworCisgICAgaWYgKCFsYXllcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChwYWludGVyKTsK
KyAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgmZ3JhcGhpY3NDb250ZXh0
KTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICBtX3RleHR1cmVN
YXBwZXItPmJpbmRTdXJmYWNlKDApOworICAgIGxheWVyLT5wYWludCgpOworICAgIG1fdGV4dHVy
ZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNz
Q29udGV4dCgwKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdEZvclNjYWxpbmcoY29uc3QgSW50UmVjdCYgcmVjdCwgZmxvYXQgc2NhbGUpCit7
CisgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKKyAgICBtX2NvbnRlbnRzU2NhbGUg
PSBzY2FsZTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQo
KQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0UHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluZm8pCit7
CisgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5pZDsKKyAgICBlbnN1cmVMYXllcihpZCk7
CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7CisgICAgR3Jh
cGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOworICAgIGJvb2wgbmVlZHNUb1VwZGF0ZUlt
YWdlVGlsZXMgPSBsYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgfHwgKGxheWVySW5mby5jb250ZW50
c1JlY3QgIT0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpICYmIGxheWVySW5mby5pbWFnZUJhY2tpbmdT
dG9yZUlEKTsKKworICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKKworICAgIGxh
eWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLnJlcGxpY2EpKTsK
KyAgICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8ubWFzaykpOworCisg
ICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOworICAgIGxheWVyLT5zZXRTaXpl
KGxheWVySW5mby5zaXplKTsKKyAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5mby50cmFu
c2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8uYW5jaG9yUG9pbnQp
OworICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8uY2hpbGRyZW5UcmFu
c2Zvcm0pOworICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJJbmZvLmJhY2tm
YWNlVmlzaWJsZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxheWVySW5mby5jb250
ZW50c09wYXF1ZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8uY29udGVu
dHNSZWN0KTsKKyAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRl
bnQpOworCisgICAgaWYgKG5lZWRzVG9VcGRhdGVJbWFnZVRpbGVzKQorICAgICAgICBhc3NpZ25J
bWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKworICAg
IC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xpcC4KKyAgICBsYXllci0+c2V0TWFza3NU
b0JvdW5kcyhsYXllckluZm8uaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1Rv
Qm91bmRzKTsKKyAgICBsYXllci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7CisgICAg
bGF5ZXItPnNldFByZXNlcnZlczNEKGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7CisgICAgVmVjdG9y
PEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXJJbmZvLmNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgIFdlYkxheWVySUQgY2hp
bGRJRCA9IGxheWVySW5mby5jaGlsZHJlbltpXTsKKyAgICAgICAgR3JhcGhpY3NMYXllciogY2hp
bGQgPSBsYXllckJ5SUQoY2hpbGRJRCk7CisgICAgICAgIGlmICghY2hpbGQpIHsKKyAgICAgICAg
ICAgIGNoaWxkID0gY3JlYXRlTGF5ZXIoY2hpbGRJRCkubGVha1B0cigpOworICAgICAgICAgICAg
bV9sYXllcnMuYWRkKGNoaWxkSUQsIGNoaWxkKTsKKyAgICAgICAgfQorICAgICAgICBjaGlsZHJl
bi5hcHBlbmQoY2hpbGQpOworICAgIH0KKyAgICBsYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4p
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckluZm8uYW5pbWF0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICBjb25zdCBXZWJLaXQ6OldlYkxheWVyQW5pbWF0aW9uIGFuaW0g
PSBsYXllckluZm8uYW5pbWF0aW9uc1tpXTsKKworICAgICAgICBzd2l0Y2ggKGFuaW0ub3BlcmF0
aW9uKSB7CisgICAgICAgIGNhc2UgV2ViS2l0OjpXZWJMYXllckFuaW1hdGlvbjo6QWRkQW5pbWF0
aW9uOiB7CisgICAgICAgICAgICBjb25zdCBJbnRTaXplIGJveFNpemUgPSBhbmltLmJveFNpemU7
CisgICAgICAgICAgICBsYXllci0+YWRkQW5pbWF0aW9uKGFuaW0ua2V5ZnJhbWVMaXN0LCBib3hT
aXplLCBhbmltLmFuaW1hdGlvbi5nZXQoKSwgYW5pbS5uYW1lLCBhbmltLnN0YXJ0VGltZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYktpdDo6V2ViTGF5
ZXJBbmltYXRpb246OlJlbW92ZUFuaW1hdGlvbjoKKyAgICAgICAgICAgIGxheWVyLT5yZW1vdmVB
bmltYXRpb24oYW5pbS5uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdl
YktpdDo6V2ViTGF5ZXJBbmltYXRpb246OlBhdXNlQW5pbWF0aW9uOgorICAgICAgICAgICAgZG91
YmxlIG9mZnNldCA9IFdURjo6Y3VycmVudFRpbWUoKSAtIGFuaW0uc3RhcnRUaW1lOworICAgICAg
ICAgICAgbGF5ZXItPnBhdXNlQW5pbWF0aW9uKGFuaW0ubmFtZSwgb2Zmc2V0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxheWVySW5mby5pc1Jvb3RM
YXllciAmJiBtX3Jvb3RMYXllcklEICE9IGlkKQorICAgICAgICBzZXRSb290TGF5ZXJJRChpZCk7
Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyKFdlYkxheWVySUQg
bGF5ZXJJRCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklE
KTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+cmVtb3Zl
RnJvbVBhcmVudCgpOworICAgIG1fbGF5ZXJzLnJlbW92ZShsYXllcklEKTsKKyAgICBkZWxldGUg
bGF5ZXI7Cit9CisKKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlTGF5ZXIoV2Vi
TGF5ZXJJRCBpZCkKK3sKKyAgICAvLyBXZSBoYXZlIHRvIGxlYWsgdGhlIG5ldyBsYXllcidzIHBv
aW50ZXIgYW5kIG1hbmFnZSBpdCBvdXJzZWx2ZXMsCisgICAgLy8gYmVjYXVzZSBPd25QdHIgaXMg
bm90IGNvcHlhYmxlLgorICAgIGlmIChtX2xheWVycy5maW5kKGlkKSA9PSBtX2xheWVycy5lbmQo
KSkKKyAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBjcmVhdGVMYXllcihpZCkubGVha1B0cigpKTsK
K30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQoV2ViTGF5ZXJJ
RCBsYXllcklEKQoreworICAgIGlmIChsYXllcklEID09IG1fcm9vdExheWVySUQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcm9vdExheWVySUQgPSBsYXllcklEOworCisgICAgbV9yb290TGF5
ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICBpZiAoIWxheWVySUQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOwor
ICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVyLT5hZGRD
aGlsZChsYXllcik7Cit9CisKK1Bhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IFdlYkxheWVy
VHJlZVJlbmRlcmVyOjpnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICBlbnN1
cmVMYXllcihpZCk7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1h
cHBlckxheWVyKGxheWVyQnlJRChpZCkpOworICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlID0gc3RhdGljX2Nhc3Q8TGF5ZXJCYWNraW5nU3RvcmUqPihsYXllci0+YmFj
a2luZ1N0b3JlKCkuZ2V0KCkpOworICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGJh
Y2tpbmdTdG9yZSA9IExheWVyQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKKyAgICAgICAgbGF5ZXIt
PnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0KCkpOworICAgIH0KKyAgICBBU1NFUlQo
YmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gYmFja2luZ1N0b3JlOworfQorCit2b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJ
RCwgZmxvYXQgc2NhbGUpCit7CisgICAgZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpLT5jcmVhdGVU
aWxlKHRpbGVJRCwgc2NhbGUpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW1v
dmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBnZXRCYWNraW5n
U3RvcmUobGF5ZXJJRCktPnJlbW92ZVRpbGUodGlsZUlEKTsKK30KKwordm9pZCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFBhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFwKQoreworICAgIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7CisgICAgUmVmUHRyPExheWVyQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCk7CisgICAgYmFja2lu
Z1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgYml0bWFw
LmdldCgpKTsKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tp
bmdTdG9yZSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlKGlu
dDY0X3QgaW1hZ2VJRCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IHdlYWtCaXRtYXApCit7
CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gd2Vha0JpdG1hcDsKKyAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBUZXh0
dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOworICAgIGJhY2tpbmdTdG9yZS0+
dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdldCgpLCBiaXRtYXAtPmNyZWF0ZUltYWdl
KCkuZ2V0KCksIEJpdG1hcFRleHR1cmU6OkJHUkFGb3JtYXQpOworICAgIG1fZGlyZWN0bHlDb21w
b3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNraW5nU3RvcmUpOworfQorCit2b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQoreworICAgIG1f
ZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShpbWFnZUlEKTsKK30KKwordm9pZCBXZWJM
YXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVy
LCBpbnQ2NF90IGltYWdlSUQpCit7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5maW5kKGltYWdlSUQpOworICAgIEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29tcG9z
aXRlZEltYWdlcy5lbmQoKSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+c2Vj
b25kLmdldCgpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c3dhcEJ1ZmZlcnMo
KQoreworICAgIEhhc2hTZXQ8UmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBl
bmQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuZW5kKCk7CisgICAgZm9yIChI
YXNoU2V0PFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2JhY2tp
bmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAg
ICAgICAoKml0KS0+c3dhcEJ1ZmZlcnMobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKworICAgIG1f
YmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOworfQorCit2b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcygpCit7CisgICAgbV9yb290TGF5ZXIt
PnN5bmNDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKKyAgICBzd2FwQnVmZmVycygpOwor
CisgICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMgc3RhdGUgaXMgb24gaXRzIHdheSBmb3IgdGhlIHNj
cmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8gcmVuZGVyIHRoZSBuZXh0IG9uZS4KKyAgICBj
YWxsT25NYWluVGhyZWFkKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW5kZXJOZXh0RnJh
bWUsIHRoaXMpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZy
YW1lKCkKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdFByb3h5LT5yZW5kZXJOZXh0RnJhbWUoKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVS
ZW5kZXJlcjo6ZW5zdXJlUm9vdExheWVyKCkKK3sKKyAgICBpZiAobV9yb290TGF5ZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJl
TWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUp
OworCisgICAgbV9yb290TGF5ZXIgPSBjcmVhdGVMYXllcihJbnZhbGlkV2ViTGF5ZXJJRCk7Cisg
ICAgbV9yb290TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdExheWVy
LT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2lu
dChGbG9hdFBvaW50M0QoMCwgMCwgMCkpOworCisgICAgLy8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxk
IG5vdCBoYXZlIHplcm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1pemVkIG91dC4KKyAgICBt
X3Jvb3RMYXllci0+c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKKyAgICB0b1RleHR1cmVN
YXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJl
TWFwcGVyLmdldCgpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c3luY1JlbW90
ZUNvbnRlbnQoKQoreworICAgIC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhl
bSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wgY29udGV4dC4KKyAg
ICBlbnN1cmVSb290TGF5ZXIoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yZW5k
ZXJRdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9yZW5kZXJRdWV1ZVtpXSgpOworCisgICAg
bV9yZW5kZXJRdWV1ZS5jbGVhcigpOworfQorCisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnB1cmdlR0xSZXNvdXJjZXMoKQoreworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0
b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7CisKKyAgICBpZiAobGF5ZXIpCisgICAg
ICAgIGxheWVyLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUoKTsKKworICAgIG1fZGlyZWN0
bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLmNsZWFyKCk7
CisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7CisKKyAgICBj
YWxsT25NYWluVGhyZWFkKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdT
dG9yZXMsIHRoaXMpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNr
aW5nU3RvcmVzKCkKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0UHJveHkpCisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdFByb3h5LT5wdXJnZUJhY2tpbmdTdG9yZXMoKTsKK30KKworLy8gRml4ZWQg
cG9pbnQgdmFsdWUgc3RvcmVkIGZvciBzY2FsZSBpbiB1bnNpZ25lZCBpbnRlZ2VyIHRvIGF2b2lk
CisvLyB1c2Ugb2YgbXV0ZXggYnkgdXNlIG9mIGF0b21pYyBvcGVyYXRpb25zLgorY29uc3QgdW5z
aWduZWQgRmxvYXRUb0ZpeGVkTXVsdGlwbGllciA9IDEgPDwgMTY7CitmbG9hdCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6c2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBmbG9hdChtX3NjYWxlKSAv
IEZsb2F0VG9GaXhlZE11bHRpcGxpZXI7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OnNldFNjYWxlKGZsb2F0IHNjYWxlKQoreworICAgIEFTU0VSVChzY2FsZSA+PSAwKTsKKyAgICB1
bnNpZ25lZCBmaXhlZCA9IHVuc2lnbmVkKHNjYWxlICogRmxvYXRUb0ZpeGVkTXVsdGlwbGllcik7
CisgICAgV1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXAoJm1fc2NhbGUsIG1fc2NhbGUsIGZpeGVkKTsK
K30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGV0YWNoKCkKK3sKKyAgICBtX2xheWVy
VHJlZUhvc3RQcm94eSA9IDA7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFwcGVu
ZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBtX3JlbmRl
clF1ZXVlLmFwcGVuZChmdW5jdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ5MTUyYTUu
Ljg4OWQ1ZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0wOSAgVmlhdGNoZXNsYXYgT3N0YXBlbmtvICA8
b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFtXSzJdIFN1
cHBvcnQgdGhyZWFkZWQgcmVuZGVyZXIgaW4gV0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBkaXNhYmxpbmcgb2YgdGhyZWFkZWQgcmVuZGVy
aW5nLgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvbWFpbi5jcHA6CisgICAgICAgIChtYWlu
KToKKwogMjAxMi0wMy0wNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gcmVtb3ZlIHdlYmtpdHB5IGRlcGVuZGVuY3kgaW4gcnVuLWd0ay10
ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAgYi9Ub29scy9N
aW5pQnJvd3Nlci9xdC9tYWluLmNwcAppbmRleCBmZWFlMTRhLi4zNjYzNzczIDEwMDY0NAotLS0g
YS9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9x
dC9tYWluLmNwcApAQCAtMzksOSArMzksNiBAQAogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCiB7Ci0gICAgLy8gRklYTUU6IFdlIG11c3QgYWRkIHN1cHBvcnQgZm9yIHRoZSB0aHJl
YWRlZCByZW5kZXJpbmcgYXMgaXQgaXMgdGhlIGRlZmF1bHQuCi0gICAgcXB1dGVudigiUU1MX05P
X1RIUkVBREVEX1JFTkRFUkVSIiwgUUJ5dGVBcnJheSgiMSIpKTsKLQogICAgIE1pbmlCcm93c2Vy
QXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwogCiAgICAgaWYgKGFwcC5pc1JvYm90aXplZCgp
KSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131174</attachid>
            <date>2012-03-10 08:35:19 -0800</date>
            <delta_ts>2012-03-10 11:59:17 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>ThreadedPainting_02.diff</filename>
            <type>text/plain</type>
            <size>60524</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZGU4YTg3Li5lMTkyNWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTItMDMtMTAgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hl
c2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVkIHJl
bmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgY29udmVyc2lvbnMgZnJvbS90byBRdCBRTWF0cml4NHg0LiBVc2VkIGJ5IFF0IFdl
YktpdDIKKyAgICAgICAgcmVuZGVyaW5nIGFuZCB0ZXN0ZWQgYnkgUXQgV2ViS2l0MiBBUEkgdGVz
dHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJp
eFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRv
ciBRTWF0cml4NHg0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg6CisgICAgICAg
IChUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisKIDIwMTItMDMtMDcgIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIG1lZGlhL2F1ZGlvLWdhcmJh
Z2UtY29sbGVjdC5odG1sIGlzIGZsYWt5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwCmluZGV4
IDZhNTczNWIuLjdmZjQzMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwCkBAIC01MCw2
ICs1MCwyMiBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJhbnNmb3JtYXRpb25NYXRyaXgoY29u
c3QgUVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgICAgICAgICAgICB0cmFuc2Zvcm0ubTMxKCks
IHRyYW5zZm9ybS5tMzIoKSwgMCwgdHJhbnNmb3JtLm0zMygpKTsKIH0KIAorVHJhbnNmb3JtYXRp
b25NYXRyaXg6Om9wZXJhdG9yIFFNYXRyaXg0eDQoKSBjb25zdAoreworICAgIHJldHVybiBRTWF0
cml4NHg0KG0xMSgpLCBtMTIoKSwgbTEzKCksIG0xNCgpLAorICAgICAgICAgICAgICAgICAgICAg
IG0yMSgpLCBtMjIoKSwgbTIzKCksIG0yNCgpLAorICAgICAgICAgICAgICAgICAgICAgIG0zMSgp
LCBtMzIoKSwgbTMzKCksIG0zNCgpLAorICAgICAgICAgICAgICAgICAgICAgIG00MSgpLCBtNDIo
KSwgbTQzKCksIG00NCgpKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0
aW9uTWF0cml4KGNvbnN0IFFNYXRyaXg0eDQmIG1hdHJpeCkKK3sKKyAgICBzZXRNYXRyaXgobWF0
cml4KDAsIDApLCBtYXRyaXgoMSwgMCksIG1hdHJpeCgyLCAwKSwgbWF0cml4KDMsIDApLAorICAg
ICAgICAgICAgICBtYXRyaXgoMCwgMSksIG1hdHJpeCgxLCAxKSwgbWF0cml4KDIsIDEpLCBtYXRy
aXgoMywgMSksCisgICAgICAgICAgICAgIG1hdHJpeCgwLCAyKSwgbWF0cml4KDEsIDIpLCBtYXRy
aXgoMiwgMiksIG1hdHJpeCgzLCAyKSwKKyAgICAgICAgICAgICAgbWF0cml4KDAsIDMpLCBtYXRy
aXgoMSwgMyksIG1hdHJpeCgyLCAzKSwgbWF0cml4KDMsIDMpKTsKK30KKwogfQogCiAvLyB2aW06
IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCmluZGV4IGE5
OGQ3MGUuLjc2NWU3ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0aW9uTWF0cml4LmgKQEAg
LTQxLDYgKzQxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dBZmZpbmVUcmFuc2Zvcm0gQ0dBZmZpbmVU
cmFuc2Zvcm07CiAjZWxpZiBQTEFURk9STShPUEVOVkcpCiAjaW5jbHVkZSAiVkdVdGlscy5oIgog
I2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UU1hdHJpeDR4ND4KICNpbmNsdWRlIDxRVHJh
bnNmb3JtPgogI2VsaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSA8U2tNYXRyaXguaD4KQEAgLTgyLDYg
KzgzLDcgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXgoY29uc3QgUVRyYW5zZm9ybSYpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0
IFFNYXRyaXg0eDQmKTsKICNlbmRpZgogCiAgICAgdm9pZCBzZXRNYXRyaXgoZG91YmxlIGEsIGRv
dWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikKQEAgLTMyOCw2
ICszMzAsNyBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgVkdNYXRyaXgoKSBjb25zdDsKICNlbGlm
IFBMQVRGT1JNKFFUKQogICAgIG9wZXJhdG9yIFFUcmFuc2Zvcm0oKSBjb25zdDsKKyAgICBvcGVy
YXRvciBRTWF0cml4NHg0KCkgY29uc3Q7CiAjZWxpZiBVU0UoU0tJQSkKICAgICBvcGVyYXRvciBT
a01hdHJpeCgpIGNvbnN0OwogI2VsaWYgUExBVEZPUk0oV1gpICYmIFVTRShXWEdDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IDMzZmFlODAuLmY4ZGExMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDYgQEAKKzIw
MTItMDMtMTAgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hlc2xhdkBu
b2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVkIHJlbmRlcmVy
IGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnQgUXQ1IHRocmVhZGVkIHJlbmRlcmluZyBzdXBwb3J0IGZvciBRdCBXZWJLaXQyLgor
ICAgICAgICBQYXJ0cyBvZiBMYXllclRyZWVIb3N0UHJveHkgd2hpY2ggY29udGFpbiBsYXllciB0
cmVlIGFuZCBsYXllciB0cmVlIAorICAgICAgICBwYWludGluZyBvYmplY3RzIGFyZSBtb3ZlZCB0
byBzZXBhcmF0ZSBjbGFzcyBXZWJMYXllclRyZWVSZW5kZXJlci4gCisgICAgICAgIFdlYkxheWVy
VHJlZVJlbmRlcmVyIGlzIHRocmVhZCBzYWZlIHJlZiBjb3VudGVkIGFuZCByZWZlcmVuY2VkIAor
ICAgICAgICBieSBMYXllclRyZWVIb3N0UHJveHkgYW5kIHBhaW50IG5vZGUuCisgICAgICAgIEFs
bCBsYXllciB0cmVlIGFuZCBncmFwaGljcyBvYmplY3RzIGFyZSBjcmVhdGVkLCBhY2Nlc3NlZCBh
bmQgZGVhbGxvY2F0ZWQKKyAgICAgICAgZnJvbSBwYWludCB0aHJlYWQgb25seS4KKyAgICAgICAg
TGF5ZXIgdHJlZSB1cGRhdGVzIGZyb20gcmVuZGVyIHF1ZXVlIGFyZSBmZXRjaGVkIGluCisgICAg
ICAgIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIHdoZW4gbWFpbiB0aHJlYWQgaXMgbG9ja2Vk
LgorICAgICAgICBNZXNzYWdlcyBmcm9tIHBhaW50IHRocmVhZCB0byB3ZWIgcHJvY2VzcyBhcmUg
cGFzc2VkIHRocm91Z2gKKyAgICAgICAgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyIGNhbGwgZ2F0
ZSAoaW1wbGVtZW50ZWQgYnkgTm9hbSBSb3NlbnRoYWwpLgorCisgICAgICAgICogVGFyZ2V0LnBy
aToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAg
ICAoUGFnZVByb3h5Tm9kZTo6UGFnZVByb3h5Tm9kZSk6CisgICAgICAgIChQYWdlUHJveHlOb2Rl
OjpyZW5kZXIpOgorICAgICAgICAoUGFnZVByb3h5Tm9kZTo6flBhZ2VQcm94eU5vZGUpOgorICAg
ICAgICAoUGFnZVByb3h5Tm9kZTo6d2ViTGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAoUGFn
ZVByb3h5Tm9kZSk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUpOgor
ICAgICAgICAoUVF1aWNrV2ViUGFnZTo6c2V0Q29udGVudHNTY2FsZSk6CisgICAgICAgIChRUXVp
Y2tXZWJQYWdlUHJpdmF0ZTo6flFRdWlja1dlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OkxheWVyVHJlZUhvc3RQcm94eSk6
CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6fkxheWVyVHJlZUhvc3RQcm94
eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRH
TENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9H
cmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnVw
ZGF0ZVZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpkaXNw
YXRjaFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRl
VGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRh
dGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnJl
bW92ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6
ZGVsZXRlQ29tcG9zaXRpbmdMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQ
cm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OnN5bmNDb21wb3NpdGluZ0xheWVyU3RhdGUpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxl
Q29udGVudHNSZWN0Rm9yUGFubmluZyk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQ
cm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvclNjYWxpbmcpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6
OkxheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKToKKyAgICAgICAgKFdlYktp
dDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSZW5kZXJTY2FsZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKExh
eWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6
d2ViTGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVS
ZW5kZXJlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5
ZXJUcmVlSG9zdFByb3h5UXQuY3BwLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKE1haW5U
aHJlYWRHdWFyZGVkSW52b2tlcik6CisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJlYWRHdWFyZGVk
SW52b2tlcjo6Y2FsbCk6CisgICAgICAgIChXZWJLaXQ6Ok1haW5UaHJlYWRHdWFyZGVkSW52b2tl
cjo6TWFpblRocmVhZEd1YXJkZWRJbnZva2VyKToKKyAgICAgICAgKFdlYktpdDo6TWFpblRocmVh
ZEd1YXJkZWRJbnZva2VyOjppbnZva2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVS
ZW5kZXJlcjo6Y2FsbE9uTWFpblRyZWFkKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OldlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5
ZXJUcmVlUmVuZGVyZXI6On5XZWJMYXllclRyZWVSZW5kZXJlcik6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVMYXllcik6CisgICAgICAgIChXZWJLaXQ6Oldl
YkxheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvQ3VycmVudEdMQ29udGV4dCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvR3JhcGhpY3NDb250ZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50c1Jl
Y3RGb3JTY2FsaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVw
ZGF0ZVZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5
bmNMYXllclBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJl
cjo6ZGVsZXRlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6
ZW5zdXJlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0
Um9vdExheWVySUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6Z2V0
QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNy
ZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6cmVtb3Zl
VGlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJbWFnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6c3dhcEJ1ZmZlcnMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1l
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmVuc3VyZVJvb3RMYXll
cik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jUmVtb3RlQ29u
dGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlQmFj
a2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzY2Fs
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRTY2FsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXRhY2gpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6YXBwZW5kVXBkYXRlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oLgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OmxheWVyQnlJRCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJl
bmRlcmVyOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJl
cjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJl
ZVJlbmRlcmVyOjpub3RpZnlTeW5jUmVxdWlyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVSZW5kZXJlcjo6c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyVHJlZVJlbmRlcmVyOjpzaG93UmVwYWludENvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRDb250ZW50cyk6CisKIDIwMTItMDMtMDcgIEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFBp
bmNoIHpvb20gYWN0cyB3ZWlyZGx5IG9uIG55dGltZXMuY29tIHdoaWxlIGxvYWRpbmcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCmluZGV4IDEzMjA1NmEuLjE0NjI4ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Rh
cmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMjQyLDYgKzI0Miw3
IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2VDbGllbnQuaCBc
CiAgICAgVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9XZWJL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUHJveHkuaCBcCisgICAgVUlQcm9jZXNzL1dlYkxheWVyVHJl
ZVJlbmRlcmVyLmggXAogICAgIFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuaCBcCiAgICAgVUlQ
cm9jZXNzL1dlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYk5h
dmlnYXRpb25EYXRhLmggXApAQCAtNTMyLDYgKzUzMyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJ
UHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRMYXVuY2hlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVu
Y2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9x
dC9UaHJlYWRMYXVuY2hlclF0LmNwcCBcCisgICAgVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94
eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0LmNwcCBcCiAgICAgVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZp
Y2F0aW9ucy9XZWJOb3RpZmljYXRpb24uY3BwIFwKQEAgLTU3Miw2ICs1NzQsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBVSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBcCiAgICAgVUlQ
cm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYktleVZhbHVl
U3RvcmFnZU1hbmFnZXJQcm94eS5jcHAgXAorICAgIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5k
ZXJlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwIFwKICAgICBVSVBy
b2Nlc3MvV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJO
YXZpZ2F0aW9uRGF0YS5jcHAgXApAQCAtNTg3LDcgKzU5MCw2IEBAIFNPVVJDRVMgKz0gXAogICAg
IFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkNvbnRl
eHQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwIFwKLSAgICBV
SVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQv
UXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJl
Y29nbml6ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5j
cHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFn
ZS5jcHAKaW5kZXggMGU0NTE5Yi4uMTM1YjRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5j
bHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5k
bGVyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJXZWJM
YXllclRyZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcF9wLmgiCiAjaW5j
bHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVkZSA8UVBvbHlnb25GPgpAQCAtNzksMjQg
KzgwLDkgQEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnQoUVBhaW50ZXIqIHBhaW50
ZXIpCiAgICAgICAgIHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKS0+cGFpbnRMYXllclRyZWUo
cGFpbnRlcik7CiB9CiAKLXZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50VG9DdXJyZW50
R0xDb250ZXh0KGNvbnN0IFFUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgY29u
c3QgUVJlY3RGJiBjbGlwUmVjdCkKLXsKLSAgICBpZiAoIXEtPmlzVmlzaWJsZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoIWNsaXBSZWN0LmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSB3ZWJQYWdlUHJveHktPmRy
YXdpbmdBcmVhKCk7Ci0gICAgaWYgKCFkcmF3aW5nQXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZHJhd2luZ0FyZWEtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KFFUcmFuc2Zvcm0odHJhbnNm
b3JtKS5zY2FsZShjb250ZW50c1NjYWxlLCBjb250ZW50c1NjYWxlKSwgb3BhY2l0eSwgY2xpcFJl
Y3QpOwotfQotCiBzdHJ1Y3QgUGFnZVByb3h5Tm9kZSA6IHB1YmxpYyBRU0dSZW5kZXJOb2RlIHsK
LSAgICBQYWdlUHJveHlOb2RlKFFRdWlja1dlYlBhZ2VQcml2YXRlKiBwYWdlKQotICAgICAgICA6
IG1fcGFnZVByaXZhdGUocGFnZSkKKyAgICBQYWdlUHJveHlOb2RlKFBhc3NSZWZQdHI8V2ViTGF5
ZXJUcmVlUmVuZGVyZXI+IHJlbmRlcmVyKQorICAgICAgICA6IG1fd2ViTGF5ZXJUcmVlUmVuZGVy
ZXIocmVuZGVyZXIpCiAgICAgewogICAgIH0KIApAQCAtMTA3LDIwICs5MywyNCBAQCBzdHJ1Y3Qg
UGFnZVByb3h5Tm9kZSA6IHB1YmxpYyBRU0dSZW5kZXJOb2RlIHsKIAogICAgIHZpcnR1YWwgdm9p
ZCByZW5kZXIoY29uc3QgUmVuZGVyU3RhdGUmKQogICAgIHsKLSAgICAgICAgaWYgKCFtX3BhZ2VQ
cml2YXRlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBRVHJhbnNmb3JtIHRyYW5zZm9y
bSA9IG1hdHJpeCgpID8gbWF0cml4KCktPnRvVHJhbnNmb3JtKCkgOiBRVHJhbnNmb3JtKCk7Cisg
ICAgICAgIFFNYXRyaXg0eDQgcmVuZGVyTWF0aXJ4ID0gbWF0cml4KCkgPyAqbWF0cml4KCkgOiBR
TWF0cml4NHg0KCk7CisKKyAgICAgICAgLy8gSGF2ZSB0byBhcHBseSByZW5kZXIgc2NhbGUgbWFu
dWFseSBiZWNhdXNlIGl0IGlzIG5vdCBhcHBsaWVkIG9uIHBhZ2UgaXRlbS4KKyAgICAgICAgLy8g
aHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTA0NDUwCisgICAgICAgIHJlbmRlck1h
dGlyeC5zY2FsZSh3ZWJMYXllclRyZWVSZW5kZXJlcigpLT5zY2FsZSgpKTsKIAogICAgICAgICAv
LyBGSVhNRTogU3VwcG9ydCBub24tcmVjdGFuZ3VsYXIgY2xpcHBpbmdzLgotICAgICAgICBtX3Bh
Z2VQcml2YXRlLT5wYWludFRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm0sIGluaGVyaXRlZE9w
YWNpdHkoKSwgY2xpcFJlY3QoKSk7CisgICAgICAgIHdlYkxheWVyVHJlZVJlbmRlcmVyKCktPnBh
aW50VG9DdXJyZW50R0xDb250ZXh0KHJlbmRlck1hdGlyeCwgaW5oZXJpdGVkT3BhY2l0eSgpLCBj
bGlwUmVjdCgpKTsKICAgICB9CiAKICAgICB+UGFnZVByb3h5Tm9kZSgpCiAgICAgewotICAgICAg
ICBpZiAobV9wYWdlUHJpdmF0ZSkKLSAgICAgICAgICAgIG1fcGFnZVByaXZhdGUtPnJlc2V0UGFp
bnROb2RlKCk7CisgICAgICAgIHdlYkxheWVyVHJlZVJlbmRlcmVyKCktPnB1cmdlR0xSZXNvdXJj
ZXMoKTsKICAgICB9CiAKKyAgICBXZWJMYXllclRyZWVSZW5kZXJlciogd2ViTGF5ZXJUcmVlUmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYkxheWVyVHJlZVJlbmRlcmVyLmdldCgpOyB9CisK
K3ByaXZhdGU6CiAgICAgUVJlY3RGIGNsaXBSZWN0KCkgY29uc3QKICAgICB7CiAgICAgICAgIC8v
IFN0YXJ0IHdpdGggYW4gaW52YWxpZCByZWN0LgpAQCAtMTYyLDI0ICsxNTIsMzMgQEAgc3RydWN0
IFBhZ2VQcm94eU5vZGUgOiBwdWJsaWMgUVNHUmVuZGVyTm9kZSB7CiAgICAgICAgIHJldHVybiBy
ZXN1bHRSZWN0OwogICAgIH0KIAotICAgIFFRdWlja1dlYlBhZ2VQcml2YXRlKiBtX3BhZ2VQcml2
YXRlOworICAgIFJlZlB0cjxXZWJMYXllclRyZWVSZW5kZXJlcj4gbV93ZWJMYXllclRyZWVSZW5k
ZXJlcjsKIH07CiAKIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dO
b2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikKIHsKLSAgICBpZiAoIShmbGFncygp
ICYgSXRlbUhhc0NvbnRlbnRzKSkgewotICAgICAgICBpZiAob2xkTm9kZSkKLSAgICAgICAgICAg
IGRlbGV0ZSBvbGROb2RlOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgaWYgKCFkLT53
ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpCisgICAgICAgIHJldHVybiBvbGROb2RlOwogCi0g
ICAgUGFnZVByb3h5Tm9kZSogcHJveHlOb2RlID0gc3RhdGljX2Nhc3Q8UGFnZVByb3h5Tm9kZSo+
KG9sZE5vZGUpOwotICAgIGlmICghcHJveHlOb2RlKSB7Ci0gICAgICAgIHByb3h5Tm9kZSA9IG5l
dyBQYWdlUHJveHlOb2RlKGQpOwotICAgICAgICBkLT5tX3BhaW50Tm9kZSA9IHByb3h5Tm9kZTsK
KyAgICBMYXllclRyZWVIb3N0UHJveHkqIGxheWVyVHJlZUhvc3RQcm94eSA9IGQtPndlYlBhZ2VQ
cm94eS0+ZHJhd2luZ0FyZWEoKS0+bGF5ZXJUcmVlSG9zdFByb3h5KCk7CisgICAgV2ViTGF5ZXJU
cmVlUmVuZGVyZXIqIHdlYkxheWVyVHJlZVJlbmRlcmVyID0gbGF5ZXJUcmVlSG9zdFByb3h5LT53
ZWJMYXllclRyZWVSZW5kZXJlcigpOworCisgICAgUGFnZVByb3h5Tm9kZSogbm9kZSA9IHN0YXRp
Y19jYXN0PFBhZ2VQcm94eU5vZGUqPihvbGROb2RlKTsKKworICAgIGlmIChub2RlICYmIG5vZGUt
PndlYkxheWVyVHJlZVJlbmRlcmVyKCkgIT0gd2ViTGF5ZXJUcmVlUmVuZGVyZXIpIHsKKyAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IExheWVyVHJlZUhvc3RQcm94eSB3YXMgZGVsZXRlZCBhbmQg
cmVjcmVhdGVkCisgICAgICAgIC8vIHdoaWxlIG9sZCBwYWludCBub2RlIHN1cnZpdmVkLiBUaGlz
IGNvdWxkIGhhcHBlbiBpZiB3ZWIgcHJvY2VzcworICAgICAgICAvLyBoYXZlIGNyYXNoZWQuIElu
IHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHJlY3JlYXRlIHBhaW50IG5vZGUuCisgICAgICAgIGRlbGV0
ZSBub2RlOworICAgICAgICBub2RlID0gMDsKICAgICB9CiAKLSAgICByZXR1cm4gcHJveHlOb2Rl
OworICAgIHdlYkxheWVyVHJlZVJlbmRlcmVyLT5zeW5jUmVtb3RlQ29udGVudCgpOworCisgICAg
aWYgKCFub2RlKQorICAgICAgICBub2RlID0gbmV3IFBhZ2VQcm94eU5vZGUod2ViTGF5ZXJUcmVl
UmVuZGVyZXIpOworCisgICAgcmV0dXJuIG5vZGU7CiB9CiAKIFF0V2ViUGFnZUV2ZW50SGFuZGxl
ciogUVF1aWNrV2ViUGFnZTo6ZXZlbnRIYW5kbGVyKCkgY29uc3QKQEAgLTIwNyw2ICsyMDYsOCBA
QCB2b2lkIFFRdWlja1dlYlBhZ2U6OnNldENvbnRlbnRzU2NhbGUocXJlYWwgc2NhbGUpCiAgICAg
QVNTRVJUKHNjYWxlID4gMCk7CiAgICAgZC0+Y29udGVudHNTY2FsZSA9IHNjYWxlOwogICAgIGQt
PnVwZGF0ZVNpemUoKTsKKyAgICBpZiAoZC0+d2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKQor
ICAgICAgICBkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUhvc3RQcm94
eSgpLT5zZXRSZW5kZXJTY2FsZShzY2FsZSk7CiB9CiAKIHFyZWFsIFFRdWlja1dlYlBhZ2U6OmNv
bnRlbnRzU2NhbGUoKSBjb25zdApAQCAtMjMzLDE4ICsyMzQsOCBAQCB2b2lkIFFRdWlja1dlYlBh
Z2VQcml2YXRlOjp1cGRhdGVTaXplKCkKICAgICB2aWV3cG9ydEl0ZW0tPnVwZGF0ZUNvbnRlbnRz
U2l6ZShzY2FsZWRTaXplKTsKIH0KIAotdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cmVzZXRQ
YWludE5vZGUoKQotewotICAgIG1fcGFpbnROb2RlID0gMDsKLSAgICBEcmF3aW5nQXJlYVByb3h5
KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBpZiAoZHJh
d2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpKQotICAgICAgICBk
cmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCktPnB1cmdlR0xSZXNvdXJjZXMoKTsKLX0K
LQogUVF1aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tXZWJQYWdlUHJpdmF0ZSgpCiB7Ci0gICAg
aWYgKG1fcGFpbnROb2RlKQotICAgICAgICBzdGF0aWNfY2FzdDxQYWdlUHJveHlOb2RlKj4obV9w
YWludE5vZGUpLT5tX3BhZ2VQcml2YXRlID0gMDsKIH0KIAogI2luY2x1ZGUgIm1vY19xcXVpY2t3
ZWJwYWdlX3AuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVy
VHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9z
dFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWE3Y2JlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQ
cm94eS5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2luY2x1ZGUgIkxh
eWVyVHJlZUhvc3RQcm94eS5oIgorCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlICJXZWJMYXllclRy
ZWVSZW5kZXJlci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK0xheWVyVHJlZUhvc3RQcm94eTo6TGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdB
cmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCisgICAgOiBtX2RyYXdpbmdBcmVhUHJveHkoZHJh
d2luZ0FyZWFQcm94eSkKKyAgICAsIG1fd2ViTGF5ZXJUcmVlUmVuZGVyZXIoYWRvcHRSZWYobmV3
IFdlYkxheWVyVHJlZVJlbmRlcmVyKHRoaXMpKSkKK3sKK30KKworTGF5ZXJUcmVlSG9zdFByb3h5
Ojp+TGF5ZXJUcmVlSG9zdFByb3h5KCkKK3sKKyAgICBtX3dlYkxheWVyVHJlZVJlbmRlcmVyLT5k
ZXRhY2goKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xD
b250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0
IG9wYWNpdHksIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3dlYkxh
eWVyVHJlZVJlbmRlcmVyLT5zeW5jUmVtb3RlQ29udGVudCgpOworICAgIG1fd2ViTGF5ZXJUcmVl
UmVuZGVyZXItPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KG1hdHJpeCwgb3BhY2l0eSwgcmVjdCk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvR3JhcGhpY3NDb250ZXh0KEJh
Y2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgY29udGV4dCkKK3sKKyAgICBtX3dl
YkxheWVyVHJlZVJlbmRlcmVyLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQoKQoreworICAgIG1fZHJh
d2luZ0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQor
eworICAgIG1fd2ViTGF5ZXJUcmVlUmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7Cisg
ICAgdXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVy
VHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlLCBtX3dlYkxheWVyVHJlZVJlbmRlcmVyLmdldCgpLCBs
YXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8udXBkYXRlU2NhbGVGYWN0b3IpKTsKKyAgICB1cGRh
dGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvKTsKK30KKwordm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRp
bGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIEFTU0VS
VCh1cGRhdGVJbmZvLnVwZGF0ZVJlY3RzLnNpemUoKSA9PSAxKTsKKyAgICBJbnRSZWN0IHNvdXJj
ZVJlY3QgPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RzLmZpcnN0KCk7CisgICAgSW50UmVjdCB0YXJn
ZXRSZWN0ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzOworICAgIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKHVwZGF0ZUluZm8uYml0
bWFwSGFuZGxlKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJl
cjo6dXBkYXRlVGlsZSwgbV93ZWJMYXllclRyZWVSZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGls
ZUlELCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRtYXApKTsKK30KKwordm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkK
K3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6cmVtb3Zl
VGlsZSwgbV93ZWJMYXllclRyZWVSZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlEKSk7Cit9
CisKKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2Vi
TGF5ZXJJRCBpZCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5k
ZXJlcjo6ZGVsZXRlTGF5ZXIsIG1fd2ViTGF5ZXJUcmVlUmVuZGVyZXIuZ2V0KCksIGlkKSk7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJM
YXllcklEIGlkKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRl
cmVyOjpzZXRSb290TGF5ZXJJRCwgbV93ZWJMYXllclRyZWVSZW5kZXJlci5nZXQoKSwgaWQpKTsK
K30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNDb21wb3NpdGluZ0xheWVyU3RhdGUo
Y29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldl
YkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jTGF5ZXJQYXJhbWV0ZXJzLCBtX3dlYkxheWVyVHJlZVJl
bmRlcmVyLmdldCgpLCBpbmZvKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRS
ZW5kZXJGcmFtZSgpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3dlYkxheWVyVHJlZVJlbmRlcmVyLmdldCgpKSk7
Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVEaXJlY3RseUNvbXBvc2l0ZWRJ
bWFnZShpbnQ2NF90IGtleSwgY29uc3QgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYg
aGFuZGxlKQoreworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJs
ZUJpdG1hcDo6Y3JlYXRlKGhhbmRsZSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlLCBtX3dlYkxheWVyVHJlZVJlbmRlcmVyLmdldCgp
LCBrZXksIGJpdG1hcCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURp
cmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQoreworICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UsIG1fd2ViTGF5ZXJUcmVl
UmVuZGVyZXIuZ2V0KCksIGtleSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdEZvclBhbm5pbmcoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpTZXRWaXNp
YmxlQ29udGVudHNSZWN0Rm9yUGFubmluZyhyZWN0LCB0cmFqZWN0b3J5VmVjdG9yKSwgbV9kcmF3
aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RGb3JTY2FsaW5nKGNvbnN0IEludFJlY3QmIHJl
Y3QsIGZsb2F0IHNjYWxlKQoreworICAgIG1fd2ViTGF5ZXJUcmVlUmVuZGVyZXItPnNldFZpc2li
bGVDb250ZW50c1JlY3RGb3JTY2FsaW5nKHJlY3QsIHNjYWxlKTsKKyAgICBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpT
ZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhyZWN0LCBzY2FsZSksIG1fZHJhd2luZ0Fy
ZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5w
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhvc3Q6OlJlbmRlck5leHRGcmFtZSgp
LCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlEKCkpOworfQorCit2b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sKKyAgICBtX2RyYXdpbmdBcmVh
UHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpQ
dXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgp
KTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFJlbmRlclNjYWxlKGZsb2F0IHNj
YWxlKQoreworICAgIG1fd2ViTGF5ZXJUcmVlUmVuZGVyZXItPnNldFNjYWxlKHNjYWxlKTsKK30K
KworfQorI2VuZGlmIC8vIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCmluZGV4IGIzZDUxMmYuLjU3YmJkYjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKQEAg
LTI1LDggKzI1LDYgQEAKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJEcmF3
aW5nQXJlYVByb3h5LmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1h
cHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRl
ICJXZWJMYXllclRyZWVJbmZvLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KQEAgLTM3LDE0ICszNSwxNSBA
QAogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
IAorY2xhc3MgUVNHTm9kZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIExheWVyQmFj
a2luZ1N0b3JlOwogY2xhc3MgV2ViTGF5ZXJJbmZvOworY2xhc3MgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI7CiBjbGFzcyBXZWJMYXllclVwZGF0ZUluZm87CiAKLWNsYXNzIExheWVyVHJlZUhvc3RQcm94
eSA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKK2NsYXNzIExheWVyVHJl
ZUhvc3RQcm94eSB7CiBwdWJsaWM6CiAgICAgTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVh
UHJveHkqKTsKICAgICB2aXJ0dWFsIH5MYXllclRyZWVIb3N0UHJveHkoKTsKQEAgLTUyLDEzICs1
MSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVyKFdlYkxheWVy
SUQpOwogICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCk7CiAgICAg
dm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVz
c2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKLSAgICB2b2lkIHBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENv
bnRleHQoY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGNsaXApOwogICAgIHZvaWQgcGFpbnRUb0dyYXBo
aWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKICAgICB2
b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3RG
b3JTY2FsaW5nKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBmbG9hdCk7CiAgICAgdm9pZCBzZXRW
aXNpYmxlQ29udGVudHNSZWN0Rm9yUGFubmluZyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOwotICAgIHZvaWQgc3luY1JlbW90ZUNvbnRlbnQoKTsK
LSAgICB2b2lkIHN3YXBDb250ZW50QnVmZmVycygpOwogICAgIHZvaWQgZGlkUmVuZGVyRnJhbWUo
KTsKICAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwg
Y29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJik7CiAgICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIo
aW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYpOwpAQCAt
NjcsNTkgKzY0LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0
ZWRJbWFnZShpbnQ2NF90KTsKICAgICB2b2lkIGRpZFJlY2VpdmVMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6
OkFyZ3VtZW50RGVjb2RlciopOwogICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKKyAgICB2b2lk
IHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAg
dm9pZCBzZXRSZW5kZXJTY2FsZShmbG9hdCk7CisgICAgV2ViTGF5ZXJUcmVlUmVuZGVyZXIqIHdl
YkxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJMYXllclRyZWVSZW5kZXJl
ci5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyPiBjcmVhdGVMYXllcihXZWJMYXllcklEKTsKLQotICAgIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqIGxheWVyQnlJRChXZWJMYXllcklEIGlkKSB7IHJldHVybiAoaWQgPT0gSW52YWxpZFdl
YkxheWVySUQpID8gMCA6IG1fbGF5ZXJzLmdldChpZCk7IH0KLSAgICBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQotCi0gICAg
Ly8gUmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Lgot
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqLCBkb3VibGUpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTeW5jUmVx
dWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIHsgfQotICAgIHZpcnR1YWwgYm9v
bCBzaG93RGVidWdCb3JkZXJzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG93UmVwYWludENvdW50ZXIoY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIHsgfQotCi0gICAgRHJhd2luZ0FyZWFQcm94eSogbV9k
cmF3aW5nQXJlYVByb3h5OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxheWVySUQsIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlz
aWJsZUNvbnRlbnRzUmVjdDsKLSAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7Ci0KLSAgICBWZWN0
b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fcmVuZGVyUXVldWU7CiAgICAgdm9pZCBkaXNwYXRjaFVw
ZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CiAKLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIp
Ci0gICAgT3duUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKLSAg
ICBQYXNzUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJ
RCk7Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZT4gPiBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlczsKLSAgICBIYXNoU2V0PFJl
ZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gPiBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZl
cnM7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2NoZWR1bGVXZWJWaWV3VXBkYXRlKCk7Ci0gICAgdm9p
ZCBzeW5jaHJvbml6ZVZpZXdwb3J0KCk7Ci0gICAgdm9pZCBkZWxldGVMYXllcihXZWJMYXllcklE
KTsKLSAgICB2b2lkIHNldFJvb3RMYXllcklEKFdlYkxheWVySUQpOwotICAgIHZvaWQgc3luY0xh
eWVyUGFyYW1ldGVycyhjb25zdCBXZWJMYXllckluZm8mKTsKLSAgICB2b2lkIGNyZWF0ZVRpbGUo
V2ViTGF5ZXJJRCwgaW50LCBmbG9hdCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKFdlYkxh
eWVySUQsIGludCk7Ci0gICAgdm9pZCB1cGRhdGVUaWxlKFdlYkxheWVySUQsIGludCwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4pOwotICAgIHZvaWQgY3JlYXRlSW1hZ2UoaW50NjRfdCwgUGFzc1JlZlB0
cjxTaGFyZWFibGVCaXRtYXA+KTsKLSAgICB2b2lkIGRlc3Ryb3lJbWFnZShpbnQ2NF90KTsKLSAg
ICB2b2lkIGFzc2lnbkltYWdlVG9MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgaW50NjRf
dCBpbWFnZUlEKTsKLSAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBlbnN1
cmVSb290TGF5ZXIoKTsKLSAgICB2b2lkIGVuc3VyZUxheWVyKFdlYkxheWVySUQpOwotICAgIHZv
aWQgc3dhcEJ1ZmZlcnMoKTsKLSAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7Ci0KLSAgICBPd25Q
dHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7Ci0gICAgVmVjdG9yPFdlYkxh
eWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7Ci0KLSAgICBMYXllck1hcCBtX2xheWVyczsKLSAgICBX
ZWJMYXllcklEIG1fcm9vdExheWVySUQ7Ci0gICAgaW50IG1faWQ7CisgICAgRHJhd2luZ0FyZWFQ
cm94eSogbV9kcmF3aW5nQXJlYVByb3h5OworICAgIFJlZlB0cjxXZWJMYXllclRyZWVSZW5kZXJl
cj4gbV93ZWJMYXllclRyZWVSZW5kZXJlcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmI1M2Q4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsNDMyIEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoVUlfU0lE
RV9DT01QT1NJVElORykKKworI2luY2x1ZGUgIldlYkxheWVyVHJlZVJlbmRlcmVyLmgiCisKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIkxheWVyQmFj
a2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisjaW5jbHVkZSAi
TWFpblRocmVhZC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgorI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisj
aW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgPE9wZW5HTFNoaW1zLmg+CisjaW5jbHVk
ZSA8d3RmL0F0b21pY3MuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCit0ZW1wbGF0ZTxjbGFzcyBUPiBjbGFzcyBNYWluVGhyZWFkR3VhcmRlZElu
dm9rZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNhbGwoUGFzc1JlZlB0cjxUPiBvYmpl
Y3RUb0d1YXJkLCBjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKKyAgICB7CisgICAg
ICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxUPiogaW52b2tlciA9IG5ldyBNYWluVGhyZWFk
R3VhcmRlZEludm9rZXI8VD4ob2JqZWN0VG9HdWFyZCwgZnVuY3Rpb24pOworICAgICAgICBjYWxs
T25NYWluVGhyZWFkKGludm9rZSwgaW52b2tlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIE1h
aW5UaHJlYWRHdWFyZGVkSW52b2tlcihQYXNzUmVmUHRyPFQ+IG9iamVjdCwgY29uc3QgRnVuY3Rp
b248dm9pZCgpPiYgbmV3RnVuY3Rpb24pCisgICAgICAgIDogb2JqZWN0VG9HdWFyZChvYmplY3Qp
CisgICAgICAgICwgZnVuY3Rpb24obmV3RnVuY3Rpb24pCisgICAgeworICAgIH0KKworICAgIFJl
ZlB0cjxUPiBvYmplY3RUb0d1YXJkOworICAgIEZ1bmN0aW9uPHZvaWQoKT4gZnVuY3Rpb247Cisg
ICAgc3RhdGljIHZvaWQgaW52b2tlKHZvaWQqIGRhdGEpCisgICAgeworICAgICAgICBNYWluVGhy
ZWFkR3VhcmRlZEludm9rZXI8VD4qIGludm9rZXIgPSBzdGF0aWNfY2FzdDxNYWluVGhyZWFkR3Vh
cmRlZEludm9rZXI8VD4qPihkYXRhKTsKKyAgICAgICAgaW52b2tlci0+ZnVuY3Rpb24oKTsKKyAg
ICAgICAgZGVsZXRlIGludm9rZXI7CisgICAgfQorfTsKKwordm9pZCBXZWJMYXllclRyZWVSZW5k
ZXJlcjo6Y2FsbE9uTWFpblRyZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQor
eworICAgIGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAgZnVuY3Rpb24oKTsKKyAgICBlbHNl
CisgICAgICAgIE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjxXZWJMYXllclRyZWVSZW5kZXJlcj46
OmNhbGwodGhpcywgZnVuY3Rpb24pOworfQorCitXZWJMYXllclRyZWVSZW5kZXJlcjo6V2ViTGF5
ZXJUcmVlUmVuZGVyZXIoTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkpCisg
ICAgOiBtX2xheWVyVHJlZUhvc3RQcm94eShsYXllclRyZWVIb3N0UHJveHkpCisgICAgLCBtX3Jv
b3RMYXllcklEKDApCisgICAgLCBtX3NjYWxlKDEpCit7Cit9CisKK1dlYkxheWVyVHJlZVJlbmRl
cmVyOjp+V2ViTGF5ZXJUcmVlUmVuZGVyZXIoKQoreworfQorCitQYXNzT3duUHRyPEdyYXBoaWNz
TGF5ZXI+IFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVMYXllcihXZWJMYXllcklEIGxheWVy
SUQpCit7CisgICAgR3JhcGhpY3NMYXllciogbmV3TGF5ZXIgPSBuZXcgR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIodGhpcyk7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4
dHVyZU1hcHBlckxheWVyKG5ld0xheWVyKTsKKyAgICBsYXllci0+c2V0U2hvdWxkVXBkYXRlQmFj
a2luZ1N0b3JlRnJvbUxheWVyKGZhbHNlKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3TGF5ZXIp
OworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvQ3VycmVudEdMQ29udGV4
dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25z
dCBGbG9hdFJlY3QmIGNsaXBSZWN0KQoreworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAg
ICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBl
cjo6T3BlbkdMTW9kZSk7CisgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9u
TW9kZSgpID09IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworCisgICAgc3luY1JlbW90ZUNv
bnRlbnQoKTsKKyAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVy
KCk7CisgICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJv
b3RMYXllcik7CisKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXll
ci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIG1fdGV4dHVy
ZU1hcHBlci0+YmVnaW5QYWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZh
Y2UoMCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRy
aXgoKSwgY2xpcFJlY3QpOworCisgICAgaWYgKGN1cnJlbnRSb290TGF5ZXItPm9wYWNpdHkoKSAh
PSBvcGFjaXR5IHx8IGN1cnJlbnRSb290TGF5ZXItPnRyYW5zZm9ybSgpICE9IG1hdHJpeCkgewor
ICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOworICAgICAgICBj
dXJyZW50Um9vdExheWVyLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAgICAgICAgY3VycmVudFJv
b3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgfQor
CisgICAgbGF5ZXItPnBhaW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7Cisg
ICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOworCisgICAgc3luY0FuaW1hdGlvbnMo
KTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6c3luY0FuaW1hdGlvbnMoKQorewor
ICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290
TGF5ZXIoKSk7CisgICAgQVNTRVJUKGxheWVyKTsKKworICAgIGxheWVyLT5zeW5jQW5pbWF0aW9u
c1JlY3Vyc2l2ZWx5KCk7CisgICAgaWYgKGxheWVyLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5u
aW5nQW5pbWF0aW9ucygpKQorICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJldlYkxheWVy
VHJlZVJlbmRlcmVyOjp1cGRhdGVWaWV3cG9ydCwgdGhpcykpOworfQorCit2b2lkIFdlYkxheWVy
VHJlZVJlbmRlcmVyOjpwYWludFRvR3JhcGhpY3NDb250ZXh0KFFQYWludGVyKiBwYWludGVyKQor
eworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBU
ZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2Nl
bGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKKyAgICBzeW5j
UmVtb3RlQ29udGVudCgpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1
cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7CisKKyAgICBpZiAoIWxheWVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwor
ICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KCZncmFwaGljc0NvbnRleHQp
OworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOworICAgIG1fdGV4dHVyZU1h
cHBlci0+YmluZFN1cmZhY2UoMCk7CisgICAgbGF5ZXItPnBhaW50KCk7CisgICAgbV90ZXh0dXJl
TWFwcGVyLT5lbmRQYWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3ND
b250ZXh0KDApOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29u
dGVudHNSZWN0Rm9yU2NhbGluZyhjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSkKK3sK
KyAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0OworICAgIG1fY29udGVudHNTY2FsZSA9
IHNjYWxlOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVWaWV3cG9ydCgp
Cit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhv
c3RQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJl
cjo6c3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJMYXllckluZm8mIGxheWVySW5mbykKK3sK
KyAgICBXZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlkOworICAgIGVuc3VyZUxheWVyKGlkKTsK
KyAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5maW5kKGlkKTsKKyAgICBHcmFw
aGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7CisgICAgYm9vbCBuZWVkc1RvVXBkYXRlSW1h
Z2VUaWxlcyA9IGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCB8fCAobGF5ZXJJbmZvLmNvbnRlbnRz
UmVjdCAhPSBsYXllci0+Y29udGVudHNSZWN0KCkgJiYgbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0
b3JlSUQpOworCisgICAgbGF5ZXItPnNldE5hbWUobGF5ZXJJbmZvLm5hbWUpOworCisgICAgbGF5
ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVyQnlJRChsYXllckluZm8ucmVwbGljYSkpOwor
ICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIobGF5ZXJCeUlEKGxheWVySW5mby5tYXNrKSk7CisKKyAg
ICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7CisgICAgbGF5ZXItPnNldFNpemUo
bGF5ZXJJbmZvLnNpemUpOworICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5z
Zm9ybSk7CisgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVySW5mby5hbmNob3JQb2ludCk7
CisgICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5z
Zm9ybSk7CisgICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllckluZm8uYmFja2Zh
Y2VWaXNpYmxlKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRl
bnRzT3BhcXVlKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVySW5mby5jb250ZW50
c1JlY3QpOworICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5ZXJJbmZvLmRyYXdzQ29udGVu
dCk7CisKKyAgICBpZiAobmVlZHNUb1VwZGF0ZUltYWdlVGlsZXMpCisgICAgICAgIGFzc2lnbklt
YWdlVG9MYXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOworCisgICAg
Ly8gTmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgorICAgIGxheWVyLT5zZXRNYXNrc1Rv
Qm91bmRzKGxheWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9C
b3VuZHMpOworICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsKKyAgICBs
YXllci0+c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZlczNEKTsKKyAgICBWZWN0b3I8
R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
YXllckluZm8uY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViTGF5ZXJJRCBjaGls
ZElEID0gbGF5ZXJJbmZvLmNoaWxkcmVuW2ldOworICAgICAgICBHcmFwaGljc0xheWVyKiBjaGls
ZCA9IGxheWVyQnlJRChjaGlsZElEKTsKKyAgICAgICAgaWYgKCFjaGlsZCkgeworICAgICAgICAg
ICAgY2hpbGQgPSBjcmVhdGVMYXllcihjaGlsZElEKS5sZWFrUHRyKCk7CisgICAgICAgICAgICBt
X2xheWVycy5hZGQoY2hpbGRJRCwgY2hpbGQpOworICAgICAgICB9CisgICAgICAgIGNoaWxkcmVu
LmFwcGVuZChjaGlsZCk7CisgICAgfQorICAgIGxheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW5mby5hbmltYXRpb25zLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViTGF5ZXJBbmltYXRpb24gYW5pbSA9
IGxheWVySW5mby5hbmltYXRpb25zW2ldOworCisgICAgICAgIHN3aXRjaCAoYW5pbS5vcGVyYXRp
b24pIHsKKyAgICAgICAgY2FzZSBXZWJLaXQ6OldlYkxheWVyQW5pbWF0aW9uOjpBZGRBbmltYXRp
b246IHsKKyAgICAgICAgICAgIGNvbnN0IEludFNpemUgYm94U2l6ZSA9IGFuaW0uYm94U2l6ZTsK
KyAgICAgICAgICAgIGxheWVyLT5hZGRBbmltYXRpb24oYW5pbS5rZXlmcmFtZUxpc3QsIGJveFNp
emUsIGFuaW0uYW5pbWF0aW9uLmdldCgpLCBhbmltLm5hbWUsIGFuaW0uc3RhcnRUaW1lKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgV2ViS2l0OjpXZWJMYXll
ckFuaW1hdGlvbjo6UmVtb3ZlQW5pbWF0aW9uOgorICAgICAgICAgICAgbGF5ZXItPnJlbW92ZUFu
aW1hdGlvbihhbmltLm5hbWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2Vi
S2l0OjpXZWJMYXllckFuaW1hdGlvbjo6UGF1c2VBbmltYXRpb246CisgICAgICAgICAgICBkb3Vi
bGUgb2Zmc2V0ID0gV1RGOjpjdXJyZW50VGltZSgpIC0gYW5pbS5zdGFydFRpbWU7CisgICAgICAg
ICAgICBsYXllci0+cGF1c2VBbmltYXRpb24oYW5pbS5uYW1lLCBvZmZzZXQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobGF5ZXJJbmZvLmlzUm9vdExh
eWVyICYmIG1fcm9vdExheWVySUQgIT0gaWQpCisgICAgICAgIHNldFJvb3RMYXllcklEKGlkKTsK
K30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCBs
YXllcklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQp
OworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5yZW1vdmVG
cm9tUGFyZW50KCk7CisgICAgbV9sYXllcnMucmVtb3ZlKGxheWVySUQpOworICAgIGRlbGV0ZSBs
YXllcjsKK30KKworCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjplbnN1cmVMYXllcihXZWJM
YXllcklEIGlkKQoreworICAgIC8vIFdlIGhhdmUgdG8gbGVhayB0aGUgbmV3IGxheWVyJ3MgcG9p
bnRlciBhbmQgbWFuYWdlIGl0IG91cnNlbHZlcywKKyAgICAvLyBiZWNhdXNlIE93blB0ciBpcyBu
b3QgY29weWFibGUuCisgICAgaWYgKG1fbGF5ZXJzLmZpbmQoaWQpID09IG1fbGF5ZXJzLmVuZCgp
KQorICAgICAgICBtX2xheWVycy5hZGQoaWQsIGNyZWF0ZUxheWVyKGlkKS5sZWFrUHRyKCkpOwor
fQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRChXZWJMYXllcklE
IGxheWVySUQpCit7CisgICAgaWYgKGxheWVySUQgPT0gbV9yb290TGF5ZXJJRCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7CisKKyAgICBtX3Jvb3RMYXll
ci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgIGlmICghbGF5ZXJJRCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Cisg
ICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXItPmFkZENo
aWxkKGxheWVyKTsKK30KKworUGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OmdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEIGlkKQoreworICAgIGVuc3Vy
ZUxheWVyKGlkKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFw
cGVyTGF5ZXIobGF5ZXJCeUlEKGlkKSk7CisgICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxMYXllckJhY2tpbmdTdG9yZSo+KGxheWVyLT5iYWNr
aW5nU3RvcmUoKS5nZXQoKSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgYmFj
a2luZ1N0b3JlID0gTGF5ZXJCYWNraW5nU3RvcmU6OmNyZWF0ZSgpOworICAgICAgICBsYXllci0+
c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAgfQorICAgIEFTU0VSVChi
YWNraW5nU3RvcmUpOworICAgIHJldHVybiBiYWNraW5nU3RvcmU7Cit9CisKK3ZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlE
LCBmbG9hdCBzY2FsZSkKK3sKKyAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPmNyZWF0ZVRp
bGUodGlsZUlELCBzY2FsZSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92
ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQoreworICAgIGdldEJhY2tpbmdT
dG9yZShsYXllcklEKS0+cmVtb3ZlVGlsZSh0aWxlSUQpOworfQorCit2b2lkIFdlYkxheWVyVHJl
ZVJlbmRlcmVyOjp1cGRhdGVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IHdlYWtCaXRtYXApCit7CisgICAgUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gYml0bWFwID0gd2Vha0JpdG1hcDsKKyAgICBSZWZQdHI8TGF5ZXJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IGdldEJhY2tpbmdTdG9yZShsYXllcklEKTsKKyAgICBiYWNraW5n
U3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRtYXAu
Z2V0KCkpOworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2lu
Z1N0b3JlKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2UoaW50
NjRfdCBpbWFnZUlELCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKK3sK
KyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFrQml0bWFwOworICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRleHR1
cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7CisgICAgYmFja2luZ1N0b3JlLT51
cGRhdGVDb250ZW50cyhtX3RleHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRlSW1hZ2Uo
KS5nZXQoKSwgQml0bWFwVGV4dHVyZTo6QkdSQUZvcm1hdCk7CisgICAgbV9kaXJlY3RseUNvbXBv
c2l0ZWRJbWFnZXMuc2V0KGltYWdlSUQsIGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCit7CisgICAgbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOworfQorCit2b2lkIFdlYkxh
eWVyVHJlZVJlbmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIs
IGludDY0X3QgaW1hZ2VJRCkKK3sKKyAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxUZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fZGlyZWN0bHlDb21wb3NpdGVk
SW1hZ2VzLmZpbmQoaW1hZ2VJRCk7CisgICAgQVNTRVJUKGl0ICE9IG1fZGlyZWN0bHlDb21wb3Np
dGVkSW1hZ2VzLmVuZCgpKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT5zZWNv
bmQuZ2V0KCkpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzd2FwQnVmZmVycygp
Cit7CisgICAgSGFzaFNldDxSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGVu
ZCA9IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8UmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fYmFja2lu
Z1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgICgqaXQpLT5zd2FwQnVmZmVycyhtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworCisgICAgbV9i
YWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7Cit9CisKK3ZvaWQgV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKK3sKKyAgICBtX3Jvb3RMYXllci0+
c3luY0NvbXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOworICAgIHN3YXBCdWZmZXJzKCk7CisK
KyAgICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMgd2F5IGZvciB0aGUgc2Ny
ZWVuLCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQgb25lLgorICAgIGNh
bGxPbk1haW5UaHJlYWQoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFt
ZSwgdGhpcykpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpyZW5kZXJOZXh0RnJh
bWUoKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0UHJveHktPnJlbmRlck5leHRGcmFtZSgpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJl
bmRlcmVyOjplbnN1cmVSb290TGF5ZXIoKQoreworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVN
YXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7
CisKKyAgICBtX3Jvb3RMYXllciA9IGNyZWF0ZUxheWVyKEludmFsaWRXZWJMYXllcklEKTsKKyAg
ICBtX3Jvb3RMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgbV9yb290TGF5ZXIt
PnNldERyYXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQzRCgwLCAwLCAwKSk7CisKKyAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQg
bm90IGhhdmUgemVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgorICAgIG1f
cm9vdExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOworICAgIHRvVGV4dHVyZU1h
cHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVN
YXBwZXIuZ2V0KCkpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jUmVtb3Rl
Q29udGVudCgpCit7CisgICAgLy8gV2UgZW5xdWV1ZSBtZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVt
IGR1cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJlIGFuIGFjdGl2ZSBHTCBjb250ZXh0LgorICAg
IGVuc3VyZVJvb3RMYXllcigpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JlbmRl
clF1ZXVlLnNpemUoKTsgKytpKQorICAgICAgICBtX3JlbmRlclF1ZXVlW2ldKCk7CisKKyAgICBt
X3JlbmRlclF1ZXVlLmNsZWFyKCk7Cit9CisKKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
cHVyZ2VHTFJlc291cmNlcygpCit7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRv
VGV4dHVyZU1hcHBlckxheWVyKHJvb3RMYXllcigpKTsKKworICAgIGlmIChsYXllcikKKyAgICAg
ICAgbGF5ZXItPmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOworCisgICAgbV9kaXJlY3Rs
eUNvbXBvc2l0ZWRJbWFnZXMuY2xlYXIoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIuY2xlYXIoKTsK
KyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKKworICAgIGNh
bGxPbk1haW5UaHJlYWQoYmluZCgmV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlQmFja2luZ1N0
b3JlcywgdGhpcykpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tp
bmdTdG9yZXMoKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0UHJveHktPnB1cmdlQmFja2luZ1N0b3JlcygpOworfQorCitmbG9hdCBXZWJM
YXllclRyZWVSZW5kZXJlcjo6c2NhbGUoKQoreworICAgIG1fbG9ja2VyLnJlYWRMb2NrKCk7Cisg
ICAgZmxvYXQgcmV0dXJuU2NhbGUgPSBtX3NjYWxlOworICAgIG1fbG9ja2VyLnVubG9jaygpOwor
ICAgIHJldHVybiByZXR1cm5TY2FsZTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
c2V0U2NhbGUoZmxvYXQgc2NhbGUpCit7CisgICAgQVNTRVJUKHNjYWxlID49IDApOworCisgICAg
aWYgKHNjYWxlID09IG1fc2NhbGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbG9ja2VyLndy
aXRlTG9jaygpOworICAgIG1fc2NhbGUgPSBzY2FsZTsKKyAgICBtX2xvY2tlci51bmxvY2soKTsK
K30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGV0YWNoKCkKK3sKKyAgICBtX2xheWVy
VHJlZUhvc3RQcm94eSA9IDA7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmFwcGVu
ZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBtX3JlbmRl
clF1ZXVlLmFwcGVuZChmdW5jdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjVkOTdhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI2lmbmRlZiBXZWJMYXllclRyZWVSZW5kZXJlcl9oCisjZGVmaW5lIFdlYkxh
eWVyVHJlZVJlbmRlcmVyX2gKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVJ
bmZvLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRp
dmVzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBMYXllckJhY2tpbmdTdG9yZTsK
K2NsYXNzIExheWVyVHJlZUhvc3RQcm94eTsKK2NsYXNzIFdlYkxheWVySW5mbzsKK2NsYXNzIFdl
YkxheWVyVXBkYXRlSW5mbzsKKworY2xhc3MgV2ViTGF5ZXJUcmVlUmVuZGVyZXIgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+LCBwdWJsaWMgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXIoTGF5ZXJUcmVlSG9zdFByb3h5Kik7CisgICAgdmlydHVhbCB+V2ViTGF5ZXJUcmVlUmVuZGVy
ZXIoKTsKKyAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKKyAgICB2b2lkIHBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29u
dGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKKyAgICB2b2lkIHN5
bmNSZW1vdGVDb250ZW50KCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yU2Nh
bGluZyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQpOworCisgICAgZmxvYXQgc2NhbGUo
KTsKKyAgICB2b2lkIHNldFNjYWxlKGZsb2F0KTsKKyAgICB2b2lkIGRldGFjaCgpOworICAgIHZv
aWQgYXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVwZGF0
ZVZpZXdwb3J0KCk7CisKKyAgICB2b2lkIGRlbGV0ZUxheWVyKFdlYkxheWVySUQpOworICAgIHZv
aWQgc2V0Um9vdExheWVySUQoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzeW5jTGF5ZXJQYXJhbWV0
ZXJzKGNvbnN0IFdlYkxheWVySW5mbyYpOworICAgIHZvaWQgY3JlYXRlVGlsZShXZWJMYXllcklE
LCBpbnQsIGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoV2ViTGF5ZXJJRCwgaW50
KTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUoV2ViTGF5ZXJJRCwgaW50LCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPik7CisgICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOworICAgIHZvaWQgY3JlYXRlSW1h
Z2UoaW50NjRfdCwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKKyAgICB2b2lkIGRlc3Ry
b3lJbWFnZShpbnQ2NF90KTsKKworcHJpdmF0ZToKKyAgICBQYXNzT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI+IGNyZWF0ZUxheWVyKFdlYkxheWVySUQpOworCisgICAgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciogbGF5ZXJCeUlEKFdlYkxheWVySUQgaWQpIHsgcmV0dXJuIChpZCA9PSBJbnZh
bGlkV2ViTGF5ZXJJRCkgPyAwIDogbV9sYXllcnMuZ2V0KGlkKTsgfQorICAgIFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CisK
KyAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGll
bnQuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVN5
bmNSZXF1aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgeyB9CisgICAgdmlydHVh
bCBib29sIHNob3dEZWJ1Z0JvcmRlcnMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNob3dSZXBhaW50Q291bnRl
cihjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1Bo
YXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9CisgICAgdm9pZCBjYWxsT25NYWluVHJl
YWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkxh
eWVySUQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXllck1hcDsKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7
CisKKyAgICAvLyBSZW5kZXIgcXVldWUgY2FuIGJlIGFjY2Vzc2VkIG9ueSBmcm9tIG1haW4gdGhy
ZWFkIG9yIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIQorICAgIFZlY3RvcjxGdW5jdGlvbjx2
b2lkKCk+ID4gbV9yZW5kZXJRdWV1ZTsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikKKyAgICBP
d25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOworICAgIFBhc3NS
ZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGdldEJhY2tpbmdTdG9yZShXZWJMYXllcklEKTsKKyAg
ICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlPiA+IG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzOworICAgIEhhc2hTZXQ8UmVmUHRyPExh
eWVyQmFja2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsKKyNl
bmRpZgorCisgICAgdm9pZCBzY2hlZHVsZVdlYlZpZXdVcGRhdGUoKTsKKyAgICB2b2lkIHN5bmNo
cm9uaXplVmlld3BvcnQoKTsKKyAgICB2b2lkIGFzc2lnbkltYWdlVG9MYXllcihXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgaW50NjRfdCBpbWFnZUlEKTsKKyAgICB2b2lkIGVuc3VyZVJvb3RMYXll
cigpOworICAgIHZvaWQgZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCk7CisgICAgdm9pZCBzd2FwQnVm
ZmVycygpOworICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHJlbmRlck5leHRG
cmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAgICBMYXllclRyZWVI
b3N0UHJveHkqIG1fbGF5ZXJUcmVlSG9zdFByb3h5OworICAgIE93blB0cjxXZWJDb3JlOjpHcmFw
aGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAgICBWZWN0b3I8V2ViTGF5ZXJJRD4gbV9sYXllcnNU
b0RlbGV0ZTsKKworICAgIExheWVyTWFwIG1fbGF5ZXJzOworICAgIFdlYkxheWVySUQgbV9yb290
TGF5ZXJJRDsKKyAgICBXVEY6OlJlYWRXcml0ZUxvY2sgbV9sb2NrZXI7CisgICAgZmxvYXQgbV9z
Y2FsZTsKK307CisKK307CisKKyNlbmRpZiAvLyBVU0UoVUlfU0lERV9DT01QT1NJVElORykKKwor
I2VuZGlmIC8vIFdlYkxheWVyVHJlZVJlbmRlcmVyX2gKKworCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L0xheWVyVHJlZUhvc3RQcm94eVF0LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjFmYjk5NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDE3ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJMYXllckJhY2tpbmdTdG9yZS5oIgotI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RNZXNzYWdlcy5oIgotI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIKLSNp
bmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9y
ZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgotI2luY2x1ZGUgIlVwZGF0ZUlu
Zm8uaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJXZWJM
YXllclRyZWVJbmZvLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8T3BlbkdMU2hpbXMuaD4KLSNpbmNsdWRlIDxRRGF0
ZVRpbWU+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUxh
eWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBuZXdMYXllciA9
IG5ldyBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcih0aGlzKTsKLSAgICBUZXh0dXJlTWFwcGVy
TGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIobmV3TGF5ZXIpOwotICAgIGxheWVy
LT5zZXRTaG91bGRVcGRhdGVCYWNraW5nU3RvcmVGcm9tTGF5ZXIoZmFsc2UpOwotICAgIHJldHVy
biBhZG9wdFB0cihuZXdMYXllcik7Ci19Ci0KLUxheWVyVHJlZUhvc3RQcm94eTo6TGF5ZXJUcmVl
SG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCi0gICAgOiBtX2Ry
YXdpbmdBcmVhUHJveHkoZHJhd2luZ0FyZWFQcm94eSkKLSAgICAsIG1fcm9vdExheWVySUQoMCkK
LXsKLX0KLQotTGF5ZXJUcmVlSG9zdFByb3h5Ojp+TGF5ZXJUcmVlSG9zdFByb3h5KCkKLXsKLX0K
LQotLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZWVudHJhbnQuCi12b2lkIExheWVyVHJl
ZUhvc3RQcm94eTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkK
LXsKLSAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0g
VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwotICAgIEFT
U0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVy
OjpPcGVuR0xNb2RlKTsKLQotICAgIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAgR3JhcGhpY3NM
YXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOwotICAgIGlmICghY3VycmVudFJv
b3RMYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXll
ciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGN1cnJlbnRSb290TGF5ZXIpOwotCi0gICAgaWYgKCFs
YXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnNldFRleHR1cmVNYXBwZXIobV90
ZXh0dXJlTWFwcGVyLmdldCgpKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmco
KTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOwotICAgIG1fdGV4dHVyZU1h
cHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNsaXBSZWN0KTsKLQotICAg
IGlmIChjdXJyZW50Um9vdExheWVyLT5vcGFjaXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9v
dExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRyaXgpIHsKLSAgICAgICAgY3VycmVudFJvb3RMYXll
ci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJh
bnNmb3JtKG1hdHJpeCk7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIH0KLQotICAgIGxheWVyLT5wYWludCgpOwot
ICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5k
UGFpbnRpbmcoKTsKLQotICAgIHN5bmNBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
SG9zdFByb3h5OjpzeW5jQW5pbWF0aW9ucygpCi17Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBs
YXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJvb3RMYXllcigpKTsKLSAgICBBU1NFUlQobGF5
ZXIpOwotCi0gICAgbGF5ZXItPnN5bmNBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKLSAgICBpZiAo
bGF5ZXItPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCi0gICAgICAg
IHVwZGF0ZVZpZXdwb3J0KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRv
R3JhcGhpY3NDb250ZXh0KFFQYWludGVyKiBwYWludGVyKQotewotICAgIGlmICghbV90ZXh0dXJl
TWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUo
KTsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4
dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKLSAgICBzeW5jUmVtb3RlQ29udGVudCgpOwotICAg
IFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5
ZXIoKSk7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+
c2V0R3JhcGhpY3NDb250ZXh0KCZncmFwaGljc0NvbnRleHQpOwotICAgIG1fdGV4dHVyZU1hcHBl
ci0+YmVnaW5QYWludGluZygpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2UoMCk7
Ci0gICAgbGF5ZXItPnBhaW50KCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygp
OwotICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KDApOwotfQotCi12b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQoKQotewotICAgIG1fZHJhd2luZ0Fy
ZWFQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJiBsYXllckluZm8pCi17Ci0g
ICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5pZDsKLSAgICBlbnN1cmVMYXllcihpZCk7Ci0g
ICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9sYXllcnMuZmluZChpZCk7Ci0gICAgR3JhcGhp
Y3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOwotICAgIGJvb2wgbmVlZHNUb1VwZGF0ZUltYWdl
VGlsZXMgPSBsYXllckluZm8uaW1hZ2VJc1VwZGF0ZWQgfHwgKGxheWVySW5mby5jb250ZW50c1Jl
Y3QgIT0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpICYmIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9y
ZUlEKTsKLQotICAgIGxheWVyLT5zZXROYW1lKGxheWVySW5mby5uYW1lKTsKLQotICAgIGxheWVy
LT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5SUQobGF5ZXJJbmZvLnJlcGxpY2EpKTsKLSAg
ICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJRChsYXllckluZm8ubWFzaykpOwotCi0gICAg
bGF5ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOwotICAgIGxheWVyLT5zZXRTaXplKGxh
eWVySW5mby5zaXplKTsKLSAgICBsYXllci0+c2V0VHJhbnNmb3JtKGxheWVySW5mby50cmFuc2Zv
cm0pOwotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8uYW5jaG9yUG9pbnQpOwot
ICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShsYXllckluZm8uY2hpbGRyZW5UcmFuc2Zv
cm0pOwotICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2liaWxpdHkobGF5ZXJJbmZvLmJhY2tmYWNl
VmlzaWJsZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzT3BhcXVlKGxheWVySW5mby5jb250ZW50
c09wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNS
ZWN0KTsKLSAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQp
OwotCi0gICAgaWYgKG5lZWRzVG9VcGRhdGVJbWFnZVRpbGVzKQotICAgICAgICBhc3NpZ25JbWFn
ZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKLQotICAgIC8v
IE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xpcC4KLSAgICBsYXllci0+c2V0TWFza3NUb0Jv
dW5kcyhsYXllckluZm8uaXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91
bmRzKTsKLSAgICBsYXllci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7Ci0gICAgbGF5
ZXItPnNldFByZXNlcnZlczNEKGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7Ci0gICAgVmVjdG9yPEdy
YXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5
ZXJJbmZvLmNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFdlYkxheWVySUQgY2hpbGRJ
RCA9IGxheWVySW5mby5jaGlsZHJlbltpXTsKLSAgICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQg
PSBsYXllckJ5SUQoY2hpbGRJRCk7Ci0gICAgICAgIGlmICghY2hpbGQpIHsKLSAgICAgICAgICAg
IGNoaWxkID0gY3JlYXRlTGF5ZXIoY2hpbGRJRCkubGVha1B0cigpOwotICAgICAgICAgICAgbV9s
YXllcnMuYWRkKGNoaWxkSUQsIGNoaWxkKTsKLSAgICAgICAgfQotICAgICAgICBjaGlsZHJlbi5h
cHBlbmQoY2hpbGQpOwotICAgIH0KLSAgICBsYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllckluZm8uYW5pbWF0aW9ucy5zaXplKCk7
ICsraSkgewotICAgICAgICBjb25zdCBXZWJLaXQ6OldlYkxheWVyQW5pbWF0aW9uIGFuaW0gPSBs
YXllckluZm8uYW5pbWF0aW9uc1tpXTsKLQotICAgICAgICBzd2l0Y2ggKGFuaW0ub3BlcmF0aW9u
KSB7Ci0gICAgICAgIGNhc2UgV2ViS2l0OjpXZWJMYXllckFuaW1hdGlvbjo6QWRkQW5pbWF0aW9u
OiB7Ci0gICAgICAgICAgICBjb25zdCBJbnRTaXplIGJveFNpemUgPSBhbmltLmJveFNpemU7Ci0g
ICAgICAgICAgICBsYXllci0+YWRkQW5pbWF0aW9uKGFuaW0ua2V5ZnJhbWVMaXN0LCBib3hTaXpl
LCBhbmltLmFuaW1hdGlvbi5nZXQoKSwgYW5pbS5uYW1lLCBhbmltLnN0YXJ0VGltZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYktpdDo6V2ViTGF5ZXJB
bmltYXRpb246OlJlbW92ZUFuaW1hdGlvbjoKLSAgICAgICAgICAgIGxheWVyLT5yZW1vdmVBbmlt
YXRpb24oYW5pbS5uYW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYktp
dDo6V2ViTGF5ZXJBbmltYXRpb246OlBhdXNlQW5pbWF0aW9uOgotICAgICAgICAgICAgZG91Ymxl
IG9mZnNldCA9IFdURjo6Y3VycmVudFRpbWUoKSAtIGFuaW0uc3RhcnRUaW1lOwotICAgICAgICAg
ICAgbGF5ZXItPnBhdXNlQW5pbWF0aW9uKGFuaW0ubmFtZSwgb2Zmc2V0KTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxheWVySW5mby5pc1Jvb3RMYXll
ciAmJiBtX3Jvb3RMYXllcklEICE9IGlkKQotICAgICAgICBzZXRSb290TGF5ZXJJRChpZCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVMYXllcihXZWJMYXllcklEIGxheWVy
SUQpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Ci0g
ICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF5ZXItPnJlbW92ZUZyb21Q
YXJlbnQoKTsKLSAgICBtX2xheWVycy5yZW1vdmUobGF5ZXJJRCk7Ci0gICAgZGVsZXRlIGxheWVy
OwotfQotCi0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjplbnN1cmVMYXllcihXZWJMYXllcklE
IGlkKQotewotICAgIC8vIFdlIGhhdmUgdG8gbGVhayB0aGUgbmV3IGxheWVyJ3MgcG9pbnRlciBh
bmQgbWFuYWdlIGl0IG91cnNlbHZlcywKLSAgICAvLyBiZWNhdXNlIE93blB0ciBpcyBub3QgY29w
eWFibGUuCi0gICAgaWYgKG1fbGF5ZXJzLmZpbmQoaWQpID09IG1fbGF5ZXJzLmVuZCgpKQotICAg
ICAgICBtX2xheWVycy5hZGQoaWQsIGNyZWF0ZUxheWVyKGlkKS5sZWFrUHRyKCkpOwotfQotCi12
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdExheWVySUQoV2ViTGF5ZXJJRCBsYXllcklE
KQotewotICAgIGlmIChsYXllcklEID09IG1fcm9vdExheWVySUQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fcm9vdExheWVySUQgPSBsYXllcklEOwotCi0gICAgbV9yb290TGF5ZXItPnJlbW92
ZUFsbENoaWxkcmVuKCk7Ci0KLSAgICBpZiAoIWxheWVySUQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOwotICAgIGlmICgh
bGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChsYXll
cik7Ci19Ci0KLVBhc3NSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IExheWVyVHJlZUhvc3RQcm94
eTo6Z2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQgaWQpCi17Ci0gICAgZW5zdXJlTGF5ZXIoaWQp
OwotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihs
YXllckJ5SUQoaWQpKTsKLSAgICBSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSA9IHN0YXRpY19jYXN0PExheWVyQmFja2luZ1N0b3JlKj4obGF5ZXItPmJhY2tpbmdTdG9yZSgp
LmdldCgpKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkgewotICAgICAgICBiYWNraW5nU3RvcmUg
PSBMYXllckJhY2tpbmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAgICAgIGxheWVyLT5zZXRCYWNraW5n
U3RvcmUoYmFja2luZ1N0b3JlLmdldCgpKTsKLSAgICB9Ci0gICAgQVNTRVJUKGJhY2tpbmdTdG9y
ZSk7Ci0gICAgcmV0dXJuIGJhY2tpbmdTdG9yZTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJv
eHk6OmNyZWF0ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBmbG9hdCBzY2Fs
ZSkKLXsKLSAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPmNyZWF0ZVRpbGUodGlsZUlELCBz
Y2FsZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlKFdlYkxheWVy
SUQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKLXsKLSAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCkt
PnJlbW92ZVRpbGUodGlsZUlEKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0
ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlELCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gd2Vha0JpdG1hcCkKLXsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAg
PSB3ZWFrQml0bWFwOwotICAgIFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
ID0gZ2V0QmFja2luZ1N0b3JlKGxheWVySUQpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGls
ZSh0aWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGJpdG1hcC5nZXQoKSk7Ci0gICAgbV9i
YWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwotfQotCi12
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlSW1hZ2UoaW50NjRfdCBpbWFnZUlELCBQYXNz
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gd2Vha0JpdG1hcCkKLXsKLSAgICBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBiaXRtYXAgPSB3ZWFrQml0bWFwOwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVy
VGlsZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IFRleHR1cmVNYXBwZXJUaWxlZEJhY2tp
bmdTdG9yZTo6Y3JlYXRlKCk7Ci0gICAgYmFja2luZ1N0b3JlLT51cGRhdGVDb250ZW50cyhtX3Rl
eHR1cmVNYXBwZXIuZ2V0KCksIGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKS5nZXQoKSwgQml0bWFwVGV4
dHVyZTo6QkdSQUZvcm1hdCk7Ci0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuc2V0KGlt
YWdlSUQsIGJhY2tpbmdTdG9yZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0
cm95SW1hZ2UoaW50NjRfdCBpbWFnZUlEKQotewotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1h
Z2VzLnJlbW92ZShpbWFnZUlEKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmFzc2ln
bkltYWdlVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgaW50NjRfdCBpbWFnZUlEKQotewot
ICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmU+ID46
Oml0ZXJhdG9yIGl0ID0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZmluZChpbWFnZUlEKTsK
LSAgICBBU1NFUlQoaXQgIT0gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMuZW5kKCkpOwotICAg
IGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnNlY29uZC5nZXQoKSk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5Ojpzd2FwQnVmZmVycygpCi17Ci0gICAgSGFzaFNldDxSZWZQdHI8
TGF5ZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGVuZCA9IG1fYmFja2luZ1N0b3Jlc1dpdGhQ
ZW5kaW5nQnVmZmVycy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPExheWVyQmFja2lu
Z1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVy
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5zd2FwQnVmZmVycyht
X3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotCi0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdC
dWZmZXJzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpmbHVzaExheWVy
Q2hhbmdlcygpCi17Ci0gICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKEZsb2F0
UmVjdCgpKTsKLSAgICBzd2FwQnVmZmVycygpOwotCi0gICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMg
c3RhdGUgaXMgb24gaXRzIHdheSBmb3IgdGhlIHNjcmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nlc3Mg
dG8gcmVuZGVyIHRoZSBuZXh0IG9uZS4KLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUo
KSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OmVuc3VyZVJvb3RMYXllcigpCi17Ci0gICAgaWYgKG1fcm9vdExheWVy
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9yb290TGF5ZXIgPSBjcmVhdGVMYXllcihJbnZhbGlk
V2ViTGF5ZXJJRCk7Ci0gICAgbV9yb290TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOwot
ICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVy
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMCwgMCkpOwotCi0gICAgLy8gVGhlIHJv
b3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIHplcm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1p
emVkIG91dC4KLSAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsK
LSAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4
dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwotICAgIHRvVGV4
dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3Rl
eHR1cmVNYXBwZXIuZ2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c3luY1Jl
bW90ZUNvbnRlbnQoKQotewotICAgIC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5kIGV4ZWN1dGUg
dGhlbSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wgY29udGV4dC4K
LSAgICBlbnN1cmVSb290TGF5ZXIoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9y
ZW5kZXJRdWV1ZS5zaXplKCk7ICsraSkKLSAgICAgICAgbV9yZW5kZXJRdWV1ZVtpXSgpOwotCi0g
ICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6
ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAg
bV9yZW5kZXJRdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOwotICAgIHVwZGF0ZVZpZXdwb3J0KCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVy
SUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKLXsK
LSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGUs
IHRoaXMsIGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby51cGRhdGVTY2FsZUZhY3RvcikpOwot
ICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHVwZGF0ZUluZm8pOwotfQot
Ci12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCi17Ci0g
ICAgQVNTRVJUKHVwZGF0ZUluZm8udXBkYXRlUmVjdHMuc2l6ZSgpID09IDEpOwotICAgIEludFJl
Y3Qgc291cmNlUmVjdCA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdHMuZmlyc3QoKTsKLSAgICBJbnRS
ZWN0IHRhcmdldFJlY3QgPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHM7Ci0gICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUodXBkYXRl
SW5mby5iaXRtYXBIYW5kbGUpOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhv
c3RQcm94eTo6dXBkYXRlVGlsZSwgdGhpcywgbGF5ZXJJRCwgdGlsZUlELCBzb3VyY2VSZWN0LCB0
YXJnZXRSZWN0LCBiaXRtYXApKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnJlbW92
ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKLXsKLSAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGUsIHRoaXMsIGxheWVySUQs
IHRpbGVJRCkpOwotfQotCi0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVDb21wb3Np
dGluZ0xheWVyKFdlYkxheWVySUQgaWQpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVMYXllciwgdGhpcywgaWQpKTsKLX0KLQotdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQgaWQpCi17
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290TGF5
ZXJJRCwgdGhpcywgaWQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNDb21w
b3NpdGluZ0xheWVyU3RhdGUoY29uc3QgV2ViTGF5ZXJJbmZvJiBpbmZvKQotewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6c3luY0xheWVyUGFyYW1ldGVycywg
dGhpcywgaW5mbykpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJh
bWUoKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6Zmx1
c2hMYXllckNoYW5nZXMsIHRoaXMpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNy
ZWF0ZURpcmVjdGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5LCBjb25zdCBXZWJLaXQ6OlNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlLCB0aGlzLCBr
ZXksIGJpdG1hcCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveURpcmVj
dGx5Q29tcG9zaXRlZEltYWdlKGludDY0X3Qga2V5KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZUhvc3RQcm94eTo6ZGVzdHJveUltYWdlLCB0aGlzLCBrZXkpKTsKLX0KLQot
dm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RGb3JQYW5uaW5n
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3Ip
Ci17Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvclBhbm5pbmcocmVj
dCwgdHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQo
KSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0
Rm9yU2NhbGluZyhjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCBzY2FsZSkKLXsKLSAgICBtX3Zp
c2libGVDb250ZW50c1JlY3QgPSByZWN0OwotICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOwot
ICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6
OkxheWVyVHJlZUhvc3Q6OlNldFZpc2libGVDb250ZW50c1JlY3RGb3JTY2FsaW5nKHJlY3QsIHNj
YWxlKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBM
YXllclRyZWVIb3N0UHJveHk6OnB1cmdlR0xSZXNvdXJjZXMoKQotewotICAgIFRleHR1cmVNYXBw
ZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7Ci0KLSAg
ICBpZiAobGF5ZXIpCi0gICAgICAgIGxheWVyLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1cnNpdmUo
KTsKLQotICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLmNsZWFyKCk7Ci0gICAgbV90ZXh0
dXJlTWFwcGVyLmNsZWFyKCk7Ci0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
LmNsZWFyKCk7Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5nU3RvcmVzKCksIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0OTE1MmE1Li43MjdiZDZjIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTItMDMtMTAgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0
Y2hlc2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVk
IHJlbmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBSZW1vdmUgZGlzYWJsaW5nIG9mIHRocmVhZGVkIHJlbmRlcmluZy4KKworICAgICAg
ICAqIE1pbmlCcm93c2VyL3F0L21haW4uY3BwOgorICAgICAgICAobWFpbik6CisKIDIwMTItMDMt
MDcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIHJlbW92ZSB3ZWJraXRweSBkZXBlbmRlbmN5IGluIHJ1bi1ndGstdGVzdHMKZGlmZiAtLWdp
dCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L21haW4uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQv
bWFpbi5jcHAKaW5kZXggZmVhZTE0YS4uMzY2Mzc3MyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvbWFpbi5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAKQEAg
LTM5LDkgKzM5LDYgQEAKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAg
IC8vIEZJWE1FOiBXZSBtdXN0IGFkZCBzdXBwb3J0IGZvciB0aGUgdGhyZWFkZWQgcmVuZGVyaW5n
IGFzIGl0IGlzIHRoZSBkZWZhdWx0LgotICAgIHFwdXRlbnYoIlFNTF9OT19USFJFQURFRF9SRU5E
RVJFUiIsIFFCeXRlQXJyYXkoIjEiKSk7Ci0KICAgICBNaW5pQnJvd3NlckFwcGxpY2F0aW9uIGFw
cChhcmdjLCBhcmd2KTsKIAogICAgIGlmIChhcHAuaXNSb2JvdGl6ZWQoKSkgewo=
</data>
<flag name="commit-queue"
          id="134399"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131181</attachid>
            <date>2012-03-10 11:59:17 -0800</date>
            <delta_ts>2012-03-10 22:00:52 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>ThreadedPainting_03.diff</filename>
            <type>text/plain</type>
            <size>59290</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZGU4YTg3Li44NDk5OTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTItMDMtMTAgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hl
c2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVkIHJl
bmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udmVyc2lvbnMgZnJvbS90byBRdCBRTWF0
cml4NHg0LiBVc2VkIGJ5IFF0IFdlYktpdDIKKyAgICAgICAgcmVuZGVyaW5nIGFuZCB0ZXN0ZWQg
YnkgUXQgV2ViS2l0MiBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4OjpvcGVyYXRvciBRTWF0cml4NHg0KToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0
cml4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0
aW9uTWF0cml4Lmg6CisgICAgICAgIChUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisKIDIwMTItMDMt
MDcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIG1lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sIGlzIGZsYWt5CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJp
eFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0
aW9uTWF0cml4UXQuY3BwCmluZGV4IDZhNTczNWIuLjdmZjQzMmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9u
TWF0cml4UXQuY3BwCkBAIC01MCw2ICs1MCwyMiBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJh
bnNmb3JtYXRpb25NYXRyaXgoY29uc3QgUVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgICAgICAg
ICAgICB0cmFuc2Zvcm0ubTMxKCksIHRyYW5zZm9ybS5tMzIoKSwgMCwgdHJhbnNmb3JtLm0zMygp
KTsKIH0KIAorVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIFFNYXRyaXg0eDQoKSBjb25z
dAoreworICAgIHJldHVybiBRTWF0cml4NHg0KG0xMSgpLCBtMTIoKSwgbTEzKCksIG0xNCgpLAor
ICAgICAgICAgICAgICAgICAgICAgIG0yMSgpLCBtMjIoKSwgbTIzKCksIG0yNCgpLAorICAgICAg
ICAgICAgICAgICAgICAgIG0zMSgpLCBtMzIoKSwgbTMzKCksIG0zNCgpLAorICAgICAgICAgICAg
ICAgICAgICAgIG00MSgpLCBtNDIoKSwgbTQzKCksIG00NCgpKTsKK30KKworVHJhbnNmb3JtYXRp
b25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IFFNYXRyaXg0eDQmIG1hdHJpeCkK
K3sKKyAgICBzZXRNYXRyaXgobWF0cml4KDAsIDApLCBtYXRyaXgoMSwgMCksIG1hdHJpeCgyLCAw
KSwgbWF0cml4KDMsIDApLAorICAgICAgICAgICAgICBtYXRyaXgoMCwgMSksIG1hdHJpeCgxLCAx
KSwgbWF0cml4KDIsIDEpLCBtYXRyaXgoMywgMSksCisgICAgICAgICAgICAgIG1hdHJpeCgwLCAy
KSwgbWF0cml4KDEsIDIpLCBtYXRyaXgoMiwgMiksIG1hdHJpeCgzLCAyKSwKKyAgICAgICAgICAg
ICAgbWF0cml4KDAsIDMpLCBtYXRyaXgoMSwgMyksIG1hdHJpeCgyLCAzKSwgbWF0cml4KDMsIDMp
KTsKK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oCmluZGV4IGE5OGQ3MGUuLjc2NWU3ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXgu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
Zm9ybWF0aW9uTWF0cml4LmgKQEAgLTQxLDYgKzQxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dBZmZp
bmVUcmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm07CiAjZWxpZiBQTEFURk9STShPUEVOVkcpCiAj
aW5jbHVkZSAiVkdVdGlscy5oIgogI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UU1hdHJp
eDR4ND4KICNpbmNsdWRlIDxRVHJhbnNmb3JtPgogI2VsaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSA8
U2tNYXRyaXguaD4KQEAgLTgyLDYgKzgzLDcgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oUVQp
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgUVRyYW5zZm9ybSYpOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4KGNvbnN0IFFNYXRyaXg0eDQmKTsKICNlbmRpZgogCiAgICAgdm9pZCBz
ZXRNYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBl
LCBkb3VibGUgZikKQEAgLTMyOCw2ICszMzAsNyBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgVkdN
YXRyaXgoKSBjb25zdDsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIG9wZXJhdG9yIFFUcmFuc2Zv
cm0oKSBjb25zdDsKKyAgICBvcGVyYXRvciBRTWF0cml4NHg0KCkgY29uc3Q7CiAjZWxpZiBVU0Uo
U0tJQSkKICAgICBvcGVyYXRvciBTa01hdHJpeCgpIGNvbnN0OwogI2VsaWYgUExBVEZPUk0oV1gp
ICYmIFVTRShXWEdDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDMzZmFlODAuLmZiODA5MDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMDMgQEAKKzIwMTItMDMtMTAgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9z
dGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBw
b3J0IHRocmVhZGVkIHJlbmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgUXQ1IHRocmVhZGVkIHJlbmRlcmluZyBzdXBw
b3J0IGZvciBRdCBXZWJLaXQyLgorICAgICAgICBQYXJ0cyBvZiBMYXllclRyZWVIb3N0UHJveHkg
d2hpY2ggY29udGFpbiBsYXllciB0cmVlIGFuZCBsYXllciBwYWludGluZyBvYmplY3RzIAorICAg
ICAgICBhcmUgbW92ZWQgdG8gc2VwYXJhdGUgY2xhc3MgY2FsbGVkIFdlYkxheWVyVHJlZVJlbmRl
cmVyLiBXZWJMYXllclRyZWVSZW5kZXJlciBpcyAKKyAgICAgICAgdGhyZWFkIHNhZmUgcmVmIGNv
dW50ZWQgYW5kIHJlZmVyZW5jZWQgYnkgTGF5ZXJUcmVlSG9zdFByb3h5IGFuZCBwYWludCBub2Rl
LgorICAgICAgICBBbGwgbGF5ZXIgdHJlZSBhbmQgZ3JhcGhpY3Mgb2JqZWN0cyBhcmUgY3JlYXRl
ZCwgYWNjZXNzZWQgYW5kIGRlYWxsb2NhdGVkIGZyb20gUXQgCisgICAgICAgIFNjZW5lZ3JhcGgn
cyBwYWludCB0aHJlYWQgb25seS4KKyAgICAgICAgTGF5ZXIgdHJlZSB1cGRhdGVzIGZyb20gcmVu
ZGVyIHF1ZXVlIGFyZSBmZXRjaGVkIGluIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIHdoZW4g
CisgICAgICAgIG1haW4gdGhyZWFkIGlzIGxvY2tlZC4KKyAgICAgICAgTWVzc2FnZXMgZnJvbSBw
YWludCB0aHJlYWQgdG8gd2ViIHByb2Nlc3MgYXJlIHBhc3NlZCB0aHJvdWdoIE1haW5UaHJlYWRH
dWFyZGVkSW52b2tlciAKKyAgICAgICAgY2FsbCBnYXRlIChpbXBsZW1lbnRlZCBieSBOb2FtIFJv
c2VudGhhbCBhbmQgcHJldmlvdXNseSByZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIAorICAgICAg
ICBDaHJpc3RpYW5zZW4pLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAgICAoUGFnZVByb3h5Tm9kZTo6
UGFnZVByb3h5Tm9kZSk6CisgICAgICAgIChQYWdlUHJveHlOb2RlOjpyZW5kZXIpOgorICAgICAg
ICAoUGFnZVByb3h5Tm9kZTo6flBhZ2VQcm94eU5vZGUpOgorICAgICAgICAoUGFnZVByb3h5Tm9k
ZTo6bGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAoUGFnZVByb3h5Tm9kZSk6CisgICAgICAg
IChQYWdlUHJveHlOb2RlOjpzZXRTY2FsZSk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjp1cGRh
dGVQYWludE5vZGUpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tXZWJQ
YWdlUHJpdmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVy
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdM
YXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5k
ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlRGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJv
eHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvclBhbm5pbmcpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RG
b3JTY2FsaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpyZW5kZXJO
ZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlQmFj
a2luZ1N0b3Jlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6bGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcik6CisgICAgICAg
IChXZWJLaXQ6Ok1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjo6Y2FsbCk6CisgICAgICAgIChXZWJL
aXQ6Ok1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjo6TWFpblRocmVhZEd1YXJkZWRJbnZva2VyKToK
KyAgICAgICAgKFdlYktpdDo6TWFpblRocmVhZEd1YXJkZWRJbnZva2VyOjppbnZva2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6Y2FsbE9uTWFpblRyZWFkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OldlYkxheWVyVHJlZVJlbmRlcmVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6On5XZWJMYXllclRyZWVS
ZW5kZXJlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvQ3Vy
cmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpz
eW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpw
YWludFRvR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3RGb3JTY2FsaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRlcnMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6Z2V0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OmRlc3Ryb3lJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJl
bmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVSZW5kZXJlcjo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVS
ZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OmVuc3VyZVJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
VHJlZVJlbmRlcmVyOjpzeW5jUmVtb3RlQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyVHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVSZW5kZXJlcjo6YXBwZW5kVXBkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5
ZXJUcmVlUmVuZGVyZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUhvc3RQcm94eS5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkxheWVy
VHJlZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6Omxh
eWVyQnlJRCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpyb290TGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6bm90aWZ5QW5pbWF0
aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpub3Rp
ZnlTeW5jUmVxdWlyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6
c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVy
OjpzaG93UmVwYWludENvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5k
ZXJlcjo6cGFpbnRDb250ZW50cyk6CisKIDIwMTItMDMtMDcgIEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFBpbmNoIHpvb20gYWN0cyB3
ZWlyZGx5IG9uIG55dGltZXMuY29tIHdoaWxlIGxvYWRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDEzMjA1
NmEuLjE0NjI4ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMjQyLDYgKzI0Miw3IEBAIEhFQURFUlMgKz0g
XAogICAgIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2VDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNz
L1dlYkluc3BlY3RvclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9XZWJLZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyUHJveHkuaCBcCisgICAgVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmggXAog
ICAgIFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1dlYk1lZGlh
Q2FjaGVNYW5hZ2VyUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25EYXRhLmgg
XApAQCAtNTMyLDYgKzUzMyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hl
ci9UaHJlYWRMYXVuY2hlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNz
TGF1bmNoZXJRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hl
clF0LmNwcCBcCisgICAgVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBc
CiAgICAgVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3Rp
ZmljYXRpb24uY3BwIFwKQEAgLTU3Miw2ICs1NzQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVBy
b2Nlc3MvV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYkluc3Bl
Y3RvclByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQ
cm94eS5jcHAgXAorICAgIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAgXAogICAg
IFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViTWVkaWFD
YWNoZU1hbmFnZXJQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uRGF0YS5j
cHAgXApAQCAtNTg3LDcgKzU5MCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJV
SUNsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuY3BwIFwKICAgICBV
SVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwIFwKLSAgICBVSVByb2Nlc3MvcXQvTGF5
ZXJUcmVlSG9zdFByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRI
YW5kbGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5kZXggMGU0
NTE5Yi4uMTJhZjcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdFByb3h5LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5kZXJl
ci5oIgogI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcF9wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vi
dmlld19wLmgiCiAjaW5jbHVkZSA8UVBvbHlnb25GPgpAQCAtNzksMjQgKzgwLDEwIEBAIHZvaWQg
UVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50KFFQYWludGVyKiBwYWludGVyKQogICAgICAgICB3
ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPnBhaW50TGF5ZXJUcmVlKHBhaW50ZXIpOwogfQog
Ci12b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25z
dCBRVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNvbnN0IFFSZWN0RiYgY2xp
cFJlY3QpCi17Ci0gICAgaWYgKCFxLT5pc1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFjbGlwUmVjdC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERyYXdp
bmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwot
ICAgIGlmICghZHJhd2luZ0FyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRyYXdpbmdBcmVh
LT5wYWludFRvQ3VycmVudEdMQ29udGV4dChRVHJhbnNmb3JtKHRyYW5zZm9ybSkuc2NhbGUoY29u
dGVudHNTY2FsZSwgY29udGVudHNTY2FsZSksIG9wYWNpdHksIGNsaXBSZWN0KTsKLX0KLQogc3Ry
dWN0IFBhZ2VQcm94eU5vZGUgOiBwdWJsaWMgUVNHUmVuZGVyTm9kZSB7Ci0gICAgUGFnZVByb3h5
Tm9kZShRUXVpY2tXZWJQYWdlUHJpdmF0ZSogcGFnZSkKLSAgICAgICAgOiBtX3BhZ2VQcml2YXRl
KHBhZ2UpCisgICAgUGFnZVByb3h5Tm9kZShQYXNzUmVmUHRyPFdlYkxheWVyVHJlZVJlbmRlcmVy
PiByZW5kZXJlcikKKyAgICAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQorICAgICAgICAsIG1f
c2NhbGUoMSkKICAgICB7CiAgICAgfQogCkBAIC0xMDcsMjAgKzk0LDI1IEBAIHN0cnVjdCBQYWdl
UHJveHlOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgewogCiAgICAgdmlydHVhbCB2b2lkIHJl
bmRlcihjb25zdCBSZW5kZXJTdGF0ZSYpCiAgICAgewotICAgICAgICBpZiAoIW1fcGFnZVByaXZh
dGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0g
bWF0cml4KCkgPyBtYXRyaXgoKS0+dG9UcmFuc2Zvcm0oKSA6IFFUcmFuc2Zvcm0oKTsKKyAgICAg
ICAgUU1hdHJpeDR4NCByZW5kZXJNYXRyaXggPSBtYXRyaXgoKSA/ICptYXRyaXgoKSA6IFFNYXRy
aXg0eDQoKTsKKworICAgICAgICAvLyBIYXZlIHRvIGFwcGx5IHJlbmRlciBzY2FsZSBtYW51YWx5
IGJlY2F1c2UgaXQgaXMgbm90IGFwcGxpZWQgb24gcGFnZSBpdGVtLgorICAgICAgICAvLyBodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMDQ0NTAKKyAgICAgICAgcmVuZGVyTWF0cml4
LnNjYWxlKG1fc2NhbGUpOwogCiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG5vbi1yZWN0YW5n
dWxhciBjbGlwcGluZ3MuCi0gICAgICAgIG1fcGFnZVByaXZhdGUtPnBhaW50VG9DdXJyZW50R0xD
b250ZXh0KHRyYW5zZm9ybSwgaW5oZXJpdGVkT3BhY2l0eSgpLCBjbGlwUmVjdCgpKTsKKyAgICAg
ICAgbGF5ZXJUcmVlUmVuZGVyZXIoKS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQocmVuZGVyTWF0
cml4LCBpbmhlcml0ZWRPcGFjaXR5KCksIGNsaXBSZWN0KCkpOwogICAgIH0KIAogICAgIH5QYWdl
UHJveHlOb2RlKCkKICAgICB7Ci0gICAgICAgIGlmIChtX3BhZ2VQcml2YXRlKQotICAgICAgICAg
ICAgbV9wYWdlUHJpdmF0ZS0+cmVzZXRQYWludE5vZGUoKTsKKyAgICAgICAgbGF5ZXJUcmVlUmVu
ZGVyZXIoKS0+cHVyZ2VHTFJlc291cmNlcygpOwogICAgIH0KIAorICAgIFdlYkxheWVyVHJlZVJl
bmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0
KCk7IH0KKworICAgIHZvaWQgc2V0U2NhbGUoZmxvYXQgc2NhbGUpIHsgbV9zY2FsZSA9IHNjYWxl
OyB9Citwcml2YXRlOgogICAgIFFSZWN0RiBjbGlwUmVjdCgpIGNvbnN0CiAgICAgewogICAgICAg
ICAvLyBTdGFydCB3aXRoIGFuIGludmFsaWQgcmVjdC4KQEAgLTE2MiwyNCArMTU0LDM1IEBAIHN0
cnVjdCBQYWdlUHJveHlOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgewogICAgICAgICByZXR1
cm4gcmVzdWx0UmVjdDsKICAgICB9CiAKLSAgICBRUXVpY2tXZWJQYWdlUHJpdmF0ZSogbV9wYWdl
UHJpdmF0ZTsKKyAgICBSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7Cisg
ICAgZmxvYXQgbV9zY2FsZTsKIH07CiAKIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBh
aW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikKIHsKLSAgICBp
ZiAoIShmbGFncygpICYgSXRlbUhhc0NvbnRlbnRzKSkgewotICAgICAgICBpZiAob2xkTm9kZSkK
LSAgICAgICAgICAgIGRlbGV0ZSBvbGROb2RlOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Cisg
ICAgaWYgKCFkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpCisgICAgICAgIHJldHVybiBv
bGROb2RlOworCisgICAgTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkgPSBk
LT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUhvc3RQcm94eSgpOworICAg
IFdlYkxheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlciA9IGxheWVyVHJlZUhvc3RQcm94eS0+bGF5
ZXJUcmVlUmVuZGVyZXIoKTsKIAotICAgIFBhZ2VQcm94eU5vZGUqIHByb3h5Tm9kZSA9IHN0YXRp
Y19jYXN0PFBhZ2VQcm94eU5vZGUqPihvbGROb2RlKTsKLSAgICBpZiAoIXByb3h5Tm9kZSkgewot
ICAgICAgICBwcm94eU5vZGUgPSBuZXcgUGFnZVByb3h5Tm9kZShkKTsKLSAgICAgICAgZC0+bV9w
YWludE5vZGUgPSBwcm94eU5vZGU7CisgICAgUGFnZVByb3h5Tm9kZSogbm9kZSA9IHN0YXRpY19j
YXN0PFBhZ2VQcm94eU5vZGUqPihvbGROb2RlKTsKKworICAgIGlmIChub2RlICYmIG5vZGUtPmxh
eWVyVHJlZVJlbmRlcmVyKCkgIT0gcmVuZGVyZXIpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0
aGF0IExheWVyVHJlZUhvc3RQcm94eSB3YXMgZGVsZXRlZCBhbmQgcmVjcmVhdGVkIHdoaWxlIG9s
ZCBwYWludCBub2RlIHN1cnZpdmVkLgorICAgICAgICAvLyBUaGlzIGNvdWxkIGhhcHBlbiBpZiB3
ZWIgcHJvY2VzcyBoYXZlIGNyYXNoZWQuIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHJlY3JlYXRl
IHBhaW50IG5vZGUuCisgICAgICAgIGRlbGV0ZSBub2RlOworICAgICAgICBub2RlID0gMDsKICAg
ICB9CiAKLSAgICByZXR1cm4gcHJveHlOb2RlOworICAgIHJlbmRlcmVyLT5zeW5jUmVtb3RlQ29u
dGVudCgpOworCisgICAgaWYgKCFub2RlKQorICAgICAgICBub2RlID0gbmV3IFBhZ2VQcm94eU5v
ZGUocmVuZGVyZXIpOworCisgICAgbm9kZS0+c2V0U2NhbGUoZC0+Y29udGVudHNTY2FsZSk7CisK
KyAgICByZXR1cm4gbm9kZTsKIH0KIAogUXRXZWJQYWdlRXZlbnRIYW5kbGVyKiBRUXVpY2tXZWJQ
YWdlOjpldmVudEhhbmRsZXIoKSBjb25zdApAQCAtMjMzLDE4ICsyMzYsOCBAQCB2b2lkIFFRdWlj
a1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVTaXplKCkKICAgICB2aWV3cG9ydEl0ZW0tPnVwZGF0ZUNv
bnRlbnRzU2l6ZShzY2FsZWRTaXplKTsKIH0KIAotdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6
cmVzZXRQYWludE5vZGUoKQotewotICAgIG1fcGFpbnROb2RlID0gMDsKLSAgICBEcmF3aW5nQXJl
YVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBp
ZiAoZHJhd2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpKQotICAg
ICAgICBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCktPnB1cmdlR0xSZXNvdXJjZXMo
KTsKLX0KLQogUVF1aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tXZWJQYWdlUHJpdmF0ZSgpCiB7
Ci0gICAgaWYgKG1fcGFpbnROb2RlKQotICAgICAgICBzdGF0aWNfY2FzdDxQYWdlUHJveHlOb2Rl
Kj4obV9wYWludE5vZGUpLT5tX3BhZ2VQcml2YXRlID0gMDsKIH0KIAogI2luY2x1ZGUgIm1vY19x
cXVpY2t3ZWJwYWdlX3AuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzYw
YTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJl
ZUhvc3RQcm94eS5jcHAKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVu
dENvZGVycy5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlICJXZWJM
YXllclRyZWVSZW5kZXJlci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUg
IldlYlByb2Nlc3NQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK0xheWVyVHJlZUhvc3RQcm94eTo6TGF5ZXJUcmVlSG9zdFByb3h5KERy
YXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCisgICAgOiBtX2RyYXdpbmdBcmVhUHJv
eHkoZHJhd2luZ0FyZWFQcm94eSkKKyAgICAsIG1fcmVuZGVyZXIoYWRvcHRSZWYobmV3IFdlYkxh
eWVyVHJlZVJlbmRlcmVyKHRoaXMpKSkKK3sKK30KKworTGF5ZXJUcmVlSG9zdFByb3h5Ojp+TGF5
ZXJUcmVlSG9zdFByb3h5KCkKK3sKKyAgICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3JlbmRlcmVyLT5zeW5jUmVtb3RlQ29u
dGVudCgpOworICAgIG1fcmVuZGVyZXItPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KG1hdHJpeCwg
b3BhY2l0eSwgcmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvR3Jh
cGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgY29udGV4
dCkKK3sKKyAgICBtX3JlbmRlcmVyLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQoKQoreworICAgIG1f
ZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQoreworICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CisgICAgdXBkYXRl
Vmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JM
YXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRl
cmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0
ZUluZm8udXBkYXRlU2NhbGVGYWN0b3IpKTsKKyAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJ
RCwgdGlsZUlELCB1cGRhdGVJbmZvKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVw
ZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpV
cGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIEFTU0VSVCh1cGRhdGVJbmZvLnVwZGF0ZVJl
Y3RzLnNpemUoKSA9PSAxKTsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB1cGRhdGVJbmZvLnVw
ZGF0ZVJlY3RzLmZpcnN0KCk7CisgICAgSW50UmVjdCB0YXJnZXRSZWN0ID0gdXBkYXRlSW5mby51
cGRhdGVSZWN0Qm91bmRzOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlKHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKTsKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSwgbV9yZW5k
ZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRt
YXApKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihp
bnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJM
YXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwg
dGlsZUlEKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVDb21wb3NpdGlu
Z0xheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5
ZXJJRCBpZCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJl
cjo6c2V0Um9vdExheWVySUQsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKGNvbnN0IFdlYkxheWVy
SW5mbyYgaW5mbykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5k
ZXJlcjo6c3luY0xheWVyUGFyYW1ldGVycywgbV9yZW5kZXJlci5nZXQoKSwgaW5mbykpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoKQoreworICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywg
bV9yZW5kZXJlci5nZXQoKSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRl
RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIGNvbnN0IFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZSwgbV9yZW5kZXJl
ci5nZXQoKSwga2V5LCBiaXRtYXApKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRl
c3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKK3sKKyAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUltYWdlLCBtX3JlbmRl
cmVyLmdldCgpLCBrZXkpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2li
bGVDb250ZW50c1JlY3RGb3JQYW5uaW5nKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNv
bnRlbnRzUmVjdEZvclBhbm5pbmcocmVjdCwgdHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0Fy
ZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhjb25zdCBJbnRSZWN0JiByZWN0LCBm
bG9hdCBzY2FsZSkKK3sKKyAgICBtX3JlbmRlcmVyLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9y
U2NhbGluZyhyZWN0LCBzY2FsZSk7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRz
UmVjdEZvclNjYWxpbmcocmVjdCwgc2NhbGUpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cGFnZUlEKCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVuZGVyTmV4dEZyYW1l
KCkKK3sKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVBy
b3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1
cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5nU3RvcmVz
KCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKK30KKyNlbmRp
ZiAvLyBVU0UoVUlfU0lERV9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuaAppbmRleCBiM2Q1MTJmLi5mNmMzMWQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0yNSw4ICsyNSw2
IEBACiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94
eS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CkBAIC0zNywxNCArMzUsMTUgQEAKICNpbmNsdWRl
IDx3dGYvRnVuY3Rpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKK2NsYXNzIFFT
R05vZGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBMYXllckJhY2tpbmdTdG9yZTsK
IGNsYXNzIFdlYkxheWVySW5mbzsKK2NsYXNzIFdlYkxheWVyVHJlZVJlbmRlcmVyOwogY2xhc3Mg
V2ViTGF5ZXJVcGRhdGVJbmZvOwogCi1jbGFzcyBMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitjbGFzcyBMYXllclRyZWVIb3N0UHJveHkg
ewogcHVibGljOgogICAgIExheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5Kik7CiAg
ICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdFByb3h5KCk7CkBAIC01MiwxMyArNTEsMTEgQEAgcHVi
bGljOgogICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEKTsKICAgICB2
b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOwogICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKik7Ci0gICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4
dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBjbGlwKTsKICAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQo
QmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CiAgICAgdm9pZCBwdXJnZUdM
UmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRl
bnRzUmVjdEZvclBhbm5pbmcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmKTsKLSAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAgdm9pZCBz
d2FwQ29udGVudEJ1ZmZlcnMoKTsKICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CiAgICAgdm9p
ZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktp
dDo6VXBkYXRlSW5mbyYpOwogICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKQEAgLTY3LDU5ICs2NCwx
NSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50
NjRfdCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3Jl
SVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqKTsKICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CisgICAgdm9pZCByZW5kZXJOZXh0
RnJhbWUoKTsKKyAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIFdlYkxheWVyVHJl
ZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIu
Z2V0KCk7IH0KIAogcHJvdGVjdGVkOgotICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcj4gY3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBpZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJM
YXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQoaWQpOyB9Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KLQotICAgIC8v
IFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudC4KLSAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiwgZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVp
cmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZv
aWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KLQotICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJh
d2luZ0FyZWFQcm94eTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2li
bGVDb250ZW50c1JlY3Q7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwotCi0gICAgVmVjdG9y
PEZ1bmN0aW9uPHZvaWQoKT4gPiBtX3JlbmRlclF1ZXVlOwogICAgIHZvaWQgZGlzcGF0Y2hVcGRh
dGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQot
ICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7Ci0gICAg
UGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gZ2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQp
OwotICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmU+ID4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7Ci0gICAgSGFzaFNldDxSZWZQ
dHI8TGF5ZXJCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
OwotI2VuZGlmCi0KLSAgICB2b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgpOwotICAgIHZvaWQg
c3luY2hyb25pemVWaWV3cG9ydCgpOwotICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7
Ci0gICAgdm9pZCBzZXRSb290TGF5ZXJJRChXZWJMYXllcklEKTsKLSAgICB2b2lkIHN5bmNMYXll
clBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJik7Ci0gICAgdm9pZCBjcmVhdGVUaWxlKFdl
YkxheWVySUQsIGludCwgZmxvYXQgc2NhbGUpOwotICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXll
cklELCBpbnQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+KTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIFBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPik7Ci0gICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50NjRfdCk7Ci0gICAg
dm9pZCBhc3NpZ25JbWFnZVRvTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGludDY0X3Qg
aW1hZ2VJRCk7Ci0gICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOwotICAgIHZvaWQgZW5zdXJl
Um9vdExheWVyKCk7Ci0gICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsKLSAgICB2b2lk
IHN3YXBCdWZmZXJzKCk7Ci0gICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwotCi0gICAgT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwotICAgIFZlY3RvcjxXZWJMYXll
cklEPiBtX2xheWVyc1RvRGVsZXRlOwotCi0gICAgTGF5ZXJNYXAgbV9sYXllcnM7Ci0gICAgV2Vi
TGF5ZXJJRCBtX3Jvb3RMYXllcklEOwotICAgIGludCBtX2lkOworICAgIERyYXdpbmdBcmVhUHJv
eHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKKyAgICBSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+
IG1fcmVuZGVyZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkxheWVyVHJlZVJlbmRlcmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mMmMwNDk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkxheWVyVHJlZVJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDQxMCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcp
CisKKyNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5kZXJlci5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJMYXllckJhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIK
KyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgorI2luY2x1ZGUgIlVwZGF0
ZUluZm8uaCIKKyNpbmNsdWRlIDxPcGVuR0xTaGltcy5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNz
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
dGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgdm9pZCBjYWxsKFBhc3NSZWZQdHI8VD4gb2JqZWN0VG9HdWFyZCwgY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgeworICAgICAgICBNYWluVGhyZWFk
R3VhcmRlZEludm9rZXI8VD4qIGludm9rZXIgPSBuZXcgTWFpblRocmVhZEd1YXJkZWRJbnZva2Vy
PFQ+KG9iamVjdFRvR3VhcmQsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChp
bnZva2UsIGludm9rZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNYWluVGhyZWFkR3VhcmRl
ZEludm9rZXIoUGFzc1JlZlB0cjxUPiBvYmplY3QsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIG5l
d0Z1bmN0aW9uKQorICAgICAgICA6IG9iamVjdFRvR3VhcmQob2JqZWN0KQorICAgICAgICAsIGZ1
bmN0aW9uKG5ld0Z1bmN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8VD4gb2JqZWN0
VG9HdWFyZDsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uOworICAgIHN0YXRpYyB2b2lk
IGludm9rZSh2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgTWFpblRocmVhZEd1YXJkZWRJbnZv
a2VyPFQ+KiBpbnZva2VyID0gc3RhdGljX2Nhc3Q8TWFpblRocmVhZEd1YXJkZWRJbnZva2VyPFQ+
Kj4oZGF0YSk7CisgICAgICAgIGludm9rZXItPmZ1bmN0aW9uKCk7CisgICAgICAgIGRlbGV0ZSBp
bnZva2VyOworICAgIH0KK307CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNhbGxPbk1h
aW5UcmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBpZiAoaXNN
YWluVGhyZWFkKCkpCisgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgZWxzZQorICAgICAgICBNYWlu
VGhyZWFkR3VhcmRlZEludm9rZXI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+OjpjYWxsKHRoaXMsIGZ1
bmN0aW9uKTsKK30KKworV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OldlYkxheWVyVHJlZVJlbmRlcmVy
KExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgIDogbV9sYXllclRy
ZWVIb3N0UHJveHkobGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICwgbV9yb290TGF5ZXJJRCgwKQor
eworfQorCitXZWJMYXllclRyZWVSZW5kZXJlcjo6fldlYkxheWVyVHJlZVJlbmRlcmVyKCkKK3sK
K30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3Jl
YXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xh
eWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIFRleHR1cmVN
YXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihuZXdMYXllcik7CisgICAg
bGF5ZXItPnNldFNob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXllcihmYWxzZSk7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJl
cjo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBp
ZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1h
cHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworICAgIEFTU0VSVChtX3Rl
eHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xN
b2RlKTsKKworICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgR3JhcGhpY3NMYXllciogY3Vy
cmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOworICAgIGlmICghY3VycmVudFJvb3RMYXllcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4
dHVyZU1hcHBlckxheWVyKGN1cnJlbnRSb290TGF5ZXIpOworCisgICAgaWYgKCFsYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbGF5ZXItPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFw
cGVyLmdldCgpKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICBt
X3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVn
aW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNsaXBSZWN0KTsKKworICAgIGlmIChjdXJy
ZW50Um9vdExheWVyLT5vcGFjaXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50
cmFuc2Zvcm0oKSAhPSBtYXRyaXgpIHsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1h
dHJpeCk7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpOworICAgIH0KKworICAgIGxheWVyLT5wYWludCgpOworICAgIG1fdGV4
dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmco
KTsKKworICAgIHN5bmNBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnN5bmNBbmltYXRpb25zKCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0g
dG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOworICAgIEFTU0VSVChsYXllcik7CisK
KyAgICBsYXllci0+c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSgpOworICAgIGlmIChsYXllci0+
ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQsIHRo
aXMpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0dyYXBoaWNzQ29u
dGV4dChRUGFpbnRlciogcGFpbnRlcikKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAg
ICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCk7CisgICAgQVNT
RVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6
OlNvZnR3YXJlTW9kZSk7CisgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICBUZXh0dXJlTWFw
cGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOworCisg
ICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0IGdy
YXBoaWNzQ29udGV4dChwYWludGVyKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNz
Q29udGV4dCgmZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFp
bnRpbmcoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOworICAgIGxheWVy
LT5wYWludCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKyAgICBtX3Rl
eHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgwKTsKK30KKwordm9pZCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvclNjYWxpbmcoY29uc3QgSW50UmVj
dCYgcmVjdCwgZmxvYXQgc2NhbGUpCit7CisgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVj
dDsKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKK30KKwordm9pZCBXZWJMYXllclRyZWVS
ZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQoKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94
eSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisK
K3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2Vi
TGF5ZXJJbmZvJiBsYXllckluZm8pCit7CisgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5p
ZDsKKyAgICBlbnN1cmVMYXllcihpZCk7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9s
YXllcnMuZmluZChpZCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOwor
ICAgIGJvb2wgbmVlZHNUb1VwZGF0ZUltYWdlVGlsZXMgPSBsYXllckluZm8uaW1hZ2VJc1VwZGF0
ZWQgfHwgKGxheWVySW5mby5jb250ZW50c1JlY3QgIT0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpICYm
IGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKworICAgIGxheWVyLT5zZXROYW1lKGxh
eWVySW5mby5uYW1lKTsKKworICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5
SUQobGF5ZXJJbmZvLnJlcGxpY2EpKTsKKyAgICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJ
RChsYXllckluZm8ubWFzaykpOworCisgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5w
b3MpOworICAgIGxheWVyLT5zZXRTaXplKGxheWVySW5mby5zaXplKTsKKyAgICBsYXllci0+c2V0
VHJhbnNmb3JtKGxheWVySW5mby50cmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2lu
dChsYXllckluZm8uYW5jaG9yUG9pbnQpOworICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9y
bShsYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRCYWNrZmFjZVZp
c2liaWxpdHkobGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7CisgICAgbGF5ZXItPnNldENvbnRl
bnRzT3BhcXVlKGxheWVySW5mby5jb250ZW50c09wYXF1ZSk7CisgICAgbGF5ZXItPnNldENvbnRl
bnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKKyAgICBsYXllci0+c2V0RHJhd3NDb250
ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOworCisgICAgaWYgKG5lZWRzVG9VcGRhdGVJbWFn
ZVRpbGVzKQorICAgICAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFn
ZUJhY2tpbmdTdG9yZUlEKTsKKworICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xp
cC4KKyAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNSb290TGF5ZXIgPyBm
YWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKKyAgICBsYXllci0+c2V0T3BhY2l0eShs
YXllckluZm8ub3BhY2l0eSk7CisgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKGxheWVySW5mby5w
cmVzZXJ2ZXMzRCk7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbmZvLmNoaWxkcmVuLnNpemUoKTsgKytpKSB7
CisgICAgICAgIFdlYkxheWVySUQgY2hpbGRJRCA9IGxheWVySW5mby5jaGlsZHJlbltpXTsKKyAg
ICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQoY2hpbGRJRCk7CisgICAgICAg
IGlmICghY2hpbGQpIHsKKyAgICAgICAgICAgIGNoaWxkID0gY3JlYXRlTGF5ZXIoY2hpbGRJRCku
bGVha1B0cigpOworICAgICAgICAgICAgbV9sYXllcnMuYWRkKGNoaWxkSUQsIGNoaWxkKTsKKyAg
ICAgICAgfQorICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworICAgIH0KKyAgICBsYXll
ci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
YXllckluZm8uYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBXZWJLaXQ6
OldlYkxheWVyQW5pbWF0aW9uIGFuaW0gPSBsYXllckluZm8uYW5pbWF0aW9uc1tpXTsKKworICAg
ICAgICBzd2l0Y2ggKGFuaW0ub3BlcmF0aW9uKSB7CisgICAgICAgIGNhc2UgV2ViS2l0OjpXZWJM
YXllckFuaW1hdGlvbjo6QWRkQW5pbWF0aW9uOiB7CisgICAgICAgICAgICBjb25zdCBJbnRTaXpl
IGJveFNpemUgPSBhbmltLmJveFNpemU7CisgICAgICAgICAgICBsYXllci0+YWRkQW5pbWF0aW9u
KGFuaW0ua2V5ZnJhbWVMaXN0LCBib3hTaXplLCBhbmltLmFuaW1hdGlvbi5nZXQoKSwgYW5pbS5u
YW1lLCBhbmltLnN0YXJ0VGltZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFdlYktpdDo6V2ViTGF5ZXJBbmltYXRpb246OlJlbW92ZUFuaW1hdGlvbjoKKyAg
ICAgICAgICAgIGxheWVyLT5yZW1vdmVBbmltYXRpb24oYW5pbS5uYW1lKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdlYktpdDo6V2ViTGF5ZXJBbmltYXRpb246OlBhdXNlQW5p
bWF0aW9uOgorICAgICAgICAgICAgZG91YmxlIG9mZnNldCA9IFdURjo6Y3VycmVudFRpbWUoKSAt
IGFuaW0uc3RhcnRUaW1lOworICAgICAgICAgICAgbGF5ZXItPnBhdXNlQW5pbWF0aW9uKGFuaW0u
bmFtZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKGxheWVySW5mby5pc1Jvb3RMYXllciAmJiBtX3Jvb3RMYXllcklEICE9IGlkKQorICAg
ICAgICBzZXRSb290TGF5ZXJJRChpZCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OmRlbGV0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBsYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fbGF5ZXJzLnJlbW92
ZShsYXllcklEKTsKKyAgICBkZWxldGUgbGF5ZXI7Cit9CisKKwordm9pZCBXZWJMYXllclRyZWVS
ZW5kZXJlcjo6ZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICAvLyBXZSBoYXZlIHRv
IGxlYWsgdGhlIG5ldyBsYXllcidzIHBvaW50ZXIgYW5kIG1hbmFnZSBpdCBvdXJzZWx2ZXMsCisg
ICAgLy8gYmVjYXVzZSBPd25QdHIgaXMgbm90IGNvcHlhYmxlLgorICAgIGlmIChtX2xheWVycy5m
aW5kKGlkKSA9PSBtX2xheWVycy5lbmQoKSkKKyAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBjcmVh
dGVMYXllcihpZCkubGVha1B0cigpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
c2V0Um9vdExheWVySUQoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIGlmIChsYXllcklEID09
IG1fcm9vdExheWVySUQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVySUQgPSBs
YXllcklEOworCisgICAgbV9yb290TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICBp
ZiAoIWxheWVySUQpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChsYXllcik7Cit9CisKK1Bhc3NSZWZQdHI8TGF5
ZXJCYWNraW5nU3RvcmU+IFdlYkxheWVyVHJlZVJlbmRlcmVyOjpnZXRCYWNraW5nU3RvcmUoV2Vi
TGF5ZXJJRCBpZCkKK3sKKyAgICBlbnN1cmVMYXllcihpZCk7CisgICAgVGV4dHVyZU1hcHBlckxh
eWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGxheWVyQnlJRChpZCkpOworICAgIFJl
ZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gc3RhdGljX2Nhc3Q8TGF5ZXJC
YWNraW5nU3RvcmUqPihsYXllci0+YmFja2luZ1N0b3JlKCkuZ2V0KCkpOworICAgIGlmICghYmFj
a2luZ1N0b3JlKSB7CisgICAgICAgIGJhY2tpbmdTdG9yZSA9IExheWVyQmFja2luZ1N0b3JlOjpj
cmVhdGUoKTsKKyAgICAgICAgbGF5ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0
KCkpOworICAgIH0KKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gYmFja2lu
Z1N0b3JlOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlKFdlYkxh
eWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAgZ2V0QmFja2lu
Z1N0b3JlKGxheWVySUQpLT5jcmVhdGVUaWxlKHRpbGVJRCwgc2NhbGUpOworfQorCit2b2lkIFdl
YkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRp
bGVJRCkKK3sKKyAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPnJlbW92ZVRpbGUodGlsZUlE
KTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShXZWJMYXllcklE
IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFw
KQoreworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7Cisg
ICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5nU3Rv
cmUobGF5ZXJJRCk7CisgICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwgc291cmNl
UmVjdCwgdGFyZ2V0UmVjdCwgYml0bWFwLmdldCgpKTsKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRo
UGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IHdlYWtCaXRtYXApCit7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0
bWFwID0gd2Vha0JpdG1hcDsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0
ZSgpOworICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdl
dCgpLCBiaXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCksIEJpdG1hcFRleHR1cmU6OkJHUkFGb3Jt
YXQpOworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNraW5n
U3RvcmUpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UoaW50
NjRfdCBpbWFnZUlEKQoreworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShp
bWFnZUlEKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQ2NF90IGltYWdlSUQpCit7CisgICAgSGFzaE1h
cDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3Ig
aXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOworICAgIEFTU0VS
VChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5lbmQoKSk7CisgICAgbGF5ZXItPnNl
dENvbnRlbnRzVG9NZWRpYShpdC0+c2Vjb25kLmdldCgpKTsKK30KKwordm9pZCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6c3dhcEJ1ZmZlcnMoKQoreworICAgIEhhc2hTZXQ8UmVmUHRyPExheWVyQmFj
a2luZ1N0b3JlPiA+OjppdGVyYXRvciBlbmQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1
ZmZlcnMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4g
Pjo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+c3dhcEJ1ZmZlcnMobV90ZXh0dXJl
TWFwcGVyLmdldCgpKTsKKworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5j
bGVhcigpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdl
cygpCit7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgp
KTsKKyAgICBzd2FwQnVmZmVycygpOworCisgICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMgc3RhdGUg
aXMgb24gaXRzIHdheSBmb3IgdGhlIHNjcmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8gcmVu
ZGVyIHRoZSBuZXh0IG9uZS4KKyAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJldlYkxheWVyVHJl
ZVJlbmRlcmVyOjpyZW5kZXJOZXh0RnJhbWUsIHRoaXMpKTsKK30KKwordm9pZCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0
UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5yZW5kZXJOZXh0RnJhbWUoKTsK
K30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlUm9vdExheWVyKCkKK3sKKyAg
ICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fdGV4dHVyZU1h
cHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRl
eHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworCisgICAgbV9yb290TGF5ZXIgPSBjcmVhdGVMYXll
cihJbnZhbGlkV2ViTGF5ZXJJRCk7CisgICAgbV9yb290TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMo
ZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1f
cm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMCwgMCkpOworCisgICAg
Ly8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIHplcm8gc2l6ZSwgb3IgaXQgd291bGQg
YmUgb3B0aW1pemVkIG91dC4KKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShGbG9hdFNpemUoMS4w
LCAxLjApKTsKKyAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNl
dFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKK30KKwordm9pZCBXZWJMYXll
clRyZWVSZW5kZXJlcjo6c3luY1JlbW90ZUNvbnRlbnQoKQoreworICAgIC8vIFdlIGVucXVldWUg
bWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBh
biBhY3RpdmUgR0wgY29udGV4dC4KKyAgICBlbnN1cmVSb290TGF5ZXIoKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9yZW5kZXJRdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9y
ZW5kZXJRdWV1ZVtpXSgpOworCisgICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOworfQorCit2b2lk
IFdlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKCkKK3sKKyAgICBUZXh0dXJl
TWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOwor
CisgICAgaWYgKGxheWVyKQorICAgICAgICBsYXllci0+Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJz
aXZlKCk7CisKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5jbGVhcigpOworICAgIG1f
dGV4dHVyZU1hcHBlci5jbGVhcigpOworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVm
ZmVycy5jbGVhcigpOworCisgICAgY2FsbE9uTWFpblRocmVhZChiaW5kKCZXZWJMYXllclRyZWVS
ZW5kZXJlcjo6cHVyZ2VCYWNraW5nU3RvcmVzLCB0aGlzKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVl
SG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+cHVyZ2VCYWNraW5nU3Rv
cmVzKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCgpCit7CisgICAg
bV9sYXllclRyZWVIb3N0UHJveHkgPSAwOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVy
OjphcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAg
bV9yZW5kZXJRdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42Yzc4ODY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgV2ViTGF5ZXJUcmVlUmVuZGVyZXJfaAorI2RlZmlu
ZSBXZWJMYXllclRyZWVSZW5kZXJlcl9oCisKKyNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykK
KworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiV2ViTGF5
ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW5M
b29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
UHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTGF5ZXJCYWNraW5n
U3RvcmU7CitjbGFzcyBMYXllclRyZWVIb3N0UHJveHk7CitjbGFzcyBXZWJMYXllckluZm87Citj
bGFzcyBXZWJMYXllclVwZGF0ZUluZm87CisKK2NsYXNzIFdlYkxheWVyVHJlZVJlbmRlcmVyIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYkxheWVyVHJlZVJlbmRlcmVyPiwgcHVibGlj
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIFdlYkxheWVyVHJl
ZVJlbmRlcmVyKExheWVyVHJlZUhvc3RQcm94eSopOworICAgIHZpcnR1YWwgfldlYkxheWVyVHJl
ZVJlbmRlcmVyKCk7CisgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CisgICAgdm9pZCBwYWlu
dFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBhaW50VG9HcmFw
aGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CisgICAg
dm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVj
dEZvclNjYWxpbmcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0KTsKKworICAgIHZvaWQg
ZGV0YWNoKCk7CisgICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYp
OworICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKKworICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2Vi
TGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290TGF5ZXJJRChXZWJMYXllcklEKTsKKyAgICB2b2lk
IHN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdm9pZCBjcmVh
dGVUaWxlKFdlYkxheWVySUQsIGludCwgZmxvYXQgc2NhbGUpOworICAgIHZvaWQgcmVtb3ZlVGls
ZShXZWJMYXllcklELCBpbnQpOworICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKKyAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7Cisg
ICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4p
OworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworCitwcml2YXRlOgorICAgIFBhc3NP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CisK
KyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBpZCkgeyBy
ZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQoaWQpOyB9
CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290
TGF5ZXIuZ2V0KCk7IH0KKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3Rh
cnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
c2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2
b2lkIGNhbGxPbk1haW5UcmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IExheWVyTWFw
OworICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OworICAgIGZsb2F0
IG1fY29udGVudHNTY2FsZTsKKworICAgIC8vIFJlbmRlciBxdWV1ZSBjYW4gYmUgYWNjZXNzZWQg
b255IGZyb20gbWFpbiB0aHJlYWQgb3IgdXBkYXRlUGFpbnROb2RlIGNhbGwgc3RhY2shCisgICAg
VmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBtX3JlbmRlclF1ZXVlOworCisjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSKQorICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVN
YXBwZXI7CisgICAgUGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gZ2V0QmFja2luZ1N0b3Jl
KFdlYkxheWVySUQpOworICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJCYWNraW5nU3RvcmU+ID4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7CisgICAg
SGFzaFNldDxSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBl
bmRpbmdCdWZmZXJzOworI2VuZGlmCisKKyAgICB2b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgp
OworICAgIHZvaWQgc3luY2hyb25pemVWaWV3cG9ydCgpOworICAgIHZvaWQgYXNzaWduSW1hZ2VU
b0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdlSUQpOworICAgIHZv
aWQgZW5zdXJlUm9vdExheWVyKCk7CisgICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsK
KyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOworICAg
IHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsK
KworICAgIExheWVyVHJlZUhvc3RQcm94eSogbV9sYXllclRyZWVIb3N0UHJveHk7CisgICAgT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJM
YXllcklEPiBtX2xheWVyc1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAg
V2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOworfTsKKworfTsKKworI2VuZGlmIC8vIFVTRShVSV9T
SURFX0NPTVBPU0lUSU5HKQorCisjZW5kaWYgLy8gV2ViTGF5ZXJUcmVlUmVuZGVyZXJfaAorCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJv
eHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5
UXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWZiOTk1Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw0MTcgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0KLSNp
bmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIkxheWVyQmFj
a2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCi0jaW5jbHVk
ZSAiTWFpblRocmVhZC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1ZGUgIlNoYXJl
YWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgi
Ci0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlIDxPcGVuR0xTaGlt
cy5oPgotI2luY2x1ZGUgPFFEYXRlVGltZT4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1QYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IExheWVyVHJl
ZUhvc3RQcm94eTo6Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQotewotICAgIEdyYXBo
aWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMp
OwotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihu
ZXdMYXllcik7Ci0gICAgbGF5ZXItPnNldFNob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXll
cihmYWxzZSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKLX0KLQotTGF5ZXJUcmVl
SG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0Fy
ZWFQcm94eSkKLSAgICA6IG1fZHJhd2luZ0FyZWFQcm94eShkcmF3aW5nQXJlYVByb3h5KQotICAg
ICwgbV9yb290TGF5ZXJJRCgwKQotewotfQotCi1MYXllclRyZWVIb3N0UHJveHk6On5MYXllclRy
ZWVIb3N0UHJveHkoKQotewotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJlZW50
cmFudC4KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBG
bG9hdFJlY3QmIGNsaXBSZWN0KQotewotICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAg
ICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6
T3BlbkdMTW9kZSk7Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9k
ZSgpID09IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwotCi0gICAgc3luY1JlbW90ZUNvbnRl
bnQoKTsKLSAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7
Ci0gICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0
dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RM
YXllcik7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+
c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotICAgIG1fdGV4dHVyZU1h
cHBlci0+YmVnaW5QYWludGluZygpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uo
MCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgY2xpcFJlY3QpOwotCi0gICAgaWYgKGN1cnJlbnRSb290TGF5ZXItPm9wYWNpdHkoKSAhPSBv
cGFjaXR5IHx8IGN1cnJlbnRSb290TGF5ZXItPnRyYW5zZm9ybSgpICE9IG1hdHJpeCkgewotICAg
ICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgICAgICBjdXJy
ZW50Um9vdExheWVyLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKLSAgICAgICAgY3VycmVudFJvb3RM
YXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgfQotCi0g
ICAgbGF5ZXItPnBhaW50KCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7Ci0gICAg
bV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwotCi0gICAgc3luY0FuaW1hdGlvbnMoKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNBbmltYXRpb25zKCkKLXsKLSAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVy
KCkpOwotICAgIEFTU0VSVChsYXllcik7Ci0KLSAgICBsYXllci0+c3luY0FuaW1hdGlvbnNSZWN1
cnNpdmVseSgpOwotICAgIGlmIChsYXllci0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0Fu
aW1hdGlvbnMoKSkKLSAgICAgICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoUVBhaW50ZXIqIHBhaW50ZXIpCi17
Ci0gICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRl
eHR1cmVNYXBwZXI6OmNyZWF0ZSgpOwotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2Vs
ZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpTb2Z0d2FyZU1vZGUpOwotICAgIHN5bmNS
ZW1vdGVDb250ZW50KCk7Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVy
ZU1hcHBlckxheWVyKHJvb3RMYXllcigpKTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQocGFpbnRlcik7Ci0g
ICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoJmdyYXBoaWNzQ29udGV4dCk7
Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7Ci0gICAgbV90ZXh0dXJlTWFw
cGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICBsYXllci0+cGFpbnQoKTsKLSAgICBtX3RleHR1cmVN
YXBwZXItPmVuZFBhaW50aW5nKCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0Nv
bnRleHQoMCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgp
Ci17Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOwotfQotCi12b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6c3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJMYXllcklu
Zm8mIGxheWVySW5mbykKLXsKLSAgICBXZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlkOwotICAg
IGVuc3VyZUxheWVyKGlkKTsKLSAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5m
aW5kKGlkKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7Ci0gICAgYm9v
bCBuZWVkc1RvVXBkYXRlSW1hZ2VUaWxlcyA9IGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCB8fCAo
bGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCAhPSBsYXllci0+Y29udGVudHNSZWN0KCkgJiYgbGF5ZXJJ
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotCi0gICAgbGF5ZXItPnNldE5hbWUobGF5ZXJJbmZv
Lm5hbWUpOwotCi0gICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVyQnlJRChsYXll
ckluZm8ucmVwbGljYSkpOwotICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIobGF5ZXJCeUlEKGxheWVy
SW5mby5tYXNrKSk7Ci0KLSAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7Ci0g
ICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOwotICAgIGxheWVyLT5zZXRUcmFuc2Zv
cm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7Ci0gICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVy
SW5mby5hbmNob3JQb2ludCk7Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVy
SW5mby5jaGlsZHJlblRyYW5zZm9ybSk7Ci0gICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0
eShsYXllckluZm8uYmFja2ZhY2VWaXNpYmxlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNPcGFx
dWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNSZWN0
KGxheWVySW5mby5jb250ZW50c1JlY3QpOwotICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5
ZXJJbmZvLmRyYXdzQ29udGVudCk7Ci0KLSAgICBpZiAobmVlZHNUb1VwZGF0ZUltYWdlVGlsZXMp
Ci0gICAgICAgIGFzc2lnbkltYWdlVG9MYXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlQmFja2lu
Z1N0b3JlSUQpOwotCi0gICAgLy8gTmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgotICAg
IGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKGxheWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDog
bGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMpOwotICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5m
by5vcGFjaXR5KTsKLSAgICBsYXllci0+c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZl
czNEKTsKLSAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsYXllckluZm8uY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgV2ViTGF5ZXJJRCBjaGlsZElEID0gbGF5ZXJJbmZvLmNoaWxkcmVuW2ldOwotICAgICAgICBH
cmFwaGljc0xheWVyKiBjaGlsZCA9IGxheWVyQnlJRChjaGlsZElEKTsKLSAgICAgICAgaWYgKCFj
aGlsZCkgewotICAgICAgICAgICAgY2hpbGQgPSBjcmVhdGVMYXllcihjaGlsZElEKS5sZWFrUHRy
KCk7Ci0gICAgICAgICAgICBtX2xheWVycy5hZGQoY2hpbGRJRCwgY2hpbGQpOwotICAgICAgICB9
Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7Ci0gICAgfQotICAgIGxheWVyLT5zZXRD
aGlsZHJlbihjaGlsZHJlbik7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW5m
by5hbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdlYktpdDo6V2ViTGF5
ZXJBbmltYXRpb24gYW5pbSA9IGxheWVySW5mby5hbmltYXRpb25zW2ldOwotCi0gICAgICAgIHN3
aXRjaCAoYW5pbS5vcGVyYXRpb24pIHsKLSAgICAgICAgY2FzZSBXZWJLaXQ6OldlYkxheWVyQW5p
bWF0aW9uOjpBZGRBbmltYXRpb246IHsKLSAgICAgICAgICAgIGNvbnN0IEludFNpemUgYm94U2l6
ZSA9IGFuaW0uYm94U2l6ZTsKLSAgICAgICAgICAgIGxheWVyLT5hZGRBbmltYXRpb24oYW5pbS5r
ZXlmcmFtZUxpc3QsIGJveFNpemUsIGFuaW0uYW5pbWF0aW9uLmdldCgpLCBhbmltLm5hbWUsIGFu
aW0uc3RhcnRUaW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgV2ViS2l0OjpXZWJMYXllckFuaW1hdGlvbjo6UmVtb3ZlQW5pbWF0aW9uOgotICAgICAgICAg
ICAgbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihhbmltLm5hbWUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV2ViS2l0OjpXZWJMYXllckFuaW1hdGlvbjo6UGF1c2VBbmltYXRpb246
Ci0gICAgICAgICAgICBkb3VibGUgb2Zmc2V0ID0gV1RGOjpjdXJyZW50VGltZSgpIC0gYW5pbS5z
dGFydFRpbWU7Ci0gICAgICAgICAgICBsYXllci0+cGF1c2VBbmltYXRpb24oYW5pbS5uYW1lLCBv
ZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
bGF5ZXJJbmZvLmlzUm9vdExheWVyICYmIG1fcm9vdExheWVySUQgIT0gaWQpCi0gICAgICAgIHNl
dFJvb3RMYXllcklEKGlkKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUxh
eWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxh
eWVyQnlJRChsYXllcklEKTsKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBsYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fbGF5ZXJzLnJlbW92ZShsYXllcklE
KTsKLSAgICBkZWxldGUgbGF5ZXI7Ci19Ci0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmVu
c3VyZUxheWVyKFdlYkxheWVySUQgaWQpCi17Ci0gICAgLy8gV2UgaGF2ZSB0byBsZWFrIHRoZSBu
ZXcgbGF5ZXIncyBwb2ludGVyIGFuZCBtYW5hZ2UgaXQgb3Vyc2VsdmVzLAotICAgIC8vIGJlY2F1
c2UgT3duUHRyIGlzIG5vdCBjb3B5YWJsZS4KLSAgICBpZiAobV9sYXllcnMuZmluZChpZCkgPT0g
bV9sYXllcnMuZW5kKCkpCi0gICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgY3JlYXRlTGF5ZXIoaWQp
LmxlYWtQdHIoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290TGF5ZXJJ
RChXZWJMYXllcklEIGxheWVySUQpCi17Ci0gICAgaWYgKGxheWVySUQgPT0gbV9yb290TGF5ZXJJ
RCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7Ci0KLSAg
ICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLQotICAgIGlmICghbGF5ZXJJRCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQo
bGF5ZXJJRCk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290
TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKLX0KLQotUGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9y
ZT4gTGF5ZXJUcmVlSG9zdFByb3h5OjpnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCBpZCkKLXsK
LSAgICBlbnN1cmVMYXllcihpZCk7Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRv
VGV4dHVyZU1hcHBlckxheWVyKGxheWVyQnlJRChpZCkpOwotICAgIFJlZlB0cjxMYXllckJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlID0gc3RhdGljX2Nhc3Q8TGF5ZXJCYWNraW5nU3RvcmUqPihs
YXllci0+YmFja2luZ1N0b3JlKCkuZ2V0KCkpOwotICAgIGlmICghYmFja2luZ1N0b3JlKSB7Ci0g
ICAgICAgIGJhY2tpbmdTdG9yZSA9IExheWVyQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICAg
ICAgbGF5ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0KCkpOwotICAgIH0KLSAg
ICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKLSAgICByZXR1cm4gYmFja2luZ1N0b3JlOwotfQotCi12
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGlu
dCB0aWxlSUQsIGZsb2F0IHNjYWxlKQotewotICAgIGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+
Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIGdldEJh
Y2tpbmdTdG9yZShsYXllcklEKS0+cmVtb3ZlVGlsZSh0aWxlSUQpOwotfQotCi12b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFBh
c3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFwKQotewotICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7Ci0gICAgUmVmUHRyPExheWVyQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCk7Ci0gICAgYmFj
a2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgYml0
bWFwLmdldCgpKTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJh
Y2tpbmdTdG9yZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZShp
bnQ2NF90IGltYWdlSUQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFwKQot
ewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7Ci0gICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gVGV4
dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICBiYWNraW5nU3RvcmUt
PnVwZGF0ZUNvbnRlbnRzKG1fdGV4dHVyZU1hcHBlci5nZXQoKSwgYml0bWFwLT5jcmVhdGVJbWFn
ZSgpLmdldCgpLCBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0KTsKLSAgICBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlcy5zZXQoaW1hZ2VJRCwgYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCi17Ci0gICAgbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOwotfQotCi12b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBp
bnQ2NF90IGltYWdlSUQpCi17Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlcy5maW5kKGltYWdlSUQpOwotICAgIEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5lbmQoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+c2Vjb25k
LmdldCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN3YXBCdWZmZXJzKCkKLXsK
LSAgICBIYXNoU2V0PFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5kID0g
bV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNl
dDxSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3Rv
cmVzV2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
KCppdCktPnN3YXBCdWZmZXJzKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0KLSAgICBtX2JhY2tp
bmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKLX0KLQotdm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKLXsKLSAgICBtX3Jvb3RMYXllci0+c3luY0Nv
bXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOwotICAgIHN3YXBCdWZmZXJzKCk7Ci0KLSAgICAv
LyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMgd2F5IGZvciB0aGUgc2NyZWVuLCB0
ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQgb25lLgotICAgIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhv
c3Q6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlE
KCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlUm9vdExheWVyKCkKLXsK
LSAgICBpZiAobV9yb290TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Jvb3RMYXllciA9
IGNyZWF0ZUxheWVyKEludmFsaWRXZWJMYXllcklEKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0TWFz
a3NUb0JvdW5kcyhmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxz
ZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAw
KSk7Ci0KLSAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBv
ciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZs
b2F0U2l6ZSgxLjAsIDEuMCkpOwotICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBt
X3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3Bl
bkdMTW9kZSk7Ci0gICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5z
ZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5OjpzeW5jUmVtb3RlQ29udGVudCgpCi17Ci0gICAgLy8gV2UgZW5xdWV1ZSBt
ZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJlIGFu
IGFjdGl2ZSBHTCBjb250ZXh0LgotICAgIGVuc3VyZVJvb3RMYXllcigpOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3JlbmRlclF1ZXVlLnNpemUoKTsgKytpKQotICAgICAgICBtX3Jl
bmRlclF1ZXVlW2ldKCk7Ci0KLSAgICBtX3JlbmRlclF1ZXVlLmNsZWFyKCk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbikKLXsKLSAgICBtX3JlbmRlclF1ZXVlLmFwcGVuZChmdW5jdGlvbik7Ci0gICAg
dXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRp
bGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhv
c3RQcm94eTo6Y3JlYXRlVGlsZSwgdGhpcywgbGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnVw
ZGF0ZVNjYWxlRmFjdG9yKSk7Ci0gICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJ
RCwgdXBkYXRlSW5mbyk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxl
Rm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5m
byYgdXBkYXRlSW5mbykKLXsKLSAgICBBU1NFUlQodXBkYXRlSW5mby51cGRhdGVSZWN0cy5zaXpl
KCkgPT0gMSk7Ci0gICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0
cy5maXJzdCgpOwotICAgIEludFJlY3QgdGFyZ2V0UmVjdCA9IHVwZGF0ZUluZm8udXBkYXRlUmVj
dEJvdW5kczsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVC
aXRtYXA6OmNyZWF0ZSh1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlLCB0aGlzLCBsYXllcklELCB0
aWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGJpdG1hcCkpOwotfQotCi12b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlE
KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6cmVtb3Zl
VGlsZSwgdGhpcywgbGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0KLQotdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUxheWVyLCB0aGlzLCBp
ZCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVI
b3N0UHJveHk6OnNldFJvb3RMYXllcklELCB0aGlzLCBpZCkpOwotfQotCi12b2lkIExheWVyVHJl
ZUhvc3RQcm94eTo6c3luY0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8m
IGluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5Ojpz
eW5jTGF5ZXJQYXJhbWV0ZXJzLCB0aGlzLCBpbmZvKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpkaWRSZW5kZXJGcmFtZSgpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlSG9zdFByb3h5OjpmbHVzaExheWVyQ2hhbmdlcywgdGhpcykpOwotfQotCi12b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBr
ZXksIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZShoYW5kbGUpOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6
Y3JlYXRlSW1hZ2UsIHRoaXMsIGtleSwgYml0bWFwKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95SW1hZ2Us
IHRoaXMsIGtleSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdEZvclBhbm5pbmcoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2lu
dCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVu
dHNSZWN0Rm9yUGFubmluZyhyZWN0LCB0cmFqZWN0b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJlYVBy
b3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNl
dFZpc2libGVDb250ZW50c1JlY3RGb3JTY2FsaW5nKGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0
IHNjYWxlKQotewotICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci0gICAgbV9jb250
ZW50c1NjYWxlID0gc2NhbGU7Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nl
c3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRzUmVj
dEZvclNjYWxpbmcocmVjdCwgc2NhbGUpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFn
ZUlEKCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VHTFJlc291cmNlcygp
Ci17Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVy
KHJvb3RMYXllcigpKTsKLQotICAgIGlmIChsYXllcikKLSAgICAgICAgbGF5ZXItPmNsZWFyQmFj
a2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOwotCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMu
Y2xlYXIoKTsKLSAgICBtX3RleHR1cmVNYXBwZXIuY2xlYXIoKTsKLSAgICBtX2JhY2tpbmdTdG9y
ZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBh
Z2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tp
bmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQot
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ5
MTUyYTUuLjY0NWRmOGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0xMCAgVmlhdGNoZXNsYXYgT3N0YXBl
bmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFtX
SzJdIFN1cHBvcnQgdGhyZWFkZWQgcmVuZGVyZXIgaW4gV0syCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2MQorCisgICAgICAgIFJlbW92ZSBkaXNh
Ymxpbmcgb2YgdGhyZWFkZWQgcmVuZGVyaW5nLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvbWFpbi5jcHA6CisgICAgICAg
IChtYWluKToKKwogMjAxMi0wMy0wNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gcmVtb3ZlIHdlYmtpdHB5IGRlcGVuZGVuY3kgaW4gcnVu
LWd0ay10ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAgYi9U
b29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAppbmRleCBmZWFlMTRhLi4zNjYzNzczIDEwMDY0
NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAorKysgYi9Ub29scy9NaW5pQnJv
d3Nlci9xdC9tYWluLmNwcApAQCAtMzksOSArMzksNiBAQAogCiBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiB7Ci0gICAgLy8gRklYTUU6IFdlIG11c3QgYWRkIHN1cHBvcnQgZm9yIHRo
ZSB0aHJlYWRlZCByZW5kZXJpbmcgYXMgaXQgaXMgdGhlIGRlZmF1bHQuCi0gICAgcXB1dGVudigi
UU1MX05PX1RIUkVBREVEX1JFTkRFUkVSIiwgUUJ5dGVBcnJheSgiMSIpKTsKLQogICAgIE1pbmlC
cm93c2VyQXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwogCiAgICAgaWYgKGFwcC5pc1JvYm90
aXplZCgpKSB7Cg==
</data>
<flag name="review"
          id="134408"
          type_id="1"
          status="+"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131204</attachid>
            <date>2012-03-10 22:00:52 -0800</date>
            <delta_ts>2012-03-11 00:26:24 -0800</delta_ts>
            <desc>Patch for commit.</desc>
            <filename>ThreadedPainting_04.diff</filename>
            <type>text/plain</type>
            <size>59290</size>
            <attacher name="Viatcheslav Ostapenko">ostap73</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZGU4YTg3Li4wYmRmOWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTItMDMtMTAgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9zdGFwZW5rby52aWF0Y2hl
c2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBwb3J0IHRocmVhZGVkIHJl
bmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOb2FtIFJvc2VudGhhbC4KKworICAg
ICAgICBBZGQgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udmVyc2lvbnMgZnJvbS90byBRdCBRTWF0
cml4NHg0LiBVc2VkIGJ5IFF0IFdlYktpdDIKKyAgICAgICAgcmVuZGVyaW5nIGFuZCB0ZXN0ZWQg
YnkgUXQgV2ViS2l0MiBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9y
bWF0aW9uTWF0cml4OjpvcGVyYXRvciBRTWF0cml4NHg0KToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0
cml4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5zZm9ybWF0
aW9uTWF0cml4Lmg6CisgICAgICAgIChUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisKIDIwMTItMDMt
MDcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIG1lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sIGlzIGZsYWt5CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJp
eFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0
aW9uTWF0cml4UXQuY3BwCmluZGV4IDZhNTczNWIuLjdmZjQzMmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9u
TWF0cml4UXQuY3BwCkBAIC01MCw2ICs1MCwyMiBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6VHJh
bnNmb3JtYXRpb25NYXRyaXgoY29uc3QgUVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgICAgICAg
ICAgICB0cmFuc2Zvcm0ubTMxKCksIHRyYW5zZm9ybS5tMzIoKSwgMCwgdHJhbnNmb3JtLm0zMygp
KTsKIH0KIAorVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yIFFNYXRyaXg0eDQoKSBjb25z
dAoreworICAgIHJldHVybiBRTWF0cml4NHg0KG0xMSgpLCBtMTIoKSwgbTEzKCksIG0xNCgpLAor
ICAgICAgICAgICAgICAgICAgICAgIG0yMSgpLCBtMjIoKSwgbTIzKCksIG0yNCgpLAorICAgICAg
ICAgICAgICAgICAgICAgIG0zMSgpLCBtMzIoKSwgbTMzKCksIG0zNCgpLAorICAgICAgICAgICAg
ICAgICAgICAgIG00MSgpLCBtNDIoKSwgbTQzKCksIG00NCgpKTsKK30KKworVHJhbnNmb3JtYXRp
b25NYXRyaXg6OlRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IFFNYXRyaXg0eDQmIG1hdHJpeCkK
K3sKKyAgICBzZXRNYXRyaXgobWF0cml4KDAsIDApLCBtYXRyaXgoMSwgMCksIG1hdHJpeCgyLCAw
KSwgbWF0cml4KDMsIDApLAorICAgICAgICAgICAgICBtYXRyaXgoMCwgMSksIG1hdHJpeCgxLCAx
KSwgbWF0cml4KDIsIDEpLCBtYXRyaXgoMywgMSksCisgICAgICAgICAgICAgIG1hdHJpeCgwLCAy
KSwgbWF0cml4KDEsIDIpLCBtYXRyaXgoMiwgMiksIG1hdHJpeCgzLCAyKSwKKyAgICAgICAgICAg
ICAgbWF0cml4KDAsIDMpLCBtYXRyaXgoMSwgMyksIG1hdHJpeCgyLCAzKSwgbWF0cml4KDMsIDMp
KTsKK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9UcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oCmluZGV4IGE5OGQ3MGUuLjc2NWU3ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvVHJhbnNmb3JtYXRpb25NYXRyaXgu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL1RyYW5z
Zm9ybWF0aW9uTWF0cml4LmgKQEAgLTQxLDYgKzQxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQ0dBZmZp
bmVUcmFuc2Zvcm0gQ0dBZmZpbmVUcmFuc2Zvcm07CiAjZWxpZiBQTEFURk9STShPUEVOVkcpCiAj
aW5jbHVkZSAiVkdVdGlscy5oIgogI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UU1hdHJp
eDR4ND4KICNpbmNsdWRlIDxRVHJhbnNmb3JtPgogI2VsaWYgVVNFKFNLSUEpCiAjaW5jbHVkZSA8
U2tNYXRyaXguaD4KQEAgLTgyLDYgKzgzLDcgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oUVQp
CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgUVRyYW5zZm9ybSYpOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4KGNvbnN0IFFNYXRyaXg0eDQmKTsKICNlbmRpZgogCiAgICAgdm9pZCBz
ZXRNYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBl
LCBkb3VibGUgZikKQEAgLTMyOCw2ICszMzAsNyBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgVkdN
YXRyaXgoKSBjb25zdDsKICNlbGlmIFBMQVRGT1JNKFFUKQogICAgIG9wZXJhdG9yIFFUcmFuc2Zv
cm0oKSBjb25zdDsKKyAgICBvcGVyYXRvciBRTWF0cml4NHg0KCkgY29uc3Q7CiAjZWxpZiBVU0Uo
U0tJQSkKICAgICBvcGVyYXRvciBTa01hdHJpeCgpIGNvbnN0OwogI2VsaWYgUExBVEZPUk0oV1gp
ICYmIFVTRShXWEdDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDMzZmFlODAuLmFiNzUyNzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMDMgQEAKKzIwMTItMDMtMTAgIFZpYXRjaGVzbGF2IE9zdGFwZW5rbyAgPG9z
dGFwZW5rby52aWF0Y2hlc2xhdkBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XSBbV0syXSBTdXBw
b3J0IHRocmVhZGVkIHJlbmRlcmVyIGluIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOb2FtIFJv
c2VudGhhbC4KKworICAgICAgICBJbXBsZW1lbnQgUXQ1IHRocmVhZGVkIHJlbmRlcmluZyBzdXBw
b3J0IGZvciBRdCBXZWJLaXQyLgorICAgICAgICBQYXJ0cyBvZiBMYXllclRyZWVIb3N0UHJveHkg
d2hpY2ggY29udGFpbiBsYXllciB0cmVlIGFuZCBsYXllciBwYWludGluZyBvYmplY3RzIAorICAg
ICAgICBhcmUgbW92ZWQgdG8gc2VwYXJhdGUgY2xhc3MgY2FsbGVkIFdlYkxheWVyVHJlZVJlbmRl
cmVyLiBXZWJMYXllclRyZWVSZW5kZXJlciBpcyAKKyAgICAgICAgdGhyZWFkIHNhZmUgcmVmIGNv
dW50ZWQgYW5kIHJlZmVyZW5jZWQgYnkgTGF5ZXJUcmVlSG9zdFByb3h5IGFuZCBwYWludCBub2Rl
LgorICAgICAgICBBbGwgbGF5ZXIgdHJlZSBhbmQgZ3JhcGhpY3Mgb2JqZWN0cyBhcmUgY3JlYXRl
ZCwgYWNjZXNzZWQgYW5kIGRlYWxsb2NhdGVkIGZyb20gUXQgCisgICAgICAgIFNjZW5lZ3JhcGgn
cyBwYWludCB0aHJlYWQgb25seS4KKyAgICAgICAgTGF5ZXIgdHJlZSB1cGRhdGVzIGZyb20gcmVu
ZGVyIHF1ZXVlIGFyZSBmZXRjaGVkIGluIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIHdoZW4g
CisgICAgICAgIG1haW4gdGhyZWFkIGlzIGxvY2tlZC4KKyAgICAgICAgTWVzc2FnZXMgZnJvbSBw
YWludCB0aHJlYWQgdG8gd2ViIHByb2Nlc3MgYXJlIHBhc3NlZCB0aHJvdWdoIE1haW5UaHJlYWRH
dWFyZGVkSW52b2tlciAKKyAgICAgICAgY2FsbCBnYXRlIChpbXBsZW1lbnRlZCBieSBOb2FtIFJv
c2VudGhhbCBhbmQgcHJldmlvdXNseSByZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIAorICAgICAg
ICBDaHJpc3RpYW5zZW4pLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAgICAoUGFnZVByb3h5Tm9kZTo6
UGFnZVByb3h5Tm9kZSk6CisgICAgICAgIChQYWdlUHJveHlOb2RlOjpyZW5kZXIpOgorICAgICAg
ICAoUGFnZVByb3h5Tm9kZTo6flBhZ2VQcm94eU5vZGUpOgorICAgICAgICAoUGFnZVByb3h5Tm9k
ZTo6bGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAoUGFnZVByb3h5Tm9kZSk6CisgICAgICAg
IChQYWdlUHJveHlOb2RlOjpzZXRTY2FsZSk6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjp1cGRh
dGVQYWludE5vZGUpOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tXZWJQ
YWdlUHJpdmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9z
dFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVI
b3N0UHJveHk6On5MYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRy
ZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6
TGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCk6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUpOgorICAgICAgICAoV2ViS2l0
OjpMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJL
aXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdl
YktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVy
KToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdM
YXllclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5k
ZXJGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlRGly
ZWN0bHlDb21wb3NpdGVkSW1hZ2UpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJv
eHk6OmRlc3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6Okxh
eWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvclBhbm5pbmcpOgorICAg
ICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3RG
b3JTY2FsaW5nKToKKyAgICAgICAgKFdlYktpdDo6TGF5ZXJUcmVlSG9zdFByb3h5OjpyZW5kZXJO
ZXh0RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlQmFj
a2luZ1N0b3Jlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OkxheWVyVHJlZUhvc3RQcm94eTo6bGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5UXQuY3BwLgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKE1haW5UaHJlYWRHdWFyZGVkSW52b2tlcik6CisgICAgICAg
IChXZWJLaXQ6Ok1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjo6Y2FsbCk6CisgICAgICAgIChXZWJL
aXQ6Ok1haW5UaHJlYWRHdWFyZGVkSW52b2tlcjo6TWFpblRocmVhZEd1YXJkZWRJbnZva2VyKToK
KyAgICAgICAgKFdlYktpdDo6TWFpblRocmVhZEd1YXJkZWRJbnZva2VyOjppbnZva2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6Y2FsbE9uTWFpblRyZWFkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OldlYkxheWVyVHJlZVJlbmRlcmVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6On5XZWJMYXllclRyZWVS
ZW5kZXJlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvQ3Vy
cmVudEdMQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpz
eW5jQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpw
YWludFRvR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3RGb3JTY2FsaW5nKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRlcnMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXIpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlTGF5ZXIpOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6Z2V0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OmRlc3Ryb3lJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJl
bmRlcmVyOjphc3NpZ25JbWFnZVRvTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVSZW5kZXJlcjo6c3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVS
ZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRy
ZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OmVuc3VyZVJvb3RMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVy
VHJlZVJlbmRlcmVyOjpzeW5jUmVtb3RlQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxh
eWVyVHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
TGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJLaXQ6
OldlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXRhY2gpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXll
clRyZWVSZW5kZXJlcjo6YXBwZW5kVXBkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViTGF5
ZXJUcmVlUmVuZGVyZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
eWVyVHJlZUhvc3RQcm94eS5oLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkxheWVy
VHJlZVJlbmRlcmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlUmVuZGVyZXI6Omxh
eWVyQnlJRCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpyb290TGF5
ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6bm90aWZ5QW5pbWF0
aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVyOjpub3Rp
ZnlTeW5jUmVxdWlyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5kZXJlcjo6
c2hvd0RlYnVnQm9yZGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkxheWVyVHJlZVJlbmRlcmVy
OjpzaG93UmVwYWludENvdW50ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJMYXllclRyZWVSZW5k
ZXJlcjo6cGFpbnRDb250ZW50cyk6CisKIDIwMTItMDMtMDcgIEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFBpbmNoIHpvb20gYWN0cyB3
ZWlyZGx5IG9uIG55dGltZXMuY29tIHdoaWxlIGxvYWRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDEzMjA1
NmEuLjE0NjI4ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMjQyLDYgKzI0Miw3IEBAIEhFQURFUlMgKz0g
XAogICAgIFVJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2VDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNz
L1dlYkluc3BlY3RvclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9XZWJLZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyUHJveHkuaCBcCisgICAgVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmggXAog
ICAgIFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1dlYk1lZGlh
Q2FjaGVNYW5hZ2VyUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYk5hdmlnYXRpb25EYXRhLmgg
XApAQCAtNTMyLDYgKzUzMyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hl
ci9UaHJlYWRMYXVuY2hlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNz
TGF1bmNoZXJRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hl
clF0LmNwcCBcCisgICAgVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcCBc
CiAgICAgVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3Rp
ZmljYXRpb24uY3BwIFwKQEAgLTU3Miw2ICs1NzQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVBy
b2Nlc3MvV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYkluc3Bl
Y3RvclByb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXJQ
cm94eS5jcHAgXAorICAgIFVJUHJvY2Vzcy9XZWJMYXllclRyZWVSZW5kZXJlci5jcHAgXAogICAg
IFVJUHJvY2Vzcy9XZWJMb2FkZXJDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViTWVkaWFD
YWNoZU1hbmFnZXJQcm94eS5jcHAgXAogICAgIFVJUHJvY2Vzcy9XZWJOYXZpZ2F0aW9uRGF0YS5j
cHAgXApAQCAtNTg3LDcgKzU5MCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9XZWJV
SUNsaWVudC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkNvbnRleHQuY3BwIFwKICAgICBV
SVByb2Nlc3MvcXQvTGF5ZXJCYWNraW5nU3RvcmUuY3BwIFwKLSAgICBVSVByb2Nlc3MvcXQvTGF5
ZXJUcmVlSG9zdFByb3h5UXQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRI
YW5kbGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwIFwK
ICAgICBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5kZXggMGU0
NTE5Yi4uOTI5M2M5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUcmVl
SG9zdFByb3h5LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5kZXJl
ci5oIgogI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcF9wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vi
dmlld19wLmgiCiAjaW5jbHVkZSA8UVBvbHlnb25GPgpAQCAtNzksMjQgKzgwLDEwIEBAIHZvaWQg
UVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50KFFQYWludGVyKiBwYWludGVyKQogICAgICAgICB3
ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPnBhaW50TGF5ZXJUcmVlKHBhaW50ZXIpOwogfQog
Ci12b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25z
dCBRVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIGNvbnN0IFFSZWN0RiYgY2xp
cFJlY3QpCi17Ci0gICAgaWYgKCFxLT5pc1Zpc2libGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFjbGlwUmVjdC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERyYXdp
bmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwot
ICAgIGlmICghZHJhd2luZ0FyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRyYXdpbmdBcmVh
LT5wYWludFRvQ3VycmVudEdMQ29udGV4dChRVHJhbnNmb3JtKHRyYW5zZm9ybSkuc2NhbGUoY29u
dGVudHNTY2FsZSwgY29udGVudHNTY2FsZSksIG9wYWNpdHksIGNsaXBSZWN0KTsKLX0KLQogc3Ry
dWN0IFBhZ2VQcm94eU5vZGUgOiBwdWJsaWMgUVNHUmVuZGVyTm9kZSB7Ci0gICAgUGFnZVByb3h5
Tm9kZShRUXVpY2tXZWJQYWdlUHJpdmF0ZSogcGFnZSkKLSAgICAgICAgOiBtX3BhZ2VQcml2YXRl
KHBhZ2UpCisgICAgUGFnZVByb3h5Tm9kZShQYXNzUmVmUHRyPFdlYkxheWVyVHJlZVJlbmRlcmVy
PiByZW5kZXJlcikKKyAgICAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQorICAgICAgICAsIG1f
c2NhbGUoMSkKICAgICB7CiAgICAgfQogCkBAIC0xMDcsMjAgKzk0LDI1IEBAIHN0cnVjdCBQYWdl
UHJveHlOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgewogCiAgICAgdmlydHVhbCB2b2lkIHJl
bmRlcihjb25zdCBSZW5kZXJTdGF0ZSYpCiAgICAgewotICAgICAgICBpZiAoIW1fcGFnZVByaXZh
dGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFFUcmFuc2Zvcm0gdHJhbnNmb3JtID0g
bWF0cml4KCkgPyBtYXRyaXgoKS0+dG9UcmFuc2Zvcm0oKSA6IFFUcmFuc2Zvcm0oKTsKKyAgICAg
ICAgUU1hdHJpeDR4NCByZW5kZXJNYXRyaXggPSBtYXRyaXgoKSA/ICptYXRyaXgoKSA6IFFNYXRy
aXg0eDQoKTsKKworICAgICAgICAvLyBIYXZlIHRvIGFwcGx5IHJlbmRlciBzY2FsZSBtYW51YWx5
IGJlY2F1c2UgaXQgaXMgbm90IGFwcGxpZWQgb24gcGFnZSBpdGVtLgorICAgICAgICAvLyBodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMDQ0NTAKKyAgICAgICAgcmVuZGVyTWF0cml4
LnNjYWxlKG1fc2NhbGUpOwogCiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG5vbi1yZWN0YW5n
dWxhciBjbGlwcGluZ3MuCi0gICAgICAgIG1fcGFnZVByaXZhdGUtPnBhaW50VG9DdXJyZW50R0xD
b250ZXh0KHRyYW5zZm9ybSwgaW5oZXJpdGVkT3BhY2l0eSgpLCBjbGlwUmVjdCgpKTsKKyAgICAg
ICAgbGF5ZXJUcmVlUmVuZGVyZXIoKS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQocmVuZGVyTWF0
cml4LCBpbmhlcml0ZWRPcGFjaXR5KCksIGNsaXBSZWN0KCkpOwogICAgIH0KIAogICAgIH5QYWdl
UHJveHlOb2RlKCkKICAgICB7Ci0gICAgICAgIGlmIChtX3BhZ2VQcml2YXRlKQotICAgICAgICAg
ICAgbV9wYWdlUHJpdmF0ZS0+cmVzZXRQYWludE5vZGUoKTsKKyAgICAgICAgbGF5ZXJUcmVlUmVu
ZGVyZXIoKS0+cHVyZ2VHTFJlc291cmNlcygpOwogICAgIH0KIAorICAgIFdlYkxheWVyVHJlZVJl
bmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldFNjYWxlKGZsb2F0IHNjYWxlKSB7IG1fc2NhbGUgPSBzY2FsZTsg
fQorCitwcml2YXRlOgogICAgIFFSZWN0RiBjbGlwUmVjdCgpIGNvbnN0CiAgICAgewogICAgICAg
ICAvLyBTdGFydCB3aXRoIGFuIGludmFsaWQgcmVjdC4KQEAgLTE2MiwyNCArMTU0LDM1IEBAIHN0
cnVjdCBQYWdlUHJveHlOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgewogICAgICAgICByZXR1
cm4gcmVzdWx0UmVjdDsKICAgICB9CiAKLSAgICBRUXVpY2tXZWJQYWdlUHJpdmF0ZSogbV9wYWdl
UHJpdmF0ZTsKKyAgICBSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7Cisg
ICAgZmxvYXQgbV9zY2FsZTsKIH07CiAKIFFTR05vZGUqIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBh
aW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5vZGVEYXRhKikKIHsKLSAgICBp
ZiAoIShmbGFncygpICYgSXRlbUhhc0NvbnRlbnRzKSkgewotICAgICAgICBpZiAob2xkTm9kZSkK
LSAgICAgICAgICAgIGRlbGV0ZSBvbGROb2RlOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Cisg
ICAgaWYgKCFkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpCisgICAgICAgIHJldHVybiBv
bGROb2RlOworCisgICAgTGF5ZXJUcmVlSG9zdFByb3h5KiBsYXllclRyZWVIb3N0UHJveHkgPSBk
LT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCktPmxheWVyVHJlZUhvc3RQcm94eSgpOworICAg
IFdlYkxheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlciA9IGxheWVyVHJlZUhvc3RQcm94eS0+bGF5
ZXJUcmVlUmVuZGVyZXIoKTsKIAotICAgIFBhZ2VQcm94eU5vZGUqIHByb3h5Tm9kZSA9IHN0YXRp
Y19jYXN0PFBhZ2VQcm94eU5vZGUqPihvbGROb2RlKTsKLSAgICBpZiAoIXByb3h5Tm9kZSkgewot
ICAgICAgICBwcm94eU5vZGUgPSBuZXcgUGFnZVByb3h5Tm9kZShkKTsKLSAgICAgICAgZC0+bV9w
YWludE5vZGUgPSBwcm94eU5vZGU7CisgICAgUGFnZVByb3h5Tm9kZSogbm9kZSA9IHN0YXRpY19j
YXN0PFBhZ2VQcm94eU5vZGUqPihvbGROb2RlKTsKKworICAgIGlmIChub2RlICYmIG5vZGUtPmxh
eWVyVHJlZVJlbmRlcmVyKCkgIT0gcmVuZGVyZXIpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0
aGF0IExheWVyVHJlZUhvc3RQcm94eSB3YXMgZGVsZXRlZCBhbmQgcmVjcmVhdGVkIHdoaWxlIG9s
ZCBwYWludCBub2RlIHN1cnZpdmVkLgorICAgICAgICAvLyBUaGlzIGNvdWxkIGhhcHBlbiBpZiB3
ZWIgcHJvY2VzcyBoYXZlIGNyYXNoZWQuIEluIHRoaXMgY2FzZSB3ZSBoYXZlIHRvIHJlY3JlYXRl
IHBhaW50IG5vZGUuCisgICAgICAgIGRlbGV0ZSBub2RlOworICAgICAgICBub2RlID0gMDsKICAg
ICB9CiAKLSAgICByZXR1cm4gcHJveHlOb2RlOworICAgIHJlbmRlcmVyLT5zeW5jUmVtb3RlQ29u
dGVudCgpOworCisgICAgaWYgKCFub2RlKQorICAgICAgICBub2RlID0gbmV3IFBhZ2VQcm94eU5v
ZGUocmVuZGVyZXIpOworCisgICAgbm9kZS0+c2V0U2NhbGUoZC0+Y29udGVudHNTY2FsZSk7CisK
KyAgICByZXR1cm4gbm9kZTsKIH0KIAogUXRXZWJQYWdlRXZlbnRIYW5kbGVyKiBRUXVpY2tXZWJQ
YWdlOjpldmVudEhhbmRsZXIoKSBjb25zdApAQCAtMjMzLDE4ICsyMzYsOCBAQCB2b2lkIFFRdWlj
a1dlYlBhZ2VQcml2YXRlOjp1cGRhdGVTaXplKCkKICAgICB2aWV3cG9ydEl0ZW0tPnVwZGF0ZUNv
bnRlbnRzU2l6ZShzY2FsZWRTaXplKTsKIH0KIAotdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6
cmVzZXRQYWludE5vZGUoKQotewotICAgIG1fcGFpbnROb2RlID0gMDsKLSAgICBEcmF3aW5nQXJl
YVByb3h5KiBkcmF3aW5nQXJlYSA9IHdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBp
ZiAoZHJhd2luZ0FyZWEgJiYgZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3RQcm94eSgpKQotICAg
ICAgICBkcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdFByb3h5KCktPnB1cmdlR0xSZXNvdXJjZXMo
KTsKLX0KLQogUVF1aWNrV2ViUGFnZVByaXZhdGU6On5RUXVpY2tXZWJQYWdlUHJpdmF0ZSgpCiB7
Ci0gICAgaWYgKG1fcGFpbnROb2RlKQotICAgICAgICBzdGF0aWNfY2FzdDxQYWdlUHJveHlOb2Rl
Kj4obV9wYWludE5vZGUpLT5tX3BhZ2VQcml2YXRlID0gMDsKIH0KIAogI2luY2x1ZGUgIm1vY19x
cXVpY2t3ZWJwYWdlX3AuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJU
cmVlSG9zdFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzYw
YTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJl
ZUhvc3RQcm94eS5jcHAKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
ICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQorI2luY2x1
ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVu
dENvZGVycy5oIgorI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKKyNpbmNsdWRlICJXZWJM
YXllclRyZWVSZW5kZXJlci5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUg
IldlYlByb2Nlc3NQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK0xheWVyVHJlZUhvc3RQcm94eTo6TGF5ZXJUcmVlSG9zdFByb3h5KERy
YXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCisgICAgOiBtX2RyYXdpbmdBcmVhUHJv
eHkoZHJhd2luZ0FyZWFQcm94eSkKKyAgICAsIG1fcmVuZGVyZXIoYWRvcHRSZWYobmV3IFdlYkxh
eWVyVHJlZVJlbmRlcmVyKHRoaXMpKSkKK3sKK30KKworTGF5ZXJUcmVlSG9zdFByb3h5Ojp+TGF5
ZXJUcmVlSG9zdFByb3h5KCkKK3sKKyAgICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKK30KKwordm9p
ZCBMYXllclRyZWVIb3N0UHJveHk6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3JlbmRlcmVyLT5zeW5jUmVtb3RlQ29u
dGVudCgpOworICAgIG1fcmVuZGVyZXItPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KG1hdHJpeCwg
b3BhY2l0eSwgcmVjdCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvR3Jh
cGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgY29udGV4
dCkKK3sKKyAgICBtX3JlbmRlcmVyLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwor
fQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRlVmlld3BvcnQoKQoreworICAgIG1f
ZHJhd2luZ0FyZWFQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9u
KQoreworICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CisgICAgdXBkYXRl
Vmlld3BvcnQoKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JM
YXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvKQoreworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRl
cmVyOjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0
ZUluZm8udXBkYXRlU2NhbGVGYWN0b3IpKTsKKyAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJ
RCwgdGlsZUlELCB1cGRhdGVJbmZvKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnVw
ZGF0ZVRpbGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpV
cGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIEFTU0VSVCh1cGRhdGVJbmZvLnVwZGF0ZVJl
Y3RzLnNpemUoKSA9PSAxKTsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3QgPSB1cGRhdGVJbmZvLnVw
ZGF0ZVJlY3RzLmZpcnN0KCk7CisgICAgSW50UmVjdCB0YXJnZXRSZWN0ID0gdXBkYXRlSW5mby51
cGRhdGVSZWN0Qm91bmRzOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlKHVwZGF0ZUluZm8uYml0bWFwSGFuZGxlKTsKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZSwgbV9yZW5k
ZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBzb3VyY2VSZWN0LCB0YXJnZXRSZWN0LCBiaXRt
YXApKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVGb3JMYXllcihp
bnQgbGF5ZXJJRCwgaW50IHRpbGVJRCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJM
YXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwg
dGlsZUlEKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVDb21wb3NpdGlu
Z0xheWVyKFdlYkxheWVySUQgaWQpCit7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmV2ViTGF5
ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyLCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5
ZXJJRCBpZCkKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJl
cjo6c2V0Um9vdExheWVySUQsIG1fcmVuZGVyZXIuZ2V0KCksIGlkKSk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlSG9zdFByb3h5OjpzeW5jQ29tcG9zaXRpbmdMYXllclN0YXRlKGNvbnN0IFdlYkxheWVy
SW5mbyYgaW5mbykKK3sKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5k
ZXJlcjo6c3luY0xheWVyUGFyYW1ldGVycywgbV9yZW5kZXJlci5nZXQoKSwgaW5mbykpOworfQor
Cit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoKQoreworICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywg
bV9yZW5kZXJlci5nZXQoKSkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRl
RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXksIGNvbnN0IFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShoYW5kbGUpOworICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJldlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZSwgbV9yZW5kZXJl
ci5nZXQoKSwga2V5LCBiaXRtYXApKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRl
c3Ryb3lEaXJlY3RseUNvbXBvc2l0ZWRJbWFnZShpbnQ2NF90IGtleSkKK3sKKyAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUltYWdlLCBtX3JlbmRl
cmVyLmdldCgpLCBrZXkpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNldFZpc2li
bGVDb250ZW50c1JlY3RGb3JQYW5uaW5nKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNv
bnRlbnRzUmVjdEZvclBhbm5pbmcocmVjdCwgdHJhamVjdG9yeVZlY3RvciksIG1fZHJhd2luZ0Fy
ZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5
OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhjb25zdCBJbnRSZWN0JiByZWN0LCBm
bG9hdCBzY2FsZSkKK3sKKyAgICBtX3JlbmRlcmVyLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9y
U2NhbGluZyhyZWN0LCBzY2FsZSk7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRz
UmVjdEZvclNjYWxpbmcocmVjdCwgc2NhbGUpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cGFnZUlEKCkpOworfQorCit2b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cmVuZGVyTmV4dEZyYW1l
KCkKK3sKKyAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpMYXllclRyZWVIb3N0OjpSZW5kZXJOZXh0RnJhbWUoKSwgbV9kcmF3aW5nQXJlYVBy
b3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKK30KKwordm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnB1
cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBy
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5nU3RvcmVz
KCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7Cit9CisKK30KKyNlbmRp
ZiAvLyBVU0UoVUlfU0lERV9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXllclRyZWVIb3N0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXllclRyZWVIb3N0UHJveHkuaAppbmRleCBiM2Q1MTJmLi5mNmMzMWQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xheWVyVHJlZUhvc3RQcm94eS5oCkBAIC0yNSw4ICsyNSw2
IEBACiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94
eS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViTGF5ZXJU
cmVlSW5mby5oIgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CkBAIC0zNywxNCArMzUsMTUgQEAKICNpbmNsdWRl
IDx3dGYvRnVuY3Rpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKK2NsYXNzIFFT
R05vZGU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBMYXllckJhY2tpbmdTdG9yZTsK
IGNsYXNzIFdlYkxheWVySW5mbzsKK2NsYXNzIFdlYkxheWVyVHJlZVJlbmRlcmVyOwogY2xhc3Mg
V2ViTGF5ZXJVcGRhdGVJbmZvOwogCi1jbGFzcyBMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7CitjbGFzcyBMYXllclRyZWVIb3N0UHJveHkg
ewogcHVibGljOgogICAgIExheWVyVHJlZUhvc3RQcm94eShEcmF3aW5nQXJlYVByb3h5Kik7CiAg
ICAgdmlydHVhbCB+TGF5ZXJUcmVlSG9zdFByb3h5KCk7CkBAIC01MiwxMyArNTEsMTEgQEAgcHVi
bGljOgogICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcihXZWJMYXllcklEKTsKICAgICB2
b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKFdlYkxheWVySUQpOwogICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29y
ZUlQQzo6QXJndW1lbnREZWNvZGVyKik7Ci0gICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4
dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0
IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBjbGlwKTsKICAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQo
QmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CiAgICAgdm9pZCBwdXJnZUdM
UmVzb3VyY2VzKCk7CiAgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0Rm9yU2NhbGluZyhj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZmxvYXQpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRl
bnRzUmVjdEZvclBhbm5pbmcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmKTsKLSAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAgdm9pZCBz
d2FwQ29udGVudEJ1ZmZlcnMoKTsKICAgICB2b2lkIGRpZFJlbmRlckZyYW1lKCk7CiAgICAgdm9p
ZCBjcmVhdGVUaWxlRm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktp
dDo6VXBkYXRlSW5mbyYpOwogICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKGludCBsYXllcklE
LCBpbnQgdGlsZUlELCBjb25zdCBXZWJLaXQ6OlVwZGF0ZUluZm8mKTsKQEAgLTY3LDU5ICs2NCwx
NSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50
NjRfdCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3Jl
SVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERl
Y29kZXIqKTsKICAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7CisgICAgdm9pZCByZW5kZXJOZXh0
RnJhbWUoKTsKKyAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIFdlYkxheWVyVHJl
ZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIu
Z2V0KCk7IH0KIAogcHJvdGVjdGVkOgotICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NM
YXllcj4gY3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCk7Ci0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBpZCkgeyByZXR1cm4gKGlkID09IEludmFsaWRXZWJM
YXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQoaWQpOyB9Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KLQotICAgIC8v
IFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudC4KLSAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiwgZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVp
cmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSB7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
c2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZv
aWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KLQotICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJh
d2luZ0FyZWFQcm94eTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJMYXllcklELCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKj4gTGF5ZXJNYXA7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2li
bGVDb250ZW50c1JlY3Q7Ci0gICAgZmxvYXQgbV9jb250ZW50c1NjYWxlOwotCi0gICAgVmVjdG9y
PEZ1bmN0aW9uPHZvaWQoKT4gPiBtX3JlbmRlclF1ZXVlOwogICAgIHZvaWQgZGlzcGF0Y2hVcGRh
dGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwogCi0jaWYgVVNFKFRFWFRVUkVfTUFQUEVSKQot
ICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7Ci0gICAg
UGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gZ2V0QmFja2luZ1N0b3JlKFdlYkxheWVySUQp
OwotICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmU+ID4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7Ci0gICAgSGFzaFNldDxSZWZQ
dHI8TGF5ZXJCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
OwotI2VuZGlmCi0KLSAgICB2b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgpOwotICAgIHZvaWQg
c3luY2hyb25pemVWaWV3cG9ydCgpOwotICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2ViTGF5ZXJJRCk7
Ci0gICAgdm9pZCBzZXRSb290TGF5ZXJJRChXZWJMYXllcklEKTsKLSAgICB2b2lkIHN5bmNMYXll
clBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJik7Ci0gICAgdm9pZCBjcmVhdGVUaWxlKFdl
YkxheWVySUQsIGludCwgZmxvYXQgc2NhbGUpOwotICAgIHZvaWQgcmVtb3ZlVGlsZShXZWJMYXll
cklELCBpbnQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+KTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlKGludDY0X3QsIFBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPik7Ci0gICAgdm9pZCBkZXN0cm95SW1hZ2UoaW50NjRfdCk7Ci0gICAg
dm9pZCBhc3NpZ25JbWFnZVRvTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGludDY0X3Qg
aW1hZ2VJRCk7Ci0gICAgdm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOwotICAgIHZvaWQgZW5zdXJl
Um9vdExheWVyKCk7Ci0gICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsKLSAgICB2b2lk
IHN3YXBCdWZmZXJzKCk7Ci0gICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwotCi0gICAgT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwotICAgIFZlY3RvcjxXZWJMYXll
cklEPiBtX2xheWVyc1RvRGVsZXRlOwotCi0gICAgTGF5ZXJNYXAgbV9sYXllcnM7Ci0gICAgV2Vi
TGF5ZXJJRCBtX3Jvb3RMYXllcklEOwotICAgIGludCBtX2lkOworICAgIERyYXdpbmdBcmVhUHJv
eHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKKyAgICBSZWZQdHI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+
IG1fcmVuZGVyZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkxheWVyVHJlZVJlbmRlcmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mMmMwNDk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YkxheWVyVHJlZVJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDQxMCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcp
CisKKyNpbmNsdWRlICJXZWJMYXllclRyZWVSZW5kZXJlci5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJMYXllckJhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIkxheWVyVHJlZUhvc3RQcm94eS5oIgorI2luY2x1ZGUgIk1haW5UaHJlYWQuaCIK
KyNpbmNsdWRlICJNZXNzYWdlSUQuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdT
dG9yZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgorI2luY2x1ZGUgIlVwZGF0
ZUluZm8uaCIKKyNpbmNsdWRlIDxPcGVuR0xTaGltcy5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNz
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
dGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgTWFpblRocmVhZEd1YXJkZWRJbnZva2VyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgdm9pZCBjYWxsKFBhc3NSZWZQdHI8VD4gb2JqZWN0VG9HdWFyZCwgY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCisgICAgeworICAgICAgICBNYWluVGhyZWFk
R3VhcmRlZEludm9rZXI8VD4qIGludm9rZXIgPSBuZXcgTWFpblRocmVhZEd1YXJkZWRJbnZva2Vy
PFQ+KG9iamVjdFRvR3VhcmQsIGZ1bmN0aW9uKTsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChp
bnZva2UsIGludm9rZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNYWluVGhyZWFkR3VhcmRl
ZEludm9rZXIoUGFzc1JlZlB0cjxUPiBvYmplY3QsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIG5l
d0Z1bmN0aW9uKQorICAgICAgICA6IG9iamVjdFRvR3VhcmQob2JqZWN0KQorICAgICAgICAsIGZ1
bmN0aW9uKG5ld0Z1bmN0aW9uKQorICAgIHsKKyAgICB9CisKKyAgICBSZWZQdHI8VD4gb2JqZWN0
VG9HdWFyZDsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IGZ1bmN0aW9uOworICAgIHN0YXRpYyB2b2lk
IGludm9rZSh2b2lkKiBkYXRhKQorICAgIHsKKyAgICAgICAgTWFpblRocmVhZEd1YXJkZWRJbnZv
a2VyPFQ+KiBpbnZva2VyID0gc3RhdGljX2Nhc3Q8TWFpblRocmVhZEd1YXJkZWRJbnZva2VyPFQ+
Kj4oZGF0YSk7CisgICAgICAgIGludm9rZXItPmZ1bmN0aW9uKCk7CisgICAgICAgIGRlbGV0ZSBp
bnZva2VyOworICAgIH0KK307CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmNhbGxPbk1h
aW5UcmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBpZiAoaXNN
YWluVGhyZWFkKCkpCisgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgZWxzZQorICAgICAgICBNYWlu
VGhyZWFkR3VhcmRlZEludm9rZXI8V2ViTGF5ZXJUcmVlUmVuZGVyZXI+OjpjYWxsKHRoaXMsIGZ1
bmN0aW9uKTsKK30KKworV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OldlYkxheWVyVHJlZVJlbmRlcmVy
KExheWVyVHJlZUhvc3RQcm94eSogbGF5ZXJUcmVlSG9zdFByb3h5KQorICAgIDogbV9sYXllclRy
ZWVIb3N0UHJveHkobGF5ZXJUcmVlSG9zdFByb3h5KQorICAgICwgbV9yb290TGF5ZXJJRCgwKQor
eworfQorCitXZWJMYXllclRyZWVSZW5kZXJlcjo6fldlYkxheWVyVHJlZVJlbmRlcmVyKCkKK3sK
K30KKworUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBXZWJMYXllclRyZWVSZW5kZXJlcjo6Y3Jl
YXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIG5ld0xh
eWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMpOworICAgIFRleHR1cmVN
YXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihuZXdMYXllcik7CisgICAg
bGF5ZXItPnNldFNob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXllcihmYWxzZSk7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJl
cjo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCkKK3sKKyAgICBp
ZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1h
cHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworICAgIEFTU0VSVChtX3Rl
eHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xN
b2RlKTsKKworICAgIHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgR3JhcGhpY3NMYXllciogY3Vy
cmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOworICAgIGlmICghY3VycmVudFJvb3RMYXllcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4
dHVyZU1hcHBlckxheWVyKGN1cnJlbnRSb290TGF5ZXIpOworCisgICAgaWYgKCFsYXllcikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbGF5ZXItPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFw
cGVyLmdldCgpKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKyAgICBt
X3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVn
aW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNsaXBSZWN0KTsKKworICAgIGlmIChjdXJy
ZW50Um9vdExheWVyLT5vcGFjaXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50
cmFuc2Zvcm0oKSAhPSBtYXRyaXgpIHsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3Bh
Y2l0eShvcGFjaXR5KTsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1h
dHJpeCk7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpOworICAgIH0KKworICAgIGxheWVyLT5wYWludCgpOworICAgIG1fdGV4
dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmco
KTsKKworICAgIHN5bmNBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVy
ZXI6OnN5bmNBbmltYXRpb25zKCkKK3sKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0g
dG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOworICAgIEFTU0VSVChsYXllcik7CisK
KyAgICBsYXllci0+c3luY0FuaW1hdGlvbnNSZWN1cnNpdmVseSgpOworICAgIGlmIChsYXllci0+
ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChiaW5kKCZXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQsIHRo
aXMpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6cGFpbnRUb0dyYXBoaWNzQ29u
dGV4dChRUGFpbnRlciogcGFpbnRlcikKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAg
ICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCk7CisgICAgQVNT
RVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6
OlNvZnR3YXJlTW9kZSk7CisgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICBUZXh0dXJlTWFw
cGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOworCisg
ICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0IGdy
YXBoaWNzQ29udGV4dChwYWludGVyKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNz
Q29udGV4dCgmZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFp
bnRpbmcoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJpbmRTdXJmYWNlKDApOworICAgIGxheWVy
LT5wYWludCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKyAgICBtX3Rl
eHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgwKTsKK30KKwordm9pZCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdEZvclNjYWxpbmcoY29uc3QgSW50UmVj
dCYgcmVjdCwgZmxvYXQgc2NhbGUpCit7CisgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVj
dDsKKyAgICBtX2NvbnRlbnRzU2NhbGUgPSBzY2FsZTsKK30KKwordm9pZCBXZWJMYXllclRyZWVS
ZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQoKQoreworICAgIGlmIChtX2xheWVyVHJlZUhvc3RQcm94
eSkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0UHJveHktPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisK
K3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2Vi
TGF5ZXJJbmZvJiBsYXllckluZm8pCit7CisgICAgV2ViTGF5ZXJJRCBpZCA9IGxheWVySW5mby5p
ZDsKKyAgICBlbnN1cmVMYXllcihpZCk7CisgICAgTGF5ZXJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9s
YXllcnMuZmluZChpZCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBpdC0+c2Vjb25kOwor
ICAgIGJvb2wgbmVlZHNUb1VwZGF0ZUltYWdlVGlsZXMgPSBsYXllckluZm8uaW1hZ2VJc1VwZGF0
ZWQgfHwgKGxheWVySW5mby5jb250ZW50c1JlY3QgIT0gbGF5ZXItPmNvbnRlbnRzUmVjdCgpICYm
IGxheWVySW5mby5pbWFnZUJhY2tpbmdTdG9yZUlEKTsKKworICAgIGxheWVyLT5zZXROYW1lKGxh
eWVySW5mby5uYW1lKTsKKworICAgIGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihsYXllckJ5
SUQobGF5ZXJJbmZvLnJlcGxpY2EpKTsKKyAgICBsYXllci0+c2V0TWFza0xheWVyKGxheWVyQnlJ
RChsYXllckluZm8ubWFzaykpOworCisgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5w
b3MpOworICAgIGxheWVyLT5zZXRTaXplKGxheWVySW5mby5zaXplKTsKKyAgICBsYXllci0+c2V0
VHJhbnNmb3JtKGxheWVySW5mby50cmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRBbmNob3JQb2lu
dChsYXllckluZm8uYW5jaG9yUG9pbnQpOworICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9y
bShsYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRCYWNrZmFjZVZp
c2liaWxpdHkobGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7CisgICAgbGF5ZXItPnNldENvbnRl
bnRzT3BhcXVlKGxheWVySW5mby5jb250ZW50c09wYXF1ZSk7CisgICAgbGF5ZXItPnNldENvbnRl
bnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKKyAgICBsYXllci0+c2V0RHJhd3NDb250
ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOworCisgICAgaWYgKG5lZWRzVG9VcGRhdGVJbWFn
ZVRpbGVzKQorICAgICAgICBhc3NpZ25JbWFnZVRvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFn
ZUJhY2tpbmdTdG9yZUlEKTsKKworICAgIC8vIE5ldmVyIG1ha2UgdGhlIHJvb3QgbGF5ZXIgY2xp
cC4KKyAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8uaXNSb290TGF5ZXIgPyBm
YWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKKyAgICBsYXllci0+c2V0T3BhY2l0eShs
YXllckluZm8ub3BhY2l0eSk7CisgICAgbGF5ZXItPnNldFByZXNlcnZlczNEKGxheWVySW5mby5w
cmVzZXJ2ZXMzRCk7CisgICAgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJJbmZvLmNoaWxkcmVuLnNpemUoKTsgKytpKSB7
CisgICAgICAgIFdlYkxheWVySUQgY2hpbGRJRCA9IGxheWVySW5mby5jaGlsZHJlbltpXTsKKyAg
ICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQoY2hpbGRJRCk7CisgICAgICAg
IGlmICghY2hpbGQpIHsKKyAgICAgICAgICAgIGNoaWxkID0gY3JlYXRlTGF5ZXIoY2hpbGRJRCku
bGVha1B0cigpOworICAgICAgICAgICAgbV9sYXllcnMuYWRkKGNoaWxkSUQsIGNoaWxkKTsKKyAg
ICAgICAgfQorICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworICAgIH0KKyAgICBsYXll
ci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
YXllckluZm8uYW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBXZWJLaXQ6
OldlYkxheWVyQW5pbWF0aW9uIGFuaW0gPSBsYXllckluZm8uYW5pbWF0aW9uc1tpXTsKKworICAg
ICAgICBzd2l0Y2ggKGFuaW0ub3BlcmF0aW9uKSB7CisgICAgICAgIGNhc2UgV2ViS2l0OjpXZWJM
YXllckFuaW1hdGlvbjo6QWRkQW5pbWF0aW9uOiB7CisgICAgICAgICAgICBjb25zdCBJbnRTaXpl
IGJveFNpemUgPSBhbmltLmJveFNpemU7CisgICAgICAgICAgICBsYXllci0+YWRkQW5pbWF0aW9u
KGFuaW0ua2V5ZnJhbWVMaXN0LCBib3hTaXplLCBhbmltLmFuaW1hdGlvbi5nZXQoKSwgYW5pbS5u
YW1lLCBhbmltLnN0YXJ0VGltZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIFdlYktpdDo6V2ViTGF5ZXJBbmltYXRpb246OlJlbW92ZUFuaW1hdGlvbjoKKyAg
ICAgICAgICAgIGxheWVyLT5yZW1vdmVBbmltYXRpb24oYW5pbS5uYW1lKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdlYktpdDo6V2ViTGF5ZXJBbmltYXRpb246OlBhdXNlQW5p
bWF0aW9uOgorICAgICAgICAgICAgZG91YmxlIG9mZnNldCA9IFdURjo6Y3VycmVudFRpbWUoKSAt
IGFuaW0uc3RhcnRUaW1lOworICAgICAgICAgICAgbGF5ZXItPnBhdXNlQW5pbWF0aW9uKGFuaW0u
bmFtZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKGxheWVySW5mby5pc1Jvb3RMYXllciAmJiBtX3Jvb3RMYXllcklEICE9IGlkKQorICAg
ICAgICBzZXRSb290TGF5ZXJJRChpZCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6
OmRlbGV0ZUxheWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBsYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOworICAgIG1fbGF5ZXJzLnJlbW92
ZShsYXllcklEKTsKKyAgICBkZWxldGUgbGF5ZXI7Cit9CisKKwordm9pZCBXZWJMYXllclRyZWVS
ZW5kZXJlcjo6ZW5zdXJlTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKK3sKKyAgICAvLyBXZSBoYXZlIHRv
IGxlYWsgdGhlIG5ldyBsYXllcidzIHBvaW50ZXIgYW5kIG1hbmFnZSBpdCBvdXJzZWx2ZXMsCisg
ICAgLy8gYmVjYXVzZSBPd25QdHIgaXMgbm90IGNvcHlhYmxlLgorICAgIGlmIChtX2xheWVycy5m
aW5kKGlkKSA9PSBtX2xheWVycy5lbmQoKSkKKyAgICAgICAgbV9sYXllcnMuYWRkKGlkLCBjcmVh
dGVMYXllcihpZCkubGVha1B0cigpKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6
c2V0Um9vdExheWVySUQoV2ViTGF5ZXJJRCBsYXllcklEKQoreworICAgIGlmIChsYXllcklEID09
IG1fcm9vdExheWVySUQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVySUQgPSBs
YXllcklEOworCisgICAgbV9yb290TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICBp
ZiAoIWxheWVySUQpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVy
ID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChsYXllcik7Cit9CisKK1Bhc3NSZWZQdHI8TGF5
ZXJCYWNraW5nU3RvcmU+IFdlYkxheWVyVHJlZVJlbmRlcmVyOjpnZXRCYWNraW5nU3RvcmUoV2Vi
TGF5ZXJJRCBpZCkKK3sKKyAgICBlbnN1cmVMYXllcihpZCk7CisgICAgVGV4dHVyZU1hcHBlckxh
eWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGxheWVyQnlJRChpZCkpOworICAgIFJl
ZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gc3RhdGljX2Nhc3Q8TGF5ZXJC
YWNraW5nU3RvcmUqPihsYXllci0+YmFja2luZ1N0b3JlKCkuZ2V0KCkpOworICAgIGlmICghYmFj
a2luZ1N0b3JlKSB7CisgICAgICAgIGJhY2tpbmdTdG9yZSA9IExheWVyQmFja2luZ1N0b3JlOjpj
cmVhdGUoKTsKKyAgICAgICAgbGF5ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0
KCkpOworICAgIH0KKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gYmFja2lu
Z1N0b3JlOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxlKFdlYkxh
eWVySUQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgZmxvYXQgc2NhbGUpCit7CisgICAgZ2V0QmFja2lu
Z1N0b3JlKGxheWVySUQpLT5jcmVhdGVUaWxlKHRpbGVJRCwgc2NhbGUpOworfQorCit2b2lkIFdl
YkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlKFdlYkxheWVySUQgbGF5ZXJJRCwgaW50IHRp
bGVJRCkKK3sKKyAgICBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCktPnJlbW92ZVRpbGUodGlsZUlE
KTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShXZWJMYXllcklE
IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFJlY3QmIHRhcmdldFJlY3QsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFw
KQoreworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7Cisg
ICAgUmVmUHRyPExheWVyQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5nU3Rv
cmUobGF5ZXJJRCk7CisgICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwgc291cmNl
UmVjdCwgdGFyZ2V0UmVjdCwgYml0bWFwLmdldCgpKTsKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRo
UGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVl
UmVuZGVyZXI6OmNyZWF0ZUltYWdlKGludDY0X3QgaW1hZ2VJRCwgUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IHdlYWtCaXRtYXApCit7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0
bWFwID0gd2Vha0JpdG1hcDsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUgPSBUZXh0dXJlTWFwcGVyVGlsZWRCYWNraW5nU3RvcmU6OmNyZWF0
ZSgpOworICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlQ29udGVudHMobV90ZXh0dXJlTWFwcGVyLmdl
dCgpLCBiaXRtYXAtPmNyZWF0ZUltYWdlKCkuZ2V0KCksIEJpdG1hcFRleHR1cmU6OkJHUkFGb3Jt
YXQpOworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnNldChpbWFnZUlELCBiYWNraW5n
U3RvcmUpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpkZXN0cm95SW1hZ2UoaW50
NjRfdCBpbWFnZUlEKQoreworICAgIG1fZGlyZWN0bHlDb21wb3NpdGVkSW1hZ2VzLnJlbW92ZShp
bWFnZUlEKTsKK30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VUb0xh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQ2NF90IGltYWdlSUQpCit7CisgICAgSGFzaE1h
cDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3Ig
aXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5maW5kKGltYWdlSUQpOworICAgIEFTU0VS
VChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5lbmQoKSk7CisgICAgbGF5ZXItPnNl
dENvbnRlbnRzVG9NZWRpYShpdC0+c2Vjb25kLmdldCgpKTsKK30KKwordm9pZCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6c3dhcEJ1ZmZlcnMoKQoreworICAgIEhhc2hTZXQ8UmVmUHRyPExheWVyQmFj
a2luZ1N0b3JlPiA+OjppdGVyYXRvciBlbmQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1
ZmZlcnMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4g
Pjo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+c3dhcEJ1ZmZlcnMobV90ZXh0dXJl
TWFwcGVyLmdldCgpKTsKKworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5j
bGVhcigpOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdl
cygpCit7CisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgp
KTsKKyAgICBzd2FwQnVmZmVycygpOworCisgICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMgc3RhdGUg
aXMgb24gaXRzIHdheSBmb3IgdGhlIHNjcmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8gcmVu
ZGVyIHRoZSBuZXh0IG9uZS4KKyAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJldlYkxheWVyVHJl
ZVJlbmRlcmVyOjpyZW5kZXJOZXh0RnJhbWUsIHRoaXMpKTsKK30KKwordm9pZCBXZWJMYXllclRy
ZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0
UHJveHkpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdFByb3h5LT5yZW5kZXJOZXh0RnJhbWUoKTsK
K30KKwordm9pZCBXZWJMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlUm9vdExheWVyKCkKK3sKKyAg
ICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fdGV4dHVyZU1h
cHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKFRl
eHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworCisgICAgbV9yb290TGF5ZXIgPSBjcmVhdGVMYXll
cihJbnZhbGlkV2ViTGF5ZXJJRCk7CisgICAgbV9yb290TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMo
ZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1f
cm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMCwgMCkpOworCisgICAg
Ly8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIHplcm8gc2l6ZSwgb3IgaXQgd291bGQg
YmUgb3B0aW1pemVkIG91dC4KKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShGbG9hdFNpemUoMS4w
LCAxLjApKTsKKyAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNl
dFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKK30KKwordm9pZCBXZWJMYXll
clRyZWVSZW5kZXJlcjo6c3luY1JlbW90ZUNvbnRlbnQoKQoreworICAgIC8vIFdlIGVucXVldWUg
bWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBh
biBhY3RpdmUgR0wgY29udGV4dC4KKyAgICBlbnN1cmVSb290TGF5ZXIoKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9yZW5kZXJRdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgbV9y
ZW5kZXJRdWV1ZVtpXSgpOworCisgICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOworfQorCit2b2lk
IFdlYkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVzb3VyY2VzKCkKK3sKKyAgICBUZXh0dXJl
TWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOwor
CisgICAgaWYgKGxheWVyKQorICAgICAgICBsYXllci0+Y2xlYXJCYWNraW5nU3RvcmVzUmVjdXJz
aXZlKCk7CisKKyAgICBtX2RpcmVjdGx5Q29tcG9zaXRlZEltYWdlcy5jbGVhcigpOworICAgIG1f
dGV4dHVyZU1hcHBlci5jbGVhcigpOworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVm
ZmVycy5jbGVhcigpOworCisgICAgY2FsbE9uTWFpblRocmVhZChiaW5kKCZXZWJMYXllclRyZWVS
ZW5kZXJlcjo6cHVyZ2VCYWNraW5nU3RvcmVzLCB0aGlzKSk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJU
cmVlUmVuZGVyZXI6OnB1cmdlQmFja2luZ1N0b3JlcygpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVl
SG9zdFByb3h5KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RQcm94eS0+cHVyZ2VCYWNraW5nU3Rv
cmVzKCk7Cit9CisKK3ZvaWQgV2ViTGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCgpCit7CisgICAg
bV9sYXllclRyZWVIb3N0UHJveHkgPSAwOworfQorCit2b2lkIFdlYkxheWVyVHJlZVJlbmRlcmVy
OjphcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAg
bV9yZW5kZXJRdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViTGF5ZXJUcmVlUmVuZGVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42Yzc4ODY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkxheWVyVHJlZVJlbmRlcmVyLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgV2ViTGF5ZXJUcmVlUmVuZGVyZXJfaAorI2RlZmlu
ZSBXZWJMYXllclRyZWVSZW5kZXJlcl9oCisKKyNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykK
KworI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiV2ViTGF5
ZXJUcmVlSW5mby5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW5M
b29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
UHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgTGF5ZXJCYWNraW5n
U3RvcmU7CitjbGFzcyBMYXllclRyZWVIb3N0UHJveHk7CitjbGFzcyBXZWJMYXllckluZm87Citj
bGFzcyBXZWJMYXllclVwZGF0ZUluZm87CisKK2NsYXNzIFdlYkxheWVyVHJlZVJlbmRlcmVyIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdlYkxheWVyVHJlZVJlbmRlcmVyPiwgcHVibGlj
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIFdlYkxheWVyVHJl
ZVJlbmRlcmVyKExheWVyVHJlZUhvc3RQcm94eSopOworICAgIHZpcnR1YWwgfldlYkxheWVyVHJl
ZVJlbmRlcmVyKCk7CisgICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7CisgICAgdm9pZCBwYWlu
dFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHBhaW50VG9HcmFw
aGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7CisgICAg
dm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVj
dEZvclNjYWxpbmcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGZsb2F0KTsKKworICAgIHZvaWQg
ZGV0YWNoKCk7CisgICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYp
OworICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKKworICAgIHZvaWQgZGVsZXRlTGF5ZXIoV2Vi
TGF5ZXJJRCk7CisgICAgdm9pZCBzZXRSb290TGF5ZXJJRChXZWJMYXllcklEKTsKKyAgICB2b2lk
IHN5bmNMYXllclBhcmFtZXRlcnMoY29uc3QgV2ViTGF5ZXJJbmZvJik7CisgICAgdm9pZCBjcmVh
dGVUaWxlKFdlYkxheWVySUQsIGludCwgZmxvYXQgc2NhbGUpOworICAgIHZvaWQgcmVtb3ZlVGls
ZShXZWJMYXllcklELCBpbnQpOworICAgIHZvaWQgdXBkYXRlVGlsZShXZWJMYXllcklELCBpbnQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+KTsKKyAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7Cisg
ICAgdm9pZCBjcmVhdGVJbWFnZShpbnQ2NF90LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4p
OworICAgIHZvaWQgZGVzdHJveUltYWdlKGludDY0X3QpOworCitwcml2YXRlOgorICAgIFBhc3NP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gY3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCk7CisK
KyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoV2ViTGF5ZXJJRCBpZCkgeyBy
ZXR1cm4gKGlkID09IEludmFsaWRXZWJMYXllcklEKSA/IDAgOiBtX2xheWVycy5nZXQoaWQpOyB9
CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9yb290
TGF5ZXIuZ2V0KCk7IH0KKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudC4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3Rh
cnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5U3luY1JlcXVpcmVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvd0RlYnVnQm9yZGVycyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
c2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2
b2lkIGNhbGxPbk1haW5UcmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8V2ViTGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IExheWVyTWFw
OworICAgIFdlYkNvcmU6OkludFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OworICAgIGZsb2F0
IG1fY29udGVudHNTY2FsZTsKKworICAgIC8vIFJlbmRlciBxdWV1ZSBjYW4gYmUgYWNjZXNzZWQg
b255IGZyb20gbWFpbiB0aHJlYWQgb3IgdXBkYXRlUGFpbnROb2RlIGNhbGwgc3RhY2shCisgICAg
VmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBtX3JlbmRlclF1ZXVlOworCisjaWYgVVNFKFRFWFRV
UkVfTUFQUEVSKQorICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVN
YXBwZXI7CisgICAgUGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gZ2V0QmFja2luZ1N0b3Jl
KFdlYkxheWVySUQpOworICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1
cmVNYXBwZXJCYWNraW5nU3RvcmU+ID4gbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXM7CisgICAg
SGFzaFNldDxSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBl
bmRpbmdCdWZmZXJzOworI2VuZGlmCisKKyAgICB2b2lkIHNjaGVkdWxlV2ViVmlld1VwZGF0ZSgp
OworICAgIHZvaWQgc3luY2hyb25pemVWaWV3cG9ydCgpOworICAgIHZvaWQgYXNzaWduSW1hZ2VU
b0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBpbnQ2NF90IGltYWdlSUQpOworICAgIHZv
aWQgZW5zdXJlUm9vdExheWVyKCk7CisgICAgdm9pZCBlbnN1cmVMYXllcihXZWJMYXllcklEKTsK
KyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOworICAg
IHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsK
KworICAgIExheWVyVHJlZUhvc3RQcm94eSogbV9sYXllclRyZWVIb3N0UHJveHk7CisgICAgT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAgIFZlY3RvcjxXZWJM
YXllcklEPiBtX2xheWVyc1RvRGVsZXRlOworCisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAg
V2ViTGF5ZXJJRCBtX3Jvb3RMYXllcklEOworfTsKKworfTsKKworI2VuZGlmIC8vIFVTRShVSV9T
SURFX0NPTVBPU0lUSU5HKQorCisjZW5kaWYgLy8gV2ViTGF5ZXJUcmVlUmVuZGVyZXJfaAorCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJv
eHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvTGF5ZXJUcmVlSG9zdFByb3h5
UXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWZiOTk1Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9MYXllclRyZWVIb3N0UHJveHlRdC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw0MTcgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0KLSNp
bmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIkxheWVyQmFj
a2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCi0jaW5jbHVk
ZSAiTWFpblRocmVhZC5oIgotI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1ZGUgIlNoYXJl
YWJsZUJpdG1hcC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgi
Ci0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgotI2luY2x1ZGUgIldlYkxheWVyVHJlZUluZm8uaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKLSNpbmNsdWRlIDxPcGVuR0xTaGlt
cy5oPgotI2luY2x1ZGUgPFFEYXRlVGltZT4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1QYXNzT3duUHRyPEdyYXBoaWNzTGF5ZXI+IExheWVyVHJl
ZUhvc3RQcm94eTo6Y3JlYXRlTGF5ZXIoV2ViTGF5ZXJJRCBsYXllcklEKQotewotICAgIEdyYXBo
aWNzTGF5ZXIqIG5ld0xheWVyID0gbmV3IEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKHRoaXMp
OwotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihu
ZXdMYXllcik7Ci0gICAgbGF5ZXItPnNldFNob3VsZFVwZGF0ZUJhY2tpbmdTdG9yZUZyb21MYXll
cihmYWxzZSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ld0xheWVyKTsKLX0KLQotTGF5ZXJUcmVl
SG9zdFByb3h5OjpMYXllclRyZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0Fy
ZWFQcm94eSkKLSAgICA6IG1fZHJhd2luZ0FyZWFQcm94eShkcmF3aW5nQXJlYVByb3h5KQotICAg
ICwgbV9yb290TGF5ZXJJRCgwKQotewotfQotCi1MYXllclRyZWVIb3N0UHJveHk6On5MYXllclRy
ZWVIb3N0UHJveHkoKQotewotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHJlZW50
cmFudC4KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpwYWludFRvQ3VycmVudEdMQ29udGV4dChj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBG
bG9hdFJlY3QmIGNsaXBSZWN0KQotewotICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAg
ICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6
T3BlbkdMTW9kZSk7Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9k
ZSgpID09IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwotCi0gICAgc3luY1JlbW90ZUNvbnRl
bnQoKTsKLSAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7
Ci0gICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0
dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RM
YXllcik7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+
c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotICAgIG1fdGV4dHVyZU1h
cHBlci0+YmVnaW5QYWludGluZygpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uo
MCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgY2xpcFJlY3QpOwotCi0gICAgaWYgKGN1cnJlbnRSb290TGF5ZXItPm9wYWNpdHkoKSAhPSBv
cGFjaXR5IHx8IGN1cnJlbnRSb290TGF5ZXItPnRyYW5zZm9ybSgpICE9IG1hdHJpeCkgewotICAg
ICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgICAgICBjdXJy
ZW50Um9vdExheWVyLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKLSAgICAgICAgY3VycmVudFJvb3RM
YXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgfQotCi0g
ICAgbGF5ZXItPnBhaW50KCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7Ci0gICAg
bV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwotCi0gICAgc3luY0FuaW1hdGlvbnMoKTsK
LX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN5bmNBbmltYXRpb25zKCkKLXsKLSAgICBU
ZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVy
KCkpOwotICAgIEFTU0VSVChsYXllcik7Ci0KLSAgICBsYXllci0+c3luY0FuaW1hdGlvbnNSZWN1
cnNpdmVseSgpOwotICAgIGlmIChsYXllci0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0Fu
aW1hdGlvbnMoKSkKLSAgICAgICAgdXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVIb3N0UHJveHk6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoUVBhaW50ZXIqIHBhaW50ZXIpCi17
Ci0gICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRl
eHR1cmVNYXBwZXI6OmNyZWF0ZSgpOwotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2Vs
ZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpTb2Z0d2FyZU1vZGUpOwotICAgIHN5bmNS
ZW1vdGVDb250ZW50KCk7Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVy
ZU1hcHBlckxheWVyKHJvb3RMYXllcigpKTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQocGFpbnRlcik7Ci0g
ICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoJmdyYXBoaWNzQ29udGV4dCk7
Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7Ci0gICAgbV90ZXh0dXJlTWFw
cGVyLT5iaW5kU3VyZmFjZSgwKTsKLSAgICBsYXllci0+cGFpbnQoKTsKLSAgICBtX3RleHR1cmVN
YXBwZXItPmVuZFBhaW50aW5nKCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0Nv
bnRleHQoMCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgp
Ci17Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT51cGRhdGVWaWV3cG9ydCgpOwotfQotCi12b2lk
IExheWVyVHJlZUhvc3RQcm94eTo6c3luY0xheWVyUGFyYW1ldGVycyhjb25zdCBXZWJMYXllcklu
Zm8mIGxheWVySW5mbykKLXsKLSAgICBXZWJMYXllcklEIGlkID0gbGF5ZXJJbmZvLmlkOwotICAg
IGVuc3VyZUxheWVyKGlkKTsKLSAgICBMYXllck1hcDo6aXRlcmF0b3IgaXQgPSBtX2xheWVycy5m
aW5kKGlkKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGl0LT5zZWNvbmQ7Ci0gICAgYm9v
bCBuZWVkc1RvVXBkYXRlSW1hZ2VUaWxlcyA9IGxheWVySW5mby5pbWFnZUlzVXBkYXRlZCB8fCAo
bGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCAhPSBsYXllci0+Y29udGVudHNSZWN0KCkgJiYgbGF5ZXJJ
bmZvLmltYWdlQmFja2luZ1N0b3JlSUQpOwotCi0gICAgbGF5ZXItPnNldE5hbWUobGF5ZXJJbmZv
Lm5hbWUpOwotCi0gICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGxheWVyQnlJRChsYXll
ckluZm8ucmVwbGljYSkpOwotICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIobGF5ZXJCeUlEKGxheWVy
SW5mby5tYXNrKSk7Ci0KLSAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7Ci0g
ICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOwotICAgIGxheWVyLT5zZXRUcmFuc2Zv
cm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7Ci0gICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVy
SW5mby5hbmNob3JQb2ludCk7Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVy
SW5mby5jaGlsZHJlblRyYW5zZm9ybSk7Ci0gICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0
eShsYXllckluZm8uYmFja2ZhY2VWaXNpYmxlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNPcGFx
dWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNSZWN0
KGxheWVySW5mby5jb250ZW50c1JlY3QpOwotICAgIGxheWVyLT5zZXREcmF3c0NvbnRlbnQobGF5
ZXJJbmZvLmRyYXdzQ29udGVudCk7Ci0KLSAgICBpZiAobmVlZHNUb1VwZGF0ZUltYWdlVGlsZXMp
Ci0gICAgICAgIGFzc2lnbkltYWdlVG9MYXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlQmFja2lu
Z1N0b3JlSUQpOwotCi0gICAgLy8gTmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgotICAg
IGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKGxheWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDog
bGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMpOwotICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5m
by5vcGFjaXR5KTsKLSAgICBsYXllci0+c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZl
czNEKTsKLSAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsYXllckluZm8uY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgV2ViTGF5ZXJJRCBjaGlsZElEID0gbGF5ZXJJbmZvLmNoaWxkcmVuW2ldOwotICAgICAgICBH
cmFwaGljc0xheWVyKiBjaGlsZCA9IGxheWVyQnlJRChjaGlsZElEKTsKLSAgICAgICAgaWYgKCFj
aGlsZCkgewotICAgICAgICAgICAgY2hpbGQgPSBjcmVhdGVMYXllcihjaGlsZElEKS5sZWFrUHRy
KCk7Ci0gICAgICAgICAgICBtX2xheWVycy5hZGQoY2hpbGRJRCwgY2hpbGQpOwotICAgICAgICB9
Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7Ci0gICAgfQotICAgIGxheWVyLT5zZXRD
aGlsZHJlbihjaGlsZHJlbik7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheWVySW5m
by5hbmltYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdlYktpdDo6V2ViTGF5
ZXJBbmltYXRpb24gYW5pbSA9IGxheWVySW5mby5hbmltYXRpb25zW2ldOwotCi0gICAgICAgIHN3
aXRjaCAoYW5pbS5vcGVyYXRpb24pIHsKLSAgICAgICAgY2FzZSBXZWJLaXQ6OldlYkxheWVyQW5p
bWF0aW9uOjpBZGRBbmltYXRpb246IHsKLSAgICAgICAgICAgIGNvbnN0IEludFNpemUgYm94U2l6
ZSA9IGFuaW0uYm94U2l6ZTsKLSAgICAgICAgICAgIGxheWVyLT5hZGRBbmltYXRpb24oYW5pbS5r
ZXlmcmFtZUxpc3QsIGJveFNpemUsIGFuaW0uYW5pbWF0aW9uLmdldCgpLCBhbmltLm5hbWUsIGFu
aW0uc3RhcnRUaW1lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgV2ViS2l0OjpXZWJMYXllckFuaW1hdGlvbjo6UmVtb3ZlQW5pbWF0aW9uOgotICAgICAgICAg
ICAgbGF5ZXItPnJlbW92ZUFuaW1hdGlvbihhbmltLm5hbWUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgV2ViS2l0OjpXZWJMYXllckFuaW1hdGlvbjo6UGF1c2VBbmltYXRpb246
Ci0gICAgICAgICAgICBkb3VibGUgb2Zmc2V0ID0gV1RGOjpjdXJyZW50VGltZSgpIC0gYW5pbS5z
dGFydFRpbWU7Ci0gICAgICAgICAgICBsYXllci0+cGF1c2VBbmltYXRpb24oYW5pbS5uYW1lLCBv
ZmZzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
bGF5ZXJJbmZvLmlzUm9vdExheWVyICYmIG1fcm9vdExheWVySUQgIT0gaWQpCi0gICAgICAgIHNl
dFJvb3RMYXllcklEKGlkKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUxh
eWVyKFdlYkxheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxh
eWVyQnlJRChsYXllcklEKTsKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBsYXllci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fbGF5ZXJzLnJlbW92ZShsYXllcklE
KTsKLSAgICBkZWxldGUgbGF5ZXI7Ci19Ci0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmVu
c3VyZUxheWVyKFdlYkxheWVySUQgaWQpCi17Ci0gICAgLy8gV2UgaGF2ZSB0byBsZWFrIHRoZSBu
ZXcgbGF5ZXIncyBwb2ludGVyIGFuZCBtYW5hZ2UgaXQgb3Vyc2VsdmVzLAotICAgIC8vIGJlY2F1
c2UgT3duUHRyIGlzIG5vdCBjb3B5YWJsZS4KLSAgICBpZiAobV9sYXllcnMuZmluZChpZCkgPT0g
bV9sYXllcnMuZW5kKCkpCi0gICAgICAgIG1fbGF5ZXJzLmFkZChpZCwgY3JlYXRlTGF5ZXIoaWQp
LmxlYWtQdHIoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290TGF5ZXJJ
RChXZWJMYXllcklEIGxheWVySUQpCi17Ci0gICAgaWYgKGxheWVySUQgPT0gbV9yb290TGF5ZXJJ
RCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7Ci0KLSAg
ICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKLQotICAgIGlmICghbGF5ZXJJRCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQo
bGF5ZXJJRCk7Ci0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yb290
TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKLX0KLQotUGFzc1JlZlB0cjxMYXllckJhY2tpbmdTdG9y
ZT4gTGF5ZXJUcmVlSG9zdFByb3h5OjpnZXRCYWNraW5nU3RvcmUoV2ViTGF5ZXJJRCBpZCkKLXsK
LSAgICBlbnN1cmVMYXllcihpZCk7Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRv
VGV4dHVyZU1hcHBlckxheWVyKGxheWVyQnlJRChpZCkpOwotICAgIFJlZlB0cjxMYXllckJhY2tp
bmdTdG9yZT4gYmFja2luZ1N0b3JlID0gc3RhdGljX2Nhc3Q8TGF5ZXJCYWNraW5nU3RvcmUqPihs
YXllci0+YmFja2luZ1N0b3JlKCkuZ2V0KCkpOwotICAgIGlmICghYmFja2luZ1N0b3JlKSB7Ci0g
ICAgICAgIGJhY2tpbmdTdG9yZSA9IExheWVyQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICAg
ICAgbGF5ZXItPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUuZ2V0KCkpOwotICAgIH0KLSAg
ICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKLSAgICByZXR1cm4gYmFja2luZ1N0b3JlOwotfQotCi12
b2lkIExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGlu
dCB0aWxlSUQsIGZsb2F0IHNjYWxlKQotewotICAgIGdldEJhY2tpbmdTdG9yZShsYXllcklEKS0+
Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6
OnJlbW92ZVRpbGUoV2ViTGF5ZXJJRCBsYXllcklELCBpbnQgdGlsZUlEKQotewotICAgIGdldEJh
Y2tpbmdTdG9yZShsYXllcklEKS0+cmVtb3ZlVGlsZSh0aWxlSUQpOwotfQotCi12b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6dXBkYXRlVGlsZShXZWJMYXllcklEIGxheWVySUQsIGludCB0aWxlSUQs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QsIFBh
c3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFwKQotewotICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7Ci0gICAgUmVmUHRyPExheWVyQmFja2lu
Z1N0b3JlPiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5nU3RvcmUobGF5ZXJJRCk7Ci0gICAgYmFj
a2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwgc291cmNlUmVjdCwgdGFyZ2V0UmVjdCwgYml0
bWFwLmdldCgpKTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJh
Y2tpbmdTdG9yZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZShp
bnQ2NF90IGltYWdlSUQsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiB3ZWFrQml0bWFwKQot
ewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHdlYWtCaXRtYXA7Ci0gICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJUaWxlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gVGV4
dHVyZU1hcHBlclRpbGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKTsKLSAgICBiYWNraW5nU3RvcmUt
PnVwZGF0ZUNvbnRlbnRzKG1fdGV4dHVyZU1hcHBlci5nZXQoKSwgYml0bWFwLT5jcmVhdGVJbWFn
ZSgpLmdldCgpLCBCaXRtYXBUZXh0dXJlOjpCR1JBRm9ybWF0KTsKLSAgICBtX2RpcmVjdGx5Q29t
cG9zaXRlZEltYWdlcy5zZXQoaW1hZ2VJRCwgYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBMYXll
clRyZWVIb3N0UHJveHk6OmRlc3Ryb3lJbWFnZShpbnQ2NF90IGltYWdlSUQpCi17Ci0gICAgbV9k
aXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMucmVtb3ZlKGltYWdlSUQpOwotfQotCi12b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6YXNzaWduSW1hZ2VUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBp
bnQ2NF90IGltYWdlSUQpCi17Ci0gICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8VGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2RpcmVjdGx5Q29tcG9zaXRlZElt
YWdlcy5maW5kKGltYWdlSUQpOwotICAgIEFTU0VSVChpdCAhPSBtX2RpcmVjdGx5Q29tcG9zaXRl
ZEltYWdlcy5lbmQoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+c2Vjb25k
LmdldCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnN3YXBCdWZmZXJzKCkKLXsK
LSAgICBIYXNoU2V0PFJlZlB0cjxMYXllckJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5kID0g
bV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNl
dDxSZWZQdHI8TGF5ZXJCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3Rv
cmVzV2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
KCppdCktPnN3YXBCdWZmZXJzKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0KLSAgICBtX2JhY2tp
bmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKLX0KLQotdm9pZCBMYXllclRyZWVI
b3N0UHJveHk6OmZsdXNoTGF5ZXJDaGFuZ2VzKCkKLXsKLSAgICBtX3Jvb3RMYXllci0+c3luY0Nv
bXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0KCkpOwotICAgIHN3YXBCdWZmZXJzKCk7Ci0KLSAgICAv
LyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMgd2F5IGZvciB0aGUgc2NyZWVuLCB0
ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQgb25lLgotICAgIG1fZHJhd2lu
Z0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkxheWVyVHJlZUhv
c3Q6OlJlbmRlck5leHRGcmFtZSgpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFnZUlE
KCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6ZW5zdXJlUm9vdExheWVyKCkKLXsK
LSAgICBpZiAobV9yb290TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3Jvb3RMYXllciA9
IGNyZWF0ZUxheWVyKEludmFsaWRXZWJMYXllcklEKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0TWFz
a3NUb0JvdW5kcyhmYWxzZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxz
ZSk7Ci0gICAgbV9yb290TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgwLCAwLCAw
KSk7Ci0KLSAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90IGhhdmUgemVybyBzaXplLCBv
ciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgotICAgIG1fcm9vdExheWVyLT5zZXRTaXplKEZs
b2F0U2l6ZSgxLjAsIDEuMCkpOwotICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBt
X3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3Bl
bkdMTW9kZSk7Ci0gICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkpLT5z
ZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlSG9zdFByb3h5OjpzeW5jUmVtb3RlQ29udGVudCgpCi17Ci0gICAgLy8gV2UgZW5xdWV1ZSBt
ZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJlIGFu
IGFjdGl2ZSBHTCBjb250ZXh0LgotICAgIGVuc3VyZVJvb3RMYXllcigpOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3JlbmRlclF1ZXVlLnNpemUoKTsgKytpKQotICAgICAgICBtX3Jl
bmRlclF1ZXVlW2ldKCk7Ci0KLSAgICBtX3JlbmRlclF1ZXVlLmNsZWFyKCk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlSG9zdFByb3h5OjpkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+
JiBmdW5jdGlvbikKLXsKLSAgICBtX3JlbmRlclF1ZXVlLmFwcGVuZChmdW5jdGlvbik7Ci0gICAg
dXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRp
bGVGb3JMYXllcihpbnQgbGF5ZXJJRCwgaW50IHRpbGVJRCwgY29uc3QgV2ViS2l0OjpVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvKQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhv
c3RQcm94eTo6Y3JlYXRlVGlsZSwgdGhpcywgbGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnVw
ZGF0ZVNjYWxlRmFjdG9yKSk7Ci0gICAgdXBkYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJ
RCwgdXBkYXRlSW5mbyk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxl
Rm9yTGF5ZXIoaW50IGxheWVySUQsIGludCB0aWxlSUQsIGNvbnN0IFdlYktpdDo6VXBkYXRlSW5m
byYgdXBkYXRlSW5mbykKLXsKLSAgICBBU1NFUlQodXBkYXRlSW5mby51cGRhdGVSZWN0cy5zaXpl
KCkgPT0gMSk7Ci0gICAgSW50UmVjdCBzb3VyY2VSZWN0ID0gdXBkYXRlSW5mby51cGRhdGVSZWN0
cy5maXJzdCgpOwotICAgIEludFJlY3QgdGFyZ2V0UmVjdCA9IHVwZGF0ZUluZm8udXBkYXRlUmVj
dEJvdW5kczsKLSAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVC
aXRtYXA6OmNyZWF0ZSh1cGRhdGVJbmZvLmJpdG1hcEhhbmRsZSk7Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlLCB0aGlzLCBsYXllcklELCB0
aWxlSUQsIHNvdXJjZVJlY3QsIHRhcmdldFJlY3QsIGJpdG1hcCkpOwotfQotCi12b2lkIExheWVy
VHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKGludCBsYXllcklELCBpbnQgdGlsZUlE
KQotewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6cmVtb3Zl
VGlsZSwgdGhpcywgbGF5ZXJJRCwgdGlsZUlEKSk7Ci19Ci0KLQotdm9pZCBMYXllclRyZWVIb3N0
UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUxheWVyLCB0aGlzLCBp
ZCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIoV2ViTGF5ZXJJRCBpZCkKLXsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVI
b3N0UHJveHk6OnNldFJvb3RMYXllcklELCB0aGlzLCBpZCkpOwotfQotCi12b2lkIExheWVyVHJl
ZUhvc3RQcm94eTo6c3luY0NvbXBvc2l0aW5nTGF5ZXJTdGF0ZShjb25zdCBXZWJMYXllckluZm8m
IGluZm8pCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5Ojpz
eW5jTGF5ZXJQYXJhbWV0ZXJzLCB0aGlzLCBpbmZvKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpkaWRSZW5kZXJGcmFtZSgpCi17Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlSG9zdFByb3h5OjpmbHVzaExheWVyQ2hhbmdlcywgdGhpcykpOwotfQotCi12b2lkIExh
eWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlRGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBr
ZXksIGNvbnN0IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGhhbmRsZSkKLXsKLSAg
ICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZShoYW5kbGUpOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZUhvc3RQcm94eTo6
Y3JlYXRlSW1hZ2UsIHRoaXMsIGtleSwgYml0bWFwKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlSG9z
dFByb3h5OjpkZXN0cm95RGlyZWN0bHlDb21wb3NpdGVkSW1hZ2UoaW50NjRfdCBrZXkpCi17Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95SW1hZ2Us
IHRoaXMsIGtleSkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6c2V0VmlzaWJsZUNv
bnRlbnRzUmVjdEZvclBhbm5pbmcoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2lu
dCYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+
cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpTZXRWaXNpYmxlQ29udGVu
dHNSZWN0Rm9yUGFubmluZyhyZWN0LCB0cmFqZWN0b3J5VmVjdG9yKSwgbV9kcmF3aW5nQXJlYVBy
b3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVIb3N0UHJveHk6OnNl
dFZpc2libGVDb250ZW50c1JlY3RGb3JTY2FsaW5nKGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0
IHNjYWxlKQotewotICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Ci0gICAgbV9jb250
ZW50c1NjYWxlID0gc2NhbGU7Ci0gICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nl
c3MoKS0+c2VuZChNZXNzYWdlczo6TGF5ZXJUcmVlSG9zdDo6U2V0VmlzaWJsZUNvbnRlbnRzUmVj
dEZvclNjYWxpbmcocmVjdCwgc2NhbGUpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFn
ZUlEKCkpOwotfQotCi12b2lkIExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VHTFJlc291cmNlcygp
Ci17Ci0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVy
KHJvb3RMYXllcigpKTsKLQotICAgIGlmIChsYXllcikKLSAgICAgICAgbGF5ZXItPmNsZWFyQmFj
a2luZ1N0b3Jlc1JlY3Vyc2l2ZSgpOwotCi0gICAgbV9kaXJlY3RseUNvbXBvc2l0ZWRJbWFnZXMu
Y2xlYXIoKTsKLSAgICBtX3RleHR1cmVNYXBwZXIuY2xlYXIoKTsKLSAgICBtX2JhY2tpbmdTdG9y
ZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKLSAgICBtX2RyYXdpbmdBcmVhUHJveHktPnBh
Z2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tp
bmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKLX0KLQot
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ5
MTUyYTUuLjFlMzYxY2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0xMCAgVmlhdGNoZXNsYXYgT3N0YXBl
bmtvICA8b3N0YXBlbmtvLnZpYXRjaGVzbGF2QG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFtX
SzJdIFN1cHBvcnQgdGhyZWFkZWQgcmVuZGVyZXIgaW4gV0syCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjY2MQorCisgICAgICAgIFJlbW92ZSBkaXNh
Ymxpbmcgb2YgdGhyZWFkZWQgcmVuZGVyaW5nLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5vYW0g
Um9zZW50aGFsLgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvbWFpbi5jcHA6CisgICAgICAg
IChtYWluKToKKwogMjAxMi0wMy0wNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gcmVtb3ZlIHdlYmtpdHB5IGRlcGVuZGVuY3kgaW4gcnVu
LWd0ay10ZXN0cwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvbWFpbi5jcHAgYi9U
b29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAppbmRleCBmZWFlMTRhLi4zNjYzNzczIDEwMDY0
NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9tYWluLmNwcAorKysgYi9Ub29scy9NaW5pQnJv
d3Nlci9xdC9tYWluLmNwcApAQCAtMzksOSArMzksNiBAQAogCiBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiB7Ci0gICAgLy8gRklYTUU6IFdlIG11c3QgYWRkIHN1cHBvcnQgZm9yIHRo
ZSB0aHJlYWRlZCByZW5kZXJpbmcgYXMgaXQgaXMgdGhlIGRlZmF1bHQuCi0gICAgcXB1dGVudigi
UU1MX05PX1RIUkVBREVEX1JFTkRFUkVSIiwgUUJ5dGVBcnJheSgiMSIpKTsKLQogICAgIE1pbmlC
cm93c2VyQXBwbGljYXRpb24gYXBwKGFyZ2MsIGFyZ3YpOwogCiAgICAgaWYgKGFwcC5pc1JvYm90
aXplZCgpKSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>