<?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>83033</bug_id>
          
          <creation_ts>2012-04-03 08:09:32 -0700</creation_ts>
          <short_desc>[Qt][WK2] Make the WebView a subclass of Flickable</short_desc>
          <delta_ts>2012-04-04 06:54:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>
          
          <blocked>76773</blocked>
    
    <blocked>82960</blocked>
    
    <blocked>83044</blocked>
    
    <blocked>83091</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andras Becsi">abecsi</reporter>
          <assigned_to name="Andras Becsi">abecsi</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>hugo.lima</cc>
    
    <cc>jesus</cc>
    
    <cc>jturcotte</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lauro.neto</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>ossy</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>594486</commentid>
    <comment_count>0</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-03 08:09:32 -0700</bug_when>
    <thetext>The current experiment with the internal Flickable instance showed that the approach of hiding the Flickable raises more problems than it solves and had the conclusion that there is no way around the publicly inheritance from QQuickFlickable.

This also means a dependency to quick-private in all projects that include the WebView header.

This change solves several issues related to event propagation, orientation and integration of the WebView item with other QML items.
The drawback is the dependency to private C++ API of the QtDeclarative module, which the WebView already has in some extent because it makes use of the Qt scene graph render-nodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594488</commentid>
    <comment_count>1</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-03 08:10:51 -0700</bug_when>
    <thetext>The related discussion thread can be found here: https://lists.webkit.org/pipermail/webkit-qt/2012-March/002592.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594584</commentid>
    <comment_count>2</comment_count>
      <attachid>135350</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-03 10:03:59 -0700</bug_when>
    <thetext>Created attachment 135350
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594617</commentid>
    <comment_count>3</comment_count>
      <attachid>135350</attachid>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-04-03 10:33:51 -0700</bug_when>
    <thetext>Comment on attachment 135350
proposed patch

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

Cool stuff :)
Here are some minor comments, looks good to me otherwise.

&gt; Source/WebKit2/ChangeLog:23
&gt; +        benefits of controlling the exposed API, therefor the experiment had

therefor*e*

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:528
&gt; +    // Disable mouse events on the flickable web view so we do not
&gt; +    // select text during pan gestures on platforms which send both
&gt; +    // touch and mouse events simultaneously.
&gt; +    q-&gt;setAcceptedMouseButtons(Qt::NoButton);
&gt; +    q-&gt;setAcceptHoverEvents(false);

I guess this should be temporary? Anyhow it could go in the QQuickWebViewFlickablePrivate constructor as this doesn&apos;t relate to web process stuff.

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1394
&gt; +    QMouseEvent mouseEvent(QEvent::MouseButtonPress, position, Qt::NoButton, Qt::NoButton, Qt::NoModifier);

Just to make it relatively more future proof, would Qt::LeftButton instead of Qt::NoButton do the job too?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:208
&gt; +    void handlePress(const QPointF&amp; position, qint64 eventTimestampMillis);
&gt; +    void handleMove(const QPointF&amp; position, qint64 eventTimestampMillis);
&gt; +    void handleRelease(const QPointF&amp; position, qint64 eventTimestampMillis);

Those should probably be hidden behind QQuickWebViewPrivate.
Could you also rename them to something that tells that those event goes to flickable? Something like delegatePressToFlickable, or flickableMousePress maybe.

&gt; Source/WebKit2/UIProcess/qt/QtPanGestureRecognizer.cpp:79
&gt; -            interactionEngine()-&gt;panGestureStarted(m_touchBegin.data());
&gt; +            interactionEngine()-&gt;panGestureStarted(touchPoint.pos(), event-&gt;timestamp());

You could probably get rid of m_touchBegin.

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:-259
&gt; -    QPointF newPos = -m_content-&gt;pos();

Ugh, we really had both newPos and newPosition variables in this method?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594637</commentid>
    <comment_count>4</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-03 10:49:56 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 135350 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135350&amp;action=review
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:528
&gt; &gt; +    // Disable mouse events on the flickable web view so we do not
&gt; &gt; +    // select text during pan gestures on platforms which send both
&gt; &gt; +    // touch and mouse events simultaneously.
&gt; &gt; +    q-&gt;setAcceptedMouseButtons(Qt::NoButton);
&gt; &gt; +    q-&gt;setAcceptHoverEvents(false);
&gt; 
&gt; I guess this should be temporary? Anyhow it could go in the QQuickWebViewFlickablePrivate constructor as this doesn&apos;t relate to web process stuff.

Yes, this is temporal until Shawn&apos;s event propagation patch lands to Qt. We can remove it as soon as our Qt version has that patch.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1394
&gt; &gt; +    QMouseEvent mouseEvent(QEvent::MouseButtonPress, position, Qt::NoButton, Qt::NoButton, Qt::NoModifier);
&gt; 
&gt; Just to make it relatively more future proof, would Qt::LeftButton instead of Qt::NoButton do the job too?

Sure. Since we bypass the canvas with the current implementation of Flickable only the position an the timestamp matter, but this could change, so you are right.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:208
&gt; &gt; +    void handlePress(const QPointF&amp; position, qint64 eventTimestampMillis);
&gt; &gt; +    void handleMove(const QPointF&amp; position, qint64 eventTimestampMillis);
&gt; &gt; +    void handleRelease(const QPointF&amp; position, qint64 eventTimestampMillis);
&gt; 
&gt; Those should probably be hidden behind QQuickWebViewPrivate.
&gt; Could you also rename them to something that tells that those event goes to flickable? Something like delegatePressToFlickable, or flickableMousePress maybe.

They are already private inside the WebView, and are used internally in the interaction engine.

Do you think that making the private class accessible from the interaction engine would be better?

But sure, I can rename them.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/QtPanGestureRecognizer.cpp:79
&gt; &gt; -            interactionEngine()-&gt;panGestureStarted(m_touchBegin.data());
&gt; &gt; +            interactionEngine()-&gt;panGestureStarted(touchPoint.pos(), event-&gt;timestamp());
&gt; 
&gt; You could probably get rid of m_touchBegin.

Yes, that&apos;s part of the gesture recognizer refactoring. I didn&apos;t want to touch it in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594686</commentid>
    <comment_count>5</comment_count>
    <who name="Lauro Moura Maranhao Neto">lauro.neto</who>
    <bug_when>2012-04-03 11:34:01 -0700</bug_when>
    <thetext>Tested this patch on a N9 with snowshoe and the panning orientation issue is gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>594704</commentid>
    <comment_count>6</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-04-03 11:55:48 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:208
&gt; &gt; &gt; +    void handlePress(const QPointF&amp; position, qint64 eventTimestampMillis);
&gt; &gt; &gt; +    void handleMove(const QPointF&amp; position, qint64 eventTimestampMillis);
&gt; &gt; &gt; +    void handleRelease(const QPointF&amp; position, qint64 eventTimestampMillis);
&gt; &gt; 
&gt; &gt; Those should probably be hidden behind QQuickWebViewPrivate.
&gt; &gt; Could you also rename them to something that tells that those event goes to flickable? Something like delegatePressToFlickable, or flickableMousePress maybe.
&gt; 
&gt; They are already private inside the WebView, and are used internally in the interaction engine.
&gt; 
&gt; Do you think that making the private class accessible from the interaction engine would be better?
&gt; 
&gt; But sure, I can rename them.
&gt; 

Usually we try to make sure that API classes contain only useful public methods, and hide all private implementation methods in the private class to keep the public one clean and help maintaining binary compatibility. We&apos;re not planning to make the class public yet so it doesn&apos;t matter so much, but I think we should keep it clean anyhow to make it easy if we decide to do so at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595300</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-04-04 01:14:10 -0700</bug_when>
    <thetext>Laszlo, do you think this is something you guys can do, too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595303</commentid>
    <comment_count>8</comment_count>
      <attachid>135350</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-04 01:24:58 -0700</bug_when>
    <thetext>Comment on attachment 135350
proposed patch

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

&gt; Source/WebKit2/ChangeLog:25
&gt; +        the conclusion that there is no way around the public inheritance from
&gt; +        QQuickFlickable.

Which I think is a totally sane approach :-)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:78
&gt; +    , m_useDefaultContentItemSize(true)

Wasn&apos;t the old name better?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:524
&gt; +    // Disable mouse events on the flickable web view so we do not

I would add FIXME: Temporary workaround code which should be removed when bug #bbb is fixed

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:780
&gt; +void QQuickWebViewExperimental::setUseDefaultContentItemSize(bool enable)

Any example on how this should be used?

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1381
&gt; +QPointF QQuickWebView::contentPos() const

AS these are not in the flickable API do they make sense? Why isn&apos;t contentX and contentY enough?

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h:208
&gt;&gt;&gt; +    void handleRelease(const QPointF&amp; position, qint64 eventTimestampMillis);
&gt;&gt; 
&gt;&gt; Those should probably be hidden behind QQuickWebViewPrivate.
&gt;&gt; Could you also rename them to something that tells that those event goes to flickable? Something like delegatePressToFlickable, or flickableMousePress maybe.
&gt; 
&gt; They are already private inside the WebView, and are used internally in the interaction engine.
&gt; 
&gt; Do you think that making the private class accessible from the interaction engine would be better?
&gt; 
&gt; But sure, I can rename them.

flickableMousePress would be quite clear

&gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:467
&gt; +    m_viewport-&gt;handlePress(position, eventTimestampMillis);

Why not just have handlePress implemented here in the engine? why pass it to the m_viewport? I mean all you need to call here is m_viewport-&gt;mousePressEvent(&amp;mouseEvent);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595400</commentid>
    <comment_count>9</comment_count>
      <attachid>135554</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-04 04:14:17 -0700</bug_when>
    <thetext>Created attachment 135554
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595403</commentid>
    <comment_count>10</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-04 04:18:07 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; Usually we try to make sure that API classes contain only useful public methods, and hide all private implementation methods in the private class to keep the public one clean and help maintaining binary compatibility. We&apos;re not planning to make the class public yet so it doesn&apos;t matter so much, but I think we should keep it clean anyhow to make it easy if we decide to do so at some point.

The functions have to call the base class implementations of a virtual function, and the QQuickWebViewPrivate class can not access this base implementation in QQuickFlickable, so these calls have to be in the QQuickWebView class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595407</commentid>
    <comment_count>11</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-04 04:27:15 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 135350 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135350&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:25
&gt; &gt; +        the conclusion that there is no way around the public inheritance from
&gt; &gt; +        QQuickFlickable.
&gt; 
&gt; Which I think is a totally sane approach :-)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:78
&gt; &gt; +    , m_useDefaultContentItemSize(true)
&gt; 
&gt; Wasn&apos;t the old name better?

Since we do not have glue code any more I had to expose the property in experimental, else we would need to do:

contentWidth: experimental.page.width
contentHeight: experimental.page.height

Since this is how the flickable API works. But for the WebView this behaviour is the default. If the user wants to have additional items on the contentItem, he has to set

experimental.useDefaultContentItemSize = false

and set the width and height if he wants to add other items to the Flickable.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:524
&gt; &gt; +    // Disable mouse events on the flickable web view so we do not
&gt; 
&gt; I would add FIXME: Temporary workaround code which should be removed when bug #bbb is fixed
&gt; 

Done.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:780
&gt; &gt; +void QQuickWebViewExperimental::setUseDefaultContentItemSize(bool enable)
&gt; 
&gt; Any example on how this should be used?

See above.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1381
&gt; &gt; +QPointF QQuickWebView::contentPos() const
&gt; 
&gt; AS these are not in the flickable API do they make sense? Why isn&apos;t contentX and contentY enough?

I kept these, since else we would need the same boilerplate code in each function in the interaction engine, which sets the position explicitly.
These are not exposed in QML.

&gt; &gt; Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp:467
&gt; &gt; +    m_viewport-&gt;handlePress(position, eventTimestampMillis);
&gt; 
&gt; Why not just have handlePress implemented here in the engine? why pass it to the m_viewport? I mean all you need to call here is m_viewport-&gt;mousePressEvent(&amp;mouseEvent);

This would trigger an infinite loop, since it would send the event to the web process.
We intercep the events to the flickable, and only send mouse events when we want to pan.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595411</commentid>
    <comment_count>12</comment_count>
      <attachid>135554</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-04 04:34:17 -0700</bug_when>
    <thetext>Comment on attachment 135554
proposed patch

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

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1410
&gt; +void QQuickWebView::handleFlickableMousePress(const QPointF&amp; position, qint64 eventTimestampMillis)
&gt; +{
&gt; +    QMouseEvent mouseEvent(QEvent::MouseButtonPress, position, Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
&gt; +    mouseEvent.setTimestamp(eventTimestampMillis);
&gt; +    QQuickFlickable::mousePressEvent(&amp;mouseEvent);
&gt; +}

so from the InteractionEngine you call this (handleFlickableMousePress)

How is that different that

InteractionEngine::... {
    QMouseEvent mouseEvent(QEvent::MouseButtonPress, position, Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
    mouseEvent.setTimestamp(eventTimestampMillis);
    m_viewport-&gt;mousePressEvent(&amp;mouseEvent);
}

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595416</commentid>
    <comment_count>13</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-04 04:47:02 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 135554 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=135554&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1410
&gt; &gt; +void QQuickWebView::handleFlickableMousePress(const QPointF&amp; position, qint64 eventTimestampMillis)
&gt; &gt; +{
&gt; &gt; +    QMouseEvent mouseEvent(QEvent::MouseButtonPress, position, Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
&gt; &gt; +    mouseEvent.setTimestamp(eventTimestampMillis);
&gt; &gt; +    QQuickFlickable::mousePressEvent(&amp;mouseEvent);
&gt; &gt; +}
&gt; 
&gt; so from the InteractionEngine you call this (handleFlickableMousePress)
&gt; 
&gt; How is that different that
&gt; 
&gt; InteractionEngine::... {
&gt;     QMouseEvent mouseEvent(QEvent::MouseButtonPress, position, Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
&gt;     mouseEvent.setTimestamp(eventTimestampMillis);
&gt;     m_viewport-&gt;mousePressEvent(&amp;mouseEvent);
&gt; }
&gt; 
&gt; ?
m_viewport-&gt;mousePressEvent(&amp;mouseEvent) will send the event to the web process, and _not_ to the Flickable.
That is the whole point of the subclassing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595432</commentid>
    <comment_count>14</comment_count>
      <attachid>135554</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-04 05:13:14 -0700</bug_when>
    <thetext>Comment on attachment 135554
proposed patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:1410
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; so from the InteractionEngine you call this (handleFlickableMousePress)
&gt;&gt; 
&gt;&gt; How is that different that
&gt;&gt; 
&gt;&gt; InteractionEngine::... {
&gt;&gt;     QMouseEvent mouseEvent(QEvent::MouseButtonPress, position, Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
&gt;&gt;     mouseEvent.setTimestamp(eventTimestampMillis);
&gt;&gt;     m_viewport-&gt;mousePressEvent(&amp;mouseEvent);
&gt;&gt; }
&gt;&gt; 
&gt;&gt; ?
&gt; 
&gt; m_viewport-&gt;mousePressEvent(&amp;mouseEvent) will send the event to the web process, and _not_ to the Flickable.
&gt; That is the whole point of the subclassing.

qobject_cast&lt;QQuickFlickable&gt;(m_viewport)-&gt;mousePressEvent(&amp;mouseEvent) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595438</commentid>
    <comment_count>15</comment_count>
      <attachid>135554</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-04 05:21:25 -0700</bug_when>
    <thetext>Comment on attachment 135554
proposed patch

Clearing flags on attachment: 135554

Committed r113172: &lt;http://trac.webkit.org/changeset/113172&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595439</commentid>
    <comment_count>16</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-04 05:21:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595440</commentid>
    <comment_count>17</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-04 05:23:23 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 135554 [details])
&gt; &gt; m_viewport-&gt;mousePressEvent(&amp;mouseEvent) will send the event to the web process, and _not_ to the Flickable.
&gt; &gt; That is the whole point of the subclassing.
&gt; 
&gt; qobject_cast&lt;QQuickFlickable&gt;(m_viewport)-&gt;mousePressEvent(&amp;mouseEvent) ?

mousePressEvent and co. are virtual functions, so calling them on a base class pointer would not help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595477</commentid>
    <comment_count>18</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-04 06:16:49 -0700</bug_when>
    <thetext>Ossy, if the next update is comming please make sure that the patch from http://codereview.qt-project.org/22137 is also in the hash.

Until then there will be warnings on the MiniBrowser console for touch release, about the WebView not being the mouse grabber item.
This warning is harmless, and will disappear with the above patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>595507</commentid>
    <comment_count>19</comment_count>
    <who name="Hugo Parente Lima">hugo.lima</who>
    <bug_when>2012-04-04 06:54:46 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 135554 [details] [details])
&gt; &gt; &gt; m_viewport-&gt;mousePressEvent(&amp;mouseEvent) will send the event to the web process, and _not_ to the Flickable.
&gt; &gt; &gt; That is the whole point of the subclassing.
&gt; &gt; 
&gt; &gt; qobject_cast&lt;QQuickFlickable&gt;(m_viewport)-&gt;mousePressEvent(&amp;mouseEvent) ?
&gt; 
&gt; mousePressEvent and co. are virtual functions, so calling them on a base class pointer would not help.

You can call a specific virtual method implementation:

qobject_cast&lt;QQuickFlickable&gt;(m_viewport)-&gt;QQuickFlickable::mousePressEvent(&amp;mouseEvent)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135350</attachid>
            <date>2012-04-03 10:03:59 -0700</date>
            <delta_ts>2012-04-04 04:14:17 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-Qt-WK2-Make-the-WebView-a-subclass-of-Flickable.patch</filename>
            <type>text/plain</type>
            <size>57097</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSA5Nzg0OWQ1ZGQ5NDgzMDBhMzI0NjliNmE2ZWUzNGRlNzZhYmQwZjhkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IFR1ZSwgMyBBcHIgMjAxMiAxODozOTozMiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtR
dF1bV0syXSBNYWtlIHRoZSBXZWJWaWV3IGEgc3ViY2xhc3Mgb2YgRmxpY2thYmxlCgotLS0KIFNv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiAr
CiAuLi4vcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL2V4cGVyaW1lbnRhbC5wcmkgICB8ICAg
IDIgKy0KIFNvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaSAgICAgICAgICAg
IHwgICAgMiArLQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDg5ICsrKysrKysKIFNvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAgMiAtCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2UuY3BwICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgIHwgIDE4OSArKysrKystLS0tLS0tLQogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCAgfCAgIDM5ICsrLQogLi4u
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oICAgfCAgICA1ICst
CiAuLi4vcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1aWNrd2Vidmlldy5jcHAgICB8ICAg
IDIgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvdGVzdHMucHJpICAg
IHwgICAgMiArLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5j
cHAgICAgfCAgMjYwIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRGbGlja1Byb3ZpZGVyLmggICAgICB8ICAgOTkgLS0tLS0tLS0KIC4uLi9VSVByb2Nl
c3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAgICAgICAgIHwgICAgNiArLQogLi4uL1VJ
UHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwICAgfCAgIDkyICsrKy0t
LS0KIC4uLi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmggICAgIHwg
ICAxMSArLQogLi4uL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5j
cHAgfCAgICAyICstCiBUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgMTUgKysKIFRvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBybyAg
ICAgICAgICAgICAgIHwgICAgMiArLQogVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJX
aW5kb3cucW1sICAgICAgICAgfCAgICA2ICstCiBUb29scy9NaW5pQnJvd3Nlci9xdC9xbWwvU2Ny
b2xsSW5kaWNhdG9yLnFtbCAgICAgICB8ICAgIDcgKy0KIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGFyZ2V0LnByaSAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogMjIgZmlsZXMgY2hhbmdlZCwg
MjYzIGluc2VydGlvbnMoKyksIDU4NSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmNwcAogZGVsZXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlkZXIuaAoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9x
dC9DaGFuZ2VMb2cKaW5kZXggN2EzMTBkZC4uOGJlMzVkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxMi0wNC0wMyAgQW5kcmFzIEJlY3NpICA8YW5kcmFzLmJlY3NpQG5va2lh
LmNvbT4KKworICAgICAgICBbUXRdW1dLMl0gTWFrZSB0aGUgV2ViVmlldyBhIHN1YmNsYXNzIG9m
IEZsaWNrYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODMwMzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgbmVlZGVkIGRlcGVuZGVuY3kgdG8gcXVpY2stcHJpdmF0ZSBmb3IgcHJvamVjdHMgdGhh
dCBpbmNsdWRlIHRoZSBXZWJWaWV3IGhlYWRlci4KKworICAgICAgICAqIGRlY2xhcmF0aXZlL2V4
cGVyaW1lbnRhbC9leHBlcmltZW50YWwucHJpOgorICAgICAgICAqIGRlY2xhcmF0aXZlL3B1Ymxp
Yy5wcmk6CisKIDIwMTItMDQtMDMgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXMubWVuYXJkQG9wZW5i
b3NzYS5vcmc+CiAKICAgICAgICAgW1BhcnQgMl0gV2Ugc2hvdWxkIHVzZSBDU1NQcm9wZXJ0eUlE
IHJhdGhlciB0aGFuIGludGVnZXJzIHdoZW4gbWFuaXB1bGF0aW5nIENTUyBwcm9wZXJ0eSBpZHMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9l
eHBlcmltZW50YWwucHJpIGIvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50
YWwvZXhwZXJpbWVudGFsLnByaQppbmRleCAxNTM4NmI4Li44YjAxNWU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9leHBlcmltZW50YWwucHJp
CisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL2V4cGVyaW1l
bnRhbC5wcmkKQEAgLTI0LDcgKzI0LDcgQEAgY29udGFpbnMoUVRfQ09ORklHLCByZWR1Y2VfZXhw
b3J0cyk6Q09ORklHICs9IGhpZGVfc3ltYm9scwogCiB3aW5jZSo6TElCUyArPSAkJFFNQUtFX0xJ
QlNfR1VJCiAKLVFUICs9IGRlY2xhcmF0aXZlIHdpZGdldHMgbmV0d29yayBxdWljayB3ZWJraXQg
d2Via2l0LXByaXZhdGUKK1FUICs9IGRlY2xhcmF0aXZlIHdpZGdldHMgbmV0d29yayBxdWljayBx
dWljay1wcml2YXRlIHdlYmtpdCB3ZWJraXQtcHJpdmF0ZQogCiBERVNURElSID0gJCR7Uk9PVF9C
VUlMRF9ESVJ9L2ltcG9ydHMvJCR7VEFSR0VULm1vZHVsZV9uYW1lfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkgYi9Tb3VyY2UvV2ViS2l0L3F0
L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkKaW5kZXggYTJmNzdlZS4uMTIxNTdmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaQpAQCAtMjcsNyArMjcsNyBAQCBjb250YWlu
cyhRVF9DT05GSUcsIHJlZHVjZV9leHBvcnRzKTpDT05GSUcgKz0gaGlkZV9zeW1ib2xzCiB3aW5j
ZSo6TElCUyArPSAkJFFNQUtFX0xJQlNfR1VJCiAKIFFUICs9IGRlY2xhcmF0aXZlIHdlYmtpdCB3
ZWJraXQtcHJpdmF0ZQotaGF2ZVF0KDUpOiBRVCArPSB3aWRnZXRzIHF1aWNrCitoYXZlUXQoNSk6
IFFUICs9IHdpZGdldHMgcXVpY2sgcXVpY2stcHJpdmF0ZQogCiBjb250YWlucyhERUZJTkVTLCBI
QVZFX1FRVUlDSzE9MSkgewogICAgIFNPVVJDRVMgKz0gcWRlY2xhcmF0aXZld2Vidmlldy5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwNTRkNjM2Li5kMDJjYjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTIg
QEAKKzIwMTItMDQtMDMgIEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+CisK
KyAgICAgICAgW1F0XVtXSzJdIE1ha2UgdGhlIFdlYlZpZXcgYSBzdWJjbGFzcyBvZiBGbGlja2Fi
bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzMDMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSGl0aGVy
dG8sIHRoZSBleHBlcmltZW50IG9mIGEgUU1MIFdlYlZpZXcgd2l0aCBhbiBpbnRlcm5hbCBGbGlj
a2FibGUKKyAgICAgICAgaW5zdGFuY2Ugc2hvd2VkIHRoYXQgdGhlIGFwcHJvYWNoIG9mIGhpZGlu
ZyB0aGUgRmxpY2thYmxlIHJhaXNlcyBtb3JlCisgICAgICAgIHByb2JsZW1zIHRoYW4gaXQgc29s
dmVzLgorCisgICAgICAgIE9uZSBzZXQgb2YgcHJvYmxlbXMgYXJvc2UgYmVjYXVzZSB0aGUgaW50
ZXJuYWwgRmxpY2thYmxlIHdhcyBhIHNlcGFyYXRlCisgICAgICAgIGl0ZW0gd2hpY2ggcmVjZWl2
ZWQgYW5kIHJlYWN0ZWQgb24gYXV0b21hdGljYWxseSBzeW50aGVzaXplZCBtb3VzZSBldmVudHMK
KyAgICAgICAgc2VuZCBieSB0aGUgY2FudmFzLCB0aGlzIGludGVyZmVyZWQgd2l0aCB0aGUgZ2Vz
dHVyZSByZWNvZ25pemVycyBvZiB0aGUKKyAgICAgICAgV2ViVmlldy4KKworICAgICAgICBPdGhl
ciBpc3N1ZXMgd2VyZSByZWxhdGVkIHRvIG9yaWVudGF0aW9uIGFuZCB0aGUgaW50ZWdyYXRpb24g
b2YgdGhlCisgICAgICAgIFdlYlZpZXcgaXRlbSB3aXRoIG90aGVyIFFNTCBpdGVtcyBhbmQgY29t
cG9uZW50cyAobGlrZSBzY3JvbGwgaW5kaWNhdG9ycykKKyAgICAgICAgd2hpY2ggcmVxdWlyZSBh
IGxhcmdlciBzZXQgb2YgdGhlIEZsaWNrYWJsZSBBUEkgb3IgdGhlIEZsaWNrYWJsZSBvYmplY3QK
KyAgICAgICAgaXRzZWxmIChlLmcuIFNjcm9sbERlY29yYXRvcikuCisKKyAgICAgICAgVGhlc2Ug
ZGlzYWR2YW50YWdlcyBvZiBhbiBpbnRlcm5hbCBGbGlja2FibGUgaW5zdGFuY2Ugb3V0d2VpZ2gg
dGhlCisgICAgICAgIGJlbmVmaXRzIG9mIGNvbnRyb2xsaW5nIHRoZSBleHBvc2VkIEFQSSwgdGhl
cmVmb3IgdGhlIGV4cGVyaW1lbnQgaGFkCisgICAgICAgIHRoZSBjb25jbHVzaW9uIHRoYXQgdGhl
cmUgaXMgbm8gd2F5IGFyb3VuZCB0aGUgcHVibGljIGluaGVyaXRhbmNlIGZyb20KKyAgICAgICAg
UVF1aWNrRmxpY2thYmxlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgUXRGbGlj
a1Byb3ZpZGVyIGNsYXNzLCBpbmhlcml0cyBRUXVpY2tXZWJWaWV3CisgICAgICAgIGZyb20gUVF1
aWNrRmxpY2thYmxlIGFuZCBhZGp1c3RzIHRoZSB2aWV3cG9ydCBpbnRlcmFjdGlvbiBlbmdpbmUg
YW5kCisgICAgICAgIHRoZSBnZXN0dXJlIHJlY29nbml6ZXJzIHRvIHVzZSB0aGUgRmxpY2thYmxl
IEFQSSBvZiB0aGUgV2ViVmlldyB0bworICAgICAgICBrZWVwIHRoZSBzYW1lIGJlaGF2aW91ciBh
cyBiZWZvcmUuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2VicGFnZS5jcHA6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpRUXVpY2tX
ZWJQYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwOgor
ICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2YXRlKToKKyAg
ICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjppbml0aWFsaXplKToKKyAgICAg
ICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpwYWdlSXRlbVBvcyk6CisgICAgICAg
IChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6dXBkYXRlQ29udGVudHNTaXplKToKKyAg
ICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpvbkNvbXBvbmVudENvbXBsZXRl
KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjp1cGRhdGVWaWV3cG9y
dFNpemUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6dXNlRGVmYXVsdENv
bnRlbnRJdGVtU2l6ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRV
c2VEZWZhdWx0Q29udGVudEl0ZW1TaXplKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OlFRdWlj
a1dlYlZpZXcpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6aW5wdXRNZXRob2RRdWVyeSk6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3OjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAoUVF1aWNr
V2ViVmlldzo6Y29tcG9uZW50Q29tcGxldGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6ZXZl
bnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6Y29udGVudFBvcyk6CisgICAgICAgIChRUXVp
Y2tXZWJWaWV3OjpzZXRDb250ZW50UG9zKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmhhbmRs
ZVByZXNzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmhhbmRsZU1vdmUpOgorICAgICAgICAo
UVF1aWNrV2ViVmlldzo6aGFuZGxlUmVsZWFzZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9x
dC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oOgorICAgICAgICAoUVF1aWNrV2ViVmlld1By
aXZhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90
c3RfcXF1aWNrd2Vidmlldy5jcHA6CisgICAgICAgICh0c3RfUVF1aWNrV2ViVmlldzo6c2Nyb2xs
UmVxdWVzdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy90ZXN0cy5wcmk6Cisg
ICAgICAgICogVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5oOiBSZW1vdmVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6cmVjb2duaXplKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUp
OgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNldEl0ZW1S
ZWN0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZTo6ZmxpY2thYmxlTW92ZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OmZsaWNrYWJsZU1vdmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZmxpY2thYmxlTW92aW5nUG9zaXRpb25VcGRhdGUp
OgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxlQW5p
bWF0aW9uU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lOjp3aGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6UXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQWN0aXZlKToKKyAgICAgICAgKFdl
YktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlU3RhcnRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZVJl
cXVlc3RVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmU6OnBhbkdlc3R1cmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZTo6cGFuR2VzdHVyZUNhbmNlbGxlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6Y2FuY2VsU2Nyb2xsQW5pbWF0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVTdGFydGVk
KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdl
c3R1cmVSZXF1ZXN0VXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVDb250ZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
cXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmg6CisgICAgICAgIChRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhh
bmRsZXIuY3BwOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkb25lV2l0aFRvdWNo
RXZlbnQpOgorCiAyMDEyLTA0LTAzICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBbUXRdW1dLMl0gQVNTRVJUKCEob3V0cHV0Qnl0ZXMuc2l6ZSgpICUgc2l6
ZW9mKFVDaGFyKSkpIGluIFBsdWdpblByb2Nlc3NQcm94eVF0LmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKaW5kZXgg
ZThiM2I3Ny4uMGRiOTg1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0yODQsNyArMjg0LDYgQEAgSEVBREVS
UyArPSBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVBvbGljeUNsaWVudC5oIFwKICAgICBV
SVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VVSUNsaWVudC5oIFwKLSAgICBVSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmggXAogICAg
IFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaCBcCiAgICAgVUlQcm9j
ZXNzL3F0L1F0V2ViVW5kb0NvbnRyb2xsZXIuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViSWNv
bkRhdGFiYXNlQ2xpZW50LmggXApAQCAtNjI4LDcgKzYyNyw2IEBAIFNPVVJDRVMgKz0gXAogICAg
IFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlVUlDbGllbnQuY3BwIFwKICAgICBVSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAg
XAotICAgIFVJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlkZXIuY3BwIFwKICAgICBVSVByb2Nlc3Mv
cXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1dl
YkNvbnRleHRNZW51UHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJDb250ZXh0UXQu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBh
Z2UuY3BwCmluZGV4IGI1OTgyMzQuLmQzMjE0YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2lu
Y2x1ZGUgPFF0UXVpY2svUVF1aWNrQ2FudmFzPgogCiBRUXVpY2tXZWJQYWdlOjpRUXVpY2tXZWJQ
YWdlKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRlbSkKLSAgICA6IFFRdWlja0l0ZW0odmlld3Bv
cnRJdGVtKQorICAgIDogUVF1aWNrSXRlbSh2aWV3cG9ydEl0ZW0tPmNvbnRlbnRJdGVtKCkpCiAg
ICAgLCBkKG5ldyBRUXVpY2tXZWJQYWdlUHJpdmF0ZSh0aGlzLCB2aWV3cG9ydEl0ZW0pKQogewog
ICAgIHNldEZsYWcoSXRlbUhhc0NvbnRlbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IDUzYzExMDAuLjg3ZjFjMGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNw
cApAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgInF3ZWJwcmVmZXJlbmNlc19wX3AuaCIKICNp
bmNsdWRlICJxd2Vidmlld3BvcnRpbmZvX3AuaCIKIAotI2luY2x1ZGUgPHByaXZhdGUvcXF1aWNr
ZmxpY2thYmxlX3AuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmg+CiAjaW5jbHVkZSA8UURlY2xhcmF0aXZlRW5naW5lPgogI2luY2x1ZGUgPFF0UXVpY2sv
UVF1aWNrQ2FudmFzPgpAQCAtNjcsNyArNjYsNiBAQCBzdGF0aWMgUVF1aWNrV2ViVmlld1ByaXZh
dGUqIGNyZWF0ZVByaXZhdGVPYmplY3QoUVF1aWNrV2ViVmlldyogcHVibGljT2JqZWN0KQogCiBR
UXVpY2tXZWJWaWV3UHJpdmF0ZTo6UVF1aWNrV2ViVmlld1ByaXZhdGUoUVF1aWNrV2ViVmlldyog
dmlld3BvcnQpCiAgICAgOiBxX3B0cih2aWV3cG9ydCkKLSAgICAsIGZsaWNrUHJvdmlkZXIoMCkK
ICAgICAsIGFsZXJ0RGlhbG9nKDApCiAgICAgLCBjb25maXJtRGlhbG9nKDApCiAgICAgLCBwcm9t
cHREaWFsb2coMCkKQEAgLTc3LDggKzc1LDcgQEAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlj
a1dlYlZpZXdQcml2YXRlKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0KQogICAgICwgcHJveHlBdXRo
ZW50aWNhdGlvbkRpYWxvZygwKQogICAgICwgZmlsZVBpY2tlcigwKQogICAgICwgZGF0YWJhc2VR
dW90YURpYWxvZygwKQotICAgICwgdXNlckRpZE92ZXJyaWRlQ29udGVudFdpZHRoKGZhbHNlKQot
ICAgICwgdXNlckRpZE92ZXJyaWRlQ29udGVudEhlaWdodChmYWxzZSkKKyAgICAsIG1fdXNlRGVm
YXVsdENvbnRlbnRJdGVtU2l6ZSh0cnVlKQogICAgICwgbV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJs
ZWQoZmFsc2UpCiAgICAgLCBtX3JlbmRlclRvT2Zmc2NyZWVuQnVmZmVyKGZhbHNlKQogICAgICwg
bV9sb2FkU3RhcnRlZFNpZ25hbFNlbnQoZmFsc2UpCkBAIC01MjIsNTAgKzUxOSw1MSBAQCBRUXVp
Y2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6flFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRl
KCkKIAogdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6aW5pdGlhbGl6ZShXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogeworICAg
IFFfUShRUXVpY2tXZWJWaWV3KTsKKworICAgIC8vIERpc2FibGUgbW91c2UgZXZlbnRzIG9uIHRo
ZSBmbGlja2FibGUgd2ViIHZpZXcgc28gd2UgZG8gbm90CisgICAgLy8gc2VsZWN0IHRleHQgZHVy
aW5nIHBhbiBnZXN0dXJlcyBvbiBwbGF0Zm9ybXMgd2hpY2ggc2VuZCBib3RoCisgICAgLy8gdG91
Y2ggYW5kIG1vdXNlIGV2ZW50cyBzaW11bHRhbmVvdXNseS4KKyAgICBxLT5zZXRBY2NlcHRlZE1v
dXNlQnV0dG9ucyhRdDo6Tm9CdXR0b24pOworICAgIHEtPnNldEFjY2VwdEhvdmVyRXZlbnRzKGZh
bHNlKTsKKwogICAgIFFRdWlja1dlYlZpZXdQcml2YXRlOjppbml0aWFsaXplKGNvbnRleHRSZWYs
IHBhZ2VHcm91cFJlZik7CiAgICAgd2ViUGFnZVByb3h5LT5zZXRVc2VGaXhlZExheW91dCh0cnVl
KTsKIH0KIAogUVBvaW50RiBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6cGFnZUl0ZW1Q
b3MoKQogeworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKICAgICAvLyBGbGlja2FibGUgbW92ZXMg
aXRzIGNvbnRlbnRJdGVtIHNvIHdlIG5lZWQgdG8gdGFrZSB0aGF0IHBvc2l0aW9uIGludG8gYWNj
b3VudCwKICAgICAvLyBhcyB3ZWxsIGFzIHRoZSBwb3RlbnRpYWwgZGlzcGxhY2VtZW50IG9mIHRo
ZSBwYWdlIG9uIHRoZSBjb250ZW50SXRlbSBiZWNhdXNlCiAgICAgLy8gb2YgYWRkaXRpb25hbCBR
TUwgaXRlbXMuCi0gICAgcXJlYWwgeFBvcyA9IGZsaWNrUHJvdmlkZXItPmNvbnRlbnRJdGVtKCkt
PngoKSArIHBhZ2VWaWV3LT54KCk7Ci0gICAgcXJlYWwgeVBvcyA9IGZsaWNrUHJvdmlkZXItPmNv
bnRlbnRJdGVtKCktPnkoKSArIHBhZ2VWaWV3LT55KCk7CisgICAgcXJlYWwgeFBvcyA9IHEtPmNv
bnRlbnRJdGVtKCktPngoKSArIHBhZ2VWaWV3LT54KCk7CisgICAgcXJlYWwgeVBvcyA9IHEtPmNv
bnRlbnRJdGVtKCktPnkoKSArIHBhZ2VWaWV3LT55KCk7CiAgICAgcmV0dXJuIFFQb2ludEYoeFBv
cywgeVBvcyk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnVwZGF0
ZUNvbnRlbnRzU2l6ZShjb25zdCBRU2l6ZUYmIHNpemUpCiB7Ci0gICAgQVNTRVJUKGZsaWNrUHJv
dmlkZXIpOworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IHRoZSBjb250ZW50SXRlbSBpcyBzaXplZCB0byB0aGUgcGFnZQogICAgIC8vIGlmIHRoZSB1c2Vy
IGRpZCBub3QgYWRkIG90aGVyIGZsaWNrYWJsZSBpdGVtcyBpbiBRTUwuCiAgICAgLy8gSWYgdGhl
IHVzZXIgYWRkcyBpdGVtcyBpbiBRTUwgaGUgaGFzIHRvIG1ha2Ugc3VyZSB0bwotICAgIC8vIGFs
c28gYmluZCB0aGUgY29udGVudFdpZHRoIGFuZCBjb250ZW50SGVpZ2h0IGFjY29yZGluZ2x5Lgor
ICAgIC8vIGRpc2FibGUgdGhlIGRlZmF1bHQgY29udGVudCBpdGVtIHNpemUgcHJvcGVydHkgb24g
dGhlIFdlYlZpZXcKKyAgICAvLyBhbmQgYmluZCB0aGUgY29udGVudFdpZHRoIGFuZCBjb250ZW50
SGVpZ2h0IGFjY29yZGluZ2x5LgogICAgIC8vIFRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIG5v
cm1hbCBRTUwgRmxpY2thYmxlIGJlaGF2aW91ci4KLSAgICBpZiAoIXVzZXJEaWRPdmVycmlkZUNv
bnRlbnRXaWR0aCkKLSAgICAgICAgZmxpY2tQcm92aWRlci0+c2V0Q29udGVudFdpZHRoKHNpemUu
d2lkdGgoKSk7Ci0gICAgaWYgKCF1c2VyRGlkT3ZlcnJpZGVDb250ZW50SGVpZ2h0KQotICAgICAg
ICBmbGlja1Byb3ZpZGVyLT5zZXRDb250ZW50SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOworICAgIGlm
ICghbV91c2VEZWZhdWx0Q29udGVudEl0ZW1TaXplKQorICAgICAgICByZXR1cm47CisKKyAgICBx
LT5zZXRDb250ZW50V2lkdGgoc2l6ZS53aWR0aCgpKTsKKyAgICBxLT5zZXRDb250ZW50SGVpZ2h0
KHNpemUuaGVpZ2h0KCkpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRl
OjpvbkNvbXBvbmVudENvbXBsZXRlKCkKIHsKICAgICBRX1EoUVF1aWNrV2ViVmlldyk7CiAKLSAg
ICBBU1NFUlQoIWZsaWNrUHJvdmlkZXIpOwotICAgIGZsaWNrUHJvdmlkZXIgPSBuZXcgUXRGbGlj
a1Byb3ZpZGVyKHEsIHBhZ2VWaWV3LmRhdGEoKSk7Ci0KLSAgICAvLyBQcm9wYWdhdGUgZmxpY2th
YmxlIHNpZ25hbHMuCi0gICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCogZXhwZXJpbWVudGFs
ID0gcS0+ZXhwZXJpbWVudGFsKCk7Ci0gICAgUU9iamVjdDo6Y29ubmVjdChmbGlja1Byb3ZpZGVy
LCBTSUdOQUwoY29udGVudFdpZHRoQ2hhbmdlZCgpKSwgZXhwZXJpbWVudGFsLCBTSUdOQUwoY29u
dGVudFdpZHRoQ2hhbmdlZCgpKSk7Ci0gICAgUU9iamVjdDo6Y29ubmVjdChmbGlja1Byb3ZpZGVy
LCBTSUdOQUwoY29udGVudEhlaWdodENoYW5nZWQoKSksIGV4cGVyaW1lbnRhbCwgU0lHTkFMKGNv
bnRlbnRIZWlnaHRDaGFuZ2VkKCkpKTsKLSAgICBRT2JqZWN0Ojpjb25uZWN0KGZsaWNrUHJvdmlk
ZXIsIFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIGV4cGVyaW1lbnRhbCwgU0lHTkFMKGNvbnRl
bnRYQ2hhbmdlZCgpKSk7Ci0gICAgUU9iamVjdDo6Y29ubmVjdChmbGlja1Byb3ZpZGVyLCBTSUdO
QUwoY29udGVudFlDaGFuZ2VkKCkpLCBleHBlcmltZW50YWwsIFNJR05BTChjb250ZW50WUNoYW5n
ZWQoKSkpOwotCi0gICAgaW50ZXJhY3Rpb25FbmdpbmUucmVzZXQobmV3IFF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZShxLCBwYWdlVmlldy5kYXRhKCksIGZsaWNrUHJvdmlkZXIpKTsKKyAgICBp
bnRlcmFjdGlvbkVuZ2luZS5yZXNldChuZXcgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKHEs
IHBhZ2VWaWV3LmRhdGEoKSkpOwogICAgIHBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+c2V0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZShpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCkpOwogCiAgICAg
UU9iamVjdDo6Y29ubmVjdChpbnRlcmFjdGlvbkVuZ2luZS5kYXRhKCksIFNJR05BTChjb250ZW50
U3VzcGVuZFJlcXVlc3RlZCgpKSwgcSwgU0xPVChfcV9zdXNwZW5kKCkpKTsKQEAgLTU4Myw4ICs1
ODEsNiBAQCB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpvbkNvbXBvbmVudENv
bXBsZXRlKCkKICAgICBfcV9vblZpc2libGVDaGFuZ2VkKCk7CiAKICAgICBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6b25Db21wb25lbnRDb21wbGV0ZSgpOwotCi0gICAgZW1pdCBleHBlcmltZW50YWwt
PmZsaWNrYWJsZUNoYW5nZWQoKTsKIH0KIAogdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJp
dmF0ZTo6bG9hZERpZFN1Y2NlZWQoKQpAQCAtNjIyLDggKzYxOCw2IEBAIHZvaWQgUVF1aWNrV2Vi
Vmlld0ZsaWNrYWJsZVByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCiAgICAgaWYgKHZpZXdw
b3J0U2l6ZS5pc0VtcHR5KCkgfHwgIWludGVyYWN0aW9uRW5naW5lKQogICAgICAgICByZXR1cm47
CiAKLSAgICBmbGlja1Byb3ZpZGVyLT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKLQog
ICAgIC8vIExldCB0aGUgV2ViUHJvY2VzcyBrbm93IGFib3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6
ZSwgc28gdGhhdAogICAgIC8vIGl0IGNhbiByZXNpemUgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHku
CiAgICAgd2ViUGFnZVByb3h5LT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKQEAgLTc3
Nyw2ICs3NzEsMTggQEAgdm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRUcmFuc3Bh
cmVudEJhY2tncm91bmQoYm9vbCBlbmFibGUpCiAgICAgZC0+c2V0VHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kKGVuYWJsZSk7CiB9CiAKK2Jvb2wgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6dXNlRGVm
YXVsdENvbnRlbnRJdGVtU2l6ZSgpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZp
ZXcpOworICAgIHJldHVybiBkLT5tX3VzZURlZmF1bHRDb250ZW50SXRlbVNpemU7Cit9CisKK3Zv
aWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0VXNlRGVmYXVsdENvbnRlbnRJdGVtU2l6
ZShib29sIGVuYWJsZSkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgZC0+bV91c2VE
ZWZhdWx0Q29udGVudEl0ZW1TaXplID0gZW5hYmxlOworfQorCiB2b2lkIFFRdWlja1dlYlZpZXdF
eHBlcmltZW50YWw6OnNldEZsaWNrYWJsZVZpZXdwb3J0RW5hYmxlZChib29sIGVuYWJsZSkKIHsK
ICAgICBzX2ZsaWNrYWJsZVZpZXdwb3J0RW5hYmxlZCA9IGVuYWJsZTsKQEAgLTEwNDIsOTMgKzEw
NDgsOCBAQCBRUXVpY2tXZWJQYWdlKiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpwYWdlKCkK
ICAgICByZXR1cm4gcV9wdHItPnBhZ2UoKTsKIH0KIAotUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5
PFFPYmplY3Q+IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmZsaWNrYWJsZURhdGEoKQotewot
ICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKLSAgICBBU1NFUlQoZC0+ZmxpY2tQcm92aWRl
cik7Ci0gICAgcmV0dXJuIGQtPmZsaWNrUHJvdmlkZXItPmZsaWNrYWJsZURhdGEoKTsKLX0KLQot
UVF1aWNrRmxpY2thYmxlKiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpmbGlja2FibGUoKQot
ewotICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKLSAgICBpZiAoIWQtPmZsaWNrUHJvdmlkZXIpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgUVF1aWNrRmxpY2thYmxlKiBmbGlja2FibGVJdGVtID0g
cW9iamVjdF9jYXN0PFFRdWlja0ZsaWNrYWJsZSo+KGNvbnRlbnRJdGVtKCktPnBhcmVudEl0ZW0o
KSk7Ci0KLSAgICBBU1NFUlQoZmxpY2thYmxlSXRlbSk7Ci0KLSAgICByZXR1cm4gZmxpY2thYmxl
SXRlbTsKLX0KLQotUVF1aWNrSXRlbSogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVu
dEl0ZW0oKQotewotICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKLSAgICBBU1NFUlQoZC0+ZmxpY2tQ
cm92aWRlcik7Ci0gICAgcmV0dXJuIGQtPmZsaWNrUHJvdmlkZXItPmNvbnRlbnRJdGVtKCk7Ci19
Ci0KLXFyZWFsIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRXaWR0aCgpIGNvbnN0
Ci17Ci0gICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOwotICAgIEFTU0VSVChkLT5mbGlja1By
b3ZpZGVyKTsKLSAgICByZXR1cm4gZC0+ZmxpY2tQcm92aWRlci0+Y29udGVudFdpZHRoKCk7Ci19
Ci0KLXZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGVudFdpZHRoKHFyZWFs
IHdpZHRoKQotewotICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKLSAgICBBU1NFUlQoZC0+ZmxpY2tQ
cm92aWRlcik7Ci0gICAgZC0+dXNlckRpZE92ZXJyaWRlQ29udGVudFdpZHRoID0gdHJ1ZTsKLSAg
ICBkLT5mbGlja1Byb3ZpZGVyLT5zZXRDb250ZW50V2lkdGgod2lkdGgpOwotfQotCi1xcmVhbCBR
UXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZW50SGVpZ2h0KCkgY29uc3QKLXsKLSAgICBR
X0QoY29uc3QgUVF1aWNrV2ViVmlldyk7Ci0gICAgQVNTRVJUKGQtPmZsaWNrUHJvdmlkZXIpOwot
ICAgIHJldHVybiBkLT5mbGlja1Byb3ZpZGVyLT5jb250ZW50SGVpZ2h0KCk7Ci19Ci0KLXZvaWQg
UVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGVudEhlaWdodChxcmVhbCBoZWlnaHQp
Ci17Ci0gICAgUV9EKFFRdWlja1dlYlZpZXcpOwotICAgIEFTU0VSVChkLT5mbGlja1Byb3ZpZGVy
KTsKLSAgICBkLT51c2VyRGlkT3ZlcnJpZGVDb250ZW50SGVpZ2h0ID0gdHJ1ZTsKLSAgICBkLT5m
bGlja1Byb3ZpZGVyLT5zZXRDb250ZW50SGVpZ2h0KGhlaWdodCk7Ci19Ci0KLXFyZWFsIFFRdWlj
a1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRlbnRYKCkgY29uc3QKLXsKLSAgICBRX0QoY29uc3Qg
UVF1aWNrV2ViVmlldyk7Ci0gICAgQVNTRVJUKGQtPmZsaWNrUHJvdmlkZXIpOwotICAgIHJldHVy
biBkLT5mbGlja1Byb3ZpZGVyLT5jb250ZW50WCgpOwotfQotCi12b2lkIFFRdWlja1dlYlZpZXdF
eHBlcmltZW50YWw6OnNldENvbnRlbnRYKHFyZWFsIHgpCi17Ci0gICAgUV9EKFFRdWlja1dlYlZp
ZXcpOwotICAgIEFTU0VSVChkLT5mbGlja1Byb3ZpZGVyKTsKLSAgICBkLT5mbGlja1Byb3ZpZGVy
LT5zZXRDb250ZW50WCh4KTsKLX0KLQotcXJlYWwgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6
Y29udGVudFkoKSBjb25zdAotewotICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKLSAgICBB
U1NFUlQoZC0+ZmxpY2tQcm92aWRlcik7Ci0gICAgcmV0dXJuIGQtPmZsaWNrUHJvdmlkZXItPmNv
bnRlbnRZKCk7Ci19Ci0KLXZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGVu
dFkocXJlYWwgeSkKLXsKLSAgICBRX0QoUVF1aWNrV2ViVmlldyk7Ci0gICAgQVNTRVJUKGQtPmZs
aWNrUHJvdmlkZXIpOwotICAgIGQtPmZsaWNrUHJvdmlkZXItPnNldENvbnRlbnRZKHkpOwotfQot
CiBRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KFFRdWlja0l0ZW0qIHBhcmVudCkKLSAgICA6
IFFRdWlja0l0ZW0ocGFyZW50KQorICAgIDogUVF1aWNrRmxpY2thYmxlKHBhcmVudCkKICAgICAs
IGRfcHRyKGNyZWF0ZVByaXZhdGVPYmplY3QodGhpcykpCiAgICAgLCBtX2V4cGVyaW1lbnRhbChu
ZXcgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCh0aGlzKSkKIHsKQEAgLTExMzcsNyArMTA1OCw3
IEBAIFFRdWlja1dlYlZpZXc6OlFRdWlja1dlYlZpZXcoUVF1aWNrSXRlbSogcGFyZW50KQogfQog
CiBRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBX
S1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIFFRdWlja0l0ZW0qIHBhcmVudCkKLSAgICA6IFFR
dWlja0l0ZW0ocGFyZW50KQorICAgIDogUVF1aWNrRmxpY2thYmxlKHBhcmVudCkKICAgICAsIGRf
cHRyKGNyZWF0ZVByaXZhdGVPYmplY3QodGhpcykpCiAgICAgLCBtX2V4cGVyaW1lbnRhbChuZXcg
UVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCh0aGlzKSkKIHsKQEAgLTEyOTAsNyArMTIxMSw3IEBA
IFFWYXJpYW50IFFRdWlja1dlYlZpZXc6OmlucHV0TWV0aG9kUXVlcnkoUXQ6OklucHV0TWV0aG9k
UXVlcnkgcHJvcGVydHkpIGNvbnN0CiAgICAgICAgIHJldHVybiBpbnQoUXQ6OklucHV0TWV0aG9k
SGludHMoc3RhdGUuaW5wdXRNZXRob2RIaW50cykpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8v
IFJlbHkgb24gdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gZm9yIEltRW5hYmxlZCwgSW1IaW50cyBh
bmQgSW1QcmVmZXJyZWRMYW5ndWFnZS4KLSAgICAgICAgcmV0dXJuIFFRdWlja0l0ZW06OmlucHV0
TWV0aG9kUXVlcnkocHJvcGVydHkpOworICAgICAgICByZXR1cm4gUVF1aWNrRmxpY2thYmxlOjpp
bnB1dE1ldGhvZFF1ZXJ5KHByb3BlcnR5KTsKICAgICB9CiB9CiAKQEAgLTEzMTMsNyArMTIzNCw3
IEBAIHZvaWQgUVF1aWNrV2ViVmlldzo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHZvaWQgUVF1aWNr
V2ViVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2VvbWV0cnksIGNvbnN0
IFFSZWN0RiYgb2xkR2VvbWV0cnkpCiB7CiAgICAgUV9EKFFRdWlja1dlYlZpZXcpOwotICAgIFFR
dWlja0l0ZW06Omdlb21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwgb2xkR2VvbWV0cnkpOworICAg
IFFRdWlja0ZsaWNrYWJsZTo6Z2VvbWV0cnlDaGFuZ2VkKG5ld0dlb21ldHJ5LCBvbGRHZW9tZXRy
eSk7CiAgICAgaWYgKG5ld0dlb21ldHJ5LnNpemUoKSAhPSBvbGRHZW9tZXRyeS5zaXplKCkpCiAg
ICAgICAgIGQtPnVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwogfQpAQCAtMTMyMSw3ICsxMjQyLDcgQEAg
dm9pZCBRUXVpY2tXZWJWaWV3OjpnZW9tZXRyeUNoYW5nZWQoY29uc3QgUVJlY3RGJiBuZXdHZW9t
ZXRyeSwgY29uc3QgUVJlY3RGJiBvbGQKIHZvaWQgUVF1aWNrV2ViVmlldzo6Y29tcG9uZW50Q29t
cGxldGUoKQogewogICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKLSAgICBRUXVpY2tJdGVtOjpjb21w
b25lbnRDb21wbGV0ZSgpOworICAgIFFRdWlja0ZsaWNrYWJsZTo6Y29tcG9uZW50Q29tcGxldGUo
KTsKIAogICAgIGQtPm9uQ29tcG9uZW50Q29tcGxldGUoKTsKICAgICBkLT51cGRhdGVWaWV3cG9y
dFNpemUoKTsKQEAgLTE0NDgsNyArMTM2OSw3IEBAIHZvaWQgUVF1aWNrV2ViVmlldzo6ZHJvcEV2
ZW50KFFEcm9wRXZlbnQqIGV2ZW50KQogYm9vbCBRUXVpY2tXZWJWaWV3OjpldmVudChRRXZlbnQq
IGV2KQogewogICAgIC8vIFJlLWltcGxlbWVudGVkIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlIHdp
dGhvdXQgYnJlYWtpbmcgYmluYXJ5IGNvbXBhdGliaWxpdHkuCi0gICAgcmV0dXJuIFFRdWlja0l0
ZW06OmV2ZW50KGV2KTsKKyAgICByZXR1cm4gUVF1aWNrRmxpY2thYmxlOjpldmVudChldik7CiB9
CiAKIFdLUGFnZVJlZiBRUXVpY2tXZWJWaWV3OjpwYWdlUmVmKCkgY29uc3QKQEAgLTE0NTcsNiAr
MTM3OCwzOCBAQCBXS1BhZ2VSZWYgUVF1aWNrV2ViVmlldzo6cGFnZVJlZigpIGNvbnN0CiAgICAg
cmV0dXJuIHRvQVBJKGQtPndlYlBhZ2VQcm94eS5nZXQoKSk7CiB9CiAKK1FQb2ludEYgUVF1aWNr
V2ViVmlldzo6Y29udGVudFBvcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFQb2ludEYoY29udGVu
dFgoKSwgY29udGVudFkoKSk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlldzo6c2V0Q29udGVudFBv
cyhjb25zdCBRUG9pbnRGJiBwb3MpCit7CisgICAgc2V0Q29udGVudFgocG9zLngoKSk7CisgICAg
c2V0Q29udGVudFkocG9zLnkoKSk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlldzo6aGFuZGxlUHJl
c3MoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykK
K3sKKyAgICBRTW91c2VFdmVudCBtb3VzZUV2ZW50KFFFdmVudDo6TW91c2VCdXR0b25QcmVzcywg
cG9zaXRpb24sIFF0OjpOb0J1dHRvbiwgUXQ6Ok5vQnV0dG9uLCBRdDo6Tm9Nb2RpZmllcik7Cisg
ICAgbW91c2VFdmVudC5zZXRUaW1lc3RhbXAoZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIFFR
dWlja0ZsaWNrYWJsZTo6bW91c2VQcmVzc0V2ZW50KCZtb3VzZUV2ZW50KTsKK30KKwordm9pZCBR
UXVpY2tXZWJWaWV3OjpoYW5kbGVNb3ZlKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQg
ZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7CisgICAgUU1vdXNlRXZlbnQgbW91c2VFdmVudChRRXZl
bnQ6Ok1vdXNlTW92ZSwgcG9zaXRpb24sIFF0OjpOb0J1dHRvbiwgUXQ6Ok5vQnV0dG9uLCBRdDo6
Tm9Nb2RpZmllcik7CisgICAgbW91c2VFdmVudC5zZXRUaW1lc3RhbXAoZXZlbnRUaW1lc3RhbXBN
aWxsaXMpOworICAgIFFRdWlja0ZsaWNrYWJsZTo6bW91c2VNb3ZlRXZlbnQoJm1vdXNlRXZlbnQp
OworfQorCit2b2lkIFFRdWlja1dlYlZpZXc6OmhhbmRsZVJlbGVhc2UoY29uc3QgUVBvaW50RiYg
cG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKK3sKKyAgICBRTW91c2VFdmVu
dCBtb3VzZUV2ZW50KFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlLCBwb3NpdGlvbiwgUXQ6Ok5v
QnV0dG9uLCBRdDo6Tm9CdXR0b24sIFF0OjpOb01vZGlmaWVyKTsKKyAgICBtb3VzZUV2ZW50LnNl
dFRpbWVzdGFtcChldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgUVF1aWNrRmxpY2thYmxlOjpt
b3VzZVJlbGVhc2VFdmVudCgmbW91c2VFdmVudCk7Cit9CisKIC8qIQogICAgIExvYWRzIHRoZSBz
cGVjaWZpZWQgXGEgaHRtbCBhcyB0aGUgY29udGVudCBvZiB0aGUgd2ViIHZpZXcuCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCmluZGV4
IGMyMWIyZTkuLmI5ZjE4YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlld19wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgInF3ZWJr
aXRnbG9iYWwuaCIKICNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZWxpc3QuaD4K
ICNpbmNsdWRlIDxRdFF1aWNrL3FxdWlja2l0ZW0uaD4KKyNpbmNsdWRlIDxwcml2YXRlL3FxdWlj
a2ZsaWNrYWJsZV9wLmg+CiAKIGNsYXNzIFFXZWJOYXZpZ2F0aW9uUmVxdWVzdDsKIGNsYXNzIFFE
ZWNsYXJhdGl2ZUNvbXBvbmVudDsKQEAgLTQ2LDYgKzQ3LDcgQEAgY2xhc3MgUGxhdGZvcm1XZWJW
aWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFF0UmVmQ291bnRlZE5ldHdvcmtSZXF1
ZXN0RGF0YTsKK2NsYXNzIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTsKIH0KIAogbmFtZXNw
YWNlIFdURiB7CkBAIC02Niw3ICs2OCw3IEBAIFFUX0VORF9OQU1FU1BBQ0UKIC8vIEluc3RhbnRp
YXRpbmcgdGhlIFdlYlZpZXcgaW4gQysrIGlzIG9ubHkgcG9zc2libGUgYnkgY3JlYXRpbmcKIC8v
IGEgUURlY2xhcmF0aXZlQ29tcG9uZW50IGFzIHRoZSBpbml0aWFsaXphdGlvbiBkZXBlbmRzIG9u
IHRoZQogLy8gY29tcG9uZW50Q29tcGxldGUgbWV0aG9kIGJlaW5nIGNhbGxlZC4KLWNsYXNzIFFX
RUJLSVRfRVhQT1JUIFFRdWlja1dlYlZpZXcgOiBwdWJsaWMgUVF1aWNrSXRlbSB7CitjbGFzcyBR
V0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJWaWV3IDogcHVibGljIFFRdWlja0ZsaWNrYWJsZSB7CiAg
ICAgUV9PQkpFQ1QKICAgICBRX1BST1BFUlRZKFFTdHJpbmcgdGl0bGUgUkVBRCB0aXRsZSBOT1RJ
RlkgdGl0bGVDaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoUVVybCB1cmwgUkVBRCB1cmwgV1JJVEUg
c2V0VXJsIE5PVElGWSB1cmxDaGFuZ2VkKQpAQCAtMTk4LDYgKzIwMCwxNCBAQCBwcml2YXRlOgog
ICAgIFFTY29wZWRQb2ludGVyPFFRdWlja1dlYlZpZXdQcml2YXRlPiBkX3B0cjsKICAgICBRUXVp
Y2tXZWJWaWV3RXhwZXJpbWVudGFsKiBtX2V4cGVyaW1lbnRhbDsKIAorICAgIFFQb2ludEYgY29u
dGVudFBvcygpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGVudFBvcyhjb25zdCBRUG9pbnRGJik7
CisKKyAgICB2b2lkIGhhbmRsZVByZXNzKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQg
ZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQgaGFuZGxlTW92ZShjb25zdCBRUG9pbnRG
JiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB2b2lkIGhhbmRs
ZVJlbGVhc2UoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1p
bGxpcyk7CisKKyAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU7CiAgICAgZnJpZW5kIGNsYXNzIFF0V2ViUGFnZUxvYWRDbGllbnQ7CiAgICAgZnJpZW5k
IGNsYXNzIFF0V2ViUGFnZVBvbGljeUNsaWVudDsKICAgICBmcmllbmQgY2xhc3MgUXRXZWJQYWdl
VUlDbGllbnQ7CkBAIC0yMjksMTUgKzIzOSw4IEBAIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlj
a1dlYlZpZXdFeHBlcmltZW50YWwgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9PQkpFQ1QKICAg
ICBRX1BST1BFUlRZKFFRdWlja1dlYlBhZ2UqIHBhZ2UgUkVBRCBwYWdlIENPTlNUQU5UIEZJTkFM
KQogCi0gICAgLy8gUU1MIEZsaWNrYWJsZSBBUEkuCi0gICAgUV9QUk9QRVJUWShxcmVhbCBjb250
ZW50V2lkdGggUkVBRCBjb250ZW50V2lkdGggV1JJVEUgc2V0Q29udGVudFdpZHRoIE5PVElGWSBj
b250ZW50V2lkdGhDaGFuZ2VkKQotICAgIFFfUFJPUEVSVFkocXJlYWwgY29udGVudEhlaWdodCBS
RUFEIGNvbnRlbnRIZWlnaHQgV1JJVEUgc2V0Q29udGVudEhlaWdodCBOT1RJRlkgY29udGVudEhl
aWdodENoYW5nZWQpCi0gICAgUV9QUk9QRVJUWShxcmVhbCBjb250ZW50WCBSRUFEIGNvbnRlbnRY
IFdSSVRFIHNldENvbnRlbnRYIE5PVElGWSBjb250ZW50WENoYW5nZWQpCi0gICAgUV9QUk9QRVJU
WShxcmVhbCBjb250ZW50WSBSRUFEIGNvbnRlbnRZIFdSSVRFIHNldENvbnRlbnRZIE5PVElGWSBj
b250ZW50WUNoYW5nZWQpCi0gICAgUV9QUk9QRVJUWShRUXVpY2tGbGlja2FibGUqIGZsaWNrYWJs
ZSBSRUFEIGZsaWNrYWJsZSBOT1RJRlkgZmxpY2thYmxlQ2hhbmdlZCkKLSAgICBRX1BST1BFUlRZ
KFFRdWlja0l0ZW0qIGNvbnRlbnRJdGVtIFJFQUQgY29udGVudEl0ZW0gQ09OU1RBTlQpCi0gICAg
UV9QUk9QRVJUWShRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4gZmxpY2thYmxlRGF0
YSBSRUFEIGZsaWNrYWJsZURhdGEpCiAgICAgUV9QUk9QRVJUWShib29sIHRyYW5zcGFyZW50QmFj
a2dyb3VuZCBXUklURSBzZXRUcmFuc3BhcmVudEJhY2tncm91bmQgUkVBRCB0cmFuc3BhcmVudEJh
Y2tncm91bmQpCisgICAgUV9QUk9QRVJUWShib29sIHVzZURlZmF1bHRDb250ZW50SXRlbVNpemUg
V1JJVEUgc2V0VXNlRGVmYXVsdENvbnRlbnRJdGVtU2l6ZSBSRUFEIHVzZURlZmF1bHRDb250ZW50
SXRlbVNpemUpCiAKICAgICBRX1BST1BFUlRZKFFXZWJOYXZpZ2F0aW9uSGlzdG9yeSogbmF2aWdh
dGlvbkhpc3RvcnkgUkVBRCBuYXZpZ2F0aW9uSGlzdG9yeSBDT05TVEFOVCBGSU5BTCkKICAgICBR
X1BST1BFUlRZKFFEZWNsYXJhdGl2ZUNvbXBvbmVudCogYWxlcnREaWFsb2cgUkVBRCBhbGVydERp
YWxvZyBXUklURSBzZXRBbGVydERpYWxvZyBOT1RJRlkgYWxlcnREaWFsb2dDaGFuZ2VkKQpAQCAt
Mjk5LDE5ICszMDIsMTIgQEAgcHVibGljOgogICAgIHZvaWQgaW52b2tlQXBwbGljYXRpb25TY2hl
bWVIYW5kbGVyKFdURjo6UGFzc1JlZlB0cjxXZWJLaXQ6OlF0UmVmQ291bnRlZE5ldHdvcmtSZXF1
ZXN0RGF0YT4pOwogICAgIHZvaWQgc2VuZEFwcGxpY2F0aW9uU2NoZW1lUmVwbHkoUVF1aWNrTmV0
d29ya1JlcGx5Kik7CiAKLSAgICBRUXVpY2tGbGlja2FibGUqIGZsaWNrYWJsZSgpOwotICAgIFFR
dWlja0l0ZW0qIGNvbnRlbnRJdGVtKCk7Ci0gICAgcXJlYWwgY29udGVudFdpZHRoKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDb250ZW50V2lkdGgocXJlYWwpOwotICAgIHFyZWFsIGNvbnRlbnRIZWln
aHQoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnRIZWlnaHQocXJlYWwpOwotICAgIHFyZWFs
IGNvbnRlbnRYKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb250ZW50WChxcmVhbCk7Ci0gICAgcXJl
YWwgY29udGVudFkoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnRZKHFyZWFsKTsKICAgICBi
b29sIHRyYW5zcGFyZW50QmFja2dyb3VuZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0VHJhbnNwYXJl
bnRCYWNrZ3JvdW5kKGJvb2wpOwogCisgICAgYm9vbCB1c2VEZWZhdWx0Q29udGVudEl0ZW1TaXpl
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRVc2VEZWZhdWx0Q29udGVudEl0ZW1TaXplKGJvb2wgZW5h
YmxlKTsKKwogICAgIC8vIEMrKyBvbmx5CiAgICAgYm9vbCByZW5kZXJUb09mZnNjcmVlbkJ1ZmZl
cigpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVuZGVyVG9PZmZzY3JlZW5CdWZmZXIoYm9vbCBlbmFi
bGUpOwpAQCAtMzI0LDExICszMjAsNiBAQCBwdWJsaWMgUV9TTE9UUzoKICAgICB2b2lkIHBvc3RN
ZXNzYWdlKGNvbnN0IFFTdHJpbmcmKTsKIAogUV9TSUdOQUxTOgotICAgIHZvaWQgZmxpY2thYmxl
Q2hhbmdlZCgpOwotICAgIHZvaWQgY29udGVudFdpZHRoQ2hhbmdlZCgpOwotICAgIHZvaWQgY29u
dGVudEhlaWdodENoYW5nZWQoKTsKLSAgICB2b2lkIGNvbnRlbnRYQ2hhbmdlZCgpOwotICAgIHZv
aWQgY29udGVudFlDaGFuZ2VkKCk7CiAgICAgdm9pZCBhbGVydERpYWxvZ0NoYW5nZWQoKTsKICAg
ICB2b2lkIGNvbmZpcm1EaWFsb2dDaGFuZ2VkKCk7CiAgICAgdm9pZCBwcm9tcHREaWFsb2dDaGFu
Z2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXdfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnZpZXdfcF9wLmgKaW5kZXggY2M0MWVlNC4uYmFjNjQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaApAQCAtMjMsNyArMjMs
NiBAQAogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgogI2luY2x1ZGUgIlF0RGlhbG9n
UnVubmVyLmgiCi0jaW5jbHVkZSAiUXRGbGlja1Byb3ZpZGVyLmgiCiAjaW5jbHVkZSAiUXRQYWdl
Q2xpZW50LmgiCiAjaW5jbHVkZSAiUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCiAjaW5j
bHVkZSAiUXRXZWJQYWdlTG9hZENsaWVudC5oIgpAQCAtMTQ3LDcgKzE0Niw2IEBAIHByb3RlY3Rl
ZDoKIAogICAgIFFTY29wZWRQb2ludGVyPFFRdWlja1dlYlBhZ2U+IHBhZ2VWaWV3OwogICAgIFFR
dWlja1dlYlZpZXcqIHFfcHRyOwotICAgIFF0RmxpY2tQcm92aWRlciogZmxpY2tQcm92aWRlcjsK
IAogICAgIFFEZWNsYXJhdGl2ZUNvbXBvbmVudCogYWxlcnREaWFsb2c7CiAgICAgUURlY2xhcmF0
aXZlQ29tcG9uZW50KiBjb25maXJtRGlhbG9nOwpAQCAtMTYxLDggKzE1OSw3IEBAIHByb3RlY3Rl
ZDoKIAogICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0QXJndW1lbnRzOwog
Ci0gICAgYm9vbCB1c2VyRGlkT3ZlcnJpZGVDb250ZW50V2lkdGg7Ci0gICAgYm9vbCB1c2VyRGlk
T3ZlcnJpZGVDb250ZW50SGVpZ2h0OworICAgIGJvb2wgbV91c2VEZWZhdWx0Q29udGVudEl0ZW1T
aXplOwogICAgIGJvb2wgbV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQ7CiAgICAgYm9vbCBtX3Jl
bmRlclRvT2Zmc2NyZWVuQnVmZmVyOwogICAgIGJvb2wgbV9sb2FkU3RhcnRlZFNpZ25hbFNlbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FxdWlj
a3dlYnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRleCBh
NmIxMzk5Li5iMzFhN2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1aWNr
d2Vidmlldy5jcHAKQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIHRzdF9RUXVpY2tXZWJWaWV3Ojpz
Y3JvbGxSZXF1ZXN0KCkKICAgICAvLyBVc2UgcVJvdW5kIGFzIHRoYXQgaXMgYWxzbyB1c2VkIHdo
ZW4gY2FsY3VsYXRpbmcgdGhlIHBvc2l0aW9uCiAgICAgLy8gaW4gV2ViS2l0LgogICAgIGludCB5
ID0gcVJvdW5kKDUwICogd2ViVmlldygpLT5wYWdlKCktPmNvbnRlbnRzU2NhbGUoKSk7Ci0gICAg
UVZFUklGWSh3ZWJWaWV3KCktPmV4cGVyaW1lbnRhbCgpLT5jb250ZW50WSgpID09IHkpOworICAg
IFFWRVJJRlkod2ViVmlldygpLT5jb250ZW50WSgpID09IHkpOwogfQogCiBRVEVTVF9NQUlOKHRz
dF9RUXVpY2tXZWJWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy90ZXN0cy5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rl
c3RzL3Rlc3RzLnByaQppbmRleCBhYThkYThiLi43ODc3ZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3RzLnByaQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3RzLnByaQpAQCAtOSw3ICs5LDcgQEAgU09V
UkNFUyArPSAuLi91dGlsLmNwcCBcCiAgICAgICAgICAgIC4uL2J5dGVhcnJheXRlc3RkYXRhLmNw
cAogSU5DTFVERVBBVEggKz0gJCRQV0QKIAotUVQgKz0gdGVzdGxpYiBkZWNsYXJhdGl2ZSBxdWlj
ayB3ZWJraXQKK1FUICs9IHRlc3RsaWIgZGVjbGFyYXRpdmUgcXVpY2sgcXVpY2stcHJpdmF0ZSB3
ZWJraXQKIAogREVGSU5FUyArPSBURVNUU19TT1VSQ0VfRElSPVxcXCIkJFBXRFxcXCIgXAogICAg
ICAgICAgICBRV1BfUEFUSD1cXFwiJCR7Uk9PVF9CVUlMRF9ESVJ9L2JpblxcXCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlkZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGIzNGJiYTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJRdEZsaWNrUHJvdmlkZXIuaCIKLQotI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgotI2lu
Y2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgotCi0jaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4K
LSNpbmNsdWRlIDxRRGVjbGFyYXRpdmVFbmdpbmU+Ci0jaW5jbHVkZSA8UU1vdXNlRXZlbnQ+Ci0j
aW5jbHVkZSA8UVBvaW50Rj4KLSNpbmNsdWRlIDxRUXVpY2tDYW52YXM+Ci0jaW5jbHVkZSA8UVF1
aWNrSXRlbT4KLSNpbmNsdWRlIDxRVG91Y2hFdmVudD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotCi1uYW1lc3BhY2UgewotCi1pbmxpbmUgUU1ldGFNZXRob2QgcmVzb2x2ZU1ldGFNZXRo
b2QoUU9iamVjdCogZmxpY2thYmxlLCBjb25zdCBjaGFyKiBuYW1lKQotewotICAgIEFTU0VSVChm
bGlja2FibGUpOwotCi0gICAgY29uc3QgUU1ldGFPYmplY3QqIG1ldGFPYmplY3QgPSBmbGlja2Fi
bGUtPm1ldGFPYmplY3QoKTsKLSAgICBBU1NFUlQobWV0YU9iamVjdCk7Ci0KLSAgICBpbnQgbWV0
aG9kSW5kZXggPSBtZXRhT2JqZWN0LT5pbmRleE9mTWV0aG9kKG5hbWUpOwotICAgIEFTU0VSVCht
ZXRob2RJbmRleCAhPSAtMSk7Ci0KLSAgICByZXR1cm4gbWV0YU9iamVjdC0+bWV0aG9kKG1ldGhv
ZEluZGV4KTsKLX0KLQotaW5saW5lIFFNZXRhUHJvcGVydHkgcmVzb2x2ZU1ldGFQcm9wZXJ0eShR
T2JqZWN0KiBmbGlja2FibGUsIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgQVNTRVJUKGZsaWNr
YWJsZSk7Ci0KLSAgICBjb25zdCBRTWV0YU9iamVjdCogbWV0YU9iamVjdCA9IGZsaWNrYWJsZS0+
bWV0YU9iamVjdCgpOwotICAgIEFTU0VSVChtZXRhT2JqZWN0KTsKLQotICAgIGludCBwcm9wZXJ0
eUluZGV4ID0gbWV0YU9iamVjdC0+aW5kZXhPZlByb3BlcnR5KG5hbWUpOwotICAgIEFTU0VSVChw
cm9wZXJ0eUluZGV4ICE9IC0xKTsKLQotICAgIHJldHVybiBtZXRhT2JqZWN0LT5wcm9wZXJ0eShw
cm9wZXJ0eUluZGV4KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKLQotUXRGbGlja1Byb3ZpZGVyOjpR
dEZsaWNrUHJvdmlkZXIoUVF1aWNrV2ViVmlldyogdmlld0l0ZW0sIFFRdWlja1dlYlBhZ2UqIHBh
Z2VJdGVtKQotICAgIDogUU9iamVjdCh2aWV3SXRlbSkKLXsKLSAgICBBU1NFUlQodmlld0l0ZW0p
OwotICAgIEFTU0VSVChwYWdlSXRlbSk7Ci0KLSAgICBRRGVjbGFyYXRpdmVFbmdpbmUqIGVuZ2lu
ZSA9IHFtbEVuZ2luZSh2aWV3SXRlbSk7Ci0gICAgUURlY2xhcmF0aXZlQ29udGV4dCogY29udGV4
dCA9IHFtbENvbnRleHQodmlld0l0ZW0pOwotCi0gICAgQVNTRVJUKGVuZ2luZSk7Ci0gICAgQVNT
RVJUKGNvbnRleHQpOwotCi0gICAgUURlY2xhcmF0aXZlQ29tcG9uZW50IGNvbXBvbmVudChlbmdp
bmUsIHZpZXdJdGVtKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgaW50ZXJuYWwgRmxpY2thYmxlIGlu
c3RhbmNlIGR5bmFtaWNhbGx5LgotICAgIC8vIFdlIG9ubHkgdXNlIHB1YmxpYyBRTUwgQVBJIHNv
IHRoYXQgd2UgZG8gbm90IGRlcGVuZAotICAgIC8vIG9uIHByaXZhdGUgQVBJIG9mIHRoZSBRdERl
Y2xhcmF0aXZlIG1vZHVsZS4KLSAgICBjb21wb25lbnQuc2V0RGF0YShRQnl0ZUFycmF5TGl0ZXJh
bCgiaW1wb3J0IFF0UXVpY2sgMi4wXG5GbGlja2FibGUge30iKSwgUVVybCgpKTsKLQotICAgIG1f
ZmxpY2thYmxlID0gcW9iamVjdF9jYXN0PFFRdWlja0l0ZW0qPihjb21wb25lbnQuY3JlYXRlKGNv
bnRleHQpKTsKLQotICAgIFFNZXRhUHJvcGVydHkgY29udGVudCA9IHJlc29sdmVNZXRhUHJvcGVy
dHkobV9mbGlja2FibGUsICJjb250ZW50SXRlbSIpOwotICAgIG1fY29udGVudEl0ZW0gPSBjb250
ZW50LnJlYWQobV9mbGlja2FibGUpLnZhbHVlPFFRdWlja0l0ZW0qPigpOwotICAgIEFTU0VSVCht
X2NvbnRlbnRJdGVtKTsKLQotICAgIC8vIFJlc29sdmUgbWV0YSBtZXRob2RzIGFuZCBwcm9wZXJ0
aWVzIG9mIHRoZSBGbGlja2FibGUgaW5zdGFuY2UuCi0gICAgbV9yZXR1cm5Ub0JvdW5kc01ldGhv
ZCA9IHJlc29sdmVNZXRhTWV0aG9kKG1fZmxpY2thYmxlLCAicmV0dXJuVG9Cb3VuZHMoKSIpOwot
ICAgIG1fY2FuY2VsRmxpY2tNZXRob2QgPSByZXNvbHZlTWV0YU1ldGhvZChtX2ZsaWNrYWJsZSwg
ImNhbmNlbEZsaWNrKCkiKTsKLQotICAgIG1fY29udGVudFdpZHRoID0gcmVzb2x2ZU1ldGFQcm9w
ZXJ0eShtX2ZsaWNrYWJsZSwgImNvbnRlbnRXaWR0aCIpOwotICAgIG1fY29udGVudEhlaWdodCA9
IHJlc29sdmVNZXRhUHJvcGVydHkobV9mbGlja2FibGUsICJjb250ZW50SGVpZ2h0Iik7Ci0gICAg
bV9jb250ZW50WCA9IHJlc29sdmVNZXRhUHJvcGVydHkobV9mbGlja2FibGUsICJjb250ZW50WCIp
OwotICAgIG1fY29udGVudFkgPSByZXNvbHZlTWV0YVByb3BlcnR5KG1fZmxpY2thYmxlLCAiY29u
dGVudFkiKTsKLSAgICBtX21vdmluZyA9IHJlc29sdmVNZXRhUHJvcGVydHkobV9mbGlja2FibGUs
ICJtb3ZpbmciKTsKLSAgICBtX2RyYWdnaW5nID0gcmVzb2x2ZU1ldGFQcm9wZXJ0eShtX2ZsaWNr
YWJsZSwgImRyYWdnaW5nIik7Ci0gICAgbV9mbGlja2luZyA9IHJlc29sdmVNZXRhUHJvcGVydHko
bV9mbGlja2FibGUsICJmbGlja2luZyIpOwotCi0gICAgbV9mbGlja2FibGVEYXRhID0gcmVzb2x2
ZU1ldGFQcm9wZXJ0eShtX2ZsaWNrYWJsZSwgImZsaWNrYWJsZURhdGEiKTsKLQotICAgIC8vIFNl
dCB0aGUgdmlld0l0ZW0gYXMgdGhlIHBhcmVudCBvZiB0aGUgZmxpY2thYmxlIGluc3RhbmNlCi0g
ICAgLy8gYW5kIHJlcGFyZW50IHRoZSBwYWdlIHNvIGl0IGlzIHBsYWNlZCBvbiB0aGUgZmxpY2th
YmxlIGNvbnRlbnRJdGVtLgotICAgIG1fZmxpY2thYmxlLT5zZXRQYXJlbnRJdGVtKHZpZXdJdGVt
KTsKLSAgICBwYWdlSXRlbS0+c2V0UGFyZW50SXRlbShtX2NvbnRlbnRJdGVtKTsKLQotICAgIC8v
IFByb3BhZ2F0ZSBmbGlja2FibGUgc2lnbmFscy4KLSAgICBjb25uZWN0KG1fZmxpY2thYmxlLCBT
SUdOQUwobW92ZW1lbnRTdGFydGVkKCkpLCBTSUdOQUwobW92ZW1lbnRTdGFydGVkKCkpLCBRdDo6
RGlyZWN0Q29ubmVjdGlvbik7Ci0gICAgY29ubmVjdChtX2ZsaWNrYWJsZSwgU0lHTkFMKG1vdmVt
ZW50RW5kZWQoKSksIFNJR05BTChtb3ZlbWVudEVuZGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlv
bik7Ci0gICAgY29ubmVjdChtX2ZsaWNrYWJsZSwgU0lHTkFMKGZsaWNraW5nQ2hhbmdlZCgpKSwg
U0lHTkFMKGZsaWNraW5nQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotICAgIGNv
bm5lY3QobV9mbGlja2FibGUsIFNJR05BTChkcmFnZ2luZ0NoYW5nZWQoKSksIFNJR05BTChkcmFn
Z2luZ0NoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAgICBjb25uZWN0KG1fZmxp
Y2thYmxlLCBTSUdOQUwoY29udGVudFdpZHRoQ2hhbmdlZCgpKSwgU0lHTkFMKGNvbnRlbnRXaWR0
aENoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAgICBjb25uZWN0KG1fZmxpY2th
YmxlLCBTSUdOQUwoY29udGVudEhlaWdodENoYW5nZWQoKSksIFNJR05BTChjb250ZW50SGVpZ2h0
Q2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotICAgIGNvbm5lY3QobV9mbGlja2Fi
bGUsIFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIFNJR05BTChjb250ZW50WENoYW5nZWQoKSks
IFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAgICBjb25uZWN0KG1fZmxpY2thYmxlLCBTSUdOQUwo
Y29udGVudFlDaGFuZ2VkKCkpLCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0
Q29ubmVjdGlvbik7Ci19Ci0KLXZvaWQgUXRGbGlja1Byb3ZpZGVyOjpoYW5kbGVUb3VjaEZsaWNr
RXZlbnQoUVRvdWNoRXZlbnQqIHRvdWNoRXZlbnQpCi17Ci0gICAgLy8gU2luY2UgdGhlIEZsaWNr
YWJsZSBkb2VzIG5vdCBoYW5kbGUgdG91Y2ggZXZlbnRzIGRpcmVjdGx5IHRoZSBzZW50Ci0gICAg
Ly8gdG91Y2ggZXZlbnQgd291bGQgZW5kIHVwIGluIHRoZSBXZWJWaWV3IGFnYWluIGFuZCB3b3Vs
ZCB0aHVzIHRyaWdnZXIKLSAgICAvLyBhbiBpbmZpbml0ZSBsb29wLgotICAgIC8vIEhlbmNlIGRv
IHRoZSB0b3VjaCB0byBtb3VzZSBldmVudCBjb252ZXJzaW9uIGZvciB0aGUgRmxpY2thYmxlIGhl
cmUuCi0gICAgUUV2ZW50OjpUeXBlIG1vdXNlRXZlbnRUeXBlID0gUUV2ZW50OjpOb25lOwotICAg
IFF0OjpNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbiA9IFF0OjpOb0J1dHRvbjsKLQotICAgIHN3aXRj
aCAodG91Y2hFdmVudC0+dHlwZSgpKSB7Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoQmVnaW46Ci0g
ICAgICAgIG1vdXNlRXZlbnRUeXBlID0gUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzOwotCi0gICAg
ICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBtb3VzZSBidXR0b24gc28gdGhhdCB0aGUgRmxpY2th
YmxlCi0gICAgICAgIC8vIGl0ZW0gcmVjZWl2ZXMgdGhlIGluaXRpYWwgbW91c2UgcHJlc3MgZXZl
bnQuCi0gICAgICAgIG1vdXNlQnV0dG9uID0gUXQ6OkxlZnRCdXR0b247Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToKLSAgICAgICAgbW91c2VFdmVudFR5cGUg
PSBRRXZlbnQ6Ok1vdXNlTW92ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRRXZlbnQ6OlRv
dWNoRW5kOgotICAgICAgICBtb3VzZUV2ZW50VHlwZSA9IFFFdmVudDo6TW91c2VCdXR0b25SZWxl
YXNlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUVBvaW50RiB0b3VjaFBvc2l0
aW9uID0gdG91Y2hFdmVudC0+dG91Y2hQb2ludHMoKS5sYXN0KCkucG9zKCk7Ci0gICAgUU1vdXNl
RXZlbnQgbW91c2VFdmVudChtb3VzZUV2ZW50VHlwZSwgdG91Y2hQb3NpdGlvbiwgbW91c2VCdXR0
b24sIG1vdXNlQnV0dG9uLCBRdDo6Tm9Nb2RpZmllcik7Ci0KLSAgICAvLyBTZW5kIHRoZSBldmVu
dCB0byB0aGUgY2FudmFzIGFuZCBsZXQgdGhlIGNhbnZhcyBwcm9wYWdhdGUgaXQKLSAgICAvLyB0
byB0aGUgRmxpY2thYmxlLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgRmxpY2thYmxlIGdyYWJz
Ci0gICAgLy8gdGhlIG1vdXNlIHNvIHRoYXQgaXQgYWxzbyByZWNlaXZlcyB0aGUgZXZlbnRzIG9m
IGdlc3R1cmVzCi0gICAgLy8gd2hpY2ggc3RhcnRlZCBpbnNpZGUgdGhlIHZpZXdwb3J0IGJ1dCBl
bmRlZCBvdXRzaWRlIG9mIGl0LgotICAgIFFDb3JlQXBwbGljYXRpb246OnNlbmRFdmVudChtX2Zs
aWNrYWJsZS0+Y2FudmFzKCksICZtb3VzZUV2ZW50KTsKLX0KLQotUVF1aWNrSXRlbSogUXRGbGlj
a1Byb3ZpZGVyOjpjb250ZW50SXRlbSgpCi17Ci0gICAgQVNTRVJUKG1fY29udGVudEl0ZW0pOwot
ICAgIHJldHVybiBtX2NvbnRlbnRJdGVtOwotfQotCi1RRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8
UU9iamVjdD4gUXRGbGlja1Byb3ZpZGVyOjpmbGlja2FibGVEYXRhKCkKLXsKLSAgICByZXR1cm4g
bV9mbGlja2FibGVEYXRhLnJlYWQobV9mbGlja2FibGUpLnZhbHVlPFFEZWNsYXJhdGl2ZUxpc3RQ
cm9wZXJ0eTxRT2JqZWN0PiA+KCk7Ci19Ci0KLVFQb2ludEYgUXRGbGlja1Byb3ZpZGVyOjpjb250
ZW50UG9zKCkgY29uc3QKLXsKLSAgICBxcmVhbCB4ID0gbV9jb250ZW50WC5yZWFkKG1fZmxpY2th
YmxlKS52YWx1ZTxxcmVhbD4oKTsKLSAgICBxcmVhbCB5ID0gbV9jb250ZW50WS5yZWFkKG1fZmxp
Y2thYmxlKS52YWx1ZTxxcmVhbD4oKTsKLSAgICByZXR1cm4gUVBvaW50Rih4LCB5KTsKLX0KLXZv
aWQgUXRGbGlja1Byb3ZpZGVyOjpzZXRDb250ZW50UG9zKGNvbnN0IFFQb2ludEYmIHBvcykKLXsK
LSAgICBtX2NvbnRlbnRYLndyaXRlKG1fZmxpY2thYmxlLCBwb3MueCgpKTsKLSAgICBtX2NvbnRl
bnRZLndyaXRlKG1fZmxpY2thYmxlLCBwb3MueSgpKTsKLX0KLQotUVNpemVGIFF0RmxpY2tQcm92
aWRlcjo6dmlld3BvcnRTaXplKCkgY29uc3QKLXsKLSAgICBxcmVhbCB3aWR0aCA9IG1fZmxpY2th
YmxlLT53aWR0aCgpOwotICAgIHFyZWFsIGhlaWdodCA9IG1fZmxpY2thYmxlLT5oZWlnaHQoKTsK
LQotICAgIHJldHVybiBRU2l6ZUYod2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgUXRGbGlja1By
b3ZpZGVyOjpzZXRWaWV3cG9ydFNpemUoY29uc3QgUVNpemVGJiBzaXplKQotewotICAgIEFTU0VS
VChzaXplLmlzVmFsaWQoKSk7Ci0gICAgbV9mbGlja2FibGUtPnNldFdpZHRoKHNpemUud2lkdGgo
KSk7Ci0gICAgbV9mbGlja2FibGUtPnNldEhlaWdodChzaXplLmhlaWdodCgpKTsKLX0KLQotdm9p
ZCBRdEZsaWNrUHJvdmlkZXI6OnJldHVyblRvQm91bmRzKCkKLXsKLSAgICBtX3JldHVyblRvQm91
bmRzTWV0aG9kLmludm9rZShtX2ZsaWNrYWJsZSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotfQot
Ci12b2lkIFF0RmxpY2tQcm92aWRlcjo6Y2FuY2VsRmxpY2soKQotewotICAgIG1fY2FuY2VsRmxp
Y2tNZXRob2QuaW52b2tlKG1fZmxpY2thYmxlLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci19Ci0K
LWJvb2wgUXRGbGlja1Byb3ZpZGVyOjppc01vdmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
bW92aW5nLnJlYWQobV9mbGlja2FibGUpLnZhbHVlPGJvb2w+KCk7Ci19Ci0KLWJvb2wgUXRGbGlj
a1Byb3ZpZGVyOjppc0RyYWdnaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kcmFnZ2luZy5y
ZWFkKG1fZmxpY2thYmxlKS52YWx1ZTxib29sPigpOwotfQotCi1ib29sIFF0RmxpY2tQcm92aWRl
cjo6aXNGbGlja2luZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZmxpY2tpbmcucmVhZChtX2Zs
aWNrYWJsZSkudmFsdWU8Ym9vbD4oKTsKLX0KLQotcXJlYWwgUXRGbGlja1Byb3ZpZGVyOjpjb250
ZW50V2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRXaWR0aC5yZWFkKG1fZmxp
Y2thYmxlKS52YWx1ZTxxcmVhbD4oKTsKLX0KLQotdm9pZCBRdEZsaWNrUHJvdmlkZXI6OnNldENv
bnRlbnRXaWR0aChxcmVhbCB3aWR0aCkKLXsKLSAgICBtX2NvbnRlbnRXaWR0aC53cml0ZShtX2Zs
aWNrYWJsZSwgd2lkdGgpOwotfQotCi1xcmVhbCBRdEZsaWNrUHJvdmlkZXI6OmNvbnRlbnRIZWln
aHQoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRIZWlnaHQucmVhZChtX2ZsaWNrYWJs
ZSkudmFsdWU8cXJlYWw+KCk7Ci19Ci0KLXZvaWQgUXRGbGlja1Byb3ZpZGVyOjpzZXRDb250ZW50
SGVpZ2h0KHFyZWFsIGhlaWdodCkKLXsKLSAgICBtX2NvbnRlbnRIZWlnaHQud3JpdGUobV9mbGlj
a2FibGUsIGhlaWdodCk7Ci19Ci0KLXFyZWFsIFF0RmxpY2tQcm92aWRlcjo6Y29udGVudFgoKSBj
b25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRYLnJlYWQobV9mbGlja2FibGUpLnZhbHVlPHFy
ZWFsPigpOwotfQotCi12b2lkIFF0RmxpY2tQcm92aWRlcjo6c2V0Q29udGVudFgocXJlYWwgeCkK
LXsKLSAgICBtX2NvbnRlbnRYLndyaXRlKG1fZmxpY2thYmxlLCB4KTsKLX0KLQotcXJlYWwgUXRG
bGlja1Byb3ZpZGVyOjpjb250ZW50WSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudFku
cmVhZChtX2ZsaWNrYWJsZSkudmFsdWU8cXJlYWw+KCk7Ci19Ci0KLXZvaWQgUXRGbGlja1Byb3Zp
ZGVyOjpzZXRDb250ZW50WShxcmVhbCB5KQotewotICAgIG1fY29udGVudFkud3JpdGUobV9mbGlj
a2FibGUsIHkpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
RmxpY2tQcm92aWRlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92
aWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzU4MTBiLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlkZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFF0Rmxp
Y2tQcm92aWRlcl9oCi0jZGVmaW5lIFF0RmxpY2tQcm92aWRlcl9oCi0KLSNpbmNsdWRlIDxRRGVj
bGFyYXRpdmVMaXN0UHJvcGVydHk+Ci0jaW5jbHVkZSA8UU1ldGFNZXRob2Q+Ci0jaW5jbHVkZSA8
UU1ldGFQcm9wZXJ0eT4KLSNpbmNsdWRlIDxRT2JqZWN0PgotCi1RVF9CRUdJTl9OQU1FU1BBQ0UK
LWNsYXNzIFFQb2ludEY7Ci1jbGFzcyBRU2l6ZUY7Ci1jbGFzcyBRUXVpY2tJdGVtOwotY2xhc3Mg
UVF1aWNrV2ViUGFnZTsKLWNsYXNzIFFRdWlja1dlYlZpZXc7Ci1jbGFzcyBRVG91Y2hFdmVudDsK
LVFUX0VORF9OQU1FU1BBQ0UKLQotY2xhc3MgUXRGbGlja1Byb3ZpZGVyIDogcHVibGljIFFPYmpl
Y3QgewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgUXRGbGlja1Byb3ZpZGVyKFFRdWlja1dl
YlZpZXcqIHZpZXdJdGVtLCBRUXVpY2tXZWJQYWdlKiBwYWdlSXRlbSk7Ci0KLSAgICB2b2lkIGhh
bmRsZVRvdWNoRmxpY2tFdmVudChRVG91Y2hFdmVudCopOwotCi0gICAgUVF1aWNrSXRlbSogY29u
dGVudEl0ZW0oKTsKLSAgICBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4gZmxpY2th
YmxlRGF0YSgpOwotCi0gICAgUVBvaW50RiBjb250ZW50UG9zKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRDb250ZW50UG9zKGNvbnN0IFFQb2ludEYmKTsKLQotICAgIFFTaXplRiB2aWV3cG9ydFNpemUo
KSBjb25zdDsKLSAgICB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBRU2l6ZUYmKTsKLQotICAg
IHZvaWQgcmV0dXJuVG9Cb3VuZHMoKTsKLSAgICB2b2lkIGNhbmNlbEZsaWNrKCk7Ci0KLSAgICBi
b29sIGlzTW92aW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0RyYWdnaW5nKCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0ZsaWNraW5nKCkgY29uc3Q7Ci0KLSAgICBxcmVhbCBjb250ZW50V2lkdGgoKSBjb25z
dDsKLSAgICB2b2lkIHNldENvbnRlbnRXaWR0aChxcmVhbCk7Ci0gICAgcXJlYWwgY29udGVudEhl
aWdodCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGVudEhlaWdodChxcmVhbCk7Ci0gICAgcXJl
YWwgY29udGVudFgoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnRYKHFyZWFsKTsKLSAgICBx
cmVhbCBjb250ZW50WSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGVudFkocXJlYWwpOwotCi1R
X1NJR05BTFM6Ci0gICAgdm9pZCBjb250ZW50V2lkdGhDaGFuZ2VkKCk7Ci0gICAgdm9pZCBjb250
ZW50SGVpZ2h0Q2hhbmdlZCgpOwotICAgIHZvaWQgY29udGVudFhDaGFuZ2VkKCk7Ci0gICAgdm9p
ZCBjb250ZW50WUNoYW5nZWQoKTsKLSAgICB2b2lkIG1vdmVtZW50U3RhcnRlZCgpOwotICAgIHZv
aWQgbW92ZW1lbnRFbmRlZCgpOwotICAgIHZvaWQgZmxpY2tpbmdDaGFuZ2VkKCk7Ci0gICAgdm9p
ZCBkcmFnZ2luZ0NoYW5nZWQoKTsKLQotcHJpdmF0ZToKLSAgICBRTWV0YU1ldGhvZCBtX3JldHVy
blRvQm91bmRzTWV0aG9kOwotICAgIFFNZXRhTWV0aG9kIG1fY2FuY2VsRmxpY2tNZXRob2Q7Ci0K
LSAgICBRTWV0YVByb3BlcnR5IG1fY29udGVudFdpZHRoOwotICAgIFFNZXRhUHJvcGVydHkgbV9j
b250ZW50SGVpZ2h0OwotICAgIFFNZXRhUHJvcGVydHkgbV9jb250ZW50WDsKLSAgICBRTWV0YVBy
b3BlcnR5IG1fY29udGVudFk7Ci0KLSAgICBRTWV0YVByb3BlcnR5IG1fbW92aW5nOwotICAgIFFN
ZXRhUHJvcGVydHkgbV9kcmFnZ2luZzsKLSAgICBRTWV0YVByb3BlcnR5IG1fZmxpY2tpbmc7Ci0K
LSAgICBRTWV0YVByb3BlcnR5IG1fZmxpY2thYmxlRGF0YTsKLQotICAgIFFRdWlja0l0ZW0qIG1f
Y29udGVudEl0ZW07Ci0gICAgUVF1aWNrSXRlbSogbV9mbGlja2FibGU7Ci19OwotCi0jZW5kaWYg
Ly8gUXRGbGlja1Byb3ZpZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcAppbmRleCA0MzFmOGQ4Li4yOGNlNDU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2du
aXplci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJl
Y29nbml6ZXIuY3BwCkBAIC03NiwxNiArNzYsMTYgQEAgYm9vbCBRdFBhbkdlc3R1cmVSZWNvZ25p
emVyOjpyZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50KQogCiAgICAgICAgICAgICBt
X3N0YXRlID0gR2VzdHVyZVJlY29nbml6ZWQ7CiAgICAgICAgICAgICBBU1NFUlQobV90b3VjaEJl
Z2luKTsKLSAgICAgICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVTdGFydGVk
KG1fdG91Y2hCZWdpbi5kYXRhKCkpOworICAgICAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+
cGFuR2VzdHVyZVN0YXJ0ZWQodG91Y2hQb2ludC5wb3MoKSwgZXZlbnQtPnRpbWVzdGFtcCgpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IEdlc3R1cmVSZWNvZ25pemVk
KTsKLSAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUo
ZXZlbnQpOworICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlUmVxdWVzdFVw
ZGF0ZSh0b3VjaFBvaW50LnBvcygpLCBldmVudC0+dGltZXN0YW1wKCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgY2FzZSBRRXZlbnQ6OlRvdWNoRW5kOgogICAgICAgICBpZiAo
bV9zdGF0ZSA9PSBHZXN0dXJlUmVjb2duaXplZCkgewotICAgICAgICAgICAgaW50ZXJhY3Rpb25F
bmdpbmUoKS0+cGFuR2VzdHVyZUVuZGVkKGV2ZW50KTsKKyAgICAgICAgICAgIGludGVyYWN0aW9u
RW5naW5lKCktPnBhbkdlc3R1cmVFbmRlZCh0b3VjaFBvaW50LnBvcygpLCBldmVudC0+dGltZXN0
YW1wKCkpOwogICAgICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwCmluZGV4IGU0MWZlMjAuLjVjMTA2MjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUuY3BwCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lLmgiCiAKICNpbmNsdWRlICJQYXNzT3duUHRyLmgiCi0jaW5j
bHVkZSAiUXRGbGlja1Byb3ZpZGVyLmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAj
aW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVkZSA8UVBvaW50Rj4KQEAgLTEyMCwx
MCArMTE5LDkgQEAgaW5saW5lIFFSZWN0RiBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Oml0
ZW1SZWN0RnJvbUNTUyhjb25zdCBRUmVjdEYmIGNzc1JlY3QKICAgICByZXR1cm4gaXRlbVJlY3Q7
CiB9CiAKLVF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6UXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0LCBRUXVpY2tXZWJQYWdlKiBjb250ZW50LCBR
dEZsaWNrUHJvdmlkZXIqIGZsaWNrUHJvdmlkZXIpCitRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmU6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCwg
UVF1aWNrV2ViUGFnZSogY29udGVudCkKICAgICA6IG1fdmlld3BvcnQodmlld3BvcnQpCiAgICAg
LCBtX2NvbnRlbnQoY29udGVudCkKLSAgICAsIG1fZmxpY2tQcm92aWRlcihmbGlja1Byb3ZpZGVy
KQogICAgICwgbV9zdXNwZW5kQ291bnQoMCkKICAgICAsIG1faGFzU3VzcGVuZGVkQ29udGVudChm
YWxzZSkKICAgICAsIG1faGFkVXNlckludGVyYWN0aW9uKGZhbHNlKQpAQCAtMTM0LDggKzEzMiw4
IEBAIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0CiAKICAgICBjb25uZWN0KG1fY29udGVudCwgU0lH
TkFMKHdpZHRoQ2hhbmdlZCgpKSwgU0xPVChpdGVtU2l6ZUNoYW5nZWQoKSksIFF0OjpEaXJlY3RD
b25uZWN0aW9uKTsKICAgICBjb25uZWN0KG1fY29udGVudCwgU0lHTkFMKGhlaWdodENoYW5nZWQo
KSksIFNMT1QoaXRlbVNpemVDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci0gICAg
Y29ubmVjdChtX2ZsaWNrUHJvdmlkZXIsIFNJR05BTChtb3ZlbWVudFN0YXJ0ZWQoKSksIFNMT1Qo
ZmxpY2thYmxlTW92ZVN0YXJ0ZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAgICBjb25u
ZWN0KG1fZmxpY2tQcm92aWRlciwgU0lHTkFMKG1vdmVtZW50RW5kZWQoKSksIFNMT1QoZmxpY2th
YmxlTW92ZUVuZGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX3Zp
ZXdwb3J0LCBTSUdOQUwobW92ZW1lbnRTdGFydGVkKCkpLCBTTE9UKGZsaWNrYWJsZU1vdmVTdGFy
dGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX3ZpZXdwb3J0LCBT
SUdOQUwobW92ZW1lbnRFbmRlZCgpKSwgU0xPVChmbGlja2FibGVNb3ZlRW5kZWQoKSksIFF0OjpE
aXJlY3RDb25uZWN0aW9uKTsKIAogICAgIGNvbm5lY3QobV9zY2FsZUFuaW1hdGlvbiwgU0lHTkFM
KHZhbHVlQ2hhbmdlZChRVmFyaWFudCkpLAogICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlv
blZhbHVlQ2hhbmdlZChRVmFyaWFudCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CkBAIC0xNzgs
NyArMTc2LDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNldEl0ZW1SZWN0
VmlzaWJsZShjb25zdCBRUmVjdEYmIGl0ZW1SZWN0KQogICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhl
IHBhZ2UgcG9zaXRpb24gKGRpc3BsYWNlbWVudCBvbiB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVt
IGJlY2F1c2Ugb2YgYWRkaXRpb25hbCBpdGVtcykuCiAgICAgUVBvaW50RiBuZXdQb3NpdGlvbiht
X2NvbnRlbnQtPnBvcygpICsgKGl0ZW1SZWN0LnRvcExlZnQoKSAqIGl0ZW1TY2FsZSkpOwogCi0g
ICAgbV9mbGlja1Byb3ZpZGVyLT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKKyAgICBtX3Zp
ZXdwb3J0LT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKIH0KIAogYm9vbCBRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6OmFuaW1hdGVJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBp
dGVtUmVjdCkKQEAgLTE5OSwyOCArMTk3LDI4IEBAIGJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjphbmltYXRlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCiAK
IHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpmbGlja2FibGVNb3ZlU3RhcnRlZCgp
CiB7Ci0gICAgUV9BU1NFUlQobV9mbGlja1Byb3ZpZGVyLT5pc01vdmluZygpKTsKKyAgICBRX0FT
U0VSVChtX3ZpZXdwb3J0LT5pc01vdmluZygpKTsKICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVy
ID0gYWRvcHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3BvcnRVcGRh
dGVEZWZlcnJlcjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOwogCi0gICAgbV9sYXN0
U2Nyb2xsUG9zaXRpb24gPSBtX2ZsaWNrUHJvdmlkZXItPmNvbnRlbnRQb3MoKTsKLSAgICBjb25u
ZWN0KG1fZmxpY2tQcm92aWRlciwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwgU0xPVChmbGlj
a2FibGVNb3ZpbmdQb3NpdGlvblVwZGF0ZSgpKSk7Ci0gICAgY29ubmVjdChtX2ZsaWNrUHJvdmlk
ZXIsIFNJR05BTChjb250ZW50WUNoYW5nZWQoKSksIFNMT1QoZmxpY2thYmxlTW92aW5nUG9zaXRp
b25VcGRhdGUoKSkpOworICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gbV92aWV3cG9ydC0+Y29u
dGVudFBvcygpOworICAgIGNvbm5lY3QobV92aWV3cG9ydCwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdl
ZCgpKSwgU0xPVChmbGlja2FibGVNb3ZpbmdQb3NpdGlvblVwZGF0ZSgpKSk7CisgICAgY29ubmVj
dChtX3ZpZXdwb3J0LCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkpLCBTTE9UKGZsaWNrYWJsZU1v
dmluZ1Bvc2l0aW9uVXBkYXRlKCkpKTsKIH0KIAogdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OmZsaWNrYWJsZU1vdmVFbmRlZCgpCiB7Ci0gICAgUV9BU1NFUlQoIW1fZmxpY2tQcm92
aWRlci0+aXNNb3ZpbmcoKSk7CisgICAgUV9BU1NFUlQoIW1fdmlld3BvcnQtPmlzTW92aW5nKCkp
OwogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgZW5kIG9mIHRoZSBwYW4gb3Ig
cGFuIGtpbmV0aWMgYW5pbWF0aW9uLgogICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIuY2xlYXIo
KTsKIAogICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gUVBvaW50RigpOwotICAgIGRpc2Nvbm5l
Y3QobV9mbGlja1Byb3ZpZGVyLCBTSUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCB0aGlzLCBTTE9U
KGZsaWNrYWJsZU1vdmluZ1Bvc2l0aW9uVXBkYXRlKCkpKTsKLSAgICBkaXNjb25uZWN0KG1fZmxp
Y2tQcm92aWRlciwgU0lHTkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChmbGlja2Fi
bGVNb3ZpbmdQb3NpdGlvblVwZGF0ZSgpKSk7CisgICAgZGlzY29ubmVjdChtX3ZpZXdwb3J0LCBT
SUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKGZsaWNrYWJsZU1vdmluZ1Bvc2l0
aW9uVXBkYXRlKCkpKTsKKyAgICBkaXNjb25uZWN0KG1fdmlld3BvcnQsIFNJR05BTChjb250ZW50
WUNoYW5nZWQoKSksIHRoaXMsIFNMT1QoZmxpY2thYmxlTW92aW5nUG9zaXRpb25VcGRhdGUoKSkp
OwogfQogCiB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZmxpY2thYmxlTW92aW5n
UG9zaXRpb25VcGRhdGUoKQogewotICAgIFFQb2ludEYgbmV3UG9zaXRpb24gPSBtX2ZsaWNrUHJv
dmlkZXItPmNvbnRlbnRQb3MoKTsKKyAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uID0gbV92aWV3cG9y
dC0+Y29udGVudFBvcygpOwogCiAgICAgZW1pdCBjb250ZW50Vmlld3BvcnRDaGFuZ2VkKG1fbGFz
dFNjcm9sbFBvc2l0aW9uIC0gbmV3UG9zaXRpb24pOwogCkBAIC0yMzEsMTMgKzIyOSwxMiBAQCB2
b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBbmltYXRpb25TdGF0ZUNoYW5n
ZWQoUUFic3RyYWN0QW5pbWF0aW9uOgogewogICAgIHN3aXRjaCAobmV3U3RhdGUpIHsKICAgICBj
YXNlIFFBYnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZzoKLSAgICAgICAgbV9mbGlja1Byb3ZpZGVy
LT5jYW5jZWxGbGljaygpOworICAgICAgICBtX3ZpZXdwb3J0LT5jYW5jZWxGbGljaygpOwogICAg
ICAgICBpZiAoIW1fc2NhbGVVcGRhdGVEZWZlcnJlcikKICAgICAgICAgICAgIG1fc2NhbGVVcGRh
dGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKHRoaXMsIFZp
ZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBRQWJzdHJhY3RBbmltYXRpb246OlN0b3BwZWQ6CiAgICAg
ICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOwotICAgICAgICBtX2ZsaWNrUHJvdmlk
ZXItPmNvbnRlbnRJdGVtKCktPnBhcmVudEl0ZW0oKS0+c2V0UHJvcGVydHkoImludGVyYWN0aXZl
IiwgdHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpA
QCAtMjU2LDcgKzI1Myw2IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp3aGVl
bEV2ZW50KFFXaGVlbEV2ZW50KiBldikKICAgICAgICAgcmV0dXJuOyAvLyBJZ25vcmUuCiAKICAg
ICBpbnQgZGVsdGEgPSBldi0+ZGVsdGEoKTsKLSAgICBRUG9pbnRGIG5ld1BvcyA9IC1tX2NvbnRl
bnQtPnBvcygpOwogCiAgICAgLy8gQSBkZWx0YSB0aGF0IGlzIG5vdCBtb2QgMTIwIGluZGljYXRl
cyBhIGRldmljZSB0aGF0IGlzIHNlbmRpbmcKICAgICAvLyBmaW5lLXJlc29sdXRpb24gc2Nyb2xs
IGV2ZW50cywgc28gdXNlIHRoZSBkZWx0YSBhcyBudW1iZXIgb2Ygd2hlZWwgdGlja3MKQEAgLTI3
MCwxNiArMjY2LDE4IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp3aGVlbEV2
ZW50KFFXaGVlbEV2ZW50KiBldikKICAgICBkZWx0YSA9IChmdWxsVGljaykgPyBkZWx0YSAvIDEy
MC4wZiA6IGRlbHRhOwogICAgIGRlbHRhICo9IHNjcm9sbExpbmVzOwogCisgICAgUVBvaW50RiBu
ZXdQb3NpdGlvbiA9IG1fdmlld3BvcnQtPmNvbnRlbnRQb3MoKTsKKwogICAgIGlmIChldi0+b3Jp
ZW50YXRpb24oKSA9PSBRdDo6SG9yaXpvbnRhbCkKLSAgICAgICAgbmV3UG9zLnJ4KCkgKz0gZGVs
dGE7CisgICAgICAgIG5ld1Bvc2l0aW9uLnJ4KCkgKz0gZGVsdGE7CiAgICAgZWxzZQotICAgICAg
ICBuZXdQb3MucnkoKSArPSBkZWx0YTsKKyAgICAgICAgbmV3UG9zaXRpb24ucnkoKSArPSBkZWx0
YTsKIAogICAgIFFSZWN0RiBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvckl0ZW1BdFNj
YWxlKG1fY29udGVudC0+Y29udGVudHNTY2FsZSgpKTsKIAotICAgIFFQb2ludEYgY3VycmVudFBv
c2l0aW9uID0gbV9mbGlja1Byb3ZpZGVyLT5jb250ZW50UG9zKCk7Ci0gICAgUVBvaW50RiBuZXdQ
b3NpdGlvbiA9IC1ib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgbmV3UG9zLCBl
bmRQb3NSYW5nZS5ib3R0b21SaWdodCgpKTsKLSAgICBtX2ZsaWNrUHJvdmlkZXItPnNldENvbnRl
bnRQb3MobmV3UG9zaXRpb24pOworICAgIFFQb2ludEYgY3VycmVudFBvc2l0aW9uID0gbV92aWV3
cG9ydC0+Y29udGVudFBvcygpOworICAgIG5ld1Bvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQ
b3NSYW5nZS50b3BMZWZ0KCksIG5ld1Bvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgp
KTsKKyAgICBtX3ZpZXdwb3J0LT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKIAogICAgIGVt
aXQgY29udGVudFZpZXdwb3J0Q2hhbmdlZChjdXJyZW50UG9zaXRpb24gLSBuZXdQb3NpdGlvbik7
CiB9CkBAIC00MjEsNyArNDE5LDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnJlc2V0KCkKIAogICAgIG1faGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7CiAKLSAgICBtX2Zs
aWNrUHJvdmlkZXItPmNhbmNlbEZsaWNrKCk7CisgICAgbV92aWV3cG9ydC0+Y2FuY2VsRmxpY2so
KTsKICAgICBtX3NjYWxlQW5pbWF0aW9uLT5zdG9wKCk7CiAgICAgbV9zY2FsZVVwZGF0ZURlZmVy
cmVyLmNsZWFyKCk7CiAgICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlci5jbGVhcigpOwpAQCAtNDU1
LDMwICs0NTMsMzEgQEAgcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpjdXJyZW50
Q1NTU2NhbGUoKQogCiBib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2Nyb2xsQW5p
bWF0aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mbGlja1Byb3ZpZGVyLT5pc0Zs
aWNraW5nKCk7CisgICAgcmV0dXJuIG1fdmlld3BvcnQtPmlzRmxpY2tpbmcoKTsKIH0KIAogYm9v
bCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2ZsaWNrUHJvdmlkZXItPmlzRHJhZ2dpbmcoKTsKKyAgICByZXR1cm4g
bV92aWV3cG9ydC0+aXNEcmFnZ2luZygpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlv
bkVuZ2luZTo6cGFuR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50KQordm9p
ZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQ
b2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCiB7CiAgICAgbV9o
YWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwotCi0gICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0g
UUV2ZW50OjpUb3VjaEJlZ2luKTsKLQotICAgIG1fZmxpY2tQcm92aWRlci0+aGFuZGxlVG91Y2hG
bGlja0V2ZW50KGNvbnN0X2Nhc3Q8UVRvdWNoRXZlbnQqPihldmVudCkpOwotICAgIG1fbGFzdFBp
bmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gZXZlbnQtPnRvdWNoUG9pbnRzKCkuZmly
c3QoKS5wb3MoKTsKKyAgICBtX3ZpZXdwb3J0LT5oYW5kbGVQcmVzcyhwb3NpdGlvbiwgZXZlbnRU
aW1lc3RhbXBNaWxsaXMpOworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5h
dGVzID0gcG9zaXRpb247CiB9CiAKLXZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpw
YW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRVG91Y2hFdmVudCogZXZlbnQpCit2b2lkIFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3Qg
UVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKIHsKLSAgICBB
U1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6OlRvdWNoVXBkYXRlKTsKKyAgICBtX3ZpZXdw
b3J0LT5oYW5kbGVNb3ZlKHBvc2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9s
YXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKK30KIAotICAg
IG1fZmxpY2tQcm92aWRlci0+aGFuZGxlVG91Y2hGbGlja0V2ZW50KGNvbnN0X2Nhc3Q8UVRvdWNo
RXZlbnQqPihldmVudCkpOwotICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5h
dGVzID0gZXZlbnQtPnRvdWNoUG9pbnRzKCkuZmlyc3QoKS5wb3MoKTsKK3ZvaWQgUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgcG9zaXRp
b24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKK3sKKyAgICBtX3ZpZXdwb3J0LT5oYW5k
bGVSZWxlYXNlKHBvc2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9sYXN0UGlu
Y2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKIH0KIAogdm9pZCBRdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVDYW5jZWxsZWQoKQpAQCAtNDkwLDE0
ICs0ODksNyBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUNh
bmNlbGxlZCgpCiAgICAgLy8gYmFjayBpbnNpZGUgdmFsaWQgYm91bmRzLgogICAgIC8vIFdoZW4g
dGhlIHBpbmNoIGdlc3R1cmUgZW5kcywgdGhlIGNvbnRlbnQgaXMgcG9zaXRpb25lZCBhbmQgc2Nh
bGVkCiAgICAgLy8gYmFjayB0byB2YWxpZCBib3VuZGFyaWVzLgotICAgIG1fZmxpY2tQcm92aWRl
ci0+Y2FuY2VsRmxpY2soKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBhbkdlc3R1cmVFbmRlZChjb25zdCBRVG91Y2hFdmVudCogZXZlbnQpCi17Ci0gICAgQVNTRVJU
KGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpUb3VjaEVuZCk7Ci0gICAgbV9mbGlja1Byb3ZpZGVy
LT5oYW5kbGVUb3VjaEZsaWNrRXZlbnQoY29uc3RfY2FzdDxRVG91Y2hFdmVudCo+KGV2ZW50KSk7
Ci0gICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBldmVudC0+dG91
Y2hQb2ludHMoKS5maXJzdCgpLnBvcygpOworICAgIG1fdmlld3BvcnQtPmNhbmNlbEZsaWNrKCk7
CiB9CiAKIGJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFuaW1hdGlvbkFj
dGl2ZSgpIGNvbnN0CkBAIC01MTQsNyArNTA2LDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OmNhbmNlbFNjcm9sbEFuaW1hdGlvbigpCiAgICAgLy8gcGFuIGdlc3R1cmUsIHRo
ZSBhbmltYXRpb24gaXMgc3RvcHBlZCBhbmQgdGhlIGNvbnRlbnQgaXMKICAgICAvLyBpbW1lZGlh
dGVseSBwb3NpdGlvbmVkIGJhY2sgdG8gdmFsaWQgYm91bmRhcmllcy4KIAotICAgIG1fZmxpY2tQ
cm92aWRlci0+Y2FuY2VsRmxpY2soKTsKKyAgICBtX3ZpZXdwb3J0LT5jYW5jZWxGbGljaygpOwog
ICAgIGVuc3VyZUNvbnRlbnRXaXRoaW5WaWV3cG9ydEJvdW5kYXJ5KC8qaW1tZWRpYXRlKi8gdHJ1
ZSk7CiB9CiAKQEAgLTUzNiw5ICs1MjgsNiBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6cGluY2hHZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlcgogCiAg
ICAgbV9oYWRVc2VySW50ZXJhY3Rpb24gPSB0cnVlOwogCi0gICAgbV9mbGlja1Byb3ZpZGVyLT5j
YW5jZWxGbGljaygpOwotICAgIG1fZmxpY2tQcm92aWRlci0+Y29udGVudEl0ZW0oKS0+cGFyZW50
SXRlbSgpLT5zZXRQcm9wZXJ0eSgiaW50ZXJhY3RpdmUiLCBmYWxzZSk7Ci0KICAgICBtX3NjYWxl
VXBkYXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlz
LCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7
CiAKICAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOwpAQCAtNTY3LDcgKzU1Niw3IEBAIHZvaWQgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQ
b2ludEYmIHBpbmNoCiAgICAgY29uc3QgUVBvaW50RiBwb3NpdGlvbkRpZmYgPSBwaW5jaENlbnRl
ckluVmlld3BvcnRDb29yZGluYXRlcyAtIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzOwogICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcGlu
Y2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7CiAKLSAgICBtX2ZsaWNrUHJvdmlkZXItPnNl
dENvbnRlbnRQb3MobV9mbGlja1Byb3ZpZGVyLT5jb250ZW50UG9zKCkgLSBwb3NpdGlvbkRpZmYp
OworICAgIG1fdmlld3BvcnQtPnNldENvbnRlbnRQb3MobV92aWV3cG9ydC0+Y29udGVudFBvcygp
IC0gcG9zaXRpb25EaWZmKTsKIH0KIAogdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBpbmNoR2VzdHVyZUVuZGVkKCkKQEAgLTU3OSwxMSArNTY4LDggQEAgdm9pZCBRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVyZUVuZGVkKCkKIAogICAgIG1fcGluY2hTdGFy
dFNjYWxlID0gLTE7CiAgICAgLy8gQ2xlYXIgdGhlIHVwZGF0ZSBkZWZlcnJlciBub3cgaWYgd2Un
cmUgaW4gb3VyIGZpbmFsIHBvc2l0aW9uIGFuZCB0aGVyZSB3b24ndCBiZSBhbnkgYW5pbWF0aW9u
IHRvIGNsZWFyIGl0IGxhdGVyLgotICAgIGlmIChlbnN1cmVDb250ZW50V2l0aGluVmlld3BvcnRC
b3VuZGFyeSgpKSB7CisgICAgaWYgKGVuc3VyZUNvbnRlbnRXaXRoaW5WaWV3cG9ydEJvdW5kYXJ5
KCkpCiAgICAgICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOwotICAgICAgICBtX2Zs
aWNrUHJvdmlkZXItPmNhbmNlbEZsaWNrKCk7Ci0gICAgICAgIG1fZmxpY2tQcm92aWRlci0+Y29u
dGVudEl0ZW0oKS0+cGFyZW50SXRlbSgpLT5zZXRQcm9wZXJ0eSgiaW50ZXJhY3RpdmUiLCB0cnVl
KTsKLSAgICB9CiB9CiAKIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppdGVtU2l6
ZUNoYW5nZWQoKQpAQCAtNjAyLDcgKzU4OCw3IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lOjpzY2FsZUNvbnRlbnQoY29uc3QgUVBvaW50RiYgY2VudGVySW5DU1NDb29yZGluCiAg
ICAgbV9jb250ZW50LT5zZXRDb250ZW50c1NjYWxlKGl0ZW1TY2FsZUZyb21DU1MoY3NzU2NhbGUp
KTsKICAgICBRUG9pbnRGIG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCA9IG1fdmlld3BvcnQtPm1h
cEZyb21XZWJDb250ZW50KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOwogCi0gICAgbV9mbGlja1By
b3ZpZGVyLT5zZXRDb250ZW50UG9zKG1fZmxpY2tQcm92aWRlci0+Y29udGVudFBvcygpICsgKG5l
d1BpbmNoQ2VudGVyT25WaWV3cG9ydCAtIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9ydCkpOworICAg
IG1fdmlld3BvcnQtPnNldENvbnRlbnRQb3MobV92aWV3cG9ydC0+Y29udGVudFBvcygpICsgKG5l
d1BpbmNoQ2VudGVyT25WaWV3cG9ydCAtIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9ydCkpOwogfQog
CiAjaW5jbHVkZSAibW9jX1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9u
RW5naW5lLmgKaW5kZXggZjlhOTVlZC4uM2IwMDMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaApAQCAt
MzMsNyArMzMsNiBAQAogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRUG9pbnRGOwogY2xhc3Mg
UVF1aWNrSXRlbTsKLWNsYXNzIFF0RmxpY2tQcm92aWRlcjsKIGNsYXNzIFFRdWlja1dlYlBhZ2U7
CiBjbGFzcyBRUXVpY2tXZWJWaWV3OwogY2xhc3MgUVdoZWVsRXZlbnQ7CkBAIC00Nyw3ICs0Niw3
IEBAIGNsYXNzIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSA6IHB1YmxpYyBRT2JqZWN0IHsK
ICAgICBRX09CSkVDVAogCiBwdWJsaWM6Ci0gICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
KFFRdWlja1dlYlZpZXcqLCBRUXVpY2tXZWJQYWdlKiwgUXRGbGlja1Byb3ZpZGVyKik7CisgICAg
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFFRdWlja1dlYlZpZXcqLCBRUXVpY2tXZWJQYWdl
Kik7CiAgICAgflF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZSgpOwogCiAgICAgc3RydWN0IENv
bnN0cmFpbnRzIHsKQEAgLTgzLDEwICs4MiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYW5jZWxT
Y3JvbGxBbmltYXRpb24oKTsKIAogICAgIGJvb2wgcGFuR2VzdHVyZUFjdGl2ZSgpIGNvbnN0Owot
ICAgIHZvaWQgcGFuR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVRvdWNoRXZlbnQqKTsKLSAgICB2b2lk
IHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50Kik7CisgICAgdm9pZCBw
YW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGlt
ZXN0YW1wTWlsbGlzKTsKKyAgICB2b2lkIHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQ
b2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQg
cGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1l
c3RhbXBNaWxsaXMpOwogICAgIHZvaWQgcGFuR2VzdHVyZUNhbmNlbGxlZCgpOwotICAgIHZvaWQg
cGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFUb3VjaEV2ZW50Kik7CiAKICAgICBib29sIHNjYWxlQW5p
bWF0aW9uQWN0aXZlKCkgY29uc3Q7CiAgICAgdm9pZCBpbnRlcnJ1cHRTY2FsZUFuaW1hdGlvbigp
OwpAQCAtMTQyLDggKzE0MSw2IEBAIHByaXZhdGU6CiAgICAgUVF1aWNrV2ViVmlldyogY29uc3Qg
bV92aWV3cG9ydDsKICAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBtX2NvbnRlbnQ7CiAKLSAgICBR
dEZsaWNrUHJvdmlkZXIqIGNvbnN0IG1fZmxpY2tQcm92aWRlcjsKLQogICAgIENvbnN0cmFpbnRz
IG1fY29uc3RyYWludHM7CiAKICAgICBpbnQgbV9zdXNwZW5kQ291bnQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCmluZGV4
IDNlNzhjYTIuLjEwMjY2ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCkBAIC00NTMsNyArNDUzLDcgQEAgdm9pZCBR
dFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJU
b3VjaEV2ZW50JiBldmVudCwKICAgICAgICAgLy8gVGhlIGludGVyYWN0aW9uIGVuZ2luZSBtaWdo
dCBzdGlsbCBiZSBhbmltYXRpbmcga2luZXRpYyBzY3JvbGxpbmcgb3IgYSBzY2FsZSBhbmltYXRp
b24KICAgICAgICAgLy8gc3VjaCBhcyBkb3VibGUtdGFwIHRvIHpvb20gb3IgdGhlIGJvdW5jZSBi
YWNrIGVmZmVjdC4gQSB0b3VjaCBzdG9wcyB0aGUga2luZXRpYyBzY3JvbGxpbmcKICAgICAgICAg
Ly8gd2hlcmUgYXMgaXQgZG9lcyBub3Qgc3RvcCB0aGUgc2NhbGUgYW5pbWF0aW9uLgotICAgICAg
ICAvLyBTZW5kaW5nIHRoZSBldmVudCB0byB0aGUgZmxpY2tQcm92aWRlciB3aWxsIHN0b3AgdGhl
IGtpbmV0aWMgc2Nyb2xsaW5nIGFuaW1hdGlvbi4KKyAgICAgICAgLy8gVGhlIGdlc3R1cmUgcmVj
b2duaXplciBzdG9wcyB0aGUga2luZXRpYyBzY3JvbGxpbmcgYW5pbWF0aW9uIGlmIG5lZWRlZC4K
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBRRXZlbnQ6OlRvdWNoVXBkYXRlOgogICAgICAgICAv
LyBUaGUgc2NhbGUgYW5pbWF0aW9uIGNhbiBvbmx5IGJlIGludGVycnVwdGVkIGJ5IGEgcGluY2gg
Z2VzdHVyZSwgd2hpY2ggd2lsbCB0aGVuIHRha2Ugb3Zlci4KZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjYzE0YTI3Li43ZjNlM2E4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTItMDQtMDMgIEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+CisK
KyAgICAgICAgW1F0XVtXSzJdIE1ha2UgdGhlIFdlYlZpZXcgYSBzdWJjbGFzcyBvZiBGbGlja2Fi
bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzMDMz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3Zl
IHdvcmthcm91bmQgaW4gTWluaUJyb3dzZXIgYW5kIHRoZSBTY3JvbGxJbmRpY2F0b3IKKyAgICAg
ICAgbm93IHRoYXQgdGhlIFdlYlZpZXcgaXMgYSBGbGlja2FibGUuCisKKyAgICAgICAgKiBNaW5p
QnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm86CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1s
L0Jyb3dzZXJXaW5kb3cucW1sOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9TY3JvbGxJ
bmRpY2F0b3IucW1sOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaToKKwog
MjAxMi0wNC0wMyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgYW5vdGhlciB0ZXN0LXdlYmtpdHB5IGZpeC11cCBhZnRlciByMTEz
MDM3LgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvIGIv
VG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvCmluZGV4IGJmNDI2NDUuLmY3Yjgz
Y2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBybworKysg
Yi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8KQEAgLTIyLDcgKzIyLDcgQEAg
SEVBREVSUyArPSBcCiBUQVJHRVQgPSBNaW5pQnJvd3NlcgogREVTVERJUiA9ICQke1JPT1RfQlVJ
TERfRElSfS9iaW4KIAotUVQgKz0gbmV0d29yayBkZWNsYXJhdGl2ZSBxdWljayB3ZWJraXQgd2Vi
a2l0LXByaXZhdGUKK1FUICs9IG5ldHdvcmsgZGVjbGFyYXRpdmUgcXVpY2sgcXVpY2stcHJpdmF0
ZSB3ZWJraXQgd2Via2l0LXByaXZhdGUKIG1hY3g6IFFUICs9IHhtbAogCiBSRVNPVVJDRVMgKz0g
TWluaUJyb3dzZXIucXJjCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJv
d3NlcldpbmRvdy5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5x
bWwKaW5kZXggZWViODgxNi4uMzhmNmFmOSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIv
cXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9C
cm93c2VyV2luZG93LnFtbApAQCAtMzI2LDEwICszMjYsMTAgQEAgUmVjdGFuZ2xlIHsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAg
U2Nyb2xsSW5kaWNhdG9yIHsKLSAgICAgICAgICAgIGZsaWNrYWJsZUl0ZW06IHdlYlZpZXcuZXhw
ZXJpbWVudGFsLmZsaWNrYWJsZQotICAgICAgICB9CisgICAgU2Nyb2xsSW5kaWNhdG9yIHsKKyAg
ICAgICAgZmxpY2thYmxlSXRlbTogd2ViVmlldwogICAgIH0KIAogICAgIFZpZXdwb3J0SW5mb0l0
ZW0gewpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1Njcm9sbEluZGljYXRv
ci5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvU2Nyb2xsSW5kaWNhdG9yLnFtbAppbmRl
eCAzNTllNTY4Li45ZjEwMGJlIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwv
U2Nyb2xsSW5kaWNhdG9yLnFtbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvU2Nyb2xs
SW5kaWNhdG9yLnFtbApAQCAtMjksMTUgKzI5LDE0IEBAIGltcG9ydCBRdFF1aWNrIDIuMAogCiBJ
dGVtIHsKICAgICBpZDogcm9vdAotICAgIHo6IDEKKworICAgIHByb3BlcnR5IEZsaWNrYWJsZSBm
bGlja2FibGVJdGVtCiAKICAgICBhbmNob3JzIHsKLSAgICAgICAgZmlsbDogcGFyZW50CisgICAg
ICAgIGZpbGw6IGZsaWNrYWJsZUl0ZW0KICAgICAgICAgbWFyZ2luczogNQogICAgIH0KIAotICAg
IHByb3BlcnR5IEZsaWNrYWJsZSBmbGlja2FibGVJdGVtCi0KICAgICBwcm9wZXJ0eSBib29sIF9f
bW92aW5nSG9yaXpvbnRhbGx5OiBmbGlja2FibGVJdGVtID8gZmxpY2thYmxlSXRlbS5tb3ZpbmdI
b3Jpem9udGFsbHkgOiBmYWxzZQogICAgIHByb3BlcnR5IGJvb2wgX19tb3ZpbmdWZXJ0aWNhbGx5
OiBmbGlja2FibGVJdGVtID8gZmxpY2thYmxlSXRlbS5tb3ZpbmdWZXJ0aWNhbGx5IDogZmFsc2UK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpCmluZGV4IDZmMWRhOTUuLmI5ZTdhOGIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaQorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1RhcmdldC5wcmkKQEAgLTI1LDcgKzI1LDcgQEAgU09VUkNFUyArPSBcCiAK
IERFU1RESVIgPSAkJHtST09UX0JVSUxEX0RJUn0vYmluCiAKLVFUID0gY29yZSBndWkgd2lkZ2V0
cyBuZXR3b3JrIGRlY2xhcmF0aXZlIHRlc3RsaWIgcXVpY2sgd2Via2l0CitRVCA9IGNvcmUgZ3Vp
IHdpZGdldHMgbmV0d29yayBkZWNsYXJhdGl2ZSB0ZXN0bGliIHF1aWNrIHF1aWNrLXByaXZhdGUg
d2Via2l0CiAKIGxvYWQoZmVhdHVyZXMpCiAKLS0gCjEuNy45LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135554</attachid>
            <date>2012-04-04 04:14:17 -0700</date>
            <delta_ts>2012-04-04 05:21:25 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-Qt-WK2-Make-the-WebView-a-subclass-of-Flickable.patch</filename>
            <type>text/plain</type>
            <size>58756</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSA1M2VlYjc1MDUwYzY4MmYzMGI3NTY2ZmUxZGI0Mzk1ZTlmYjc1OWE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IFR1ZSwgMyBBcHIgMjAxMiAxODozOTozMiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtR
dF1bV0syXSBNYWtlIHRoZSBXZWJWaWV3IGEgc3ViY2xhc3Mgb2YgRmxpY2thYmxlCgotLS0KIFNv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiAr
CiAuLi4vcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVudGFsL2V4cGVyaW1lbnRhbC5wcmkgICB8ICAg
IDIgKy0KIFNvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaSAgICAgICAgICAg
IHwgICAgMiArLQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDg5ICsrKysrKysKIFNvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAgMiAtCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2UuY3BwICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgIHwgIDIwMiArKysrKysrLS0tLS0tLS0KIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggIHwgICA0MCArKy0KIC4u
Li9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaCAgIHwgICAgOCAr
LQogLi4uL3F0L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwICAgfCAg
ICAyICstCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3RzLnByaSAg
ICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlkZXIu
Y3BwICAgIHwgIDI2MCAtLS0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0RmxpY2tQcm92aWRlci5oICAgICAgfCAgIDk5IC0tLS0tLS0tCiAuLi4vVUlQcm9j
ZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwICAgICAgICB8ICAgIDYgKy0KIC4uLi9V
SVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcCAgIHwgICA5MiArKyst
LS0tCiAuLi4vVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oICAgICB8
ICAgMTEgKy0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIu
Y3BwIHwgICAgMiArLQogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDE1ICsrCiBUb29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8g
ICAgICAgICAgICAgICB8ICAgIDIgKy0KIFRvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2Vy
V2luZG93LnFtbCAgICAgICAgIHwgICAgNiArLQogVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1Nj
cm9sbEluZGljYXRvci5xbWwgICAgICAgfCAgICA3ICstCiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L1RhcmdldC5wcmkgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIDIyIGZpbGVzIGNoYW5nZWQs
IDI3OSBpbnNlcnRpb25zKCspLCA1ODYgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5jcHAKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRGbGlja1Byb3ZpZGVyLmgK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nCmluZGV4IDdhMzEwZGQuLjhiZTM1ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTItMDQtMDMgIEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tp
YS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIE1ha2UgdGhlIFdlYlZpZXcgYSBzdWJjbGFzcyBv
ZiBGbGlja2FibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgzMDMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIG5lZWRlZCBkZXBlbmRlbmN5IHRvIHF1aWNrLXByaXZhdGUgZm9yIHByb2plY3RzIHRo
YXQgaW5jbHVkZSB0aGUgV2ViVmlldyBoZWFkZXIuCisKKyAgICAgICAgKiBkZWNsYXJhdGl2ZS9l
eHBlcmltZW50YWwvZXhwZXJpbWVudGFsLnByaToKKyAgICAgICAgKiBkZWNsYXJhdGl2ZS9wdWJs
aWMucHJpOgorCiAyMDEyLTA0LTAzICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVu
Ym9zc2Eub3JnPgogCiAgICAgICAgIFtQYXJ0IDJdIFdlIHNob3VsZCB1c2UgQ1NTUHJvcGVydHlJ
RCByYXRoZXIgdGhhbiBpbnRlZ2VycyB3aGVuIG1hbmlwdWxhdGluZyBDU1MgcHJvcGVydHkgaWRz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50YWwv
ZXhwZXJpbWVudGFsLnByaSBiL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvZXhwZXJpbWVu
dGFsL2V4cGVyaW1lbnRhbC5wcmkKaW5kZXggMTUzODZiOC4uOGIwMTVlNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9leHBlcmltZW50YWwvZXhwZXJpbWVudGFsLnBy
aQorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L2RlY2xhcmF0aXZlL2V4cGVyaW1lbnRhbC9leHBlcmlt
ZW50YWwucHJpCkBAIC0yNCw3ICsyNCw3IEBAIGNvbnRhaW5zKFFUX0NPTkZJRywgcmVkdWNlX2V4
cG9ydHMpOkNPTkZJRyArPSBoaWRlX3N5bWJvbHMKIAogd2luY2UqOkxJQlMgKz0gJCRRTUFLRV9M
SUJTX0dVSQogCi1RVCArPSBkZWNsYXJhdGl2ZSB3aWRnZXRzIG5ldHdvcmsgcXVpY2sgd2Via2l0
IHdlYmtpdC1wcml2YXRlCitRVCArPSBkZWNsYXJhdGl2ZSB3aWRnZXRzIG5ldHdvcmsgcXVpY2sg
cXVpY2stcHJpdmF0ZSB3ZWJraXQgd2Via2l0LXByaXZhdGUKIAogREVTVERJUiA9ICQke1JPT1Rf
QlVJTERfRElSfS9pbXBvcnRzLyQke1RBUkdFVC5tb2R1bGVfbmFtZX0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9xdC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpIGIvU291cmNlL1dlYktpdC9x
dC9kZWNsYXJhdGl2ZS9wdWJsaWMucHJpCmluZGV4IGEyZjc3ZWUuLjEyMTU3ZjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvcXQvZGVjbGFyYXRpdmUvcHVibGljLnByaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L3F0L2RlY2xhcmF0aXZlL3B1YmxpYy5wcmkKQEAgLTI3LDcgKzI3LDcgQEAgY29udGFp
bnMoUVRfQ09ORklHLCByZWR1Y2VfZXhwb3J0cyk6Q09ORklHICs9IGhpZGVfc3ltYm9scwogd2lu
Y2UqOkxJQlMgKz0gJCRRTUFLRV9MSUJTX0dVSQogCiBRVCArPSBkZWNsYXJhdGl2ZSB3ZWJraXQg
d2Via2l0LXByaXZhdGUKLWhhdmVRdCg1KTogUVQgKz0gd2lkZ2V0cyBxdWljaworaGF2ZVF0KDUp
OiBRVCArPSB3aWRnZXRzIHF1aWNrIHF1aWNrLXByaXZhdGUKIAogY29udGFpbnMoREVGSU5FUywg
SEFWRV9RUVVJQ0sxPTEpIHsKICAgICBTT1VSQ0VTICs9IHFkZWNsYXJhdGl2ZXdlYnZpZXcuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKaW5kZXggMDI3NmNlZGMuLmQzZGFiMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5
MiBAQAorMjAxMi0wNC0wMyAgQW5kcmFzIEJlY3NpICA8YW5kcmFzLmJlY3NpQG5va2lhLmNvbT4K
KworICAgICAgICBbUXRdW1dLMl0gTWFrZSB0aGUgV2ViVmlldyBhIHN1YmNsYXNzIG9mIEZsaWNr
YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODMw
MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIaXRo
ZXJ0bywgdGhlIGV4cGVyaW1lbnQgb2YgYSBRTUwgV2ViVmlldyB3aXRoIGFuIGludGVybmFsIEZs
aWNrYWJsZQorICAgICAgICBpbnN0YW5jZSBzaG93ZWQgdGhhdCB0aGUgYXBwcm9hY2ggb2YgaGlk
aW5nIHRoZSBGbGlja2FibGUgcmFpc2VzIG1vcmUKKyAgICAgICAgcHJvYmxlbXMgdGhhbiBpdCBz
b2x2ZXMuCisKKyAgICAgICAgT25lIHNldCBvZiBwcm9ibGVtcyBhcm9zZSBiZWNhdXNlIHRoZSBp
bnRlcm5hbCBGbGlja2FibGUgd2FzIGEgc2VwYXJhdGUKKyAgICAgICAgaXRlbSB3aGljaCByZWNl
aXZlZCBhbmQgcmVhY3RlZCBvbiBhdXRvbWF0aWNhbGx5IHN5bnRoZXNpemVkIG1vdXNlIGV2ZW50
cworICAgICAgICBzZW5kIGJ5IHRoZSBjYW52YXMsIHRoaXMgaW50ZXJmZXJlZCB3aXRoIHRoZSBn
ZXN0dXJlIHJlY29nbml6ZXJzIG9mIHRoZQorICAgICAgICBXZWJWaWV3LgorCisgICAgICAgIE90
aGVyIGlzc3VlcyB3ZXJlIHJlbGF0ZWQgdG8gb3JpZW50YXRpb24gYW5kIHRoZSBpbnRlZ3JhdGlv
biBvZiB0aGUKKyAgICAgICAgV2ViVmlldyBpdGVtIHdpdGggb3RoZXIgUU1MIGl0ZW1zIGFuZCBj
b21wb25lbnRzIChsaWtlIHNjcm9sbCBpbmRpY2F0b3JzKQorICAgICAgICB3aGljaCByZXF1aXJl
IGEgbGFyZ2VyIHNldCBvZiB0aGUgRmxpY2thYmxlIEFQSSBvciB0aGUgRmxpY2thYmxlIG9iamVj
dAorICAgICAgICBpdHNlbGYgKGUuZy4gU2Nyb2xsRGVjb3JhdG9yKS4KKworICAgICAgICBUaGVz
ZSBkaXNhZHZhbnRhZ2VzIG9mIGFuIGludGVybmFsIEZsaWNrYWJsZSBpbnN0YW5jZSBvdXR3ZWln
aCB0aGUKKyAgICAgICAgYmVuZWZpdHMgb2YgY29udHJvbGxpbmcgdGhlIGV4cG9zZWQgQVBJLCB0
aGVyZWZvcmUgdGhlIGV4cGVyaW1lbnQgaGFkCisgICAgICAgIHRoZSBjb25jbHVzaW9uIHRoYXQg
dGhlcmUgaXMgbm8gd2F5IGFyb3VuZCB0aGUgcHVibGljIGluaGVyaXRhbmNlIGZyb20KKyAgICAg
ICAgUVF1aWNrRmxpY2thYmxlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgUXRG
bGlja1Byb3ZpZGVyIGNsYXNzLCBpbmhlcml0cyBRUXVpY2tXZWJWaWV3CisgICAgICAgIGZyb20g
UVF1aWNrRmxpY2thYmxlIGFuZCBhZGp1c3RzIHRoZSB2aWV3cG9ydCBpbnRlcmFjdGlvbiBlbmdp
bmUgYW5kCisgICAgICAgIHRoZSBnZXN0dXJlIHJlY29nbml6ZXJzIHRvIHVzZSB0aGUgRmxpY2th
YmxlIEFQSSBvZiB0aGUgV2ViVmlldyB0bworICAgICAgICBrZWVwIHRoZSBzYW1lIGJlaGF2aW91
ciBhcyBiZWZvcmUuCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHA6CisgICAgICAgIChRUXVpY2tXZWJQYWdlOjpRUXVp
Y2tXZWJQYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3Bw
OgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2YXRlKToK
KyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjppbml0aWFsaXplKToKKyAg
ICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpwYWdlSXRlbVBvcyk6CisgICAg
ICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6dXBkYXRlQ29udGVudHNTaXplKToK
KyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpvbkNvbXBvbmVudENvbXBs
ZXRlKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjp1cGRhdGVWaWV3
cG9ydFNpemUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6dXNlRGVmYXVs
dENvbnRlbnRJdGVtU2l6ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpz
ZXRVc2VEZWZhdWx0Q29udGVudEl0ZW1TaXplKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OlFR
dWlja1dlYlZpZXcpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6aW5wdXRNZXRob2RRdWVyeSk6
CisgICAgICAgIChRUXVpY2tXZWJWaWV3OjpnZW9tZXRyeUNoYW5nZWQpOgorICAgICAgICAoUVF1
aWNrV2ViVmlldzo6Y29tcG9uZW50Q29tcGxldGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6
ZXZlbnQpOgorICAgICAgICAoUVF1aWNrV2ViVmlldzo6Y29udGVudFBvcyk6CisgICAgICAgIChR
UXVpY2tXZWJWaWV3OjpzZXRDb250ZW50UG9zKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6Omhh
bmRsZVByZXNzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXc6OmhhbmRsZU1vdmUpOgorICAgICAg
ICAoUVF1aWNrV2ViVmlldzo6aGFuZGxlUmVsZWFzZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oOgorICAgICAgICAoUVF1aWNrV2ViVmll
d1ByaXZhdGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vidmll
dy90c3RfcXF1aWNrd2Vidmlldy5jcHA6CisgICAgICAgICh0c3RfUVF1aWNrV2ViVmlldzo6c2Ny
b2xsUmVxdWVzdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy90ZXN0cy5wcmk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5oOiBSZW1vdmVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6cmVjb2duaXplKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNldEl0
ZW1SZWN0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6ZmxpY2thYmxlTW92ZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmU6OmZsaWNrYWJsZU1vdmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6
OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZmxpY2thYmxlTW92aW5nUG9zaXRpb25VcGRh
dGUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNjYWxl
QW5pbWF0aW9uU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjp3aGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpyZXNldCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6
UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlQWN0aXZlKToKKyAgICAgICAg
KFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlU3RhcnRlZCk6
CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVy
ZVJlcXVlc3RVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OnBhbkdlc3R1cmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUNhbmNlbGxlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6Y2FuY2VsU2Nyb2xsQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVTdGFy
dGVkKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5j
aEdlc3R1cmVSZXF1ZXN0VXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlF0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVDb250ZW50KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmg6CisgICAgICAgIChRdFZpZXdwb3J0
SW50ZXJhY3Rpb25FbmdpbmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuY3BwOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkb25lV2l0aFRv
dWNoRXZlbnQpOgorCiAyMDEyLTA0LTA0ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtl
bm5ldGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIEltcHJvdmUgdGhlIHRhcCBnZXN0dXJl
IHJlY29nbml6ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3Vy
Y2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IGU4YjNiNzcuLjBkYjk4NTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnBy
aQpAQCAtMjg0LDcgKzI4NCw2IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdl
YlBhZ2VQb2xpY3lDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5o
IFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlVUlDbGllbnQuaCBcCi0gICAgVUlQcm9jZXNz
L3F0L1F0RmxpY2tQcm92aWRlci5oIFwKICAgICBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVy
YWN0aW9uRW5naW5lLmggXAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlVuZG9Db250cm9sbGVyLmgg
XAogICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5oIFwKQEAgLTYyOCw3
ICs2MjcsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2Rl
LmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVVJQ2xpZW50LmNwcCBcCiAgICAgVUlQ
cm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwIFwKLSAgICBVSVByb2Nlc3MvcXQvUXRGbGlja1By
b3ZpZGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2lu
ZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwIFwKICAg
ICBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dFF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAppbmRleCBiNTk4MjM0Li5kMzIxNGFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFn
ZS5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxRdFF1aWNrL1FRdWlja0NhbnZhcz4K
IAogUVF1aWNrV2ViUGFnZTo6UVF1aWNrV2ViUGFnZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydEl0
ZW0pCi0gICAgOiBRUXVpY2tJdGVtKHZpZXdwb3J0SXRlbSkKKyAgICA6IFFRdWlja0l0ZW0odmll
d3BvcnRJdGVtLT5jb250ZW50SXRlbSgpKQogICAgICwgZChuZXcgUVF1aWNrV2ViUGFnZVByaXZh
dGUodGhpcywgdmlld3BvcnRJdGVtKSkKIHsKICAgICBzZXRGbGFnKEl0ZW1IYXNDb250ZW50cyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNw
cAppbmRleCA1M2MxMTAwLi4yZjU5MzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRl
ICJxd2VicHJlZmVyZW5jZXNfcF9wLmgiCiAjaW5jbHVkZSAicXdlYnZpZXdwb3J0aW5mb19wLmgi
CiAKLSNpbmNsdWRlIDxwcml2YXRlL3FxdWlja2ZsaWNrYWJsZV9wLmg+CiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgogI2luY2x1ZGUgPFFEZWNsYXJhdGl2
ZUVuZ2luZT4KICNpbmNsdWRlIDxRdFF1aWNrL1FRdWlja0NhbnZhcz4KQEAgLTY3LDcgKzY2LDYg
QEAgc3RhdGljIFFRdWlja1dlYlZpZXdQcml2YXRlKiBjcmVhdGVQcml2YXRlT2JqZWN0KFFRdWlj
a1dlYlZpZXcqIHB1YmxpY09iamVjdCkKIAogUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dl
YlZpZXdQcml2YXRlKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0KQogICAgIDogcV9wdHIodmlld3Bv
cnQpCi0gICAgLCBmbGlja1Byb3ZpZGVyKDApCiAgICAgLCBhbGVydERpYWxvZygwKQogICAgICwg
Y29uZmlybURpYWxvZygwKQogICAgICwgcHJvbXB0RGlhbG9nKDApCkBAIC03Nyw4ICs3NSw3IEBA
IFFRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVpY2tXZWJWaWV3UHJpdmF0ZShRUXVpY2tXZWJWaWV3
KiB2aWV3cG9ydCkKICAgICAsIHByb3h5QXV0aGVudGljYXRpb25EaWFsb2coMCkKICAgICAsIGZp
bGVQaWNrZXIoMCkKICAgICAsIGRhdGFiYXNlUXVvdGFEaWFsb2coMCkKLSAgICAsIHVzZXJEaWRP
dmVycmlkZUNvbnRlbnRXaWR0aChmYWxzZSkKLSAgICAsIHVzZXJEaWRPdmVycmlkZUNvbnRlbnRI
ZWlnaHQoZmFsc2UpCisgICAgLCBtX3VzZURlZmF1bHRDb250ZW50SXRlbVNpemUodHJ1ZSkKICAg
ICAsIG1fbmF2aWdhdG9yUXRPYmplY3RFbmFibGVkKGZhbHNlKQogICAgICwgbV9yZW5kZXJUb09m
ZnNjcmVlbkJ1ZmZlcihmYWxzZSkKICAgICAsIG1fbG9hZFN0YXJ0ZWRTaWduYWxTZW50KGZhbHNl
KQpAQCAtNDQ3LDYgKzQ0NCwxOSBAQCB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpzZXROYXZp
Z2F0b3JRdE9iamVjdEVuYWJsZWQoYm9vbCBlbmFibGVkKQogICAgIGNvbnRleHQtPnNldE5hdmln
YXRvclF0T2JqZWN0RW5hYmxlZCh3ZWJQYWdlUHJveHkuZ2V0KCksIGVuYWJsZWQpOwogfQogCitR
UG9pbnRGIFFRdWlja1dlYlZpZXdQcml2YXRlOjpjb250ZW50UG9zKCkgY29uc3QKK3sKKyAgICBR
X1EoY29uc3QgUVF1aWNrV2ViVmlldyk7CisgICAgcmV0dXJuIFFQb2ludEYocS0+Y29udGVudFgo
KSwgcS0+Y29udGVudFkoKSk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OnNldENv
bnRlbnRQb3MoY29uc3QgUVBvaW50RiYgcG9zKQoreworICAgIFFfUShRUXVpY2tXZWJWaWV3KTsK
KyAgICBxLT5zZXRDb250ZW50WChwb3MueCgpKTsKKyAgICBxLT5zZXRDb250ZW50WShwb3MueSgp
KTsKK30KKwogUVJlY3QgUVF1aWNrV2ViVmlld1ByaXZhdGU6OnZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdAogewogICAgIFFfUShjb25zdCBRUXVpY2tXZWJWaWV3KTsKQEAgLTUxMyw2ICs1MjMs
MTMgQEAgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OlFRdWlja1dlYlZpZXdGbGlja2Fi
bGVQcml2YXRlKFFRdWlja1dlYlZpZXcqIHZpZXcKICAgICAsIHBhZ2VJc1N1c3BlbmRlZCh0cnVl
KQogICAgICwgbG9hZFN1Y2Nlc3NEaXNwYXRjaElzUGVuZGluZyhmYWxzZSkKIHsKKyAgICAvLyBE
aXNhYmxlIG1vdXNlIGV2ZW50cyBvbiB0aGUgZmxpY2thYmxlIHdlYiB2aWV3IHNvIHdlIGRvIG5v
dAorICAgIC8vIHNlbGVjdCB0ZXh0IGR1cmluZyBwYW4gZ2VzdHVyZXMgb24gcGxhdGZvcm1zIHdo
aWNoIHNlbmQgYm90aAorICAgIC8vIHRvdWNoIGFuZCBtb3VzZSBldmVudHMgc2ltdWx0YW5lb3Vz
bHkuCisgICAgLy8gRklYTUU6IFRlbXBvcmFyeSB3b3JrYXJvdW5kIGNvZGUgd2hpY2ggc2hvdWxk
IGJlIHJlbW92ZWQgd2hlbgorICAgIC8vIGJ1ZyBodHRwOi8vY29kZXJldmlldy5xdC1wcm9qZWN0
Lm9yZy8yMTg5NiBpcyBmaXhlZC4KKyAgICB2aWV3cG9ydC0+c2V0QWNjZXB0ZWRNb3VzZUJ1dHRv
bnMoUXQ6Ok5vQnV0dG9uKTsKKyAgICB2aWV3cG9ydC0+c2V0QWNjZXB0SG92ZXJFdmVudHMoZmFs
c2UpOwogfQogCiBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6flFRdWlja1dlYlZpZXdG
bGlja2FibGVQcml2YXRlKCkKQEAgLTUyOCw0NCArNTQ1LDM3IEBAIHZvaWQgUVF1aWNrV2ViVmll
d0ZsaWNrYWJsZVByaXZhdGU6OmluaXRpYWxpemUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdL
UGFnZUdyCiAKIFFQb2ludEYgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnBhZ2VJdGVt
UG9zKCkKIHsKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CiAgICAgLy8gRmxpY2thYmxlIG1vdmVz
IGl0cyBjb250ZW50SXRlbSBzbyB3ZSBuZWVkIHRvIHRha2UgdGhhdCBwb3NpdGlvbiBpbnRvIGFj
Y291bnQsCiAgICAgLy8gYXMgd2VsbCBhcyB0aGUgcG90ZW50aWFsIGRpc3BsYWNlbWVudCBvZiB0
aGUgcGFnZSBvbiB0aGUgY29udGVudEl0ZW0gYmVjYXVzZQogICAgIC8vIG9mIGFkZGl0aW9uYWwg
UU1MIGl0ZW1zLgotICAgIHFyZWFsIHhQb3MgPSBmbGlja1Byb3ZpZGVyLT5jb250ZW50SXRlbSgp
LT54KCkgKyBwYWdlVmlldy0+eCgpOwotICAgIHFyZWFsIHlQb3MgPSBmbGlja1Byb3ZpZGVyLT5j
b250ZW50SXRlbSgpLT55KCkgKyBwYWdlVmlldy0+eSgpOworICAgIHFyZWFsIHhQb3MgPSBxLT5j
b250ZW50SXRlbSgpLT54KCkgKyBwYWdlVmlldy0+eCgpOworICAgIHFyZWFsIHlQb3MgPSBxLT5j
b250ZW50SXRlbSgpLT55KCkgKyBwYWdlVmlldy0+eSgpOwogICAgIHJldHVybiBRUG9pbnRGKHhQ
b3MsIHlQb3MpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjp1cGRh
dGVDb250ZW50c1NpemUoY29uc3QgUVNpemVGJiBzaXplKQogewotICAgIEFTU0VSVChmbGlja1By
b3ZpZGVyKTsKKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhh
dCB0aGUgY29udGVudEl0ZW0gaXMgc2l6ZWQgdG8gdGhlIHBhZ2UKICAgICAvLyBpZiB0aGUgdXNl
ciBkaWQgbm90IGFkZCBvdGhlciBmbGlja2FibGUgaXRlbXMgaW4gUU1MLgogICAgIC8vIElmIHRo
ZSB1c2VyIGFkZHMgaXRlbXMgaW4gUU1MIGhlIGhhcyB0byBtYWtlIHN1cmUgdG8KLSAgICAvLyBh
bHNvIGJpbmQgdGhlIGNvbnRlbnRXaWR0aCBhbmQgY29udGVudEhlaWdodCBhY2NvcmRpbmdseS4K
KyAgICAvLyBkaXNhYmxlIHRoZSBkZWZhdWx0IGNvbnRlbnQgaXRlbSBzaXplIHByb3BlcnR5IG9u
IHRoZSBXZWJWaWV3CisgICAgLy8gYW5kIGJpbmQgdGhlIGNvbnRlbnRXaWR0aCBhbmQgY29udGVu
dEhlaWdodCBhY2NvcmRpbmdseS4KICAgICAvLyBUaGlzIGlzIGluIGFjY29yZGFuY2Ugd2l0aCBu
b3JtYWwgUU1MIEZsaWNrYWJsZSBiZWhhdmlvdXIuCi0gICAgaWYgKCF1c2VyRGlkT3ZlcnJpZGVD
b250ZW50V2lkdGgpCi0gICAgICAgIGZsaWNrUHJvdmlkZXItPnNldENvbnRlbnRXaWR0aChzaXpl
LndpZHRoKCkpOwotICAgIGlmICghdXNlckRpZE92ZXJyaWRlQ29udGVudEhlaWdodCkKLSAgICAg
ICAgZmxpY2tQcm92aWRlci0+c2V0Q29udGVudEhlaWdodChzaXplLmhlaWdodCgpKTsKKyAgICBp
ZiAoIW1fdXNlRGVmYXVsdENvbnRlbnRJdGVtU2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cS0+c2V0Q29udGVudFdpZHRoKHNpemUud2lkdGgoKSk7CisgICAgcS0+c2V0Q29udGVudEhlaWdo
dChzaXplLmhlaWdodCgpKTsKIH0KIAogdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0
ZTo6b25Db21wb25lbnRDb21wbGV0ZSgpCiB7CiAgICAgUV9RKFFRdWlja1dlYlZpZXcpOwogCi0g
ICAgQVNTRVJUKCFmbGlja1Byb3ZpZGVyKTsKLSAgICBmbGlja1Byb3ZpZGVyID0gbmV3IFF0Rmxp
Y2tQcm92aWRlcihxLCBwYWdlVmlldy5kYXRhKCkpOwotCi0gICAgLy8gUHJvcGFnYXRlIGZsaWNr
YWJsZSBzaWduYWxzLgotICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwqIGV4cGVyaW1lbnRh
bCA9IHEtPmV4cGVyaW1lbnRhbCgpOwotICAgIFFPYmplY3Q6OmNvbm5lY3QoZmxpY2tQcm92aWRl
ciwgU0lHTkFMKGNvbnRlbnRXaWR0aENoYW5nZWQoKSksIGV4cGVyaW1lbnRhbCwgU0lHTkFMKGNv
bnRlbnRXaWR0aENoYW5nZWQoKSkpOwotICAgIFFPYmplY3Q6OmNvbm5lY3QoZmxpY2tQcm92aWRl
ciwgU0lHTkFMKGNvbnRlbnRIZWlnaHRDaGFuZ2VkKCkpLCBleHBlcmltZW50YWwsIFNJR05BTChj
b250ZW50SGVpZ2h0Q2hhbmdlZCgpKSk7Ci0gICAgUU9iamVjdDo6Y29ubmVjdChmbGlja1Byb3Zp
ZGVyLCBTSUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCBleHBlcmltZW50YWwsIFNJR05BTChjb250
ZW50WENoYW5nZWQoKSkpOwotICAgIFFPYmplY3Q6OmNvbm5lY3QoZmxpY2tQcm92aWRlciwgU0lH
TkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgZXhwZXJpbWVudGFsLCBTSUdOQUwoY29udGVudFlDaGFu
Z2VkKCkpKTsKLQotICAgIGludGVyYWN0aW9uRW5naW5lLnJlc2V0KG5ldyBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUocSwgcGFnZVZpZXcuZGF0YSgpLCBmbGlja1Byb3ZpZGVyKSk7CisgICAg
aW50ZXJhY3Rpb25FbmdpbmUucmVzZXQobmV3IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShx
LCBwYWdlVmlldy5kYXRhKCkpKTsKICAgICBwYWdlVmlldy0+ZXZlbnRIYW5kbGVyKCktPnNldFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUoaW50ZXJhY3Rpb25FbmdpbmUuZGF0YSgpKTsKIAogICAg
IFFPYmplY3Q6OmNvbm5lY3QoaW50ZXJhY3Rpb25FbmdpbmUuZGF0YSgpLCBTSUdOQUwoY29udGVu
dFN1c3BlbmRSZXF1ZXN0ZWQoKSksIHEsIFNMT1QoX3Ffc3VzcGVuZCgpKSk7CkBAIC01ODMsOCAr
NTkzLDYgQEAgdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6b25Db21wb25lbnRD
b21wbGV0ZSgpCiAgICAgX3Ffb25WaXNpYmxlQ2hhbmdlZCgpOwogCiAgICAgUVF1aWNrV2ViVmll
d1ByaXZhdGU6Om9uQ29tcG9uZW50Q29tcGxldGUoKTsKLQotICAgIGVtaXQgZXhwZXJpbWVudGFs
LT5mbGlja2FibGVDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVBy
aXZhdGU6OmxvYWREaWRTdWNjZWVkKCkKQEAgLTYyMiw4ICs2MzAsNiBAQCB2b2lkIFFRdWlja1dl
YlZpZXdGbGlja2FibGVQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUoKQogICAgIGlmICh2aWV3
cG9ydFNpemUuaXNFbXB0eSgpIHx8ICFpbnRlcmFjdGlvbkVuZ2luZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZmxpY2tQcm92aWRlci0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6ZSk7Ci0K
ICAgICAvLyBMZXQgdGhlIFdlYlByb2Nlc3Mga25vdyBhYm91dCB0aGUgbmV3IHZpZXdwb3J0IHNp
emUsIHNvIHRoYXQKICAgICAvLyBpdCBjYW4gcmVzaXplIHRoZSBjb250ZW50IGFjY29yZGluZ2x5
LgogICAgIHdlYlBhZ2VQcm94eS0+c2V0Vmlld3BvcnRTaXplKHZpZXdwb3J0U2l6ZSk7CkBAIC03
NzcsNiArNzgzLDE4IEBAIHZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0VHJhbnNw
YXJlbnRCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKQogICAgIGQtPnNldFRyYW5zcGFyZW50QmFja2dy
b3VuZChlbmFibGUpOwogfQogCitib29sIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnVzZURl
ZmF1bHRDb250ZW50SXRlbVNpemUoKSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJW
aWV3KTsKKyAgICByZXR1cm4gZC0+bV91c2VEZWZhdWx0Q29udGVudEl0ZW1TaXplOworfQorCit2
b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldFVzZURlZmF1bHRDb250ZW50SXRlbVNp
emUoYm9vbCBlbmFibGUpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAgIGQtPm1fdXNl
RGVmYXVsdENvbnRlbnRJdGVtU2l6ZSA9IGVuYWJsZTsKK30KKwogdm9pZCBRUXVpY2tXZWJWaWV3
RXhwZXJpbWVudGFsOjpzZXRGbGlja2FibGVWaWV3cG9ydEVuYWJsZWQoYm9vbCBlbmFibGUpCiB7
CiAgICAgc19mbGlja2FibGVWaWV3cG9ydEVuYWJsZWQgPSBlbmFibGU7CkBAIC0xMDQyLDkzICsx
MDYwLDggQEAgUVF1aWNrV2ViUGFnZSogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6cGFnZSgp
CiAgICAgcmV0dXJuIHFfcHRyLT5wYWdlKCk7CiB9CiAKLVFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0
eTxRT2JqZWN0PiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpmbGlja2FibGVEYXRhKCkKLXsK
LSAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7Ci0gICAgQVNTRVJUKGQtPmZsaWNrUHJvdmlk
ZXIpOwotICAgIHJldHVybiBkLT5mbGlja1Byb3ZpZGVyLT5mbGlja2FibGVEYXRhKCk7Ci19Ci0K
LVFRdWlja0ZsaWNrYWJsZSogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6ZmxpY2thYmxlKCkK
LXsKLSAgICBRX0QoUVF1aWNrV2ViVmlldyk7Ci0gICAgaWYgKCFkLT5mbGlja1Byb3ZpZGVyKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIFFRdWlja0ZsaWNrYWJsZSogZmxpY2thYmxlSXRlbSA9
IHFvYmplY3RfY2FzdDxRUXVpY2tGbGlja2FibGUqPihjb250ZW50SXRlbSgpLT5wYXJlbnRJdGVt
KCkpOwotCi0gICAgQVNTRVJUKGZsaWNrYWJsZUl0ZW0pOwotCi0gICAgcmV0dXJuIGZsaWNrYWJs
ZUl0ZW07Ci19Ci0KLVFRdWlja0l0ZW0qIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmNvbnRl
bnRJdGVtKCkKLXsKLSAgICBRX0QoUVF1aWNrV2ViVmlldyk7Ci0gICAgQVNTRVJUKGQtPmZsaWNr
UHJvdmlkZXIpOwotICAgIHJldHVybiBkLT5mbGlja1Byb3ZpZGVyLT5jb250ZW50SXRlbSgpOwot
fQotCi1xcmVhbCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZW50V2lkdGgoKSBjb25z
dAotewotICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKLSAgICBBU1NFUlQoZC0+ZmxpY2tQ
cm92aWRlcik7Ci0gICAgcmV0dXJuIGQtPmZsaWNrUHJvdmlkZXItPmNvbnRlbnRXaWR0aCgpOwot
fQotCi12b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRXaWR0aChxcmVh
bCB3aWR0aCkKLXsKLSAgICBRX0QoUVF1aWNrV2ViVmlldyk7Ci0gICAgQVNTRVJUKGQtPmZsaWNr
UHJvdmlkZXIpOwotICAgIGQtPnVzZXJEaWRPdmVycmlkZUNvbnRlbnRXaWR0aCA9IHRydWU7Ci0g
ICAgZC0+ZmxpY2tQcm92aWRlci0+c2V0Q29udGVudFdpZHRoKHdpZHRoKTsKLX0KLQotcXJlYWwg
UVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGVudEhlaWdodCgpIGNvbnN0Ci17Ci0gICAg
UV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOwotICAgIEFTU0VSVChkLT5mbGlja1Byb3ZpZGVyKTsK
LSAgICByZXR1cm4gZC0+ZmxpY2tQcm92aWRlci0+Y29udGVudEhlaWdodCgpOwotfQotCi12b2lk
IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRlbnRIZWlnaHQocXJlYWwgaGVpZ2h0
KQotewotICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKLSAgICBBU1NFUlQoZC0+ZmxpY2tQcm92aWRl
cik7Ci0gICAgZC0+dXNlckRpZE92ZXJyaWRlQ29udGVudEhlaWdodCA9IHRydWU7Ci0gICAgZC0+
ZmxpY2tQcm92aWRlci0+c2V0Q29udGVudEhlaWdodChoZWlnaHQpOwotfQotCi1xcmVhbCBRUXVp
Y2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZW50WCgpIGNvbnN0Ci17Ci0gICAgUV9EKGNvbnN0
IFFRdWlja1dlYlZpZXcpOwotICAgIEFTU0VSVChkLT5mbGlja1Byb3ZpZGVyKTsKLSAgICByZXR1
cm4gZC0+ZmxpY2tQcm92aWRlci0+Y29udGVudFgoKTsKLX0KLQotdm9pZCBRUXVpY2tXZWJWaWV3
RXhwZXJpbWVudGFsOjpzZXRDb250ZW50WChxcmVhbCB4KQotewotICAgIFFfRChRUXVpY2tXZWJW
aWV3KTsKLSAgICBBU1NFUlQoZC0+ZmxpY2tQcm92aWRlcik7Ci0gICAgZC0+ZmxpY2tQcm92aWRl
ci0+c2V0Q29udGVudFgoeCk7Ci19Ci0KLXFyZWFsIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6
OmNvbnRlbnRZKCkgY29uc3QKLXsKLSAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7Ci0gICAg
QVNTRVJUKGQtPmZsaWNrUHJvdmlkZXIpOwotICAgIHJldHVybiBkLT5mbGlja1Byb3ZpZGVyLT5j
b250ZW50WSgpOwotfQotCi12b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldENvbnRl
bnRZKHFyZWFsIHkpCi17Ci0gICAgUV9EKFFRdWlja1dlYlZpZXcpOwotICAgIEFTU0VSVChkLT5m
bGlja1Byb3ZpZGVyKTsKLSAgICBkLT5mbGlja1Byb3ZpZGVyLT5zZXRDb250ZW50WSh5KTsKLX0K
LQogUVF1aWNrV2ViVmlldzo6UVF1aWNrV2ViVmlldyhRUXVpY2tJdGVtKiBwYXJlbnQpCi0gICAg
OiBRUXVpY2tJdGVtKHBhcmVudCkKKyAgICA6IFFRdWlja0ZsaWNrYWJsZShwYXJlbnQpCiAgICAg
LCBkX3B0cihjcmVhdGVQcml2YXRlT2JqZWN0KHRoaXMpKQogICAgICwgbV9leHBlcmltZW50YWwo
bmV3IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwodGhpcykpCiB7CkBAIC0xMTM3LDcgKzEwNzAs
NyBAQCBRUXVpY2tXZWJWaWV3OjpRUXVpY2tXZWJWaWV3KFFRdWlja0l0ZW0qIHBhcmVudCkKIH0K
IAogUVF1aWNrV2ViVmlldzo6UVF1aWNrV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBRUXVpY2tJdGVtKiBwYXJlbnQpCi0gICAgOiBR
UXVpY2tJdGVtKHBhcmVudCkKKyAgICA6IFFRdWlja0ZsaWNrYWJsZShwYXJlbnQpCiAgICAgLCBk
X3B0cihjcmVhdGVQcml2YXRlT2JqZWN0KHRoaXMpKQogICAgICwgbV9leHBlcmltZW50YWwobmV3
IFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwodGhpcykpCiB7CkBAIC0xMjkwLDcgKzEyMjMsNyBA
QCBRVmFyaWFudCBRUXVpY2tXZWJWaWV3OjppbnB1dE1ldGhvZFF1ZXJ5KFF0OjpJbnB1dE1ldGhv
ZFF1ZXJ5IHByb3BlcnR5KSBjb25zdAogICAgICAgICByZXR1cm4gaW50KFF0OjpJbnB1dE1ldGhv
ZEhpbnRzKHN0YXRlLmlucHV0TWV0aG9kSGludHMpKTsKICAgICBkZWZhdWx0OgogICAgICAgICAv
LyBSZWx5IG9uIHRoZSBiYXNlIGltcGxlbWVudGF0aW9uIGZvciBJbUVuYWJsZWQsIEltSGludHMg
YW5kIEltUHJlZmVycmVkTGFuZ3VhZ2UuCi0gICAgICAgIHJldHVybiBRUXVpY2tJdGVtOjppbnB1
dE1ldGhvZFF1ZXJ5KHByb3BlcnR5KTsKKyAgICAgICAgcmV0dXJuIFFRdWlja0ZsaWNrYWJsZTo6
aW5wdXRNZXRob2RRdWVyeShwcm9wZXJ0eSk7CiAgICAgfQogfQogCkBAIC0xMzEzLDcgKzEyNDYs
NyBAQCB2b2lkIFFRdWlja1dlYlZpZXc6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB2b2lkIFFRdWlj
a1dlYlZpZXc6Omdlb21ldHJ5Q2hhbmdlZChjb25zdCBRUmVjdEYmIG5ld0dlb21ldHJ5LCBjb25z
dCBRUmVjdEYmIG9sZEdlb21ldHJ5KQogewogICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKLSAgICBR
UXVpY2tJdGVtOjpnZW9tZXRyeUNoYW5nZWQobmV3R2VvbWV0cnksIG9sZEdlb21ldHJ5KTsKKyAg
ICBRUXVpY2tGbGlja2FibGU6Omdlb21ldHJ5Q2hhbmdlZChuZXdHZW9tZXRyeSwgb2xkR2VvbWV0
cnkpOwogICAgIGlmIChuZXdHZW9tZXRyeS5zaXplKCkgIT0gb2xkR2VvbWV0cnkuc2l6ZSgpKQog
ICAgICAgICBkLT51cGRhdGVWaWV3cG9ydFNpemUoKTsKIH0KQEAgLTEzMjEsNyArMTI1NCw3IEBA
IHZvaWQgUVF1aWNrV2ViVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKGNvbnN0IFFSZWN0RiYgbmV3R2Vv
bWV0cnksIGNvbnN0IFFSZWN0RiYgb2xkCiB2b2lkIFFRdWlja1dlYlZpZXc6OmNvbXBvbmVudENv
bXBsZXRlKCkKIHsKICAgICBRX0QoUVF1aWNrV2ViVmlldyk7Ci0gICAgUVF1aWNrSXRlbTo6Y29t
cG9uZW50Q29tcGxldGUoKTsKKyAgICBRUXVpY2tGbGlja2FibGU6OmNvbXBvbmVudENvbXBsZXRl
KCk7CiAKICAgICBkLT5vbkNvbXBvbmVudENvbXBsZXRlKCk7CiAgICAgZC0+dXBkYXRlVmlld3Bv
cnRTaXplKCk7CkBAIC0xNDQ4LDcgKzEzODEsNyBAQCB2b2lkIFFRdWlja1dlYlZpZXc6OmRyb3BF
dmVudChRRHJvcEV2ZW50KiBldmVudCkKIGJvb2wgUVF1aWNrV2ViVmlldzo6ZXZlbnQoUUV2ZW50
KiBldikKIHsKICAgICAvLyBSZS1pbXBsZW1lbnRlZCBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSB3
aXRob3V0IGJyZWFraW5nIGJpbmFyeSBjb21wYXRpYmlsaXR5LgotICAgIHJldHVybiBRUXVpY2tJ
dGVtOjpldmVudChldik7CisgICAgcmV0dXJuIFFRdWlja0ZsaWNrYWJsZTo6ZXZlbnQoZXYpOwog
fQogCiBXS1BhZ2VSZWYgUVF1aWNrV2ViVmlldzo6cGFnZVJlZigpIGNvbnN0CkBAIC0xNDU3LDYg
KzEzOTAsMzkgQEAgV0tQYWdlUmVmIFFRdWlja1dlYlZpZXc6OnBhZ2VSZWYoKSBjb25zdAogICAg
IHJldHVybiB0b0FQSShkLT53ZWJQYWdlUHJveHkuZ2V0KCkpOwogfQogCitRUG9pbnRGIFFRdWlj
a1dlYlZpZXc6OmNvbnRlbnRQb3MoKSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJW
aWV3KTsKKyAgICByZXR1cm4gZC0+Y29udGVudFBvcygpOworfQorCit2b2lkIFFRdWlja1dlYlZp
ZXc6OnNldENvbnRlbnRQb3MoY29uc3QgUVBvaW50RiYgcG9zKQoreworICAgIFFfRChRUXVpY2tX
ZWJWaWV3KTsKKyAgICBkLT5zZXRDb250ZW50UG9zKHBvcyk7Cit9CisKK3ZvaWQgUVF1aWNrV2Vi
Vmlldzo6aGFuZGxlRmxpY2thYmxlTW91c2VQcmVzcyhjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwg
cWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQoreworICAgIFFNb3VzZUV2ZW50IG1vdXNlRXZl
bnQoUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzLCBwb3NpdGlvbiwgUXQ6OkxlZnRCdXR0b24sIFF0
OjpOb0J1dHRvbiwgUXQ6Ok5vTW9kaWZpZXIpOworICAgIG1vdXNlRXZlbnQuc2V0VGltZXN0YW1w
KGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBRUXVpY2tGbGlja2FibGU6Om1vdXNlUHJlc3NF
dmVudCgmbW91c2VFdmVudCk7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlldzo6aGFuZGxlRmxpY2th
YmxlTW91c2VNb3ZlKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3Rh
bXBNaWxsaXMpCit7CisgICAgUU1vdXNlRXZlbnQgbW91c2VFdmVudChRRXZlbnQ6Ok1vdXNlTW92
ZSwgcG9zaXRpb24sIFF0OjpMZWZ0QnV0dG9uLCBRdDo6Tm9CdXR0b24sIFF0OjpOb01vZGlmaWVy
KTsKKyAgICBtb3VzZUV2ZW50LnNldFRpbWVzdGFtcChldmVudFRpbWVzdGFtcE1pbGxpcyk7Cisg
ICAgUVF1aWNrRmxpY2thYmxlOjptb3VzZU1vdmVFdmVudCgmbW91c2VFdmVudCk7Cit9CisKK3Zv
aWQgUVF1aWNrV2ViVmlldzo6aGFuZGxlRmxpY2thYmxlTW91c2VSZWxlYXNlKGNvbnN0IFFQb2lu
dEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7CisgICAgUU1vdXNl
RXZlbnQgbW91c2VFdmVudChRRXZlbnQ6Ok1vdXNlQnV0dG9uUmVsZWFzZSwgcG9zaXRpb24sIFF0
OjpMZWZ0QnV0dG9uLCBRdDo6Tm9CdXR0b24sIFF0OjpOb01vZGlmaWVyKTsKKyAgICBtb3VzZUV2
ZW50LnNldFRpbWVzdGFtcChldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgUVF1aWNrRmxpY2th
YmxlOjptb3VzZVJlbGVhc2VFdmVudCgmbW91c2VFdmVudCk7Cit9CisKIC8qIQogICAgIExvYWRz
IHRoZSBzcGVjaWZpZWQgXGEgaHRtbCBhcyB0aGUgY29udGVudCBvZiB0aGUgd2ViIHZpZXcuCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5o
CmluZGV4IGMyMWIyZTkuLmE2MjM0ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUg
InF3ZWJraXRnbG9iYWwuaCIKICNpbmNsdWRlIDxRdERlY2xhcmF0aXZlL3FkZWNsYXJhdGl2ZWxp
c3QuaD4KICNpbmNsdWRlIDxRdFF1aWNrL3FxdWlja2l0ZW0uaD4KKyNpbmNsdWRlIDxwcml2YXRl
L3FxdWlja2ZsaWNrYWJsZV9wLmg+CiAKIGNsYXNzIFFXZWJOYXZpZ2F0aW9uUmVxdWVzdDsKIGNs
YXNzIFFEZWNsYXJhdGl2ZUNvbXBvbmVudDsKQEAgLTQ2LDYgKzQ3LDcgQEAgY2xhc3MgUGxhdGZv
cm1XZWJWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFF0UmVmQ291bnRlZE5ldHdv
cmtSZXF1ZXN0RGF0YTsKK2NsYXNzIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTsKIH0KIAog
bmFtZXNwYWNlIFdURiB7CkBAIC02Niw3ICs2OCw3IEBAIFFUX0VORF9OQU1FU1BBQ0UKIC8vIElu
c3RhbnRpYXRpbmcgdGhlIFdlYlZpZXcgaW4gQysrIGlzIG9ubHkgcG9zc2libGUgYnkgY3JlYXRp
bmcKIC8vIGEgUURlY2xhcmF0aXZlQ29tcG9uZW50IGFzIHRoZSBpbml0aWFsaXphdGlvbiBkZXBl
bmRzIG9uIHRoZQogLy8gY29tcG9uZW50Q29tcGxldGUgbWV0aG9kIGJlaW5nIGNhbGxlZC4KLWNs
YXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlja1dlYlZpZXcgOiBwdWJsaWMgUVF1aWNrSXRlbSB7Citj
bGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJWaWV3IDogcHVibGljIFFRdWlja0ZsaWNrYWJs
ZSB7CiAgICAgUV9PQkpFQ1QKICAgICBRX1BST1BFUlRZKFFTdHJpbmcgdGl0bGUgUkVBRCB0aXRs
ZSBOT1RJRlkgdGl0bGVDaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoUVVybCB1cmwgUkVBRCB1cmwg
V1JJVEUgc2V0VXJsIE5PVElGWSB1cmxDaGFuZ2VkKQpAQCAtMTgzLDYgKzE4NSwxMyBAQCBwcm90
ZWN0ZWQ6CiBwcml2YXRlOgogICAgIFFfREVDTEFSRV9QUklWQVRFKFFRdWlja1dlYlZpZXcpCiAK
KyAgICB2b2lkIGhhbmRsZUZsaWNrYWJsZU1vdXNlUHJlc3MoY29uc3QgUVBvaW50RiYgcG9zaXRp
b24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgdm9pZCBoYW5kbGVGbGlja2Fi
bGVNb3VzZU1vdmUoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFt
cE1pbGxpcyk7CisgICAgdm9pZCBoYW5kbGVGbGlja2FibGVNb3VzZVJlbGVhc2UoY29uc3QgUVBv
aW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisKKyAgICBRUG9p
bnRGIGNvbnRlbnRQb3MoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRlbnRQb3MoY29uc3QgUVBv
aW50RiYpOworCiAgICAgUVF1aWNrV2ViVmlldyhXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVm
LCBRUXVpY2tJdGVtKiBwYXJlbnQgPSAwKTsKICAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0
OwogCkBAIC0xOTgsNiArMjA3LDcgQEAgcHJpdmF0ZToKICAgICBRU2NvcGVkUG9pbnRlcjxRUXVp
Y2tXZWJWaWV3UHJpdmF0ZT4gZF9wdHI7CiAgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCog
bV9leHBlcmltZW50YWw7CiAKKyAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU7CiAgICAgZnJpZW5kIGNsYXNzIFF0V2ViUGFnZUxvYWRDbGllbnQ7CiAg
ICAgZnJpZW5kIGNsYXNzIFF0V2ViUGFnZVBvbGljeUNsaWVudDsKICAgICBmcmllbmQgY2xhc3Mg
UXRXZWJQYWdlVUlDbGllbnQ7CkBAIC0yMjksMTUgKzIzOSw4IEBAIGNsYXNzIFFXRUJLSVRfRVhQ
T1JUIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9P
QkpFQ1QKICAgICBRX1BST1BFUlRZKFFRdWlja1dlYlBhZ2UqIHBhZ2UgUkVBRCBwYWdlIENPTlNU
QU5UIEZJTkFMKQogCi0gICAgLy8gUU1MIEZsaWNrYWJsZSBBUEkuCi0gICAgUV9QUk9QRVJUWShx
cmVhbCBjb250ZW50V2lkdGggUkVBRCBjb250ZW50V2lkdGggV1JJVEUgc2V0Q29udGVudFdpZHRo
IE5PVElGWSBjb250ZW50V2lkdGhDaGFuZ2VkKQotICAgIFFfUFJPUEVSVFkocXJlYWwgY29udGVu
dEhlaWdodCBSRUFEIGNvbnRlbnRIZWlnaHQgV1JJVEUgc2V0Q29udGVudEhlaWdodCBOT1RJRlkg
Y29udGVudEhlaWdodENoYW5nZWQpCi0gICAgUV9QUk9QRVJUWShxcmVhbCBjb250ZW50WCBSRUFE
IGNvbnRlbnRYIFdSSVRFIHNldENvbnRlbnRYIE5PVElGWSBjb250ZW50WENoYW5nZWQpCi0gICAg
UV9QUk9QRVJUWShxcmVhbCBjb250ZW50WSBSRUFEIGNvbnRlbnRZIFdSSVRFIHNldENvbnRlbnRZ
IE5PVElGWSBjb250ZW50WUNoYW5nZWQpCi0gICAgUV9QUk9QRVJUWShRUXVpY2tGbGlja2FibGUq
IGZsaWNrYWJsZSBSRUFEIGZsaWNrYWJsZSBOT1RJRlkgZmxpY2thYmxlQ2hhbmdlZCkKLSAgICBR
X1BST1BFUlRZKFFRdWlja0l0ZW0qIGNvbnRlbnRJdGVtIFJFQUQgY29udGVudEl0ZW0gQ09OU1RB
TlQpCi0gICAgUV9QUk9QRVJUWShRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4gZmxp
Y2thYmxlRGF0YSBSRUFEIGZsaWNrYWJsZURhdGEpCiAgICAgUV9QUk9QRVJUWShib29sIHRyYW5z
cGFyZW50QmFja2dyb3VuZCBXUklURSBzZXRUcmFuc3BhcmVudEJhY2tncm91bmQgUkVBRCB0cmFu
c3BhcmVudEJhY2tncm91bmQpCisgICAgUV9QUk9QRVJUWShib29sIHVzZURlZmF1bHRDb250ZW50
SXRlbVNpemUgV1JJVEUgc2V0VXNlRGVmYXVsdENvbnRlbnRJdGVtU2l6ZSBSRUFEIHVzZURlZmF1
bHRDb250ZW50SXRlbVNpemUpCiAKICAgICBRX1BST1BFUlRZKFFXZWJOYXZpZ2F0aW9uSGlzdG9y
eSogbmF2aWdhdGlvbkhpc3RvcnkgUkVBRCBuYXZpZ2F0aW9uSGlzdG9yeSBDT05TVEFOVCBGSU5B
TCkKICAgICBRX1BST1BFUlRZKFFEZWNsYXJhdGl2ZUNvbXBvbmVudCogYWxlcnREaWFsb2cgUkVB
RCBhbGVydERpYWxvZyBXUklURSBzZXRBbGVydERpYWxvZyBOT1RJRlkgYWxlcnREaWFsb2dDaGFu
Z2VkKQpAQCAtMjk1LDIzICsyOTgsMTUgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQgc2NoZW1l
RGVsZWdhdGVzX0NvdW50KFFEZWNsYXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVE
ZWxlZ2F0ZT4qKTsKICAgICBzdGF0aWMgdm9pZCBzY2hlbWVEZWxlZ2F0ZXNfQ2xlYXIoUURlY2xh
cmF0aXZlTGlzdFByb3BlcnR5PFFRdWlja1VybFNjaGVtZURlbGVnYXRlPiopOwogICAgIFFEZWNs
YXJhdGl2ZUxpc3RQcm9wZXJ0eTxRUXVpY2tVcmxTY2hlbWVEZWxlZ2F0ZT4gc2NoZW1lRGVsZWdh
dGVzKCk7Ci0gICAgUURlY2xhcmF0aXZlTGlzdFByb3BlcnR5PFFPYmplY3Q+IGZsaWNrYWJsZURh
dGEoKTsKICAgICB2b2lkIGludm9rZUFwcGxpY2F0aW9uU2NoZW1lSGFuZGxlcihXVEY6OlBhc3NS
ZWZQdHI8V2ViS2l0OjpRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE+KTsKICAgICB2b2lk
IHNlbmRBcHBsaWNhdGlvblNjaGVtZVJlcGx5KFFRdWlja05ldHdvcmtSZXBseSopOwogCi0gICAg
UVF1aWNrRmxpY2thYmxlKiBmbGlja2FibGUoKTsKLSAgICBRUXVpY2tJdGVtKiBjb250ZW50SXRl
bSgpOwotICAgIHFyZWFsIGNvbnRlbnRXaWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGVu
dFdpZHRoKHFyZWFsKTsKLSAgICBxcmVhbCBjb250ZW50SGVpZ2h0KCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRDb250ZW50SGVpZ2h0KHFyZWFsKTsKLSAgICBxcmVhbCBjb250ZW50WCgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0Q29udGVudFgocXJlYWwpOwotICAgIHFyZWFsIGNvbnRlbnRZKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRDb250ZW50WShxcmVhbCk7CiAgICAgYm9vbCB0cmFuc3BhcmVudEJhY2tn
cm91bmQoKSBjb25zdDsKICAgICB2b2lkIHNldFRyYW5zcGFyZW50QmFja2dyb3VuZChib29sKTsK
IAorICAgIGJvb2wgdXNlRGVmYXVsdENvbnRlbnRJdGVtU2l6ZSgpIGNvbnN0OworICAgIHZvaWQg
c2V0VXNlRGVmYXVsdENvbnRlbnRJdGVtU2l6ZShib29sIGVuYWJsZSk7CisKICAgICAvLyBDKysg
b25seQogICAgIGJvb2wgcmVuZGVyVG9PZmZzY3JlZW5CdWZmZXIoKSBjb25zdDsKICAgICB2b2lk
IHNldFJlbmRlclRvT2Zmc2NyZWVuQnVmZmVyKGJvb2wgZW5hYmxlKTsKQEAgLTMyNCwxMSArMzE5
LDYgQEAgcHVibGljIFFfU0xPVFM6CiAgICAgdm9pZCBwb3N0TWVzc2FnZShjb25zdCBRU3RyaW5n
Jik7CiAKIFFfU0lHTkFMUzoKLSAgICB2b2lkIGZsaWNrYWJsZUNoYW5nZWQoKTsKLSAgICB2b2lk
IGNvbnRlbnRXaWR0aENoYW5nZWQoKTsKLSAgICB2b2lkIGNvbnRlbnRIZWlnaHRDaGFuZ2VkKCk7
Ci0gICAgdm9pZCBjb250ZW50WENoYW5nZWQoKTsKLSAgICB2b2lkIGNvbnRlbnRZQ2hhbmdlZCgp
OwogICAgIHZvaWQgYWxlcnREaWFsb2dDaGFuZ2VkKCk7CiAgICAgdm9pZCBjb25maXJtRGlhbG9n
Q2hhbmdlZCgpOwogICAgIHZvaWQgcHJvbXB0RGlhbG9nQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCmluZGV4IGNj
NDFlZTQuLjdmNDMwNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrd2Vidmlld19wX3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2luY2x1ZGUgIkRy
YXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJRdERpYWxvZ1J1bm5lci5oIgotI2luY2x1ZGUg
IlF0RmxpY2tQcm92aWRlci5oIgogI2luY2x1ZGUgIlF0UGFnZUNsaWVudC5oIgogI2luY2x1ZGUg
IlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUxvYWRD
bGllbnQuaCIKQEAgLTExNyw2ICsxMTYsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCB0cmFuc3BhcmVu
dEJhY2tncm91bmQoKSBjb25zdDsKICAgICB2b2lkIHNldE5hdmlnYXRvclF0T2JqZWN0RW5hYmxl
ZChib29sKTsKIAorICAgIFFQb2ludEYgY29udGVudFBvcygpIGNvbnN0OworICAgIHZvaWQgc2V0
Q29udGVudFBvcyhjb25zdCBRUG9pbnRGJik7CisKICAgICBRUmVjdCB2aXNpYmxlQ29udGVudHNS
ZWN0KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldERpYWxvZ0FjdGl2ZShib29sIGFjdGl2ZSkgeyBt
X2RpYWxvZ0FjdGl2ZSA9IGFjdGl2ZTsgfQpAQCAtMTQ3LDcgKzE0OSw2IEBAIHByb3RlY3RlZDoK
IAogICAgIFFTY29wZWRQb2ludGVyPFFRdWlja1dlYlBhZ2U+IHBhZ2VWaWV3OwogICAgIFFRdWlj
a1dlYlZpZXcqIHFfcHRyOwotICAgIFF0RmxpY2tQcm92aWRlciogZmxpY2tQcm92aWRlcjsKIAog
ICAgIFFEZWNsYXJhdGl2ZUNvbXBvbmVudCogYWxlcnREaWFsb2c7CiAgICAgUURlY2xhcmF0aXZl
Q29tcG9uZW50KiBjb25maXJtRGlhbG9nOwpAQCAtMTYxLDggKzE2Miw3IEBAIHByb3RlY3RlZDoK
IAogICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0QXJndW1lbnRzOwogCi0g
ICAgYm9vbCB1c2VyRGlkT3ZlcnJpZGVDb250ZW50V2lkdGg7Ci0gICAgYm9vbCB1c2VyRGlkT3Zl
cnJpZGVDb250ZW50SGVpZ2h0OworICAgIGJvb2wgbV91c2VEZWZhdWx0Q29udGVudEl0ZW1TaXpl
OwogICAgIGJvb2wgbV9uYXZpZ2F0b3JRdE9iamVjdEVuYWJsZWQ7CiAgICAgYm9vbCBtX3JlbmRl
clRvT2Zmc2NyZWVuQnVmZmVyOwogICAgIGJvb2wgbV9sb2FkU3RhcnRlZFNpZ25hbFNlbnQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FxdWlja3dl
YnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC90ZXN0cy9xcXVpY2t3ZWJ2aWV3L3RzdF9xcXVpY2t3ZWJ2aWV3LmNwcAppbmRleCBhNmIx
Mzk5Li5iMzFhN2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3Rlc3RzL3FxdWlja3dlYnZpZXcvdHN0X3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcXF1aWNrd2Vidmlldy90c3RfcXF1aWNrd2Vi
dmlldy5jcHAKQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIHRzdF9RUXVpY2tXZWJWaWV3OjpzY3Jv
bGxSZXF1ZXN0KCkKICAgICAvLyBVc2UgcVJvdW5kIGFzIHRoYXQgaXMgYWxzbyB1c2VkIHdoZW4g
Y2FsY3VsYXRpbmcgdGhlIHBvc2l0aW9uCiAgICAgLy8gaW4gV2ViS2l0LgogICAgIGludCB5ID0g
cVJvdW5kKDUwICogd2ViVmlldygpLT5wYWdlKCktPmNvbnRlbnRzU2NhbGUoKSk7Ci0gICAgUVZF
UklGWSh3ZWJWaWV3KCktPmV4cGVyaW1lbnRhbCgpLT5jb250ZW50WSgpID09IHkpOworICAgIFFW
RVJJRlkod2ViVmlldygpLT5jb250ZW50WSgpID09IHkpOwogfQogCiBRVEVTVF9NQUlOKHRzdF9R
UXVpY2tXZWJWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9x
dC90ZXN0cy90ZXN0cy5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3Rz
L3Rlc3RzLnByaQppbmRleCBhYThkYThiLi43ODc3ZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3RzLnByaQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3Rlc3RzLnByaQpAQCAtOSw3ICs5LDcgQEAgU09VUkNF
UyArPSAuLi91dGlsLmNwcCBcCiAgICAgICAgICAgIC4uL2J5dGVhcnJheXRlc3RkYXRhLmNwcAog
SU5DTFVERVBBVEggKz0gJCRQV0QKIAotUVQgKz0gdGVzdGxpYiBkZWNsYXJhdGl2ZSBxdWljayB3
ZWJraXQKK1FUICs9IHRlc3RsaWIgZGVjbGFyYXRpdmUgcXVpY2sgcXVpY2stcHJpdmF0ZSB3ZWJr
aXQKIAogREVGSU5FUyArPSBURVNUU19TT1VSQ0VfRElSPVxcXCIkJFBXRFxcXCIgXAogICAgICAg
ICAgICBRV1BfUEFUSD1cXFwiJCR7Uk9PVF9CVUlMRF9ESVJ9L2JpblxcXCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlkZXIuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGIzNGJiYTYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0RmxpY2tQcm92aWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJR
dEZsaWNrUHJvdmlkZXIuaCIKLQotI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgotI2luY2x1
ZGUgInFxdWlja3dlYnZpZXdfcC5oIgotCi0jaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KLSNp
bmNsdWRlIDxRRGVjbGFyYXRpdmVFbmdpbmU+Ci0jaW5jbHVkZSA8UU1vdXNlRXZlbnQ+Ci0jaW5j
bHVkZSA8UVBvaW50Rj4KLSNpbmNsdWRlIDxRUXVpY2tDYW52YXM+Ci0jaW5jbHVkZSA8UVF1aWNr
SXRlbT4KLSNpbmNsdWRlIDxRVG91Y2hFdmVudD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotCi1uYW1lc3BhY2UgewotCi1pbmxpbmUgUU1ldGFNZXRob2QgcmVzb2x2ZU1ldGFNZXRob2Qo
UU9iamVjdCogZmxpY2thYmxlLCBjb25zdCBjaGFyKiBuYW1lKQotewotICAgIEFTU0VSVChmbGlj
a2FibGUpOwotCi0gICAgY29uc3QgUU1ldGFPYmplY3QqIG1ldGFPYmplY3QgPSBmbGlja2FibGUt
Pm1ldGFPYmplY3QoKTsKLSAgICBBU1NFUlQobWV0YU9iamVjdCk7Ci0KLSAgICBpbnQgbWV0aG9k
SW5kZXggPSBtZXRhT2JqZWN0LT5pbmRleE9mTWV0aG9kKG5hbWUpOwotICAgIEFTU0VSVChtZXRo
b2RJbmRleCAhPSAtMSk7Ci0KLSAgICByZXR1cm4gbWV0YU9iamVjdC0+bWV0aG9kKG1ldGhvZElu
ZGV4KTsKLX0KLQotaW5saW5lIFFNZXRhUHJvcGVydHkgcmVzb2x2ZU1ldGFQcm9wZXJ0eShRT2Jq
ZWN0KiBmbGlja2FibGUsIGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgQVNTRVJUKGZsaWNrYWJs
ZSk7Ci0KLSAgICBjb25zdCBRTWV0YU9iamVjdCogbWV0YU9iamVjdCA9IGZsaWNrYWJsZS0+bWV0
YU9iamVjdCgpOwotICAgIEFTU0VSVChtZXRhT2JqZWN0KTsKLQotICAgIGludCBwcm9wZXJ0eUlu
ZGV4ID0gbWV0YU9iamVjdC0+aW5kZXhPZlByb3BlcnR5KG5hbWUpOwotICAgIEFTU0VSVChwcm9w
ZXJ0eUluZGV4ICE9IC0xKTsKLQotICAgIHJldHVybiBtZXRhT2JqZWN0LT5wcm9wZXJ0eShwcm9w
ZXJ0eUluZGV4KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UKLQotUXRGbGlja1Byb3ZpZGVyOjpRdEZs
aWNrUHJvdmlkZXIoUVF1aWNrV2ViVmlldyogdmlld0l0ZW0sIFFRdWlja1dlYlBhZ2UqIHBhZ2VJ
dGVtKQotICAgIDogUU9iamVjdCh2aWV3SXRlbSkKLXsKLSAgICBBU1NFUlQodmlld0l0ZW0pOwot
ICAgIEFTU0VSVChwYWdlSXRlbSk7Ci0KLSAgICBRRGVjbGFyYXRpdmVFbmdpbmUqIGVuZ2luZSA9
IHFtbEVuZ2luZSh2aWV3SXRlbSk7Ci0gICAgUURlY2xhcmF0aXZlQ29udGV4dCogY29udGV4dCA9
IHFtbENvbnRleHQodmlld0l0ZW0pOwotCi0gICAgQVNTRVJUKGVuZ2luZSk7Ci0gICAgQVNTRVJU
KGNvbnRleHQpOwotCi0gICAgUURlY2xhcmF0aXZlQ29tcG9uZW50IGNvbXBvbmVudChlbmdpbmUs
IHZpZXdJdGVtKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgaW50ZXJuYWwgRmxpY2thYmxlIGluc3Rh
bmNlIGR5bmFtaWNhbGx5LgotICAgIC8vIFdlIG9ubHkgdXNlIHB1YmxpYyBRTUwgQVBJIHNvIHRo
YXQgd2UgZG8gbm90IGRlcGVuZAotICAgIC8vIG9uIHByaXZhdGUgQVBJIG9mIHRoZSBRdERlY2xh
cmF0aXZlIG1vZHVsZS4KLSAgICBjb21wb25lbnQuc2V0RGF0YShRQnl0ZUFycmF5TGl0ZXJhbCgi
aW1wb3J0IFF0UXVpY2sgMi4wXG5GbGlja2FibGUge30iKSwgUVVybCgpKTsKLQotICAgIG1fZmxp
Y2thYmxlID0gcW9iamVjdF9jYXN0PFFRdWlja0l0ZW0qPihjb21wb25lbnQuY3JlYXRlKGNvbnRl
eHQpKTsKLQotICAgIFFNZXRhUHJvcGVydHkgY29udGVudCA9IHJlc29sdmVNZXRhUHJvcGVydHko
bV9mbGlja2FibGUsICJjb250ZW50SXRlbSIpOwotICAgIG1fY29udGVudEl0ZW0gPSBjb250ZW50
LnJlYWQobV9mbGlja2FibGUpLnZhbHVlPFFRdWlja0l0ZW0qPigpOwotICAgIEFTU0VSVChtX2Nv
bnRlbnRJdGVtKTsKLQotICAgIC8vIFJlc29sdmUgbWV0YSBtZXRob2RzIGFuZCBwcm9wZXJ0aWVz
IG9mIHRoZSBGbGlja2FibGUgaW5zdGFuY2UuCi0gICAgbV9yZXR1cm5Ub0JvdW5kc01ldGhvZCA9
IHJlc29sdmVNZXRhTWV0aG9kKG1fZmxpY2thYmxlLCAicmV0dXJuVG9Cb3VuZHMoKSIpOwotICAg
IG1fY2FuY2VsRmxpY2tNZXRob2QgPSByZXNvbHZlTWV0YU1ldGhvZChtX2ZsaWNrYWJsZSwgImNh
bmNlbEZsaWNrKCkiKTsKLQotICAgIG1fY29udGVudFdpZHRoID0gcmVzb2x2ZU1ldGFQcm9wZXJ0
eShtX2ZsaWNrYWJsZSwgImNvbnRlbnRXaWR0aCIpOwotICAgIG1fY29udGVudEhlaWdodCA9IHJl
c29sdmVNZXRhUHJvcGVydHkobV9mbGlja2FibGUsICJjb250ZW50SGVpZ2h0Iik7Ci0gICAgbV9j
b250ZW50WCA9IHJlc29sdmVNZXRhUHJvcGVydHkobV9mbGlja2FibGUsICJjb250ZW50WCIpOwot
ICAgIG1fY29udGVudFkgPSByZXNvbHZlTWV0YVByb3BlcnR5KG1fZmxpY2thYmxlLCAiY29udGVu
dFkiKTsKLSAgICBtX21vdmluZyA9IHJlc29sdmVNZXRhUHJvcGVydHkobV9mbGlja2FibGUsICJt
b3ZpbmciKTsKLSAgICBtX2RyYWdnaW5nID0gcmVzb2x2ZU1ldGFQcm9wZXJ0eShtX2ZsaWNrYWJs
ZSwgImRyYWdnaW5nIik7Ci0gICAgbV9mbGlja2luZyA9IHJlc29sdmVNZXRhUHJvcGVydHkobV9m
bGlja2FibGUsICJmbGlja2luZyIpOwotCi0gICAgbV9mbGlja2FibGVEYXRhID0gcmVzb2x2ZU1l
dGFQcm9wZXJ0eShtX2ZsaWNrYWJsZSwgImZsaWNrYWJsZURhdGEiKTsKLQotICAgIC8vIFNldCB0
aGUgdmlld0l0ZW0gYXMgdGhlIHBhcmVudCBvZiB0aGUgZmxpY2thYmxlIGluc3RhbmNlCi0gICAg
Ly8gYW5kIHJlcGFyZW50IHRoZSBwYWdlIHNvIGl0IGlzIHBsYWNlZCBvbiB0aGUgZmxpY2thYmxl
IGNvbnRlbnRJdGVtLgotICAgIG1fZmxpY2thYmxlLT5zZXRQYXJlbnRJdGVtKHZpZXdJdGVtKTsK
LSAgICBwYWdlSXRlbS0+c2V0UGFyZW50SXRlbShtX2NvbnRlbnRJdGVtKTsKLQotICAgIC8vIFBy
b3BhZ2F0ZSBmbGlja2FibGUgc2lnbmFscy4KLSAgICBjb25uZWN0KG1fZmxpY2thYmxlLCBTSUdO
QUwobW92ZW1lbnRTdGFydGVkKCkpLCBTSUdOQUwobW92ZW1lbnRTdGFydGVkKCkpLCBRdDo6RGly
ZWN0Q29ubmVjdGlvbik7Ci0gICAgY29ubmVjdChtX2ZsaWNrYWJsZSwgU0lHTkFMKG1vdmVtZW50
RW5kZWQoKSksIFNJR05BTChtb3ZlbWVudEVuZGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7
Ci0gICAgY29ubmVjdChtX2ZsaWNrYWJsZSwgU0lHTkFMKGZsaWNraW5nQ2hhbmdlZCgpKSwgU0lH
TkFMKGZsaWNraW5nQ2hhbmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotICAgIGNvbm5l
Y3QobV9mbGlja2FibGUsIFNJR05BTChkcmFnZ2luZ0NoYW5nZWQoKSksIFNJR05BTChkcmFnZ2lu
Z0NoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAgICBjb25uZWN0KG1fZmxpY2th
YmxlLCBTSUdOQUwoY29udGVudFdpZHRoQ2hhbmdlZCgpKSwgU0lHTkFMKGNvbnRlbnRXaWR0aENo
YW5nZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAgICBjb25uZWN0KG1fZmxpY2thYmxl
LCBTSUdOQUwoY29udGVudEhlaWdodENoYW5nZWQoKSksIFNJR05BTChjb250ZW50SGVpZ2h0Q2hh
bmdlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotICAgIGNvbm5lY3QobV9mbGlja2FibGUs
IFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIFF0
OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAgICBjb25uZWN0KG1fZmxpY2thYmxlLCBTSUdOQUwoY29u
dGVudFlDaGFuZ2VkKCkpLCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29u
bmVjdGlvbik7Ci19Ci0KLXZvaWQgUXRGbGlja1Byb3ZpZGVyOjpoYW5kbGVUb3VjaEZsaWNrRXZl
bnQoUVRvdWNoRXZlbnQqIHRvdWNoRXZlbnQpCi17Ci0gICAgLy8gU2luY2UgdGhlIEZsaWNrYWJs
ZSBkb2VzIG5vdCBoYW5kbGUgdG91Y2ggZXZlbnRzIGRpcmVjdGx5IHRoZSBzZW50Ci0gICAgLy8g
dG91Y2ggZXZlbnQgd291bGQgZW5kIHVwIGluIHRoZSBXZWJWaWV3IGFnYWluIGFuZCB3b3VsZCB0
aHVzIHRyaWdnZXIKLSAgICAvLyBhbiBpbmZpbml0ZSBsb29wLgotICAgIC8vIEhlbmNlIGRvIHRo
ZSB0b3VjaCB0byBtb3VzZSBldmVudCBjb252ZXJzaW9uIGZvciB0aGUgRmxpY2thYmxlIGhlcmUu
Ci0gICAgUUV2ZW50OjpUeXBlIG1vdXNlRXZlbnRUeXBlID0gUUV2ZW50OjpOb25lOwotICAgIFF0
OjpNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbiA9IFF0OjpOb0J1dHRvbjsKLQotICAgIHN3aXRjaCAo
dG91Y2hFdmVudC0+dHlwZSgpKSB7Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoQmVnaW46Ci0gICAg
ICAgIG1vdXNlRXZlbnRUeXBlID0gUUV2ZW50OjpNb3VzZUJ1dHRvblByZXNzOwotCi0gICAgICAg
IC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBtb3VzZSBidXR0b24gc28gdGhhdCB0aGUgRmxpY2thYmxl
Ci0gICAgICAgIC8vIGl0ZW0gcmVjZWl2ZXMgdGhlIGluaXRpYWwgbW91c2UgcHJlc3MgZXZlbnQu
Ci0gICAgICAgIG1vdXNlQnV0dG9uID0gUXQ6OkxlZnRCdXR0b247Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToKLSAgICAgICAgbW91c2VFdmVudFR5cGUgPSBR
RXZlbnQ6Ok1vdXNlTW92ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNo
RW5kOgotICAgICAgICBtb3VzZUV2ZW50VHlwZSA9IFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNl
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgUVBvaW50RiB0b3VjaFBvc2l0aW9u
ID0gdG91Y2hFdmVudC0+dG91Y2hQb2ludHMoKS5sYXN0KCkucG9zKCk7Ci0gICAgUU1vdXNlRXZl
bnQgbW91c2VFdmVudChtb3VzZUV2ZW50VHlwZSwgdG91Y2hQb3NpdGlvbiwgbW91c2VCdXR0b24s
IG1vdXNlQnV0dG9uLCBRdDo6Tm9Nb2RpZmllcik7Ci0KLSAgICAvLyBTZW5kIHRoZSBldmVudCB0
byB0aGUgY2FudmFzIGFuZCBsZXQgdGhlIGNhbnZhcyBwcm9wYWdhdGUgaXQKLSAgICAvLyB0byB0
aGUgRmxpY2thYmxlLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgRmxpY2thYmxlIGdyYWJzCi0g
ICAgLy8gdGhlIG1vdXNlIHNvIHRoYXQgaXQgYWxzbyByZWNlaXZlcyB0aGUgZXZlbnRzIG9mIGdl
c3R1cmVzCi0gICAgLy8gd2hpY2ggc3RhcnRlZCBpbnNpZGUgdGhlIHZpZXdwb3J0IGJ1dCBlbmRl
ZCBvdXRzaWRlIG9mIGl0LgotICAgIFFDb3JlQXBwbGljYXRpb246OnNlbmRFdmVudChtX2ZsaWNr
YWJsZS0+Y2FudmFzKCksICZtb3VzZUV2ZW50KTsKLX0KLQotUVF1aWNrSXRlbSogUXRGbGlja1By
b3ZpZGVyOjpjb250ZW50SXRlbSgpCi17Ci0gICAgQVNTRVJUKG1fY29udGVudEl0ZW0pOwotICAg
IHJldHVybiBtX2NvbnRlbnRJdGVtOwotfQotCi1RRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9i
amVjdD4gUXRGbGlja1Byb3ZpZGVyOjpmbGlja2FibGVEYXRhKCkKLXsKLSAgICByZXR1cm4gbV9m
bGlja2FibGVEYXRhLnJlYWQobV9mbGlja2FibGUpLnZhbHVlPFFEZWNsYXJhdGl2ZUxpc3RQcm9w
ZXJ0eTxRT2JqZWN0PiA+KCk7Ci19Ci0KLVFQb2ludEYgUXRGbGlja1Byb3ZpZGVyOjpjb250ZW50
UG9zKCkgY29uc3QKLXsKLSAgICBxcmVhbCB4ID0gbV9jb250ZW50WC5yZWFkKG1fZmxpY2thYmxl
KS52YWx1ZTxxcmVhbD4oKTsKLSAgICBxcmVhbCB5ID0gbV9jb250ZW50WS5yZWFkKG1fZmxpY2th
YmxlKS52YWx1ZTxxcmVhbD4oKTsKLSAgICByZXR1cm4gUVBvaW50Rih4LCB5KTsKLX0KLXZvaWQg
UXRGbGlja1Byb3ZpZGVyOjpzZXRDb250ZW50UG9zKGNvbnN0IFFQb2ludEYmIHBvcykKLXsKLSAg
ICBtX2NvbnRlbnRYLndyaXRlKG1fZmxpY2thYmxlLCBwb3MueCgpKTsKLSAgICBtX2NvbnRlbnRZ
LndyaXRlKG1fZmxpY2thYmxlLCBwb3MueSgpKTsKLX0KLQotUVNpemVGIFF0RmxpY2tQcm92aWRl
cjo6dmlld3BvcnRTaXplKCkgY29uc3QKLXsKLSAgICBxcmVhbCB3aWR0aCA9IG1fZmxpY2thYmxl
LT53aWR0aCgpOwotICAgIHFyZWFsIGhlaWdodCA9IG1fZmxpY2thYmxlLT5oZWlnaHQoKTsKLQot
ICAgIHJldHVybiBRU2l6ZUYod2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgUXRGbGlja1Byb3Zp
ZGVyOjpzZXRWaWV3cG9ydFNpemUoY29uc3QgUVNpemVGJiBzaXplKQotewotICAgIEFTU0VSVChz
aXplLmlzVmFsaWQoKSk7Ci0gICAgbV9mbGlja2FibGUtPnNldFdpZHRoKHNpemUud2lkdGgoKSk7
Ci0gICAgbV9mbGlja2FibGUtPnNldEhlaWdodChzaXplLmhlaWdodCgpKTsKLX0KLQotdm9pZCBR
dEZsaWNrUHJvdmlkZXI6OnJldHVyblRvQm91bmRzKCkKLXsKLSAgICBtX3JldHVyblRvQm91bmRz
TWV0aG9kLmludm9rZShtX2ZsaWNrYWJsZSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotfQotCi12
b2lkIFF0RmxpY2tQcm92aWRlcjo6Y2FuY2VsRmxpY2soKQotewotICAgIG1fY2FuY2VsRmxpY2tN
ZXRob2QuaW52b2tlKG1fZmxpY2thYmxlLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci19Ci0KLWJv
b2wgUXRGbGlja1Byb3ZpZGVyOjppc01vdmluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbW92
aW5nLnJlYWQobV9mbGlja2FibGUpLnZhbHVlPGJvb2w+KCk7Ci19Ci0KLWJvb2wgUXRGbGlja1By
b3ZpZGVyOjppc0RyYWdnaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kcmFnZ2luZy5yZWFk
KG1fZmxpY2thYmxlKS52YWx1ZTxib29sPigpOwotfQotCi1ib29sIFF0RmxpY2tQcm92aWRlcjo6
aXNGbGlja2luZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZmxpY2tpbmcucmVhZChtX2ZsaWNr
YWJsZSkudmFsdWU8Ym9vbD4oKTsKLX0KLQotcXJlYWwgUXRGbGlja1Byb3ZpZGVyOjpjb250ZW50
V2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRXaWR0aC5yZWFkKG1fZmxpY2th
YmxlKS52YWx1ZTxxcmVhbD4oKTsKLX0KLQotdm9pZCBRdEZsaWNrUHJvdmlkZXI6OnNldENvbnRl
bnRXaWR0aChxcmVhbCB3aWR0aCkKLXsKLSAgICBtX2NvbnRlbnRXaWR0aC53cml0ZShtX2ZsaWNr
YWJsZSwgd2lkdGgpOwotfQotCi1xcmVhbCBRdEZsaWNrUHJvdmlkZXI6OmNvbnRlbnRIZWlnaHQo
KSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRIZWlnaHQucmVhZChtX2ZsaWNrYWJsZSku
dmFsdWU8cXJlYWw+KCk7Ci19Ci0KLXZvaWQgUXRGbGlja1Byb3ZpZGVyOjpzZXRDb250ZW50SGVp
Z2h0KHFyZWFsIGhlaWdodCkKLXsKLSAgICBtX2NvbnRlbnRIZWlnaHQud3JpdGUobV9mbGlja2Fi
bGUsIGhlaWdodCk7Ci19Ci0KLXFyZWFsIFF0RmxpY2tQcm92aWRlcjo6Y29udGVudFgoKSBjb25z
dAotewotICAgIHJldHVybiBtX2NvbnRlbnRYLnJlYWQobV9mbGlja2FibGUpLnZhbHVlPHFyZWFs
PigpOwotfQotCi12b2lkIFF0RmxpY2tQcm92aWRlcjo6c2V0Q29udGVudFgocXJlYWwgeCkKLXsK
LSAgICBtX2NvbnRlbnRYLndyaXRlKG1fZmxpY2thYmxlLCB4KTsKLX0KLQotcXJlYWwgUXRGbGlj
a1Byb3ZpZGVyOjpjb250ZW50WSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudFkucmVh
ZChtX2ZsaWNrYWJsZSkudmFsdWU8cXJlYWw+KCk7Ci19Ci0KLXZvaWQgUXRGbGlja1Byb3ZpZGVy
OjpzZXRDb250ZW50WShxcmVhbCB5KQotewotICAgIG1fY29udGVudFkud3JpdGUobV9mbGlja2Fi
bGUsIHkpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Rmxp
Y2tQcm92aWRlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0RmxpY2tQcm92aWRl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzU4MTBiLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEZsaWNrUHJvdmlkZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFF0RmxpY2tQ
cm92aWRlcl9oCi0jZGVmaW5lIFF0RmxpY2tQcm92aWRlcl9oCi0KLSNpbmNsdWRlIDxRRGVjbGFy
YXRpdmVMaXN0UHJvcGVydHk+Ci0jaW5jbHVkZSA8UU1ldGFNZXRob2Q+Ci0jaW5jbHVkZSA8UU1l
dGFQcm9wZXJ0eT4KLSNpbmNsdWRlIDxRT2JqZWN0PgotCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNs
YXNzIFFQb2ludEY7Ci1jbGFzcyBRU2l6ZUY7Ci1jbGFzcyBRUXVpY2tJdGVtOwotY2xhc3MgUVF1
aWNrV2ViUGFnZTsKLWNsYXNzIFFRdWlja1dlYlZpZXc7Ci1jbGFzcyBRVG91Y2hFdmVudDsKLVFU
X0VORF9OQU1FU1BBQ0UKLQotY2xhc3MgUXRGbGlja1Byb3ZpZGVyIDogcHVibGljIFFPYmplY3Qg
ewotICAgIFFfT0JKRUNUCi1wdWJsaWM6Ci0gICAgUXRGbGlja1Byb3ZpZGVyKFFRdWlja1dlYlZp
ZXcqIHZpZXdJdGVtLCBRUXVpY2tXZWJQYWdlKiBwYWdlSXRlbSk7Ci0KLSAgICB2b2lkIGhhbmRs
ZVRvdWNoRmxpY2tFdmVudChRVG91Y2hFdmVudCopOwotCi0gICAgUVF1aWNrSXRlbSogY29udGVu
dEl0ZW0oKTsKLSAgICBRRGVjbGFyYXRpdmVMaXN0UHJvcGVydHk8UU9iamVjdD4gZmxpY2thYmxl
RGF0YSgpOwotCi0gICAgUVBvaW50RiBjb250ZW50UG9zKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRD
b250ZW50UG9zKGNvbnN0IFFQb2ludEYmKTsKLQotICAgIFFTaXplRiB2aWV3cG9ydFNpemUoKSBj
b25zdDsKLSAgICB2b2lkIHNldFZpZXdwb3J0U2l6ZShjb25zdCBRU2l6ZUYmKTsKLQotICAgIHZv
aWQgcmV0dXJuVG9Cb3VuZHMoKTsKLSAgICB2b2lkIGNhbmNlbEZsaWNrKCk7Ci0KLSAgICBib29s
IGlzTW92aW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0RyYWdnaW5nKCkgY29uc3Q7Ci0gICAgYm9v
bCBpc0ZsaWNraW5nKCkgY29uc3Q7Ci0KLSAgICBxcmVhbCBjb250ZW50V2lkdGgoKSBjb25zdDsK
LSAgICB2b2lkIHNldENvbnRlbnRXaWR0aChxcmVhbCk7Ci0gICAgcXJlYWwgY29udGVudEhlaWdo
dCgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGVudEhlaWdodChxcmVhbCk7Ci0gICAgcXJlYWwg
Y29udGVudFgoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbnRlbnRYKHFyZWFsKTsKLSAgICBxcmVh
bCBjb250ZW50WSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q29udGVudFkocXJlYWwpOwotCi1RX1NJ
R05BTFM6Ci0gICAgdm9pZCBjb250ZW50V2lkdGhDaGFuZ2VkKCk7Ci0gICAgdm9pZCBjb250ZW50
SGVpZ2h0Q2hhbmdlZCgpOwotICAgIHZvaWQgY29udGVudFhDaGFuZ2VkKCk7Ci0gICAgdm9pZCBj
b250ZW50WUNoYW5nZWQoKTsKLSAgICB2b2lkIG1vdmVtZW50U3RhcnRlZCgpOwotICAgIHZvaWQg
bW92ZW1lbnRFbmRlZCgpOwotICAgIHZvaWQgZmxpY2tpbmdDaGFuZ2VkKCk7Ci0gICAgdm9pZCBk
cmFnZ2luZ0NoYW5nZWQoKTsKLQotcHJpdmF0ZToKLSAgICBRTWV0YU1ldGhvZCBtX3JldHVyblRv
Qm91bmRzTWV0aG9kOwotICAgIFFNZXRhTWV0aG9kIG1fY2FuY2VsRmxpY2tNZXRob2Q7Ci0KLSAg
ICBRTWV0YVByb3BlcnR5IG1fY29udGVudFdpZHRoOwotICAgIFFNZXRhUHJvcGVydHkgbV9jb250
ZW50SGVpZ2h0OwotICAgIFFNZXRhUHJvcGVydHkgbV9jb250ZW50WDsKLSAgICBRTWV0YVByb3Bl
cnR5IG1fY29udGVudFk7Ci0KLSAgICBRTWV0YVByb3BlcnR5IG1fbW92aW5nOwotICAgIFFNZXRh
UHJvcGVydHkgbV9kcmFnZ2luZzsKLSAgICBRTWV0YVByb3BlcnR5IG1fZmxpY2tpbmc7Ci0KLSAg
ICBRTWV0YVByb3BlcnR5IG1fZmxpY2thYmxlRGF0YTsKLQotICAgIFFRdWlja0l0ZW0qIG1fY29u
dGVudEl0ZW07Ci0gICAgUVF1aWNrSXRlbSogbV9mbGlja2FibGU7Ci19OwotCi0jZW5kaWYgLy8g
UXRGbGlja1Byb3ZpZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcAppbmRleCA0MzFmOGQ4Li4yOGNlNDU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXpl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29n
bml6ZXIuY3BwCkBAIC03NiwxNiArNzYsMTYgQEAgYm9vbCBRdFBhbkdlc3R1cmVSZWNvZ25pemVy
OjpyZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50KQogCiAgICAgICAgICAgICBtX3N0
YXRlID0gR2VzdHVyZVJlY29nbml6ZWQ7CiAgICAgICAgICAgICBBU1NFUlQobV90b3VjaEJlZ2lu
KTsKLSAgICAgICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVTdGFydGVkKG1f
dG91Y2hCZWdpbi5kYXRhKCkpOworICAgICAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFu
R2VzdHVyZVN0YXJ0ZWQodG91Y2hQb2ludC5wb3MoKSwgZXZlbnQtPnRpbWVzdGFtcCgpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IEdlc3R1cmVSZWNvZ25pemVkKTsK
LSAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoZXZl
bnQpOworICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlUmVxdWVzdFVwZGF0
ZSh0b3VjaFBvaW50LnBvcygpLCBldmVudC0+dGltZXN0YW1wKCkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgY2FzZSBRRXZlbnQ6OlRvdWNoRW5kOgogICAgICAgICBpZiAobV9z
dGF0ZSA9PSBHZXN0dXJlUmVjb2duaXplZCkgewotICAgICAgICAgICAgaW50ZXJhY3Rpb25Fbmdp
bmUoKS0+cGFuR2VzdHVyZUVuZGVkKGV2ZW50KTsKKyAgICAgICAgICAgIGludGVyYWN0aW9uRW5n
aW5lKCktPnBhbkdlc3R1cmVFbmRlZCh0b3VjaFBvaW50LnBvcygpLCBldmVudC0+dGltZXN0YW1w
KCkpOwogICAgICAgICAgICAgcmVzZXQoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZp
ZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwCmluZGV4IGU0MWZlMjAuLmNlZDkxNDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmUuY3BwCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiUXRWaWV3cG9y
dEludGVyYWN0aW9uRW5naW5lLmgiCiAKICNpbmNsdWRlICJQYXNzT3duUHRyLmgiCi0jaW5jbHVk
ZSAiUXRGbGlja1Byb3ZpZGVyLmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAjaW5j
bHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVkZSA8UVBvaW50Rj4KQEAgLTEyMCwxMCAr
MTE5LDkgQEAgaW5saW5lIFFSZWN0RiBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6Oml0ZW1S
ZWN0RnJvbUNTUyhjb25zdCBRUmVjdEYmIGNzc1JlY3QKICAgICByZXR1cm4gaXRlbVJlY3Q7CiB9
CiAKLVF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0LCBRUXVpY2tXZWJQYWdlKiBjb250ZW50LCBRdEZs
aWNrUHJvdmlkZXIqIGZsaWNrUHJvdmlkZXIpCitRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OlF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCwgUVF1
aWNrV2ViUGFnZSogY29udGVudCkKICAgICA6IG1fdmlld3BvcnQodmlld3BvcnQpCiAgICAgLCBt
X2NvbnRlbnQoY29udGVudCkKLSAgICAsIG1fZmxpY2tQcm92aWRlcihmbGlja1Byb3ZpZGVyKQog
ICAgICwgbV9zdXNwZW5kQ291bnQoMCkKICAgICAsIG1faGFzU3VzcGVuZGVkQ29udGVudChmYWxz
ZSkKICAgICAsIG1faGFkVXNlckludGVyYWN0aW9uKGZhbHNlKQpAQCAtMTM0LDggKzEzMiw4IEBA
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6UXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
KFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0CiAKICAgICBjb25uZWN0KG1fY29udGVudCwgU0lHTkFM
KHdpZHRoQ2hhbmdlZCgpKSwgU0xPVChpdGVtU2l6ZUNoYW5nZWQoKSksIFF0OjpEaXJlY3RDb25u
ZWN0aW9uKTsKICAgICBjb25uZWN0KG1fY29udGVudCwgU0lHTkFMKGhlaWdodENoYW5nZWQoKSks
IFNMT1QoaXRlbVNpemVDaGFuZ2VkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci0gICAgY29u
bmVjdChtX2ZsaWNrUHJvdmlkZXIsIFNJR05BTChtb3ZlbWVudFN0YXJ0ZWQoKSksIFNMT1QoZmxp
Y2thYmxlTW92ZVN0YXJ0ZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAgICBjb25uZWN0
KG1fZmxpY2tQcm92aWRlciwgU0lHTkFMKG1vdmVtZW50RW5kZWQoKSksIFNMT1QoZmxpY2thYmxl
TW92ZUVuZGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX3ZpZXdw
b3J0LCBTSUdOQUwobW92ZW1lbnRTdGFydGVkKCkpLCBTTE9UKGZsaWNrYWJsZU1vdmVTdGFydGVk
KCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdChtX3ZpZXdwb3J0LCBTSUdO
QUwobW92ZW1lbnRFbmRlZCgpKSwgU0xPVChmbGlja2FibGVNb3ZlRW5kZWQoKSksIFF0OjpEaXJl
Y3RDb25uZWN0aW9uKTsKIAogICAgIGNvbm5lY3QobV9zY2FsZUFuaW1hdGlvbiwgU0lHTkFMKHZh
bHVlQ2hhbmdlZChRVmFyaWFudCkpLAogICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblZh
bHVlQ2hhbmdlZChRVmFyaWFudCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CkBAIC0xNzgsNyAr
MTc2LDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnNldEl0ZW1SZWN0Vmlz
aWJsZShjb25zdCBRUmVjdEYmIGl0ZW1SZWN0KQogICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIHBh
Z2UgcG9zaXRpb24gKGRpc3BsYWNlbWVudCBvbiB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVtIGJl
Y2F1c2Ugb2YgYWRkaXRpb25hbCBpdGVtcykuCiAgICAgUVBvaW50RiBuZXdQb3NpdGlvbihtX2Nv
bnRlbnQtPnBvcygpICsgKGl0ZW1SZWN0LnRvcExlZnQoKSAqIGl0ZW1TY2FsZSkpOwogCi0gICAg
bV9mbGlja1Byb3ZpZGVyLT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKKyAgICBtX3ZpZXdw
b3J0LT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKIH0KIAogYm9vbCBRdFZpZXdwb3J0SW50
ZXJhY3Rpb25FbmdpbmU6OmFuaW1hdGVJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBpdGVt
UmVjdCkKQEAgLTE5OSwyOCArMTk3LDI4IEBAIGJvb2wgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjphbmltYXRlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRlbVJlY3QpCiAKIHZv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpmbGlja2FibGVNb3ZlU3RhcnRlZCgpCiB7
Ci0gICAgUV9BU1NFUlQobV9mbGlja1Byb3ZpZGVyLT5pc01vdmluZygpKTsKKyAgICBRX0FTU0VS
VChtX3ZpZXdwb3J0LT5pc01vdmluZygpKTsKICAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyID0g
YWRvcHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3BvcnRVcGRhdGVE
ZWZlcnJlcjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOwogCi0gICAgbV9sYXN0U2Ny
b2xsUG9zaXRpb24gPSBtX2ZsaWNrUHJvdmlkZXItPmNvbnRlbnRQb3MoKTsKLSAgICBjb25uZWN0
KG1fZmxpY2tQcm92aWRlciwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwgU0xPVChmbGlja2Fi
bGVNb3ZpbmdQb3NpdGlvblVwZGF0ZSgpKSk7Ci0gICAgY29ubmVjdChtX2ZsaWNrUHJvdmlkZXIs
IFNJR05BTChjb250ZW50WUNoYW5nZWQoKSksIFNMT1QoZmxpY2thYmxlTW92aW5nUG9zaXRpb25V
cGRhdGUoKSkpOworICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gbV92aWV3cG9ydC0+Y29udGVu
dFBvcygpOworICAgIGNvbm5lY3QobV92aWV3cG9ydCwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgp
KSwgU0xPVChmbGlja2FibGVNb3ZpbmdQb3NpdGlvblVwZGF0ZSgpKSk7CisgICAgY29ubmVjdCht
X3ZpZXdwb3J0LCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkpLCBTTE9UKGZsaWNrYWJsZU1vdmlu
Z1Bvc2l0aW9uVXBkYXRlKCkpKTsKIH0KIAogdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25Fbmdp
bmU6OmZsaWNrYWJsZU1vdmVFbmRlZCgpCiB7Ci0gICAgUV9BU1NFUlQoIW1fZmxpY2tQcm92aWRl
ci0+aXNNb3ZpbmcoKSk7CisgICAgUV9BU1NFUlQoIW1fdmlld3BvcnQtPmlzTW92aW5nKCkpOwog
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgZW5kIG9mIHRoZSBwYW4gb3IgcGFu
IGtpbmV0aWMgYW5pbWF0aW9uLgogICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsK
IAogICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gUVBvaW50RigpOwotICAgIGRpc2Nvbm5lY3Qo
bV9mbGlja1Byb3ZpZGVyLCBTSUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKGZs
aWNrYWJsZU1vdmluZ1Bvc2l0aW9uVXBkYXRlKCkpKTsKLSAgICBkaXNjb25uZWN0KG1fZmxpY2tQ
cm92aWRlciwgU0lHTkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChmbGlja2FibGVN
b3ZpbmdQb3NpdGlvblVwZGF0ZSgpKSk7CisgICAgZGlzY29ubmVjdChtX3ZpZXdwb3J0LCBTSUdO
QUwoY29udGVudFhDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKGZsaWNrYWJsZU1vdmluZ1Bvc2l0aW9u
VXBkYXRlKCkpKTsKKyAgICBkaXNjb25uZWN0KG1fdmlld3BvcnQsIFNJR05BTChjb250ZW50WUNo
YW5nZWQoKSksIHRoaXMsIFNMT1QoZmxpY2thYmxlTW92aW5nUG9zaXRpb25VcGRhdGUoKSkpOwog
fQogCiB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6ZmxpY2thYmxlTW92aW5nUG9z
aXRpb25VcGRhdGUoKQogewotICAgIFFQb2ludEYgbmV3UG9zaXRpb24gPSBtX2ZsaWNrUHJvdmlk
ZXItPmNvbnRlbnRQb3MoKTsKKyAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uID0gbV92aWV3cG9ydC0+
Y29udGVudFBvcygpOwogCiAgICAgZW1pdCBjb250ZW50Vmlld3BvcnRDaGFuZ2VkKG1fbGFzdFNj
cm9sbFBvc2l0aW9uIC0gbmV3UG9zaXRpb24pOwogCkBAIC0yMzEsMTMgKzIyOSwxMiBAQCB2b2lk
IFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQo
UUFic3RyYWN0QW5pbWF0aW9uOgogewogICAgIHN3aXRjaCAobmV3U3RhdGUpIHsKICAgICBjYXNl
IFFBYnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZzoKLSAgICAgICAgbV9mbGlja1Byb3ZpZGVyLT5j
YW5jZWxGbGljaygpOworICAgICAgICBtX3ZpZXdwb3J0LT5jYW5jZWxGbGljaygpOwogICAgICAg
ICBpZiAoIW1fc2NhbGVVcGRhdGVEZWZlcnJlcikKICAgICAgICAgICAgIG1fc2NhbGVVcGRhdGVE
ZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKHRoaXMsIFZpZXdw
b3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBRQWJzdHJhY3RBbmltYXRpb246OlN0b3BwZWQ6CiAgICAgICAg
IG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOwotICAgICAgICBtX2ZsaWNrUHJvdmlkZXIt
PmNvbnRlbnRJdGVtKCktPnBhcmVudEl0ZW0oKS0+c2V0UHJvcGVydHkoImludGVyYWN0aXZlIiwg
dHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAt
MjU2LDcgKzI1Myw2IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp3aGVlbEV2
ZW50KFFXaGVlbEV2ZW50KiBldikKICAgICAgICAgcmV0dXJuOyAvLyBJZ25vcmUuCiAKICAgICBp
bnQgZGVsdGEgPSBldi0+ZGVsdGEoKTsKLSAgICBRUG9pbnRGIG5ld1BvcyA9IC1tX2NvbnRlbnQt
PnBvcygpOwogCiAgICAgLy8gQSBkZWx0YSB0aGF0IGlzIG5vdCBtb2QgMTIwIGluZGljYXRlcyBh
IGRldmljZSB0aGF0IGlzIHNlbmRpbmcKICAgICAvLyBmaW5lLXJlc29sdXRpb24gc2Nyb2xsIGV2
ZW50cywgc28gdXNlIHRoZSBkZWx0YSBhcyBudW1iZXIgb2Ygd2hlZWwgdGlja3MKQEAgLTI3MCwx
NiArMjY2LDE4IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjp3aGVlbEV2ZW50
KFFXaGVlbEV2ZW50KiBldikKICAgICBkZWx0YSA9IChmdWxsVGljaykgPyBkZWx0YSAvIDEyMC4w
ZiA6IGRlbHRhOwogICAgIGRlbHRhICo9IHNjcm9sbExpbmVzOwogCisgICAgUVBvaW50RiBuZXdQ
b3NpdGlvbiA9IG1fdmlld3BvcnQtPmNvbnRlbnRQb3MoKTsKKwogICAgIGlmIChldi0+b3JpZW50
YXRpb24oKSA9PSBRdDo6SG9yaXpvbnRhbCkKLSAgICAgICAgbmV3UG9zLnJ4KCkgKz0gZGVsdGE7
CisgICAgICAgIG5ld1Bvc2l0aW9uLnJ4KCkgKz0gZGVsdGE7CiAgICAgZWxzZQotICAgICAgICBu
ZXdQb3MucnkoKSArPSBkZWx0YTsKKyAgICAgICAgbmV3UG9zaXRpb24ucnkoKSArPSBkZWx0YTsK
IAogICAgIFFSZWN0RiBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvckl0ZW1BdFNjYWxl
KG1fY29udGVudC0+Y29udGVudHNTY2FsZSgpKTsKIAotICAgIFFQb2ludEYgY3VycmVudFBvc2l0
aW9uID0gbV9mbGlja1Byb3ZpZGVyLT5jb250ZW50UG9zKCk7Ci0gICAgUVBvaW50RiBuZXdQb3Np
dGlvbiA9IC1ib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgbmV3UG9zLCBlbmRQ
b3NSYW5nZS5ib3R0b21SaWdodCgpKTsKLSAgICBtX2ZsaWNrUHJvdmlkZXItPnNldENvbnRlbnRQ
b3MobmV3UG9zaXRpb24pOworICAgIFFQb2ludEYgY3VycmVudFBvc2l0aW9uID0gbV92aWV3cG9y
dC0+Y29udGVudFBvcygpOworICAgIG5ld1Bvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQb3NS
YW5nZS50b3BMZWZ0KCksIG5ld1Bvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgpKTsK
KyAgICBtX3ZpZXdwb3J0LT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKIAogICAgIGVtaXQg
Y29udGVudFZpZXdwb3J0Q2hhbmdlZChjdXJyZW50UG9zaXRpb24gLSBuZXdQb3NpdGlvbik7CiB9
CkBAIC00MjEsNyArNDE5LDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnJl
c2V0KCkKIAogICAgIG1faGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7CiAKLSAgICBtX2ZsaWNr
UHJvdmlkZXItPmNhbmNlbEZsaWNrKCk7CisgICAgbV92aWV3cG9ydC0+Y2FuY2VsRmxpY2soKTsK
ICAgICBtX3NjYWxlQW5pbWF0aW9uLT5zdG9wKCk7CiAgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVy
LmNsZWFyKCk7CiAgICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlci5jbGVhcigpOwpAQCAtNDU1LDMw
ICs0NTMsMzEgQEAgcXJlYWwgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpjdXJyZW50Q1NT
U2NhbGUoKQogCiBib29sIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6c2Nyb2xsQW5pbWF0
aW9uQWN0aXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mbGlja1Byb3ZpZGVyLT5pc0ZsaWNr
aW5nKCk7CisgICAgcmV0dXJuIG1fdmlld3BvcnQtPmlzRmxpY2tpbmcoKTsKIH0KIAogYm9vbCBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2ZsaWNrUHJvdmlkZXItPmlzRHJhZ2dpbmcoKTsKKyAgICByZXR1cm4gbV92
aWV3cG9ydC0+aXNEcmFnZ2luZygpOwogfQogCi12b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVu
Z2luZTo6cGFuR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50KQordm9pZCBR
dFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2lu
dEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCiB7CiAgICAgbV9oYWRV
c2VySW50ZXJhY3Rpb24gPSB0cnVlOwotCi0gICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gUUV2
ZW50OjpUb3VjaEJlZ2luKTsKLQotICAgIG1fZmxpY2tQcm92aWRlci0+aGFuZGxlVG91Y2hGbGlj
a0V2ZW50KGNvbnN0X2Nhc3Q8UVRvdWNoRXZlbnQqPihldmVudCkpOwotICAgIG1fbGFzdFBpbmNo
Q2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gZXZlbnQtPnRvdWNoUG9pbnRzKCkuZmlyc3Qo
KS5wb3MoKTsKKyAgICBtX3ZpZXdwb3J0LT5oYW5kbGVGbGlja2FibGVNb3VzZVByZXNzKHBvc2l0
aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdw
b3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKIH0KIAotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmU6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVu
dCkKK3ZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwYW5HZXN0dXJlUmVxdWVzdFVw
ZGF0ZShjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlz
KQogewotICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IFFFdmVudDo6VG91Y2hVcGRhdGUpOwor
ICAgIG1fdmlld3BvcnQtPmhhbmRsZUZsaWNrYWJsZU1vdXNlTW92ZShwb3NpdGlvbiwgZXZlbnRU
aW1lc3RhbXBNaWxsaXMpOworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5h
dGVzID0gcG9zaXRpb247Cit9CiAKLSAgICBtX2ZsaWNrUHJvdmlkZXItPmhhbmRsZVRvdWNoRmxp
Y2tFdmVudChjb25zdF9jYXN0PFFUb3VjaEV2ZW50Kj4oZXZlbnQpKTsKLSAgICBtX2xhc3RQaW5j
aENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IGV2ZW50LT50b3VjaFBvaW50cygpLmZpcnN0
KCkucG9zKCk7Cit2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUVu
ZGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMp
Cit7CisgICAgbV92aWV3cG9ydC0+aGFuZGxlRmxpY2thYmxlTW91c2VSZWxlYXNlKHBvc2l0aW9u
LCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0
Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKIH0KIAogdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmU6OnBhbkdlc3R1cmVDYW5jZWxsZWQoKQpAQCAtNDkwLDE0ICs0ODksNyBAQCB2b2lkIFF0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGFuR2VzdHVyZUNhbmNlbGxlZCgpCiAgICAgLy8g
YmFjayBpbnNpZGUgdmFsaWQgYm91bmRzLgogICAgIC8vIFdoZW4gdGhlIHBpbmNoIGdlc3R1cmUg
ZW5kcywgdGhlIGNvbnRlbnQgaXMgcG9zaXRpb25lZCBhbmQgc2NhbGVkCiAgICAgLy8gYmFjayB0
byB2YWxpZCBib3VuZGFyaWVzLgotICAgIG1fZmxpY2tQcm92aWRlci0+Y2FuY2VsRmxpY2soKTsK
LX0KLQotdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBhbkdlc3R1cmVFbmRlZChj
b25zdCBRVG91Y2hFdmVudCogZXZlbnQpCi17Ci0gICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0g
UUV2ZW50OjpUb3VjaEVuZCk7Ci0gICAgbV9mbGlja1Byb3ZpZGVyLT5oYW5kbGVUb3VjaEZsaWNr
RXZlbnQoY29uc3RfY2FzdDxRVG91Y2hFdmVudCo+KGV2ZW50KSk7Ci0gICAgbV9sYXN0UGluY2hD
ZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBldmVudC0+dG91Y2hQb2ludHMoKS5maXJzdCgp
LnBvcygpOworICAgIG1fdmlld3BvcnQtPmNhbmNlbEZsaWNrKCk7CiB9CiAKIGJvb2wgUXRWaWV3
cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0CkBAIC01
MTQsNyArNTA2LDcgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OmNhbmNlbFNj
cm9sbEFuaW1hdGlvbigpCiAgICAgLy8gcGFuIGdlc3R1cmUsIHRoZSBhbmltYXRpb24gaXMgc3Rv
cHBlZCBhbmQgdGhlIGNvbnRlbnQgaXMKICAgICAvLyBpbW1lZGlhdGVseSBwb3NpdGlvbmVkIGJh
Y2sgdG8gdmFsaWQgYm91bmRhcmllcy4KIAotICAgIG1fZmxpY2tQcm92aWRlci0+Y2FuY2VsRmxp
Y2soKTsKKyAgICBtX3ZpZXdwb3J0LT5jYW5jZWxGbGljaygpOwogICAgIGVuc3VyZUNvbnRlbnRX
aXRoaW5WaWV3cG9ydEJvdW5kYXJ5KC8qaW1tZWRpYXRlKi8gdHJ1ZSk7CiB9CiAKQEAgLTUzNiw5
ICs1MjgsNiBAQCB2b2lkIFF0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJl
U3RhcnRlZChjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlcgogCiAgICAgbV9oYWRVc2VySW50ZXJh
Y3Rpb24gPSB0cnVlOwogCi0gICAgbV9mbGlja1Byb3ZpZGVyLT5jYW5jZWxGbGljaygpOwotICAg
IG1fZmxpY2tQcm92aWRlci0+Y29udGVudEl0ZW0oKS0+cGFyZW50SXRlbSgpLT5zZXRQcm9wZXJ0
eSgiaW50ZXJhY3RpdmUiLCBmYWxzZSk7Ci0KICAgICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIgPSBh
ZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9ydFVwZGF0ZURl
ZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7CiAKICAgICBtX2xhc3RQaW5j
aENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzOwpAQCAtNTY3LDcgKzU1Niw3IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lOjpwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBpbmNoCiAgICAg
Y29uc3QgUVBvaW50RiBwb3NpdGlvbkRpZmYgPSBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGlu
YXRlcyAtIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOwogICAgIG1fbGFz
dFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcGluY2hDZW50ZXJJblZpZXdwb3J0
Q29vcmRpbmF0ZXM7CiAKLSAgICBtX2ZsaWNrUHJvdmlkZXItPnNldENvbnRlbnRQb3MobV9mbGlj
a1Byb3ZpZGVyLT5jb250ZW50UG9zKCkgLSBwb3NpdGlvbkRpZmYpOworICAgIG1fdmlld3BvcnQt
PnNldENvbnRlbnRQb3MobV92aWV3cG9ydC0+Y29udGVudFBvcygpIC0gcG9zaXRpb25EaWZmKTsK
IH0KIAogdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVyZUVuZGVk
KCkKQEAgLTU3OSwxMSArNTY4LDggQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6
OnBpbmNoR2VzdHVyZUVuZGVkKCkKIAogICAgIG1fcGluY2hTdGFydFNjYWxlID0gLTE7CiAgICAg
Ly8gQ2xlYXIgdGhlIHVwZGF0ZSBkZWZlcnJlciBub3cgaWYgd2UncmUgaW4gb3VyIGZpbmFsIHBv
c2l0aW9uIGFuZCB0aGVyZSB3b24ndCBiZSBhbnkgYW5pbWF0aW9uIHRvIGNsZWFyIGl0IGxhdGVy
LgotICAgIGlmIChlbnN1cmVDb250ZW50V2l0aGluVmlld3BvcnRCb3VuZGFyeSgpKSB7CisgICAg
aWYgKGVuc3VyZUNvbnRlbnRXaXRoaW5WaWV3cG9ydEJvdW5kYXJ5KCkpCiAgICAgICAgIG1fc2Nh
bGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOwotICAgICAgICBtX2ZsaWNrUHJvdmlkZXItPmNhbmNl
bEZsaWNrKCk7Ci0gICAgICAgIG1fZmxpY2tQcm92aWRlci0+Y29udGVudEl0ZW0oKS0+cGFyZW50
SXRlbSgpLT5zZXRQcm9wZXJ0eSgiaW50ZXJhY3RpdmUiLCB0cnVlKTsKLSAgICB9CiB9CiAKIHZv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppdGVtU2l6ZUNoYW5nZWQoKQpAQCAtNjAy
LDcgKzU4OCw3IEBAIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpzY2FsZUNvbnRl
bnQoY29uc3QgUVBvaW50RiYgY2VudGVySW5DU1NDb29yZGluCiAgICAgbV9jb250ZW50LT5zZXRD
b250ZW50c1NjYWxlKGl0ZW1TY2FsZUZyb21DU1MoY3NzU2NhbGUpKTsKICAgICBRUG9pbnRGIG5l
d1BpbmNoQ2VudGVyT25WaWV3cG9ydCA9IG1fdmlld3BvcnQtPm1hcEZyb21XZWJDb250ZW50KGNl
bnRlckluQ1NTQ29vcmRpbmF0ZXMpOwogCi0gICAgbV9mbGlja1Byb3ZpZGVyLT5zZXRDb250ZW50
UG9zKG1fZmxpY2tQcm92aWRlci0+Y29udGVudFBvcygpICsgKG5ld1BpbmNoQ2VudGVyT25WaWV3
cG9ydCAtIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9ydCkpOworICAgIG1fdmlld3BvcnQtPnNldENv
bnRlbnRQb3MobV92aWV3cG9ydC0+Y29udGVudFBvcygpICsgKG5ld1BpbmNoQ2VudGVyT25WaWV3
cG9ydCAtIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9ydCkpOwogfQogCiAjaW5jbHVkZSAibW9jX1F0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgKaW5kZXggZjlh
OTVlZC4uM2IwMDMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaApAQCAtMzMsNyArMzMsNiBAQAogUVRf
QkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRUG9pbnRGOwogY2xhc3MgUVF1aWNrSXRlbTsKLWNsYXNz
IFF0RmxpY2tQcm92aWRlcjsKIGNsYXNzIFFRdWlja1dlYlBhZ2U7CiBjbGFzcyBRUXVpY2tXZWJW
aWV3OwogY2xhc3MgUVdoZWVsRXZlbnQ7CkBAIC00Nyw3ICs0Niw3IEBAIGNsYXNzIFF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZSA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBRX09CSkVDVAogCiBw
dWJsaWM6Ci0gICAgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKFFRdWlja1dlYlZpZXcqLCBR
UXVpY2tXZWJQYWdlKiwgUXRGbGlja1Byb3ZpZGVyKik7CisgICAgUXRWaWV3cG9ydEludGVyYWN0
aW9uRW5naW5lKFFRdWlja1dlYlZpZXcqLCBRUXVpY2tXZWJQYWdlKik7CiAgICAgflF0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZSgpOwogCiAgICAgc3RydWN0IENvbnN0cmFpbnRzIHsKQEAgLTgz
LDEwICs4MiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYW5jZWxTY3JvbGxBbmltYXRpb24oKTsK
IAogICAgIGJvb2wgcGFuR2VzdHVyZUFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgcGFuR2VzdHVy
ZVN0YXJ0ZWQoY29uc3QgUVRvdWNoRXZlbnQqKTsKLSAgICB2b2lkIHBhbkdlc3R1cmVSZXF1ZXN0
VXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50Kik7CisgICAgdm9pZCBwYW5HZXN0dXJlU3RhcnRlZChj
b25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAg
ICB2b2lkIHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBx
aW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQgcGFuR2VzdHVyZUVuZGVkKGNv
bnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwogICAg
IHZvaWQgcGFuR2VzdHVyZUNhbmNlbGxlZCgpOwotICAgIHZvaWQgcGFuR2VzdHVyZUVuZGVkKGNv
bnN0IFFUb3VjaEV2ZW50Kik7CiAKICAgICBib29sIHNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29u
c3Q7CiAgICAgdm9pZCBpbnRlcnJ1cHRTY2FsZUFuaW1hdGlvbigpOwpAQCAtMTQyLDggKzE0MSw2
IEBAIHByaXZhdGU6CiAgICAgUVF1aWNrV2ViVmlldyogY29uc3QgbV92aWV3cG9ydDsKICAgICBR
UXVpY2tXZWJQYWdlKiBjb25zdCBtX2NvbnRlbnQ7CiAKLSAgICBRdEZsaWNrUHJvdmlkZXIqIGNv
bnN0IG1fZmxpY2tQcm92aWRlcjsKLQogICAgIENvbnN0cmFpbnRzIG1fY29uc3RyYWludHM7CiAK
ICAgICBpbnQgbV9zdXNwZW5kQ291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCmluZGV4IDNlNzhjYTIuLjEwMjY2ZTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuY3BwCkBAIC00NTMsNyArNDUzLDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRs
ZXI6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCwK
ICAgICAgICAgLy8gVGhlIGludGVyYWN0aW9uIGVuZ2luZSBtaWdodCBzdGlsbCBiZSBhbmltYXRp
bmcga2luZXRpYyBzY3JvbGxpbmcgb3IgYSBzY2FsZSBhbmltYXRpb24KICAgICAgICAgLy8gc3Vj
aCBhcyBkb3VibGUtdGFwIHRvIHpvb20gb3IgdGhlIGJvdW5jZSBiYWNrIGVmZmVjdC4gQSB0b3Vj
aCBzdG9wcyB0aGUga2luZXRpYyBzY3JvbGxpbmcKICAgICAgICAgLy8gd2hlcmUgYXMgaXQgZG9l
cyBub3Qgc3RvcCB0aGUgc2NhbGUgYW5pbWF0aW9uLgotICAgICAgICAvLyBTZW5kaW5nIHRoZSBl
dmVudCB0byB0aGUgZmxpY2tQcm92aWRlciB3aWxsIHN0b3AgdGhlIGtpbmV0aWMgc2Nyb2xsaW5n
IGFuaW1hdGlvbi4KKyAgICAgICAgLy8gVGhlIGdlc3R1cmUgcmVjb2duaXplciBzdG9wcyB0aGUg
a2luZXRpYyBzY3JvbGxpbmcgYW5pbWF0aW9uIGlmIG5lZWRlZC4KICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBRRXZlbnQ6OlRvdWNoVXBkYXRlOgogICAgICAgICAvLyBUaGUgc2NhbGUgYW5pbWF0
aW9uIGNhbiBvbmx5IGJlIGludGVycnVwdGVkIGJ5IGEgcGluY2ggZ2VzdHVyZSwgd2hpY2ggd2ls
bCB0aGVuIHRha2Ugb3Zlci4KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCAwZTBjNDI2Li4wOGQwMTQ2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTItMDQtMDMgIEFu
ZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJd
IE1ha2UgdGhlIFdlYlZpZXcgYSBzdWJjbGFzcyBvZiBGbGlja2FibGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzMDMzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHdvcmthcm91bmQgaW4gTWlu
aUJyb3dzZXIgYW5kIHRoZSBTY3JvbGxJbmRpY2F0b3IKKyAgICAgICAgbm93IHRoYXQgdGhlIFdl
YlZpZXcgaXMgYSBGbGlja2FibGUuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9NaW5pQnJv
d3Nlci5wcm86CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1s
OgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9TY3JvbGxJbmRpY2F0b3IucW1sOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaToKKwogMjAxMi0wNC0wMyAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBJIHJlYWxseSBob3BlIHRoaXMg
aXMgdGhlIGxhc3QgYnVpbGQgZml4LiBBcHBhcmVudGx5IGV4ZWMgZG9lc24ndCBxdWl0ZSBhcmd1
bWVudHMgd2l0aApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIu
cHJvIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvCmluZGV4IGJmNDI2NDUu
LmY3YjgzY2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBy
bworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8KQEAgLTIyLDcgKzIy
LDcgQEAgSEVBREVSUyArPSBcCiBUQVJHRVQgPSBNaW5pQnJvd3NlcgogREVTVERJUiA9ICQke1JP
T1RfQlVJTERfRElSfS9iaW4KIAotUVQgKz0gbmV0d29yayBkZWNsYXJhdGl2ZSBxdWljayB3ZWJr
aXQgd2Via2l0LXByaXZhdGUKK1FUICs9IG5ldHdvcmsgZGVjbGFyYXRpdmUgcXVpY2sgcXVpY2st
cHJpdmF0ZSB3ZWJraXQgd2Via2l0LXByaXZhdGUKIG1hY3g6IFFUICs9IHhtbAogCiBSRVNPVVJD
RVMgKz0gTWluaUJyb3dzZXIucXJjCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9x
bWwvQnJvd3NlcldpbmRvdy5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3Nlcldp
bmRvdy5xbWwKaW5kZXggZWViODgxNi4uMzhmNmFmOSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0
L3FtbC9Ccm93c2VyV2luZG93LnFtbApAQCAtMzI2LDEwICszMjYsMTAgQEAgUmVjdGFuZ2xlIHsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAKLSAg
ICAgICAgU2Nyb2xsSW5kaWNhdG9yIHsKLSAgICAgICAgICAgIGZsaWNrYWJsZUl0ZW06IHdlYlZp
ZXcuZXhwZXJpbWVudGFsLmZsaWNrYWJsZQotICAgICAgICB9CisgICAgU2Nyb2xsSW5kaWNhdG9y
IHsKKyAgICAgICAgZmxpY2thYmxlSXRlbTogd2ViVmlldwogICAgIH0KIAogICAgIFZpZXdwb3J0
SW5mb0l0ZW0gewpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1Njcm9sbElu
ZGljYXRvci5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvU2Nyb2xsSW5kaWNhdG9yLnFt
bAppbmRleCAzNTllNTY4Li45ZjEwMGJlIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9x
dC9xbWwvU2Nyb2xsSW5kaWNhdG9yLnFtbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwv
U2Nyb2xsSW5kaWNhdG9yLnFtbApAQCAtMjksMTUgKzI5LDE0IEBAIGltcG9ydCBRdFF1aWNrIDIu
MAogCiBJdGVtIHsKICAgICBpZDogcm9vdAotICAgIHo6IDEKKworICAgIHByb3BlcnR5IEZsaWNr
YWJsZSBmbGlja2FibGVJdGVtCiAKICAgICBhbmNob3JzIHsKLSAgICAgICAgZmlsbDogcGFyZW50
CisgICAgICAgIGZpbGw6IGZsaWNrYWJsZUl0ZW0KICAgICAgICAgbWFyZ2luczogNQogICAgIH0K
IAotICAgIHByb3BlcnR5IEZsaWNrYWJsZSBmbGlja2FibGVJdGVtCi0KICAgICBwcm9wZXJ0eSBi
b29sIF9fbW92aW5nSG9yaXpvbnRhbGx5OiBmbGlja2FibGVJdGVtID8gZmxpY2thYmxlSXRlbS5t
b3ZpbmdIb3Jpem9udGFsbHkgOiBmYWxzZQogICAgIHByb3BlcnR5IGJvb2wgX19tb3ZpbmdWZXJ0
aWNhbGx5OiBmbGlja2FibGVJdGVtID8gZmxpY2thYmxlSXRlbS5tb3ZpbmdWZXJ0aWNhbGx5IDog
ZmFsc2UKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UYXJnZXQucHJpCmluZGV4IDZmMWRhOTUuLmI5ZTdhOGIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGFyZ2V0LnByaQorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1RhcmdldC5wcmkKQEAgLTI1LDcgKzI1LDcgQEAgU09VUkNFUyAr
PSBcCiAKIERFU1RESVIgPSAkJHtST09UX0JVSUxEX0RJUn0vYmluCiAKLVFUID0gY29yZSBndWkg
d2lkZ2V0cyBuZXR3b3JrIGRlY2xhcmF0aXZlIHRlc3RsaWIgcXVpY2sgd2Via2l0CitRVCA9IGNv
cmUgZ3VpIHdpZGdldHMgbmV0d29yayBkZWNsYXJhdGl2ZSB0ZXN0bGliIHF1aWNrIHF1aWNrLXBy
aXZhdGUgd2Via2l0CiAKIGxvYWQoZmVhdHVyZXMpCiAKLS0gCjEuNy45LjQKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>