<?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>91257</bug_id>
          
          <creation_ts>2012-07-13 09:19:04 -0700</creation_ts>
          <short_desc>[WK2] Make [Qt]ViewportHandler cross platform</short_desc>
          <delta_ts>2012-09-06 04:10:40 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Andras Becsi">abecsi</assigned_to>
          <cc>abecsi</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>d-r</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>luiz</cc>
    
    <cc>menard</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zalan</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>669118</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-13 09:19:04 -0700</bug_when>
    <thetext>Currently ViewportHandlerQt includes a lot of behavior that&apos;s not platform specific, together with hooks to the Qt API layer which are platform specific.
It would make things cleaner if we could have a non-Qt ViewportHandler class, with a client (ViewportHandlerClient?) that&apos;s implemented specifically for every platform. We can put the QQuick-releated code and things like the scale QAnimation in the client class (QtViewportHandlerClient?)

This would allow other ports to use ViewportHandler, and would also enable usage of the viewport functionality from QRawWebView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669126</commentid>
    <comment_count>1</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-13 09:26:21 -0700</bug_when>
    <thetext>I&apos;m messing around with this, and it seems pretty doable. The main tricky part is that some functions use viewport coordinates and some use contents coordinates, and it&apos;s not always apparent.

If someone else wants to pick this challenge, please assign it to yourself :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669263</commentid>
    <comment_count>2</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-07-13 11:10:42 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; I&apos;m messing around with this, and it seems pretty doable. The main tricky part is that some functions use viewport coordinates and some use contents coordinates, and it&apos;s not always apparent.
&gt; 
&gt; If someone else wants to pick this challenge, please assign it to yourself :)

Since I wrote major parts of this code I can work on it as soon as I&apos;m back from vacation in two weeks.
I already have some needed patches that also touch the viewport handler and it would be good to align them with this effort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669337</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-07-13 12:26:20 -0700</bug_when>
    <thetext>&gt; Since I wrote major parts of this code I can work on it as soon as I&apos;m back from vacation in two weeks.
I was hoping for that :) Enjoy your vacation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669462</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-07-13 15:00:09 -0700</bug_when>
    <thetext>I very much support this change! but I am also on vacation :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709734</commentid>
    <comment_count>5</comment_count>
      <attachid>161723</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-08-31 09:55:27 -0700</bug_when>
    <thetext>Created attachment 161723
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710287</commentid>
    <comment_count>6</comment_count>
      <attachid>161723</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-01 13:38:48 -0700</bug_when>
    <thetext>Comment on attachment 161723
Patch

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

Good first step. Some random comments all over... trying to figure how to make this better. It would be really good to see this actually used by another port such as EFL or GTK+

&gt; Source/WebKit2/UIProcess/ViewportHandler.cpp:104
&gt; +float ViewportHandler::viewportCoordFromCSS(float value) const

float convertToViewport(float value) const

&gt; Source/WebKit2/UIProcess/ViewportHandler.cpp:203
&gt; +void ViewportHandler::updateWebProcessViewportState(const FloatPoint&amp; trajectoryVector)
&gt; +{
&gt; +    DrawingAreaProxy* const drawingArea = m_webPageProxy-&gt;drawingArea();
&gt; +    if (!drawingArea || m_viewportSize.isEmpty() || m_contentsSize.isEmpty() || m_visibleContentsRect.isEmpty())
&gt; +        return;
&gt; +
&gt; +    drawingArea-&gt;setVisibleContentsRect(m_visibleContentsRect, m_viewportScale, trajectoryVector);
&gt; +
&gt; +    m_client-&gt;visibleContentsChanged();
&gt; +}

syncVisibleContent()? inform... ?

&gt; Source/WebKit2/UIProcess/ViewportHandler.h:65
&gt; +class ViewportUpdateDeferrer {

Is this only used in this cpp file? so can be be internal? or could it be methods of the ViewportHandler...

&gt; Source/WebKit2/UIProcess/ViewportHandler.h:74
&gt; +class ViewportHandler {

ContentsViewport ? The class deals with the view to the contents and with the position, state (suspended, etc) of the content. Maybe ContentViewport is a better name?

&gt; Source/WebKit2/UIProcess/ViewportHandler.h:79
&gt; +    FloatRect positionRangeForContentAtScale(float viewportScale) const;

Isn&apos;t this name very Qt specific?

&gt; Source/WebKit2/UIProcess/ViewportHandler.h:87
&gt; +    FloatRect viewportRectFromCSS(const FloatRect&amp;) const;
&gt; +    float cssScaleFromViewport(float) const;
&gt; +    float viewportScaleFromCSS(float) const;
&gt; +    float viewportCoordFromCSS(float) const;
&gt; +
&gt; +    float innerBoundedCSSScale(float) const;
&gt; +    float outerBoundedCSSScale(float) const;

We could make this more compatible with FrameView and  get rid of the css confusing.

FloatRect convertToViewport(const FloatRect&amp;) const
IntPoint convertToViewport(const IntPoint&amp;) const

float convertToViewport(float scale) const
float convertFromViewport(float scale) const

float innerBoundedContentScale(float scale) const;

&gt; Source/WebKit2/UIProcess/ViewportHandler.h:93
&gt; +    FloatSize layoutSize() const { return m_rawAttributes.layoutSize; }

contentsLayoutSize()

&gt; Source/WebKit2/UIProcess/ViewportHandler.h:95
&gt; +    float minimumScale() const { return m_minimumScale; }

minimumContentsScale?

&gt; Source/WebKit2/UIProcess/ViewportHandler.h:103
&gt; +    // Notifications to the WebProcess.
&gt; +    void updateViewportSize(const FloatSize&amp; newSize);
&gt; +    void updateVisibleContentsRect(const FloatRect&amp; visibleContentsRect, float viewportScale, const FloatPoint&amp; trajectoryVector = FloatPoint::zero());
&gt; +

Isn&apos;t similar methods in WebKit2 called someting like notify or send?

&gt; Source/WebKit2/UIProcess/ViewportHandler.h:110
&gt; +    void suspendPageContent();

suspendContent?

&gt; Source/WebKit2/UIProcess/ViewportHandler.h:137
&gt; +bool fuzzyCompare(float, float, float epsilon);
&gt; +FloatPoint boundPosition(const FloatPoint minPosition, const FloatPoint&amp; position, const FloatPoint&amp; maxPosition);

I guess these could be int the cpp file?

&gt; Source/WebKit2/UIProcess/ViewportHandlerClient.h:37
&gt; +    virtual void setContentPosition(const WebCore::FloatPoint&amp; positionInViewCoordinates) = 0;
&gt; +    virtual void setContentsScale(float scale, bool isInitialScale) = 0;

So the former is in viewport coords?
The second is in CSS scales?

This needs to be clearer

&gt; Source/WebKit2/UIProcess/ViewportHandlerClient.h:44
&gt; +    virtual void contentsSizeChanged() = 0;
&gt; +    virtual void visibleContentsChanged() = 0;
&gt; +    virtual void viewportAttributesChanged() = 0;

Very Qt&apos;ish names, not very WebKit like. What is used elsewhere? didChangeContentSize? or contentSizeDidChange?

&gt; Source/WebKit2/UIProcess/ViewportHandlerClient.h:47
&gt; +    virtual void setViewportHandler(ViewportHandler*) = 0;
&gt; +};

The &quot;client&quot; is normally what the port implements so why should it implement how to set the viewporthandler

&gt; Source/WebKit2/UIProcess/qt/ViewportHandlerClientQt.cpp:188
&gt; +void ViewportHandlerClientQt::focusEditableArea(const QRectF&amp; caretArea, const QRectF&amp; targetArea)
&gt; +{
&gt; +    // This can only happen as a result of a user interaction.
&gt; +    ASSERT(m_viewportHandler-&gt;hadUserInteraction());
&gt; +
&gt; +    QRectF endArea = m_viewportHandler-&gt;viewportRectFromCSS(targetArea);
&gt; +

Without doing the actual animation, it would be really nice to share methods to calculate these target areas.

IntRect bestVisibleRectForEditableElement(const IntRect&amp; elementRect, const IntRect&amp; caretRect, float preferredEditingScale)

&gt; Source/WebKit2/UIProcess/qt/ViewportHandlerClientQt.cpp:219
&gt; +void ViewportHandlerClientQt::zoomToAreaGestureEnded(const QPointF&amp; touchPoint, const QRectF&amp; targetArea)

To follow the above, part of this code could be split out into a generic

IntRect bestVisibleRectForNonEditableElement(const IntRect&amp; elementRect, const IntPoint&amp; interestPoint)

&gt; Source/WebKit2/UIProcess/qt/ViewportHandlerClientQt.h:44
&gt; +class ViewportHandlerClientQt : public QObject, public ViewportHandlerClient {
&gt; +    Q_OBJECT

Maybe it makes sense moving the gesture recognition here?

&gt; Source/WebKit2/UIProcess/qt/ViewportHandlerClientQt.h:52
&gt; +    virtual void setContentPosition(const FloatPoint&amp; positionInViewCoordinates);
&gt; +    virtual void setContentsScale(float scale, bool isInitialScale);

one with s one without?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710556</commentid>
    <comment_count>7</comment_count>
      <attachid>161902</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-03 05:18:03 -0700</bug_when>
    <thetext>Created attachment 161902
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710560</commentid>
    <comment_count>8</comment_count>
      <attachid>161902</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-03 05:22:21 -0700</bug_when>
    <thetext>Comment on attachment 161902
proposed patch

Attachment 161902 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13741146</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710564</commentid>
    <comment_count>9</comment_count>
      <attachid>161902</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-03 05:31:25 -0700</bug_when>
    <thetext>Comment on attachment 161902
proposed patch

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

&gt; Source/WebKit2/UIProcess/ViewportHandler.h:105
&gt; +    void updateViewportSize(const FloatSize&amp; newSize);
&gt; +    void updateVisibleContentsRect(const FloatRect&amp; visibleContentsRect, float viewportScale, const FloatPoint&amp; trajectoryVector = FloatPoint::zero());

FrameView seems to use adjust* naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710569</commentid>
    <comment_count>10</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-03 05:48:29 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 161902 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161902&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ViewportHandler.h:105
&gt; &gt; +    void updateViewportSize(const FloatSize&amp; newSize);
&gt; &gt; +    void updateVisibleContentsRect(const FloatRect&amp; visibleContentsRect, float viewportScale, const FloatPoint&amp; trajectoryVector = FloatPoint::zero());
&gt; 
&gt; FrameView seems to use adjust* naming.
adjust* sound ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710570</commentid>
    <comment_count>11</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-03 05:50:40 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 161902 [details])
&gt; Attachment 161902 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/13741146
Seems bogus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710572</commentid>
    <comment_count>12</comment_count>
      <attachid>161907</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-03 05:53:26 -0700</bug_when>
    <thetext>Created attachment 161907
proposed patch

Applied naming suggestions where appropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710577</commentid>
    <comment_count>13</comment_count>
      <attachid>161907</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-03 06:00:42 -0700</bug_when>
    <thetext>Comment on attachment 161907
proposed patch

Attachment 161907 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13744117</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710598</commentid>
    <comment_count>14</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-03 06:31:32 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 161723 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161723&amp;action=review
&gt; 
&gt; Good first step. Some random comments all over... trying to figure how to make this better. It would be really good to see this actually used by another port such as EFL or GTK+
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ViewportHandler.cpp:104
&gt; &gt; +float ViewportHandler::viewportCoordFromCSS(float value) const
&gt; 
&gt; float convertToViewport(float value) const
[...]
&gt; syncVisibleContent()? inform... ?
&gt; 
Renamed.

&gt; &gt; Source/WebKit2/UIProcess/ViewportHandler.h:65
&gt; &gt; +class ViewportUpdateDeferrer {
&gt; 
&gt; Is this only used in this cpp file? so can be be internal? or could it be methods of the ViewportHandler...

Although the guard is currently only an implementation detail of the Qt client and it&apos;s usage is not imposed, I think the functionality of a scoped update guard could be useful for other ports as well.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ViewportHandler.h:74
&gt; &gt; +class ViewportHandler {
&gt; 
&gt; ContentsViewport ? The class deals with the view to the contents and with the position, state (suspended, etc) of the content. Maybe ContentViewport is a better name?

I&apos;m not sure putting content in the class name would improve the name. The term &quot;content&quot; is already used as a synonym for the CSS coordinate system.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ViewportHandler.h:79
&gt; &gt; +    FloatRect positionRangeForContentAtScale(float viewportScale) const;
&gt; 
&gt; Isn&apos;t this name very Qt specific?

Which part do you feel is Qt-specific? Do you have any suggestion for a better name?

&gt; 
[snip]

Renames done.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ViewportHandler.h:137
&gt; &gt; +bool fuzzyCompare(float, float, float epsilon);
&gt; &gt; +FloatPoint boundPosition(const FloatPoint minPosition, const FloatPoint&amp; position, const FloatPoint&amp; maxPosition);
&gt; 
&gt; I guess these could be int the cpp file?

No, they are also used in the client.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ViewportHandlerClient.h:37
&gt; &gt; +    virtual void setContentPosition(const WebCore::FloatPoint&amp; positionInViewCoordinates) = 0;
&gt; &gt; +    virtual void setContentsScale(float scale, bool isInitialScale) = 0;
&gt; 
&gt; So the former is in viewport coords?
&gt; The second is in CSS scales?
&gt; 
&gt; This needs to be clearer

Both are in viewport coords, made it more explicit in the parameter name.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ViewportHandlerClient.h:44
&gt; &gt; +    virtual void contentsSizeChanged() = 0;
&gt; &gt; +    virtual void visibleContentsChanged() = 0;
&gt; &gt; +    virtual void viewportAttributesChanged() = 0;
&gt; 
&gt; Very Qt&apos;ish names, not very WebKit like. What is used elsewhere? didChangeContentSize? or contentSizeDidChange?

Looks like the did* pattern is more common in WebKit2.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/ViewportHandlerClient.h:47
&gt; &gt; +    virtual void setViewportHandler(ViewportHandler*) = 0;
&gt; &gt; +};
&gt; 
&gt; The &quot;client&quot; is normally what the port implements so why should it implement how to set the viewporthandler

Since the ViewportHandler is used by the client by setting it in the constructor we assure that it is always set.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/ViewportHandlerClientQt.cpp:188
&gt; &gt; +void ViewportHandlerClientQt::focusEditableArea(const QRectF&amp; caretArea, const QRectF&amp; targetArea)
&gt; &gt; +{
&gt; &gt; +    // This can only happen as a result of a user interaction.
&gt; &gt; +    ASSERT(m_viewportHandler-&gt;hadUserInteraction());
&gt; &gt; +
&gt; &gt; +    QRectF endArea = m_viewportHandler-&gt;viewportRectFromCSS(targetArea);
&gt; &gt; +
&gt; 
&gt; Without doing the actual animation, it would be really nice to share methods to calculate these target areas.
&gt; 
&gt; IntRect bestVisibleRectForEditableElement(const IntRect&amp; elementRect, const IntRect&amp; caretRect, float preferredEditingScale)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/ViewportHandlerClientQt.cpp:219
&gt; &gt; +void ViewportHandlerClientQt::zoomToAreaGestureEnded(const QPointF&amp; touchPoint, const QRectF&amp; targetArea)
&gt; 
&gt; To follow the above, part of this code could be split out into a generic
&gt; 
&gt; IntRect bestVisibleRectForNonEditableElement(const IntRect&amp; elementRect, const IntPoint&amp; interestPoint)

I want to clean up the QQuick related animation and scaling logic in a separate patch, this would be a candidate for that later change.
I wanted to keep the client interface to a bare minimum to have a good layout as starting point.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/ViewportHandlerClientQt.h:44
&gt; &gt; +class ViewportHandlerClientQt : public QObject, public ViewportHandlerClient {
&gt; &gt; +    Q_OBJECT
&gt; 
&gt; Maybe it makes sense moving the gesture recognition here?
I do not have a strong opinion about that, but I think this should not be in this patch.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/ViewportHandlerClientQt.h:52
&gt; &gt; +    virtual void setContentPosition(const FloatPoint&amp; positionInViewCoordinates);
&gt; &gt; +    virtual void setContentsScale(float scale, bool isInitialScale);
&gt; 
&gt; one with s one without?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710601</commentid>
    <comment_count>15</comment_count>
      <attachid>161917</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-03 06:34:31 -0700</bug_when>
    <thetext>Created attachment 161917
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710605</commentid>
    <comment_count>16</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-03 06:39:00 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 161907 [details])
&gt; Attachment 161907 [details] did not pass mac-ews (mac):
&gt; Output: http://queues.webkit.org/results/13744117
Seems bogus as well.

Looks like some EWS&apos;s are sick today :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710612</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-03 06:51:14 -0700</bug_when>
    <thetext>
&gt; I&apos;m not sure putting content in the class name would improve the name. The term &quot;content&quot; is already used as a synonym for the CSS coordinate system.

PageViewport might be a better name.


&gt; &gt; &gt; Source/WebKit2/UIProcess/ViewportHandler.h:79
&gt; &gt; &gt; +    FloatRect positionRangeForContentAtScale(float viewportScale) const;
&gt; &gt; 
&gt; &gt; Isn&apos;t this name very Qt specific?
&gt; 
&gt; Which part do you feel is Qt-specific? Do you have any suggestion for a better name?

It has that name because of the QML (Flickable?) API. Maybe it is OK... maybe something with valid.

&gt; 
&gt; I want to clean up the QQuick related animation and scaling logic in a separate patch, this would be a candidate for that later change.
&gt; I wanted to keep the client interface to a bare minimum to have a good layout as starting point.

I see</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710636</commentid>
    <comment_count>18</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-03 07:22:12 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; I&apos;m not sure putting content in the class name would improve the name. The term &quot;content&quot; is already used as a synonym for the CSS coordinate system.
&gt; 
&gt; PageViewport might be a better name.
&gt; 

Is there something else in the UI process that could have a viewport besides the page?

To put it another way: what does the &quot;page&quot; prefix give us when the term viewport is already defined as being a visual interface (window) to the page.

In my opinion the name ViewportHandler describes the responsibilities pretty well.

&gt; 
&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/ViewportHandler.h:79
&gt; &gt; &gt; &gt; +    FloatRect positionRangeForContentAtScale(float viewportScale) const;
&gt; &gt; &gt; 
&gt; &gt; &gt; Isn&apos;t this name very Qt specific?
&gt; &gt; 
&gt; &gt; Which part do you feel is Qt-specific? Do you have any suggestion for a better name?
&gt; 
&gt; It has that name because of the QML (Flickable?) API. Maybe it is OK... maybe something with valid.

Hmm, I&apos;m not sure what you mean.

But maybe validPositionRangeForContentAtScale?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710676</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-03 08:39:11 -0700</bug_when>
    <thetext>&gt; Is there something else in the UI process that could have a viewport besides the page?
&gt; 
&gt; To put it another way: what does the &quot;page&quot; prefix give us when the term viewport is already defined as being a visual interface (window) to the page.
&gt; 
&gt; In my opinion the name ViewportHandler describes the responsibilities pretty well.

We do have FrameView so I think PageViewport fits well as you can only have the viewport to a page and not to any frame. I am also not sure how much info Handler adds, or wehther it is best to leave it out. Viewport seems too generic, it could be per frame or relate to OpenGL etc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710699</commentid>
    <comment_count>20</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-03 09:58:13 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; Is there something else in the UI process that could have a viewport besides the page?
&gt; &gt; 
&gt; &gt; To put it another way: what does the &quot;page&quot; prefix give us when the term viewport is already defined as being a visual interface (window) to the page.
&gt; &gt; 
&gt; &gt; In my opinion the name ViewportHandler describes the responsibilities pretty well.
&gt; 
&gt; We do have FrameView so I think PageViewport fits well as you can only have the viewport to a page and not to any frame. I am also not sure how much info Handler adds, or wehther it is best to leave it out. Viewport seems too generic, it could be per frame or relate to OpenGL etc

I disagree. The problem I see with PageViewport is that the &quot;ViewportHandler&quot; is not actually the page viewport itself but it is rather an abstraction between the web process and the encapsulation of the platform specific view and page (client).

Although handler might not be the best name it describes that this abstraction is rather a controller or a proxy than the viewport itself.

To finish this dispute about how to name that freakin&apos; thing, what about PageViewportController or PageViewportProxy?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710726</commentid>
    <comment_count>21</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-03 11:33:41 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; &gt; Is there something else in the UI process that could have a viewport besides the page?
&gt; &gt; &gt; 
&gt; &gt; &gt; To put it another way: what does the &quot;page&quot; prefix give us when the term viewport is already defined as being a visual interface (window) to the page.
&gt; &gt; &gt; 
&gt; &gt; &gt; In my opinion the name ViewportHandler describes the responsibilities pretty well.
&gt; &gt; 
&gt; &gt; We do have FrameView so I think PageViewport fits well as you can only have the viewport to a page and not to any frame. I am also not sure how much info Handler adds, or wehther it is best to leave it out. Viewport seems too generic, it could be per frame or relate to OpenGL etc
&gt; 
&gt; I disagree. The problem I see with PageViewport is that the &quot;ViewportHandler&quot; is not actually the page viewport itself but it is rather an abstraction between the web process and the encapsulation of the platform specific view and page (client).
&gt; 
&gt; Although handler might not be the best name it describes that this abstraction is rather a controller or a proxy than the viewport itself.
&gt; 
&gt; To finish this dispute about how to name that freakin&apos; thing, what about PageViewportController or PageViewportProxy?

It is also not really a proxy as it is not just proxying one object from the other side. PageViewportController might be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711125</commentid>
    <comment_count>22</comment_count>
      <attachid>162044</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-04 08:09:46 -0700</bug_when>
    <thetext>Created attachment 162044
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711372</commentid>
    <comment_count>23</comment_count>
      <attachid>162044</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-04 13:02:07 -0700</bug_when>
    <thetext>Comment on attachment 162044
updated patch

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

Getting there

&gt; Source/WebKit2/UIProcess/PageViewportController.h:45
&gt; +// UPDATE DEFERRING (SUSPEND/RESUME)
&gt; +// =================================
&gt; +//

I would just remove those three lines... also please make sure the comment still makes sense

&gt; Source/WebKit2/UIProcess/PageViewportController.h:75
&gt; +class PageViewportController {

WTF_MAKE_NONCOPYABLE(PageViewportController); ?

&gt; Source/WebKit2/UIProcess/PageViewportController.h:132
&gt; +    float m_viewportScale; // Should always be cssScale * devicePixelRatio.

m_effectiveScale ?

&gt; Source/WebKit2/UIProcess/PageViewportControllerClient.h:40
&gt; +    virtual void requestViewportUpdate() = 0;

Looking at the header it is not so clear what the purpose of this method is

&gt; Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp:184
&gt; +void PageViewportControllerClientQt::focusEditableArea(const QRectF&amp; caretArea, const QRectF&amp; targetArea)
&gt; +{
&gt; +    // This can only happen as a result of a user interaction.

I still wish we can refactor out this code as I suggested (like in a separate patch)

&gt; Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp:322
&gt; +void PageViewportControllerClientQt::setContentsPosition(const FloatPoint&amp; positionInViewCoordinates)

I think setContentsPosition(const FloatPoint&amp; localPoint) would be ok

&gt; Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.cpp:329
&gt; +void PageViewportControllerClientQt::setContentsScale(float viewportScale, bool isInitialScale)

setContentsScale(float localScale, bool treatAsInitialValue)

&gt; Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.h:47
&gt; +

why this newline?

&gt; Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.h:57
&gt; +    virtual void setContentsRectToNearestValidBounds();
&gt; +
&gt; +    virtual void requestViewportUpdate();
&gt; +
&gt; +    virtual void didChangeContentsSize();

I think setContentsRectToNearestValidBounds is a bit too implementation specific. The client version of didChangeContentsSize should take care of this

&gt; Source/WebKit2/UIProcess/qt/PageViewportControllerClientQt.h:61
&gt; +    virtual void setPageViewportController(PageViewportController* handler) { m_viewportController = handler; }

I think other clients (Geolocaton etc) are just using setController(...) { m_controller = }

I even find that a bit cleaner

http://opensource.apple.com/source/WebCore/WebCore-1298/dom/DeviceOrientationClient.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711405</commentid>
    <comment_count>24</comment_count>
      <attachid>162044</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-04 13:32:32 -0700</bug_when>
    <thetext>Comment on attachment 162044
updated patch

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

&gt; Source/WebKit2/UIProcess/PageViewportController.cpp:84
&gt; +    m_rawAttributes.devicePixelRatio = m_devicePixelRatio;

devicePixelRatio should not be gotten from the attributes anymore... It should actually be removed from them. It would be good to fix this soonish. It is supposed to be a platform value, not a calculated one.

Maybe the funtion here can be removed all together</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712029</commentid>
    <comment_count>25</comment_count>
    <who name="Jocelyn Turcotte">jturcotte</who>
    <bug_when>2012-09-05 07:29:59 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (From update of attachment 161902 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161902&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/ViewportHandler.h:105
&gt; &gt; &gt; +    void updateViewportSize(const FloatSize&amp; newSize);
&gt; &gt; &gt; +    void updateVisibleContentsRect(const FloatRect&amp; visibleContentsRect, float viewportScale, const FloatPoint&amp; trajectoryVector = FloatPoint::zero());
&gt; &gt; 
&gt; &gt; FrameView seems to use adjust* naming.
&gt; adjust* sound ok.

adjust is usually for stuff pulling the data from somewhere else. I would just call them setViewportSize and setVisibleContentsRect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712095</commentid>
    <comment_count>26</comment_count>
      <attachid>162259</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-05 08:47:07 -0700</bug_when>
    <thetext>Created attachment 162259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712100</commentid>
    <comment_count>27</comment_count>
      <attachid>162259</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-09-05 08:51:40 -0700</bug_when>
    <thetext>Comment on attachment 162259
Patch

Maybe you want someone else to look at it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712102</commentid>
    <comment_count>28</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-05 08:53:30 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 162259 [details])
&gt; Maybe you want someone else to look at it

Yes, Simon said he&apos;s going to look at it as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712918</commentid>
    <comment_count>29</comment_count>
      <attachid>162259</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-05 23:19:09 -0700</bug_when>
    <thetext>Comment on attachment 162259
Patch

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

I think this looks good. A few minor suggestions that can be easily done in follow-up changes if you decide to do them.

I think I get an idea of the difficulty of finding the cut-off point, i.e. determining where to split the code between controller and the Qt specific client. The big bulk of the code remains in the Qt client though (570 LOC vs. ~250 LOC in the non-Qt controller), so I wonder how much this split is really going to buy us. I don&apos;t see the code becoming simpler. Unless of course it turns out that over time we can move more code to the controller.

Anyway, I&apos;m not objecting to the change. It&apos;s worth a try and it must&apos;ve been difficult to do this fine split - hats off :)

&gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:860
&gt; -    m_viewportHandler-&gt;disconnect();
&gt; +    m_pageViewportControllerClient-&gt;disconnect();

I think that you can remove this code in the future. The scoped pointer will delete the object right afterwards, and the signal slot connections are automatically disconnected when the sender or receiver is destroyed.

Also: Wouldn&apos;t this code crash if the webview is destructed before onComponentCmplete() is called?

&gt; Source/WebKit2/UIProcess/PageViewportController.cpp:38
&gt; +bool fuzzyCompare(float a, float b, float epsilon)

static missing here?

&gt; Source/WebKit2/UIProcess/PageViewportController.cpp:43
&gt; +FloatPoint boundPosition(const FloatPoint minPosition, const FloatPoint&amp; position, const FloatPoint&amp; maxPosition)

Ditto.

&gt; Source/WebKit2/UIProcess/PageViewportController.cpp:101
&gt; +float PageViewportController::convertFromViewport(float value) const
&gt; +{
&gt; +    return value / m_devicePixelRatio;
&gt; +}
&gt; +
&gt; +float PageViewportController::convertToViewport(float value) const
&gt; +{
&gt; +    return value * m_devicePixelRatio;
&gt; +}

Should these two trivial functions perhaps be inline in the class declaration?

&gt; Source/WebKit2/UIProcess/PageViewportController.cpp:236
&gt; +void PageViewportController::suspendContent()
&gt; +{
&gt; +    if (m_hasSuspendedContent)
&gt; +        return;
&gt; +
&gt; +    m_hasSuspendedContent = true;
&gt; +    m_webPageProxy-&gt;suspendActiveDOMObjectsAndAnimations();
&gt; +}
&gt; +
&gt; +void PageViewportController::resumeContent()
&gt; +{
&gt; +    if (!m_rawAttributes.layoutSize.isEmpty() &amp;&amp; m_rawAttributes.initialScale &gt; 0) {
&gt; +        m_hadUserInteraction = false;
&gt; +        m_client-&gt;setContentsScale(convertToViewport(innerBoundedContentsScale(m_rawAttributes.initialScale)), /* isInitialScale */ true);
&gt; +        m_rawAttributes.initialScale = -1; // Mark used.
&gt; +    }
&gt; +
&gt; +    m_client-&gt;didResumeContent();
&gt; +
&gt; +    if (!m_hasSuspendedContent)
&gt; +        return;
&gt; +
&gt; +    m_hasSuspendedContent = false;
&gt; +    m_webPageProxy-&gt;resumeActiveDOMObjectsAndAnimations();
&gt; +}

It&apos;s a bit ugly that suspendContent() and resumeContent() are not really symmetric, i.e. resumeContent() does more than just undoing what suspendContent() did. On the caller side it looks strange, like in the UpdateDeferrer, where we call suspendContent() only if the constructor flag suggests to do so, but we
unconditionally call resumeContent(). Makes me wonder if the suspendActiveDOMObjectAndAnimations() code should just move from here to the callers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713131</commentid>
    <comment_count>30</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-06 03:28:56 -0700</bug_when>
    <thetext>(In reply to comment #29)
[snip]
&gt; The big bulk of the code remains in the Qt client though (570 LOC vs. ~250 LOC in the non-Qt controller), so I wonder how much this split is really going to buy us. I don&apos;t see the code becoming simpler. Unless of course it turns out that over time we can move more code to the controller.
&gt; 
Yes, as a first step I tried to establish the basic layout for the split. I think it should be possible to merge and move considerable pars of the focusEditableArea and the zoomToArea... functionality as well in follow-up patches and also change how qwebkitest accesses the viewport state data to be able to remove the proxying from the client.

&gt; &gt; Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp:860
&gt; &gt; -    m_viewportHandler-&gt;disconnect();
&gt; &gt; +    m_pageViewportControllerClient-&gt;disconnect();
&gt; 
&gt; I think that you can remove this code in the future. The scoped pointer will delete the object right afterwards, and the signal slot connections are automatically disconnected when the sender or receiver is destroyed.
&gt; 
&gt; Also: Wouldn&apos;t this code crash if the webview is destructed before onComponentCmplete() is called?

Fixed.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/PageViewportController.cpp:38
&gt; &gt; +bool fuzzyCompare(float a, float b, float epsilon)
&gt; 
&gt; static missing here?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/PageViewportController.cpp:43
&gt; &gt; +FloatPoint boundPosition(const FloatPoint minPosition, const FloatPoint&amp; position, const FloatPoint&amp; maxPosition)
&gt; 
&gt; Ditto.
These helper functions are also needed in the translation unit of the client so  they are declared in the header and defined here, they need external linkage.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/PageViewportController.cpp:101
&gt; &gt; +float PageViewportController::convertFromViewport(float value) const
&gt; &gt; +{
&gt; &gt; +    return value / m_devicePixelRatio;
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +float PageViewportController::convertToViewport(float value) const
&gt; &gt; +{
&gt; &gt; +    return value * m_devicePixelRatio;
&gt; &gt; +}
&gt; 
&gt; Should these two trivial functions perhaps be inline in the class declaration?
Right.

&gt; 
[snip] 
&gt; It&apos;s a bit ugly that suspendContent() and resumeContent() are not really symmetric, i.e. resumeContent() does more than just undoing what suspendContent() did. On the caller side it looks strange, like in the UpdateDeferrer, where we call suspendContent() only if the constructor flag suggests to do so, but we
&gt; unconditionally call resumeContent(). Makes me wonder if the suspendActiveDOMObjectAndAnimations() code should just move from here to the callers?

I think Jocelyn&apos;s work on fixing scaling artifacts during page transition should remove the need to rely on setting the initial scale when resuming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713132</commentid>
    <comment_count>31</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-06 03:36:16 -0700</bug_when>
    <thetext>Committed r127720: &lt;http://trac.webkit.org/changeset/127720&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713135</commentid>
    <comment_count>32</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-09-06 03:39:29 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; [snip]
&gt; &gt; The big bulk of the code remains in the Qt client though (570 LOC vs. ~250 LOC in the non-Qt controller), so I wonder how much this split is really going to buy us. I don&apos;t see the code becoming simpler. Unless of course it turns out that over time we can move more code to the controller.
&gt; &gt; 
&gt; Yes, as a first step I tried to establish the basic layout for the split. I think it should be possible to merge and move considerable pars of the focusEditableArea and the zoomToArea... functionality as well in follow-up patches and also change how qwebkitest accesses the viewport state data to be able to remove the proxying from the client.

Excellent, if you think that there&apos;s more that can be migrated over time, then it sounds like it&apos;s really worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713153</commentid>
    <comment_count>33</comment_count>
      <attachid>162259</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-09-06 04:10:40 -0700</bug_when>
    <thetext>Comment on attachment 162259
Patch

Clearing flags from attachment.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161723</attachid>
            <date>2012-08-31 09:55:27 -0700</date>
            <delta_ts>2012-09-03 05:18:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91257-20120831185542.patch</filename>
            <type>text/plain</type>
            <size>107016</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3MjcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDIyMTZkOTZkNjY4ZmU2
YmYzMWE2MzliNjRjMmU4YjFiY2I4MDJkMS4uOTVhYWE0ZDlmNGI2MWJhN2YyNmQzM2Y3MTc2NmRm
M2M0ZWE3NGFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NyBAQAorMjAxMi0wOC0zMSAgQW5k
cmFzIEJlY3NpICA8YW5kcmFzLmJlY3NpQG5va2lhLmNvbT4KKworICAgICAgICBbV0syXSBNYWtl
IFtRdF1WaWV3cG9ydEhhbmRsZXIgY3Jvc3MgcGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IFF0Vmlld3BvcnRIYW5kbGVyIGlu
Y2x1ZGVzIGJlaGF2aW91ciB0aGF0IGlzIG5vdAorICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpYywg
dG9nZXRoZXIgd2l0aCBob29rcyB0byB0aGUgUXRRdWljayBBUEkKKyAgICAgICAgbGF5ZXIuCisK
KyAgICAgICAgQSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBhbGxv
dyBvdGhlciBwb3J0cworICAgICAgICB0byB1c2UgdGhlIHZpZXdwb3J0IGZ1bmN0aW9uYWxpdHkg
cHJvdmlkZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcGxhdGZvcm0gaW5k
ZXBlbmRlbnQgVmlld3BvcnRIYW5kbGVyCisgICAgICAgIGNsYXNzIHRoYXQgaXMgcmVzcG9uc2li
bGUgZm9yIGhhbmRsaW5nIHJlcXVlc3RzIGZyb20gdGhlIHdlYgorICAgICAgICBwcm9jZXNzIChl
Zy4gY29udGVudCBzaXplIGNoYW5nZXMsIHZpZXdwb3J0IGF0dHJpYnV0ZXMgY2hhbmdlcworICAg
ICAgICBhbmQgc2Nyb2xsIHBvc2l0aW9uIHJlcXVlc3RzKS4KKworICAgICAgICBWaWV3cG9ydEhh
bmRsZXIgYWxzbyBhY3RzIGFzIGEgcHJveHkgZm9yIG5vdGlmaWNhdGlvbnMgdG8gdGhlCisgICAg
ICAgIHdlYiBwcm9jZXNzIGZvciBjaGFuZ2VzIGluIHRoZSB2aWV3cG9ydCBzdGF0ZSAoZWcuIHZp
ZXdwb3J0CisgICAgICAgIHNpemUsIHZpc2libGUgcmVjdCwgY29udGVudCBzY2FsZSBhbmQgbW92
ZW1lbnQgdHJhamVjdG9yeSkuCisKKyAgICAgICAgVXBkYXRlcyBvZiB0aGUgdmlld3BvcnQgc3Rh
dGUgYXJlIHB1c2hlZCB0byB0aGUgVmlld3BvcnRIYW5kbGVyCisgICAgICAgIGJ5IGEgcGxhdGZv
cm0gc3BlY2lmaWMgY2xpZW50IGNsYXNzIHdoaWNoIGltcGxlbWVudHMgdGhlCisgICAgICAgIFZp
ZXdwb3J0SGFuZGxlckNsaWVudCBhYnN0cmFjdCBpbnRlcmZhY2UuCisgICAgICAgIFJlcXVlc3Rz
IGZyb20gdGhlIHdlYiBwcm9jZXNzIGFyZSBhbHNvIGFjdGVkIG9uIGJ5IHRoZSBjbGllbnQKKyAg
ICAgICAgd2hpY2ggcHJvdmlkZXMgaG9va3MgdG8gdGhlIFF0IEFQSSBsYXllci4KKworICAgICAg
ICBGb3Igbm93IG9ubHkgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQgaW1wbGVtZW50cyB0aGUKKyAg
ICAgICAgY2xpZW50IGludGVyZmFjZSBhbmQgaXMgcmVzcG9uc2libGUgZm9yIFFRdWljayBzcGVj
aWZpYworICAgICAgICBiZWhhdmlvdXIgKGdlc3R1cmVzLCBhbmltYXRpb25zIGV0YykuCisKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
cGFnZV9wX3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3Bw
OgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6Om9uQ29tcG9uZW50Q29tcGxldGUpOgor
ICAgICAgICAoUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6On5RUXVpY2tXZWJWaWV3Rmxp
Y2thYmxlUHJpdmF0ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6
dXBkYXRlVmlld3BvcnRTaXplKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2
YXRlOjpwYWdlRGlkUmVxdWVzdFNjcm9sbCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2th
YmxlUHJpdmF0ZTo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmg6CisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnZpZXdwb3J0SGFuZGxlckNsaWVudCk6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3Rmxp
Y2thYmxlUHJpdmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVzdC5j
cHA6CisgICAgICAgIChRV2ViS2l0VGVzdDo6dmlld3BvcnQpOgorICAgICAgICAoUVdlYktpdFRl
c3Q6OmRldmljZVBpeGVsUmF0aW8pOgorICAgICAgICAoUVdlYktpdFRlc3Q6OmNvbnRlbnRzU2Nh
bGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9WaWV3cG9ydEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmJvdW5kKToKKyAgICAgICAgKFdlYktp
dDo6ZnV6enlDb21wYXJlKToKKyAgICAgICAgKFdlYktpdDo6Ym91bmRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OlZpZXdwb3J0VXBkYXRlRGVmZXJy
ZXIpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjp+Vmlld3BvcnRV
cGRhdGVEZWZlcnJlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlcjo6Vmlld3Bv
cnRIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjpjc3NTY2FsZUZy
b21WaWV3cG9ydCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlcjo6dmlld3BvcnRT
Y2FsZUZyb21DU1MpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXI6OnZpZXdwb3J0
Q29vcmRGcm9tQ1NTKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjp2aWV3cG9y
dFJlY3RGcm9tQ1NTKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjppbm5lckJv
dW5kZWRDU1NTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlcjo6b3V0ZXJC
b3VuZGVkQ1NTU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXI6OmNvbnRl
bnRzU2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXI6OmNvbnRl
bnRQb3NpdGlvblJlcXVlc3RlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlcjo6
dXBkYXRlVmlld3BvcnRTaXplKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjp1
cGRhdGVWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5k
bGVyOjp1cGRhdGVXZWJQcm9jZXNzVmlld3BvcnRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZXdwb3J0SGFuZGxlcjo6dmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdwb3J0SGFuZGxlcjo6c3VzcGVuZFBhZ2VDb250ZW50KToKKyAgICAgICAgKFdlYktp
dDo6Vmlld3BvcnRIYW5kbGVyOjpyZXN1bWVQYWdlQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdwb3J0SGFuZGxlcjo6cG9zaXRpb25SYW5nZUZvckNvbnRlbnRBdFNjYWxlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvVmlld3BvcnRIYW5kbGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoVmlld3BvcnRVcGRhdGVEZWZlcnJlcik6
CisgICAgICAgIChWaWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhh
bmRsZXI6On5WaWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXI6Omhhc1N1c3BlbmRlZENvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXI6OmhhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxl
cjo6YWxsb3dzVXNlclNjYWxpbmcpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXI6
OmxheW91dFNpemUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXI6OmRldmljZVBp
eGVsUmF0aW8pOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXI6Om1pbmltdW1TY2Fs
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlcjo6bWF4aW11bVNjYWxlKToKKyAg
ICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjpzZXRIYWRVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9WaWV3cG9ydEhhbmRsZXJDbGllbnQuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFZpZXdwb3J0SGFuZGxlckNsaWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudDo6flZpZXdwb3J0SGFu
ZGxlckNsaWVudCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpRdEdlc3R1cmVSZWNvZ25pemVyOjp2aWV3cG9ydEhhbmRs
ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmg6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25p
emVyLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVy
LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SGFuZGxl
cik6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmg6IFJlbW92ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5oOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFF0V2ViUGFnZUV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJLaXQ6OlF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6dmlld3BvcnRIYW5kbGVyKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpW
aWV3cG9ydEhhbmRsZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxl
ckNsaWVudFF0OjpTY2FsZUFuaW1hdGlvbjo6dXBkYXRlQ3VycmVudFZhbHVlKToKKyAgICAgICAg
KFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6On5WaWV3cG9ydEhhbmRsZXJDbGllbnRR
dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzZXRDb250ZW50
UmVjdFZpc2libGVQb3NpdGlvbkF0U2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhh
bmRsZXJDbGllbnRRdDo6YW5pbWF0ZUNvbnRlbnRSZWN0VmlzaWJsZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpmbGlja01vdmVTdGFydGVkKToKKyAgICAgICAg
KFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmZsaWNrTW92ZUVuZGVkKToKKyAgICAg
ICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBhZ2VJdGVtUG9zaXRpb25DaGFu
Z2VkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNjYWxlQW5p
bWF0aW9uU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xp
ZW50UXQ6OnRvdWNoQmVnaW4pOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGll
bnRRdDo6dG91Y2hFbmQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRR
dDo6Zm9jdXNFZGl0YWJsZUFyZWEpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJD
bGllbnRRdDo6em9vbVRvQXJlYUdlc3R1cmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdw
b3J0SGFuZGxlckNsaWVudFF0OjpuZWFyZXN0VmFsaWRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNldENvbnRlbnRQb3NpdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzZXRDb250ZW50
c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNldENv
bnRlbnRSZWN0VG9OZWFyZXN0VmFsaWRCb3VuZHMpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9y
dEhhbmRsZXJDbGllbnRRdDo6cmVxdWVzdFZpZXdwb3J0U3RhdGVVcGRhdGUpOgorICAgICAgICAo
V2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6YWxsb3dzVXNlclNjYWxpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6ZGV2aWNlUGl4ZWxSYXRpbyk6
CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjptaW5pbXVtU2NhbGUp
OgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6bWF4aW11bVNjYWxl
KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmN1cnJlbnRTY2Fs
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpsYXlvdXRTaXpl
KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNjcm9sbEFuaW1h
dGlvbkFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojpw
YW5HZXN0dXJlQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6OnBhbkdlc3R1cmVTdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQ6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Vmll
d3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwYW5HZXN0dXJlQ2FuY2VsbGVkKToKKyAgICAgICAg
KFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKToK
KyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmNhbmNlbFNjcm9sbEFu
aW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjppbnRl
cnJ1cHRTY2FsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNs
aWVudFF0OjpwaW5jaEdlc3R1cmVBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhh
bmRsZXJDbGllbnRRdDo6cGluY2hHZXN0dXJlU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZUVuZGVkKToK
KyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZUNh
bmNlbGxlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp2aXNp
YmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6OmNvbnRlbnRzU2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6dmlzaWJsZUNvbnRlbnRzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnVwZGF0ZVZpZXdwb3J0KToKKyAg
ICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNjYWxlQ29udGVudCk6Cisg
ICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp2aWV3cG9ydFNjYWxlRm9y
UmVjdCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0Lmg6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2V0Vmlld3BvcnRIYW5k
bGVyKToKKyAgICAgICAgKFNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQ6OlNjYWxlQW5pbWF0aW9uOjpTY2FsZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpTY2FsZVN0YWNrSXRlbTo6U2Nh
bGVTdGFja0l0ZW0pOgorICAgICAgICAoU2NhbGVTdGFja0l0ZW0pOgorCiAyMDEyLTA4LTMxICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OICgx
MjcwNDcpOiBDcmFzaCBpbiBQbHVnaW5Qcm94eTo6d2luZG93VmlzaWJpbGl0eUNoYW5nZWQgd2hl
biBjaGFuZ2luZyB0YWJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIv
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCAyMWUyZGMxNGZjOGYxNDJkYmNhZjg3ODdi
MTk1MzQ2YTM0NDE3Y2Y4Li4xZTcwMjVlZTU0NjEzMDMyODc3ZTRkMWQ0ODNmMzAxMjYzMzc1YTE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1RhcmdldC5wcmkKQEAgLTIxOSw2ICsyMTksOCBAQCBIRUFERVJTICs9IFwKICAgICBVSVBy
b2Nlc3MvUHJvY2Vzc01vZGVsLmggXAogICAgIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVy
LmggXAogICAgIFVJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oIFwKKyAgICBVSVByb2Nlc3MvVmlld3Bv
cnRIYW5kbGVyLmggXAorICAgIFVJUHJvY2Vzcy9WaWV3cG9ydEhhbmRsZXJDbGllbnQuaCBcCiAg
ICAgVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuaCBcCiAgICAgVUlQcm9jZXNzL1dlYkFw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL1dlYkJhY2tGb3J3
YXJkTGlzdC5oIFwKQEAgLTU2MCw2ICs1NjIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nl
c3MvUGx1Z2lucy9xdC9QbHVnaW5Qcm9jZXNzUHJveHlRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9Q
bHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAgXAogICAgIFVJUHJvY2Vzcy9SZXNw
b25zaXZlbmVzc1RpbWVyLmNwcCBcCisgICAgVUlQcm9jZXNzL1ZpZXdwb3J0SGFuZGxlci5jcHAg
XAogICAgIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmNwcCBcCiAgICAgVUlQcm9jZXNz
L1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvV2Vi
QmFja0ZvcndhcmRMaXN0LmNwcCBcCkBAIC03NzksOSArNzgyLDkgQEAgY29udGFpbnMoREVGSU5F
UywgSEFWRV9RVFFVSUNLPTEpIHsKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVBvbGlj
eUNsaWVudC5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oIFwKICAg
ICAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVVJQ2xpZW50LmggXAotICAgICAgICBVSVByb2Nl
c3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuaCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9RdFdlYlVu
ZG9Db250cm9sbGVyLmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJJY29uRGF0YWJhc2VD
bGllbnQuaCBcCisgICAgICAgIFVJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5o
IFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5oIFwKICAgICAg
ICAgVUlQcm9jZXNzL3F0L1dlYkdlb2xvY2F0aW9uUHJvdmlkZXJRdC5oIFwKICAgICAgICAgVUlQ
cm9jZXNzL3F0L1dlYlBvcHVwTWVudVByb3h5UXQuaApAQCAtODEzLDcgKzgxNiw3IEBAIGNvbnRh
aW5zKERFRklORVMsIEhBVkVfUVRRVUlDSz0xKSB7CiAgICAgICAgIFVJUHJvY2Vzcy9xdC9RdFBh
bkdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9RdFBpbmNoR2Vz
dHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0VGFwR2VzdHVyZVJl
Y29nbml6ZXIuY3BwIFwKLSAgICAgICAgVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNw
cCBcCisgICAgICAgIFVJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5jcHAgXAog
ICAgICAgICBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcCBcCiAgICAgICAg
IFVJUHJvY2Vzcy9xdC9XZWJHZW9sb2NhdGlvblByb3ZpZGVyUXQuY3BwIFwKICAgICAgICAgVUlQ
cm9jZXNzL3F0L1dlYlBvcHVwTWVudVByb3h5UXQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaAppbmRleCBhZDFjNmFkM2Yz
MDhkZTYzODk1YjdkNmI2YThhZjYxNjU5N2Y4YWVlLi5jN2FjODZjM2Q1YzJmMjdmYjI1ZWI1N2U5
YjRjMTBlMGZkMDMxODZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oCkBAIC0yNiw3ICsyNiw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgUXRWaWV3cG9ydEhhbmRsZXI7CiBj
bGFzcyBRdFdlYlBhZ2VFdmVudEhhbmRsZXI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IGVkZWM4YzdmMjZlZmJjYjBh
NmM4OGY5NGVjZWYyMzBhY2Y4MzU4YjEuLjIwYjAyZmRiM2ExNjZmYTkzYTYzMWNkYzliZTljNTU5
ZDgyYzNkMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3LmNwcApAQCAtMjUsMTMgKzI1LDEzIEBACiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQ
cm94eUltcGwuaCIKICNpbmNsdWRlICJRdERpYWxvZ1J1bm5lci5oIgogI2luY2x1ZGUgIlF0RG93
bmxvYWRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKICNpbmNsdWRl
ICJRdFdlYkNvbnRleHQuaCIKICNpbmNsdWRlICJRdFdlYkVycm9yLmgiCiAjaW5jbHVkZSAiUXRX
ZWJJY29uRGF0YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VFdmVudEhhbmRsZXIu
aCIKICNpbmNsdWRlICJRdFdlYlBhZ2VMb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdl
UG9saWN5Q2xpZW50LmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQuaCIKICNp
bmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZF
UikKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgpAQCAtMzI2LDggKzMyNiw5IEBAIHZv
aWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemUoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIFdLUGFnZUdyb3VwUmVmIHBhCiB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpvbkNvbXBv
bmVudENvbXBsZXRlKCkKIHsKICAgICBRX1EoUVF1aWNrV2ViVmlldyk7Ci0gICAgbV92aWV3cG9y
dEhhbmRsZXIucmVzZXQobmV3IFF0Vmlld3BvcnRIYW5kbGVyKHdlYlBhZ2VQcm94eS5nZXQoKSwg
cSwgcGFnZVZpZXcuZGF0YSgpKSk7Ci0gICAgcGFnZVZpZXctPmV2ZW50SGFuZGxlcigpLT5zZXRW
aWV3cG9ydEhhbmRsZXIobV92aWV3cG9ydEhhbmRsZXIuZGF0YSgpKTsKKyAgICBtX3ZpZXdwb3J0
SGFuZGxlckNsaWVudC5yZXNldChuZXcgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQocSwgcGFnZVZp
ZXcuZGF0YSgpKSk7CisgICAgbV92aWV3cG9ydEhhbmRsZXIucmVzZXQobmV3IFZpZXdwb3J0SGFu
ZGxlcih3ZWJQYWdlUHJveHkuZ2V0KCksIG1fdmlld3BvcnRIYW5kbGVyQ2xpZW50LmRhdGEoKSkp
OworICAgIHBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+c2V0Vmlld3BvcnRIYW5kbGVyKG1fdmll
d3BvcnRIYW5kbGVyQ2xpZW50LmRhdGEoKSk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZh
dGU6OnNldFRyYW5zcGFyZW50QmFja2dyb3VuZChib29sIGVuYWJsZSkKQEAgLTg1Niw3ICs4NTcs
NyBAQCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6UVF1aWNrV2ViVmlld0ZsaWNrYWJs
ZVByaXZhdGUoUVF1aWNrV2ViVmlldyogdmlldwogCiBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJp
dmF0ZTo6flFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlKCkKIHsKLSAgICBtX3ZpZXdwb3J0
SGFuZGxlci0+ZGlzY29ubmVjdCgpOworICAgIG1fdmlld3BvcnRIYW5kbGVyQ2xpZW50LT5kaXNj
b25uZWN0KCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OmluaXRp
YWxpemUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJl
ZikKQEAgLTg4MCwyMyArODgxLDIzIEBAIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZh
dGU6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBXZWJDb3JlOjpWCiAKIHZvaWQg
UVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgpCiB7Ci0g
ICAgLy8gRklYTUU6IEV4YW1pbmUgd2h5IHRoZXJlIGlzIG5vdCBhbiB2aWV3cG9ydEhhbmRsZXIg
aGVyZSBpbiB0aGUgYmVnaW5uaW5nLgorICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKwogICAgIGlm
IChtX3ZpZXdwb3J0SGFuZGxlcikKLSAgICAgICAgbV92aWV3cG9ydEhhbmRsZXItPnZpZXdwb3J0
SXRlbVNpemVDaGFuZ2VkKCk7CisgICAgICAgIG1fdmlld3BvcnRIYW5kbGVyLT51cGRhdGVWaWV3
cG9ydFNpemUoUVNpemVGKHEtPndpZHRoKCksIHEtPmhlaWdodCgpKSk7CiB9CiAKIHZvaWQgUVF1
aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IFFQ
b2ludCYgcG9zKQogewotICAgIG1fdmlld3BvcnRIYW5kbGVyLT5wYWdlQ29udGVudFBvc2l0aW9u
UmVxdWVzdGVkKHBvcyk7CisgICAgaWYgKG1fdmlld3BvcnRIYW5kbGVyKQorICAgICAgICBtX3Zp
ZXdwb3J0SGFuZGxlci0+Y29udGVudFBvc2l0aW9uUmVxdWVzdGVkKHBvcyk7CiB9CiAKIHZvaWQg
UVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25z
dCBRU2l6ZSYgbmV3U2l6ZSkKIHsKLSAgICBRX1EoUVF1aWNrV2ViVmlldyk7Ci0KICAgICBwYWdl
Vmlldy0+c2V0Q29udGVudHNTaXplKG5ld1NpemUpOyAvLyBlbWl0cyBjb250ZW50c1NpemVDaGFu
Z2VkKCkKICAgICBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKG5l
d1NpemUpOwotICAgIG1fdmlld3BvcnRIYW5kbGVyLT5wYWdlQ29udGVudHNTaXplQ2hhbmdlZChu
ZXdTaXplLCBxLT5ib3VuZGluZ1JlY3QoKS5zaXplKCkudG9TaXplKCkpOworICAgIG1fdmlld3Bv
cnRIYW5kbGVyLT5jb250ZW50c1NpemVDaGFuZ2VkKG5ld1NpemUpOwogfQogCiB2b2lkIFFRdWlj
a1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpoYW5kbGVNb3VzZUV2ZW50KFFNb3VzZUV2ZW50KiBl
dmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXdfcC5oCmluZGV4IDY0NTUzOWU3Mzc3MDA4N2Y1MzcxZTZiYzc1YTRmZmM5YTcxZWE4NTEuLjA3
NmM0YmRlZWU0MzRiMDIzNzE3YjAxMzZiOTk5MGUxNjFkYTE2NmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaApAQCAtNDksNyArNDks
NyBAQCBjbGFzcyBQbGF0Zm9ybVdlYlZpZXc7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
UXRSZWZDb3VudGVkTmV0d29ya1JlcXVlc3REYXRhOwotY2xhc3MgUXRWaWV3cG9ydEhhbmRsZXI7
CitjbGFzcyBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDsKIGNsYXNzIFF0V2ViUGFnZUxvYWRDbGll
bnQ7CiBjbGFzcyBRdFdlYlBhZ2VQb2xpY3lDbGllbnQ7CiBjbGFzcyBRdFdlYlBhZ2VVSUNsaWVu
dDsKQEAgLTIxNyw3ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIFFRdWlja1dlYlZpZXdFeHBlcmlt
ZW50YWwqIG1fZXhwZXJpbWVudGFsOwogCiAgICAgZnJpZW5kIGNsYXNzIFFXZWJLaXRUZXN0Owot
ICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOworICAgIGZyaWVuZCBj
bGFzcyBXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OwogICAgIGZyaWVuZCBjbGFzcyBX
ZWJLaXQ6OlF0V2ViUGFnZUxvYWRDbGllbnQ7CiAgICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRX
ZWJQYWdlUG9saWN5Q2xpZW50OwogICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlF0V2ViUGFnZVVJ
Q2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3X3BfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3X3BfcC5oCmluZGV4IGZjYjlmMmFiZTAzYmVjNTM3NzlhNjk1YTcxMjkzZmU0MGQ0Njhl
Y2MuLjE2ZWMyMjgyOTc2OGM0ZmY1NTE3MDNjODlmNzhmYThlZGMwYjQyYTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKQEAg
LTI0LDEwICsyNCwxMCBAQAogI2luY2x1ZGUgIlF0UGFnZUNsaWVudC5oIgogI2luY2x1ZGUgIlF0
V2ViUGFnZVVJQ2xpZW50LmgiCiAjaW5jbHVkZSAiUXRXZWJVbmRvQ29udHJvbGxlci5oIgotCisj
aW5jbHVkZSAiVmlld3BvcnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5kbGVyQ2xp
ZW50LmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vi
cGFnZV9wLmgiCi0KICNpbmNsdWRlIDxRdENvcmUvUUVsYXBzZWRUaW1lcj4KICNpbmNsdWRlIDxR
dENvcmUvUU9iamVjdD4KICNpbmNsdWRlIDxRdENvcmUvUVNjb3BlZFBvaW50ZXI+CkBAIC0zOSwx
MSArMzksMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBEb3dubG9hZFByb3h5OwogY2xh
c3MgRHJhd2luZ0FyZWFQcm94eTsKIGNsYXNzIFF0RGlhbG9nUnVubmVyOwotY2xhc3MgUXRWaWV3
cG9ydEhhbmRsZXI7CitjbGFzcyBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDsKIGNsYXNzIFF0V2Vi
Q29udGV4dDsKIGNsYXNzIFF0V2ViRXJyb3I7CiBjbGFzcyBRdFdlYlBhZ2VMb2FkQ2xpZW50Owog
Y2xhc3MgUXRXZWJQYWdlUG9saWN5Q2xpZW50OworY2xhc3MgVmlld3BvcnRIYW5kbGVyOwogY2xh
c3MgV2ViUGFnZVByb3h5OwogfQogCkBAIC04Nyw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICBpbnQg
bG9hZFByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkUHJvZ3Jlc3M7IH0KICAgICB2b2lk
IHNldE5lZWRzRGlzcGxheSgpOwogCi0gICAgdmlydHVhbCBXZWJLaXQ6OlF0Vmlld3BvcnRIYW5k
bGVyKiB2aWV3cG9ydEhhbmRsZXIoKSB7IHJldHVybiAwOyB9CisgICAgV2ViS2l0OjpWaWV3cG9y
dEhhbmRsZXJDbGllbnRRdCogdmlld3BvcnRIYW5kbGVyQ2xpZW50KCkgY29uc3QgeyByZXR1cm4g
bV92aWV3cG9ydEhhbmRsZXJDbGllbnQuZGF0YSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVZpZXdwb3J0U2l6ZSgpIHsgfQogICAgIHZvaWQgdXBkYXRlVG91Y2hWaWV3cG9ydFNpemUoKTsK
IApAQCAtMTcwLDcgKzE3MSw5IEBAIHByb3RlY3RlZDoKICAgICBRU2NvcGVkUG9pbnRlcjxRUXVp
Y2tXZWJQYWdlPiBwYWdlVmlldzsKICAgICBRUXVpY2tXZWJWaWV3KiBxX3B0cjsKIAotICAgIFFT
Y29wZWRQb2ludGVyPFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI+IG1fdmlld3BvcnRIYW5kbGVy
OworICAgIFFTY29wZWRQb2ludGVyPFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyPiBtX3ZpZXdwb3J0
SGFuZGxlcjsKKyAgICBRU2NvcGVkUG9pbnRlcjxXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0PiBtX3ZpZXdwb3J0SGFuZGxlckNsaWVudDsKKwogICAgIEZsaWNrYWJsZUF4aXNMb2NrZXIg
YXhpc0xvY2tlcjsKIAogICAgIFFRbWxDb21wb25lbnQqIGFsZXJ0RGlhbG9nOwpAQCAtMjE4LDcg
KzIyMSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb25Db21wb25lbnRDb21wbGV0ZSgp
OwogCiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25zdCBX
ZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKLSAgICB2aXJ0dWFsIFdlYktpdDo6UXRWaWV3
cG9ydEhhbmRsZXIqIHZpZXdwb3J0SGFuZGxlcigpIHsgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVy
LmRhdGEoKTsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydFNpemUoKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBRUG9pbnQmIHBvcyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmtpdHRlc3QuY3BwCmluZGV4
IGY5MmM5ZmZjYzg4OWU5MGNiYTU3ZTA5MzRhZTJlNzZjZWI0NDZmYjIuLmNjYmI3YzM0YjJmNGI5
ZmM5Y2I4OTlkM2IxZmU4NTFhZDlhNGNhYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdlYmtpdHRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXdlYmtpdHRlc3QuY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAicXdlYmtpdHRlc3RfcC5oIgogCi0jaW5jbHVkZSAiUXRWaWV3
cG9ydEhhbmRsZXIuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oIgogI2lu
Y2x1ZGUgInFxdWlja3dlYnZpZXdfcF9wLmgiCiAjaW5jbHVkZSA8UU11dGFibGVMaXN0SXRlcmF0
b3I+CiAjaW5jbHVkZSA8UVRvdWNoRXZlbnQ+CkBAIC0xNDgsMTIgKzE0OCwxMSBAQCBzdGF0aWMg
aW5saW5lIFFKc29uT2JqZWN0IHRvSnNvbk9iamVjdChjb25zdCBRU2l6ZUYmIHNpemVGKQogUUpz
b25PYmplY3QgUVdlYktpdFRlc3Q6OnZpZXdwb3J0KCkgY29uc3QKIHsKICAgICBRSnNvbk9iamVj
dCB2aWV3cG9ydERhdGE7Ci0gICAgaWYgKFF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydEhhbmRs
ZXIgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3cG9ydEhhbmRsZXIoKSkgewotICAgICAgICB2aWV3
cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoImluaXRpYWxTY2FsZSIpLCB2aWV3cG9ydEhh
bmRsZXItPm1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUpOwotICAgICAgICB2aWV3cG9ydERh
dGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoImxheW91dFNpemUiKSwgdG9Kc29uT2JqZWN0KFFTaXpl
Rih2aWV3cG9ydEhhbmRsZXItPm1fcmF3QXR0cmlidXRlcy5sYXlvdXRTaXplKSkpOwotICAgICAg
ICB2aWV3cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoImlzU2NhbGFibGUiKSwgISF2aWV3
cG9ydEhhbmRsZXItPm1fcmF3QXR0cmlidXRlcy51c2VyU2NhbGFibGUpOwotICAgICAgICB2aWV3
cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoIm1pbmltdW1TY2FsZSIpLCB2aWV3cG9ydEhh
bmRsZXItPm1fbWluaW11bVNjYWxlKTsKLSAgICAgICAgdmlld3BvcnREYXRhLmluc2VydChRTGF0
aW4xU3RyaW5nKCJtYXhpbXVtU2NhbGUiKSwgdmlld3BvcnRIYW5kbGVyLT5tX21heGltdW1TY2Fs
ZSk7CisgICAgaWYgKGNvbnN0IFZpZXdwb3J0SGFuZGxlckNsaWVudFF0KiBjb25zdCB2aWV3cG9y
dEhhbmRsZXIgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3cG9ydEhhbmRsZXJDbGllbnQoKSkgewor
ICAgICAgICB2aWV3cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoImxheW91dFNpemUiKSwg
dG9Kc29uT2JqZWN0KHZpZXdwb3J0SGFuZGxlci0+bGF5b3V0U2l6ZSgpKSk7CisgICAgICAgIHZp
ZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygiaXNTY2FsYWJsZSIpLCB2aWV3cG9ydEhh
bmRsZXItPmFsbG93c1VzZXJTY2FsaW5nKCkpOworICAgICAgICB2aWV3cG9ydERhdGEuaW5zZXJ0
KFFMYXRpbjFTdHJpbmcoIm1pbmltdW1TY2FsZSIpLCB2aWV3cG9ydEhhbmRsZXItPm1pbmltdW1T
Y2FsZSgpKTsKKyAgICAgICAgdmlld3BvcnREYXRhLmluc2VydChRTGF0aW4xU3RyaW5nKCJtYXhp
bXVtU2NhbGUiKSwgdmlld3BvcnRIYW5kbGVyLT5tYXhpbXVtU2NhbGUoKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgdmlld3BvcnREYXRhLmluc2VydChRTGF0aW4xU3RyaW5nKCJpbml0aWFsU2Nh
bGUiKSwgMS4wKTsKICAgICAgICAgdmlld3BvcnREYXRhLmluc2VydChRTGF0aW4xU3RyaW5nKCJs
YXlvdXRTaXplIiksIHRvSnNvbk9iamVjdChRU2l6ZUYoKSkpOwpAQCAtMTY2LDE0ICsxNjUsMTQg
QEAgUUpzb25PYmplY3QgUVdlYktpdFRlc3Q6OnZpZXdwb3J0KCkgY29uc3QKIAogUVZhcmlhbnQg
UVdlYktpdFRlc3Q6OmRldmljZVBpeGVsUmF0aW8oKSBjb25zdAogewotICAgIGlmIChRdFZpZXdw
b3J0SGFuZGxlciogdmlld3BvcnQgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3cG9ydEhhbmRsZXIo
KSkKLSAgICAgICAgcmV0dXJuIHZpZXdwb3J0LT5tX2RldmljZVBpeGVsUmF0aW87CisgICAgaWYg
KGNvbnN0IFZpZXdwb3J0SGFuZGxlckNsaWVudFF0KiBjb25zdCB2aWV3cG9ydCA9IG1fd2ViVmll
d1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlckNsaWVudCgpKQorICAgICAgICByZXR1cm4gdmlld3Bv
cnQtPmRldmljZVBpeGVsUmF0aW8oKTsKICAgICByZXR1cm4gMS4wOwogfQogCiBRVmFyaWFudCBR
V2ViS2l0VGVzdDo6Y29udGVudHNTY2FsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKFF0Vmlld3BvcnRI
YW5kbGVyKiB2aWV3cG9ydCA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlcigpKQot
ICAgICAgICByZXR1cm4gdmlld3BvcnQtPmN1cnJlbnRDU1NTY2FsZSgpOworICAgIGlmIChjb25z
dCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdCogY29uc3Qgdmlld3BvcnQgPSBtX3dlYlZpZXdQcml2
YXRlLT52aWV3cG9ydEhhbmRsZXJDbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIHZpZXdwb3J0LT5j
dXJyZW50U2NhbGUoKTsKICAgICByZXR1cm4gMS4wOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1ZpZXdwb3J0SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVmlld3BvcnRIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTM0MTMxYTNmMWJiZWNjYjY3
NmQ3NjQ3ZmNlYmUzMzExYWRiZjJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1ZpZXdwb3J0SGFuZGxlci5jcHAKQEAgLTAsMCArMSwyNjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQmVuamFtaW4gUG91bGFpbiA8YmVu
amFtaW5Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWaWV3
cG9ydEhhbmRsZXIuaCIKKworI2luY2x1ZGUgIlZpZXdwb3J0SGFuZGxlckNsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGlubGluZSBmbG9hdCBib3VuZChmbG9h
dCBtaW4sIGZsb2F0IHZhbHVlLCBmbG9hdCBtYXgpCit7CisgICAgcmV0dXJuIGNsYW1wVG88Zmxv
YXQ+KHZhbHVlLCBtaW4sIG1heCk7Cit9CisKK2Jvb2wgZnV6enlDb21wYXJlKGZsb2F0IGEsIGZs
b2F0IGIsIGZsb2F0IGVwc2lsb24pCit7CisgICAgcmV0dXJuIHN0ZDo6YWJzKGEgLSBiKSA8IGVw
c2lsb247Cit9CisKK0Zsb2F0UG9pbnQgYm91bmRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50IG1p
blBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludCYg
bWF4UG9zaXRpb24pCit7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoYm91bmQobWluUG9zaXRpb24u
eCgpLCBwb3NpdGlvbi54KCksIG1heFBvc2l0aW9uLngoKSksIGJvdW5kKG1pblBvc2l0aW9uLnko
KSwgcG9zaXRpb24ueSgpLCBtYXhQb3NpdGlvbi55KCkpKTsKK30KKworVmlld3BvcnRVcGRhdGVE
ZWZlcnJlcjo6Vmlld3BvcnRVcGRhdGVEZWZlcnJlcihWaWV3cG9ydEhhbmRsZXIqIGhhbmRsZXIs
IFN1c3BlbmRDb250ZW50RmxhZyBzdXNwZW5kQ29udGVudEZsYWcpCisgICAgOiBoYW5kbGVyKGhh
bmRsZXIpCit7CisgICAgaGFuZGxlci0+bV9zdXNwZW5kQ291bnQrKzsKKworICAgIC8vIFRoZXJl
IGlzIG5vIG5lZWQgdG8gc3VzcGVuZCBjb250ZW50IGZvciBpbW1lZGlhdGUgdXBkYXRlcworICAg
IC8vIG9ubHkgZHVyaW5nIGFuaW1hdGlvbnMgb3IgbG9uZ2VyIGdlc3R1cmVzLgorICAgIGlmIChz
dXNwZW5kQ29udGVudEZsYWcgPT0gRGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkKKyAgICAg
ICAgaGFuZGxlci0+c3VzcGVuZFBhZ2VDb250ZW50KCk7Cit9CisKK1ZpZXdwb3J0VXBkYXRlRGVm
ZXJyZXI6On5WaWV3cG9ydFVwZGF0ZURlZmVycmVyKCkKK3sKKyAgICBpZiAoLS0oaGFuZGxlci0+
bV9zdXNwZW5kQ291bnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBoYW5kbGVyLT5yZXN1bWVQ
YWdlQ29udGVudCgpOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0
aGUgdmlld3BvcnQgd2lsbCBiZSByZXF1ZXN0ZWQuCisgICAgaGFuZGxlci0+dXBkYXRlV2ViUHJv
Y2Vzc1ZpZXdwb3J0U3RhdGUoKTsKK30KKworVmlld3BvcnRIYW5kbGVyOjpWaWV3cG9ydEhhbmRs
ZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkqIHByb3h5LCBWaWV3cG9ydEhhbmRsZXJDbGllbnQqIGNs
aWVudCkKKyAgICA6IG1fd2ViUGFnZVByb3h5KHByb3h5KQorICAgICwgbV9jbGllbnQoY2xpZW50
KQorICAgICwgbV9hbGxvd3NVc2VyU2NhbGluZyhmYWxzZSkKKyAgICAsIG1fbWluaW11bVNjYWxl
KDEpCisgICAgLCBtX21heGltdW1TY2FsZSgxKQorICAgICwgbV9kZXZpY2VQaXhlbFJhdGlvKDEp
CisgICAgLCBtX3N1c3BlbmRDb3VudCgwKQorICAgICwgbV9oYXNTdXNwZW5kZWRDb250ZW50KGZh
bHNlKQorICAgICwgbV9oYWRVc2VySW50ZXJhY3Rpb24oZmFsc2UpCisgICAgLCBtX3ZpZXdwb3J0
U2NhbGUoMSkKK3sKKyAgICAvLyBJbml0aWFsaXppbmcgVmlld3BvcnQgUmF3IEF0dHJpYnV0ZXMg
dG8gYXZvaWQgcmFuZG9tIG5lZ2F0aXZlIHNjYWxlIGZhY3RvcnMKKyAgICAvLyBpZiB0aGVyZSBp
cyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGxheW91dCBhbmQgc2V0dGluZyB0
aGUgdmlld3BvcnQgYXR0cmlidXRlcyBmb3IgdGhlIGZpcnN0IHRpbWUuCisgICAgbV9yYXdBdHRy
aWJ1dGVzLmRldmljZVBpeGVsUmF0aW8gPSBtX2RldmljZVBpeGVsUmF0aW87CisgICAgbV9yYXdB
dHRyaWJ1dGVzLmluaXRpYWxTY2FsZSA9IDE7CisgICAgbV9yYXdBdHRyaWJ1dGVzLm1pbmltdW1T
Y2FsZSA9IG1fbWluaW11bVNjYWxlOworICAgIG1fcmF3QXR0cmlidXRlcy5tYXhpbXVtU2NhbGUg
PSBtX21heGltdW1TY2FsZTsKKyAgICBtX3Jhd0F0dHJpYnV0ZXMudXNlclNjYWxhYmxlID0gbV9h
bGxvd3NVc2VyU2NhbGluZzsKKworICAgIEFTU0VSVChtX2NsaWVudCk7CisgICAgbV9jbGllbnQt
PnNldFZpZXdwb3J0SGFuZGxlcih0aGlzKTsKK30KKworZmxvYXQgVmlld3BvcnRIYW5kbGVyOjpj
c3NTY2FsZUZyb21WaWV3cG9ydChmbG9hdCB2aWV3cG9ydFNjYWxlKSBjb25zdAoreworICAgIHJl
dHVybiB2aWV3cG9ydFNjYWxlIC8gbV9kZXZpY2VQaXhlbFJhdGlvOworfQorCitmbG9hdCBWaWV3
cG9ydEhhbmRsZXI6OnZpZXdwb3J0U2NhbGVGcm9tQ1NTKGZsb2F0IGNzc1NjYWxlKSBjb25zdAor
eworICAgIHJldHVybiBjc3NTY2FsZSAqIG1fZGV2aWNlUGl4ZWxSYXRpbzsKK30KKworZmxvYXQg
Vmlld3BvcnRIYW5kbGVyOjp2aWV3cG9ydENvb3JkRnJvbUNTUyhmbG9hdCB2YWx1ZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gdmFsdWUgKiBtX2RldmljZVBpeGVsUmF0aW87Cit9CisKK0Zsb2F0UmVj
dCBWaWV3cG9ydEhhbmRsZXI6OnZpZXdwb3J0UmVjdEZyb21DU1MoY29uc3QgRmxvYXRSZWN0JiBj
c3NSZWN0KSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoCisgICAgICAgIHZpZXdwb3J0
Q29vcmRGcm9tQ1NTKGNzc1JlY3QueCgpKSwKKyAgICAgICAgdmlld3BvcnRDb29yZEZyb21DU1Mo
Y3NzUmVjdC55KCkpLAorICAgICAgICB2aWV3cG9ydENvb3JkRnJvbUNTUyhjc3NSZWN0LndpZHRo
KCkpLAorICAgICAgICB2aWV3cG9ydENvb3JkRnJvbUNTUyhjc3NSZWN0LmhlaWdodCgpKQorICAg
ICk7Cit9CisKK2Zsb2F0IFZpZXdwb3J0SGFuZGxlcjo6aW5uZXJCb3VuZGVkQ1NTU2NhbGUoZmxv
YXQgY3NzU2NhbGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJvdW5kKG1fbWluaW11bVNjYWxlLCBj
c3NTY2FsZSwgbV9tYXhpbXVtU2NhbGUpOworfQorCitmbG9hdCBWaWV3cG9ydEhhbmRsZXI6Om91
dGVyQm91bmRlZENTU1NjYWxlKGZsb2F0IGNzc1NjYWxlKSBjb25zdAoreworICAgIGlmIChtX2Fs
bG93c1VzZXJTY2FsaW5nKSB7CisgICAgICAgIC8vIEJvdW5kZWQgYnkgWzAuMSwgMTAuMF0gbGlr
ZSB0aGUgdmlld3BvcnQgbWV0YSBjb2RlIGluIFdlYkNvcmUuCisgICAgICAgIGZsb2F0IGhhcmRN
aW4gPSBzdGQ6Om1heDxmbG9hdD4oMC4xLCAwLjUgKiBtX21pbmltdW1TY2FsZSk7CisgICAgICAg
IGZsb2F0IGhhcmRNYXggPSBzdGQ6Om1pbjxmbG9hdD4oMTAsIDIgKiBtX21heGltdW1TY2FsZSk7
CisgICAgICAgIHJldHVybiBib3VuZChoYXJkTWluLCBjc3NTY2FsZSwgaGFyZE1heCk7CisgICAg
fQorICAgIHJldHVybiBpbm5lckJvdW5kZWRDU1NTY2FsZShjc3NTY2FsZSk7Cit9CisKK3ZvaWQg
Vmlld3BvcnRIYW5kbGVyOjpjb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IEludFNpemUmIG5ld1Np
emUpCit7CisgICAgaWYgKG1fdmlld3BvcnRTaXplLmlzRW1wdHkoKSB8fCBuZXdTaXplLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZW50c1NpemUgPSBuZXdTaXplOwor
CisgICAgZmxvYXQgbWluaW11bVNjYWxlID0gV2ViQ29yZTo6Y29tcHV0ZU1pbmltdW1TY2FsZUZh
Y3RvckZvckNvbnRlbnRDb250YWluZWQobV9yYXdBdHRyaWJ1dGVzLCBXZWJDb3JlOjpyb3VuZGVk
SW50U2l6ZShtX3ZpZXdwb3J0U2l6ZSksIG5ld1NpemUpOworCisgICAgaWYgKCFmdXp6eUNvbXBh
cmUobWluaW11bVNjYWxlLCBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlLCAwLjAwMSkpIHsK
KyAgICAgICAgbV9taW5pbXVtU2NhbGUgPSBtaW5pbXVtU2NhbGU7CisKKyAgICAgICAgaWYgKCFt
X2hhZFVzZXJJbnRlcmFjdGlvbiAmJiAhaGFzU3VzcGVuZGVkQ29udGVudCgpKQorICAgICAgICAg
ICAgbV9jbGllbnQtPnNldENvbnRlbnRzU2NhbGUodmlld3BvcnRTY2FsZUZyb21DU1MobWluaW11
bVNjYWxlKSwgdHJ1ZSAvKiBpc0luaXRpYWxTY2FsZSAqLyk7CisKKyAgICAgICAgbV9jbGllbnQt
PnZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQoKTsKKyAgICB9CisKKyAgICBtX2NsaWVudC0+Y29u
dGVudHNTaXplQ2hhbmdlZCgpOworCisgICAgaWYgKCFoYXNTdXNwZW5kZWRDb250ZW50KCkpCisg
ICAgICAgIG1fY2xpZW50LT5zZXRDb250ZW50UmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKCk7Cit9
CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyOjpjb250ZW50UG9zaXRpb25SZXF1ZXN0ZWQoY29uc3Qg
SW50UG9pbnQmIGNzc1Bvc2l0aW9uKQoreworICAgIC8vIElnbm9yZSB0aGUgcmVxdWVzdCBpZiBz
dXNwZW5kZWQuIENhbiBvbmx5IGhhcHBlbiBkdWUgdG8gZGVsYXkgaW4gZXZlbnQgZGVsaXZlcnku
CisgICAgaWYgKG1fc3VzcGVuZENvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJl
Y3QgZW5kUG9zUmFuZ2UgPSBwb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2NhbGUobV92aWV3cG9y
dFNjYWxlKTsKKyAgICBGbG9hdFBvaW50IGVuZFBvc2l0aW9uKGNzc1Bvc2l0aW9uKTsKKyAgICBl
bmRQb3NpdGlvbi5zY2FsZShtX3ZpZXdwb3J0U2NhbGUsIG1fdmlld3BvcnRTY2FsZSk7CisgICAg
ZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLm1pblhNaW5ZQ29ybmVyKCks
IGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5tYXhYTWF4WUNvcm5lcigpKTsKKworICAgIG1fY2xp
ZW50LT5zZXRDb250ZW50UG9zaXRpb24oZW5kUG9zaXRpb24pOworfQorCit2b2lkIFZpZXdwb3J0
SGFuZGxlcjo6dXBkYXRlVmlld3BvcnRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgbmV3U2l6ZSkKK3sK
KyAgICBpZiAobmV3U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmll
d3BvcnRTaXplID0gbmV3U2l6ZTsKKworICAgIC8vIExldCB0aGUgV2ViUHJvY2VzcyBrbm93IGFi
b3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwgc28gdGhhdAorICAgIC8vIGl0IGNhbiByZXNpemUg
dGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkuCisgICAgbV93ZWJQYWdlUHJveHktPnNldFZpZXdwb3J0
U2l6ZShyb3VuZGVkSW50U2l6ZShuZXdTaXplKSk7CisKKyAgICB1cGRhdGVXZWJQcm9jZXNzVmll
d3BvcnRTdGF0ZSgpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlcjo6dXBkYXRlVmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHZp
ZXdwb3J0U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAg
bV92aXNpYmxlQ29udGVudHNSZWN0ID0gdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBtX3ZpZXdw
b3J0U2NhbGUgPSB2aWV3cG9ydFNjYWxlOworICAgIHVwZGF0ZVdlYlByb2Nlc3NWaWV3cG9ydFN0
YXRlKHRyYWplY3RvcnlWZWN0b3IpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlcjo6dXBkYXRl
V2ViUHJvY2Vzc1ZpZXdwb3J0U3RhdGUoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3Rv
cikKK3sKKyAgICBEcmF3aW5nQXJlYVByb3h5KiBjb25zdCBkcmF3aW5nQXJlYSA9IG1fd2ViUGFn
ZVByb3h5LT5kcmF3aW5nQXJlYSgpOworICAgIGlmICghZHJhd2luZ0FyZWEgfHwgbV92aWV3cG9y
dFNpemUuaXNFbXB0eSgpIHx8IG1fY29udGVudHNTaXplLmlzRW1wdHkoKSB8fCBtX3Zpc2libGVD
b250ZW50c1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkcmF3aW5nQXJl
YS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fdmlld3Bv
cnRTY2FsZSwgdHJhamVjdG9yeVZlY3Rvcik7CisKKyAgICBtX2NsaWVudC0+dmlzaWJsZUNvbnRl
bnRzQ2hhbmdlZCgpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlcjo6dmlld3BvcnRBdHRyaWJ1
dGVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmIG5ld0F0dHJpYnV0
ZXMpCit7CisgICAgaWYgKG5ld0F0dHJpYnV0ZXMubGF5b3V0U2l6ZS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fcmF3QXR0cmlidXRlcyA9IG5ld0F0dHJpYnV0ZXM7CisgICAg
V2ViQ29yZTo6cmVzdHJpY3RTY2FsZUZhY3RvclRvSW5pdGlhbFNjYWxlSWZOb3RVc2VyU2NhbGFi
bGUobV9yYXdBdHRyaWJ1dGVzKTsKKworICAgIG1fZGV2aWNlUGl4ZWxSYXRpbyA9IG1fcmF3QXR0
cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvOyAvLyBTaG91bGQgcmV0dXJuIHZhbHVlIGZyb20gdGhl
IHdlYlBhZ2VQcm94eS4KKyAgICBtX2FsbG93c1VzZXJTY2FsaW5nID0gISFtX3Jhd0F0dHJpYnV0
ZXMudXNlclNjYWxhYmxlOworICAgIG1fbWluaW11bVNjYWxlID0gbV9yYXdBdHRyaWJ1dGVzLm1p
bmltdW1TY2FsZTsKKyAgICBtX21heGltdW1TY2FsZSA9IG1fcmF3QXR0cmlidXRlcy5tYXhpbXVt
U2NhbGU7CisKKworICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcHBseSB0aGUgbmV3IGluaXRpYWwgc2Nh
bGUgd2hlbiBkZWZlcnJpbmcgZW5kcy4KKyAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJk
KHRoaXMpOworCisgICAgbV9jbGllbnQtPnZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQoKTsKK30K
Kwordm9pZCBWaWV3cG9ydEhhbmRsZXI6OnN1c3BlbmRQYWdlQ29udGVudCgpCit7CisgICAgaWYg
KG1faGFzU3VzcGVuZGVkQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oYXNTdXNw
ZW5kZWRDb250ZW50ID0gdHJ1ZTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+c3VzcGVuZEFjdGl2ZURP
TU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyOjpyZXN1
bWVQYWdlQ29udGVudCgpCit7CisgICAgaWYgKCFtX3Jhd0F0dHJpYnV0ZXMubGF5b3V0U2l6ZS5p
c0VtcHR5KCkgJiYgbV9yYXdBdHRyaWJ1dGVzLmluaXRpYWxTY2FsZSA+IDApIHsKKyAgICAgICAg
bV9oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgbV9jbGllbnQtPnNldENvbnRl
bnRzU2NhbGUodmlld3BvcnRTY2FsZUZyb21DU1MoaW5uZXJCb3VuZGVkQ1NTU2NhbGUobV9yYXdB
dHRyaWJ1dGVzLmluaXRpYWxTY2FsZSkpLCAvKiBpc0luaXRpYWxTY2FsZSAqLyB0cnVlKTsKKyAg
ICAgICAgbV9yYXdBdHRyaWJ1dGVzLmluaXRpYWxTY2FsZSA9IC0xOyAvLyBNYXJrIHVzZWQuCisg
ICAgfQorCisgICAgbV9jbGllbnQtPnJlcXVlc3RWaWV3cG9ydFN0YXRlVXBkYXRlKCk7CisKKyAg
ICBpZiAoIW1faGFzU3VzcGVuZGVkQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9o
YXNTdXNwZW5kZWRDb250ZW50ID0gZmFsc2U7CisgICAgbV93ZWJQYWdlUHJveHktPnJlc3VtZUFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK0Zsb2F0UmVjdCBWaWV3cG9ydEhh
bmRsZXI6OnBvc2l0aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZShmbG9hdCB2aWV3cG9ydFNjYWxl
KSBjb25zdAoreworICAgIGNvbnN0IEZsb2F0U2l6ZSBjb250ZW50U2l6ZSA9IG1fY29udGVudHNT
aXplICogdmlld3BvcnRTY2FsZTsKKworICAgIGNvbnN0IGZsb2F0IGhvcml6b250YWxSYW5nZSA9
IGNvbnRlbnRTaXplLndpZHRoKCkgLSBtX3ZpZXdwb3J0U2l6ZS53aWR0aCgpOworICAgIGNvbnN0
IGZsb2F0IHZlcnRpY2FsUmFuZ2UgPSBjb250ZW50U2l6ZS5oZWlnaHQoKSAtIG1fdmlld3BvcnRT
aXplLmhlaWdodCgpOworCisgICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCBob3Jpem9udGFsUmFu
Z2UsIHZlcnRpY2FsUmFuZ2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9WaWV3cG9ydEhhbmRsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9WaWV3cG9ydEhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hN2RlZjA1NWUx
ZTcxNWUxYTM1MzFlYjZjOTViNTM0NjViMTEwM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdwb3J0SGFuZGxlci5oCkBAIC0wLDAgKzEsMTQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmphbWluIFBvdWxh
aW4gPGJlbmphbWluQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFZpZXdwb3J0SGFuZGxlcl9oCisj
ZGVmaW5lIFZpZXdwb3J0SGFuZGxlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxv
YXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRQb2ludDsKK2NsYXNzIEludFNpemU7Cit9CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
UGFnZVByb3h5OworY2xhc3MgVmlld3BvcnRIYW5kbGVyOworY2xhc3MgVmlld3BvcnRIYW5kbGVy
Q2xpZW50OworCisvLyBVUERBVEUgREVGRVJSSU5HIChTVVNQRU5EL1JFU1VNRSkKKy8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8KKy8vIFdoZW4gaW50ZXJhY3Rpb24gd2l0
aCB0aGUgY29udGVudCwgZWl0aGVyIGJ5IGFuaW1hdGluZyBvciBieSB0aGUgaGFuZCBvZiB0aGUg
dXNlciwKKy8vIGl0IGlzIGltcG9ydGFudCB0byBlbnN1cmUgc21vb3RoIGFuaW1hdGlvbnMgb2Yg
YXQgbGVhc3QgNjBmcHMgaW4gb3JkZXIgdG8gZ2l2ZSBhCisvLyBnb29kIHVzZXIgZXhwZXJpZW5j
ZS4KKy8vCisvLyBJbiBvcmRlciB0byBkbyB0aGlzIHdlIG5lZWQgdG8gZ2V0IHJpZCBvZiB1bmtu
b3duIGZhY3RvcnMuIFRoZXNlIGluY2x1ZGUgZGV2aWNlCisvLyBzZW5zb3JzIChnZW9sb2NhdGlv
biwgb3JpZW50YXRpb24gdXBkYXRlcyBldGMpLCBDU1MzIGFuaW1hdGlvbnMsIEphdmFTY3JpcHQK
Ky8vIGV4ZWN0dXRpb24sIHN1YiByZXNvdXJjZSBsb2FkcyBldGMuIFdlIGRvIHRoaXMgYnkgZW1p
dHRpbmcgc3VzcGVuZCBhbmQgcmVzdW1lCisvLyBzaWduYWxzLCB3aGljaCBhcmUgdGhlbiBoYW5k
bGVkIGJ5IHRoZSB2aWV3cG9ydCBhbmQgcHJvcGFnYXRlcyB0byB0aGUgcmlnaHQgcGxhY2UuCisv
LworLy8gRm9yIHRoaXMgcmVhc29uIHRoZSBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkIG11
c3QgYmUgdXNlZCB3aGVuIHdlIGludGVyYWN0CisvLyBvciBhbmltYXRlIHRoZSBjb250ZW50Lgor
Ly8KKy8vIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHdoZW4gd2UgdXBkYXRlIGNvbnRlbnQgcHJv
cGVydGllcywgd2UgbWlnaHQgcmVjZWl2ZSBub3RpZnkKKy8vIHNpZ25hbHMgc2VuZCBieSB0aGUg
cGFnZSBpdHNlbGYsIGFuZCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBub3QgYWN0IG9uIHRoZXNl
CisvLyB1bmNvbmRpdGlvbmFsbHkuCisvLworLy8gSWYgc29tZXRoaW5nIHNob3VsZCBvbmx5IGJl
IGV4ZWN1dGVkIGR1cmluZyB1cGRhdGUgZGVmZXJyaW5nLCBpdCBpcyBwb3NzaWJsZSB0bworLy8g
Y2hlY2sgZm9yIHRoYXQgdXNpbmcgQVNTRVJUKGhhc1N1c3BlbmRlZENvbnRlbnQoKSkuCisKK2Ns
YXNzIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgeworcHVibGljOgorICAgIGVudW0gU3VzcGVuZENv
bnRlbnRGbGFnIHsgRGVmZXJVcGRhdGUsIERlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQgfTsK
KyAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKFZpZXdwb3J0SGFuZGxlciosIFN1c3BlbmRDb250
ZW50RmxhZyA9IERlZmVyVXBkYXRlKTsKKyAgICB+Vmlld3BvcnRVcGRhdGVEZWZlcnJlcigpOwor
cHJpdmF0ZToKKyAgICBWaWV3cG9ydEhhbmRsZXIqIGNvbnN0IGhhbmRsZXI7Cit9OworCitjbGFz
cyBWaWV3cG9ydEhhbmRsZXIgeworcHVibGljOgorICAgIFZpZXdwb3J0SGFuZGxlcihXZWJLaXQ6
OldlYlBhZ2VQcm94eSosIFZpZXdwb3J0SGFuZGxlckNsaWVudCopOworICAgIHZpcnR1YWwgflZp
ZXdwb3J0SGFuZGxlcigpIHsgfQorCisgICAgRmxvYXRSZWN0IHBvc2l0aW9uUmFuZ2VGb3JDb250
ZW50QXRTY2FsZShmbG9hdCB2aWV3cG9ydFNjYWxlKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCB2
aWV3cG9ydFJlY3RGcm9tQ1NTKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIGZsb2F0IGNz
c1NjYWxlRnJvbVZpZXdwb3J0KGZsb2F0KSBjb25zdDsKKyAgICBmbG9hdCB2aWV3cG9ydFNjYWxl
RnJvbUNTUyhmbG9hdCkgY29uc3Q7CisgICAgZmxvYXQgdmlld3BvcnRDb29yZEZyb21DU1MoZmxv
YXQpIGNvbnN0OworCisgICAgZmxvYXQgaW5uZXJCb3VuZGVkQ1NTU2NhbGUoZmxvYXQpIGNvbnN0
OworICAgIGZsb2F0IG91dGVyQm91bmRlZENTU1NjYWxlKGZsb2F0KSBjb25zdDsKKworICAgIGJv
b2wgaGFzU3VzcGVuZGVkQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VzcGVuZENvdW50IHx8
IG1faGFzU3VzcGVuZGVkQ29udGVudDsgfQorICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9oYWRVc2VySW50ZXJhY3Rpb247IH0KKyAgICBib29sIGFsbG93c1Vz
ZXJTY2FsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NVc2VyU2NhbGluZzsgfQorCisgICAg
RmxvYXRTaXplIGxheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBtX3Jhd0F0dHJpYnV0ZXMubGF5
b3V0U2l6ZTsgfQorICAgIGZsb2F0IGRldmljZVBpeGVsUmF0aW8oKSBjb25zdCB7IHJldHVybiBt
X2RldmljZVBpeGVsUmF0aW87IH0KKyAgICBmbG9hdCBtaW5pbXVtU2NhbGUoKSBjb25zdCB7IHJl
dHVybiBtX21pbmltdW1TY2FsZTsgfQorICAgIGZsb2F0IG1heGltdW1TY2FsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4aW11bVNjYWxlOyB9CisKKyAgICB2b2lkIHNldEhhZFVzZXJJbnRlcmFjdGlv
bihib29sIGRpZFVzZXJJbnRlcmFjdCkgeyBtX2hhZFVzZXJJbnRlcmFjdGlvbiA9IGRpZFVzZXJJ
bnRlcmFjdDsgfQorCisgICAgLy8gTm90aWZpY2F0aW9ucyB0byB0aGUgV2ViUHJvY2Vzcy4KKyAg
ICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZShjb25zdCBGbG9hdFNpemUmIG5ld1NpemUpOworICAg
IHZvaWQgdXBkYXRlVmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZpc2libGVD
b250ZW50c1JlY3QsIGZsb2F0IHZpZXdwb3J0U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWpl
Y3RvcnlWZWN0b3IgPSBGbG9hdFBvaW50Ojp6ZXJvKCkpOworCisgICAgLy8gTm90aWZpY2F0aW9u
cyBmcm9tIHRoZSBXZWJQcm9jZXNzLgorICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChjb25z
dCBJbnRTaXplJiBuZXdTaXplKTsKKyAgICB2b2lkIHZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQo
Y29uc3QgVmlld3BvcnRBdHRyaWJ1dGVzJik7CisgICAgdm9pZCBjb250ZW50UG9zaXRpb25SZXF1
ZXN0ZWQoY29uc3QgSW50UG9pbnQmIGNzc1Bvc2l0aW9uKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IHN1c3BlbmRQYWdlQ29udGVudCgpOworICAgIHZvaWQgcmVzdW1lUGFnZUNvbnRlbnQoKTsKKyAg
ICB2b2lkIHVwZGF0ZVdlYlByb2Nlc3NWaWV3cG9ydFN0YXRlKGNvbnN0IEZsb2F0UG9pbnQgJnRy
YWplY3RvcnlWZWN0b3IgPSBGbG9hdFBvaW50Ojp6ZXJvKCkpOworCisgICAgV2ViUGFnZVByb3h5
KiBjb25zdCBtX3dlYlBhZ2VQcm94eTsKKyAgICBWaWV3cG9ydEhhbmRsZXJDbGllbnQqIG1fY2xp
ZW50OworCisgICAgVmlld3BvcnRBdHRyaWJ1dGVzIG1fcmF3QXR0cmlidXRlczsKKworICAgIGJv
b2wgbV9hbGxvd3NVc2VyU2NhbGluZzsKKyAgICBmbG9hdCBtX21pbmltdW1TY2FsZTsKKyAgICBm
bG9hdCBtX21heGltdW1TY2FsZTsKKyAgICBmbG9hdCBtX2RldmljZVBpeGVsUmF0aW87CisKKyAg
ICBpbnQgbV9zdXNwZW5kQ291bnQ7CisgICAgYm9vbCBtX2hhc1N1c3BlbmRlZENvbnRlbnQ7Cisg
ICAgYm9vbCBtX2hhZFVzZXJJbnRlcmFjdGlvbjsKKworICAgIEZsb2F0U2l6ZSBtX3ZpZXdwb3J0
U2l6ZTsKKyAgICBGbG9hdFNpemUgbV9jb250ZW50c1NpemU7CisgICAgRmxvYXRSZWN0IG1fdmlz
aWJsZUNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBtX3ZpZXdwb3J0U2NhbGU7IC8vIFNob3VsZCBh
bHdheXMgYmUgY3NzU2NhbGUgKiBkZXZpY2VQaXhlbFJhdGlvLgorCisgICAgZnJpZW5kIGNsYXNz
IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI7Cit9OworCitib29sIGZ1enp5Q29tcGFyZShmbG9hdCwg
ZmxvYXQsIGZsb2F0IGVwc2lsb24pOworRmxvYXRQb2ludCBib3VuZFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQgbWluUG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBG
bG9hdFBvaW50JiBtYXhQb3NpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gVmlld3BvcnRIYW5kbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9WaWV3cG9ydEhhbmRsZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9W
aWV3cG9ydEhhbmRsZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDczNDljMDgyYTAxZDcxNGEyOWMz
ZTVkMDIzN2E5YTM2ZmZkMDc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1ZpZXdwb3J0SGFuZGxlckNsaWVudC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBWaWV3cG9ydEhhbmRsZXJDbGllbnRfaAorI2RlZmluZSBWaWV3
cG9ydEhhbmRsZXJDbGllbnRfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGbG9hdFBv
aW50OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVmlld3BvcnRIYW5kbGVyOwor
CitjbGFzcyBWaWV3cG9ydEhhbmRsZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgflZp
ZXdwb3J0SGFuZGxlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRQ
b3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbkluVmlld0Nvb3JkaW5h
dGVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQgc2NhbGUs
IGJvb2wgaXNJbml0aWFsU2NhbGUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
UmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0
Vmlld3BvcnRTdGF0ZVVwZGF0ZSgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1Np
emVDaGFuZ2VkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aXNpYmxlQ29udGVudHNDaGFuZ2Vk
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKCkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIHNldFZpZXdwb3J0SGFuZGxlcihWaWV3cG9ydEhhbmRsZXIq
KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFZpZXdwb3J0
SGFuZGxlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRHZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRH
ZXN0dXJlUmVjb2duaXplci5jcHAKaW5kZXggOTNiNjQxNWMzOWY5ZGJkMWRmNjMwNTIwNzk2MmE1
MGE5M2Y1NDVmMy4uYjVmNjA1NDVkZDM0ZGIxZTY2NjA5MWRkNDllYzQ1YWQ1ZTM5NmIyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVy
LmNwcApAQCAtNDEsNyArNDEsNyBAQCB2b2lkIFF0R2VzdHVyZVJlY29nbml6ZXI6OnJlc2V0KCkK
ICAgICBtX3N0YXRlID0gTm9HZXN0dXJlOwogfQogCi1RdFZpZXdwb3J0SGFuZGxlciogUXRHZXN0
dXJlUmVjb2duaXplcjo6dmlld3BvcnRIYW5kbGVyKCkKK1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0
KiBRdEdlc3R1cmVSZWNvZ25pemVyOjp2aWV3cG9ydEhhbmRsZXIoKQogewogICAgIHJldHVybiBt
X2V2ZW50SGFuZGxlci0+dmlld3BvcnRIYW5kbGVyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaAppbmRleCA2OGUwMzJmNDc0NGM4
NjE3Zjc1NTdmNjMxMjA5MjhjZjI5NGFkMzcyLi5jYzk2NzU0ZGUwY2JhOGNjZTk2NzY4OGRhNTVi
ZWRlNjc5ZGIwNjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRH
ZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdl
c3R1cmVSZWNvZ25pemVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLWNsYXNzIFF0Vmlld3BvcnRIYW5kbGVyOworY2xhc3MgVmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ7CiBjbGFzcyBRdFdlYlBhZ2VFdmVudEhhbmRsZXI7CiAKIGNsYXNzIFF0R2VzdHVyZVJlY29n
bml6ZXIgewpAQCAtNDYsNyArNDYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEdlc3R1cmVSZWNv
Z25pemVkCiAgICAgfSBtX3N0YXRlOwogCi0gICAgUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0
SGFuZGxlcigpOworICAgIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0ICp2aWV3cG9ydEhhbmRsZXIo
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwCmluZGV4IGJhOWM5MGEz
ZmJiOTg1YjNlZmY5Y2Q0ODkzODQ5ZmQ1NjFlNTE0YmMuLmI2NDEwMTMyN2Q5ZGYwN2VhZmZmNWFl
MjI4YjNlNTU1MjUxMDFhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKQEAgLTI1LDggKzI1LDggQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJRdFBhbkdlc3R1cmVSZWNvZ25pemVyLmgiCiAKLSNp
bmNsdWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFu
ZGxlci5oIgorI2luY2x1ZGUgIlZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQ
aW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwCmluZGV4IDc1ZDRkMjNiMDE4MTlkOWE5ZDcwM2Qx
ZDU1YjRkZGE5ZTlmZWFkZjUuLmQ1YjgxYTk4NzA5MTgyMThhYjdhYzM2ZTQyODBkYjdhM2RmNjkz
YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVy
ZVJlY29nbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNo
R2VzdHVyZVJlY29nbml6ZXIuY3BwCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmgiCiAKLSNpbmNsdWRlICJR
dFZpZXdwb3J0SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFuZGxlci5oIgor
I2luY2x1ZGUgIlZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmgiCiAjaW5jbHVkZSA8UXRDb3JlL1FM
aW5lRj4KIAogbmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNWMzYmZhZjhhNjFjZDdlZWViMDJkNTU3NDk1YTc3NDRlMDJjMzU2MS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzYwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQmVuamFtaW4gUG91bGFp
biA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJRdFZpZXdwb3J0SGFuZGxlci5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNs
dWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKLSNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKLSNp
bmNsdWRlICJxd2Via2l0dGVzdF9wLmgiCi0jaW5jbHVkZSA8UVBvaW50Rj4KLSNpbmNsdWRlIDxR
VHJhbnNmb3JtPgotI2luY2x1ZGUgPFFXaGVlbEV2ZW50PgotI2luY2x1ZGUgPFF0UXVpY2svcXF1
aWNraXRlbS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1zdGF0aWMgY29uc3QgaW50IGtTY2FsZUFuaW1hdGlvbkR1cmF0aW9uTWlsbGlzID0g
MjUwOwotCi0vLyBVUERBVEUgREVGRVJSSU5HIChTVVNQRU5EL1JFU1VNRSkKLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIFdoZW4gaW50ZXJhY3Rpb24gd2l0aCB0
aGUgY29udGVudCwgZWl0aGVyIGJ5IGFuaW1hdGluZyBvciBieSB0aGUgaGFuZCBvZiB0aGUgdXNl
ciwKLS8vIGl0IGlzIGltcG9ydGFudCB0byBlbnN1cmUgc21vb3RoIGFuaW1hdGlvbnMgb2YgYXQg
bGVhc3QgNjBmcHMgaW4gb3JkZXIgdG8gZ2l2ZSBhCi0vLyBnb29kIHVzZXIgZXhwZXJpZW5jZS4K
LS8vCi0vLyBJbiBvcmRlciB0byBkbyB0aGlzIHdlIG5lZWQgdG8gZ2V0IHJpZCBvZiB1bmtub3du
IGZhY3RvcnMuIFRoZXNlIGluY2x1ZGUgZGV2aWNlCi0vLyBzZW5zb3JzIChnZW9sb2NhdGlvbiwg
b3JpZW50YXRpb24gdXBkYXRlcyBldGMpLCBDU1MzIGFuaW1hdGlvbnMsIEphdmFTY3JpcHQKLS8v
IGV4ZWN0dXRpb24sIHN1YiByZXNvdXJjZSBsb2FkcyBldGMuIFdlIGRvIHRoaXMgYnkgZW1pdHRp
bmcgc3VzcGVuZCBhbmQgcmVzdW1lCi0vLyBzaWduYWxzLCB3aGljaCBhcmUgdGhlbiBoYW5kbGVk
IGJ5IHRoZSB2aWV3cG9ydCBhbmQgcHJvcGFnYXRlcyB0byB0aGUgcmlnaHQgcGxhY2UuCi0vLwot
Ly8gRm9yIHRoaXMgcmVhc29uIHRoZSBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkIG11c3Qg
YmUgdXNlZCB3aGVuIHdlIGludGVyYWN0Ci0vLyBvciBhbmltYXRlIHRoZSBjb250ZW50LgotLy8K
LS8vIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHdoZW4gd2UgdXBkYXRlIGNvbnRlbnQgcHJvcGVy
dGllcywgd2UgbWlnaHQgcmVjZWl2ZSBub3RpZnkKLS8vIHNpZ25hbHMgc2VuZCBteSB0aGUgY29u
dGVudCBpdGVtIGl0c2VsZiwgYW5kIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRvIG5vdCBhY3Qgb24K
LS8vIHRoZXNlIHVuY29uZGl0aW9uYWxseS4gQW4gZXhhbXBsZSBvZiB0aGlzIGlzIHRoZSBwaW5j
aCB6b29tLCB3aGljaCBjaGFuZ2VzIHRoZQotLy8gcG9zaXRpb24gYW5kIHdpbGwgdGh1cyByZXN1
bHQgaW4gYSBRUXVpY2tXZWJQYWdlOjpnZW9tZXRyeUNoYW5nZWQoKSBzaWduYWwgZ2V0dGluZwot
Ly8gZW1pdHRlZC4KLS8vCi0vLyBJZiBzb21ldGhpbmcgc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQg
ZHVyaW5nIHVwZGF0ZSBkZWZlcnJpbmcsIGl0IGlzIHBvc3NpYmxlIHRvCi0vLyBjaGVjayBmb3Ig
dGhhdCB1c2luZyBBU1NFUlQobV9zdXNwZW5kQ291bnQpLgotCi1jbGFzcyBWaWV3cG9ydFVwZGF0
ZURlZmVycmVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFN1c3BlbmRDb250ZW50RmxhZyB7IERlZmVy
VXBkYXRlLCBEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50IH07Ci0gICAgVmlld3BvcnRVcGRh
dGVEZWZlcnJlcihRdFZpZXdwb3J0SGFuZGxlciogaGFuZGxlciwgU3VzcGVuZENvbnRlbnRGbGFn
IHN1c3BlbmRDb250ZW50RmxhZyA9IERlZmVyVXBkYXRlKQotICAgICAgICA6IGhhbmRsZXIoaGFu
ZGxlcikKLSAgICB7Ci0gICAgICAgIGhhbmRsZXItPm1fc3VzcGVuZENvdW50Kys7Ci0KLSAgICAg
ICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBzdXNwZW5kIGNvbnRlbnQgZm9yIGltbWVkaWF0ZSB1
cGRhdGVzCi0gICAgICAgIC8vIG9ubHkgZHVyaW5nIGFuaW1hdGlvbnMgb3IgbG9uZ2VyIGdlc3R1
cmVzLgotICAgICAgICBpZiAoc3VzcGVuZENvbnRlbnRGbGFnID09IERlZmVyVXBkYXRlQW5kU3Vz
cGVuZENvbnRlbnQpCi0gICAgICAgICAgICBoYW5kbGVyLT5zdXNwZW5kUGFnZUNvbnRlbnQoKTsK
LSAgICB9Ci0KLSAgICB+Vmlld3BvcnRVcGRhdGVEZWZlcnJlcigpCi0gICAgewotICAgICAgICAv
LyBXZSBhcmUgY2FsbGluZyBzZXRJbml0aWFsU2NhbGVJZk5lZWRlZCgpIGhlcmUgYXMgaXQgcmVx
dWlyZXMgYQotICAgICAgICAvLyBwb3NzaXRpdmUgbV9zdXNwZW5kQ291bnQgZHVlIHRvIHRoZSBh
c3NlcnQgaW4gc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZSgpLgotICAgICAgICBpZiAoaGFuZGxlci0+
bV9zdXNwZW5kQ291bnQgPT0gMSkKLSAgICAgICAgICAgIGhhbmRsZXItPnNldEluaXRpYWxTY2Fs
ZUlmTmVlZGVkKCk7Ci0KLSAgICAgICAgaWYgKC0tKGhhbmRsZXItPm1fc3VzcGVuZENvdW50KSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBoYW5kbGVyLT5yZXN1bWVQYWdlQ29udGVu
dCgpOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZp
ZXdwb3J0IHdpbGwgYmUgcmVxdWVzdGVkLgotICAgICAgICBoYW5kbGVyLT5pbmZvcm1WaXNpYmxl
Q29udGVudENoYW5nZShRUG9pbnRGKCkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBRdFZpZXdw
b3J0SGFuZGxlciogY29uc3QgaGFuZGxlcjsKLX07Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6
OnN1c3BlbmRQYWdlQ29udGVudCgpCi17Ci0gICAgaWYgKG1faGFzU3VzcGVuZGVkQ29udGVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9oYXNTdXNwZW5kZWRDb250ZW50ID0gdHJ1ZTsKLSAg
ICBtX3dlYlBhZ2VQcm94eS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7
Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnJlc3VtZVBhZ2VDb250ZW50KCkKLXsKLSAg
ICBpZiAoIW1faGFzU3VzcGVuZGVkQ29udGVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faGFz
U3VzcGVuZGVkQ29udGVudCA9IGZhbHNlOwotICAgIG1fd2ViUGFnZVByb3h5LT5yZXN1bWVBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOwotfQotCi0vLyBBIGZsb2F0aW5nIHBvaW50IGNv
bXBhcmUgd2l0aCBhYnNvbHV0ZSBlcnJvci4KLXN0YXRpYyBpbmxpbmUgYm9vbCBmdXp6eUNvbXBh
cmUocXJlYWwgYSwgcXJlYWwgYiwgcXJlYWwgZXBzaWxvbikKLXsKLSAgICByZXR1cm4gcUFicyhh
IC0gYikgPCBlcHNpbG9uOwotfQotCi1pbmxpbmUgcXJlYWwgUXRWaWV3cG9ydEhhbmRsZXI6OmNz
c1NjYWxlRnJvbUl0ZW0ocXJlYWwgaXRlbVNjYWxlKSBjb25zdAotewotICAgIHJldHVybiBpdGVt
U2NhbGUgLyBtX2RldmljZVBpeGVsUmF0aW87Ci19Ci0KLWlubGluZSBxcmVhbCBRdFZpZXdwb3J0
SGFuZGxlcjo6aXRlbVNjYWxlRnJvbUNTUyhxcmVhbCBjc3NTY2FsZSkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gY3NzU2NhbGUgKiBtX2RldmljZVBpeGVsUmF0aW87Ci19Ci0KLWlubGluZSBxcmVhbCBR
dFZpZXdwb3J0SGFuZGxlcjo6aXRlbUNvb3JkRnJvbUNTUyhxcmVhbCB2YWx1ZSkgY29uc3QKLXsK
LSAgICByZXR1cm4gdmFsdWUgKiBtX2RldmljZVBpeGVsUmF0aW87Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgUVBvaW50RiBib3VuZFBvc2l0aW9uKGNvbnN0IFFQb2ludEYgbWluUG9zaXRpb24sIGNvbnN0
IFFQb2ludEYmIHBvc2l0aW9uLCBjb25zdCBRUG9pbnRGJiBtYXhQb3NpdGlvbikKLXsKLSAgICBy
ZXR1cm4gUVBvaW50RihxQm91bmQobWluUG9zaXRpb24ueCgpLCBwb3NpdGlvbi54KCksIG1heFBv
c2l0aW9uLngoKSksCi0gICAgICAgICAgICAgICAgICAgcUJvdW5kKG1pblBvc2l0aW9uLnkoKSwg
cG9zaXRpb24ueSgpLCBtYXhQb3NpdGlvbi55KCkpKTsKLX0KLQotaW5saW5lIFFSZWN0RiBRdFZp
ZXdwb3J0SGFuZGxlcjo6aXRlbVJlY3RGcm9tQ1NTKGNvbnN0IFFSZWN0RiYgY3NzUmVjdCkgY29u
c3QKLXsKLSAgICBRUmVjdEYgaXRlbVJlY3Q7Ci0KLSAgICBpdGVtUmVjdC5zZXRYKGl0ZW1Db29y
ZEZyb21DU1MoY3NzUmVjdC54KCkpKTsKLSAgICBpdGVtUmVjdC5zZXRZKGl0ZW1Db29yZEZyb21D
U1MoY3NzUmVjdC55KCkpKTsKLSAgICBpdGVtUmVjdC5zZXRXaWR0aChpdGVtQ29vcmRGcm9tQ1NT
KGNzc1JlY3Qud2lkdGgoKSkpOwotICAgIGl0ZW1SZWN0LnNldEhlaWdodChpdGVtQ29vcmRGcm9t
Q1NTKGNzc1JlY3QuaGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBpdGVtUmVjdDsKLX0KLQotUXRW
aWV3cG9ydEhhbmRsZXI6OlF0Vmlld3BvcnRIYW5kbGVyKFdlYktpdDo6V2ViUGFnZVByb3h5KiBw
cm94eSwgUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVtLCBRUXVpY2tXZWJQYWdlKiBwYWdlSXRl
bSkKLSAgICA6IG1fd2ViUGFnZVByb3h5KHByb3h5KQotICAgICwgbV92aWV3cG9ydEl0ZW0odmll
d3BvcnRJdGVtKQotICAgICwgbV9wYWdlSXRlbShwYWdlSXRlbSkKLSAgICAsIG1fYWxsb3dzVXNl
clNjYWxpbmcoZmFsc2UpCi0gICAgLCBtX21pbmltdW1TY2FsZSgxKQotICAgICwgbV9tYXhpbXVt
U2NhbGUoMSkKLSAgICAsIG1fZGV2aWNlUGl4ZWxSYXRpbygxKQotICAgICwgbV9zdXNwZW5kQ291
bnQoMCkKLSAgICAsIG1faGFzU3VzcGVuZGVkQ29udGVudChmYWxzZSkKLSAgICAsIG1faGFkVXNl
ckludGVyYWN0aW9uKGZhbHNlKQotICAgICwgbV9zY2FsZUFuaW1hdGlvbihuZXcgU2NhbGVBbmlt
YXRpb24odGhpcykpCi0gICAgLCBtX3BpbmNoU3RhcnRTY2FsZSgtMSkKLSAgICAsIG1fbGFzdENv
bW1pdHRlZFNjYWxlKC0xKQotICAgICwgbV96b29tT3V0U2NhbGUoMC4wKQotewotICAgIG1fc2Nh
bGVBbmltYXRpb24tPnNldER1cmF0aW9uKGtTY2FsZUFuaW1hdGlvbkR1cmF0aW9uTWlsbGlzKTsK
LSAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRFYXNpbmdDdXJ2ZShRRWFzaW5nQ3VydmU6Ok91dEN1
YmljKTsKLQotICAgIC8vIEluaXRpYWxpemluZyBWaWV3cG9ydCBSYXcgQXR0cmlidXRlcyB0byBh
dm9pZCByYW5kb20gbmVnYXRpdmUgc2NhbGUgZmFjdG9ycwotICAgIC8vIGlmIHRoZXJlIGlzIGEg
cmFjZSBjb25kaXRpb24gYmV0d2VlbiB0aGUgZmlyc3QgbGF5b3V0IGFuZCBzZXR0aW5nIHRoZSB2
aWV3cG9ydCBhdHRyaWJ1dGVzIGZvciB0aGUgZmlyc3QgdGltZS4KLSAgICBtX3Jhd0F0dHJpYnV0
ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9IG1fZGV2aWNlUGl4ZWxSYXRpbzsKLSAgICBtX3Jhd0F0dHJp
YnV0ZXMuaW5pdGlhbFNjYWxlID0gMTsKLSAgICBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxl
ID0gbV9taW5pbXVtU2NhbGU7Ci0gICAgbV9yYXdBdHRyaWJ1dGVzLm1heGltdW1TY2FsZSA9IG1f
bWF4aW11bVNjYWxlOwotICAgIG1fcmF3QXR0cmlidXRlcy51c2VyU2NhbGFibGUgPSBtX2FsbG93
c1VzZXJTY2FsaW5nOwotCi0gICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKG1vdmVt
ZW50U3RhcnRlZCgpKSwgU0xPVChmbGlja01vdmVTdGFydGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVj
dGlvbik7Ci0gICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKG1vdmVtZW50RW5kZWQo
KSksIFNMT1QoZmxpY2tNb3ZlRW5kZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLQotICAg
IGNvbm5lY3QobV9zY2FsZUFuaW1hdGlvbiwgU0lHTkFMKHZhbHVlQ2hhbmdlZChRVmFyaWFudCkp
LAotICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdlZChRVmFyaWFudCkp
LCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci0gICAgY29ubmVjdChtX3NjYWxlQW5pbWF0aW9uLCBT
SUdOQUwoc3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFu
aW1hdGlvbjo6U3RhdGUpKSwKLSAgICAgICAgICAgIFNMT1Qoc2NhbGVBbmltYXRpb25TdGF0ZUNo
YW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0
ZSkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci19Ci0KLVF0Vmlld3BvcnRIYW5kbGVyOjp+UXRW
aWV3cG9ydEhhbmRsZXIoKQotewotfQotCi1xcmVhbCBRdFZpZXdwb3J0SGFuZGxlcjo6aW5uZXJC
b3VuZGVkQ1NTU2NhbGUocXJlYWwgY3NzU2NhbGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHFCb3Vu
ZChtX21pbmltdW1TY2FsZSwgY3NzU2NhbGUsIG1fbWF4aW11bVNjYWxlKTsKLX0KLQotcXJlYWwg
UXRWaWV3cG9ydEhhbmRsZXI6Om91dGVyQm91bmRlZENTU1NjYWxlKHFyZWFsIGNzc1NjYWxlKSBj
b25zdAotewotICAgIGlmIChtX2FsbG93c1VzZXJTY2FsaW5nKSB7Ci0gICAgICAgIC8vIEJvdW5k
ZWQgYnkgWzAuMSwgMTAuMF0gbGlrZSB0aGUgdmlld3BvcnQgbWV0YSBjb2RlIGluIFdlYkNvcmUu
Ci0gICAgICAgIHFyZWFsIGhhcmRNaW4gPSBxTWF4PHFyZWFsPigwLjEsIHFyZWFsKDAuNSkgKiBt
X21pbmltdW1TY2FsZSk7Ci0gICAgICAgIHFyZWFsIGhhcmRNYXggPSBxTWluPHFyZWFsPigxMCwg
cXJlYWwoMi4wKSAqIG1fbWF4aW11bVNjYWxlKTsKLSAgICAgICAgcmV0dXJuIHFCb3VuZChoYXJk
TWluLCBjc3NTY2FsZSwgaGFyZE1heCk7Ci0gICAgfQotICAgIHJldHVybiBpbm5lckJvdW5kZWRD
U1NTY2FsZShjc3NTY2FsZSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNldEluaXRp
YWxTY2FsZUlmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9yYXdBdHRyaWJ1dGVzLmxheW91dFNpemUu
aXNFbXB0eSgpIHx8IG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUgPCAwKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3pvb21PdXRTY2FsZSA9IDAuMDsKLSAgICBtX3NjYWxlU3RhY2suY2xl
YXIoKTsKLQotICAgIG1faGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7Ci0KLSAgICAvLyBXZSBt
dXN0IG5vdCBhbmltYXRlIGhlcmUgYXMgdGhlIG5ldyBjb250ZW50cyBzaXplIG1pZ2h0IGJlIHZl
cnkgZGlmZmVyZW50Ci0gICAgLy8gdGhhbiB0aGUgY3VycmVudCBvbmUuCi0gICAgc2V0UGFnZUl0
ZW1SZWN0VmlzaWJsZShpbml0aWFsUmVjdCgpKTsKLQotICAgIG1fcmF3QXR0cmlidXRlcy5pbml0
aWFsU2NhbGUgPSAtMTsgLy8gTWFyayB1c2VkLgotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVy
Ojp2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmli
dXRlcyYgbmV3QXR0cmlidXRlcykKLXsKLSAgICBpZiAobmV3QXR0cmlidXRlcy5sYXlvdXRTaXpl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yYXdBdHRyaWJ1dGVzID0gbmV3
QXR0cmlidXRlczsKLSAgICBXZWJDb3JlOjpyZXN0cmljdFNjYWxlRmFjdG9yVG9Jbml0aWFsU2Nh
bGVJZk5vdFVzZXJTY2FsYWJsZShtX3Jhd0F0dHJpYnV0ZXMpOwotCi0gICAgaWYgKCFxRnV6enlD
b21wYXJlKG1fZGV2aWNlUGl4ZWxSYXRpbywgc3RhdGljX2Nhc3Q8cXJlYWw+KG1fcmF3QXR0cmli
dXRlcy5kZXZpY2VQaXhlbFJhdGlvKSkpIHsKLSAgICAgICAgbV9kZXZpY2VQaXhlbFJhdGlvID0g
bV9yYXdBdHRyaWJ1dGVzLmRldmljZVBpeGVsUmF0aW87IC8vIFNob3VsZCByZXR1cm4gdmFsdWUg
ZnJvbSB0aGUgd2ViUGFnZVByb3h5LgotICAgICAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBl
cmltZW50YWwoKS0+dGVzdCgpLT5kZXZpY2VQaXhlbFJhdGlvQ2hhbmdlZCgpOwotICAgIH0KLQot
ICAgIG1fYWxsb3dzVXNlclNjYWxpbmcgPSAhIW1fcmF3QXR0cmlidXRlcy51c2VyU2NhbGFibGU7
Ci0gICAgbV9taW5pbXVtU2NhbGUgPSBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlOwotICAg
IG1fbWF4aW11bVNjYWxlID0gbV9yYXdBdHRyaWJ1dGVzLm1heGltdW1TY2FsZTsKLQotICAgIC8v
IE1ha2Ugc3VyZSB3ZSBhcHBseSB0aGUgbmV3IGluaXRpYWwgc2NhbGUgd2hlbiBkZWZlcnJpbmcg
ZW5kcy4KLSAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKHRoaXMpOwotCi0gICAgZW1p
dCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+dmlld3BvcnRDaGFuZ2Vk
KCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhZ2VDb250ZW50c1NpemVDaGFuZ2Vk
KGNvbnN0IFFTaXplJiBuZXdTaXplLCBjb25zdCBRU2l6ZSYgdmlld3BvcnRTaXplKQotewotICAg
IGlmICh2aWV3cG9ydFNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9h
dCBtaW5pbXVtU2NhbGUgPSBXZWJDb3JlOjpjb21wdXRlTWluaW11bVNjYWxlRmFjdG9yRm9yQ29u
dGVudENvbnRhaW5lZChtX3Jhd0F0dHJpYnV0ZXMsIHZpZXdwb3J0U2l6ZSwgbmV3U2l6ZSk7Ci0K
LSAgICBpZiAoIXFGdXp6eUNvbXBhcmUobWluaW11bVNjYWxlLCBtX3Jhd0F0dHJpYnV0ZXMubWlu
aW11bVNjYWxlKSkgewotICAgICAgICBtX21pbmltdW1TY2FsZSA9IG1pbmltdW1TY2FsZTsKLSAg
ICAgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+dmlld3Bv
cnRDaGFuZ2VkKCk7Ci0KLSAgICAgICAgaWYgKCFtX2hhZFVzZXJJbnRlcmFjdGlvbiAmJiAhbV9o
YXNTdXNwZW5kZWRDb250ZW50KSB7Ci0gICAgICAgICAgICAvLyBFbWl0cyBjb250ZW50c1NjYWxl
Q2hhbmdlZCgpOwotICAgICAgICAgICAgc2V0Q1NTU2NhbGUobWluaW11bVNjYWxlKTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIEVtaXQgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHNvIHRoYXQg
aXQgY2FuIGJlIHZlcmlmaWVkIHRoYXQKLSAgICAvLyB3ZSBkaWRuJ3QgZG8gc2NhbGUgYWRqdXN0
bWVudC4KLSAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT5j
b250ZW50c1NjYWxlQ29tbWl0dGVkKCk7Ci0KLSAgICBpZiAoIW1faGFzU3VzcGVuZGVkQ29udGVu
dCkgewotICAgICAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKHRoaXMpOwotICAgICAg
ICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKG5lYXJlc3RWYWxpZEJvdW5kcygpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNldFBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3Qg
UVJlY3RGJiBpdGVtUmVjdCkKLXsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fc3VzcGVuZENv
dW50LAotICAgICAgICAic2V0UGFnZUl0ZW1SZWN0VmlzaWJsZSBoYXMgdG8gYmUgZ3VhcmRlZCB1
c2luZyBhIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIuIik7Ci0KLSAgICBpZiAoaXRlbVJlY3QuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBxcmVhbCBpdGVtU2NhbGUgPSBtX3ZpZXdw
b3J0SXRlbS0+d2lkdGgoKSAvIGl0ZW1SZWN0LndpZHRoKCk7Ci0KLSAgICBtX3BhZ2VJdGVtLT5z
ZXRDb250ZW50c1NjYWxlKGl0ZW1TY2FsZSk7Ci0KLSAgICAvLyBUbyBhbmltYXRlIHRoZSBwb3Np
dGlvbiB0b2dldGhlciB3aXRoIHRoZSBzY2FsZSB3ZSBtdWx0aXBseSB0aGUgcG9zaXRpb24gd2l0
aCB0aGUgY3VycmVudCBzY2FsZQotICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIHBhZ2UgcG9zaXRp
b24gKGRpc3BsYWNlbWVudCBvbiB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVtIGJlY2F1c2Ugb2Yg
YWRkaXRpb25hbCBpdGVtcykuCi0gICAgUVBvaW50RiBuZXdQb3NpdGlvbihtX3BhZ2VJdGVtLT5w
b3MoKSArIChpdGVtUmVjdC50b3BMZWZ0KCkgKiBpdGVtU2NhbGUpKTsKLQotICAgIG1fdmlld3Bv
cnRJdGVtLT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0
SGFuZGxlcjo6YW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBpdGVtUmVj
dCkKLXsKLSAgICBBU1NFUlQobV9zY2FsZUFuaW1hdGlvbi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RB
bmltYXRpb246OlN0b3BwZWQpOwotCi0gICAgQVNTRVJUKCFzY3JvbGxBbmltYXRpb25BY3RpdmUo
KSk7Ci0gICAgaWYgKHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBRUmVjdEYgY3VycmVudFBhZ2VJdGVtUmVjdFZpc2libGUgPSBtX3ZpZXdwb3J0SXRlbS0+
bWFwUmVjdFRvV2ViQ29udGVudChtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkpOwotICAg
IGlmIChpdGVtUmVjdCA9PSBjdXJyZW50UGFnZUl0ZW1SZWN0VmlzaWJsZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0U3RhcnRWYWx1ZShjdXJyZW50UGFnZUl0
ZW1SZWN0VmlzaWJsZSk7Ci0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0RW5kVmFsdWUoaXRlbVJl
Y3QpOwotCi0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c3RhcnQoKTsKLX0KLQotdm9pZCBRdFZpZXdw
b3J0SGFuZGxlcjo6ZmxpY2tNb3ZlU3RhcnRlZCgpCi17Ci0gICAgUV9BU1NFUlQobV92aWV3cG9y
dEl0ZW0tPmlzTW92aW5nKCkpOwotICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIgPSBhZG9wdFB0
cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVy
OjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Ci0KLSAgICBtX2xhc3RTY3JvbGxQb3Np
dGlvbiA9IG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCk7Ci0gICAgY29ubmVjdChtX3ZpZXdw
b3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwgU0xPVChwYWdlSXRlbVBvc2l0aW9u
Q2hhbmdlZCgpKSk7Ci0gICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRZ
Q2hhbmdlZCgpKSwgU0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7Ci19Ci0KLXZvaWQg
UXRWaWV3cG9ydEhhbmRsZXI6OmZsaWNrTW92ZUVuZGVkKCkKLXsKLSAgICBRX0FTU0VSVCghbV92
aWV3cG9ydEl0ZW0tPmlzTW92aW5nKCkpOwotICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBv
biB0aGUgZW5kIG9mIHRoZSBwYW4gb3IgcGFuIGtpbmV0aWMgYW5pbWF0aW9uLgotICAgIG1fc2Ny
b2xsVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKLQotICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0g
UVBvaW50RigpOwotICAgIGRpc2Nvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50
WENoYW5nZWQoKSksIHRoaXMsIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOwotICAg
IGRpc2Nvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50WUNoYW5nZWQoKSksIHRo
aXMsIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOwotfQotCi12b2lkIFF0Vmlld3Bv
cnRIYW5kbGVyOjpwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpCi17Ci0gICAgUVBvaW50RiBuZXdQ
b3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCk7Ci0KLSAgICBpbmZvcm1WaXNp
YmxlQ29udGVudENoYW5nZShtX2xhc3RTY3JvbGxQb3NpdGlvbiAtIG5ld1Bvc2l0aW9uKTsKLQot
ICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247Ci19Ci0KLXZvaWQgUXRWaWV3
cG9ydEhhbmRsZXI6OnBhZ2VDb250ZW50UG9zaXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBj
c3NQb3NpdGlvbikKLXsKLSAgICAvLyBJZ25vcmUgdGhlIHJlcXVlc3QgaWYgc3VzcGVuZGVkLiBD
YW4gb25seSBoYXBwZW4gZHVlIHRvIGRlbGF5IGluIGV2ZW50IGRlbGl2ZXJ5LgotICAgIGlmICht
X3N1c3BlbmRDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcXJlYWwgZW5kSXRlbVNjYWxl
ID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOyAvLyBTdGF5IGF0IHNhbWUgc2NhbGUuCi0K
LSAgICBRUmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2Nh
bGUoZW5kSXRlbVNjYWxlKTsKLSAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlv
bihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGNzc1Bvc2l0aW9uICogZW5kSXRlbVNjYWxlLCBlbmRQ
b3NSYW5nZS5ib3R0b21SaWdodCgpKTsKLQotICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJl
Y3QoZW5kUG9zaXRpb24gLyBlbmRJdGVtU2NhbGUsIG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1Jl
Y3QoKS5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOwotCi0gICAgVmlld3BvcnRVcGRhdGVEZWZlcnJl
ciBndWFyZCh0aGlzKTsKLSAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250
ZW50UmVjdCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNjYWxlQW5pbWF0aW9uU3Rh
dGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFBYnN0cmFjdEFu
aW1hdGlvbjo6U3RhdGUgLypvbGRTdGF0ZSovKQotewotICAgIHN3aXRjaCAobmV3U3RhdGUpIHsK
LSAgICBjYXNlIFFBYnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZzoKLSAgICAgICAgbV92aWV3cG9y
dEl0ZW0tPmNhbmNlbEZsaWNrKCk7Ci0gICAgICAgIEFTU0VSVCghbV9hbmltYXRpb25VcGRhdGVE
ZWZlcnJlcik7Ci0gICAgICAgIG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIgPSBhZG9wdFB0cihu
ZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpE
ZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
UUFic3RyYWN0QW5pbWF0aW9uOjpTdG9wcGVkOgotICAgICAgICBtX2FuaW1hdGlvblVwZGF0ZURl
ZmVycmVyLmNsZWFyKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6c2NhbGVBbmltYXRpb25W
YWx1ZUNoYW5nZWQoUVZhcmlhbnQgdmFsdWUpCi17Ci0gICAgLy8gUmVzZXR0aW5nIHRoZSBlbmQg
dmFsdWUsIHRoZSBlYXNpbmcgY3VydmUgb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBzY2FsZSBhbmlt
YXRpb24KLSAgICAvLyB0cmlnZ2VycyBhIHJlY2FsY3VsYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBp
bnRlcnZhbC4gVGhpcyBtaWdodCBjaGFuZ2UgdGhlIGN1cnJlbnQKLSAgICAvLyB2YWx1ZSBvZiB0
aGUgYW5pbWF0ZWQgcHJvcGVydHkuCi0gICAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgYWN0IG9uIGFu
aW1hdGlvbiB2YWx1ZSBjaGFuZ2VzIGlmIHRoZSBhbmltYXRpb24gaXMgYWN0aXZlLgotICAgIGlm
ICghc2NhbGVBbmltYXRpb25BY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0UGFn
ZUl0ZW1SZWN0VmlzaWJsZSh2YWx1ZS50b1JlY3RGKCkpOwotfQotCi12b2lkIFF0Vmlld3BvcnRI
YW5kbGVyOjp0b3VjaEJlZ2luKCkKLXsKLSAgICBtX2hhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7
Ci0KLSAgICAvLyBQcmV2ZW50cyByZXN1bWluZyB0aGUgcGFnZSBiZXR3ZWVuIHRoZSB1c2VyJ3Mg
ZmxpY2tzIG9mIHRoZSBwYWdlIHdoaWxlIHRoZSBhbmltYXRpb24gaXMgcnVubmluZy4KLSAgICBp
ZiAoc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCi0gICAgICAgIG1fdG91Y2hVcGRhdGVEZWZlcnJl
ciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKHRoaXMsIFZpZXdwb3J0VXBk
YXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKLX0KLQotdm9pZCBR
dFZpZXdwb3J0SGFuZGxlcjo6dG91Y2hFbmQoKQotewotICAgIG1fdG91Y2hVcGRhdGVEZWZlcnJl
ci5jbGVhcigpOwotfQotCi1RUmVjdEYgUXRWaWV3cG9ydEhhbmRsZXI6OmNvbXB1dGVQb3NSYW5n
ZUZvclBhZ2VJdGVtQXRTY2FsZShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
UVNpemVGIGNvbnRlbnRJdGVtU2l6ZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2l6ZSgpICogaXRl
bVNjYWxlOwotICAgIGNvbnN0IFFTaXplRiB2aWV3cG9ydEl0ZW1TaXplID0gbV92aWV3cG9ydEl0
ZW0tPmJvdW5kaW5nUmVjdCgpLnNpemUoKTsKLQotICAgIGNvbnN0IHFyZWFsIGhvcml6b250YWxS
YW5nZSA9IGNvbnRlbnRJdGVtU2l6ZS53aWR0aCgpIC0gdmlld3BvcnRJdGVtU2l6ZS53aWR0aCgp
OwotICAgIGNvbnN0IHFyZWFsIHZlcnRpY2FsUmFuZ2UgPSBjb250ZW50SXRlbVNpemUuaGVpZ2h0
KCkgLSB2aWV3cG9ydEl0ZW1TaXplLmhlaWdodCgpOwotCi0gICAgcmV0dXJuIFFSZWN0RihRUG9p
bnRGKDAsIDApLCBRU2l6ZUYoaG9yaXpvbnRhbFJhbmdlLCB2ZXJ0aWNhbFJhbmdlKSk7Ci19Ci0K
LXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OmZvY3VzRWRpdGFibGVBcmVhKGNvbnN0IFFSZWN0RiYg
Y2FyZXRBcmVhLCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpCi17Ci0gICAgLy8gVGhpcyBjYW4g
b25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgotICAgIEFTU0VS
VChtX2hhZFVzZXJJbnRlcmFjdGlvbik7Ci0KLSAgICBRUmVjdEYgZW5kQXJlYSA9IGl0ZW1SZWN0
RnJvbUNTUyh0YXJnZXRBcmVhKTsKLQotICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IGl0ZW1TY2Fs
ZUZyb21DU1MoaW5uZXJCb3VuZGVkQ1NTU2NhbGUoMi4wKSk7Ci0gICAgY29uc3QgUVJlY3RGIHZp
ZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsKLQotICAgIHFyZWFs
IHg7Ci0gICAgY29uc3QgcXJlYWwgYm9yZGVyT2Zmc2V0ID0gMTA7Ci0gICAgaWYgKChlbmRBcmVh
LndpZHRoKCkgKyBib3JkZXJPZmZzZXQpICogZW5kSXRlbVNjYWxlIDw9IHZpZXdwb3J0UmVjdC53
aWR0aCgpKSB7Ci0gICAgICAgIC8vIENlbnRlciB0aGUgaW5wdXQgZmllbGQgaW4gdGhlIG1pZGRs
ZSBvZiB0aGUgdmlldywgaWYgaXQgaXMgc21hbGxlciB0aGFuCi0gICAgICAgIC8vIHRoZSB2aWV3
IGF0IHRoZSBzY2FsZSB0YXJnZXQuCi0gICAgICAgIHggPSB2aWV3cG9ydFJlY3QuY2VudGVyKCku
eCgpIC0gZW5kQXJlYS53aWR0aCgpICogZW5kSXRlbVNjYWxlIC8gMi4wOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBjYXJldCBhbHdheXMgaGFzIGJvcmRlck9mZnNl
dCBjb250ZW50cyBwaXhlbHMgdG8gdGhlIHJpZ2h0Ci0gICAgICAgIC8vIG9mIGl0LCBhbmQgc2Vj
b25kYXJpbHkgKGlmIHBvc3NpYmxlKSwgdGhhdCB0aGUgYXJlYSBoYXMgYm9yZGVyT2Zmc2V0Ci0g
ICAgICAgIC8vIGNvbnRlbnRzIHBpeGVscyB0byB0aGUgbGVmdCBvZiBpdC4KLSAgICAgICAgcXJl
YWwgY2FyZXRPZmZzZXQgPSBpdGVtQ29vcmRGcm9tQ1NTKGNhcmV0QXJlYS54KCkpIC0gZW5kQXJl
YS54KCk7Ci0gICAgICAgIHggPSBxTWluKHZpZXdwb3J0UmVjdC53aWR0aCgpIC0gKGNhcmV0T2Zm
c2V0ICsgYm9yZGVyT2Zmc2V0KSAqIGVuZEl0ZW1TY2FsZSwgYm9yZGVyT2Zmc2V0ICogZW5kSXRl
bVNjYWxlKTsKLSAgICB9Ci0KLSAgICBjb25zdCBRUG9pbnRGIGhvdHNwb3QgPSBRUG9pbnRGKGVu
ZEFyZWEueCgpLCBlbmRBcmVhLmNlbnRlcigpLnkoKSk7Ci0gICAgY29uc3QgUVBvaW50RiB2aWV3
cG9ydEhvdHNwb3QgPSBRUG9pbnRGKHgsIC8qIEZJWE1FOiB2aXNpYmxlQ2VudGVyICovIHZpZXdw
b3J0UmVjdC5jZW50ZXIoKS55KCkpOwotCi0gICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGhvdHNw
b3QgKiBlbmRJdGVtU2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Q7Ci0gICAgUVJlY3RGIGVuZFBvc1Jh
bmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0K
LSAgICBlbmRQb3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBl
bmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7Ci0KLSAgICBRUmVjdEYgZW5k
VmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJl
Y3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKLQotICAgIGFuaW1hdGVQYWdlSXRlbVJlY3RWaXNp
YmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6
Onpvb21Ub0FyZWFHZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29uc3Qg
UVJlY3RGJiB0YXJnZXRBcmVhKQotewotICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEg
cmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KLSAgICBBU1NFUlQobV9oYWRVc2VySW50ZXJh
Y3Rpb24pOwotCi0gICAgaWYgKCF0YXJnZXRBcmVhLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1fc3VzcGVuZENvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25z
dCBpbnQgbWFyZ2luID0gMTA7IC8vIFdlIHdhbnQgYXQgbGVhc3QgYSBsaXR0bGUgYml0IG9mIG1h
cmdpbi4KLSAgICBRUmVjdEYgZW5kQXJlYSA9IGl0ZW1SZWN0RnJvbUNTUyh0YXJnZXRBcmVhLmFk
anVzdGVkKC1tYXJnaW4sIC1tYXJnaW4sIG1hcmdpbiwgbWFyZ2luKSk7Ci0KLSAgICBjb25zdCBR
UmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpOwotCi0g
ICAgcXJlYWwgdGFyZ2V0Q1NTU2NhbGUgPSB2aWV3cG9ydFJlY3Quc2l6ZSgpLndpZHRoKCkgLyBl
bmRBcmVhLnNpemUoKS53aWR0aCgpOwotICAgIHFyZWFsIGVuZENTU1NjYWxlID0gaW5uZXJCb3Vu
ZGVkQ1NTU2NhbGUocU1pbih0YXJnZXRDU1NTY2FsZSwgcXJlYWwoMi41KSkpOwotICAgIHFyZWFs
IGVuZEl0ZW1TY2FsZSA9IGl0ZW1TY2FsZUZyb21DU1MoZW5kQ1NTU2NhbGUpOwotICAgIHFyZWFs
IGN1cnJlbnRTY2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsKLQotICAgIC8vIFdl
IHdhbnQgdG8gZW5kIHVwIHdpdGggdGhlIHRhcmdldCBhcmVhIGZpbGxpbmcgdGhlIHdob2xlIHdp
ZHRoIG9mIHRoZSB2aWV3cG9ydCAoaWYgcG9zc2libGUpLAotICAgIC8vIGFuZCBjZW50cmFsaXpl
ZCB2ZXJ0aWNhbGx5IHdoZXJlIHRoZSB1c2VyIHJlcXVlc3RlZCB6b29tLiBUaHVzIG91ciBob3Rz
cG90IGlzIHRoZSBjZW50ZXIgb2YKLSAgICAvLyB0aGUgdGFyZ2V0QXJlYSB4LXdpc2UgYW5kIHRo
ZSByZXF1ZXN0ZWQgem9vbSBwb3NpdGlvbiwgeS13aXNlLgotICAgIGNvbnN0IFFQb2ludEYgaG90
c3BvdCA9IFFQb2ludEYoZW5kQXJlYS5jZW50ZXIoKS54KCksIGl0ZW1Db29yZEZyb21DU1ModG91
Y2hQb2ludC55KCkpKTsKLSAgICBjb25zdCBRUG9pbnRGIHZpZXdwb3J0SG90c3BvdCA9IHZpZXdw
b3J0UmVjdC5jZW50ZXIoKTsKLQotICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBob3RzcG90ICog
ZW5kQ1NTU2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Q7Ci0KLSAgICBRUmVjdEYgZW5kUG9zUmFuZ2Ug
PSBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKLSAgICBl
bmRQb3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3Np
dGlvbiwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7Ci0KLSAgICBRUmVjdEYgZW5kVmlzaWJs
ZUNvbnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6
ZSgpIC8gZW5kSXRlbVNjYWxlKTsKLQotICAgIGVudW0geyBab29tSW4sIFpvb21CYWNrLCBab29t
T3V0LCBOb1pvb20gfSB6b29tQWN0aW9uID0gWm9vbUluOwotCi0gICAgaWYgKCFtX3NjYWxlU3Rh
Y2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFpvb20gYmFjayBvdXQgaWYgYXR0ZW1wdGluZyB0
byBzY2FsZSB0byB0aGUgc2FtZSBjdXJyZW50IHNjYWxlLCBvcgotICAgICAgICAvLyBhdHRlbXB0
aW5nIHRvIGNvbnRpbnVlIHNjYWxpbmcgb3V0IGZyb20gdGhlIGlubmVyIG1vc3QgbGV2ZWwuCi0g
ICAgICAgIC8vIFVzZSBmdXp6eSBjb21wYXJlIHdpdGggYSBmaXhlZCBlcnJvciB0byBiZSBhYmxl
IHRvIGRlYWwgd2l0aCBsYXJnaXNoIGRpZmZlcmVuY2VzIGR1ZSB0byBwaXhlbCByb3VuZGluZy4K
LSAgICAgICAgaWYgKGZ1enp5Q29tcGFyZShlbmRJdGVtU2NhbGUsIGN1cnJlbnRTY2FsZSwgMC4w
MSkpIHsKLSAgICAgICAgICAgIC8vIElmIG1vdmluZyB0aGUgdmlld3BvcnQgd291bGQgZXhwb3Nl
IG1vcmUgb2YgdGhlIHRhcmdldFJlY3QgYW5kIG1vdmUgYXQgbGVhc3QgNDAgcGl4ZWxzLCB1cGRh
dGUgcG9zaXRpb24gYnV0IGRvIG5vdCBzY2FsZSBvdXQuCi0gICAgICAgICAgICBRUmVjdEYgY3Vy
cmVudENvbnRlbnRSZWN0KG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkgLyBjdXJyZW50U2Nh
bGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBjdXJyZW50U2NhbGUpOwotICAgICAgICAgICAgUVJl
Y3RGIHRhcmdldEludGVyc2VjdGlvbiA9IGVuZFZpc2libGVDb250ZW50UmVjdC5pbnRlcnNlY3Rl
ZCh0YXJnZXRBcmVhKTsKLSAgICAgICAgICAgIGlmICghY3VycmVudENvbnRlbnRSZWN0LmNvbnRh
aW5zKHRhcmdldEludGVyc2VjdGlvbikgJiYgKHFBYnMoZW5kVmlzaWJsZUNvbnRlbnRSZWN0LnRv
cCgpIC0gY3VycmVudENvbnRlbnRSZWN0LnRvcCgpKSA+PSA0MCB8fCBxQWJzKGVuZFZpc2libGVD
b250ZW50UmVjdC5sZWZ0KCkgLSBjdXJyZW50Q29udGVudFJlY3QubGVmdCgpKSA+PSA0MCkpCi0g
ICAgICAgICAgICAgICAgem9vbUFjdGlvbiA9IE5vWm9vbTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB6b29tQWN0aW9uID0gWm9vbUJhY2s7Ci0gICAgICAgIH0gZWxzZSBpZiAo
ZnV6enlDb21wYXJlKGVuZEl0ZW1TY2FsZSwgbV96b29tT3V0U2NhbGUsIDAuMDEpKQotICAgICAg
ICAgICAgem9vbUFjdGlvbiA9IFpvb21CYWNrOwotICAgICAgICBlbHNlIGlmIChlbmRJdGVtU2Nh
bGUgPCBjdXJyZW50U2NhbGUpCi0gICAgICAgICAgICB6b29tQWN0aW9uID0gWm9vbU91dDsKLSAg
ICB9Ci0KLSAgICBzd2l0Y2ggKHpvb21BY3Rpb24pIHsKLSAgICBjYXNlIFpvb21JbjoKLSAgICAg
ICAgbV9zY2FsZVN0YWNrLmFwcGVuZChTY2FsZVN0YWNrSXRlbShjdXJyZW50U2NhbGUsIG1fdmll
d3BvcnRJdGVtLT5jb250ZW50UG9zKCkueCgpKSk7Ci0gICAgICAgIG1fem9vbU91dFNjYWxlID0g
ZW5kSXRlbVNjYWxlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFpvb21CYWNrOiB7Ci0gICAg
ICAgIFNjYWxlU3RhY2tJdGVtIGxhc3RTY2FsZSA9IG1fc2NhbGVTdGFjay50YWtlTGFzdCgpOwot
ICAgICAgICBlbmRJdGVtU2NhbGUgPSBsYXN0U2NhbGUuc2NhbGU7Ci0gICAgICAgIGVuZENTU1Nj
YWxlID0gY3NzU2NhbGVGcm9tSXRlbShsYXN0U2NhbGUuc2NhbGUpOwotICAgICAgICAvLyBSZWNh
bGN1bGF0ZSBlbmRQb3NpdGlvbiBhbmQgYm91bmQgaXQgYWNjb3JkaW5nIHRvIG5ldyBzY2FsZS4K
LSAgICAgICAgZW5kUG9zaXRpb24uc2V0WShob3RzcG90LnkoKSAqIGVuZENTU1NjYWxlIC0gdmll
d3BvcnRIb3RzcG90LnkoKSk7Ci0gICAgICAgIGVuZFBvc2l0aW9uLnNldFgobGFzdFNjYWxlLnhQ
b3NpdGlvbik7Ci0gICAgICAgIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0
ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0gICAgICAgIGVuZFBvc2l0aW9uID0gYm91bmRQb3Np
dGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0
b21SaWdodCgpKTsKLSAgICAgICAgZW5kVmlzaWJsZUNvbnRlbnRSZWN0ID0gUVJlY3RGKGVuZFBv
c2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgWm9vbU91dDoKLSAgICAgICAgLy8g
VW5zdGFjayBhbGwgc2NhbGUtbGV2ZWxzIGRlZXBlciB0aGFuIHRoZSBuZXcgbGV2ZWwsIHNvIGEg
em9vbS1iYWNrIHdvbid0IGVuZCB1cCB6b29taW5nIGluLgotICAgICAgICB3aGlsZSAoIW1fc2Nh
bGVTdGFjay5pc0VtcHR5KCkgJiYgbV9zY2FsZVN0YWNrLmxhc3QoKS5zY2FsZSA+PSBlbmRJdGVt
U2NhbGUpCi0gICAgICAgICAgICBtX3NjYWxlU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBt
X3pvb21PdXRTY2FsZSA9IGVuZEl0ZW1TY2FsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBO
b1pvb206Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGFuaW1hdGVQYWdlSXRlbVJlY3RW
aXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7Ci19Ci0KLVFSZWN0RiBRdFZpZXdwb3J0SGFu
ZGxlcjo6aW5pdGlhbFJlY3QoKSBjb25zdAotewotICAgIEFTU0VSVChtX3Jhd0F0dHJpYnV0ZXMu
aW5pdGlhbFNjYWxlID4gMCk7Ci0KLSAgICBxcmVhbCBlbmRJdGVtU2NhbGUgPSBpdGVtU2NhbGVG
cm9tQ1NTKGlubmVyQm91bmRlZENTU1NjYWxlKG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUp
KTsKLSAgICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5k
aW5nUmVjdCgpOwotICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoUVBvaW50RigwLCAw
KSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2FsZSk7Ci0KLSAgICByZXR1cm4gZW5k
VmlzaWJsZUNvbnRlbnRSZWN0OwotfQotCi1RUmVjdEYgUXRWaWV3cG9ydEhhbmRsZXI6Om5lYXJl
c3RWYWxpZEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gaXRlbVNj
YWxlRnJvbUNTUyhpbm5lckJvdW5kZWRDU1NTY2FsZShjdXJyZW50Q1NTU2NhbGUoKSkpOwotCi0g
ICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1Jl
Y3QoKTsKLSAgICBRUG9pbnRGIHZpZXdwb3J0SG90c3BvdCA9IHZpZXdwb3J0UmVjdC5jZW50ZXIo
KTsKLQotICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBtX3ZpZXdwb3J0SXRlbS0+bWFwVG9XZWJD
b250ZW50KHZpZXdwb3J0SG90c3BvdCkgKiBlbmRJdGVtU2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Q7
Ci0KLSAgICBRUmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0
U2NhbGUoZW5kSXRlbVNjYWxlKTsKLSAgICBlbmRQb3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5k
UG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQo
KSk7Ci0KLSAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5k
SXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKLQotICAgIHJl
dHVybiBlbmRWaXNpYmxlQ29udGVudFJlY3Q7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6
OnNldENTU1NjYWxlKHFyZWFsIHNjYWxlKQotewotICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIg
Z3VhcmQodGhpcyk7Ci0KLSAgICBxcmVhbCBuZXdTY2FsZSA9IGlubmVyQm91bmRlZENTU1NjYWxl
KHNjYWxlKTsKLSAgICBtX3BhZ2VJdGVtLT5zZXRDb250ZW50c1NjYWxlKGl0ZW1TY2FsZUZyb21D
U1MobmV3U2NhbGUpKTsKLX0KLQotcXJlYWwgUXRWaWV3cG9ydEhhbmRsZXI6OmN1cnJlbnRDU1NT
Y2FsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNzc1NjYWxlRnJvbUl0ZW0obV9wYWdlSXRlbS0+
Y29udGVudHNTY2FsZSgpKTsKLX0KLQotYm9vbCBRdFZpZXdwb3J0SGFuZGxlcjo6c2Nyb2xsQW5p
bWF0aW9uQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPmlzRmxp
Y2tpbmcoKTsKLX0KLQotYm9vbCBRdFZpZXdwb3J0SGFuZGxlcjo6cGFuR2VzdHVyZUFjdGl2ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlld3BvcnRJdGVtLT5pc0RyYWdnaW5nKCk7Ci19Ci0K
LXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYm
IHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCi17Ci0gICAgLy8gVGhpcyBj
YW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgotICAgIEFT
U0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7Ci0KLSAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxl
RmxpY2thYmxlTW91c2VQcmVzcyhwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAg
IG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247Ci19Ci0K
LXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQ
b2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCi17Ci0gICAgbV92
aWV3cG9ydEl0ZW0tPmhhbmRsZUZsaWNrYWJsZU1vdXNlTW92ZShwb3NpdGlvbiwgZXZlbnRUaW1l
c3RhbXBNaWxsaXMpOwotICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVz
ID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVFbmRl
ZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQot
ewotICAgIG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2FibGVNb3VzZVJlbGVhc2UocG9zaXRp
b24sIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3Bv
cnRDb29yZGluYXRlcyA9IHBvc2l0aW9uOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpw
YW5HZXN0dXJlQ2FuY2VsbGVkKCkKLXsKLSAgICAvLyBSZXNldCB0aGUgdmVsb2NpdHkgc2FtcGxl
cyBvZiB0aGUgZmxpY2thYmxlLgotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5
IHRoZSByZWNvZ25pemVyIGlmIHdlIGhhdmUgYSByZWNvZ25pemVkCi0gICAgLy8gcGFuIGdlc3R1
cmUgYW5kIHJlY2VpdmUgYSB0b3VjaCBldmVudCB3aXRoIG11bHRpcGxlIHRvdWNoIHBvaW50cwot
ICAgIC8vIChpZS4gdHJhbnNpdGlvbiB0byBhIHBpbmNoIGdlc3R1cmUpIGFzIGl0IGRvZXMgbm90
IG1vdmUgdGhlIGNvbnRlbnQKLSAgICAvLyBiYWNrIGluc2lkZSB2YWxpZCBib3VuZHMuCi0gICAg
Ly8gV2hlbiB0aGUgcGluY2ggZ2VzdHVyZSBlbmRzLCB0aGUgY29udGVudCBpcyBwb3NpdGlvbmVk
IGFuZCBzY2FsZWQKLSAgICAvLyBiYWNrIHRvIHZhbGlkIGJvdW5kYXJpZXMuCi0gICAgbV92aWV3
cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7Ci19Ci0KLWJvb2wgUXRWaWV3cG9ydEhhbmRsZXI6OnNj
YWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zY2FsZUFuaW1hdGlv
bi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc7Ci19Ci0KLXZvaWQgUXRW
aWV3cG9ydEhhbmRsZXI6OmNhbmNlbFNjcm9sbEFuaW1hdGlvbigpCi17Ci0gICAgaWYgKCFzY3Jv
bGxBbmltYXRpb25BY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIHBh
biBnZXN0dXJlIHJlY29nbml6ZXIgcmVjZWl2ZXMgYSB0b3VjaCBiZWdpbiBldmVudAotICAgIC8v
IGR1cmluZyBhbiBvbmdvaW5nIGtpbmV0aWMgc2Nyb2xsIGFuaW1hdGlvbiBvZiBhIHByZXZpb3Vz
Ci0gICAgLy8gcGFuIGdlc3R1cmUsIHRoZSBhbmltYXRpb24gaXMgc3RvcHBlZCBhbmQgdGhlIGNv
bnRlbnQgaXMKLSAgICAvLyBpbW1lZGlhdGVseSBwb3NpdGlvbmVkIGJhY2sgdG8gdmFsaWQgYm91
bmRhcmllcy4KLQotICAgIG1fdmlld3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOwotICAgIFZpZXdw
b3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQodGhpcyk7Ci0gICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJs
ZShuZWFyZXN0VmFsaWRCb3VuZHMoKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6Omlu
dGVycnVwdFNjYWxlQW5pbWF0aW9uKCkKLXsKLSAgICAvLyBUaGlzIGludGVycnVwdHMgdGhlIHNj
YWxlIGFuaW1hdGlvbiBleGFjdGx5IHdoZXJlIGl0IGlzLCBldmVuIGlmIGl0IGlzIG91dCBvZiBi
b3VuZHMuCi0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c3RvcCgpOwotfQotCi1ib29sIFF0Vmlld3Bv
cnRIYW5kbGVyOjpwaW5jaEdlc3R1cmVBY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Bp
bmNoU3RhcnRTY2FsZSA+IDA7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBpbmNoR2Vz
dHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0
ZXMpCi17Ci0gICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2Vy
IGludGVyYWN0aW9uLgotICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7Ci0KLSAgICBp
ZiAoIW1fYWxsb3dzVXNlclNjYWxpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2NhbGVT
dGFjay5jbGVhcigpOwotICAgIG1fem9vbU91dFNjYWxlID0gMC4wOwotCi0gICAgbV9zY2FsZVVw
ZGF0ZURlZmVycmVyID0gYWRvcHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywg
Vmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOwot
Ci0gICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwaW5jaENlbnRl
ckluVmlld3BvcnRDb29yZGluYXRlczsKLSAgICBtX3BpbmNoU3RhcnRTY2FsZSA9IG1fcGFnZUl0
ZW0tPmNvbnRlbnRzU2NhbGUoKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hH
ZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRD
b29yZGluYXRlcywgcXJlYWwgdG90YWxTY2FsZUZhY3RvcikKLXsKLSAgICBBU1NFUlQobV9zdXNw
ZW5kQ291bnQpOwotCi0gICAgaWYgKCFtX2FsbG93c1VzZXJTY2FsaW5nKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyAgQ2hhbmdlcyBvZiB0aGUgY2VudGVyIHBvc2l0aW9uIHNob3VsZCBtb3Zl
IHRoZSBwYWdlIGV2ZW4gaWYgdGhlIHpvb20gZmFjdG9yCi0gICAgLy8gIGRvZXMgbm90IGNoYW5n
ZS4KLSAgICBjb25zdCBxcmVhbCBjc3NTY2FsZSA9IGNzc1NjYWxlRnJvbUl0ZW0obV9waW5jaFN0
YXJ0U2NhbGUgKiB0b3RhbFNjYWxlRmFjdG9yKTsKLQotICAgIC8vIEFsbG93IHpvb21pbmcgb3V0
IGJleW9uZCBtaW1pbXVtIHNjYWxlIG9uIHBhZ2VzIHRoYXQgZG8gbm90IGV4cGxpY2l0bHkgZGlz
YWxsb3cgaXQuCi0gICAgY29uc3QgcXJlYWwgdGFyZ2V0Q1NTU2NhbGUgPSBvdXRlckJvdW5kZWRD
U1NTY2FsZShjc3NTY2FsZSk7Ci0KLSAgICBzY2FsZUNvbnRlbnQobV92aWV3cG9ydEl0ZW0tPm1h
cFRvV2ViQ29udGVudChwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyksIHRhcmdldENT
U1NjYWxlKTsKLQotICAgIGNvbnN0IFFQb2ludEYgcG9zaXRpb25EaWZmID0gcGluY2hDZW50ZXJJ
blZpZXdwb3J0Q29vcmRpbmF0ZXMgLSBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGlu
YXRlczsKLSAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNo
Q2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOwotCi0gICAgbV92aWV3cG9ydEl0ZW0tPnNldENv
bnRlbnRQb3MobV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKSAtIHBvc2l0aW9uRGlmZik7Ci19
Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBpbmNoR2VzdHVyZUVuZGVkKCkKLXsKLSAgICBB
U1NFUlQobV9zdXNwZW5kQ291bnQpOwotCi0gICAgaWYgKCFtX2FsbG93c1VzZXJTY2FsaW5nKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BpbmNoU3RhcnRTY2FsZSA9IC0xOwotCi0gICAgYW5p
bWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUobmVhcmVzdFZhbGlkQm91bmRzKCkpOwotICAgIG1fc2Nh
bGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOyAvLyBDbGVhciBhZnRlciBzdGFydGluZyBwb3RlbnRp
YWwgYW5pbWF0aW9uLCB3aGljaCB0YWtlcyBvdmVyIGRlZmVycmluZy4KLX0KLQotdm9pZCBRdFZp
ZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlQ2FuY2VsbGVkKCkKLXsKLSAgICBtX3BpbmNoU3Rh
cnRTY2FsZSA9IC0xOwotICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOwotfQotCi1R
UmVjdEYgUXRWaWV3cG9ydEhhbmRsZXI6OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAotewot
ICAgIGNvbnN0IFFSZWN0RiB2aXNpYmxlUmVjdChtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0
KCkuaW50ZXJzZWN0ZWQobV9wYWdlSXRlbS0+Ym91bmRpbmdSZWN0KCkpKTsKLSAgICByZXR1cm4g
bV92aWV3cG9ydEl0ZW0tPm1hcFJlY3RUb1dlYkNvbnRlbnQodmlzaWJsZVJlY3QpOwotfQotCi12
b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjppbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShjb25zdCBR
UG9pbnRGJiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdp
bmdBcmVhID0gbV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7Ci0gICAgaWYgKCFkcmF3aW5n
QXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcXJlYWwgc2NhbGUgPSBtX3BhZ2VJdGVtLT5j
b250ZW50c1NjYWxlKCk7Ci0KLSAgICBpZiAoc2NhbGUgIT0gbV9sYXN0Q29tbWl0dGVkU2NhbGUp
Ci0gICAgICAgIGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPmNv
bnRlbnRzU2NhbGVDb21taXR0ZWQoKTsKLSAgICBtX2xhc3RDb21taXR0ZWRTY2FsZSA9IHNjYWxl
OwotCi0gICAgZHJhd2luZ0FyZWEtPnNldFZpc2libGVDb250ZW50c1JlY3QodmlzaWJsZUNvbnRl
bnRzUmVjdCgpLCBzY2FsZSwgdHJhamVjdG9yeVZlY3Rvcik7Ci0KLSAgICAvLyBFbnN1cmUgdGhh
dCB1cGRhdGVQYWludE5vZGUgaXMgYWx3YXlzIGNhbGxlZCBiZWZvcmUgcGFpbnRpbmcuCi0gICAg
bV9wYWdlSXRlbS0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnZpZXdw
b3J0SXRlbVNpemVDaGFuZ2VkKCkKLXsKLSAgICBRU2l6ZSB2aWV3cG9ydFNpemUgPSBtX3ZpZXdw
b3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRvU2l6ZSgpOwotCi0gICAgaWYgKHZpZXdw
b3J0U2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIExldCB0aGUgV2Vi
UHJvY2VzcyBrbm93IGFib3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwgc28gdGhhdAotICAgIC8v
IGl0IGNhbiByZXNpemUgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkuCi0gICAgbV93ZWJQYWdlUHJv
eHktPnNldFZpZXdwb3J0U2l6ZSh2aWV3cG9ydFNpemUpOwotCi0gICAgaW5mb3JtVmlzaWJsZUNv
bnRlbnRDaGFuZ2UoUVBvaW50RigpKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6c2Nh
bGVDb250ZW50KGNvbnN0IFFQb2ludEYmIGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFsIGNz
c1NjYWxlKQotewotICAgIFFQb2ludEYgb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3
cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOwotICAg
IG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2NhbGUoaXRlbVNjYWxlRnJvbUNTUyhjc3NTY2FsZSkp
OwotICAgIFFQb2ludEYgbmV3UGluY2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0t
Pm1hcEZyb21XZWJDb250ZW50KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOwotCi0gICAgbV92aWV3
cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKSArIChu
ZXdQaW5jaENlbnRlck9uVmlld3BvcnQgLSBvbGRQaW5jaENlbnRlck9uVmlld3BvcnQpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNpbmNsdWRlICJtb2NfUXRWaWV3cG9ydEhhbmRs
ZXIuY3BwIgotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZp
ZXdwb3J0SGFuZGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRI
YW5kbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMzdmZTlmMzYzMzE4NzU4
YmFiYWJmNGJlYjdjOWVjZGRiYzEzYWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5k
bGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBCZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1pbkB3ZWJraXQub3Jn
PgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHBy
b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0g
Ki8KLQotI2lmbmRlZiBRdFZpZXdwb3J0SGFuZGxlcl9oCi0jZGVmaW5lIFF0Vmlld3BvcnRIYW5k
bGVyX2gKLQotI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgotI2luY2x1ZGUgPFF0Q29yZS9RUmVj
dEY+Ci0jaW5jbHVkZSA8UXRDb3JlL1FWYXJpYW50PgotI2luY2x1ZGUgPFF0Q29yZS9RVmFyaWFu
dEFuaW1hdGlvbj4KLSNpbmNsdWRlIDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+Ci0jaW5j
bHVkZSA8d3RmL093blB0ci5oPgotCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQb2ludEY7
Ci1jbGFzcyBRV2hlZWxFdmVudDsKLVFUX0VORF9OQU1FU1BBQ0UKLQotY2xhc3MgUVF1aWNrV2Vi
UGFnZTsKLWNsYXNzIFFRdWlja1dlYlZpZXc7Ci0KLWNsYXNzIFFXZWJLaXRUZXN0OwotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgVmlld3BvcnRVcGRh
dGVEZWZlcnJlcjsKLQotY2xhc3MgUXRWaWV3cG9ydEhhbmRsZXIgOiBwdWJsaWMgUU9iamVjdCB7
Ci0gICAgUV9PQkpFQ1QKLQotcHVibGljOgotICAgIFF0Vmlld3BvcnRIYW5kbGVyKFdlYlBhZ2VQ
cm94eSosIFFRdWlja1dlYlZpZXcqLCBRUXVpY2tXZWJQYWdlKik7Ci0gICAgflF0Vmlld3BvcnRI
YW5kbGVyKCk7Ci0KLSAgICB2b2lkIHRvdWNoQmVnaW4oKTsKLSAgICB2b2lkIHRvdWNoRW5kKCk7
Ci0KLSAgICBib29sIHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgY2Fu
Y2VsU2Nyb2xsQW5pbWF0aW9uKCk7Ci0KLSAgICBib29sIHBhbkdlc3R1cmVBY3RpdmUoKSBjb25z
dDsKLSAgICB2b2lkIHBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBx
aW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIHZvaWQgcGFuR2VzdHVyZVJlcXVlc3RV
cGRhdGUoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxp
cyk7Ci0gICAgdm9pZCBwYW5HZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFp
bnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7Ci0gICAgdm9pZCBwYW5HZXN0dXJlQ2FuY2VsbGVk
KCk7Ci0KLSAgICBib29sIHNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBp
bnRlcnJ1cHRTY2FsZUFuaW1hdGlvbigpOwotCi0gICAgYm9vbCBwaW5jaEdlc3R1cmVBY3RpdmUo
KSBjb25zdDsKLSAgICB2b2lkIHBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcGlu
Y2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpOwotICAgIHZvaWQgcGluY2hHZXN0dXJlUmVx
dWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRl
cywgcXJlYWwgdG90YWxTY2FsZUZhY3Rvcik7Ci0gICAgdm9pZCBwaW5jaEdlc3R1cmVFbmRlZCgp
OwotICAgIHZvaWQgcGluY2hHZXN0dXJlQ2FuY2VsbGVkKCk7Ci0KLSAgICB2b2lkIHpvb21Ub0Fy
ZWFHZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29uc3QgUVJlY3RGJiB0
YXJnZXRBcmVhKTsKLSAgICB2b2lkIGZvY3VzRWRpdGFibGVBcmVhKGNvbnN0IFFSZWN0RiYgY2Fy
ZXRBcmVhLCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpOwotCi0gICAgdm9pZCBwYWdlQ29udGVu
dFBvc2l0aW9uUmVxdWVzdGVkKGNvbnN0IFFQb2ludCYgcG9zaXRpb24pOwotCi0gICAgdm9pZCB2
aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpOwotICAgIHZvaWQgdmlld3BvcnRBdHRyaWJ1dGVzQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKLSAgICB2b2lkIGluZm9y
bVZpc2libGVDb250ZW50Q2hhbmdlKGNvbnN0IFFQb2ludEYmIHRyYWplY3RvcnkgPSBRUG9pbnRG
KCkpOwotICAgIHZvaWQgcGFnZUNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIG5ld1Np
emUsIGNvbnN0IFFTaXplJiB2aWV3cG9ydFNpemUpOwotCi1wcml2YXRlIFFfU0xPVFM6Ci0gICAg
Ly8gUmVzcG9uZCB0byBjaGFuZ2VzIG9mIHBvc2l0aW9uIHRoYXQgYXJlIG5vdCBkcml2ZW4gYnkg
dXMuCi0gICAgdm9pZCBwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpOwotCi0gICAgdm9pZCBzY2Fs
ZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJh
Y3RBbmltYXRpb246OlN0YXRlKTsKLSAgICB2b2lkIHNjYWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2Vk
KFFWYXJpYW50IHZhbHVlKTsKLQotICAgIHZvaWQgZmxpY2tNb3ZlU3RhcnRlZCgpOyAvLyBDYWxs
ZWQgd2hlbiBwYW5uaW5nIHN0YXJ0cy4KLSAgICB2b2lkIGZsaWNrTW92ZUVuZGVkKCk7IC8vICAg
Q2FsbGVkIHdoZW4gcGFubmluZyAoKyBraW5ldGljIGFuaW1hdGlvbikgZW5kcy4KLQotcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjsKLSAgICBmcmllbmQg
Y2xhc3MgOjpRV2ViS2l0VGVzdDsKLQotICAgIFdlYlBhZ2VQcm94eSogY29uc3QgbV93ZWJQYWdl
UHJveHk7Ci0gICAgUVF1aWNrV2ViVmlldyogY29uc3QgbV92aWV3cG9ydEl0ZW07Ci0gICAgUVF1
aWNrV2ViUGFnZSogY29uc3QgbV9wYWdlSXRlbTsKLQotICAgIHFyZWFsIGNzc1NjYWxlRnJvbUl0
ZW0ocXJlYWwpIGNvbnN0OwotICAgIHFyZWFsIGl0ZW1TY2FsZUZyb21DU1MocXJlYWwpIGNvbnN0
OwotICAgIHFyZWFsIGl0ZW1Db29yZEZyb21DU1MocXJlYWwpIGNvbnN0OwotICAgIFFSZWN0RiBp
dGVtUmVjdEZyb21DU1MoY29uc3QgUVJlY3RGJikgY29uc3Q7Ci0KLSAgICBxcmVhbCBpbm5lckJv
dW5kZWRDU1NTY2FsZShxcmVhbCkgY29uc3Q7Ci0gICAgcXJlYWwgb3V0ZXJCb3VuZGVkQ1NTU2Nh
bGUocXJlYWwpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRJbml0aWFsU2NhbGVJZk5lZWRlZCgpOwot
Ci0gICAgdm9pZCBzZXRDU1NTY2FsZShxcmVhbCk7Ci0gICAgcXJlYWwgY3VycmVudENTU1NjYWxl
KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RG
Jik7Ci0gICAgdm9pZCBhbmltYXRlUGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmKTsK
LQotICAgIFFSZWN0RiB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7Ci0gICAgUVJlY3RGIGlu
aXRpYWxSZWN0KCkgY29uc3Q7Ci0gICAgUVJlY3RGIG5lYXJlc3RWYWxpZEJvdW5kcygpIGNvbnN0
OwotCi0gICAgUVJlY3RGIGNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShxcmVhbCBp
dGVtU2NhbGUpIGNvbnN0OwotICAgIHZvaWQgc2NhbGVDb250ZW50KGNvbnN0IFFQb2ludEYmIGNl
bnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFsIGNzc1NjYWxlKTsKLQotICAgIHZvaWQgc3VzcGVu
ZFBhZ2VDb250ZW50KCk7Ci0gICAgdm9pZCByZXN1bWVQYWdlQ29udGVudCgpOwotCi0gICAgV2Vi
Q29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIG1fcmF3QXR0cmlidXRlczsKLQotICAgIGJvb2wgbV9h
bGxvd3NVc2VyU2NhbGluZzsKLSAgICBxcmVhbCBtX21pbmltdW1TY2FsZTsKLSAgICBxcmVhbCBt
X21heGltdW1TY2FsZTsKLSAgICBxcmVhbCBtX2RldmljZVBpeGVsUmF0aW87Ci0KLSAgICBRU2l6
ZSBtX2xheW91dFNpemU7Ci0KLSAgICBpbnQgbV9zdXNwZW5kQ291bnQ7Ci0gICAgYm9vbCBtX2hh
c1N1c3BlbmRlZENvbnRlbnQ7Ci0KLSAgICBPd25QdHI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4g
bV9zY2FsZVVwZGF0ZURlZmVycmVyOwotICAgIE93blB0cjxWaWV3cG9ydFVwZGF0ZURlZmVycmVy
PiBtX3Njcm9sbFVwZGF0ZURlZmVycmVyOwotICAgIE93blB0cjxWaWV3cG9ydFVwZGF0ZURlZmVy
cmVyPiBtX3RvdWNoVXBkYXRlRGVmZXJyZXI7Ci0gICAgT3duUHRyPFZpZXdwb3J0VXBkYXRlRGVm
ZXJyZXI+IG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXI7Ci0KLSAgICBib29sIG1faGFkVXNlcklu
dGVyYWN0aW9uOwotCi0gICAgY2xhc3MgU2NhbGVBbmltYXRpb24gOiBwdWJsaWMgUVZhcmlhbnRB
bmltYXRpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgU2NhbGVBbmltYXRpb24oUU9iamVjdCog
cGFyZW50ID0gMCkKLSAgICAgICAgICAgIDogUVZhcmlhbnRBbmltYXRpb24ocGFyZW50KQotICAg
ICAgICB7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ3VycmVudFZhbHVlKGNvbnN0
IFFWYXJpYW50JikgeyB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTY2FsZVN0YWNrSXRlbSB7Ci0g
ICAgICAgIFNjYWxlU3RhY2tJdGVtKHFyZWFsIHNjYWxlLCBxcmVhbCB4UG9zaXRpb24pCi0gICAg
ICAgICAgICA6IHNjYWxlKHNjYWxlKQotICAgICAgICAgICAgLCB4UG9zaXRpb24oeFBvc2l0aW9u
KQotICAgICAgICB7IH0KLQotICAgICAgICBxcmVhbCBzY2FsZTsKLSAgICAgICAgcXJlYWwgeFBv
c2l0aW9uOwotICAgIH07Ci0KLSAgICBTY2FsZUFuaW1hdGlvbiogbV9zY2FsZUFuaW1hdGlvbjsK
LSAgICBRUG9pbnRGIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOwotICAg
IFFQb2ludEYgbV9sYXN0U2Nyb2xsUG9zaXRpb247Ci0gICAgcXJlYWwgbV9waW5jaFN0YXJ0U2Nh
bGU7Ci0gICAgcXJlYWwgbV9sYXN0Q29tbWl0dGVkU2NhbGU7Ci0gICAgcXJlYWwgbV96b29tT3V0
U2NhbGU7Ci0gICAgUUxpc3Q8U2NhbGVTdGFja0l0ZW0+IG1fc2NhbGVTdGFjazsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUXRWaWV3cG9ydEhhbmRsZXJfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVy
LmNwcAppbmRleCBhMDI5MDBmY2RmYjM3YTBiMWExMDY0YWEzNDZkYTg1OGIxOTM3NWE0Li40Y2Ux
M2JkYzI4NmIxYjA5ZDljOTUxMjE5MzM5NTlkM2VkOTgwOTAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcApAQCAtMjQs
NyArMjQsNyBAQAogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRl
ICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5o
IgotI2luY2x1ZGUgIlF0Vmlld3BvcnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJxcXVp
Y2t3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKQEAgLTMwNSw3ICsz
MDUsNyBAQCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRm9jdXNPdXRFdmVudChR
Rm9jdXNFdmVudCopCiAgICAgbV93ZWJQYWdlUHJveHktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJQ
YWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5kb3dJc0FjdGl2
ZSk7CiB9CiAKLXZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpzZXRWaWV3cG9ydEhhbmRsZXIo
UXRWaWV3cG9ydEhhbmRsZXIqIGhhbmRsZXIpCit2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6
c2V0Vmlld3BvcnRIYW5kbGVyKFZpZXdwb3J0SGFuZGxlckNsaWVudFF0KiBoYW5kbGVyKQogewog
ICAgIG1fdmlld3BvcnRIYW5kbGVyID0gaGFuZGxlcjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaAppbmRleCA0NDZkYjc1M2Rm
Y2JhYjg5MzAzMjI5NDNkMmY2MDcwZTZkNTIwNmI3Li44YzkwMzA5MzdkZDE3OGE1YjBkNzg5YWY1
NGI4Yzc4YTk3N2E5M2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5oCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIEludFJlY3Q7
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmF0aXZlV2ViVG91Y2hFdmVudDsKLWNsYXNz
IFF0Vmlld3BvcnRIYW5kbGVyOworY2xhc3MgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ7CiBjbGFz
cyBTaGFyZWFibGVCaXRtYXA7CiBjbGFzcyBXZWJHZXN0dXJlRXZlbnQ7CiBjbGFzcyBXZWJQYWdl
UHJveHk7CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGhhbmRsZUlucHV0TWV0
aG9kRXZlbnQoUUlucHV0TWV0aG9kRXZlbnQqKTsKICAgICB2b2lkIGhhbmRsZVRvdWNoRXZlbnQo
UVRvdWNoRXZlbnQqKTsKIAotICAgIHZvaWQgc2V0Vmlld3BvcnRIYW5kbGVyKFF0Vmlld3BvcnRI
YW5kbGVyKik7CisgICAgdm9pZCBzZXRWaWV3cG9ydEhhbmRsZXIoVmlld3BvcnRIYW5kbGVyQ2xp
ZW50UXQqKTsKIAogICAgIHZvaWQgYWN0aXZhdGVUYXBIaWdobGlnaHQoY29uc3QgUVRvdWNoRXZl
bnQ6OlRvdWNoUG9pbnQmKTsKICAgICB2b2lkIGRlYWN0aXZhdGVUYXBIaWdobGlnaHQoKTsKQEAg
LTkxLDEzICs5MSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0
IFFJbnB1dEV2ZW50Kik7CiAgICAgdm9pZCByZXNldEdlc3R1cmVSZWNvZ25pemVycygpOwogCi0g
ICAgUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0SGFuZGxlcigpIHsgcmV0dXJuIG1fdmlld3Bv
cnRIYW5kbGVyOyB9CisgICAgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQqIHZpZXdwb3J0SGFuZGxl
cigpIHsgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVyOyB9CiAKICAgICB2b2lkIHN0YXJ0RHJhZyhj
b25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFn
SW1hZ2UpOwogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViUGFnZVByb3h5KiBtX3dlYlBhZ2VQcm94eTsK
LSAgICBRdFZpZXdwb3J0SGFuZGxlciogbV92aWV3cG9ydEhhbmRsZXI7CisgICAgVmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQqIG1fdmlld3BvcnRIYW5kbGVyOwogICAgIFF0UGFuR2VzdHVyZVJlY29n
bml6ZXIgbV9wYW5HZXN0dXJlUmVjb2duaXplcjsKICAgICBRdFBpbmNoR2VzdHVyZVJlY29nbml6
ZXIgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyOwogICAgIFF0VGFwR2VzdHVyZVJlY29nbml6ZXIg
bV90YXBHZXN0dXJlUmVjb2duaXplcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmYjQ2NTk0
YjhhYjUzM2FhMDNkNmY2MTRmNTY3NjYzOTZlNzFkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQuY3BwCkBAIC0w
LDAgKzEsNTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEx
IEJlbmphbWluIFBvdWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oIgorCisjaW5jbHVk
ZSAicXF1aWNrd2VicGFnZV9wLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCisjaW5j
bHVkZSAicXdlYmtpdHRlc3RfcC5oIgorI2luY2x1ZGUgPFFQb2ludEY+CisjaW5jbHVkZSA8UVRy
YW5zZm9ybT4KKyNpbmNsdWRlIDxRdFF1aWNrL3FxdWlja2l0ZW0uaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgaW50IGtTY2FsZUFuaW1hdGlvbkR1cmF0aW9u
TWlsbGlzID0gMjUwOworCitWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6Vmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQoUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVtLCBRUXVpY2tXZWJQYWdlKiBwYWdl
SXRlbSkKKyAgICA6IG1fdmlld3BvcnRJdGVtKHZpZXdwb3J0SXRlbSkKKyAgICAsIG1fcGFnZUl0
ZW0ocGFnZUl0ZW0pCisgICAgLCBtX3NjYWxlQW5pbWF0aW9uKG5ldyBTY2FsZUFuaW1hdGlvbih0
aGlzKSkKKyAgICAsIG1fcGluY2hTdGFydFNjYWxlKC0xKQorICAgICwgbV9sYXN0Q29tbWl0dGVk
U2NhbGUoLTEpCisgICAgLCBtX3pvb21PdXRTY2FsZSgwKQorICAgICwgbV9pZ25vcmVWaWV3cG9y
dENoYW5nZXModHJ1ZSkKK3sKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXREdXJhdGlvbihrU2Nh
bGVBbmltYXRpb25EdXJhdGlvbk1pbGxpcyk7CisgICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0RWFz
aW5nQ3VydmUoUUVhc2luZ0N1cnZlOjpPdXRDdWJpYyk7CisKKyAgICBjb25uZWN0KG1fdmlld3Bv
cnRJdGVtLCBTSUdOQUwobW92ZW1lbnRTdGFydGVkKCkpLCBTTE9UKGZsaWNrTW92ZVN0YXJ0ZWQo
KSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBT
SUdOQUwobW92ZW1lbnRFbmRlZCgpKSwgU0xPVChmbGlja01vdmVFbmRlZCgpKSwgUXQ6OkRpcmVj
dENvbm5lY3Rpb24pOworICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50
WENoYW5nZWQoKSksIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOworICAgIGNvbm5l
Y3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50WUNoYW5nZWQoKSksIFNMT1QocGFnZUl0
ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOworCisKKyAgICBjb25uZWN0KG1fc2NhbGVBbmltYXRpb24s
IFNJR05BTChzdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0
QW5pbWF0aW9uOjpTdGF0ZSkpLAorICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblN0YXRl
Q2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0
YXRlKSkpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpTY2FsZUFuaW1hdGlv
bjo6dXBkYXRlQ3VycmVudFZhbHVlKGNvbnN0IFFWYXJpYW50JiB2YWx1ZSkKK3sKKyAgICAvLyBS
ZXNldHRpbmcgdGhlIGVuZCB2YWx1ZSwgdGhlIGVhc2luZyBjdXJ2ZSBvciB0aGUgZHVyYXRpb24g
b2YgdGhlIHNjYWxlIGFuaW1hdGlvbgorICAgIC8vIHRyaWdnZXJzIGEgcmVjYWxjdWxhdGlvbiBv
ZiB0aGUgYW5pbWF0aW9uIGludGVydmFsLiBUaGlzIG1pZ2h0IGNoYW5nZSB0aGUgY3VycmVudAor
ICAgIC8vIHZhbHVlIG9mIHRoZSBhbmltYXRlZCBwcm9wZXJ0eS4KKyAgICAvLyBNYWtlIHN1cmUg
d2Ugb25seSBhY3Qgb24gYW5pbWF0aW9uIHZhbHVlIGNoYW5nZXMgaWYgdGhlIGFuaW1hdGlvbiBp
cyBhY3RpdmUuCisgICAgaWYgKCFtX2hhbmRsZXJDbGllbnQtPnNjYWxlQW5pbWF0aW9uQWN0aXZl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFSZWN0RiBpdGVtUmVjdCA9IHZhbHVlLnRvUmVj
dEYoKTsKKyAgICBmbG9hdCBpdGVtU2NhbGUgPSBtX2hhbmRsZXJDbGllbnQtPnZpZXdwb3J0U2Nh
bGVGb3JSZWN0KGl0ZW1SZWN0KTsKKworICAgIG1faGFuZGxlckNsaWVudC0+c2V0Q29udGVudFJl
Y3RWaXNpYmxlUG9zaXRpb25BdFNjYWxlKGl0ZW1SZWN0LnRvcExlZnQoKSwgaXRlbVNjYWxlKTsK
K30KKworVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6On5WaWV3cG9ydEhhbmRsZXJDbGllbnRRdCgp
Cit7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNldENvbnRlbnRSZWN0Vmlz
aWJsZVBvc2l0aW9uQXRTY2FsZShjb25zdCBRUG9pbnRGJiBsb2NhdGlvbiwgcXJlYWwgaXRlbVNj
YWxlKQoreworICAgIEFTU0VSVChpdGVtU2NhbGUgPj0gMCk7CisKKyAgICBzY2FsZUNvbnRlbnQo
aXRlbVNjYWxlKTsKKworICAgIC8vIFRvIGFuaW1hdGUgdGhlIHBvc2l0aW9uIHRvZ2V0aGVyIHdp
dGggdGhlIHNjYWxlIHdlIG11bHRpcGx5IHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBjdXJyZW50IHNj
YWxlCisgICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgcGFnZSBwb3NpdGlvbiAoZGlzcGxhY2VtZW50
IG9uIHRoZSBmbGlja2FibGUgY29udGVudEl0ZW0gYmVjYXVzZSBvZiBhZGRpdGlvbmFsIGl0ZW1z
KS4KKyAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uKG1fcGFnZUl0ZW0tPnBvcygpICsgbG9jYXRpb24g
KiBpdGVtU2NhbGUpOworCisgICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobmV3UG9z
aXRpb24pOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjphbmltYXRlQ29udGVu
dFJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgY29udGVudFJlY3QpCit7CisgICAgQVNTRVJUKG1f
c2NhbGVBbmltYXRpb24tPnN0YXRlKCkgPT0gUUFic3RyYWN0QW5pbWF0aW9uOjpTdG9wcGVkKTsK
KworICAgIEFTU0VSVCghc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpOworICAgIGlmIChzY3JvbGxB
bmltYXRpb25BY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVJlY3RGIHZpZXdwb3J0
UmVjdEluQ29udGVudENvb3JkcyA9IG1fdmlld3BvcnRJdGVtLT5tYXBSZWN0VG9XZWJDb250ZW50
KG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKSk7CisgICAgaWYgKGNvbnRlbnRSZWN0ID09
IHZpZXdwb3J0UmVjdEluQ29udGVudENvb3JkcykgeworICAgICAgICB1cGRhdGVWaWV3cG9ydCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2luY2Ugd2UgaGF2ZSB0byBhbmlt
YXRlIHNjYWxlIGFuZCBwb3NpdGlvbiBhdCB0aGUgc2FtZSB0aW1lIHRoZSBzY2FsZSBhbmltYXRp
b24gaW50ZXJwb2xhdGVzCisgICAgLy8gZnJvbSB0aGUgY3VycmVudCB2aWV3cG9ydCByZWN0IGlu
IGNvbnRlbnQgY29vcmRpbmF0ZXMgdG8gYSB2aXNpYmxlIHJlY3Qgb2YgdGhlIGNvbnRlbnQuCisg
ICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0U3RhcnRWYWx1ZSh2aWV3cG9ydFJlY3RJbkNvbnRlbnRD
b29yZHMpOworICAgIG1fc2NhbGVBbmltYXRpb24tPnNldEVuZFZhbHVlKGNvbnRlbnRSZWN0KTsK
KworICAgIC8vIEluZm9ybSB0aGUgd2ViIHByb2Nlc3MgYWJvdXQgdGhlIHJlcXVlc3RlZCB2aXNp
YmxlIGNvbnRlbnQgcmVjdAorICAgIC8vIGlmIHpvb21pbmctb3V0IHNvIHRoYXQgbm8gd2hpdGUg
dGlsZXMgYXJlIGV4cG9zZWQgZHVyaW5nIGFuaW1hdGlvbi4KKyAgICBpZiAodmlld3BvcnRSZWN0
SW5Db250ZW50Q29vcmRzLndpZHRoKCkgLyBjb250ZW50UmVjdC53aWR0aCgpIDwgbV9wYWdlSXRl
bS0+Y29udGVudHNTY2FsZSgpKQorICAgICAgICBtX3ZpZXdwb3J0SGFuZGxlci0+dXBkYXRlVmlz
aWJsZUNvbnRlbnRzUmVjdChjb250ZW50UmVjdCwgdmlld3BvcnRTY2FsZUZvclJlY3QoY29udGVu
dFJlY3QpKTsKKworICAgIG1fc2NhbGVBbmltYXRpb24tPnN0YXJ0KCk7Cit9CisKK3ZvaWQgVmll
d3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmZsaWNrTW92ZVN0YXJ0ZWQoKQoreworICAgIFFfQVNTRVJU
KG1fdmlld3BvcnRJdGVtLT5pc01vdmluZygpKTsKKyAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVy
LnJlc2V0KG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKG1fdmlld3BvcnRIYW5kbGVyLCBWaWV3
cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7CisKKyAg
ICBtX2xhc3RTY3JvbGxQb3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCk7CisK
KyAgICBtX2lnbm9yZVZpZXdwb3J0Q2hhbmdlcyA9IGZhbHNlOworfQorCit2b2lkIFZpZXdwb3J0
SGFuZGxlckNsaWVudFF0OjpmbGlja01vdmVFbmRlZCgpCit7CisgICAgUV9BU1NFUlQoIW1fdmll
d3BvcnRJdGVtLT5pc01vdmluZygpKTsKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24g
dGhlIGVuZCBvZiB0aGUgcGFuIG9yIHBhbiBraW5ldGljIGFuaW1hdGlvbi4KKworICAgIG1faWdu
b3JlVmlld3BvcnRDaGFuZ2VzID0gdHJ1ZTsKKworICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIu
cmVzZXQoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGFnZUl0ZW1Qb3Np
dGlvbkNoYW5nZWQoKQoreworICAgIGlmIChtX2lnbm9yZVZpZXdwb3J0Q2hhbmdlcykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUVBvaW50RiBuZXdQb3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5j
b250ZW50UG9zKCk7CisKKyAgICB1cGRhdGVWaWV3cG9ydChtX2xhc3RTY3JvbGxQb3NpdGlvbiAt
IG5ld1Bvc2l0aW9uKTsKKworICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247
Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNjYWxlQW5pbWF0aW9uU3RhdGVD
aGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFBYnN0cmFjdEFuaW1h
dGlvbjo6U3RhdGUgLypvbGRTdGF0ZSovKQoreworICAgIHN3aXRjaCAobmV3U3RhdGUpIHsKKyAg
ICBjYXNlIFFBYnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZzoKKyAgICAgICAgbV92aWV3cG9ydEl0
ZW0tPmNhbmNlbEZsaWNrKCk7CisgICAgICAgIEFTU0VSVCghbV9hbmltYXRpb25VcGRhdGVEZWZl
cnJlcik7CisgICAgICAgIG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIucmVzZXQobmV3IFZpZXdw
b3J0VXBkYXRlRGVmZXJyZXIobV92aWV3cG9ydEhhbmRsZXIsIFZpZXdwb3J0VXBkYXRlRGVmZXJy
ZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBRQWJzdHJhY3RBbmltYXRpb246OlN0b3BwZWQ6CisgICAgICAgIG1fYW5pbWF0aW9uVXBk
YXRlRGVmZXJyZXIucmVzZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp0b3Vj
aEJlZ2luKCkKK3sKKyAgICBtX3ZpZXdwb3J0SGFuZGxlci0+c2V0SGFkVXNlckludGVyYWN0aW9u
KHRydWUpOworCisgICAgLy8gUHJldmVudHMgcmVzdW1pbmcgdGhlIHBhZ2UgYmV0d2VlbiB0aGUg
dXNlcidzIGZsaWNrcyBvZiB0aGUgcGFnZSB3aGlsZSB0aGUgYW5pbWF0aW9uIGlzIHJ1bm5pbmcu
CisgICAgaWYgKHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICBtX3RvdWNoVXBkYXRl
RGVmZXJyZXIucmVzZXQobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIobV92aWV3cG9ydEhhbmRs
ZXIsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQp
KTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dG91Y2hFbmQoKQoreworICAg
IG1fdG91Y2hVcGRhdGVEZWZlcnJlci5yZXNldCgpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxl
ckNsaWVudFF0Ojpmb2N1c0VkaXRhYmxlQXJlYShjb25zdCBRUmVjdEYmIGNhcmV0QXJlYSwgY29u
c3QgUVJlY3RGJiB0YXJnZXRBcmVhKQoreworICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFz
IGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KKyAgICBBU1NFUlQobV92aWV3cG9ydEhh
bmRsZXItPmhhZFVzZXJJbnRlcmFjdGlvbigpKTsKKworICAgIFFSZWN0RiBlbmRBcmVhID0gbV92
aWV3cG9ydEhhbmRsZXItPnZpZXdwb3J0UmVjdEZyb21DU1ModGFyZ2V0QXJlYSk7CisKKyAgICBx
cmVhbCBlbmRJdGVtU2NhbGUgPSBtX3ZpZXdwb3J0SGFuZGxlci0+dmlld3BvcnRTY2FsZUZyb21D
U1MobV92aWV3cG9ydEhhbmRsZXItPmlubmVyQm91bmRlZENTU1NjYWxlKDIuMCkpOworICAgIGNv
bnN0IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCk7
CisKKyAgICBxcmVhbCB4OworICAgIGNvbnN0IHFyZWFsIGJvcmRlck9mZnNldCA9IDEwOworICAg
IGlmICgoZW5kQXJlYS53aWR0aCgpICsgYm9yZGVyT2Zmc2V0KSAqIGVuZEl0ZW1TY2FsZSA8PSB2
aWV3cG9ydFJlY3Qud2lkdGgoKSkgeworICAgICAgICAvLyBDZW50ZXIgdGhlIGlucHV0IGZpZWxk
IGluIHRoZSBtaWRkbGUgb2YgdGhlIHZpZXcsIGlmIGl0IGlzIHNtYWxsZXIgdGhhbgorICAgICAg
ICAvLyB0aGUgdmlldyBhdCB0aGUgc2NhbGUgdGFyZ2V0LgorICAgICAgICB4ID0gdmlld3BvcnRS
ZWN0LmNlbnRlcigpLngoKSAtIGVuZEFyZWEud2lkdGgoKSAqIGVuZEl0ZW1TY2FsZSAvIDIuMDsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgY2FyZXQgYWx3YXlzIGhh
cyBib3JkZXJPZmZzZXQgY29udGVudHMgcGl4ZWxzIHRvIHRoZSByaWdodAorICAgICAgICAvLyBv
ZiBpdCwgYW5kIHNlY29uZGFyaWx5IChpZiBwb3NzaWJsZSksIHRoYXQgdGhlIGFyZWEgaGFzIGJv
cmRlck9mZnNldAorICAgICAgICAvLyBjb250ZW50cyBwaXhlbHMgdG8gdGhlIGxlZnQgb2YgaXQu
CisgICAgICAgIHFyZWFsIGNhcmV0T2Zmc2V0ID0gbV92aWV3cG9ydEhhbmRsZXItPnZpZXdwb3J0
Q29vcmRGcm9tQ1NTKGNhcmV0QXJlYS54KCkpIC0gZW5kQXJlYS54KCk7CisgICAgICAgIHggPSBx
TWluKHZpZXdwb3J0UmVjdC53aWR0aCgpIC0gKGNhcmV0T2Zmc2V0ICsgYm9yZGVyT2Zmc2V0KSAq
IGVuZEl0ZW1TY2FsZSwgYm9yZGVyT2Zmc2V0ICogZW5kSXRlbVNjYWxlKTsKKyAgICB9CisKKyAg
ICBjb25zdCBRUG9pbnRGIGhvdHNwb3QgPSBRUG9pbnRGKGVuZEFyZWEueCgpLCBlbmRBcmVhLmNl
bnRlcigpLnkoKSk7CisgICAgY29uc3QgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSBRUG9pbnRG
KHgsIC8qIEZJWE1FOiB2aXNpYmxlQ2VudGVyICovIHZpZXdwb3J0UmVjdC5jZW50ZXIoKS55KCkp
OworCisgICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGhvdHNwb3QgKiBlbmRJdGVtU2NhbGUgLSB2
aWV3cG9ydEhvdHNwb3Q7CisgICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gbV92aWV3cG9ydEhhbmRs
ZXItPnBvc2l0aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUpOworCisgICAg
ZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgZW5kUG9z
aXRpb24sIGVuZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpOworCisgICAgUVJlY3RGIGVuZFZpc2li
bGVDb250ZW50UmVjdChlbmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNp
emUoKSAvIGVuZEl0ZW1TY2FsZSk7CisKKyAgICBhbmltYXRlQ29udGVudFJlY3RWaXNpYmxlKGVu
ZFZpc2libGVDb250ZW50UmVjdCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6
Onpvb21Ub0FyZWFHZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29uc3Qg
UVJlY3RGJiB0YXJnZXRBcmVhKQoreworICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEg
cmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KKyAgICBBU1NFUlQobV92aWV3cG9ydEhhbmRs
ZXItPmhhZFVzZXJJbnRlcmFjdGlvbigpKTsKKworICAgIGlmICghdGFyZ2V0QXJlYS5pc1ZhbGlk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3ZpZXdwb3J0SGFuZGxlci0+aGFzU3Vz
cGVuZGVkQ29udGVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBpbnQgbWFyZ2lu
ID0gMTA7IC8vIFdlIHdhbnQgYXQgbGVhc3QgYSBsaXR0bGUgYml0IG9mIG1hcmdpbi4KKyAgICBR
UmVjdEYgZW5kQXJlYSA9IG1fdmlld3BvcnRIYW5kbGVyLT52aWV3cG9ydFJlY3RGcm9tQ1NTKHRh
cmdldEFyZWEuYWRqdXN0ZWQoLW1hcmdpbiwgLW1hcmdpbiwgbWFyZ2luLCBtYXJnaW4pKTsKKwor
ICAgIGNvbnN0IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdS
ZWN0KCk7CisKKyAgICBxcmVhbCB0YXJnZXRDU1NTY2FsZSA9IHZpZXdwb3J0UmVjdC5zaXplKCku
d2lkdGgoKSAvIGVuZEFyZWEuc2l6ZSgpLndpZHRoKCk7CisgICAgcXJlYWwgZW5kQ1NTU2NhbGUg
PSBtX3ZpZXdwb3J0SGFuZGxlci0+aW5uZXJCb3VuZGVkQ1NTU2NhbGUocU1pbih0YXJnZXRDU1NT
Y2FsZSwgcXJlYWwoMi41KSkpOworICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IG1fdmlld3BvcnRI
YW5kbGVyLT52aWV3cG9ydFNjYWxlRnJvbUNTUyhlbmRDU1NTY2FsZSk7CisgICAgcXJlYWwgY3Vy
cmVudFNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOworCisgICAgLy8gV2Ugd2Fu
dCB0byBlbmQgdXAgd2l0aCB0aGUgdGFyZ2V0IGFyZWEgZmlsbGluZyB0aGUgd2hvbGUgd2lkdGgg
b2YgdGhlIHZpZXdwb3J0IChpZiBwb3NzaWJsZSksCisgICAgLy8gYW5kIGNlbnRyYWxpemVkIHZl
cnRpY2FsbHkgd2hlcmUgdGhlIHVzZXIgcmVxdWVzdGVkIHpvb20uIFRodXMgb3VyIGhvdHNwb3Qg
aXMgdGhlIGNlbnRlciBvZgorICAgIC8vIHRoZSB0YXJnZXRBcmVhIHgtd2lzZSBhbmQgdGhlIHJl
cXVlc3RlZCB6b29tIHBvc2l0aW9uLCB5LXdpc2UuCisgICAgY29uc3QgUVBvaW50RiBob3RzcG90
ID0gUVBvaW50RihlbmRBcmVhLmNlbnRlcigpLngoKSwgbV92aWV3cG9ydEhhbmRsZXItPnZpZXdw
b3J0Q29vcmRGcm9tQ1NTKHRvdWNoUG9pbnQueSgpKSk7CisgICAgY29uc3QgUVBvaW50RiB2aWV3
cG9ydEhvdHNwb3QgPSB2aWV3cG9ydFJlY3QuY2VudGVyKCk7CisKKyAgICBRUG9pbnRGIGVuZFBv
c2l0aW9uID0gaG90c3BvdCAqIGVuZENTU1NjYWxlIC0gdmlld3BvcnRIb3RzcG90OworCisgICAg
UVJlY3RGIGVuZFBvc1JhbmdlID0gbV92aWV3cG9ydEhhbmRsZXItPnBvc2l0aW9uUmFuZ2VGb3JD
b250ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUpOworICAgIGVuZFBvc2l0aW9uID0gYm91bmRQb3Np
dGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0
b21SaWdodCgpKTsKKworICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5kUG9zaXRp
b24gLyBlbmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOwor
CisgICAgZW51bSB7IFpvb21JbiwgWm9vbUJhY2ssIFpvb21PdXQsIE5vWm9vbSB9IHpvb21BY3Rp
b24gPSBab29tSW47CisKKyAgICBpZiAoIW1fc2NhbGVTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgLy8gWm9vbSBiYWNrIG91dCBpZiBhdHRlbXB0aW5nIHRvIHNjYWxlIHRvIHRoZSBzYW1lIGN1
cnJlbnQgc2NhbGUsIG9yCisgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gY29udGludWUgc2NhbGlu
ZyBvdXQgZnJvbSB0aGUgaW5uZXIgbW9zdCBsZXZlbC4KKyAgICAgICAgLy8gVXNlIGZ1enp5IGNv
bXBhcmUgd2l0aCBhIGZpeGVkIGVycm9yIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRoIGxhcmdpc2gg
ZGlmZmVyZW5jZXMgZHVlIHRvIHBpeGVsIHJvdW5kaW5nLgorICAgICAgICBpZiAoZnV6enlDb21w
YXJlKGVuZEl0ZW1TY2FsZSwgY3VycmVudFNjYWxlLCAwLjAxKSkgeworICAgICAgICAgICAgLy8g
SWYgbW92aW5nIHRoZSB2aWV3cG9ydCB3b3VsZCBleHBvc2UgbW9yZSBvZiB0aGUgdGFyZ2V0UmVj
dCBhbmQgbW92ZSBhdCBsZWFzdCA0MCBwaXhlbHMsIHVwZGF0ZSBwb3NpdGlvbiBidXQgZG8gbm90
IHNjYWxlIG91dC4KKyAgICAgICAgICAgIFFSZWN0RiBjdXJyZW50Q29udGVudFJlY3QodmlzaWJs
ZUNvbnRlbnRzUmVjdCgpKTsKKyAgICAgICAgICAgIFFSZWN0RiB0YXJnZXRJbnRlcnNlY3Rpb24g
PSBlbmRWaXNpYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0ZWQodGFyZ2V0QXJlYSk7CisgICAgICAg
ICAgICBpZiAoIWN1cnJlbnRDb250ZW50UmVjdC5jb250YWlucyh0YXJnZXRJbnRlcnNlY3Rpb24p
CisgICAgICAgICAgICAgICAgICAgICYmIChxQWJzKGVuZFZpc2libGVDb250ZW50UmVjdC50b3Ao
KSAtIGN1cnJlbnRDb250ZW50UmVjdC50b3AoKSkgPj0gNDAKKyAgICAgICAgICAgICAgICAgICAg
fHwgcUFicyhlbmRWaXNpYmxlQ29udGVudFJlY3QubGVmdCgpIC0gY3VycmVudENvbnRlbnRSZWN0
LmxlZnQoKSkgPj0gNDApKQorICAgICAgICAgICAgICAgIHpvb21BY3Rpb24gPSBOb1pvb207Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21CYWNrOwor
ICAgICAgICB9IGVsc2UgaWYgKGZ1enp5Q29tcGFyZShlbmRJdGVtU2NhbGUsIG1fem9vbU91dFNj
YWxlLCAwLjAxKSkKKyAgICAgICAgICAgIHpvb21BY3Rpb24gPSBab29tQmFjazsKKyAgICAgICAg
ZWxzZSBpZiAoZW5kSXRlbVNjYWxlIDwgY3VycmVudFNjYWxlKQorICAgICAgICAgICAgem9vbUFj
dGlvbiA9IFpvb21PdXQ7CisgICAgfQorCisgICAgc3dpdGNoICh6b29tQWN0aW9uKSB7CisgICAg
Y2FzZSBab29tSW46CisgICAgICAgIG1fc2NhbGVTdGFjay5hcHBlbmQoU2NhbGVTdGFja0l0ZW0o
Y3VycmVudFNjYWxlLCBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpLngoKSkpOworICAgICAg
ICBtX3pvb21PdXRTY2FsZSA9IGVuZEl0ZW1TY2FsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBab29tQmFjazogeworICAgICAgICBTY2FsZVN0YWNrSXRlbSBsYXN0U2NhbGUgPSBtX3NjYWxl
U3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgZW5kSXRlbVNjYWxlID0gbGFzdFNjYWxlLnNjYWxl
OworICAgICAgICBlbmRDU1NTY2FsZSA9IG1fdmlld3BvcnRIYW5kbGVyLT5jc3NTY2FsZUZyb21W
aWV3cG9ydChsYXN0U2NhbGUuc2NhbGUpOworICAgICAgICAvLyBSZWNhbGN1bGF0ZSBlbmRQb3Np
dGlvbiBhbmQgYm91bmQgaXQgYWNjb3JkaW5nIHRvIG5ldyBzY2FsZS4KKyAgICAgICAgZW5kUG9z
aXRpb24uc2V0WShob3RzcG90LnkoKSAqIGVuZENTU1NjYWxlIC0gdmlld3BvcnRIb3RzcG90Lnko
KSk7CisgICAgICAgIGVuZFBvc2l0aW9uLnNldFgobGFzdFNjYWxlLnhQb3NpdGlvbik7CisgICAg
ICAgIGVuZFBvc1JhbmdlID0gbV92aWV3cG9ydEhhbmRsZXItPnBvc2l0aW9uUmFuZ2VGb3JDb250
ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUpOworICAgICAgICBlbmRQb3NpdGlvbiA9IGJvdW5kUG9z
aXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UuYm90
dG9tUmlnaHQoKSk7CisgICAgICAgIGVuZFZpc2libGVDb250ZW50UmVjdCA9IFFSZWN0RihlbmRQ
b3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2Fs
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFpvb21PdXQ6CisgICAgICAgIC8v
IFVuc3RhY2sgYWxsIHNjYWxlLWxldmVscyBkZWVwZXIgdGhhbiB0aGUgbmV3IGxldmVsLCBzbyBh
IHpvb20tYmFjayB3b24ndCBlbmQgdXAgem9vbWluZyBpbi4KKyAgICAgICAgd2hpbGUgKCFtX3Nj
YWxlU3RhY2suaXNFbXB0eSgpICYmIG1fc2NhbGVTdGFjay5sYXN0KCkuc2NhbGUgPj0gZW5kSXRl
bVNjYWxlKQorICAgICAgICAgICAgbV9zY2FsZVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAg
bV96b29tT3V0U2NhbGUgPSBlbmRJdGVtU2NhbGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Tm9ab29tOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBhbmltYXRlQ29udGVudFJlY3RW
aXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7Cit9CisKK1FSZWN0RiBWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6bmVhcmVzdFZhbGlkVmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Cit7Cisg
ICAgZmxvYXQgY3NzU2NhbGUgPSBtX3ZpZXdwb3J0SGFuZGxlci0+Y3NzU2NhbGVGcm9tVmlld3Bv
cnQobV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpKTsKKyAgICBmbG9hdCBlbmRJdGVtU2NhbGUg
PSBtX3ZpZXdwb3J0SGFuZGxlci0+dmlld3BvcnRTY2FsZUZyb21DU1MobV92aWV3cG9ydEhhbmRs
ZXItPmlubmVyQm91bmRlZENTU1NjYWxlKGNzc1NjYWxlKSk7CisKKyAgICBjb25zdCBRUmVjdEYg
dmlld3BvcnRSZWN0ID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpOworICAgIFFQb2lu
dEYgdmlld3BvcnRIb3RzcG90ID0gdmlld3BvcnRSZWN0LmNlbnRlcigpOworICAgIFFQb2ludEYg
ZW5kUG9zaXRpb24gPSBtX3ZpZXdwb3J0SXRlbS0+bWFwVG9XZWJDb250ZW50KHZpZXdwb3J0SG90
c3BvdCkgKiBlbmRJdGVtU2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Q7CisKKyAgICBGbG9hdFJlY3Qg
ZW5kUG9zUmFuZ2UgPSBtX3ZpZXdwb3J0SGFuZGxlci0+cG9zaXRpb25SYW5nZUZvckNvbnRlbnRB
dFNjYWxlKGVuZEl0ZW1TY2FsZSk7CisgICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVu
ZFBvc1JhbmdlLm1pblhNaW5ZQ29ybmVyKCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5tYXhY
TWF4WUNvcm5lcigpKTsKKworICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5kUG9z
aXRpb24gLyBlbmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUp
OworCisgICAgcmV0dXJuIGVuZFZpc2libGVDb250ZW50UmVjdDsKK30KKwordm9pZCBWaWV3cG9y
dEhhbmRsZXJDbGllbnRRdDo6c2V0Q29udGVudFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBv
c2l0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpCit7CisgICAgUVBvaW50RiBuZXdQb3NpdGlvbihtX3Bh
Z2VJdGVtLT5wb3MoKSArIFFQb2ludEYocG9zaXRpb25JblZpZXdDb29yZGluYXRlcykpOworICAg
IG1fdmlld3BvcnRJdGVtLT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKKyAgICB1cGRhdGVW
aWV3cG9ydCgpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzZXRDb250ZW50
c1NjYWxlKGZsb2F0IHNjYWxlLCBib29sIGlzSW5pdGlhbFNjYWxlKQoreworICAgIGlmIChpc0lu
aXRpYWxTY2FsZSkgeworICAgICAgICBtX3pvb21PdXRTY2FsZSA9IDA7CisgICAgICAgIG1fc2Nh
bGVTdGFjay5jbGVhcigpOworICAgICAgICBzZXRDb250ZW50UmVjdFZpc2libGVQb3NpdGlvbkF0
U2NhbGUoUVBvaW50RigpLCBzY2FsZSk7CisgICAgfSBlbHNlCisgICAgICAgIHNjYWxlQ29udGVu
dChzY2FsZSk7CisKKyAgICB1cGRhdGVWaWV3cG9ydCgpOworfQorCit2b2lkIFZpZXdwb3J0SGFu
ZGxlckNsaWVudFF0OjpzZXRDb250ZW50UmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKCkKK3sKKyAg
ICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKG1fdmlld3BvcnRIYW5kbGVyKTsKKyAgICBm
bG9hdCB2YWxpZENTU1NjYWxlID0gbV92aWV3cG9ydEhhbmRsZXItPmlubmVyQm91bmRlZENTU1Nj
YWxlKG1fdmlld3BvcnRIYW5kbGVyLT5jc3NTY2FsZUZyb21WaWV3cG9ydChtX3BhZ2VJdGVtLT5j
b250ZW50c1NjYWxlKCkpKTsKKyAgICBzZXRDb250ZW50UmVjdFZpc2libGVQb3NpdGlvbkF0U2Nh
bGUobmVhcmVzdFZhbGlkVmlzaWJsZUNvbnRlbnRzUmVjdCgpLnRvcExlZnQoKSwgbV92aWV3cG9y
dEhhbmRsZXItPnZpZXdwb3J0U2NhbGVGcm9tQ1NTKHZhbGlkQ1NTU2NhbGUpKTsKK30KKwordm9p
ZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cmVxdWVzdFZpZXdwb3J0U3RhdGVVcGRhdGUoKQor
eworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK2Jvb2wgVmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6OmFsbG93c1VzZXJTY2FsaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3cG9ydEhh
bmRsZXItPmFsbG93c1VzZXJTY2FsaW5nKCk7Cit9CisKK3FyZWFsIFZpZXdwb3J0SGFuZGxlckNs
aWVudFF0OjpkZXZpY2VQaXhlbFJhdGlvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3cG9y
dEhhbmRsZXItPmRldmljZVBpeGVsUmF0aW8oKTsKK30KKworcXJlYWwgVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQ6Om1pbmltdW1TY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlld3BvcnRI
YW5kbGVyLT5taW5pbXVtU2NhbGUoKTsKK30KKworcXJlYWwgVmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6Om1heGltdW1TY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVy
LT5tYXhpbXVtU2NhbGUoKTsKK30KKworcXJlYWwgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmN1
cnJlbnRTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2Nh
bGUoKTsKK30KKworUVNpemVGIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpsYXlvdXRTaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3cG9ydEhhbmRsZXItPmxheW91dFNpemUoKTsKK30K
KworYm9vbCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPmlzRmxpY2tpbmcoKTsKK30KKwor
Ym9vbCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGFuR2VzdHVyZUFjdGl2ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVyLT5oYWRVc2VySW50ZXJhY3Rpb24oKSAmJiBt
X3ZpZXdwb3J0SXRlbS0+aXNEcmFnZ2luZygpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNs
aWVudFF0OjpwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0
IGV2ZW50VGltZXN0YW1wTWlsbGlzKQoreworICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFz
IGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KKyAgICBBU1NFUlQobV92aWV3cG9ydEhh
bmRsZXItPmhhZFVzZXJJbnRlcmFjdGlvbigpKTsKKworICAgIG1fdmlld3BvcnRJdGVtLT5oYW5k
bGVGbGlja2FibGVNb3VzZVByZXNzKHBvc2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7Cisg
ICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKK30K
Kwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUo
Y29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKK3sK
KyAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxpY2thYmxlTW91c2VNb3ZlKHBvc2l0aW9uLCBl
dmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29v
cmRpbmF0ZXMgPSBwb3NpdGlvbjsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6
cGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1l
c3RhbXBNaWxsaXMpCit7CisgICAgbV92aWV3cG9ydEl0ZW0tPmhhbmRsZUZsaWNrYWJsZU1vdXNl
UmVsZWFzZShwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIG1fbGFzdFBpbmNo
Q2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247Cit9CisKK3ZvaWQgVmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVDYW5jZWxsZWQoKQoreworICAgIC8vIFJlc2V0
IHRoZSB2ZWxvY2l0eSBzYW1wbGVzIG9mIHRoZSBmbGlja2FibGUuCisgICAgLy8gVGhpcyBzaG91
bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIHJlY29nbml6ZXIgaWYgd2UgaGF2ZSBhIHJlY29nbml6
ZWQKKyAgICAvLyBwYW4gZ2VzdHVyZSBhbmQgcmVjZWl2ZSBhIHRvdWNoIGV2ZW50IHdpdGggbXVs
dGlwbGUgdG91Y2ggcG9pbnRzCisgICAgLy8gKGllLiB0cmFuc2l0aW9uIHRvIGEgcGluY2ggZ2Vz
dHVyZSkgYXMgaXQgZG9lcyBub3QgbW92ZSB0aGUgY29udGVudAorICAgIC8vIGJhY2sgaW5zaWRl
IHZhbGlkIGJvdW5kcy4KKyAgICAvLyBXaGVuIHRoZSBwaW5jaCBnZXN0dXJlIGVuZHMsIHRoZSBj
b250ZW50IGlzIHBvc2l0aW9uZWQgYW5kIHNjYWxlZAorICAgIC8vIGJhY2sgdG8gdmFsaWQgYm91
bmRhcmllcy4KKyAgICBtX3ZpZXdwb3J0SXRlbS0+Y2FuY2VsRmxpY2soKTsKK30KKworYm9vbCBW
aWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2NhbGVBbmltYXRpb25BY3RpdmUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3NjYWxlQW5pbWF0aW9uLT5zdGF0ZSgpID09IFFBYnN0cmFjdEFuaW1hdGlv
bjo6UnVubmluZzsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6Y2FuY2VsU2Ny
b2xsQW5pbWF0aW9uKCkKK3sKKyAgICBpZiAoIXNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUgcGFuIGdlc3R1cmUgcmVjb2duaXplciByZWNl
aXZlcyBhIHRvdWNoIGJlZ2luIGV2ZW50CisgICAgLy8gZHVyaW5nIGFuIG9uZ29pbmcga2luZXRp
YyBzY3JvbGwgYW5pbWF0aW9uIG9mIGEgcHJldmlvdXMKKyAgICAvLyBwYW4gZ2VzdHVyZSwgdGhl
IGFuaW1hdGlvbiBpcyBzdG9wcGVkIGFuZCB0aGUgY29udGVudCBpcworICAgIC8vIGltbWVkaWF0
ZWx5IHBvc2l0aW9uZWQgYmFjayB0byB2YWxpZCBib3VuZGFyaWVzLgorCisgICAgbV92aWV3cG9y
dEl0ZW0tPmNhbmNlbEZsaWNrKCk7CisgICAgc2V0Q29udGVudFJlY3RUb05lYXJlc3RWYWxpZEJv
dW5kcygpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjppbnRlcnJ1cHRTY2Fs
ZUFuaW1hdGlvbigpCit7CisgICAgLy8gVGhpcyBpbnRlcnJ1cHRzIHRoZSBzY2FsZSBhbmltYXRp
b24gZXhhY3RseSB3aGVyZSBpdCBpcywgZXZlbiBpZiBpdCBpcyBvdXQgb2YgYm91bmRzLgorICAg
IG1fc2NhbGVBbmltYXRpb24tPnN0b3AoKTsKK30KKworYm9vbCBWaWV3cG9ydEhhbmRsZXJDbGll
bnRRdDo6cGluY2hHZXN0dXJlQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3cG9y
dEhhbmRsZXItPmhhZFVzZXJJbnRlcmFjdGlvbigpICYmIChtX3BpbmNoU3RhcnRTY2FsZSA+IDAp
OworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVTdGFydGVk
KGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzKQoreworICAg
IC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlv
bi4KKyAgICBBU1NFUlQobV92aWV3cG9ydEhhbmRsZXItPmhhZFVzZXJJbnRlcmFjdGlvbigpKTsK
KworICAgIGlmICghbV92aWV3cG9ydEhhbmRsZXItPmFsbG93c1VzZXJTY2FsaW5nKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2NhbGVTdGFjay5jbGVhcigpOworICAgIG1fem9vbU91dFNj
YWxlID0gMC4wOworCisgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLnJlc2V0KG5ldyBWaWV3cG9y
dFVwZGF0ZURlZmVycmVyKG1fdmlld3BvcnRIYW5kbGVyLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVy
OjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7CisKKyAgICBtX2xhc3RQaW5jaENlbnRl
ckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVz
OworICAgIG1fcGluY2hTdGFydFNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOwor
fQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVSZXF1ZXN0VXBk
YXRlKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzLCBxcmVh
bCB0b3RhbFNjYWxlRmFjdG9yKQoreworICAgIEFTU0VSVChtX3ZpZXdwb3J0SGFuZGxlci0+aGFz
U3VzcGVuZGVkQ29udGVudCgpKTsKKworICAgIGlmICghbV92aWV3cG9ydEhhbmRsZXItPmFsbG93
c1VzZXJTY2FsaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vICBDaGFuZ2VzIG9mIHRo
ZSBjZW50ZXIgcG9zaXRpb24gc2hvdWxkIG1vdmUgdGhlIHBhZ2UgZXZlbiBpZiB0aGUgem9vbSBm
YWN0b3IgZG9lcyBub3QgY2hhbmdlLgorICAgIGNvbnN0IHFyZWFsIGNzc1NjYWxlID0gbV92aWV3
cG9ydEhhbmRsZXItPmNzc1NjYWxlRnJvbVZpZXdwb3J0KG1fcGluY2hTdGFydFNjYWxlICogdG90
YWxTY2FsZUZhY3Rvcik7CisKKyAgICAvLyBBbGxvdyB6b29taW5nIG91dCBiZXlvbmQgbWltaW11
bSBzY2FsZSBvbiBwYWdlcyB0aGF0IGRvIG5vdCBleHBsaWNpdGx5IGRpc2FsbG93IGl0LgorICAg
IGNvbnN0IHFyZWFsIHRhcmdldEl0ZW1TY2FsZSA9IG1fdmlld3BvcnRIYW5kbGVyLT52aWV3cG9y
dFNjYWxlRnJvbUNTUyhtX3ZpZXdwb3J0SGFuZGxlci0+b3V0ZXJCb3VuZGVkQ1NTU2NhbGUoY3Nz
U2NhbGUpKTsKKworICAgIHNjYWxlQ29udGVudCh0YXJnZXRJdGVtU2NhbGUsIG1fdmlld3BvcnRJ
dGVtLT5tYXBUb1dlYkNvbnRlbnQocGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpKTsK
KworICAgIGNvbnN0IFFQb2ludEYgcG9zaXRpb25EaWZmID0gcGluY2hDZW50ZXJJblZpZXdwb3J0
Q29vcmRpbmF0ZXMgLSBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKKyAg
ICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5W
aWV3cG9ydENvb3JkaW5hdGVzOworCisgICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3Mo
bV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKSAtIHBvc2l0aW9uRGlmZik7CisKKyAgICAvLyBJ
bmZvcm0gdGhlIHdlYiBwcm9jZXNzIHRvIHJlbmRlciB0aGUgY3VycmVudGx5IHZpc2libGUgYXJl
YSB3aXRoIGxvdy1yZXNvbHV0aW9uIHRpbGVzIG5vdAorICAgIC8vIHRvIGV4cG9zZSB3aGl0ZSB0
aWxlcyBkdXJpbmcgcGluY2ggZ2VzdHVyZXMgYW5kIHRvIHNob3cgZml4ZWQgcG9zaXRpb24gbGF5
ZXJzIGNvcnJlY3RseS4KKyAgICAvLyBUaGUgYWN0dWFsIHNjYWxlIGlzIHJlc3RvcmVkIGFmdGVy
IHRoZSBwaW5jaCBnZXN0dXJlIGVuZHMuCisgICAgdXBkYXRlVmlld3BvcnQoUVBvaW50RigpLCAx
KTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGluY2hHZXN0dXJlRW5kZWQo
KQoreworICAgIEFTU0VSVChtX3ZpZXdwb3J0SGFuZGxlci0+aGFzU3VzcGVuZGVkQ29udGVudCgp
KTsKKworICAgIGlmICghbV92aWV3cG9ydEhhbmRsZXItPmFsbG93c1VzZXJTY2FsaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fcGluY2hTdGFydFNjYWxlID0gLTE7CisKKyAgICBhbmlt
YXRlQ29udGVudFJlY3RWaXNpYmxlKG5lYXJlc3RWYWxpZFZpc2libGVDb250ZW50c1JlY3QoKSk7
CisgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLnJlc2V0KCk7IC8vIENsZWFyIGFmdGVyIHN0YXJ0
aW5nIHBvdGVudGlhbCBhbmltYXRpb24sIHdoaWNoIHRha2VzIG92ZXIgZGVmZXJyaW5nLgorfQor
Cit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKQor
eworICAgIG1fcGluY2hTdGFydFNjYWxlID0gLTE7CisgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVy
LnJlc2V0KCk7Cit9CisKK1FSZWN0RiBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dmlzaWJsZUNv
bnRlbnRzUmVjdCgpIGNvbnN0Cit7CisgICAgY29uc3QgUVJlY3RGIHZpc2libGVSZWN0KG1fdmll
d3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKS5pbnRlcnNlY3RlZChtX3BhZ2VJdGVtLT5ib3VuZGlu
Z1JlY3QoKSkpOworICAgIHJldHVybiBtX3ZpZXdwb3J0SXRlbS0+bWFwUmVjdFRvV2ViQ29udGVu
dCh2aXNpYmxlUmVjdCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmNvbnRl
bnRzU2l6ZUNoYW5nZWQoKQoreworICAgIC8vIEVtaXQgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHNv
IHRoYXQgaXQgY2FuIGJlIHZlcmlmaWVkIHRoYXQKKyAgICAvLyB3ZSBkaWRuJ3QgZG8gc2NhbGUg
YWRqdXN0bWVudC4KKyAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVz
dCgpLT5jb250ZW50c1NjYWxlQ29tbWl0dGVkKCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQ6OnZpc2libGVDb250ZW50c0NoYW5nZWQoKQoreworICAgIHFyZWFsIHNjYWxlID0g
bV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOworCisgICAgaWYgKHNjYWxlICE9IG1fbGFzdENv
bW1pdHRlZFNjYWxlKQorICAgICAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwo
KS0+dGVzdCgpLT5jb250ZW50c1NjYWxlQ29tbWl0dGVkKCk7CisgICAgbV9sYXN0Q29tbWl0dGVk
U2NhbGUgPSBzY2FsZTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHVwZGF0ZVBhaW50Tm9kZSBpcyBh
bHdheXMgY2FsbGVkIGJlZm9yZSBwYWludGluZy4KKyAgICBtX3BhZ2VJdGVtLT51cGRhdGUoKTsK
K30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dmlld3BvcnRBdHRyaWJ1dGVzQ2hh
bmdlZCgpCit7CisgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3Qo
KS0+ZGV2aWNlUGl4ZWxSYXRpb0NoYW5nZWQoKTsKKyAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5l
eHBlcmltZW50YWwoKS0+dGVzdCgpLT52aWV3cG9ydENoYW5nZWQoKTsKK30KKwordm9pZCBWaWV3
cG9ydEhhbmRsZXJDbGllbnRRdDo6dXBkYXRlVmlld3BvcnQoY29uc3QgUVBvaW50RiYgdHJhamVj
dG9yeSwgcXJlYWwgc2NhbGUpCit7CisgICAgRmxvYXRSZWN0IGN1cnJlbnRWaXNpYmxlUmVjdCh2
aXNpYmxlQ29udGVudHNSZWN0KCkpOworICAgIGZsb2F0IHZpZXdwb3J0U2NhbGUgPSAoc2NhbGUg
PCAwKSA/IHZpZXdwb3J0U2NhbGVGb3JSZWN0KGN1cnJlbnRWaXNpYmxlUmVjdCkgOiBzY2FsZTsK
KyAgICBtX3ZpZXdwb3J0SGFuZGxlci0+dXBkYXRlVmlzaWJsZUNvbnRlbnRzUmVjdChjdXJyZW50
VmlzaWJsZVJlY3QsIHZpZXdwb3J0U2NhbGUsIHRyYWplY3RvcnkpOworfQorCit2b2lkIFZpZXdw
b3J0SGFuZGxlckNsaWVudFF0OjpzY2FsZUNvbnRlbnQocXJlYWwgaXRlbVNjYWxlLCBjb25zdCBR
UG9pbnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzKQoreworICAgIFFQb2ludEYgb2xkUGluY2hD
ZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50KGNlbnRl
ckluQ1NTQ29vcmRpbmF0ZXMpOworICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2NhbGUoaXRl
bVNjYWxlKTsKKyAgICBRUG9pbnRGIG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCA9IG1fdmlld3Bv
cnRJdGVtLT5tYXBGcm9tV2ViQ29udGVudChjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzKTsKKyAgICBt
X3ZpZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyhtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygp
ICsgKG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCAtIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9ydCkp
OworfQorCitmbG9hdCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dmlld3BvcnRTY2FsZUZvclJl
Y3QoY29uc3QgUVJlY3RGJiByZWN0KSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4obV92aWV3cG9ydEl0ZW0tPndpZHRoKCkpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlY3Qu
d2lkdGgoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjaW5jbHVkZSAibW9jX1Zp
ZXdwb3J0SGFuZGxlckNsaWVudFF0LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjkwMmI0ZjU0
YWEzNTZmZTA5NGQ5ZDE0MWJjNTljYTkzNTkwNWUzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oCkBAIC0wLDAg
KzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmphbWlu
IFBvdWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFZpZXdwb3J0SGFuZGxl
ckNsaWVudFF0X2gKKyNkZWZpbmUgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXRfaAorCisjaW5jbHVk
ZSAiVmlld3BvcnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5kbGVyQ2xpZW50Lmgi
CisjaW5jbHVkZSA8UU9iamVjdD4KKyNpbmNsdWRlIDxRUG9pbnRGPgorI2luY2x1ZGUgPFFTY29w
ZWRQb2ludGVyPgorI2luY2x1ZGUgPFFWYXJpYW50PgorI2luY2x1ZGUgPFFWYXJpYW50QW5pbWF0
aW9uPgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFRdWlja1dlYlBhZ2U7CitjbGFzcyBR
UXVpY2tXZWJWaWV3OworY2xhc3MgUVJlY3RGOworUVRfRU5EX05BTUVTUEFDRQorCitjbGFzcyBR
V2ViS2l0VGVzdDsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFZpZXdwb3J0SGFuZGxl
ckNsaWVudFF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBWaWV3cG9ydEhhbmRsZXJDbGllbnQg
eworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKworICAgIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0
KFFRdWlja1dlYlZpZXcqLCBRUXVpY2tXZWJQYWdlKik7CisgICAgflZpZXdwb3J0SGFuZGxlckNs
aWVudFF0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIHBvc2l0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlLCBib29sIGlzSW5pdGlhbFNjYWxlKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudFJlY3RUb05lYXJlc3RWYWxpZEJvdW5kcygpOworCisgICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RWaWV3cG9ydFN0YXRlVXBkYXRlKCk7CisgICAgdmlydHVhbCB2
b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaWJsZUNvbnRl
bnRzQ2hhbmdlZCgpOworICAgIHZpcnR1YWwgdm9pZCB2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2Vk
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRIYW5kbGVyKFZpZXdwb3J0SGFuZGxl
ciogaGFuZGxlcikgeyBtX3ZpZXdwb3J0SGFuZGxlciA9IGhhbmRsZXI7IH0KKworICAgIC8vIEFk
ZGl0aW9uYWwgbWV0aG9kcyBjdXJyZW50bHkgb25seSByZWxldmFudCBpbiB0aGUgUVF1aWNrIGNv
bnRleHQuCisgICAgdm9pZCB0b3VjaEJlZ2luKCk7CisgICAgdm9pZCB0b3VjaEVuZCgpOworCisg
ICAgYm9vbCBzY3JvbGxBbmltYXRpb25BY3RpdmUoKSBjb25zdDsKKyAgICB2b2lkIGNhbmNlbFNj
cm9sbEFuaW1hdGlvbigpOworCisgICAgYm9vbCBwYW5HZXN0dXJlQWN0aXZlKCkgY29uc3Q7Cisg
ICAgdm9pZCBwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0
IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB2b2lkIHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRl
KGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwor
ICAgIHZvaWQgcGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQg
ZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQgcGFuR2VzdHVyZUNhbmNlbGxlZCgpOwor
CisgICAgYm9vbCBzY2FsZUFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0OworICAgIHZvaWQgaW50ZXJy
dXB0U2NhbGVBbmltYXRpb24oKTsKKworICAgIGJvb2wgcGluY2hHZXN0dXJlQWN0aXZlKCkgY29u
c3Q7CisgICAgdm9pZCBwaW5jaEdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzKTsKKyAgICB2b2lkIHBpbmNoR2VzdHVyZVJlcXVlc3RV
cGRhdGUoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMsIHFy
ZWFsIHRvdGFsU2NhbGVGYWN0b3IpOworICAgIHZvaWQgcGluY2hHZXN0dXJlRW5kZWQoKTsKKyAg
ICB2b2lkIHBpbmNoR2VzdHVyZUNhbmNlbGxlZCgpOworCisgICAgdm9pZCB6b29tVG9BcmVhR2Vz
dHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHRvdWNoUG9pbnQsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0
QXJlYSk7CisgICAgdm9pZCBmb2N1c0VkaXRhYmxlQXJlYShjb25zdCBRUmVjdEYmIGNhcmV0QXJl
YSwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKTsKKworcHJpdmF0ZSBRX1NMT1RTOgorICAgIC8v
IFJlc3BvbmQgdG8gY2hhbmdlcyBvZiBwb3NpdGlvbiB0aGF0IGFyZSBub3QgZHJpdmVuIGJ5IHVz
LgorICAgIHZvaWQgcGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKTsKKworICAgIHZvaWQgc2NhbGVB
bmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0
QW5pbWF0aW9uOjpTdGF0ZSk7CisKKyAgICB2b2lkIGZsaWNrTW92ZVN0YXJ0ZWQoKTsgLy8gQ2Fs
bGVkIHdoZW4gcGFubmluZyBzdGFydHMuCisgICAgdm9pZCBmbGlja01vdmVFbmRlZCgpOyAvLyAg
IENhbGxlZCB3aGVuIHBhbm5pbmcgKCsga2luZXRpYyBhbmltYXRpb24pIGVuZHMuCisKK3ByaXZh
dGU6CisgICAgY2xhc3MgU2NhbGVBbmltYXRpb24gOiBwdWJsaWMgUVZhcmlhbnRBbmltYXRpb24g
eworICAgICAgICBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdCogbV9oYW5kbGVyQ2xpZW50OworICAg
IHB1YmxpYzoKKyAgICAgICAgU2NhbGVBbmltYXRpb24oVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQq
IHBhcmVudCkKKyAgICAgICAgICAgIDogUVZhcmlhbnRBbmltYXRpb24ocGFyZW50KQorICAgICAg
ICAgICAgLCBtX2hhbmRsZXJDbGllbnQocGFyZW50KQorICAgICAgICB7IH0KKworICAgICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ3VycmVudFZhbHVlKGNvbnN0IFFWYXJpYW50Jik7CisgICAgfTsK
KworICAgIHN0cnVjdCBTY2FsZVN0YWNrSXRlbSB7CisgICAgICAgIFNjYWxlU3RhY2tJdGVtKHFy
ZWFsIHNjYWxlLCBxcmVhbCB4UG9zaXRpb24pCisgICAgICAgICAgICA6IHNjYWxlKHNjYWxlKQor
ICAgICAgICAgICAgLCB4UG9zaXRpb24oeFBvc2l0aW9uKQorICAgICAgICB7IH0KKworICAgICAg
ICBxcmVhbCBzY2FsZTsKKyAgICAgICAgcXJlYWwgeFBvc2l0aW9uOworICAgIH07CisKKyAgICBm
cmllbmQgY2xhc3MgU2NhbGVBbmltYXRpb247CisgICAgZnJpZW5kIGNsYXNzIDo6UVdlYktpdFRl
c3Q7CisKKyAgICBWaWV3cG9ydEhhbmRsZXIqIG1fdmlld3BvcnRIYW5kbGVyOworICAgIFFRdWlj
a1dlYlZpZXcqIGNvbnN0IG1fdmlld3BvcnRJdGVtOworICAgIFFRdWlja1dlYlBhZ2UqIGNvbnN0
IG1fcGFnZUl0ZW07CisKKyAgICBib29sIGFsbG93c1VzZXJTY2FsaW5nKCkgY29uc3Q7CisgICAg
cXJlYWwgZGV2aWNlUGl4ZWxSYXRpbygpIGNvbnN0OworICAgIHFyZWFsIG1pbmltdW1TY2FsZSgp
IGNvbnN0OworICAgIHFyZWFsIG1heGltdW1TY2FsZSgpIGNvbnN0OworICAgIHFyZWFsIGN1cnJl
bnRTY2FsZSgpIGNvbnN0OworICAgIFFTaXplRiBsYXlvdXRTaXplKCkgY29uc3Q7CisKKyAgICBm
bG9hdCB2aWV3cG9ydFNjYWxlRm9yUmVjdChjb25zdCBRUmVjdEYmKSBjb25zdDsKKyAgICBRUmVj
dEYgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OworICAgIFFSZWN0RiBuZWFyZXN0VmFsaWRW
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KGNv
bnN0IFFQb2ludEYmIHRyYWplY3RvcnkgPSBRUG9pbnRGKCksIHFyZWFsIHNjYWxlID0gLTEpOwor
ICAgIHZvaWQgc2V0Q29udGVudFJlY3RWaXNpYmxlUG9zaXRpb25BdFNjYWxlKGNvbnN0IFFQb2lu
dEYmIGxvY2F0aW9uLCBxcmVhbCBpdGVtU2NhbGUpOworICAgIHZvaWQgYW5pbWF0ZUNvbnRlbnRS
ZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmIGNvbnRlbnRSZWN0KTsKKyAgICB2b2lkIHNjYWxlQ29u
dGVudChxcmVhbCBpdGVtU2NhbGUsIGNvbnN0IFFQb2ludEYmIGNlbnRlckluQ1NTQ29vcmRpbmF0
ZXMgPSBRUG9pbnRGKCkpOworCisgICAgUVNjb3BlZFBvaW50ZXI8Vmlld3BvcnRVcGRhdGVEZWZl
cnJlcj4gbV9zY2FsZVVwZGF0ZURlZmVycmVyOworICAgIFFTY29wZWRQb2ludGVyPFZpZXdwb3J0
VXBkYXRlRGVmZXJyZXI+IG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXI7CisgICAgUVNjb3BlZFBvaW50
ZXI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV90b3VjaFVwZGF0ZURlZmVycmVyOworICAgIFFT
Y29wZWRQb2ludGVyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fYW5pbWF0aW9uVXBkYXRlRGVm
ZXJyZXI7CisKKyAgICBTY2FsZUFuaW1hdGlvbiogbV9zY2FsZUFuaW1hdGlvbjsKKyAgICBRUG9p
bnRGIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOworICAgIFFQb2ludEYg
bV9sYXN0U2Nyb2xsUG9zaXRpb247CisgICAgcXJlYWwgbV9waW5jaFN0YXJ0U2NhbGU7CisgICAg
cXJlYWwgbV9sYXN0Q29tbWl0dGVkU2NhbGU7CisgICAgcXJlYWwgbV96b29tT3V0U2NhbGU7Cisg
ICAgUUxpc3Q8U2NhbGVTdGFja0l0ZW0+IG1fc2NhbGVTdGFjazsKKyAgICBib29sIG1faWdub3Jl
Vmlld3BvcnRDaGFuZ2VzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdF9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTBhOTQwMGI3MDkyYjExOWE1ZjE2MjI4NzRmM2EyOWU4
ODI1MTJhOS4uMDFlYTAwNDc1OTYyZjA5NmQ5NWY3NGFlYTBhYzRkZTY4YTQ1MzE3OCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDEyLTA4LTMxICBBbmRyYXMgQmVjc2kgIDxhbmRyYXMuYmVjc2lAbm9raWEuY29tPgor
CisgICAgICAgIFtXSzJdIE1ha2UgW1F0XVZpZXdwb3J0SGFuZGxlciBjcm9zcyBwbGF0Zm9ybQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgaW5p
dGlhbCBzY2FsZSBmcm9tIHZpZXdwb3J0IGluZm8gaXRlbSBzaW5jZSBpdCBpcworICAgICAgICBz
ZXQgdG8gLTEgYWZ0ZXIgYXBwbGllZCB0aHVzIGl0IGRvZXMgbm90IGhvbGQgYW55IHZhbHVhYmxl
CisgICAgICAgIGluZm9ybWF0aW9uLgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL1Zp
ZXdwb3J0SW5mb0l0ZW0ucW1sOgorCiAyMDEyLTA4LTMxICBCYWxhenMgS2VsZW1lbiAgPGtiYWxh
enNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIEltYWdlRGlmZiBvdXRwdXQgaXMgbm90IGlu
IHRoZSBleHBlY3RlZCBmb3JtIGlmIGltYWdlIGRpbWVuc2lvbnMgZGlmZmVyCmRpZmYgLS1naXQg
YS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvVmlld3BvcnRJbmZvSXRlbS5xbWwgYi9Ub29scy9N
aW5pQnJvd3Nlci9xdC9xbWwvVmlld3BvcnRJbmZvSXRlbS5xbWwKaW5kZXggOTJhMmEwNDFhZWIy
MGI2ZDQ3NjBjYjQ5NDgyNTExMmM4YTI3YWY4Zi4uNjg0Y2M3MDliNDk3MTg1ZjllMWIzMDU4YjBk
OGI0OWEwMTA5YmFlOCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1ZpZXdw
b3J0SW5mb0l0ZW0ucW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9WaWV3cG9ydElu
Zm9JdGVtLnFtbApAQCAtODQsMTEgKzg0LDYgQEAgSXRlbSB7CiAKICAgICAgICAgICAgICAgICBD
b2x1bW4gewogICAgICAgICAgICAgICAgICAgICBUZXh0IHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHQ6ICJJbml0aWFsIHNjYWxlOiAiICsgZm9ybWF0U2NhbGUodGVzdC52aWV3cG9ydC5p
bml0aWFsU2NhbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb250LmZhbWlseTogdGV4dEJv
eC5mb250RmFtaWx5Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dEJveC5mb250
Q29sb3IKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBUZXh0IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJNaW5pbXVtIHNjYWxlOiAiICsgZm9ybWF0
U2NhbGUodGVzdC52aWV3cG9ydC5taW5pbXVtU2NhbGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBmb250LmZhbWlseTogdGV4dEJveC5mb250RmFtaWx5CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2xvcjogdGV4dEJveC5mb250Q29sb3IK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161902</attachid>
            <date>2012-09-03 05:18:03 -0700</date>
            <delta_ts>2012-09-03 05:53:26 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-WK2-Make-Qt-ViewportHandler-cross-platform.patch</filename>
            <type>text/plain</type>
            <size>107970</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSA1Njc1Y2ZkZDc3YmZhZGFhYzhhOTM3OGFkMTI5OTRlN2E5NDc2OWJhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IE1vbiwgMyBTZXAgMjAxMiAxNDoxNTozNSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtX
SzJdIE1ha2UgW1F0XVZpZXdwb3J0SGFuZGxlciBjcm9zcyBwbGF0Zm9ybQoKLS0tCiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2MyArKysrKwog
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcg
Ky0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaCAgIHwg
ICAxIC0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAg
IHwgIDIzICstCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdf
cC5oICB8ICAgNCArLQogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
X3BfcC5oICAgfCAgMTQgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmtp
dHRlc3QuY3BwICAgIHwgIDIxICstCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld3BvcnRI
YW5kbGVyLmNwcCAgICAgICB8IDI1MiArKysrKysrCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Vmlld3BvcnRIYW5kbGVyLmggICAgICAgICB8IDE0MiArKysrCiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVmlld3BvcnRIYW5kbGVyQ2xpZW50LmggICB8ICA1MSArKwogLi4uL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwICAgfCAgIDIgKy0KIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmggIHwgICA0ICstCiAuLi4vVUlQ
cm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwICAgICAgICB8ICAgMiArLQogLi4u
L1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwICAgICAgfCAgIDIgKy0K
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5jcHAgIHwgNzYw
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmll
d3BvcnRIYW5kbGVyLmggICAgfCAxNzggLS0tLS0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwIHwgICA0ICstCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggICB8ICAgOCArLQogLi4uL1VJUHJvY2Vzcy9xdC9W
aWV3cG9ydEhhbmRsZXJDbGllbnRRdC5jcHAgICAgICAgfCA1NzQgKysrKysrKysrKysrKysrKwog
Li4uL1dlYktpdDIvVUlQcm9jZXNzL3F0L1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmggfCAxNTkg
KysrKysKIFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDEzICsKIFRvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9WaWV3cG9ydEluZm9JdGVtLnFtbCAg
ICAgIHwgICA1IC0KIDIyIGZpbGVzIGNoYW5nZWQsIDE0MDIgaW5zZXJ0aW9ucygrKSwgOTg3IGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9W
aWV3cG9ydEhhbmRsZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1ZpZXdwb3J0SGFuZGxlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1ZpZXdwb3J0SGFuZGxlckNsaWVudC5oCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNwcAogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxl
ci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1ZpZXdw
b3J0SGFuZGxlckNsaWVudFF0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDEx
MzI3N2QuLjM0ZGQ2OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjYgQEAKKzIwMTItMDktMDMg
IEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+CisKKyAgICAgICAgW1dLMl0g
TWFrZSBbUXRdVmlld3BvcnRIYW5kbGVyIGNyb3NzIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTI1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBRdFZpZXdwb3J0SGFuZGxl
ciBpbmNsdWRlcyBiZWhhdmlvdXIgdGhhdCBpcyBub3QKKyAgICAgICAgcGxhdGZvcm0gc3BlY2lm
aWMsIHRvZ2V0aGVyIHdpdGggaG9va3MgdG8gdGhlIFF0UXVpY2sgQVBJCisgICAgICAgIGxheWVy
LgorCisgICAgICAgIEEgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb24gd291bGQg
YWxsb3cgb3RoZXIgcG9ydHMKKyAgICAgICAgdG8gdXNlIHRoZSB2aWV3cG9ydCBmdW5jdGlvbmFs
aXR5IHByb3ZpZGVkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHBsYXRmb3Jt
IGluZGVwZW5kZW50IFZpZXdwb3J0SGFuZGxlcgorICAgICAgICBjbGFzcyB0aGF0IGlzIHJlc3Bv
bnNpYmxlIGZvciBoYW5kbGluZyByZXF1ZXN0cyBmcm9tIHRoZSB3ZWIKKyAgICAgICAgcHJvY2Vz
cyAoZWcuIGNvbnRlbnQgc2l6ZSBjaGFuZ2VzLCB2aWV3cG9ydCBhdHRyaWJ1dGVzIGNoYW5nZXMK
KyAgICAgICAgYW5kIHNjcm9sbCBwb3NpdGlvbiByZXF1ZXN0cykuCisKKyAgICAgICAgVmlld3Bv
cnRIYW5kbGVyIGFsc28gYWN0cyBhcyBhIHByb3h5IGZvciBub3RpZmljYXRpb25zIHRvIHRoZQor
ICAgICAgICB3ZWIgcHJvY2VzcyBmb3IgY2hhbmdlcyBpbiB0aGUgdmlld3BvcnQgc3RhdGUgKGVn
LiB2aWV3cG9ydAorICAgICAgICBzaXplLCB2aXNpYmxlIHJlY3QsIGNvbnRlbnQgc2NhbGUgYW5k
IG1vdmVtZW50IHRyYWplY3RvcnkpLgorCisgICAgICAgIFVwZGF0ZXMgb2YgdGhlIHZpZXdwb3J0
IHN0YXRlIGFyZSBwdXNoZWQgdG8gdGhlIFZpZXdwb3J0SGFuZGxlcgorICAgICAgICBieSBhIHBs
YXRmb3JtIHNwZWNpZmljIGNsaWVudCBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHRoZQorICAgICAg
ICBWaWV3cG9ydEhhbmRsZXJDbGllbnQgYWJzdHJhY3QgaW50ZXJmYWNlLgorICAgICAgICBSZXF1
ZXN0cyBmcm9tIHRoZSB3ZWIgcHJvY2VzcyBhcmUgYWxzbyBhY3RlZCBvbiBieSB0aGUgY2xpZW50
CisgICAgICAgIHdoaWNoIHByb3ZpZGVzIGhvb2tzIHRvIHRoZSBRdCBBUEkgbGF5ZXIuCisKKyAg
ICAgICAgRm9yIG5vdyBvbmx5IFZpZXdwb3J0SGFuZGxlckNsaWVudFF0IGltcGxlbWVudHMgdGhl
CisgICAgICAgIGNsaWVudCBpbnRlcmZhY2UgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBRUXVpY2sg
c3BlY2lmaWMKKyAgICAgICAgYmVoYXZpb3VyIChnZXN0dXJlcywgYW5pbWF0aW9ucyBldGMpLgor
CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnBhZ2VfcF9wLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpvbkNvbXBvbmVudENvbXBsZXRl
KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjp+UVF1aWNrV2ViVmll
d0ZsaWNrYWJsZVByaXZhdGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZh
dGU6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3
RmxpY2thYmxlUHJpdmF0ZTo6dXBkYXRlVmlld3BvcnRTaXplKToKKyAgICAgICAgKFFRdWlja1dl
YlZpZXdGbGlja2FibGVQcml2YXRlOjpwYWdlRGlkUmVxdWVzdFNjcm9sbCk6CisgICAgICAgIChR
UXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmg6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnZpZXdwb3J0
SGFuZGxlckNsaWVudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAg
IChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xd2Via2l0dGVzdC5jcHA6CisgICAgICAgIChRV2ViS2l0VGVzdDo6dmlld3BvcnQpOgor
ICAgICAgICAoUVdlYktpdFRlc3Q6OmRldmljZVBpeGVsUmF0aW8pOgorICAgICAgICAoUVdlYktp
dFRlc3Q6OmNvbnRlbnRzU2NhbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9WaWV3cG9ydEhhbmRs
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmJvdW5k
KToKKyAgICAgICAgKFdlYktpdDo6ZnV6enlDb21wYXJlKToKKyAgICAgICAgKFdlYktpdDo6Ym91
bmRQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OlZp
ZXdwb3J0VXBkYXRlRGVmZXJyZXIpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydFVwZGF0ZURl
ZmVycmVyOjp+Vmlld3BvcnRVcGRhdGVEZWZlcnJlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdw
b3J0SGFuZGxlcjo6Vmlld3BvcnRIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyOjpjb252ZXJ0RnJvbVZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyOjpjb252ZXJ0VG9WaWV3cG9ydCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFu
ZGxlcjo6aW5uZXJCb3VuZGVkQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdw
b3J0SGFuZGxlcjo6b3V0ZXJCb3VuZGVkQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdwb3J0SGFuZGxlcjo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktp
dDo6Vmlld3BvcnRIYW5kbGVyOjpwYWdlRGlkUmVxdWVzdFNjcm9sbCk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdwb3J0SGFuZGxlcjo6dXBkYXRlVmlld3BvcnRTaXplKToKKyAgICAgICAgKFdlYktp
dDo6Vmlld3BvcnRIYW5kbGVyOjp1cGRhdGVWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjpzeW5jVmlzaWJsZUNvbnRlbnRzKToKKyAgICAgICAg
KFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXI6OnN1c3BlbmRDb250ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjpyZXN1bWVDb250ZW50KToKKyAgICAgICAgKFdl
YktpdDo6Vmlld3BvcnRIYW5kbGVyOjpwb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2NhbGUpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9WaWV3cG9ydEhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChWaWV3cG9ydFVwZGF0ZURlZmVy
cmVyKToKKyAgICAgICAgKFZpZXdwb3J0SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdw
b3J0SGFuZGxlcjo6flZpZXdwb3J0SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0
SGFuZGxlcjo6aGFzU3VzcGVuZGVkQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0
SGFuZGxlcjo6aGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyOjphbGxvd3NVc2VyU2NhbGluZyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFu
ZGxlcjo6Y29udGVudHNMYXlvdXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5k
bGVyOjpkZXZpY2VQaXhlbFJhdGlvKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVy
OjptaW5pbXVtQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxl
cjo6bWF4aW11bUNvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXI6OnNldEhhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1ZpZXdwb3J0
SGFuZGxlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFZpZXdwb3J0SGFuZGxlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdwb3J0SGFuZGxlckNsaWVudDo6flZpZXdwb3J0SGFuZGxlckNsaWVudCk6CisgICAgICAg
ICogVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpRdEdlc3R1cmVSZWNvZ25pemVyOjp2aWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBh
Z2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SGFuZGxlcik6CisgICAgICAgICogVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFF0V2ViUGFnZUV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6dmlld3BvcnRIYW5kbGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRR
dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpTY2FsZUFuaW1h
dGlvbjo6dXBkYXRlQ3VycmVudFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQ6On5WaWV3cG9ydEhhbmRsZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzZXRDb250ZW50UmVjdFZpc2libGVQb3NpdGlvbkF0
U2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6YW5pbWF0
ZUNvbnRlbnRSZWN0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNs
aWVudFF0OjpmbGlja01vdmVTdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQ6OmZsaWNrTW92ZUVuZGVkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ6OnBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktp
dDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNjYWxlQW5pbWF0aW9uU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnRvdWNoQmVnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dG91Y2hFbmQpOgorICAg
ICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6Zm9jdXNFZGl0YWJsZUFyZWEp
OgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6em9vbVRvQXJlYUdl
c3R1cmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojpu
ZWFyZXN0VmFsaWRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQ6OnNldENvbnRlbnRzUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2V0Q29udGVudHNTY2FsZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzZXRDb250ZW50c1JlY3RUb05lYXJlc3RW
YWxpZEJvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojpy
ZXF1ZXN0Vmlld3BvcnRVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJD
bGllbnRRdDo6YWxsb3dzVXNlclNjYWxpbmcpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhh
bmRsZXJDbGllbnRRdDo6ZGV2aWNlUGl4ZWxSYXRpbyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdw
b3J0SGFuZGxlckNsaWVudFF0OjptaW5pbXVtQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjptYXhpbXVtQ29udGVudHNTY2FsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpjdXJyZW50Q29udGVudHNTY2Fs
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojpjb250ZW50c0xh
eW91dFNpemUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2Ny
b2xsQW5pbWF0aW9uQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xp
ZW50UXQ6OnBhbkdlc3R1cmVBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6cGFuR2VzdHVyZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9y
dEhhbmRsZXJDbGllbnRRdDo6cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGFuR2VzdHVyZUVuZGVkKToKKyAgICAgICAg
KFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVDYW5jZWxsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2NhbGVBbmltYXRpb25B
Y3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6Y2FuY2Vs
U2Nyb2xsQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6OmludGVycnVwdFNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZUFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVTdGFydGVkKToKKyAgICAgICAgKFdl
YktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUp
OgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGluY2hHZXN0dXJl
RW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGluY2hH
ZXN0dXJlQ2FuY2VsbGVkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktpdDo6Vmll
d3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmRpZENoYW5nZVZpc2libGVDb250ZW50cyk6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dXBkYXRl
Vmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2Nh
bGVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnZp
ZXdwb3J0U2NhbGVGb3JSZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoVmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGll
bnRRdDo6c2V0Vmlld3BvcnRIYW5kbGVyKToKKyAgICAgICAgKFNjYWxlQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OlNjYWxlQW5pbWF0aW9uOjpT
Y2FsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0
OjpTY2FsZVN0YWNrSXRlbTo6U2NhbGVTdGFja0l0ZW0pOgorICAgICAgICAoU2NhbGVTdGFja0l0
ZW0pOgorCiAyMDEyLTA5LTAzICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBp
bnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBTa2lwIEVXSzJVbml0VGVzdEJhc2UuZXdr
X2Nvb2tpZV9tYW5hZ2VyX3Blcm1hbmVudF9zdG9yYWdlIEFQSSB0ZXN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRl
eCAyMWUyZGMxLi4xZTcwMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTIxOSw2ICsyMTksOCBAQCBIRUFE
RVJTICs9IFwKICAgICBVSVByb2Nlc3MvUHJvY2Vzc01vZGVsLmggXAogICAgIFVJUHJvY2Vzcy9S
ZXNwb25zaXZlbmVzc1RpbWVyLmggXAogICAgIFVJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oIFwKKyAg
ICBVSVByb2Nlc3MvVmlld3BvcnRIYW5kbGVyLmggXAorICAgIFVJUHJvY2Vzcy9WaWV3cG9ydEhh
bmRsZXJDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuaCBcCiAg
ICAgVUlQcm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaCBcCiAgICAgVUlQ
cm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oIFwKQEAgLTU2MCw2ICs1NjIsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBVSVByb2Nlc3MvUGx1Z2lucy9xdC9QbHVnaW5Qcm9jZXNzUHJveHlRdC5jcHAg
XAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcCBcCisgICAgVUlQcm9jZXNzL1Zp
ZXdwb3J0SGFuZGxlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmNw
cCBcCiAgICAgVUlQcm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwIFwK
ICAgICBVSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcCBcCkBAIC03NzksOSArNzgyLDkg
QEAgY29udGFpbnMoREVGSU5FUywgSEFWRV9RVFFVSUNLPTEpIHsKICAgICAgICAgVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZVBvbGljeUNsaWVudC5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0V2Vi
UGFnZVNHTm9kZS5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVVJQ2xpZW50Lmgg
XAotICAgICAgICBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuaCBcCiAgICAgICAgIFVJ
UHJvY2Vzcy9xdC9RdFdlYlVuZG9Db250cm9sbGVyLmggXAogICAgICAgICBVSVByb2Nlc3MvcXQv
UXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaCBcCisgICAgICAgIFVJUHJvY2Vzcy9xdC9WaWV3cG9y
dEhhbmRsZXJDbGllbnRRdC5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51
UHJveHlRdC5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYkdlb2xvY2F0aW9uUHJvdmlkZXJR
dC5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYlBvcHVwTWVudVByb3h5UXQuaApAQCAtODEz
LDcgKzgxNiw3IEBAIGNvbnRhaW5zKERFRklORVMsIEhBVkVfUVRRVUlDSz0xKSB7CiAgICAgICAg
IFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCiAgICAgICAgIFVJUHJv
Y2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICAgICAgVUlQcm9jZXNz
L3F0L1F0VGFwR2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKLSAgICAgICAgVUlQcm9jZXNzL3F0L1F0
Vmlld3BvcnRIYW5kbGVyLmNwcCBcCisgICAgICAgIFVJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdC5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94
eVF0LmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9XZWJHZW9sb2NhdGlvblByb3ZpZGVyUXQu
Y3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYlBvcHVwTWVudVByb3h5UXQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9w
X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3Au
aAppbmRleCBhZDFjNmFkLi5jN2FjODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oCkBAIC0yNiw3ICsyNiw2IEBACiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgUXRWaWV3cG9ydEhh
bmRsZXI7CiBjbGFzcyBRdFdlYlBhZ2VFdmVudEhhbmRsZXI7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IGVkZWM4Yzcu
LjFjYWJlYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3LmNwcApAQCAtMjUsMTMgKzI1LDEzIEBACiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQ
cm94eUltcGwuaCIKICNpbmNsdWRlICJRdERpYWxvZ1J1bm5lci5oIgogI2luY2x1ZGUgIlF0RG93
bmxvYWRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKICNpbmNsdWRl
ICJRdFdlYkNvbnRleHQuaCIKICNpbmNsdWRlICJRdFdlYkVycm9yLmgiCiAjaW5jbHVkZSAiUXRX
ZWJJY29uRGF0YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VFdmVudEhhbmRsZXIu
aCIKICNpbmNsdWRlICJRdFdlYlBhZ2VMb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdl
UG9saWN5Q2xpZW50LmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQuaCIKICNp
bmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZF
UikKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgpAQCAtMzI2LDggKzMyNiw5IEBAIHZv
aWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemUoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIFdLUGFnZUdyb3VwUmVmIHBhCiB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpvbkNvbXBv
bmVudENvbXBsZXRlKCkKIHsKICAgICBRX1EoUVF1aWNrV2ViVmlldyk7Ci0gICAgbV92aWV3cG9y
dEhhbmRsZXIucmVzZXQobmV3IFF0Vmlld3BvcnRIYW5kbGVyKHdlYlBhZ2VQcm94eS5nZXQoKSwg
cSwgcGFnZVZpZXcuZGF0YSgpKSk7Ci0gICAgcGFnZVZpZXctPmV2ZW50SGFuZGxlcigpLT5zZXRW
aWV3cG9ydEhhbmRsZXIobV92aWV3cG9ydEhhbmRsZXIuZGF0YSgpKTsKKyAgICBtX3ZpZXdwb3J0
SGFuZGxlckNsaWVudC5yZXNldChuZXcgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQocSwgcGFnZVZp
ZXcuZGF0YSgpKSk7CisgICAgbV92aWV3cG9ydEhhbmRsZXIucmVzZXQobmV3IFZpZXdwb3J0SGFu
ZGxlcih3ZWJQYWdlUHJveHkuZ2V0KCksIG1fdmlld3BvcnRIYW5kbGVyQ2xpZW50LmRhdGEoKSkp
OworICAgIHBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+c2V0Vmlld3BvcnRIYW5kbGVyKG1fdmll
d3BvcnRIYW5kbGVyQ2xpZW50LmRhdGEoKSk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZh
dGU6OnNldFRyYW5zcGFyZW50QmFja2dyb3VuZChib29sIGVuYWJsZSkKQEAgLTg1Niw3ICs4NTcs
NyBAQCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6UVF1aWNrV2ViVmlld0ZsaWNrYWJs
ZVByaXZhdGUoUVF1aWNrV2ViVmlldyogdmlldwogCiBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJp
dmF0ZTo6flFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlKCkKIHsKLSAgICBtX3ZpZXdwb3J0
SGFuZGxlci0+ZGlzY29ubmVjdCgpOworICAgIG1fdmlld3BvcnRIYW5kbGVyQ2xpZW50LT5kaXNj
b25uZWN0KCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OmluaXRp
YWxpemUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJl
ZikKQEAgLTg3NSwyOCArODc2LDI4IEBAIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZh
dGU6Om9uQ29tcG9uZW50Q29tcGxldGUoKQogdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJp
dmF0ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0
QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKIHsKICAgICBpZiAobV92aWV3cG9ydEhhbmRsZXIp
Ci0gICAgICAgIG1fdmlld3BvcnRIYW5kbGVyLT52aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKG5l
d0F0dHJpYnV0ZXMpOworICAgICAgICBtX3ZpZXdwb3J0SGFuZGxlci0+ZGlkQ2hhbmdlVmlld3Bv
cnRBdHRyaWJ1dGVzKG5ld0F0dHJpYnV0ZXMpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdGbGlj
a2FibGVQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUoKQogewotICAgIC8vIEZJWE1FOiBFeGFt
aW5lIHdoeSB0aGVyZSBpcyBub3QgYW4gdmlld3BvcnRIYW5kbGVyIGhlcmUgaW4gdGhlIGJlZ2lu
bmluZy4KKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisKICAgICBpZiAobV92aWV3cG9ydEhhbmRs
ZXIpCi0gICAgICAgIG1fdmlld3BvcnRIYW5kbGVyLT52aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgp
OworICAgICAgICBtX3ZpZXdwb3J0SGFuZGxlci0+dXBkYXRlVmlld3BvcnRTaXplKFFTaXplRihx
LT53aWR0aCgpLCBxLT5oZWlnaHQoKSkpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2Fi
bGVQcml2YXRlOjpwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBRUG9pbnQmIHBvcykKIHsKLSAg
ICBtX3ZpZXdwb3J0SGFuZGxlci0+cGFnZUNvbnRlbnRQb3NpdGlvblJlcXVlc3RlZChwb3MpOwor
ICAgIGlmIChtX3ZpZXdwb3J0SGFuZGxlcikKKyAgICAgICAgbV92aWV3cG9ydEhhbmRsZXItPnBh
Z2VEaWRSZXF1ZXN0U2Nyb2xsKHBvcyk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJs
ZVByaXZhdGU6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBRU2l6ZSYgbmV3U2l6ZSkKIHsK
LSAgICBRX1EoUVF1aWNrV2ViVmlldyk7Ci0KICAgICBwYWdlVmlldy0+c2V0Q29udGVudHNTaXpl
KG5ld1NpemUpOyAvLyBlbWl0cyBjb250ZW50c1NpemVDaGFuZ2VkKCkKICAgICBRUXVpY2tXZWJW
aWV3UHJpdmF0ZTo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKG5ld1NpemUpOwotICAgIG1fdmlld3Bv
cnRIYW5kbGVyLT5wYWdlQ29udGVudHNTaXplQ2hhbmdlZChuZXdTaXplLCBxLT5ib3VuZGluZ1Jl
Y3QoKS5zaXplKCkudG9TaXplKCkpOworICAgIG1fdmlld3BvcnRIYW5kbGVyLT5kaWRDaGFuZ2VD
b250ZW50c1NpemUobmV3U2l6ZSk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVBy
aXZhdGU6OmhhbmRsZU1vdXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKaW5kZXggNjQ1NTM5
ZS4uMDc2YzRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXdfcC5oCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFBsYXRmb3JtV2ViVmlldzsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERh
dGE7Ci1jbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKK2NsYXNzIFZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0OwogY2xhc3MgUXRXZWJQYWdlTG9hZENsaWVudDsKIGNsYXNzIFF0V2ViUGFnZVBvbGljeUNs
aWVudDsKIGNsYXNzIFF0V2ViUGFnZVVJQ2xpZW50OwpAQCAtMjE3LDcgKzIxNyw3IEBAIHByaXZh
dGU6CiAgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCogbV9leHBlcmltZW50YWw7CiAKICAg
ICBmcmllbmQgY2xhc3MgUVdlYktpdFRlc3Q7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRW
aWV3cG9ydEhhbmRsZXI7CisgICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6Vmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQ7CiAgICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRXZWJQYWdlTG9hZENsaWVudDsK
ICAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpRdFdlYlBhZ2VQb2xpY3lDbGllbnQ7CiAgICAgZnJp
ZW5kIGNsYXNzIFdlYktpdDo6UXRXZWJQYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKaW5kZXggZmNiOWYyYS4u
MTZlYzIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3X3BfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlld19wX3AuaApAQCAtMjQsMTAgKzI0LDEwIEBACiAjaW5jbHVkZSAiUXRQYWdlQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlVUlDbGllbnQuaCIKICNpbmNsdWRlICJRdFdlYlVu
ZG9Db250cm9sbGVyLmgiCi0KKyNpbmNsdWRlICJWaWV3cG9ydEhhbmRsZXIuaCIKKyNpbmNsdWRl
ICJWaWV3cG9ydEhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIK
ICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKLQogI2luY2x1ZGUgPFF0Q29yZS9RRWxhcHNl
ZFRpbWVyPgogI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgogI2luY2x1ZGUgPFF0Q29yZS9RU2Nv
cGVkUG9pbnRlcj4KQEAgLTM5LDExICszOSwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNz
IERvd25sb2FkUHJveHk7CiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5OwogY2xhc3MgUXREaWFsb2dS
dW5uZXI7Ci1jbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKK2NsYXNzIFZpZXdwb3J0SGFuZGxlckNs
aWVudFF0OwogY2xhc3MgUXRXZWJDb250ZXh0OwogY2xhc3MgUXRXZWJFcnJvcjsKIGNsYXNzIFF0
V2ViUGFnZUxvYWRDbGllbnQ7CiBjbGFzcyBRdFdlYlBhZ2VQb2xpY3lDbGllbnQ7CitjbGFzcyBW
aWV3cG9ydEhhbmRsZXI7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiB9CiAKQEAgLTg3LDcgKzg4LDcg
QEAgcHVibGljOgogICAgIGludCBsb2FkUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX2xvYWRQ
cm9ncmVzczsgfQogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAKLSAgICB2aXJ0dWFsIFdl
YktpdDo6UXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0SGFuZGxlcigpIHsgcmV0dXJuIDA7IH0K
KyAgICBXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0KiB2aWV3cG9ydEhhbmRsZXJDbGll
bnQoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlckNsaWVudC5kYXRhKCk7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCkgeyB9CiAgICAgdm9pZCB1cGRhdGVU
b3VjaFZpZXdwb3J0U2l6ZSgpOwogCkBAIC0xNzAsNyArMTcxLDkgQEAgcHJvdGVjdGVkOgogICAg
IFFTY29wZWRQb2ludGVyPFFRdWlja1dlYlBhZ2U+IHBhZ2VWaWV3OwogICAgIFFRdWlja1dlYlZp
ZXcqIHFfcHRyOwogCi0gICAgUVNjb3BlZFBvaW50ZXI8V2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxl
cj4gbV92aWV3cG9ydEhhbmRsZXI7CisgICAgUVNjb3BlZFBvaW50ZXI8V2ViS2l0OjpWaWV3cG9y
dEhhbmRsZXI+IG1fdmlld3BvcnRIYW5kbGVyOworICAgIFFTY29wZWRQb2ludGVyPFdlYktpdDo6
Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ+IG1fdmlld3BvcnRIYW5kbGVyQ2xpZW50OworCiAgICAg
RmxpY2thYmxlQXhpc0xvY2tlciBheGlzTG9ja2VyOwogCiAgICAgUVFtbENvbXBvbmVudCogYWxl
cnREaWFsb2c7CkBAIC0yMTgsNyArMjIxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBv
bkNvbXBvbmVudENvbXBsZXRlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3Bv
cnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpOwotICAgIHZp
cnR1YWwgV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlciogdmlld3BvcnRIYW5kbGVyKCkgeyByZXR1
cm4gbV92aWV3cG9ydEhhbmRsZXIuZGF0YSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZp
ZXdwb3J0U2l6ZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNv
bnN0IFFQb2ludCYgcG9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXdlYmtpdHRlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2Via2l0dGVzdC5jcHAKaW5kZXggZjkyYzlmZi4uMDBlMzZjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVzdC5jcHAKQEAgLTIxLDcgKzIxLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJxd2Via2l0dGVzdF9wLmgiCiAKLSNpbmNs
dWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgorI2luY2x1ZGUgIlZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0LmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wX3AuaCIKICNpbmNsdWRlIDxRTXV0YWJs
ZUxpc3RJdGVyYXRvcj4KICNpbmNsdWRlIDxRVG91Y2hFdmVudD4KQEAgLTE0OCwxMiArMTQ4LDEx
IEBAIHN0YXRpYyBpbmxpbmUgUUpzb25PYmplY3QgdG9Kc29uT2JqZWN0KGNvbnN0IFFTaXplRiYg
c2l6ZUYpCiBRSnNvbk9iamVjdCBRV2ViS2l0VGVzdDo6dmlld3BvcnQoKSBjb25zdAogewogICAg
IFFKc29uT2JqZWN0IHZpZXdwb3J0RGF0YTsKLSAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZp
ZXdwb3J0SGFuZGxlciA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlcigpKSB7Ci0g
ICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygiaW5pdGlhbFNjYWxlIiks
IHZpZXdwb3J0SGFuZGxlci0+bV9yYXdBdHRyaWJ1dGVzLmluaXRpYWxTY2FsZSk7Ci0gICAgICAg
IHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygibGF5b3V0U2l6ZSIpLCB0b0pzb25P
YmplY3QoUVNpemVGKHZpZXdwb3J0SGFuZGxlci0+bV9yYXdBdHRyaWJ1dGVzLmxheW91dFNpemUp
KSk7Ci0gICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygiaXNTY2FsYWJs
ZSIpLCAhIXZpZXdwb3J0SGFuZGxlci0+bV9yYXdBdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZSk7Ci0g
ICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygibWluaW11bVNjYWxlIiks
IHZpZXdwb3J0SGFuZGxlci0+bV9taW5pbXVtU2NhbGUpOwotICAgICAgICB2aWV3cG9ydERhdGEu
aW5zZXJ0KFFMYXRpbjFTdHJpbmcoIm1heGltdW1TY2FsZSIpLCB2aWV3cG9ydEhhbmRsZXItPm1f
bWF4aW11bVNjYWxlKTsKKyAgICBpZiAoY29uc3QgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQqIGNv
bnN0IHZpZXdwb3J0SGFuZGxlciA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlckNs
aWVudCgpKSB7CisgICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygibGF5
b3V0U2l6ZSIpLCB0b0pzb25PYmplY3Qodmlld3BvcnRIYW5kbGVyLT5jb250ZW50c0xheW91dFNp
emUoKSkpOworICAgICAgICB2aWV3cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoImlzU2Nh
bGFibGUiKSwgdmlld3BvcnRIYW5kbGVyLT5hbGxvd3NVc2VyU2NhbGluZygpKTsKKyAgICAgICAg
dmlld3BvcnREYXRhLmluc2VydChRTGF0aW4xU3RyaW5nKCJtaW5pbXVtU2NhbGUiKSwgdmlld3Bv
cnRIYW5kbGVyLT5taW5pbXVtQ29udGVudHNTY2FsZSgpKTsKKyAgICAgICAgdmlld3BvcnREYXRh
Lmluc2VydChRTGF0aW4xU3RyaW5nKCJtYXhpbXVtU2NhbGUiKSwgdmlld3BvcnRIYW5kbGVyLT5t
YXhpbXVtQ29udGVudHNTY2FsZSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICB2aWV3cG9ydERh
dGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoImluaXRpYWxTY2FsZSIpLCAxLjApOwogICAgICAgICB2
aWV3cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoImxheW91dFNpemUiKSwgdG9Kc29uT2Jq
ZWN0KFFTaXplRigpKSk7CkBAIC0xNjYsMTQgKzE2NSwxNCBAQCBRSnNvbk9iamVjdCBRV2ViS2l0
VGVzdDo6dmlld3BvcnQoKSBjb25zdAogCiBRVmFyaWFudCBRV2ViS2l0VGVzdDo6ZGV2aWNlUGl4
ZWxSYXRpbygpIGNvbnN0CiB7Ci0gICAgaWYgKFF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydCA9
IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlcigpKQotICAgICAgICByZXR1cm4gdmll
d3BvcnQtPm1fZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICBpZiAoY29uc3QgVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQqIGNvbnN0IHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5k
bGVyQ2xpZW50KCkpCisgICAgICAgIHJldHVybiB2aWV3cG9ydC0+ZGV2aWNlUGl4ZWxSYXRpbygp
OwogICAgIHJldHVybiAxLjA7CiB9CiAKIFFWYXJpYW50IFFXZWJLaXRUZXN0Ojpjb250ZW50c1Nj
YWxlKCkgY29uc3QKIHsKLSAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0ID0gbV93
ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5kbGVyKCkpCi0gICAgICAgIHJldHVybiB2aWV3cG9y
dC0+Y3VycmVudENTU1NjYWxlKCk7CisgICAgaWYgKGNvbnN0IFZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0KiBjb25zdCB2aWV3cG9ydCA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlckNs
aWVudCgpKQorICAgICAgICByZXR1cm4gdmlld3BvcnQtPmN1cnJlbnRDb250ZW50c1NjYWxlKCk7
CiAgICAgcmV0dXJuIDEuMDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9WaWV3cG9ydEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdwb3J0
SGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhZTJiZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9WaWV3cG9ydEhhbmRs
ZXIuY3BwCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJp
Z2h0IChDKSAyMDExIEJlbmphbWluIFBvdWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5kbGVyLmgiCisKKyNpbmNs
dWRlICJWaWV3cG9ydEhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRT
aXplLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYm91bmQoZmxvYXQgbWluLCBmbG9hdCB2YWx1ZSwgZmxv
YXQgbWF4KQoreworICAgIHJldHVybiBjbGFtcFRvPGZsb2F0Pih2YWx1ZSwgbWluLCBtYXgpOwor
fQorCitib29sIGZ1enp5Q29tcGFyZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBlcHNpbG9uKQor
eworICAgIHJldHVybiBzdGQ6OmFicyhhIC0gYikgPCBlcHNpbG9uOworfQorCitGbG9hdFBvaW50
IGJvdW5kUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCBtaW5Qb3NpdGlvbiwgY29uc3QgRmxvYXRQ
b2ludCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIG1heFBvc2l0aW9uKQoreworICAgIHJl
dHVybiBGbG9hdFBvaW50KGJvdW5kKG1pblBvc2l0aW9uLngoKSwgcG9zaXRpb24ueCgpLCBtYXhQ
b3NpdGlvbi54KCkpLCBib3VuZChtaW5Qb3NpdGlvbi55KCksIHBvc2l0aW9uLnkoKSwgbWF4UG9z
aXRpb24ueSgpKSk7Cit9CisKK1ZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OlZpZXdwb3J0VXBkYXRl
RGVmZXJyZXIoVmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydEhhbmRsZXIsIFN1c3BlbmRDb250ZW50
RmxhZyBzdXNwZW5kQ29udGVudEZsYWcpCisgICAgOiBoYW5kbGVyKHZpZXdwb3J0SGFuZGxlcikK
K3sKKyAgICBoYW5kbGVyLT5tX3N1c3BlbmRDb3VudCsrOworCisgICAgLy8gVGhlcmUgaXMgbm8g
bmVlZCB0byBzdXNwZW5kIGNvbnRlbnQgZm9yIGltbWVkaWF0ZSB1cGRhdGVzCisgICAgLy8gb25s
eSBkdXJpbmcgYW5pbWF0aW9ucyBvciBsb25nZXIgZ2VzdHVyZXMuCisgICAgaWYgKHN1c3BlbmRD
b250ZW50RmxhZyA9PSBEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KQorICAgICAgICBoYW5k
bGVyLT5zdXNwZW5kQ29udGVudCgpOworfQorCitWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjp+Vmll
d3BvcnRVcGRhdGVEZWZlcnJlcigpCit7CisgICAgaWYgKC0tKGhhbmRsZXItPm1fc3VzcGVuZENv
dW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaGFuZGxlci0+cmVzdW1lQ29udGVudCgpOwor
CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgd2ls
bCBiZSByZXF1ZXN0ZWQuCisgICAgaGFuZGxlci0+c3luY1Zpc2libGVDb250ZW50cygpOworfQor
CitWaWV3cG9ydEhhbmRsZXI6OlZpZXdwb3J0SGFuZGxlcihXZWJLaXQ6OldlYlBhZ2VQcm94eSog
cHJveHksIFZpZXdwb3J0SGFuZGxlckNsaWVudCogY2xpZW50KQorICAgIDogbV93ZWJQYWdlUHJv
eHkocHJveHkpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2FsbG93c1VzZXJTY2Fs
aW5nKGZhbHNlKQorICAgICwgbV9taW5pbXVtU2NhbGUoMSkKKyAgICAsIG1fbWF4aW11bVNjYWxl
KDEpCisgICAgLCBtX2RldmljZVBpeGVsUmF0aW8oMSkKKyAgICAsIG1fc3VzcGVuZENvdW50KDAp
CisgICAgLCBtX2hhc1N1c3BlbmRlZENvbnRlbnQoZmFsc2UpCisgICAgLCBtX2hhZFVzZXJJbnRl
cmFjdGlvbihmYWxzZSkKKyAgICAsIG1fdmlld3BvcnRTY2FsZSgxKQoreworICAgIC8vIEluaXRp
YWxpemluZyBWaWV3cG9ydCBSYXcgQXR0cmlidXRlcyB0byBhdm9pZCByYW5kb20gbmVnYXRpdmUg
c2NhbGUgZmFjdG9ycworICAgIC8vIGlmIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gYmV0d2Vl
biB0aGUgZmlyc3QgbGF5b3V0IGFuZCBzZXR0aW5nIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzIGZv
ciB0aGUgZmlyc3QgdGltZS4KKyAgICBtX3Jhd0F0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9
IG1fZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICBtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlID0g
MTsKKyAgICBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlID0gbV9taW5pbXVtU2NhbGU7Cisg
ICAgbV9yYXdBdHRyaWJ1dGVzLm1heGltdW1TY2FsZSA9IG1fbWF4aW11bVNjYWxlOworICAgIG1f
cmF3QXR0cmlidXRlcy51c2VyU2NhbGFibGUgPSBtX2FsbG93c1VzZXJTY2FsaW5nOworCisgICAg
QVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+c2V0Vmlld3BvcnRIYW5kbGVyKHRoaXMp
OworfQorCitmbG9hdCBWaWV3cG9ydEhhbmRsZXI6OmNvbnZlcnRGcm9tVmlld3BvcnQoZmxvYXQg
dmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZhbHVlIC8gbV9kZXZpY2VQaXhlbFJhdGlvOwor
fQorCitmbG9hdCBWaWV3cG9ydEhhbmRsZXI6OmNvbnZlcnRUb1ZpZXdwb3J0KGZsb2F0IHZhbHVl
KSBjb25zdAoreworICAgIHJldHVybiB2YWx1ZSAqIG1fZGV2aWNlUGl4ZWxSYXRpbzsKK30KKwor
RmxvYXRSZWN0IFZpZXdwb3J0SGFuZGxlcjo6Y29udmVydFRvVmlld3BvcnQoY29uc3QgRmxvYXRS
ZWN0JiBjc3NSZWN0KSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoCisgICAgICAgIGNv
bnZlcnRUb1ZpZXdwb3J0KGNzc1JlY3QueCgpKSwKKyAgICAgICAgY29udmVydFRvVmlld3BvcnQo
Y3NzUmVjdC55KCkpLAorICAgICAgICBjb252ZXJ0VG9WaWV3cG9ydChjc3NSZWN0LndpZHRoKCkp
LAorICAgICAgICBjb252ZXJ0VG9WaWV3cG9ydChjc3NSZWN0LmhlaWdodCgpKQorICAgICk7Cit9
CisKK2Zsb2F0IFZpZXdwb3J0SGFuZGxlcjo6aW5uZXJCb3VuZGVkQ29udGVudHNTY2FsZShmbG9h
dCBjc3NTY2FsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gYm91bmQobV9taW5pbXVtU2NhbGUsIGNz
c1NjYWxlLCBtX21heGltdW1TY2FsZSk7Cit9CisKK2Zsb2F0IFZpZXdwb3J0SGFuZGxlcjo6b3V0
ZXJCb3VuZGVkQ29udGVudHNTY2FsZShmbG9hdCBjc3NTY2FsZSkgY29uc3QKK3sKKyAgICBpZiAo
bV9hbGxvd3NVc2VyU2NhbGluZykgeworICAgICAgICAvLyBCb3VuZGVkIGJ5IFswLjEsIDEwLjBd
IGxpa2UgdGhlIHZpZXdwb3J0IG1ldGEgY29kZSBpbiBXZWJDb3JlLgorICAgICAgICBmbG9hdCBo
YXJkTWluID0gc3RkOjptYXg8ZmxvYXQ+KDAuMSwgMC41ICogbV9taW5pbXVtU2NhbGUpOworICAg
ICAgICBmbG9hdCBoYXJkTWF4ID0gc3RkOjptaW48ZmxvYXQ+KDEwLCAyICogbV9tYXhpbXVtU2Nh
bGUpOworICAgICAgICByZXR1cm4gYm91bmQoaGFyZE1pbiwgY3NzU2NhbGUsIGhhcmRNYXgpOwor
ICAgIH0KKyAgICByZXR1cm4gaW5uZXJCb3VuZGVkQ29udGVudHNTY2FsZShjc3NTY2FsZSk7Cit9
CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyOjpkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgSW50
U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAobV92aWV3cG9ydFNpemUuaXNFbXB0eSgpIHx8IG5l
d1NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRlbnRzU2l6ZSA9
IG5ld1NpemU7CisKKyAgICBmbG9hdCBtaW5pbXVtU2NhbGUgPSBXZWJDb3JlOjpjb21wdXRlTWlu
aW11bVNjYWxlRmFjdG9yRm9yQ29udGVudENvbnRhaW5lZChtX3Jhd0F0dHJpYnV0ZXMsIFdlYkNv
cmU6OnJvdW5kZWRJbnRTaXplKG1fdmlld3BvcnRTaXplKSwgbmV3U2l6ZSk7CisKKyAgICBpZiAo
IWZ1enp5Q29tcGFyZShtaW5pbXVtU2NhbGUsIG1fcmF3QXR0cmlidXRlcy5taW5pbXVtU2NhbGUs
IDAuMDAxKSkgeworICAgICAgICBtX21pbmltdW1TY2FsZSA9IG1pbmltdW1TY2FsZTsKKworICAg
ICAgICBpZiAoIW1faGFkVXNlckludGVyYWN0aW9uICYmICFoYXNTdXNwZW5kZWRDb250ZW50KCkp
CisgICAgICAgICAgICBtX2NsaWVudC0+c2V0Q29udGVudHNTY2FsZShjb252ZXJ0VG9WaWV3cG9y
dChtaW5pbXVtU2NhbGUpLCB0cnVlIC8qIGlzSW5pdGlhbFNjYWxlICovKTsKKworICAgICAgICBt
X2NsaWVudC0+ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKCk7CisgICAgfQorCisgICAgbV9j
bGllbnQtPmRpZENoYW5nZUNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTdXNwZW5kZWRD
b250ZW50KCkpCisgICAgICAgIG1fY2xpZW50LT5zZXRDb250ZW50c1JlY3RUb05lYXJlc3RWYWxp
ZEJvdW5kcygpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlcjo6cGFnZURpZFJlcXVlc3RTY3Jv
bGwoY29uc3QgSW50UG9pbnQmIGNzc1Bvc2l0aW9uKQoreworICAgIC8vIElnbm9yZSB0aGUgcmVx
dWVzdCBpZiBzdXNwZW5kZWQuIENhbiBvbmx5IGhhcHBlbiBkdWUgdG8gZGVsYXkgaW4gZXZlbnQg
ZGVsaXZlcnkuCisgICAgaWYgKG1fc3VzcGVuZENvdW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBGbG9hdFJlY3QgZW5kUG9zUmFuZ2UgPSBwb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2NhbGUo
bV92aWV3cG9ydFNjYWxlKTsKKyAgICBGbG9hdFBvaW50IGVuZFBvc2l0aW9uKGNzc1Bvc2l0aW9u
KTsKKyAgICBlbmRQb3NpdGlvbi5zY2FsZShtX3ZpZXdwb3J0U2NhbGUsIG1fdmlld3BvcnRTY2Fs
ZSk7CisgICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLm1pblhNaW5Z
Q29ybmVyKCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5tYXhYTWF4WUNvcm5lcigpKTsKKwor
ICAgIG1fY2xpZW50LT5zZXRDb250ZW50c1Bvc2l0aW9uKGVuZFBvc2l0aW9uKTsKK30KKwordm9p
ZCBWaWV3cG9ydEhhbmRsZXI6OnVwZGF0ZVZpZXdwb3J0U2l6ZShjb25zdCBGbG9hdFNpemUmIG5l
d1NpemUpCit7CisgICAgaWYgKG5ld1NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3ZpZXdwb3J0U2l6ZSA9IG5ld1NpemU7CisKKyAgICAvLyBMZXQgdGhlIFdlYlByb2Nl
c3Mga25vdyBhYm91dCB0aGUgbmV3IHZpZXdwb3J0IHNpemUsIHNvIHRoYXQKKyAgICAvLyBpdCBj
YW4gcmVzaXplIHRoZSBjb250ZW50IGFjY29yZGluZ2x5LgorICAgIG1fd2ViUGFnZVByb3h5LT5z
ZXRWaWV3cG9ydFNpemUocm91bmRlZEludFNpemUobmV3U2l6ZSkpOworCisgICAgc3luY1Zpc2li
bGVDb250ZW50cygpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlcjo6dXBkYXRlVmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHZp
ZXdwb3J0U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAg
bV92aXNpYmxlQ29udGVudHNSZWN0ID0gdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBtX3ZpZXdw
b3J0U2NhbGUgPSB2aWV3cG9ydFNjYWxlOworICAgIHN5bmNWaXNpYmxlQ29udGVudHModHJhamVj
dG9yeVZlY3Rvcik7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyOjpzeW5jVmlzaWJsZUNvbnRl
bnRzKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgRHJhd2luZ0Fy
ZWFQcm94eSogY29uc3QgZHJhd2luZ0FyZWEgPSBtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEo
KTsKKyAgICBpZiAoIWRyYXdpbmdBcmVhIHx8IG1fdmlld3BvcnRTaXplLmlzRW1wdHkoKSB8fCBt
X2NvbnRlbnRzU2l6ZS5pc0VtcHR5KCkgfHwgbV92aXNpYmxlQ29udGVudHNSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZHJhd2luZ0FyZWEtPnNldFZpc2libGVDb250ZW50
c1JlY3QobV92aXNpYmxlQ29udGVudHNSZWN0LCBtX3ZpZXdwb3J0U2NhbGUsIHRyYWplY3RvcnlW
ZWN0b3IpOworCisgICAgbV9jbGllbnQtPmRpZENoYW5nZVZpc2libGVDb250ZW50cygpOworfQor
Cit2b2lkIFZpZXdwb3J0SGFuZGxlcjo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKGNvbnN0
IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKK3sKKyAgICBpZiAo
bmV3QXR0cmlidXRlcy5sYXlvdXRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9yYXdBdHRyaWJ1dGVzID0gbmV3QXR0cmlidXRlczsKKyAgICBXZWJDb3JlOjpyZXN0cmlj
dFNjYWxlRmFjdG9yVG9Jbml0aWFsU2NhbGVJZk5vdFVzZXJTY2FsYWJsZShtX3Jhd0F0dHJpYnV0
ZXMpOworCisgICAgbV9kZXZpY2VQaXhlbFJhdGlvID0gbV9yYXdBdHRyaWJ1dGVzLmRldmljZVBp
eGVsUmF0aW87IC8vIFNob3VsZCByZXR1cm4gdmFsdWUgZnJvbSB0aGUgd2ViUGFnZVByb3h5Lgor
ICAgIG1fYWxsb3dzVXNlclNjYWxpbmcgPSAhIW1fcmF3QXR0cmlidXRlcy51c2VyU2NhbGFibGU7
CisgICAgbV9taW5pbXVtU2NhbGUgPSBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlOworICAg
IG1fbWF4aW11bVNjYWxlID0gbV9yYXdBdHRyaWJ1dGVzLm1heGltdW1TY2FsZTsKKworICAgIG1f
Y2xpZW50LT5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoKTsKK30KKwordm9pZCBWaWV3cG9y
dEhhbmRsZXI6OnN1c3BlbmRDb250ZW50KCkKK3sKKyAgICBpZiAobV9oYXNTdXNwZW5kZWRDb250
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hhc1N1c3BlbmRlZENvbnRlbnQgPSB0cnVl
OworICAgIG1fd2ViUGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXI6OnJlc3VtZUNvbnRlbnQoKQoreworICAg
IGlmICghbV9yYXdBdHRyaWJ1dGVzLmxheW91dFNpemUuaXNFbXB0eSgpICYmIG1fcmF3QXR0cmli
dXRlcy5pbml0aWFsU2NhbGUgPiAwKSB7CisgICAgICAgIG1faGFkVXNlckludGVyYWN0aW9uID0g
ZmFsc2U7CisgICAgICAgIG1fY2xpZW50LT5zZXRDb250ZW50c1NjYWxlKGNvbnZlcnRUb1ZpZXdw
b3J0KGlubmVyQm91bmRlZENvbnRlbnRzU2NhbGUobV9yYXdBdHRyaWJ1dGVzLmluaXRpYWxTY2Fs
ZSkpLCAvKiBpc0luaXRpYWxTY2FsZSAqLyB0cnVlKTsKKyAgICAgICAgbV9yYXdBdHRyaWJ1dGVz
LmluaXRpYWxTY2FsZSA9IC0xOyAvLyBNYXJrIHVzZWQuCisgICAgfQorCisgICAgbV9jbGllbnQt
PnJlcXVlc3RWaWV3cG9ydFVwZGF0ZSgpOworCisgICAgaWYgKCFtX2hhc1N1c3BlbmRlZENvbnRl
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faGFzU3VzcGVuZGVkQ29udGVudCA9IGZhbHNl
OworICAgIG1fd2ViUGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpOworfQorCitGbG9hdFJlY3QgVmlld3BvcnRIYW5kbGVyOjpwb3NpdGlvblJhbmdlRm9yQ29u
dGVudEF0U2NhbGUoZmxvYXQgdmlld3BvcnRTY2FsZSkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9h
dFNpemUgY29udGVudFNpemUgPSBtX2NvbnRlbnRzU2l6ZSAqIHZpZXdwb3J0U2NhbGU7CisKKyAg
ICBjb25zdCBmbG9hdCBob3Jpem9udGFsUmFuZ2UgPSBjb250ZW50U2l6ZS53aWR0aCgpIC0gbV92
aWV3cG9ydFNpemUud2lkdGgoKTsKKyAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbFJhbmdlID0gY29u
dGVudFNpemUuaGVpZ2h0KCkgLSBtX3ZpZXdwb3J0U2l6ZS5oZWlnaHQoKTsKKworICAgIHJldHVy
biBGbG9hdFJlY3QoMCwgMCwgaG9yaXpvbnRhbFJhbmdlLCB2ZXJ0aWNhbFJhbmdlKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvVmlld3BvcnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld3BvcnRI
YW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3MTQ3ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9WaWV3cG9ydEhhbmRsZXIu
aApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBCZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1pbkB3ZWJraXQub3JnPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBWaWV3cG9ydEhhbmRsZXJfaAorI2RlZmluZSBWaWV3cG9ydEhhbmRsZXJfaAorCisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlld3Bv
cnRBcmd1bWVudHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50UG9pbnQ7Citj
bGFzcyBJbnRTaXplOworfQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFZpZXdwb3J0SGFuZGxlcjsK
K2NsYXNzIFZpZXdwb3J0SGFuZGxlckNsaWVudDsKKworLy8gVVBEQVRFIERFRkVSUklORyAoU1VT
UEVORC9SRVNVTUUpCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisv
LyBXaGVuIGludGVyYWN0aW9uIHdpdGggdGhlIGNvbnRlbnQsIGVpdGhlciBieSBhbmltYXRpbmcg
b3IgYnkgdGhlIGhhbmQgb2YgdGhlIHVzZXIsCisvLyBpdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJl
IHNtb290aCBhbmltYXRpb25zIG9mIGF0IGxlYXN0IDYwZnBzIGluIG9yZGVyIHRvIGdpdmUgYQor
Ly8gZ29vZCB1c2VyIGV4cGVyaWVuY2UuCisvLworLy8gSW4gb3JkZXIgdG8gZG8gdGhpcyB3ZSBu
ZWVkIHRvIGdldCByaWQgb2YgdW5rbm93biBmYWN0b3JzLiBUaGVzZSBpbmNsdWRlIGRldmljZQor
Ly8gc2Vuc29ycyAoZ2VvbG9jYXRpb24sIG9yaWVudGF0aW9uIHVwZGF0ZXMgZXRjKSwgQ1NTMyBh
bmltYXRpb25zLCBKYXZhU2NyaXB0CisvLyBleGVjdHV0aW9uLCBzdWIgcmVzb3VyY2UgbG9hZHMg
ZXRjLiBXZSBkbyB0aGlzIGJ5IGVtaXR0aW5nIHN1c3BlbmQgYW5kIHJlc3VtZQorLy8gc2lnbmFs
cywgd2hpY2ggYXJlIHRoZW4gaGFuZGxlZCBieSB0aGUgdmlld3BvcnQgYW5kIHByb3BhZ2F0ZXMg
dG8gdGhlIHJpZ2h0IHBsYWNlLgorLy8KKy8vIEZvciB0aGlzIHJlYXNvbiB0aGUgVmlld3BvcnRV
cGRhdGVEZWZlcnJlciBndWFyZCBtdXN0IGJlIHVzZWQgd2hlbiB3ZSBpbnRlcmFjdAorLy8gb3Ig
YW5pbWF0ZSB0aGUgY29udGVudC4KKy8vCisvLyBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB3aGVu
IHdlIHVwZGF0ZSBjb250ZW50IHByb3BlcnRpZXMsIHdlIG1pZ2h0IHJlY2VpdmUgbm90aWZ5Cisv
LyBzaWduYWxzIHNlbmQgYnkgdGhlIHBhZ2UgaXRzZWxmLCBhbmQgY2FyZSBzaG91bGQgYmUgdGFr
ZW4gdG8gbm90IGFjdCBvbiB0aGVzZQorLy8gdW5jb25kaXRpb25hbGx5LgorLy8KKy8vIElmIHNv
bWV0aGluZyBzaG91bGQgb25seSBiZSBleGVjdXRlZCBkdXJpbmcgdXBkYXRlIGRlZmVycmluZywg
aXQgaXMgcG9zc2libGUgdG8KKy8vIGNoZWNrIGZvciB0aGF0IHVzaW5nIEFTU0VSVChoYXNTdXNw
ZW5kZWRDb250ZW50KCkpLgorCitjbGFzcyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIFN1c3BlbmRDb250ZW50RmxhZyB7IERlZmVyVXBkYXRlLCBEZWZlclVwZGF0
ZUFuZFN1c3BlbmRDb250ZW50IH07CisgICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlcihWaWV3cG9y
dEhhbmRsZXIqLCBTdXNwZW5kQ29udGVudEZsYWcgPSBEZWZlclVwZGF0ZSk7CisgICAgflZpZXdw
b3J0VXBkYXRlRGVmZXJyZXIoKTsKKworcHJpdmF0ZToKKyAgICBWaWV3cG9ydEhhbmRsZXIqIGNv
bnN0IGhhbmRsZXI7Cit9OworCitjbGFzcyBWaWV3cG9ydEhhbmRsZXIgeworcHVibGljOgorICAg
IFZpZXdwb3J0SGFuZGxlcihXZWJLaXQ6OldlYlBhZ2VQcm94eSosIFZpZXdwb3J0SGFuZGxlckNs
aWVudCopOworICAgIHZpcnR1YWwgflZpZXdwb3J0SGFuZGxlcigpIHsgfQorCisgICAgdm9pZCBz
dXNwZW5kQ29udGVudCgpOworICAgIHZvaWQgcmVzdW1lQ29udGVudCgpOworCisgICAgRmxvYXRS
ZWN0IHBvc2l0aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZShmbG9hdCB2aWV3cG9ydFNjYWxlKSBj
b25zdDsKKworICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9WaWV3cG9ydChjb25zdCBGbG9hdFJlY3Qm
KSBjb25zdDsKKyAgICBmbG9hdCBjb252ZXJ0RnJvbVZpZXdwb3J0KGZsb2F0KSBjb25zdDsKKyAg
ICBmbG9hdCBjb252ZXJ0VG9WaWV3cG9ydChmbG9hdCkgY29uc3Q7CisKKyAgICBmbG9hdCBpbm5l
ckJvdW5kZWRDb250ZW50c1NjYWxlKGZsb2F0KSBjb25zdDsKKyAgICBmbG9hdCBvdXRlckJvdW5k
ZWRDb250ZW50c1NjYWxlKGZsb2F0KSBjb25zdDsKKworICAgIGJvb2wgaGFzU3VzcGVuZGVkQ29u
dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VzcGVuZENvdW50IHx8IG1faGFzU3VzcGVuZGVkQ29u
dGVudDsgfQorICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9o
YWRVc2VySW50ZXJhY3Rpb247IH0KKyAgICBib29sIGFsbG93c1VzZXJTY2FsaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd3NVc2VyU2NhbGluZzsgfQorCisgICAgRmxvYXRTaXplIGNvbnRlbnRz
TGF5b3V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmF3QXR0cmlidXRlcy5sYXlvdXRTaXplOyB9
CisgICAgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlUGl4
ZWxSYXRpbzsgfQorICAgIGZsb2F0IG1pbmltdW1Db250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9taW5pbXVtU2NhbGU7IH0KKyAgICBmbG9hdCBtYXhpbXVtQ29udGVudHNTY2FsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4aW11bVNjYWxlOyB9CisKKyAgICB2b2lkIHNldEhhZFVzZXJJbnRl
cmFjdGlvbihib29sIGRpZFVzZXJJbnRlcmFjdCkgeyBtX2hhZFVzZXJJbnRlcmFjdGlvbiA9IGRp
ZFVzZXJJbnRlcmFjdDsgfQorCisgICAgLy8gTm90aWZpY2F0aW9ucyB0byB0aGUgV2ViUHJvY2Vz
cy4KKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZShjb25zdCBGbG9hdFNpemUmIG5ld1NpemUp
OworICAgIHZvaWQgdXBkYXRlVmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZp
c2libGVDb250ZW50c1JlY3QsIGZsb2F0IHZpZXdwb3J0U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQm
IHRyYWplY3RvcnlWZWN0b3IgPSBGbG9hdFBvaW50Ojp6ZXJvKCkpOworCisgICAgLy8gTm90aWZp
Y2F0aW9ucyBmcm9tIHRoZSBXZWJQcm9jZXNzLgorICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNT
aXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRB
dHRyaWJ1dGVzKGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYpOworICAgIHZvaWQgcGFnZURpZFJl
cXVlc3RTY3JvbGwoY29uc3QgSW50UG9pbnQmIGNzc1Bvc2l0aW9uKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHN5bmNWaXNpYmxlQ29udGVudHMoY29uc3QgRmxvYXRQb2ludCAmdHJhamVjdG9yeVZl
Y3RvciA9IEZsb2F0UG9pbnQ6Onplcm8oKSk7CisKKyAgICBXZWJQYWdlUHJveHkqIGNvbnN0IG1f
d2ViUGFnZVByb3h5OworICAgIFZpZXdwb3J0SGFuZGxlckNsaWVudCogbV9jbGllbnQ7CisKKyAg
ICBWaWV3cG9ydEF0dHJpYnV0ZXMgbV9yYXdBdHRyaWJ1dGVzOworCisgICAgYm9vbCBtX2FsbG93
c1VzZXJTY2FsaW5nOworICAgIGZsb2F0IG1fbWluaW11bVNjYWxlOworICAgIGZsb2F0IG1fbWF4
aW11bVNjYWxlOworICAgIGZsb2F0IG1fZGV2aWNlUGl4ZWxSYXRpbzsKKworICAgIGludCBtX3N1
c3BlbmRDb3VudDsKKyAgICBib29sIG1faGFzU3VzcGVuZGVkQ29udGVudDsKKyAgICBib29sIG1f
aGFkVXNlckludGVyYWN0aW9uOworCisgICAgRmxvYXRTaXplIG1fdmlld3BvcnRTaXplOworICAg
IEZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVu
dHNSZWN0OworICAgIGZsb2F0IG1fdmlld3BvcnRTY2FsZTsgLy8gU2hvdWxkIGFsd2F5cyBiZSBj
c3NTY2FsZSAqIGRldmljZVBpeGVsUmF0aW8uCisKKyAgICBmcmllbmQgY2xhc3MgVmlld3BvcnRV
cGRhdGVEZWZlcnJlcjsKK307CisKK2Jvb2wgZnV6enlDb21wYXJlKGZsb2F0LCBmbG9hdCwgZmxv
YXQgZXBzaWxvbik7CitGbG9hdFBvaW50IGJvdW5kUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCBt
aW5Qb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IG1heFBvc2l0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBWaWV3
cG9ydEhhbmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdw
b3J0SGFuZGxlckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdwb3J0SGFu
ZGxlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NDJlOWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld3BvcnRIYW5k
bGVyQ2xpZW50LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IFZpZXdwb3J0SGFuZGxlckNsaWVudF9oCisjZGVmaW5lIFZpZXdwb3J0SGFuZGxlckNsaWVudF9o
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZsb2F0UG9pbnQ7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBWaWV3cG9ydEhhbmRsZXI7CisKK2NsYXNzIFZpZXdwb3J0SGFu
ZGxlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Vmlld3BvcnRIYW5kbGVyQ2xpZW50
KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNQb3NpdGlvbihjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbkluVmlld0Nvb3JkaW5hdGVzKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQgdmlld3BvcnRTY2FsZSwgYm9vbCBpc0lu
aXRpYWxTY2FsZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3RUb05lYXJl
c3RWYWxpZEJvdW5kcygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Vmlld3BvcnRV
cGRhdGUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaXNpYmxlQ29udGVudHMoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcygpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRWaWV3cG9ydEhhbmRsZXIoVmlld3BvcnRIYW5kbGVyKikgPSAwOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBWaWV3cG9ydEhhbmRsZXJD
bGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVy
ZVJlY29nbml6ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJl
Y29nbml6ZXIuY3BwCmluZGV4IDkzYjY0MTUuLmI1ZjYwNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAKQEAgLTQxLDcgKzQx
LDcgQEAgdm9pZCBRdEdlc3R1cmVSZWNvZ25pemVyOjpyZXNldCgpCiAgICAgbV9zdGF0ZSA9IE5v
R2VzdHVyZTsKIH0KIAotUXRWaWV3cG9ydEhhbmRsZXIqIFF0R2VzdHVyZVJlY29nbml6ZXI6OnZp
ZXdwb3J0SGFuZGxlcigpCitWaWV3cG9ydEhhbmRsZXJDbGllbnRRdCogUXRHZXN0dXJlUmVjb2du
aXplcjo6dmlld3BvcnRIYW5kbGVyKCkKIHsKICAgICByZXR1cm4gbV9ldmVudEhhbmRsZXItPnZp
ZXdwb3J0SGFuZGxlcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dEdlc3R1cmVSZWNvZ25pemVyLmgKaW5kZXggNjhlMDMyZi4uY2M5Njc1NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oCkBAIC0yOCw3
ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBRdFZpZXdwb3J0SGFuZGxl
cjsKK2NsYXNzIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OwogY2xhc3MgUXRXZWJQYWdlRXZlbnRI
YW5kbGVyOwogCiBjbGFzcyBRdEdlc3R1cmVSZWNvZ25pemVyIHsKQEAgLTQ2LDcgKzQ2LDcgQEAg
cHJvdGVjdGVkOgogICAgICAgICBHZXN0dXJlUmVjb2duaXplZAogICAgIH0gbV9zdGF0ZTsKIAot
ICAgIFF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydEhhbmRsZXIoKTsKKyAgICBWaWV3cG9ydEhh
bmRsZXJDbGllbnRRdCAqdmlld3BvcnRIYW5kbGVyKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1
cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1
cmVSZWNvZ25pemVyLmNwcAppbmRleCBiYTljOTBhLi5iNjQxMDEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwCkBA
IC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUXRQYW5HZXN0
dXJlUmVjb2duaXplci5oIgogCi0jaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKICNpbmNs
dWRlICJRdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEhhbmRsZXJD
bGllbnRRdC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcAppbmRleCA3
NWQ0ZDIzLi5kNWI4MWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcApAQCAtMjYsOCArMjYsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlF0UGluY2hHZXN0dXJlUmVjb2duaXplci5oIgog
Ci0jaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oIgogI2luY2x1
ZGUgPFF0Q29yZS9RTGluZUY+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDVjM2JmYWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc2MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmphbWluIFBv
dWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKLQotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgot
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0j
aW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgi
Ci0jaW5jbHVkZSAicXdlYmtpdHRlc3RfcC5oIgotI2luY2x1ZGUgPFFQb2ludEY+Ci0jaW5jbHVk
ZSA8UVRyYW5zZm9ybT4KLSNpbmNsdWRlIDxRV2hlZWxFdmVudD4KLSNpbmNsdWRlIDxRdFF1aWNr
L3FxdWlja2l0ZW0uaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IGludCBrU2NhbGVBbmltYXRpb25EdXJhdGlvbk1pbGxp
cyA9IDI1MDsKLQotLy8gVVBEQVRFIERFRkVSUklORyAoU1VTUEVORC9SRVNVTUUpCi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBXaGVuIGludGVyYWN0aW9uIHdp
dGggdGhlIGNvbnRlbnQsIGVpdGhlciBieSBhbmltYXRpbmcgb3IgYnkgdGhlIGhhbmQgb2YgdGhl
IHVzZXIsCi0vLyBpdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHNtb290aCBhbmltYXRpb25zIG9m
IGF0IGxlYXN0IDYwZnBzIGluIG9yZGVyIHRvIGdpdmUgYQotLy8gZ29vZCB1c2VyIGV4cGVyaWVu
Y2UuCi0vLwotLy8gSW4gb3JkZXIgdG8gZG8gdGhpcyB3ZSBuZWVkIHRvIGdldCByaWQgb2YgdW5r
bm93biBmYWN0b3JzLiBUaGVzZSBpbmNsdWRlIGRldmljZQotLy8gc2Vuc29ycyAoZ2VvbG9jYXRp
b24sIG9yaWVudGF0aW9uIHVwZGF0ZXMgZXRjKSwgQ1NTMyBhbmltYXRpb25zLCBKYXZhU2NyaXB0
Ci0vLyBleGVjdHV0aW9uLCBzdWIgcmVzb3VyY2UgbG9hZHMgZXRjLiBXZSBkbyB0aGlzIGJ5IGVt
aXR0aW5nIHN1c3BlbmQgYW5kIHJlc3VtZQotLy8gc2lnbmFscywgd2hpY2ggYXJlIHRoZW4gaGFu
ZGxlZCBieSB0aGUgdmlld3BvcnQgYW5kIHByb3BhZ2F0ZXMgdG8gdGhlIHJpZ2h0IHBsYWNlLgot
Ly8KLS8vIEZvciB0aGlzIHJlYXNvbiB0aGUgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCBt
dXN0IGJlIHVzZWQgd2hlbiB3ZSBpbnRlcmFjdAotLy8gb3IgYW5pbWF0ZSB0aGUgY29udGVudC4K
LS8vCi0vLyBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB3aGVuIHdlIHVwZGF0ZSBjb250ZW50IHBy
b3BlcnRpZXMsIHdlIG1pZ2h0IHJlY2VpdmUgbm90aWZ5Ci0vLyBzaWduYWxzIHNlbmQgbXkgdGhl
IGNvbnRlbnQgaXRlbSBpdHNlbGYsIGFuZCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBub3QgYWN0
IG9uCi0vLyB0aGVzZSB1bmNvbmRpdGlvbmFsbHkuIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUg
cGluY2ggem9vbSwgd2hpY2ggY2hhbmdlcyB0aGUKLS8vIHBvc2l0aW9uIGFuZCB3aWxsIHRodXMg
cmVzdWx0IGluIGEgUVF1aWNrV2ViUGFnZTo6Z2VvbWV0cnlDaGFuZ2VkKCkgc2lnbmFsIGdldHRp
bmcKLS8vIGVtaXR0ZWQuCi0vLwotLy8gSWYgc29tZXRoaW5nIHNob3VsZCBvbmx5IGJlIGV4ZWN1
dGVkIGR1cmluZyB1cGRhdGUgZGVmZXJyaW5nLCBpdCBpcyBwb3NzaWJsZSB0bwotLy8gY2hlY2sg
Zm9yIHRoYXQgdXNpbmcgQVNTRVJUKG1fc3VzcGVuZENvdW50KS4KLQotY2xhc3MgVmlld3BvcnRV
cGRhdGVEZWZlcnJlciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdXNwZW5kQ29udGVudEZsYWcgeyBE
ZWZlclVwZGF0ZSwgRGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCB9OwotICAgIFZpZXdwb3J0
VXBkYXRlRGVmZXJyZXIoUXRWaWV3cG9ydEhhbmRsZXIqIGhhbmRsZXIsIFN1c3BlbmRDb250ZW50
RmxhZyBzdXNwZW5kQ29udGVudEZsYWcgPSBEZWZlclVwZGF0ZSkKLSAgICAgICAgOiBoYW5kbGVy
KGhhbmRsZXIpCi0gICAgewotICAgICAgICBoYW5kbGVyLT5tX3N1c3BlbmRDb3VudCsrOwotCi0g
ICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3VzcGVuZCBjb250ZW50IGZvciBpbW1lZGlh
dGUgdXBkYXRlcwotICAgICAgICAvLyBvbmx5IGR1cmluZyBhbmltYXRpb25zIG9yIGxvbmdlciBn
ZXN0dXJlcy4KLSAgICAgICAgaWYgKHN1c3BlbmRDb250ZW50RmxhZyA9PSBEZWZlclVwZGF0ZUFu
ZFN1c3BlbmRDb250ZW50KQotICAgICAgICAgICAgaGFuZGxlci0+c3VzcGVuZFBhZ2VDb250ZW50
KCk7Ci0gICAgfQotCi0gICAgflZpZXdwb3J0VXBkYXRlRGVmZXJyZXIoKQotICAgIHsKLSAgICAg
ICAgLy8gV2UgYXJlIGNhbGxpbmcgc2V0SW5pdGlhbFNjYWxlSWZOZWVkZWQoKSBoZXJlIGFzIGl0
IHJlcXVpcmVzIGEKLSAgICAgICAgLy8gcG9zc2l0aXZlIG1fc3VzcGVuZENvdW50IGR1ZSB0byB0
aGUgYXNzZXJ0IGluIHNldFBhZ2VJdGVtUmVjdFZpc2libGUoKS4KLSAgICAgICAgaWYgKGhhbmRs
ZXItPm1fc3VzcGVuZENvdW50ID09IDEpCi0gICAgICAgICAgICBoYW5kbGVyLT5zZXRJbml0aWFs
U2NhbGVJZk5lZWRlZCgpOwotCi0gICAgICAgIGlmICgtLShoYW5kbGVyLT5tX3N1c3BlbmRDb3Vu
dCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaGFuZGxlci0+cmVzdW1lUGFnZUNv
bnRlbnQoKTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRo
ZSB2aWV3cG9ydCB3aWxsIGJlIHJlcXVlc3RlZC4KLSAgICAgICAgaGFuZGxlci0+aW5mb3JtVmlz
aWJsZUNvbnRlbnRDaGFuZ2UoUVBvaW50RigpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUXRW
aWV3cG9ydEhhbmRsZXIqIGNvbnN0IGhhbmRsZXI7Ci19OwotCi12b2lkIFF0Vmlld3BvcnRIYW5k
bGVyOjpzdXNwZW5kUGFnZUNvbnRlbnQoKQotewotICAgIGlmIChtX2hhc1N1c3BlbmRlZENvbnRl
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFzU3VzcGVuZGVkQ29udGVudCA9IHRydWU7
Ci0gICAgbV93ZWJQYWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpyZXN1bWVQYWdlQ29udGVudCgpCi17
Ci0gICAgaWYgKCFtX2hhc1N1c3BlbmRlZENvbnRlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2hhc1N1c3BlbmRlZENvbnRlbnQgPSBmYWxzZTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+cmVzdW1l
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLX0KLQotLy8gQSBmbG9hdGluZyBwb2lu
dCBjb21wYXJlIHdpdGggYWJzb2x1dGUgZXJyb3IuCi1zdGF0aWMgaW5saW5lIGJvb2wgZnV6enlD
b21wYXJlKHFyZWFsIGEsIHFyZWFsIGIsIHFyZWFsIGVwc2lsb24pCi17Ci0gICAgcmV0dXJuIHFB
YnMoYSAtIGIpIDwgZXBzaWxvbjsKLX0KLQotaW5saW5lIHFyZWFsIFF0Vmlld3BvcnRIYW5kbGVy
Ojpjc3NTY2FsZUZyb21JdGVtKHFyZWFsIGl0ZW1TY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4g
aXRlbVNjYWxlIC8gbV9kZXZpY2VQaXhlbFJhdGlvOwotfQotCi1pbmxpbmUgcXJlYWwgUXRWaWV3
cG9ydEhhbmRsZXI6Oml0ZW1TY2FsZUZyb21DU1MocXJlYWwgY3NzU2NhbGUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGNzc1NjYWxlICogbV9kZXZpY2VQaXhlbFJhdGlvOwotfQotCi1pbmxpbmUgcXJl
YWwgUXRWaWV3cG9ydEhhbmRsZXI6Oml0ZW1Db29yZEZyb21DU1MocXJlYWwgdmFsdWUpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHZhbHVlICogbV9kZXZpY2VQaXhlbFJhdGlvOwotfQotCi1zdGF0aWMg
aW5saW5lIFFQb2ludEYgYm91bmRQb3NpdGlvbihjb25zdCBRUG9pbnRGIG1pblBvc2l0aW9uLCBj
b25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgY29uc3QgUVBvaW50RiYgbWF4UG9zaXRpb24pCi17Ci0g
ICAgcmV0dXJuIFFQb2ludEYocUJvdW5kKG1pblBvc2l0aW9uLngoKSwgcG9zaXRpb24ueCgpLCBt
YXhQb3NpdGlvbi54KCkpLAotICAgICAgICAgICAgICAgICAgIHFCb3VuZChtaW5Qb3NpdGlvbi55
KCksIHBvc2l0aW9uLnkoKSwgbWF4UG9zaXRpb24ueSgpKSk7Ci19Ci0KLWlubGluZSBRUmVjdEYg
UXRWaWV3cG9ydEhhbmRsZXI6Oml0ZW1SZWN0RnJvbUNTUyhjb25zdCBRUmVjdEYmIGNzc1JlY3Qp
IGNvbnN0Ci17Ci0gICAgUVJlY3RGIGl0ZW1SZWN0OwotCi0gICAgaXRlbVJlY3Quc2V0WChpdGVt
Q29vcmRGcm9tQ1NTKGNzc1JlY3QueCgpKSk7Ci0gICAgaXRlbVJlY3Quc2V0WShpdGVtQ29vcmRG
cm9tQ1NTKGNzc1JlY3QueSgpKSk7Ci0gICAgaXRlbVJlY3Quc2V0V2lkdGgoaXRlbUNvb3JkRnJv
bUNTUyhjc3NSZWN0LndpZHRoKCkpKTsKLSAgICBpdGVtUmVjdC5zZXRIZWlnaHQoaXRlbUNvb3Jk
RnJvbUNTUyhjc3NSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICByZXR1cm4gaXRlbVJlY3Q7Ci19Ci0K
LVF0Vmlld3BvcnRIYW5kbGVyOjpRdFZpZXdwb3J0SGFuZGxlcihXZWJLaXQ6OldlYlBhZ2VQcm94
eSogcHJveHksIFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRlbSwgUVF1aWNrV2ViUGFnZSogcGFn
ZUl0ZW0pCi0gICAgOiBtX3dlYlBhZ2VQcm94eShwcm94eSkKLSAgICAsIG1fdmlld3BvcnRJdGVt
KHZpZXdwb3J0SXRlbSkKLSAgICAsIG1fcGFnZUl0ZW0ocGFnZUl0ZW0pCi0gICAgLCBtX2FsbG93
c1VzZXJTY2FsaW5nKGZhbHNlKQotICAgICwgbV9taW5pbXVtU2NhbGUoMSkKLSAgICAsIG1fbWF4
aW11bVNjYWxlKDEpCi0gICAgLCBtX2RldmljZVBpeGVsUmF0aW8oMSkKLSAgICAsIG1fc3VzcGVu
ZENvdW50KDApCi0gICAgLCBtX2hhc1N1c3BlbmRlZENvbnRlbnQoZmFsc2UpCi0gICAgLCBtX2hh
ZFVzZXJJbnRlcmFjdGlvbihmYWxzZSkKLSAgICAsIG1fc2NhbGVBbmltYXRpb24obmV3IFNjYWxl
QW5pbWF0aW9uKHRoaXMpKQotICAgICwgbV9waW5jaFN0YXJ0U2NhbGUoLTEpCi0gICAgLCBtX2xh
c3RDb21taXR0ZWRTY2FsZSgtMSkKLSAgICAsIG1fem9vbU91dFNjYWxlKDAuMCkKLXsKLSAgICBt
X3NjYWxlQW5pbWF0aW9uLT5zZXREdXJhdGlvbihrU2NhbGVBbmltYXRpb25EdXJhdGlvbk1pbGxp
cyk7Ci0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0RWFzaW5nQ3VydmUoUUVhc2luZ0N1cnZlOjpP
dXRDdWJpYyk7Ci0KLSAgICAvLyBJbml0aWFsaXppbmcgVmlld3BvcnQgUmF3IEF0dHJpYnV0ZXMg
dG8gYXZvaWQgcmFuZG9tIG5lZ2F0aXZlIHNjYWxlIGZhY3RvcnMKLSAgICAvLyBpZiB0aGVyZSBp
cyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGxheW91dCBhbmQgc2V0dGluZyB0
aGUgdmlld3BvcnQgYXR0cmlidXRlcyBmb3IgdGhlIGZpcnN0IHRpbWUuCi0gICAgbV9yYXdBdHRy
aWJ1dGVzLmRldmljZVBpeGVsUmF0aW8gPSBtX2RldmljZVBpeGVsUmF0aW87Ci0gICAgbV9yYXdB
dHRyaWJ1dGVzLmluaXRpYWxTY2FsZSA9IDE7Ci0gICAgbV9yYXdBdHRyaWJ1dGVzLm1pbmltdW1T
Y2FsZSA9IG1fbWluaW11bVNjYWxlOwotICAgIG1fcmF3QXR0cmlidXRlcy5tYXhpbXVtU2NhbGUg
PSBtX21heGltdW1TY2FsZTsKLSAgICBtX3Jhd0F0dHJpYnV0ZXMudXNlclNjYWxhYmxlID0gbV9h
bGxvd3NVc2VyU2NhbGluZzsKLQotICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTCht
b3ZlbWVudFN0YXJ0ZWQoKSksIFNMT1QoZmxpY2tNb3ZlU3RhcnRlZCgpKSwgUXQ6OkRpcmVjdENv
bm5lY3Rpb24pOwotICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChtb3ZlbWVudEVu
ZGVkKCkpLCBTTE9UKGZsaWNrTW92ZUVuZGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci0K
LSAgICBjb25uZWN0KG1fc2NhbGVBbmltYXRpb24sIFNJR05BTCh2YWx1ZUNoYW5nZWQoUVZhcmlh
bnQpKSwKLSAgICAgICAgICAgIFNMT1Qoc2NhbGVBbmltYXRpb25WYWx1ZUNoYW5nZWQoUVZhcmlh
bnQpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotICAgIGNvbm5lY3QobV9zY2FsZUFuaW1hdGlv
biwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJh
Y3RBbmltYXRpb246OlN0YXRlKSksCi0gICAgICAgICAgICBTTE9UKHNjYWxlQW5pbWF0aW9uU3Rh
dGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6
U3RhdGUpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotfQotCi1RdFZpZXdwb3J0SGFuZGxlcjo6
flF0Vmlld3BvcnRIYW5kbGVyKCkKLXsKLX0KLQotcXJlYWwgUXRWaWV3cG9ydEhhbmRsZXI6Omlu
bmVyQm91bmRlZENTU1NjYWxlKHFyZWFsIGNzc1NjYWxlKSBjb25zdAotewotICAgIHJldHVybiBx
Qm91bmQobV9taW5pbXVtU2NhbGUsIGNzc1NjYWxlLCBtX21heGltdW1TY2FsZSk7Ci19Ci0KLXFy
ZWFsIFF0Vmlld3BvcnRIYW5kbGVyOjpvdXRlckJvdW5kZWRDU1NTY2FsZShxcmVhbCBjc3NTY2Fs
ZSkgY29uc3QKLXsKLSAgICBpZiAobV9hbGxvd3NVc2VyU2NhbGluZykgewotICAgICAgICAvLyBC
b3VuZGVkIGJ5IFswLjEsIDEwLjBdIGxpa2UgdGhlIHZpZXdwb3J0IG1ldGEgY29kZSBpbiBXZWJD
b3JlLgotICAgICAgICBxcmVhbCBoYXJkTWluID0gcU1heDxxcmVhbD4oMC4xLCBxcmVhbCgwLjUp
ICogbV9taW5pbXVtU2NhbGUpOwotICAgICAgICBxcmVhbCBoYXJkTWF4ID0gcU1pbjxxcmVhbD4o
MTAsIHFyZWFsKDIuMCkgKiBtX21heGltdW1TY2FsZSk7Ci0gICAgICAgIHJldHVybiBxQm91bmQo
aGFyZE1pbiwgY3NzU2NhbGUsIGhhcmRNYXgpOwotICAgIH0KLSAgICByZXR1cm4gaW5uZXJCb3Vu
ZGVkQ1NTU2NhbGUoY3NzU2NhbGUpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzZXRJ
bml0aWFsU2NhbGVJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fcmF3QXR0cmlidXRlcy5sYXlvdXRT
aXplLmlzRW1wdHkoKSB8fCBtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlIDwgMCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV96b29tT3V0U2NhbGUgPSAwLjA7Ci0gICAgbV9zY2FsZVN0YWNr
LmNsZWFyKCk7Ci0KLSAgICBtX2hhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOwotCi0gICAgLy8g
V2UgbXVzdCBub3QgYW5pbWF0ZSBoZXJlIGFzIHRoZSBuZXcgY29udGVudHMgc2l6ZSBtaWdodCBi
ZSB2ZXJ5IGRpZmZlcmVudAotICAgIC8vIHRoYW4gdGhlIGN1cnJlbnQgb25lLgotICAgIHNldFBh
Z2VJdGVtUmVjdFZpc2libGUoaW5pdGlhbFJlY3QoKSk7Ci0KLSAgICBtX3Jhd0F0dHJpYnV0ZXMu
aW5pdGlhbFNjYWxlID0gLTE7IC8vIE1hcmsgdXNlZC4KLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFu
ZGxlcjo6dmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0
dHJpYnV0ZXMmIG5ld0F0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKG5ld0F0dHJpYnV0ZXMubGF5b3V0
U2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcmF3QXR0cmlidXRlcyA9
IG5ld0F0dHJpYnV0ZXM7Ci0gICAgV2ViQ29yZTo6cmVzdHJpY3RTY2FsZUZhY3RvclRvSW5pdGlh
bFNjYWxlSWZOb3RVc2VyU2NhbGFibGUobV9yYXdBdHRyaWJ1dGVzKTsKLQotICAgIGlmICghcUZ1
enp5Q29tcGFyZShtX2RldmljZVBpeGVsUmF0aW8sIHN0YXRpY19jYXN0PHFyZWFsPihtX3Jhd0F0
dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbykpKSB7Ci0gICAgICAgIG1fZGV2aWNlUGl4ZWxSYXRp
byA9IG1fcmF3QXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvOyAvLyBTaG91bGQgcmV0dXJuIHZh
bHVlIGZyb20gdGhlIHdlYlBhZ2VQcm94eS4KLSAgICAgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+
ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+ZGV2aWNlUGl4ZWxSYXRpb0NoYW5nZWQoKTsKLSAgICB9
Ci0KLSAgICBtX2FsbG93c1VzZXJTY2FsaW5nID0gISFtX3Jhd0F0dHJpYnV0ZXMudXNlclNjYWxh
YmxlOwotICAgIG1fbWluaW11bVNjYWxlID0gbV9yYXdBdHRyaWJ1dGVzLm1pbmltdW1TY2FsZTsK
LSAgICBtX21heGltdW1TY2FsZSA9IG1fcmF3QXR0cmlidXRlcy5tYXhpbXVtU2NhbGU7Ci0KLSAg
ICAvLyBNYWtlIHN1cmUgd2UgYXBwbHkgdGhlIG5ldyBpbml0aWFsIHNjYWxlIHdoZW4gZGVmZXJy
aW5nIGVuZHMuCi0gICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKLQotICAg
IGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPnZpZXdwb3J0Q2hh
bmdlZCgpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwYWdlQ29udGVudHNTaXplQ2hh
bmdlZChjb25zdCBRU2l6ZSYgbmV3U2l6ZSwgY29uc3QgUVNpemUmIHZpZXdwb3J0U2l6ZSkKLXsK
LSAgICBpZiAodmlld3BvcnRTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ZmxvYXQgbWluaW11bVNjYWxlID0gV2ViQ29yZTo6Y29tcHV0ZU1pbmltdW1TY2FsZUZhY3RvckZv
ckNvbnRlbnRDb250YWluZWQobV9yYXdBdHRyaWJ1dGVzLCB2aWV3cG9ydFNpemUsIG5ld1NpemUp
OwotCi0gICAgaWYgKCFxRnV6enlDb21wYXJlKG1pbmltdW1TY2FsZSwgbV9yYXdBdHRyaWJ1dGVz
Lm1pbmltdW1TY2FsZSkpIHsKLSAgICAgICAgbV9taW5pbXVtU2NhbGUgPSBtaW5pbXVtU2NhbGU7
Ci0gICAgICAgIGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPnZp
ZXdwb3J0Q2hhbmdlZCgpOwotCi0gICAgICAgIGlmICghbV9oYWRVc2VySW50ZXJhY3Rpb24gJiYg
IW1faGFzU3VzcGVuZGVkQ29udGVudCkgewotICAgICAgICAgICAgLy8gRW1pdHMgY29udGVudHNT
Y2FsZUNoYW5nZWQoKTsKLSAgICAgICAgICAgIHNldENTU1NjYWxlKG1pbmltdW1TY2FsZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBFbWl0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCBzbyB0
aGF0IGl0IGNhbiBiZSB2ZXJpZmllZCB0aGF0Ci0gICAgLy8gd2UgZGlkbid0IGRvIHNjYWxlIGFk
anVzdG1lbnQuCi0gICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3Qo
KS0+Y29udGVudHNTY2FsZUNvbW1pdHRlZCgpOwotCi0gICAgaWYgKCFtX2hhc1N1c3BlbmRlZENv
bnRlbnQpIHsKLSAgICAgICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKLSAg
ICAgICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShuZWFyZXN0VmFsaWRCb3VuZHMoKSk7Ci0gICAg
fQotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKGNv
bnN0IFFSZWN0RiYgaXRlbVJlY3QpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3N1c3Bl
bmRDb3VudCwKLSAgICAgICAgInNldFBhZ2VJdGVtUmVjdFZpc2libGUgaGFzIHRvIGJlIGd1YXJk
ZWQgdXNpbmcgYSBWaWV3cG9ydFVwZGF0ZURlZmVycmVyLiIpOwotCi0gICAgaWYgKGl0ZW1SZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcXJlYWwgaXRlbVNjYWxlID0gbV92
aWV3cG9ydEl0ZW0tPndpZHRoKCkgLyBpdGVtUmVjdC53aWR0aCgpOwotCi0gICAgbV9wYWdlSXRl
bS0+c2V0Q29udGVudHNTY2FsZShpdGVtU2NhbGUpOwotCi0gICAgLy8gVG8gYW5pbWF0ZSB0aGUg
cG9zaXRpb24gdG9nZXRoZXIgd2l0aCB0aGUgc2NhbGUgd2UgbXVsdGlwbHkgdGhlIHBvc2l0aW9u
IHdpdGggdGhlIGN1cnJlbnQgc2NhbGUKLSAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBwYWdlIHBv
c2l0aW9uIChkaXNwbGFjZW1lbnQgb24gdGhlIGZsaWNrYWJsZSBjb250ZW50SXRlbSBiZWNhdXNl
IG9mIGFkZGl0aW9uYWwgaXRlbXMpLgotICAgIFFQb2ludEYgbmV3UG9zaXRpb24obV9wYWdlSXRl
bS0+cG9zKCkgKyAoaXRlbVJlY3QudG9wTGVmdCgpICogaXRlbVNjYWxlKSk7Ci0KLSAgICBtX3Zp
ZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyhuZXdQb3NpdGlvbik7Ci19Ci0KLXZvaWQgUXRWaWV3
cG9ydEhhbmRsZXI6OmFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRl
bVJlY3QpCi17Ci0gICAgQVNTRVJUKG1fc2NhbGVBbmltYXRpb24tPnN0YXRlKCkgPT0gUUFic3Ry
YWN0QW5pbWF0aW9uOjpTdG9wcGVkKTsKLQotICAgIEFTU0VSVCghc2Nyb2xsQW5pbWF0aW9uQWN0
aXZlKCkpOwotICAgIGlmIChzY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUVJlY3RGIGN1cnJlbnRQYWdlSXRlbVJlY3RWaXNpYmxlID0gbV92aWV3cG9ydEl0
ZW0tPm1hcFJlY3RUb1dlYkNvbnRlbnQobV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpKTsK
LSAgICBpZiAoaXRlbVJlY3QgPT0gY3VycmVudFBhZ2VJdGVtUmVjdFZpc2libGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2NhbGVBbmltYXRpb24tPnNldFN0YXJ0VmFsdWUoY3VycmVudFBh
Z2VJdGVtUmVjdFZpc2libGUpOwotICAgIG1fc2NhbGVBbmltYXRpb24tPnNldEVuZFZhbHVlKGl0
ZW1SZWN0KTsKLQotICAgIG1fc2NhbGVBbmltYXRpb24tPnN0YXJ0KCk7Ci19Ci0KLXZvaWQgUXRW
aWV3cG9ydEhhbmRsZXI6OmZsaWNrTW92ZVN0YXJ0ZWQoKQotewotICAgIFFfQVNTRVJUKG1fdmll
d3BvcnRJdGVtLT5pc01vdmluZygpKTsKLSAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyID0gYWRv
cHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3BvcnRVcGRhdGVEZWZl
cnJlcjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOwotCi0gICAgbV9sYXN0U2Nyb2xs
UG9zaXRpb24gPSBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpOwotICAgIGNvbm5lY3QobV92
aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIFNMT1QocGFnZUl0ZW1Qb3Np
dGlvbkNoYW5nZWQoKSkpOwotICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250
ZW50WUNoYW5nZWQoKSksIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOwotfQotCi12
b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpmbGlja01vdmVFbmRlZCgpCi17Ci0gICAgUV9BU1NFUlQo
IW1fdmlld3BvcnRJdGVtLT5pc01vdmluZygpKTsKLSAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxs
ZWQgb24gdGhlIGVuZCBvZiB0aGUgcGFuIG9yIHBhbiBraW5ldGljIGFuaW1hdGlvbi4KLSAgICBt
X3Njcm9sbFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci0KLSAgICBtX2xhc3RTY3JvbGxQb3NpdGlv
biA9IFFQb2ludEYoKTsKLSAgICBkaXNjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwoY29u
dGVudFhDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKHBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkpKTsK
LSAgICBkaXNjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkp
LCB0aGlzLCBTTE9UKHBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkpKTsKLX0KLQotdm9pZCBRdFZp
ZXdwb3J0SGFuZGxlcjo6cGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKQotewotICAgIFFQb2ludEYg
bmV3UG9zaXRpb24gPSBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpOwotCi0gICAgaW5mb3Jt
VmlzaWJsZUNvbnRlbnRDaGFuZ2UobV9sYXN0U2Nyb2xsUG9zaXRpb24gLSBuZXdQb3NpdGlvbik7
Ci0KLSAgICBtX2xhc3RTY3JvbGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwotfQotCi12b2lkIFF0
Vmlld3BvcnRIYW5kbGVyOjpwYWdlQ29udGVudFBvc2l0aW9uUmVxdWVzdGVkKGNvbnN0IFFQb2lu
dCYgY3NzUG9zaXRpb24pCi17Ci0gICAgLy8gSWdub3JlIHRoZSByZXF1ZXN0IGlmIHN1c3BlbmRl
ZC4gQ2FuIG9ubHkgaGFwcGVuIGR1ZSB0byBkZWxheSBpbiBldmVudCBkZWxpdmVyeS4KLSAgICBp
ZiAobV9zdXNwZW5kQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHFyZWFsIGVuZEl0ZW1T
Y2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsgLy8gU3RheSBhdCBzYW1lIHNjYWxl
LgotCi0gICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1B
dFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0gICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGJvdW5kUG9z
aXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBjc3NQb3NpdGlvbiAqIGVuZEl0ZW1TY2FsZSwg
ZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7Ci0KLSAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRl
bnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRp
bmdSZWN0KCkuc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKLQotICAgIFZpZXdwb3J0VXBkYXRlRGVm
ZXJyZXIgZ3VhcmQodGhpcyk7Ci0gICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShlbmRWaXNpYmxl
Q29udGVudFJlY3QpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUFuaW1hdGlv
blN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJh
Y3RBbmltYXRpb246OlN0YXRlIC8qb2xkU3RhdGUqLykKLXsKLSAgICBzd2l0Y2ggKG5ld1N0YXRl
KSB7Ci0gICAgY2FzZSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc6Ci0gICAgICAgIG1fdmll
d3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOwotICAgICAgICBBU1NFUlQoIW1fYW5pbWF0aW9uVXBk
YXRlRGVmZXJyZXIpOwotICAgICAgICBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyID0gYWRvcHRQ
dHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3BvcnRVcGRhdGVEZWZlcnJl
cjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RvcHBlZDoKLSAgICAgICAgbV9hbmltYXRpb25VcGRh
dGVEZWZlcnJlci5jbGVhcigpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNjYWxlQW5pbWF0
aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50IHZhbHVlKQotewotICAgIC8vIFJlc2V0dGluZyB0aGUg
ZW5kIHZhbHVlLCB0aGUgZWFzaW5nIGN1cnZlIG9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgc2NhbGUg
YW5pbWF0aW9uCi0gICAgLy8gdHJpZ2dlcnMgYSByZWNhbGN1bGF0aW9uIG9mIHRoZSBhbmltYXRp
b24gaW50ZXJ2YWwuIFRoaXMgbWlnaHQgY2hhbmdlIHRoZSBjdXJyZW50Ci0gICAgLy8gdmFsdWUg
b2YgdGhlIGFuaW1hdGVkIHByb3BlcnR5LgotICAgIC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IGFjdCBv
biBhbmltYXRpb24gdmFsdWUgY2hhbmdlcyBpZiB0aGUgYW5pbWF0aW9uIGlzIGFjdGl2ZS4KLSAg
ICBpZiAoIXNjYWxlQW5pbWF0aW9uQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNl
dFBhZ2VJdGVtUmVjdFZpc2libGUodmFsdWUudG9SZWN0RigpKTsKLX0KLQotdm9pZCBRdFZpZXdw
b3J0SGFuZGxlcjo6dG91Y2hCZWdpbigpCi17Ci0gICAgbV9oYWRVc2VySW50ZXJhY3Rpb24gPSB0
cnVlOwotCi0gICAgLy8gUHJldmVudHMgcmVzdW1pbmcgdGhlIHBhZ2UgYmV0d2VlbiB0aGUgdXNl
cidzIGZsaWNrcyBvZiB0aGUgcGFnZSB3aGlsZSB0aGUgYW5pbWF0aW9uIGlzIHJ1bm5pbmcuCi0g
ICAgaWYgKHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQotICAgICAgICBtX3RvdWNoVXBkYXRlRGVm
ZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9y
dFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Ci19Ci0KLXZv
aWQgUXRWaWV3cG9ydEhhbmRsZXI6OnRvdWNoRW5kKCkKLXsKLSAgICBtX3RvdWNoVXBkYXRlRGVm
ZXJyZXIuY2xlYXIoKTsKLX0KLQotUVJlY3RGIFF0Vmlld3BvcnRIYW5kbGVyOjpjb21wdXRlUG9z
UmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUocXJlYWwgaXRlbVNjYWxlKSBjb25zdAotewotICAgIGNv
bnN0IFFTaXplRiBjb250ZW50SXRlbVNpemUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NpemUoKSAq
IGl0ZW1TY2FsZTsKLSAgICBjb25zdCBRU2l6ZUYgdmlld3BvcnRJdGVtU2l6ZSA9IG1fdmlld3Bv
cnRJdGVtLT5ib3VuZGluZ1JlY3QoKS5zaXplKCk7Ci0KLSAgICBjb25zdCBxcmVhbCBob3Jpem9u
dGFsUmFuZ2UgPSBjb250ZW50SXRlbVNpemUud2lkdGgoKSAtIHZpZXdwb3J0SXRlbVNpemUud2lk
dGgoKTsKLSAgICBjb25zdCBxcmVhbCB2ZXJ0aWNhbFJhbmdlID0gY29udGVudEl0ZW1TaXplLmhl
aWdodCgpIC0gdmlld3BvcnRJdGVtU2l6ZS5oZWlnaHQoKTsKLQotICAgIHJldHVybiBRUmVjdEYo
UVBvaW50RigwLCAwKSwgUVNpemVGKGhvcml6b250YWxSYW5nZSwgdmVydGljYWxSYW5nZSkpOwot
fQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpmb2N1c0VkaXRhYmxlQXJlYShjb25zdCBRUmVj
dEYmIGNhcmV0QXJlYSwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKQotewotICAgIC8vIFRoaXMg
Y2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KLSAgICBB
U1NFUlQobV9oYWRVc2VySW50ZXJhY3Rpb24pOwotCi0gICAgUVJlY3RGIGVuZEFyZWEgPSBpdGVt
UmVjdEZyb21DU1ModGFyZ2V0QXJlYSk7Ci0KLSAgICBxcmVhbCBlbmRJdGVtU2NhbGUgPSBpdGVt
U2NhbGVGcm9tQ1NTKGlubmVyQm91bmRlZENTU1NjYWxlKDIuMCkpOwotICAgIGNvbnN0IFFSZWN0
RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCk7Ci0KLSAgICBx
cmVhbCB4OwotICAgIGNvbnN0IHFyZWFsIGJvcmRlck9mZnNldCA9IDEwOwotICAgIGlmICgoZW5k
QXJlYS53aWR0aCgpICsgYm9yZGVyT2Zmc2V0KSAqIGVuZEl0ZW1TY2FsZSA8PSB2aWV3cG9ydFJl
Y3Qud2lkdGgoKSkgewotICAgICAgICAvLyBDZW50ZXIgdGhlIGlucHV0IGZpZWxkIGluIHRoZSBt
aWRkbGUgb2YgdGhlIHZpZXcsIGlmIGl0IGlzIHNtYWxsZXIgdGhhbgotICAgICAgICAvLyB0aGUg
dmlldyBhdCB0aGUgc2NhbGUgdGFyZ2V0LgotICAgICAgICB4ID0gdmlld3BvcnRSZWN0LmNlbnRl
cigpLngoKSAtIGVuZEFyZWEud2lkdGgoKSAqIGVuZEl0ZW1TY2FsZSAvIDIuMDsKLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgY2FyZXQgYWx3YXlzIGhhcyBib3JkZXJP
ZmZzZXQgY29udGVudHMgcGl4ZWxzIHRvIHRoZSByaWdodAotICAgICAgICAvLyBvZiBpdCwgYW5k
IHNlY29uZGFyaWx5IChpZiBwb3NzaWJsZSksIHRoYXQgdGhlIGFyZWEgaGFzIGJvcmRlck9mZnNl
dAotICAgICAgICAvLyBjb250ZW50cyBwaXhlbHMgdG8gdGhlIGxlZnQgb2YgaXQuCi0gICAgICAg
IHFyZWFsIGNhcmV0T2Zmc2V0ID0gaXRlbUNvb3JkRnJvbUNTUyhjYXJldEFyZWEueCgpKSAtIGVu
ZEFyZWEueCgpOwotICAgICAgICB4ID0gcU1pbih2aWV3cG9ydFJlY3Qud2lkdGgoKSAtIChjYXJl
dE9mZnNldCArIGJvcmRlck9mZnNldCkgKiBlbmRJdGVtU2NhbGUsIGJvcmRlck9mZnNldCAqIGVu
ZEl0ZW1TY2FsZSk7Ci0gICAgfQotCi0gICAgY29uc3QgUVBvaW50RiBob3RzcG90ID0gUVBvaW50
RihlbmRBcmVhLngoKSwgZW5kQXJlYS5jZW50ZXIoKS55KCkpOwotICAgIGNvbnN0IFFQb2ludEYg
dmlld3BvcnRIb3RzcG90ID0gUVBvaW50Rih4LCAvKiBGSVhNRTogdmlzaWJsZUNlbnRlciAqLyB2
aWV3cG9ydFJlY3QuY2VudGVyKCkueSgpKTsKLQotICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBo
b3RzcG90ICogZW5kSXRlbVNjYWxlIC0gdmlld3BvcnRIb3RzcG90OwotICAgIFFSZWN0RiBlbmRQ
b3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShlbmRJdGVtU2NhbGUp
OwotCi0gICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQo
KSwgZW5kUG9zaXRpb24sIGVuZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpOwotCi0gICAgUVJlY3RG
IGVuZFZpc2libGVDb250ZW50UmVjdChlbmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3Bv
cnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2FsZSk7Ci0KLSAgICBhbmltYXRlUGFnZUl0ZW1SZWN0
VmlzaWJsZShlbmRWaXNpYmxlQ29udGVudFJlY3QpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5k
bGVyOjp6b29tVG9BcmVhR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHRvdWNoUG9pbnQsIGNv
bnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSkKLXsKLSAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBh
cyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCi0gICAgQVNTRVJUKG1faGFkVXNlcklu
dGVyYWN0aW9uKTsKLQotICAgIGlmICghdGFyZ2V0QXJlYS5pc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX3N1c3BlbmRDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y29uc3QgaW50IG1hcmdpbiA9IDEwOyAvLyBXZSB3YW50IGF0IGxlYXN0IGEgbGl0dGxlIGJpdCBv
ZiBtYXJnaW4uCi0gICAgUVJlY3RGIGVuZEFyZWEgPSBpdGVtUmVjdEZyb21DU1ModGFyZ2V0QXJl
YS5hZGp1c3RlZCgtbWFyZ2luLCAtbWFyZ2luLCBtYXJnaW4sIG1hcmdpbikpOwotCi0gICAgY29u
c3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsK
LQotICAgIHFyZWFsIHRhcmdldENTU1NjYWxlID0gdmlld3BvcnRSZWN0LnNpemUoKS53aWR0aCgp
IC8gZW5kQXJlYS5zaXplKCkud2lkdGgoKTsKLSAgICBxcmVhbCBlbmRDU1NTY2FsZSA9IGlubmVy
Qm91bmRlZENTU1NjYWxlKHFNaW4odGFyZ2V0Q1NTU2NhbGUsIHFyZWFsKDIuNSkpKTsKLSAgICBx
cmVhbCBlbmRJdGVtU2NhbGUgPSBpdGVtU2NhbGVGcm9tQ1NTKGVuZENTU1NjYWxlKTsKLSAgICBx
cmVhbCBjdXJyZW50U2NhbGUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7Ci0KLSAgICAv
LyBXZSB3YW50IHRvIGVuZCB1cCB3aXRoIHRoZSB0YXJnZXQgYXJlYSBmaWxsaW5nIHRoZSB3aG9s
ZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQgKGlmIHBvc3NpYmxlKSwKLSAgICAvLyBhbmQgY2VudHJh
bGl6ZWQgdmVydGljYWxseSB3aGVyZSB0aGUgdXNlciByZXF1ZXN0ZWQgem9vbS4gVGh1cyBvdXIg
aG90c3BvdCBpcyB0aGUgY2VudGVyIG9mCi0gICAgLy8gdGhlIHRhcmdldEFyZWEgeC13aXNlIGFu
ZCB0aGUgcmVxdWVzdGVkIHpvb20gcG9zaXRpb24sIHktd2lzZS4KLSAgICBjb25zdCBRUG9pbnRG
IGhvdHNwb3QgPSBRUG9pbnRGKGVuZEFyZWEuY2VudGVyKCkueCgpLCBpdGVtQ29vcmRGcm9tQ1NT
KHRvdWNoUG9pbnQueSgpKSk7Ci0gICAgY29uc3QgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSB2
aWV3cG9ydFJlY3QuY2VudGVyKCk7Ci0KLSAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gaG90c3Bv
dCAqIGVuZENTU1NjYWxlIC0gdmlld3BvcnRIb3RzcG90OwotCi0gICAgUVJlY3RGIGVuZFBvc1Jh
bmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0g
ICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgZW5k
UG9zaXRpb24sIGVuZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpOwotCi0gICAgUVJlY3RGIGVuZFZp
c2libGVDb250ZW50UmVjdChlbmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0
LnNpemUoKSAvIGVuZEl0ZW1TY2FsZSk7Ci0KLSAgICBlbnVtIHsgWm9vbUluLCBab29tQmFjaywg
Wm9vbU91dCwgTm9ab29tIH0gem9vbUFjdGlvbiA9IFpvb21JbjsKLQotICAgIGlmICghbV9zY2Fs
ZVN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBab29tIGJhY2sgb3V0IGlmIGF0dGVtcHRp
bmcgdG8gc2NhbGUgdG8gdGhlIHNhbWUgY3VycmVudCBzY2FsZSwgb3IKLSAgICAgICAgLy8gYXR0
ZW1wdGluZyB0byBjb250aW51ZSBzY2FsaW5nIG91dCBmcm9tIHRoZSBpbm5lciBtb3N0IGxldmVs
LgotICAgICAgICAvLyBVc2UgZnV6enkgY29tcGFyZSB3aXRoIGEgZml4ZWQgZXJyb3IgdG8gYmUg
YWJsZSB0byBkZWFsIHdpdGggbGFyZ2lzaCBkaWZmZXJlbmNlcyBkdWUgdG8gcGl4ZWwgcm91bmRp
bmcuCi0gICAgICAgIGlmIChmdXp6eUNvbXBhcmUoZW5kSXRlbVNjYWxlLCBjdXJyZW50U2NhbGUs
IDAuMDEpKSB7Ci0gICAgICAgICAgICAvLyBJZiBtb3ZpbmcgdGhlIHZpZXdwb3J0IHdvdWxkIGV4
cG9zZSBtb3JlIG9mIHRoZSB0YXJnZXRSZWN0IGFuZCBtb3ZlIGF0IGxlYXN0IDQwIHBpeGVscywg
dXBkYXRlIHBvc2l0aW9uIGJ1dCBkbyBub3Qgc2NhbGUgb3V0LgotICAgICAgICAgICAgUVJlY3RG
IGN1cnJlbnRDb250ZW50UmVjdChtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpIC8gY3VycmVu
dFNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gY3VycmVudFNjYWxlKTsKLSAgICAgICAgICAg
IFFSZWN0RiB0YXJnZXRJbnRlcnNlY3Rpb24gPSBlbmRWaXNpYmxlQ29udGVudFJlY3QuaW50ZXJz
ZWN0ZWQodGFyZ2V0QXJlYSk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb250ZW50UmVjdC5j
b250YWlucyh0YXJnZXRJbnRlcnNlY3Rpb24pICYmIChxQWJzKGVuZFZpc2libGVDb250ZW50UmVj
dC50b3AoKSAtIGN1cnJlbnRDb250ZW50UmVjdC50b3AoKSkgPj0gNDAgfHwgcUFicyhlbmRWaXNp
YmxlQ29udGVudFJlY3QubGVmdCgpIC0gY3VycmVudENvbnRlbnRSZWN0LmxlZnQoKSkgPj0gNDAp
KQotICAgICAgICAgICAgICAgIHpvb21BY3Rpb24gPSBOb1pvb207Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21CYWNrOwotICAgICAgICB9IGVsc2Ug
aWYgKGZ1enp5Q29tcGFyZShlbmRJdGVtU2NhbGUsIG1fem9vbU91dFNjYWxlLCAwLjAxKSkKLSAg
ICAgICAgICAgIHpvb21BY3Rpb24gPSBab29tQmFjazsKLSAgICAgICAgZWxzZSBpZiAoZW5kSXRl
bVNjYWxlIDwgY3VycmVudFNjYWxlKQotICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21PdXQ7
Ci0gICAgfQotCi0gICAgc3dpdGNoICh6b29tQWN0aW9uKSB7Ci0gICAgY2FzZSBab29tSW46Ci0g
ICAgICAgIG1fc2NhbGVTdGFjay5hcHBlbmQoU2NhbGVTdGFja0l0ZW0oY3VycmVudFNjYWxlLCBt
X3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpLngoKSkpOwotICAgICAgICBtX3pvb21PdXRTY2Fs
ZSA9IGVuZEl0ZW1TY2FsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBab29tQmFjazogewot
ICAgICAgICBTY2FsZVN0YWNrSXRlbSBsYXN0U2NhbGUgPSBtX3NjYWxlU3RhY2sudGFrZUxhc3Qo
KTsKLSAgICAgICAgZW5kSXRlbVNjYWxlID0gbGFzdFNjYWxlLnNjYWxlOwotICAgICAgICBlbmRD
U1NTY2FsZSA9IGNzc1NjYWxlRnJvbUl0ZW0obGFzdFNjYWxlLnNjYWxlKTsKLSAgICAgICAgLy8g
UmVjYWxjdWxhdGUgZW5kUG9zaXRpb24gYW5kIGJvdW5kIGl0IGFjY29yZGluZyB0byBuZXcgc2Nh
bGUuCi0gICAgICAgIGVuZFBvc2l0aW9uLnNldFkoaG90c3BvdC55KCkgKiBlbmRDU1NTY2FsZSAt
IHZpZXdwb3J0SG90c3BvdC55KCkpOwotICAgICAgICBlbmRQb3NpdGlvbi5zZXRYKGxhc3RTY2Fs
ZS54UG9zaXRpb24pOwotICAgICAgICBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvclBh
Z2VJdGVtQXRTY2FsZShlbmRJdGVtU2NhbGUpOwotICAgICAgICBlbmRQb3NpdGlvbiA9IGJvdW5k
UG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2Uu
Ym90dG9tUmlnaHQoKSk7Ci0gICAgICAgIGVuZFZpc2libGVDb250ZW50UmVjdCA9IFFSZWN0Rihl
bmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1T
Y2FsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFpvb21PdXQ6Ci0gICAgICAg
IC8vIFVuc3RhY2sgYWxsIHNjYWxlLWxldmVscyBkZWVwZXIgdGhhbiB0aGUgbmV3IGxldmVsLCBz
byBhIHpvb20tYmFjayB3b24ndCBlbmQgdXAgem9vbWluZyBpbi4KLSAgICAgICAgd2hpbGUgKCFt
X3NjYWxlU3RhY2suaXNFbXB0eSgpICYmIG1fc2NhbGVTdGFjay5sYXN0KCkuc2NhbGUgPj0gZW5k
SXRlbVNjYWxlKQotICAgICAgICAgICAgbV9zY2FsZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAg
ICAgbV96b29tT3V0U2NhbGUgPSBlbmRJdGVtU2NhbGU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgTm9ab29tOgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBhbmltYXRlUGFnZUl0ZW1S
ZWN0VmlzaWJsZShlbmRWaXNpYmxlQ29udGVudFJlY3QpOwotfQotCi1RUmVjdEYgUXRWaWV3cG9y
dEhhbmRsZXI6OmluaXRpYWxSZWN0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9yYXdBdHRyaWJ1
dGVzLmluaXRpYWxTY2FsZSA+IDApOwotCi0gICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gaXRlbVNj
YWxlRnJvbUNTUyhpbm5lckJvdW5kZWRDU1NTY2FsZShtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNj
YWxlKSk7Ci0gICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5i
b3VuZGluZ1JlY3QoKTsKLSAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KFFQb2ludEYo
MCwgMCksIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOwotCi0gICAgcmV0dXJu
IGVuZFZpc2libGVDb250ZW50UmVjdDsKLX0KLQotUVJlY3RGIFF0Vmlld3BvcnRIYW5kbGVyOjpu
ZWFyZXN0VmFsaWRCb3VuZHMoKSBjb25zdAotewotICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IGl0
ZW1TY2FsZUZyb21DU1MoaW5uZXJCb3VuZGVkQ1NTU2NhbGUoY3VycmVudENTU1NjYWxlKCkpKTsK
LQotICAgIGNvbnN0IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRp
bmdSZWN0KCk7Ci0gICAgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSB2aWV3cG9ydFJlY3QuY2Vu
dGVyKCk7Ci0KLSAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gbV92aWV3cG9ydEl0ZW0tPm1hcFRv
V2ViQ29udGVudCh2aWV3cG9ydEhvdHNwb3QpICogZW5kSXRlbVNjYWxlIC0gdmlld3BvcnRIb3Rz
cG90OwotCi0gICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0
ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0gICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9u
KGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgZW5kUG9zaXRpb24sIGVuZFBvc1JhbmdlLmJvdHRvbVJp
Z2h0KCkpOwotCi0gICAgUVJlY3RGIGVuZFZpc2libGVDb250ZW50UmVjdChlbmRQb3NpdGlvbiAv
IGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2FsZSk7Ci0KLSAg
ICByZXR1cm4gZW5kVmlzaWJsZUNvbnRlbnRSZWN0OwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5k
bGVyOjpzZXRDU1NTY2FsZShxcmVhbCBzY2FsZSkKLXsKLSAgICBWaWV3cG9ydFVwZGF0ZURlZmVy
cmVyIGd1YXJkKHRoaXMpOwotCi0gICAgcXJlYWwgbmV3U2NhbGUgPSBpbm5lckJvdW5kZWRDU1NT
Y2FsZShzY2FsZSk7Ci0gICAgbV9wYWdlSXRlbS0+c2V0Q29udGVudHNTY2FsZShpdGVtU2NhbGVG
cm9tQ1NTKG5ld1NjYWxlKSk7Ci19Ci0KLXFyZWFsIFF0Vmlld3BvcnRIYW5kbGVyOjpjdXJyZW50
Q1NTU2NhbGUoKSBjb25zdAotewotICAgIHJldHVybiBjc3NTY2FsZUZyb21JdGVtKG1fcGFnZUl0
ZW0tPmNvbnRlbnRzU2NhbGUoKSk7Ci19Ci0KLWJvb2wgUXRWaWV3cG9ydEhhbmRsZXI6OnNjcm9s
bEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlld3BvcnRJdGVtLT5p
c0ZsaWNraW5nKCk7Ci19Ci0KLWJvb2wgUXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVBY3Rp
dmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3ZpZXdwb3J0SXRlbS0+aXNEcmFnZ2luZygpOwot
fQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9p
bnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQotewotICAgIC8vIFRo
aXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KLSAg
ICBBU1NFUlQobV9oYWRVc2VySW50ZXJhY3Rpb24pOwotCi0gICAgbV92aWV3cG9ydEl0ZW0tPmhh
bmRsZUZsaWNrYWJsZU1vdXNlUHJlc3MocG9zaXRpb24sIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsK
LSAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBvc2l0aW9uOwot
fQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25z
dCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQotewotICAg
IG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2FibGVNb3VzZU1vdmUocG9zaXRpb24sIGV2ZW50
VGltZXN0YW1wTWlsbGlzKTsKLSAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGlu
YXRlcyA9IHBvc2l0aW9uOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJl
RW5kZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxp
cykKLXsKLSAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxpY2thYmxlTW91c2VSZWxlYXNlKHBv
c2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7Ci0gICAgbV9sYXN0UGluY2hDZW50ZXJJblZp
ZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxl
cjo6cGFuR2VzdHVyZUNhbmNlbGxlZCgpCi17Ci0gICAgLy8gUmVzZXQgdGhlIHZlbG9jaXR5IHNh
bXBsZXMgb2YgdGhlIGZsaWNrYWJsZS4KLSAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBieSB0aGUgcmVjb2duaXplciBpZiB3ZSBoYXZlIGEgcmVjb2duaXplZAotICAgIC8vIHBhbiBn
ZXN0dXJlIGFuZCByZWNlaXZlIGEgdG91Y2ggZXZlbnQgd2l0aCBtdWx0aXBsZSB0b3VjaCBwb2lu
dHMKLSAgICAvLyAoaWUuIHRyYW5zaXRpb24gdG8gYSBwaW5jaCBnZXN0dXJlKSBhcyBpdCBkb2Vz
IG5vdCBtb3ZlIHRoZSBjb250ZW50Ci0gICAgLy8gYmFjayBpbnNpZGUgdmFsaWQgYm91bmRzLgot
ICAgIC8vIFdoZW4gdGhlIHBpbmNoIGdlc3R1cmUgZW5kcywgdGhlIGNvbnRlbnQgaXMgcG9zaXRp
b25lZCBhbmQgc2NhbGVkCi0gICAgLy8gYmFjayB0byB2YWxpZCBib3VuZGFyaWVzLgotICAgIG1f
dmlld3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOwotfQotCi1ib29sIFF0Vmlld3BvcnRIYW5kbGVy
OjpzY2FsZUFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2NhbGVBbmlt
YXRpb24tPnN0YXRlKCkgPT0gUUFic3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nOwotfQotCi12b2lk
IFF0Vmlld3BvcnRIYW5kbGVyOjpjYW5jZWxTY3JvbGxBbmltYXRpb24oKQotewotICAgIGlmICgh
c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRo
ZSBwYW4gZ2VzdHVyZSByZWNvZ25pemVyIHJlY2VpdmVzIGEgdG91Y2ggYmVnaW4gZXZlbnQKLSAg
ICAvLyBkdXJpbmcgYW4gb25nb2luZyBraW5ldGljIHNjcm9sbCBhbmltYXRpb24gb2YgYSBwcmV2
aW91cwotICAgIC8vIHBhbiBnZXN0dXJlLCB0aGUgYW5pbWF0aW9uIGlzIHN0b3BwZWQgYW5kIHRo
ZSBjb250ZW50IGlzCi0gICAgLy8gaW1tZWRpYXRlbHkgcG9zaXRpb25lZCBiYWNrIHRvIHZhbGlk
IGJvdW5kYXJpZXMuCi0KLSAgICBtX3ZpZXdwb3J0SXRlbS0+Y2FuY2VsRmxpY2soKTsKLSAgICBW
aWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKHRoaXMpOwotICAgIHNldFBhZ2VJdGVtUmVjdFZp
c2libGUobmVhcmVzdFZhbGlkQm91bmRzKCkpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVy
OjppbnRlcnJ1cHRTY2FsZUFuaW1hdGlvbigpCi17Ci0gICAgLy8gVGhpcyBpbnRlcnJ1cHRzIHRo
ZSBzY2FsZSBhbmltYXRpb24gZXhhY3RseSB3aGVyZSBpdCBpcywgZXZlbiBpZiBpdCBpcyBvdXQg
b2YgYm91bmRzLgotICAgIG1fc2NhbGVBbmltYXRpb24tPnN0b3AoKTsKLX0KLQotYm9vbCBRdFZp
ZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9waW5jaFN0YXJ0U2NhbGUgPiAwOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwaW5j
aEdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzKQotewotICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEg
dXNlciBpbnRlcmFjdGlvbi4KLSAgICBBU1NFUlQobV9oYWRVc2VySW50ZXJhY3Rpb24pOwotCi0g
ICAgaWYgKCFtX2FsbG93c1VzZXJTY2FsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nj
YWxlU3RhY2suY2xlYXIoKTsKLSAgICBtX3pvb21PdXRTY2FsZSA9IDAuMDsKLQotICAgIG1fc2Nh
bGVVcGRhdGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKHRo
aXMsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQp
KTsKLQotICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcGluY2hD
ZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7Ci0gICAgbV9waW5jaFN0YXJ0U2NhbGUgPSBtX3Bh
Z2VJdGVtLT5jb250ZW50c1NjYWxlKCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBp
bmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdw
b3J0Q29vcmRpbmF0ZXMsIHFyZWFsIHRvdGFsU2NhbGVGYWN0b3IpCi17Ci0gICAgQVNTRVJUKG1f
c3VzcGVuZENvdW50KTsKLQotICAgIGlmICghbV9hbGxvd3NVc2VyU2NhbGluZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gIENoYW5nZXMgb2YgdGhlIGNlbnRlciBwb3NpdGlvbiBzaG91bGQg
bW92ZSB0aGUgcGFnZSBldmVuIGlmIHRoZSB6b29tIGZhY3RvcgotICAgIC8vICBkb2VzIG5vdCBj
aGFuZ2UuCi0gICAgY29uc3QgcXJlYWwgY3NzU2NhbGUgPSBjc3NTY2FsZUZyb21JdGVtKG1fcGlu
Y2hTdGFydFNjYWxlICogdG90YWxTY2FsZUZhY3Rvcik7Ci0KLSAgICAvLyBBbGxvdyB6b29taW5n
IG91dCBiZXlvbmQgbWltaW11bSBzY2FsZSBvbiBwYWdlcyB0aGF0IGRvIG5vdCBleHBsaWNpdGx5
IGRpc2FsbG93IGl0LgotICAgIGNvbnN0IHFyZWFsIHRhcmdldENTU1NjYWxlID0gb3V0ZXJCb3Vu
ZGVkQ1NTU2NhbGUoY3NzU2NhbGUpOwotCi0gICAgc2NhbGVDb250ZW50KG1fdmlld3BvcnRJdGVt
LT5tYXBUb1dlYkNvbnRlbnQocGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpLCB0YXJn
ZXRDU1NTY2FsZSk7Ci0KLSAgICBjb25zdCBRUG9pbnRGIHBvc2l0aW9uRGlmZiA9IHBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzIC0gbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29v
cmRpbmF0ZXM7Ci0gICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBw
aW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKLQotICAgIG1fdmlld3BvcnRJdGVtLT5z
ZXRDb250ZW50UG9zKG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkgLSBwb3NpdGlvbkRpZmYp
OwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwaW5jaEdlc3R1cmVFbmRlZCgpCi17Ci0g
ICAgQVNTRVJUKG1fc3VzcGVuZENvdW50KTsKLQotICAgIGlmICghbV9hbGxvd3NVc2VyU2NhbGlu
ZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9waW5jaFN0YXJ0U2NhbGUgPSAtMTsKLQotICAg
IGFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKG5lYXJlc3RWYWxpZEJvdW5kcygpKTsKLSAgICBt
X3NjYWxlVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsgLy8gQ2xlYXIgYWZ0ZXIgc3RhcnRpbmcgcG90
ZW50aWFsIGFuaW1hdGlvbiwgd2hpY2ggdGFrZXMgb3ZlciBkZWZlcnJpbmcuCi19Ci0KLXZvaWQg
UXRWaWV3cG9ydEhhbmRsZXI6OnBpbmNoR2VzdHVyZUNhbmNlbGxlZCgpCi17Ci0gICAgbV9waW5j
aFN0YXJ0U2NhbGUgPSAtMTsKLSAgICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKLX0K
LQotUVJlY3RGIFF0Vmlld3BvcnRIYW5kbGVyOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QK
LXsKLSAgICBjb25zdCBRUmVjdEYgdmlzaWJsZVJlY3QobV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5n
UmVjdCgpLmludGVyc2VjdGVkKG1fcGFnZUl0ZW0tPmJvdW5kaW5nUmVjdCgpKSk7Ci0gICAgcmV0
dXJuIG1fdmlld3BvcnRJdGVtLT5tYXBSZWN0VG9XZWJDb250ZW50KHZpc2libGVSZWN0KTsKLX0K
LQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6aW5mb3JtVmlzaWJsZUNvbnRlbnRDaGFuZ2UoY29u
c3QgUVBvaW50RiYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBEcmF3aW5nQXJlYVByb3h5KiBk
cmF3aW5nQXJlYSA9IG1fd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwotICAgIGlmICghZHJh
d2luZ0FyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIHFyZWFsIHNjYWxlID0gbV9wYWdlSXRl
bS0+Y29udGVudHNTY2FsZSgpOwotCi0gICAgaWYgKHNjYWxlICE9IG1fbGFzdENvbW1pdHRlZFNj
YWxlKQotICAgICAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgp
LT5jb250ZW50c1NjYWxlQ29tbWl0dGVkKCk7Ci0gICAgbV9sYXN0Q29tbWl0dGVkU2NhbGUgPSBz
Y2FsZTsKLQotICAgIGRyYXdpbmdBcmVhLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVD
b250ZW50c1JlY3QoKSwgc2NhbGUsIHRyYWplY3RvcnlWZWN0b3IpOwotCi0gICAgLy8gRW5zdXJl
IHRoYXQgdXBkYXRlUGFpbnROb2RlIGlzIGFsd2F5cyBjYWxsZWQgYmVmb3JlIHBhaW50aW5nLgot
ICAgIG1fcGFnZUl0ZW0tPnVwZGF0ZSgpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjp2
aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpCi17Ci0gICAgUVNpemUgdmlld3BvcnRTaXplID0gbV92
aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1NpemUoKTsKLQotICAgIGlmICh2
aWV3cG9ydFNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBMZXQgdGhl
IFdlYlByb2Nlc3Mga25vdyBhYm91dCB0aGUgbmV3IHZpZXdwb3J0IHNpemUsIHNvIHRoYXQKLSAg
ICAvLyBpdCBjYW4gcmVzaXplIHRoZSBjb250ZW50IGFjY29yZGluZ2x5LgotICAgIG1fd2ViUGFn
ZVByb3h5LT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKLQotICAgIGluZm9ybVZpc2li
bGVDb250ZW50Q2hhbmdlKFFQb2ludEYoKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6
OnNjYWxlQ29udGVudChjb25zdCBRUG9pbnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzLCBxcmVh
bCBjc3NTY2FsZSkKLXsKLSAgICBRUG9pbnRGIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9ydCA9IG1f
dmlld3BvcnRJdGVtLT5tYXBGcm9tV2ViQ29udGVudChjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzKTsK
LSAgICBtX3BhZ2VJdGVtLT5zZXRDb250ZW50c1NjYWxlKGl0ZW1TY2FsZUZyb21DU1MoY3NzU2Nh
bGUpKTsKLSAgICBRUG9pbnRGIG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCA9IG1fdmlld3BvcnRJ
dGVtLT5tYXBGcm9tV2ViQ29udGVudChjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzKTsKLQotICAgIG1f
dmlld3BvcnRJdGVtLT5zZXRDb250ZW50UG9zKG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkg
KyAobmV3UGluY2hDZW50ZXJPblZpZXdwb3J0IC0gb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0KSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jaW5jbHVkZSAibW9jX1F0Vmlld3BvcnRI
YW5kbGVyLmNwcCIKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRWaWV3cG9ydEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdw
b3J0SGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjM3ZmU5Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQmVuamFtaW4gUG91bGFpbiA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0K
LSNpZm5kZWYgUXRWaWV3cG9ydEhhbmRsZXJfaAotI2RlZmluZSBRdFZpZXdwb3J0SGFuZGxlcl9o
Ci0KLSNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KLSNpbmNsdWRlIDxRdENvcmUvUVJlY3RGPgot
I2luY2x1ZGUgPFF0Q29yZS9RVmFyaWFudD4KLSNpbmNsdWRlIDxRdENvcmUvUVZhcmlhbnRBbmlt
YXRpb24+Ci0jaW5jbHVkZSA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRUG9pbnRGOwotY2xh
c3MgUVdoZWVsRXZlbnQ7Ci1RVF9FTkRfTkFNRVNQQUNFCi0KLWNsYXNzIFFRdWlja1dlYlBhZ2U7
Ci1jbGFzcyBRUXVpY2tXZWJWaWV3OwotCi1jbGFzcyBRV2ViS2l0VGVzdDsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFZpZXdwb3J0VXBkYXRlRGVm
ZXJyZXI7Ci0KLWNsYXNzIFF0Vmlld3BvcnRIYW5kbGVyIDogcHVibGljIFFPYmplY3QgewotICAg
IFFfT0JKRUNUCi0KLXB1YmxpYzoKLSAgICBRdFZpZXdwb3J0SGFuZGxlcihXZWJQYWdlUHJveHkq
LCBRUXVpY2tXZWJWaWV3KiwgUVF1aWNrV2ViUGFnZSopOwotICAgIH5RdFZpZXdwb3J0SGFuZGxl
cigpOwotCi0gICAgdm9pZCB0b3VjaEJlZ2luKCk7Ci0gICAgdm9pZCB0b3VjaEVuZCgpOwotCi0g
ICAgYm9vbCBzY3JvbGxBbmltYXRpb25BY3RpdmUoKSBjb25zdDsKLSAgICB2b2lkIGNhbmNlbFNj
cm9sbEFuaW1hdGlvbigpOwotCi0gICAgYm9vbCBwYW5HZXN0dXJlQWN0aXZlKCkgY29uc3Q7Ci0g
ICAgdm9pZCBwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0
IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAgICB2b2lkIHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRl
KGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwot
ICAgIHZvaWQgcGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQg
ZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIHZvaWQgcGFuR2VzdHVyZUNhbmNlbGxlZCgpOwot
Ci0gICAgYm9vbCBzY2FsZUFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgaW50ZXJy
dXB0U2NhbGVBbmltYXRpb24oKTsKLQotICAgIGJvb2wgcGluY2hHZXN0dXJlQWN0aXZlKCkgY29u
c3Q7Ci0gICAgdm9pZCBwaW5jaEdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzKTsKLSAgICB2b2lkIHBpbmNoR2VzdHVyZVJlcXVlc3RV
cGRhdGUoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMsIHFy
ZWFsIHRvdGFsU2NhbGVGYWN0b3IpOwotICAgIHZvaWQgcGluY2hHZXN0dXJlRW5kZWQoKTsKLSAg
ICB2b2lkIHBpbmNoR2VzdHVyZUNhbmNlbGxlZCgpOwotCi0gICAgdm9pZCB6b29tVG9BcmVhR2Vz
dHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHRvdWNoUG9pbnQsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0
QXJlYSk7Ci0gICAgdm9pZCBmb2N1c0VkaXRhYmxlQXJlYShjb25zdCBRUmVjdEYmIGNhcmV0QXJl
YSwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKTsKLQotICAgIHZvaWQgcGFnZUNvbnRlbnRQb3Np
dGlvblJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBvc2l0aW9uKTsKLQotICAgIHZvaWQgdmlld3Bv
cnRJdGVtU2l6ZUNoYW5nZWQoKTsKLSAgICB2b2lkIHZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQo
Y29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7Ci0gICAgdm9pZCBpbmZvcm1WaXNp
YmxlQ29udGVudENoYW5nZShjb25zdCBRUG9pbnRGJiB0cmFqZWN0b3J5ID0gUVBvaW50RigpKTsK
LSAgICB2b2lkIHBhZ2VDb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFFTaXplJiBuZXdTaXplLCBj
b25zdCBRU2l6ZSYgdmlld3BvcnRTaXplKTsKLQotcHJpdmF0ZSBRX1NMT1RTOgotICAgIC8vIFJl
c3BvbmQgdG8gY2hhbmdlcyBvZiBwb3NpdGlvbiB0aGF0IGFyZSBub3QgZHJpdmVuIGJ5IHVzLgot
ICAgIHZvaWQgcGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKTsKLQotICAgIHZvaWQgc2NhbGVBbmlt
YXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5p
bWF0aW9uOjpTdGF0ZSk7Ci0gICAgdm9pZCBzY2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdlZChRVmFy
aWFudCB2YWx1ZSk7Ci0KLSAgICB2b2lkIGZsaWNrTW92ZVN0YXJ0ZWQoKTsgLy8gQ2FsbGVkIHdo
ZW4gcGFubmluZyBzdGFydHMuCi0gICAgdm9pZCBmbGlja01vdmVFbmRlZCgpOyAvLyAgIENhbGxl
ZCB3aGVuIHBhbm5pbmcgKCsga2luZXRpYyBhbmltYXRpb24pIGVuZHMuCi0KLXByaXZhdGU6Ci0g
ICAgZnJpZW5kIGNsYXNzIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI7Ci0gICAgZnJpZW5kIGNsYXNz
IDo6UVdlYktpdFRlc3Q7Ci0KLSAgICBXZWJQYWdlUHJveHkqIGNvbnN0IG1fd2ViUGFnZVByb3h5
OwotICAgIFFRdWlja1dlYlZpZXcqIGNvbnN0IG1fdmlld3BvcnRJdGVtOwotICAgIFFRdWlja1dl
YlBhZ2UqIGNvbnN0IG1fcGFnZUl0ZW07Ci0KLSAgICBxcmVhbCBjc3NTY2FsZUZyb21JdGVtKHFy
ZWFsKSBjb25zdDsKLSAgICBxcmVhbCBpdGVtU2NhbGVGcm9tQ1NTKHFyZWFsKSBjb25zdDsKLSAg
ICBxcmVhbCBpdGVtQ29vcmRGcm9tQ1NTKHFyZWFsKSBjb25zdDsKLSAgICBRUmVjdEYgaXRlbVJl
Y3RGcm9tQ1NTKGNvbnN0IFFSZWN0RiYpIGNvbnN0OwotCi0gICAgcXJlYWwgaW5uZXJCb3VuZGVk
Q1NTU2NhbGUocXJlYWwpIGNvbnN0OwotICAgIHFyZWFsIG91dGVyQm91bmRlZENTU1NjYWxlKHFy
ZWFsKSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW5pdGlhbFNjYWxlSWZOZWVkZWQoKTsKLQotICAg
IHZvaWQgc2V0Q1NTU2NhbGUocXJlYWwpOwotICAgIHFyZWFsIGN1cnJlbnRDU1NTY2FsZSgpIGNv
bnN0OwotCi0gICAgdm9pZCBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYpOwot
ICAgIHZvaWQgYW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJik7Ci0KLSAg
ICBRUmVjdEYgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIFFSZWN0RiBpbml0aWFs
UmVjdCgpIGNvbnN0OwotICAgIFFSZWN0RiBuZWFyZXN0VmFsaWRCb3VuZHMoKSBjb25zdDsKLQot
ICAgIFFSZWN0RiBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUocXJlYWwgaXRlbVNj
YWxlKSBjb25zdDsKLSAgICB2b2lkIHNjYWxlQ29udGVudChjb25zdCBRUG9pbnRGJiBjZW50ZXJJ
bkNTU0Nvb3JkaW5hdGVzLCBxcmVhbCBjc3NTY2FsZSk7Ci0KLSAgICB2b2lkIHN1c3BlbmRQYWdl
Q29udGVudCgpOwotICAgIHZvaWQgcmVzdW1lUGFnZUNvbnRlbnQoKTsKLQotICAgIFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyBtX3Jhd0F0dHJpYnV0ZXM7Ci0KLSAgICBib29sIG1fYWxsb3dz
VXNlclNjYWxpbmc7Ci0gICAgcXJlYWwgbV9taW5pbXVtU2NhbGU7Ci0gICAgcXJlYWwgbV9tYXhp
bXVtU2NhbGU7Ci0gICAgcXJlYWwgbV9kZXZpY2VQaXhlbFJhdGlvOwotCi0gICAgUVNpemUgbV9s
YXlvdXRTaXplOwotCi0gICAgaW50IG1fc3VzcGVuZENvdW50OwotICAgIGJvb2wgbV9oYXNTdXNw
ZW5kZWRDb250ZW50OwotCi0gICAgT3duUHRyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fc2Nh
bGVVcGRhdGVEZWZlcnJlcjsKLSAgICBPd25QdHI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV9z
Y3JvbGxVcGRhdGVEZWZlcnJlcjsKLSAgICBPd25QdHI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4g
bV90b3VjaFVwZGF0ZURlZmVycmVyOwotICAgIE93blB0cjxWaWV3cG9ydFVwZGF0ZURlZmVycmVy
PiBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyOwotCi0gICAgYm9vbCBtX2hhZFVzZXJJbnRlcmFj
dGlvbjsKLQotICAgIGNsYXNzIFNjYWxlQW5pbWF0aW9uIDogcHVibGljIFFWYXJpYW50QW5pbWF0
aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNjYWxlQW5pbWF0aW9uKFFPYmplY3QqIHBhcmVu
dCA9IDApCi0gICAgICAgICAgICA6IFFWYXJpYW50QW5pbWF0aW9uKHBhcmVudCkKLSAgICAgICAg
eyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUN1cnJlbnRWYWx1ZShjb25zdCBRVmFy
aWFudCYpIHsgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgU2NhbGVTdGFja0l0ZW0gewotICAgICAg
ICBTY2FsZVN0YWNrSXRlbShxcmVhbCBzY2FsZSwgcXJlYWwgeFBvc2l0aW9uKQotICAgICAgICAg
ICAgOiBzY2FsZShzY2FsZSkKLSAgICAgICAgICAgICwgeFBvc2l0aW9uKHhQb3NpdGlvbikKLSAg
ICAgICAgeyB9Ci0KLSAgICAgICAgcXJlYWwgc2NhbGU7Ci0gICAgICAgIHFyZWFsIHhQb3NpdGlv
bjsKLSAgICB9OwotCi0gICAgU2NhbGVBbmltYXRpb24qIG1fc2NhbGVBbmltYXRpb247Ci0gICAg
UVBvaW50RiBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKLSAgICBRUG9p
bnRGIG1fbGFzdFNjcm9sbFBvc2l0aW9uOwotICAgIHFyZWFsIG1fcGluY2hTdGFydFNjYWxlOwot
ICAgIHFyZWFsIG1fbGFzdENvbW1pdHRlZFNjYWxlOwotICAgIHFyZWFsIG1fem9vbU91dFNjYWxl
OwotICAgIFFMaXN0PFNjYWxlU3RhY2tJdGVtPiBtX3NjYWxlU3RhY2s7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFF0Vmlld3BvcnRIYW5kbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAK
aW5kZXggYTAyOTAwZi4uNGNlMTNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKICNp
bmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91
c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJR
dFZpZXdwb3J0SGFuZGxlci5oIgorI2luY2x1ZGUgIlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Lmgi
CiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgi
CiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCkBAIC0zMDUsNyArMzA1LDcgQEAgdm9pZCBR
dFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKQog
ICAgIG1fd2ViUGFnZVByb3h5LT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3
SXNGb2N1c2VkIHwgV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwogfQogCi12b2lk
IFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6c2V0Vmlld3BvcnRIYW5kbGVyKFF0Vmlld3BvcnRIYW5k
bGVyKiBoYW5kbGVyKQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SGFu
ZGxlcihWaWV3cG9ydEhhbmRsZXJDbGllbnRRdCogaGFuZGxlcikKIHsKICAgICBtX3ZpZXdwb3J0
SGFuZGxlciA9IGhhbmRsZXI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgKaW5kZXggNDQ2ZGI3NS4uOGM5MDMwOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIu
aApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBJbnRSZWN0OwogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIE5hdGl2ZVdlYlRvdWNoRXZlbnQ7Ci1jbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKK2Ns
YXNzIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OwogY2xhc3MgU2hhcmVhYmxlQml0bWFwOwogY2xh
c3MgV2ViR2VzdHVyZUV2ZW50OwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtNzUsNyArNzUsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVJbnB1dE1ldGhvZEV2ZW50KFFJbnB1dE1ldGhvZEV2
ZW50Kik7CiAgICAgdm9pZCBoYW5kbGVUb3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7CiAKLSAgICB2
b2lkIHNldFZpZXdwb3J0SGFuZGxlcihRdFZpZXdwb3J0SGFuZGxlciopOworICAgIHZvaWQgc2V0
Vmlld3BvcnRIYW5kbGVyKFZpZXdwb3J0SGFuZGxlckNsaWVudFF0Kik7CiAKICAgICB2b2lkIGFj
dGl2YXRlVGFwSGlnaGxpZ2h0KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50Jik7CiAgICAg
dm9pZCBkZWFjdGl2YXRlVGFwSGlnaGxpZ2h0KCk7CkBAIC05MSwxMyArOTEsMTMgQEAgcHVibGlj
OgogICAgIHZvaWQgaGFuZGxlSW5wdXRFdmVudChjb25zdCBRSW5wdXRFdmVudCopOwogICAgIHZv
aWQgcmVzZXRHZXN0dXJlUmVjb2duaXplcnMoKTsKIAotICAgIFF0Vmlld3BvcnRIYW5kbGVyKiB2
aWV3cG9ydEhhbmRsZXIoKSB7IHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlcjsgfQorICAgIFZpZXdw
b3J0SGFuZGxlckNsaWVudFF0KiB2aWV3cG9ydEhhbmRsZXIoKSB7IHJldHVybiBtX3ZpZXdwb3J0
SGFuZGxlcjsgfQogCiAgICAgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEm
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKTsKIAogcHJvdGVjdGVkOgog
ICAgIFdlYlBhZ2VQcm94eSogbV93ZWJQYWdlUHJveHk7Ci0gICAgUXRWaWV3cG9ydEhhbmRsZXIq
IG1fdmlld3BvcnRIYW5kbGVyOworICAgIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0KiBtX3ZpZXdw
b3J0SGFuZGxlcjsKICAgICBRdFBhbkdlc3R1cmVSZWNvZ25pemVyIG1fcGFuR2VzdHVyZVJlY29n
bml6ZXI7CiAgICAgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyIG1fcGluY2hHZXN0dXJlUmVjb2du
aXplcjsKICAgICBRdFRhcEdlc3R1cmVSZWNvZ25pemVyIG1fdGFwR2VzdHVyZVJlY29nbml6ZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1ZpZXdwb3J0SGFuZGxl
ckNsaWVudFF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWZhODMy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1ZpZXdwb3J0
SGFuZGxlckNsaWVudFF0LmNwcApAQCAtMCwwICsxLDU3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqIENvcHlyaWdodCAoQykgMjAxMSBCZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1pbkB3ZWJr
aXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQuaCIKKworI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgorI2luY2x1ZGUg
InFxdWlja3dlYnZpZXdfcC5oIgorI2luY2x1ZGUgInF3ZWJraXR0ZXN0X3AuaCIKKyNpbmNsdWRl
IDxRUG9pbnRGPgorI2luY2x1ZGUgPFFUcmFuc2Zvcm0+CisjaW5jbHVkZSA8UXRRdWljay9xcXVp
Y2tpdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0Zsb2F0U2l6ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IGlu
dCBrU2NhbGVBbmltYXRpb25EdXJhdGlvbk1pbGxpcyA9IDI1MDsKKworVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0KFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0
SXRlbSwgUVF1aWNrV2ViUGFnZSogcGFnZUl0ZW0pCisgICAgOiBtX3ZpZXdwb3J0SXRlbSh2aWV3
cG9ydEl0ZW0pCisgICAgLCBtX3BhZ2VJdGVtKHBhZ2VJdGVtKQorICAgICwgbV9zY2FsZUFuaW1h
dGlvbihuZXcgU2NhbGVBbmltYXRpb24odGhpcykpCisgICAgLCBtX3BpbmNoU3RhcnRTY2FsZSgt
MSkKKyAgICAsIG1fbGFzdENvbW1pdHRlZFNjYWxlKC0xKQorICAgICwgbV96b29tT3V0U2NhbGUo
MCkKKyAgICAsIG1faWdub3JlVmlld3BvcnRDaGFuZ2VzKHRydWUpCit7CisgICAgbV9zY2FsZUFu
aW1hdGlvbi0+c2V0RHVyYXRpb24oa1NjYWxlQW5pbWF0aW9uRHVyYXRpb25NaWxsaXMpOworICAg
IG1fc2NhbGVBbmltYXRpb24tPnNldEVhc2luZ0N1cnZlKFFFYXNpbmdDdXJ2ZTo6T3V0Q3ViaWMp
OworCisgICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKG1vdmVtZW50U3RhcnRlZCgp
KSwgU0xPVChmbGlja01vdmVTdGFydGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAg
Y29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKG1vdmVtZW50RW5kZWQoKSksIFNMT1QoZmxp
Y2tNb3ZlRW5kZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fdmll
d3BvcnRJdGVtLCBTSUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCBTTE9UKHBhZ2VJdGVtUG9zaXRp
b25DaGFuZ2VkKCkpKTsKKyAgICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwoY29udGVu
dFlDaGFuZ2VkKCkpLCBTTE9UKHBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkpKTsKKworCisgICAg
Y29ubmVjdChtX3NjYWxlQW5pbWF0aW9uLCBTSUdOQUwoc3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFu
aW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUpKSwKKyAgICAgICAgICAg
IFNMT1Qoc2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0
ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6U2NhbGVBbmltYXRpb246OnVwZGF0ZUN1cnJlbnRWYWx1ZShjb25zdCBRVmFy
aWFudCYgdmFsdWUpCit7CisgICAgLy8gUmVzZXR0aW5nIHRoZSBlbmQgdmFsdWUsIHRoZSBlYXNp
bmcgY3VydmUgb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBzY2FsZSBhbmltYXRpb24KKyAgICAvLyB0
cmlnZ2VycyBhIHJlY2FsY3VsYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBpbnRlcnZhbC4gVGhpcyBt
aWdodCBjaGFuZ2UgdGhlIGN1cnJlbnQKKyAgICAvLyB2YWx1ZSBvZiB0aGUgYW5pbWF0ZWQgcHJv
cGVydHkuCisgICAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgYWN0IG9uIGFuaW1hdGlvbiB2YWx1ZSBj
aGFuZ2VzIGlmIHRoZSBhbmltYXRpb24gaXMgYWN0aXZlLgorICAgIGlmICghbV9oYW5kbGVyQ2xp
ZW50LT5zY2FsZUFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUmVj
dEYgaXRlbVJlY3QgPSB2YWx1ZS50b1JlY3RGKCk7CisgICAgZmxvYXQgaXRlbVNjYWxlID0gbV9o
YW5kbGVyQ2xpZW50LT52aWV3cG9ydFNjYWxlRm9yUmVjdChpdGVtUmVjdCk7CisKKyAgICBtX2hh
bmRsZXJDbGllbnQtPnNldENvbnRlbnRSZWN0VmlzaWJsZVBvc2l0aW9uQXRTY2FsZShpdGVtUmVj
dC50b3BMZWZ0KCksIGl0ZW1TY2FsZSk7Cit9CisKK1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp+
Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQoKQoreworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNs
aWVudFF0OjpzZXRDb250ZW50UmVjdFZpc2libGVQb3NpdGlvbkF0U2NhbGUoY29uc3QgUVBvaW50
RiYgbG9jYXRpb24sIHFyZWFsIGl0ZW1TY2FsZSkKK3sKKyAgICBBU1NFUlQoaXRlbVNjYWxlID49
IDApOworCisgICAgc2NhbGVDb250ZW50KGl0ZW1TY2FsZSk7CisKKyAgICAvLyBUbyBhbmltYXRl
IHRoZSBwb3NpdGlvbiB0b2dldGhlciB3aXRoIHRoZSBzY2FsZSB3ZSBtdWx0aXBseSB0aGUgcG9z
aXRpb24gd2l0aCB0aGUgY3VycmVudCBzY2FsZQorICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIHBh
Z2UgcG9zaXRpb24gKGRpc3BsYWNlbWVudCBvbiB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVtIGJl
Y2F1c2Ugb2YgYWRkaXRpb25hbCBpdGVtcykuCisgICAgUVBvaW50RiBuZXdQb3NpdGlvbihtX3Bh
Z2VJdGVtLT5wb3MoKSArIGxvY2F0aW9uICogaXRlbVNjYWxlKTsKKworICAgIG1fdmlld3BvcnRJ
dGVtLT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6YW5pbWF0ZUNvbnRlbnRSZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmIGNvbnRl
bnRSZWN0KQoreworICAgIEFTU0VSVChtX3NjYWxlQW5pbWF0aW9uLT5zdGF0ZSgpID09IFFBYnN0
cmFjdEFuaW1hdGlvbjo6U3RvcHBlZCk7CisKKyAgICBBU1NFUlQoIXNjcm9sbEFuaW1hdGlvbkFj
dGl2ZSgpKTsKKyAgICBpZiAoc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFFSZWN0RiB2aWV3cG9ydFJlY3RJbkNvbnRlbnRDb29yZHMgPSBtX3ZpZXdwb3J0
SXRlbS0+bWFwUmVjdFRvV2ViQ29udGVudChtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkp
OworICAgIGlmIChjb250ZW50UmVjdCA9PSB2aWV3cG9ydFJlY3RJbkNvbnRlbnRDb29yZHMpIHsK
KyAgICAgICAgdXBkYXRlVmlld3BvcnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFNpbmNlIHdlIGhhdmUgdG8gYW5pbWF0ZSBzY2FsZSBhbmQgcG9zaXRpb24gYXQgdGhlIHNh
bWUgdGltZSB0aGUgc2NhbGUgYW5pbWF0aW9uIGludGVycG9sYXRlcworICAgIC8vIGZyb20gdGhl
IGN1cnJlbnQgdmlld3BvcnQgcmVjdCBpbiBjb250ZW50IGNvb3JkaW5hdGVzIHRvIGEgdmlzaWJs
ZSByZWN0IG9mIHRoZSBjb250ZW50LgorICAgIG1fc2NhbGVBbmltYXRpb24tPnNldFN0YXJ0VmFs
dWUodmlld3BvcnRSZWN0SW5Db250ZW50Q29vcmRzKTsKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5z
ZXRFbmRWYWx1ZShjb250ZW50UmVjdCk7CisKKyAgICAvLyBJbmZvcm0gdGhlIHdlYiBwcm9jZXNz
IGFib3V0IHRoZSByZXF1ZXN0ZWQgdmlzaWJsZSBjb250ZW50IHJlY3QKKyAgICAvLyBpZiB6b29t
aW5nLW91dCBzbyB0aGF0IG5vIHdoaXRlIHRpbGVzIGFyZSBleHBvc2VkIGR1cmluZyBhbmltYXRp
b24uCisgICAgaWYgKHZpZXdwb3J0UmVjdEluQ29udGVudENvb3Jkcy53aWR0aCgpIC8gY29udGVu
dFJlY3Qud2lkdGgoKSA8IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKSkKKyAgICAgICAgbV92
aWV3cG9ydEhhbmRsZXItPnVwZGF0ZVZpc2libGVDb250ZW50c1JlY3QoY29udGVudFJlY3QsIHZp
ZXdwb3J0U2NhbGVGb3JSZWN0KGNvbnRlbnRSZWN0KSk7CisKKyAgICBtX3NjYWxlQW5pbWF0aW9u
LT5zdGFydCgpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpmbGlja01vdmVT
dGFydGVkKCkKK3sKKyAgICBRX0FTU0VSVChtX3ZpZXdwb3J0SXRlbS0+aXNNb3ZpbmcoKSk7Cisg
ICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlci5yZXNldChuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJl
cihtX3ZpZXdwb3J0SGFuZGxlciwgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6RGVmZXJVcGRhdGVB
bmRTdXNwZW5kQ29udGVudCkpOworCisgICAgbV9sYXN0U2Nyb2xsUG9zaXRpb24gPSBtX3ZpZXdw
b3J0SXRlbS0+Y29udGVudFBvcygpOworCisgICAgbV9pZ25vcmVWaWV3cG9ydENoYW5nZXMgPSBm
YWxzZTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6ZmxpY2tNb3ZlRW5kZWQo
KQoreworICAgIFFfQVNTRVJUKCFtX3ZpZXdwb3J0SXRlbS0+aXNNb3ZpbmcoKSk7CisgICAgLy8g
VGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBlbmQgb2YgdGhlIHBhbiBvciBwYW4ga2luZXRp
YyBhbmltYXRpb24uCisKKyAgICBtX2lnbm9yZVZpZXdwb3J0Q2hhbmdlcyA9IHRydWU7CisKKyAg
ICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyLnJlc2V0KCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQ6OnBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9pZ25v
cmVWaWV3cG9ydENoYW5nZXMpCisgICAgICAgIHJldHVybjsKKworICAgIFFQb2ludEYgbmV3UG9z
aXRpb24gPSBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpOworCisgICAgdXBkYXRlVmlld3Bv
cnQobV9sYXN0U2Nyb2xsUG9zaXRpb24gLSBuZXdQb3NpdGlvbik7CisKKyAgICBtX2xhc3RTY3Jv
bGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0OjpzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRl
IG5ld1N0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIC8qb2xkU3RhdGUqLykKK3sKKyAg
ICBzd2l0Y2ggKG5ld1N0YXRlKSB7CisgICAgY2FzZSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5p
bmc6CisgICAgICAgIG1fdmlld3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOworICAgICAgICBBU1NF
UlQoIW1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIpOworICAgICAgICBtX2FuaW1hdGlvblVwZGF0
ZURlZmVycmVyLnJlc2V0KG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKG1fdmlld3BvcnRIYW5k
bGVyLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUUFic3RyYWN0QW5pbWF0aW9uOjpTdG9wcGVk
OgorICAgICAgICBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyLnJlc2V0KCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBWaWV3
cG9ydEhhbmRsZXJDbGllbnRRdDo6dG91Y2hCZWdpbigpCit7CisgICAgbV92aWV3cG9ydEhhbmRs
ZXItPnNldEhhZFVzZXJJbnRlcmFjdGlvbih0cnVlKTsKKworICAgIC8vIFByZXZlbnRzIHJlc3Vt
aW5nIHRoZSBwYWdlIGJldHdlZW4gdGhlIHVzZXIncyBmbGlja3Mgb2YgdGhlIHBhZ2Ugd2hpbGUg
dGhlIGFuaW1hdGlvbiBpcyBydW5uaW5nLgorICAgIGlmIChzY3JvbGxBbmltYXRpb25BY3RpdmUo
KSkKKyAgICAgICAgbV90b3VjaFVwZGF0ZURlZmVycmVyLnJlc2V0KG5ldyBWaWV3cG9ydFVwZGF0
ZURlZmVycmVyKG1fdmlld3BvcnRIYW5kbGVyLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZl
clVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xp
ZW50UXQ6OnRvdWNoRW5kKCkKK3sKKyAgICBtX3RvdWNoVXBkYXRlRGVmZXJyZXIucmVzZXQoKTsK
K30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6Zm9jdXNFZGl0YWJsZUFyZWEoY29u
c3QgUVJlY3RGJiBjYXJldEFyZWEsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSkKK3sKKyAgICAv
LyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24u
CisgICAgQVNTRVJUKG1fdmlld3BvcnRIYW5kbGVyLT5oYWRVc2VySW50ZXJhY3Rpb24oKSk7CisK
KyAgICBRUmVjdEYgZW5kQXJlYSA9IG1fdmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0VG9WaWV3cG9y
dCh0YXJnZXRBcmVhKTsKKworICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IG1fdmlld3BvcnRIYW5k
bGVyLT5jb252ZXJ0VG9WaWV3cG9ydChtX3ZpZXdwb3J0SGFuZGxlci0+aW5uZXJCb3VuZGVkQ29u
dGVudHNTY2FsZSgyLjApKTsKKyAgICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3
cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpOworCisgICAgcXJlYWwgeDsKKyAgICBjb25zdCBxcmVh
bCBib3JkZXJPZmZzZXQgPSAxMDsKKyAgICBpZiAoKGVuZEFyZWEud2lkdGgoKSArIGJvcmRlck9m
ZnNldCkgKiBlbmRJdGVtU2NhbGUgPD0gdmlld3BvcnRSZWN0LndpZHRoKCkpIHsKKyAgICAgICAg
Ly8gQ2VudGVyIHRoZSBpbnB1dCBmaWVsZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB2aWV3LCBpZiBp
dCBpcyBzbWFsbGVyIHRoYW4KKyAgICAgICAgLy8gdGhlIHZpZXcgYXQgdGhlIHNjYWxlIHRhcmdl
dC4KKyAgICAgICAgeCA9IHZpZXdwb3J0UmVjdC5jZW50ZXIoKS54KCkgLSBlbmRBcmVhLndpZHRo
KCkgKiBlbmRJdGVtU2NhbGUgLyAyLjA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRW5zdXJl
IHRoYXQgdGhlIGNhcmV0IGFsd2F5cyBoYXMgYm9yZGVyT2Zmc2V0IGNvbnRlbnRzIHBpeGVscyB0
byB0aGUgcmlnaHQKKyAgICAgICAgLy8gb2YgaXQsIGFuZCBzZWNvbmRhcmlseSAoaWYgcG9zc2li
bGUpLCB0aGF0IHRoZSBhcmVhIGhhcyBib3JkZXJPZmZzZXQKKyAgICAgICAgLy8gY29udGVudHMg
cGl4ZWxzIHRvIHRoZSBsZWZ0IG9mIGl0LgorICAgICAgICBxcmVhbCBjYXJldE9mZnNldCA9IG1f
dmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0VG9WaWV3cG9ydChjYXJldEFyZWEueCgpKSAtIGVuZEFy
ZWEueCgpOworICAgICAgICB4ID0gcU1pbih2aWV3cG9ydFJlY3Qud2lkdGgoKSAtIChjYXJldE9m
ZnNldCArIGJvcmRlck9mZnNldCkgKiBlbmRJdGVtU2NhbGUsIGJvcmRlck9mZnNldCAqIGVuZEl0
ZW1TY2FsZSk7CisgICAgfQorCisgICAgY29uc3QgUVBvaW50RiBob3RzcG90ID0gUVBvaW50Rihl
bmRBcmVhLngoKSwgZW5kQXJlYS5jZW50ZXIoKS55KCkpOworICAgIGNvbnN0IFFQb2ludEYgdmll
d3BvcnRIb3RzcG90ID0gUVBvaW50Rih4LCAvKiBGSVhNRTogdmlzaWJsZUNlbnRlciAqLyB2aWV3
cG9ydFJlY3QuY2VudGVyKCkueSgpKTsKKworICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBob3Rz
cG90ICogZW5kSXRlbVNjYWxlIC0gdmlld3BvcnRIb3RzcG90OworICAgIFFSZWN0RiBlbmRQb3NS
YW5nZSA9IG1fdmlld3BvcnRIYW5kbGVyLT5wb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2NhbGUo
ZW5kSXRlbVNjYWxlKTsKKworICAgIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQb3NS
YW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgpKTsK
KworICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5kUG9zaXRpb24gLyBlbmRJdGVt
U2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOworCisgICAgYW5pbWF0
ZUNvbnRlbnRSZWN0VmlzaWJsZShlbmRWaXNpYmxlQ29udGVudFJlY3QpOworfQorCit2b2lkIFZp
ZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp6b29tVG9BcmVhR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2lu
dEYmIHRvdWNoUG9pbnQsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSkKK3sKKyAgICAvLyBUaGlz
IGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCisgICAg
QVNTRVJUKG1fdmlld3BvcnRIYW5kbGVyLT5oYWRVc2VySW50ZXJhY3Rpb24oKSk7CisKKyAgICBp
ZiAoIXRhcmdldEFyZWEuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV92
aWV3cG9ydEhhbmRsZXItPmhhc1N1c3BlbmRlZENvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgaW50IG1hcmdpbiA9IDEwOyAvLyBXZSB3YW50IGF0IGxlYXN0IGEgbGl0dGxl
IGJpdCBvZiBtYXJnaW4uCisgICAgUVJlY3RGIGVuZEFyZWEgPSBtX3ZpZXdwb3J0SGFuZGxlci0+
Y29udmVydFRvVmlld3BvcnQodGFyZ2V0QXJlYS5hZGp1c3RlZCgtbWFyZ2luLCAtbWFyZ2luLCBt
YXJnaW4sIG1hcmdpbikpOworCisgICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmll
d3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsKKworICAgIHFyZWFsIHRhcmdldENTU1NjYWxlID0g
dmlld3BvcnRSZWN0LnNpemUoKS53aWR0aCgpIC8gZW5kQXJlYS5zaXplKCkud2lkdGgoKTsKKyAg
ICBxcmVhbCBlbmRDU1NTY2FsZSA9IG1fdmlld3BvcnRIYW5kbGVyLT5pbm5lckJvdW5kZWRDb250
ZW50c1NjYWxlKHFNaW4odGFyZ2V0Q1NTU2NhbGUsIHFyZWFsKDIuNSkpKTsKKyAgICBxcmVhbCBl
bmRJdGVtU2NhbGUgPSBtX3ZpZXdwb3J0SGFuZGxlci0+Y29udmVydFRvVmlld3BvcnQoZW5kQ1NT
U2NhbGUpOworICAgIHFyZWFsIGN1cnJlbnRTY2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2Nh
bGUoKTsKKworICAgIC8vIFdlIHdhbnQgdG8gZW5kIHVwIHdpdGggdGhlIHRhcmdldCBhcmVhIGZp
bGxpbmcgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydCAoaWYgcG9zc2libGUpLAorICAg
IC8vIGFuZCBjZW50cmFsaXplZCB2ZXJ0aWNhbGx5IHdoZXJlIHRoZSB1c2VyIHJlcXVlc3RlZCB6
b29tLiBUaHVzIG91ciBob3RzcG90IGlzIHRoZSBjZW50ZXIgb2YKKyAgICAvLyB0aGUgdGFyZ2V0
QXJlYSB4LXdpc2UgYW5kIHRoZSByZXF1ZXN0ZWQgem9vbSBwb3NpdGlvbiwgeS13aXNlLgorICAg
IGNvbnN0IFFQb2ludEYgaG90c3BvdCA9IFFQb2ludEYoZW5kQXJlYS5jZW50ZXIoKS54KCksIG1f
dmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0VG9WaWV3cG9ydCh0b3VjaFBvaW50LnkoKSkpOworICAg
IGNvbnN0IFFQb2ludEYgdmlld3BvcnRIb3RzcG90ID0gdmlld3BvcnRSZWN0LmNlbnRlcigpOwor
CisgICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGhvdHNwb3QgKiBlbmRDU1NTY2FsZSAtIHZpZXdw
b3J0SG90c3BvdDsKKworICAgIFFSZWN0RiBlbmRQb3NSYW5nZSA9IG1fdmlld3BvcnRIYW5kbGVy
LT5wb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKKyAgICBlbmRQ
b3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlv
biwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7CisKKyAgICBRUmVjdEYgZW5kVmlzaWJsZUNv
bnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgp
IC8gZW5kSXRlbVNjYWxlKTsKKworICAgIGVudW0geyBab29tSW4sIFpvb21CYWNrLCBab29tT3V0
LCBOb1pvb20gfSB6b29tQWN0aW9uID0gWm9vbUluOworCisgICAgaWYgKCFtX3NjYWxlU3RhY2su
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFpvb20gYmFjayBvdXQgaWYgYXR0ZW1wdGluZyB0byBz
Y2FsZSB0byB0aGUgc2FtZSBjdXJyZW50IHNjYWxlLCBvcgorICAgICAgICAvLyBhdHRlbXB0aW5n
IHRvIGNvbnRpbnVlIHNjYWxpbmcgb3V0IGZyb20gdGhlIGlubmVyIG1vc3QgbGV2ZWwuCisgICAg
ICAgIC8vIFVzZSBmdXp6eSBjb21wYXJlIHdpdGggYSBmaXhlZCBlcnJvciB0byBiZSBhYmxlIHRv
IGRlYWwgd2l0aCBsYXJnaXNoIGRpZmZlcmVuY2VzIGR1ZSB0byBwaXhlbCByb3VuZGluZy4KKyAg
ICAgICAgaWYgKGZ1enp5Q29tcGFyZShlbmRJdGVtU2NhbGUsIGN1cnJlbnRTY2FsZSwgMC4wMSkp
IHsKKyAgICAgICAgICAgIC8vIElmIG1vdmluZyB0aGUgdmlld3BvcnQgd291bGQgZXhwb3NlIG1v
cmUgb2YgdGhlIHRhcmdldFJlY3QgYW5kIG1vdmUgYXQgbGVhc3QgNDAgcGl4ZWxzLCB1cGRhdGUg
cG9zaXRpb24gYnV0IGRvIG5vdCBzY2FsZSBvdXQuCisgICAgICAgICAgICBRUmVjdEYgY3VycmVu
dENvbnRlbnRSZWN0KHZpc2libGVDb250ZW50c1JlY3QoKSk7CisgICAgICAgICAgICBRUmVjdEYg
dGFyZ2V0SW50ZXJzZWN0aW9uID0gZW5kVmlzaWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdGVkKHRh
cmdldEFyZWEpOworICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29udGVudFJlY3QuY29udGFpbnMo
dGFyZ2V0SW50ZXJzZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAmJiAocUFicyhlbmRWaXNp
YmxlQ29udGVudFJlY3QudG9wKCkgLSBjdXJyZW50Q29udGVudFJlY3QudG9wKCkpID49IDQwCisg
ICAgICAgICAgICAgICAgICAgIHx8IHFBYnMoZW5kVmlzaWJsZUNvbnRlbnRSZWN0LmxlZnQoKSAt
IGN1cnJlbnRDb250ZW50UmVjdC5sZWZ0KCkpID49IDQwKSkKKyAgICAgICAgICAgICAgICB6b29t
QWN0aW9uID0gTm9ab29tOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHpvb21B
Y3Rpb24gPSBab29tQmFjazsKKyAgICAgICAgfSBlbHNlIGlmIChmdXp6eUNvbXBhcmUoZW5kSXRl
bVNjYWxlLCBtX3pvb21PdXRTY2FsZSwgMC4wMSkpCisgICAgICAgICAgICB6b29tQWN0aW9uID0g
Wm9vbUJhY2s7CisgICAgICAgIGVsc2UgaWYgKGVuZEl0ZW1TY2FsZSA8IGN1cnJlbnRTY2FsZSkK
KyAgICAgICAgICAgIHpvb21BY3Rpb24gPSBab29tT3V0OworICAgIH0KKworICAgIHN3aXRjaCAo
em9vbUFjdGlvbikgeworICAgIGNhc2UgWm9vbUluOgorICAgICAgICBtX3NjYWxlU3RhY2suYXBw
ZW5kKFNjYWxlU3RhY2tJdGVtKGN1cnJlbnRTY2FsZSwgbV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQ
b3MoKS54KCkpKTsKKyAgICAgICAgbV96b29tT3V0U2NhbGUgPSBlbmRJdGVtU2NhbGU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgWm9vbUJhY2s6IHsKKyAgICAgICAgU2NhbGVTdGFja0l0ZW0g
bGFzdFNjYWxlID0gbV9zY2FsZVN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIGVuZEl0ZW1TY2Fs
ZSA9IGxhc3RTY2FsZS5zY2FsZTsKKyAgICAgICAgZW5kQ1NTU2NhbGUgPSBtX3ZpZXdwb3J0SGFu
ZGxlci0+Y29udmVydEZyb21WaWV3cG9ydChsYXN0U2NhbGUuc2NhbGUpOworICAgICAgICAvLyBS
ZWNhbGN1bGF0ZSBlbmRQb3NpdGlvbiBhbmQgYm91bmQgaXQgYWNjb3JkaW5nIHRvIG5ldyBzY2Fs
ZS4KKyAgICAgICAgZW5kUG9zaXRpb24uc2V0WShob3RzcG90LnkoKSAqIGVuZENTU1NjYWxlIC0g
dmlld3BvcnRIb3RzcG90LnkoKSk7CisgICAgICAgIGVuZFBvc2l0aW9uLnNldFgobGFzdFNjYWxl
LnhQb3NpdGlvbik7CisgICAgICAgIGVuZFBvc1JhbmdlID0gbV92aWV3cG9ydEhhbmRsZXItPnBv
c2l0aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUpOworICAgICAgICBlbmRQ
b3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlv
biwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7CisgICAgICAgIGVuZFZpc2libGVDb250ZW50
UmVjdCA9IFFSZWN0RihlbmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNp
emUoKSAvIGVuZEl0ZW1TY2FsZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFpv
b21PdXQ6CisgICAgICAgIC8vIFVuc3RhY2sgYWxsIHNjYWxlLWxldmVscyBkZWVwZXIgdGhhbiB0
aGUgbmV3IGxldmVsLCBzbyBhIHpvb20tYmFjayB3b24ndCBlbmQgdXAgem9vbWluZyBpbi4KKyAg
ICAgICAgd2hpbGUgKCFtX3NjYWxlU3RhY2suaXNFbXB0eSgpICYmIG1fc2NhbGVTdGFjay5sYXN0
KCkuc2NhbGUgPj0gZW5kSXRlbVNjYWxlKQorICAgICAgICAgICAgbV9zY2FsZVN0YWNrLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgbV96b29tT3V0U2NhbGUgPSBlbmRJdGVtU2NhbGU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTm9ab29tOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBh
bmltYXRlQ29udGVudFJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7Cit9CisKK1FS
ZWN0RiBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6bmVhcmVzdFZhbGlkVmlzaWJsZUNvbnRlbnRz
UmVjdCgpIGNvbnN0Cit7CisgICAgZmxvYXQgY3NzU2NhbGUgPSBtX3ZpZXdwb3J0SGFuZGxlci0+
Y29udmVydEZyb21WaWV3cG9ydChtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCkpOworICAgIGZs
b2F0IGVuZEl0ZW1TY2FsZSA9IG1fdmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0VG9WaWV3cG9ydCht
X3ZpZXdwb3J0SGFuZGxlci0+aW5uZXJCb3VuZGVkQ29udGVudHNTY2FsZShjc3NTY2FsZSkpOwor
CisgICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGlu
Z1JlY3QoKTsKKyAgICBRUG9pbnRGIHZpZXdwb3J0SG90c3BvdCA9IHZpZXdwb3J0UmVjdC5jZW50
ZXIoKTsKKyAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gbV92aWV3cG9ydEl0ZW0tPm1hcFRvV2Vi
Q29udGVudCh2aWV3cG9ydEhvdHNwb3QpICogZW5kSXRlbVNjYWxlIC0gdmlld3BvcnRIb3RzcG90
OworCisgICAgRmxvYXRSZWN0IGVuZFBvc1JhbmdlID0gbV92aWV3cG9ydEhhbmRsZXItPnBvc2l0
aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUpOworICAgIGVuZFBvc2l0aW9u
ID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS5taW5YTWluWUNvcm5lcigpLCBlbmRQb3NpdGlv
biwgZW5kUG9zUmFuZ2UubWF4WE1heFlDb3JuZXIoKSk7CisKKyAgICBRUmVjdEYgZW5kVmlzaWJs
ZUNvbnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6
ZSgpIC8gZW5kSXRlbVNjYWxlKTsKKworICAgIHJldHVybiBlbmRWaXNpYmxlQ29udGVudFJlY3Q7
Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNldENvbnRlbnRzUG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25JblZpZXdDb29yZGluYXRlcykKK3sKKyAgICBRUG9p
bnRGIG5ld1Bvc2l0aW9uKG1fcGFnZUl0ZW0tPnBvcygpICsgUVBvaW50Rihwb3NpdGlvbkluVmll
d0Nvb3JkaW5hdGVzKSk7CisgICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobmV3UG9z
aXRpb24pOworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQ6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgdmlld3BvcnRTY2FsZSwgYm9vbCBpc0lu
aXRpYWxTY2FsZSkKK3sKKyAgICBpZiAoaXNJbml0aWFsU2NhbGUpIHsKKyAgICAgICAgbV96b29t
T3V0U2NhbGUgPSAwOworICAgICAgICBtX3NjYWxlU3RhY2suY2xlYXIoKTsKKyAgICAgICAgc2V0
Q29udGVudFJlY3RWaXNpYmxlUG9zaXRpb25BdFNjYWxlKFFQb2ludEYoKSwgdmlld3BvcnRTY2Fs
ZSk7CisgICAgfSBlbHNlCisgICAgICAgIHNjYWxlQ29udGVudCh2aWV3cG9ydFNjYWxlKTsKKwor
ICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6
OnNldENvbnRlbnRzUmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKCkKK3sKKyAgICBWaWV3cG9ydFVw
ZGF0ZURlZmVycmVyIGd1YXJkKG1fdmlld3BvcnRIYW5kbGVyKTsKKyAgICBmbG9hdCB2YWxpZENT
U1NjYWxlID0gbV92aWV3cG9ydEhhbmRsZXItPmlubmVyQm91bmRlZENvbnRlbnRzU2NhbGUobV92
aWV3cG9ydEhhbmRsZXItPmNvbnZlcnRGcm9tVmlld3BvcnQobV9wYWdlSXRlbS0+Y29udGVudHNT
Y2FsZSgpKSk7CisgICAgc2V0Q29udGVudFJlY3RWaXNpYmxlUG9zaXRpb25BdFNjYWxlKG5lYXJl
c3RWYWxpZFZpc2libGVDb250ZW50c1JlY3QoKS50b3BMZWZ0KCksIG1fdmlld3BvcnRIYW5kbGVy
LT5jb252ZXJ0VG9WaWV3cG9ydCh2YWxpZENTU1NjYWxlKSk7Cit9CisKK3ZvaWQgVmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ6OnJlcXVlc3RWaWV3cG9ydFVwZGF0ZSgpCit7CisgICAgdXBkYXRlVmll
d3BvcnQoKTsKK30KKworYm9vbCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6YWxsb3dzVXNlclNj
YWxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlci0+YWxsb3dzVXNl
clNjYWxpbmcoKTsKK30KKworcXJlYWwgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmRldmljZVBp
eGVsUmF0aW8oKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlci0+ZGV2aWNl
UGl4ZWxSYXRpbygpOworfQorCitxcmVhbCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6bWluaW11
bUNvbnRlbnRzU2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlci0+
bWluaW11bUNvbnRlbnRzU2NhbGUoKTsKK30KKworcXJlYWwgVmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6Om1heGltdW1Db250ZW50c1NjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3cG9y
dEhhbmRsZXItPm1heGltdW1Db250ZW50c1NjYWxlKCk7Cit9CisKK3FyZWFsIFZpZXdwb3J0SGFu
ZGxlckNsaWVudFF0OjpjdXJyZW50Q29udGVudHNTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsKK30KKworUVNpemVGIFZpZXdwb3J0SGFuZGxl
ckNsaWVudFF0Ojpjb250ZW50c0xheW91dFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Zp
ZXdwb3J0SGFuZGxlci0+Y29udGVudHNMYXlvdXRTaXplKCk7Cit9CisKK2Jvb2wgVmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ6OnNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdmlld3BvcnRJdGVtLT5pc0ZsaWNraW5nKCk7Cit9CisKK2Jvb2wgVmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Zp
ZXdwb3J0SGFuZGxlci0+aGFkVXNlckludGVyYWN0aW9uKCkgJiYgbV92aWV3cG9ydEl0ZW0tPmlz
RHJhZ2dpbmcoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGFuR2VzdHVy
ZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1p
bGxpcykKK3sKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVz
ZXIgaW50ZXJhY3Rpb24uCisgICAgQVNTRVJUKG1fdmlld3BvcnRIYW5kbGVyLT5oYWRVc2VySW50
ZXJhY3Rpb24oKSk7CisKKyAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxpY2thYmxlTW91c2VQ
cmVzcyhwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIG1fbGFzdFBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247Cit9CisKK3ZvaWQgVmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBv
c2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7CisgICAgbV92aWV3cG9ydEl0
ZW0tPmhhbmRsZUZsaWNrYWJsZU1vdXNlTW92ZShwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxs
aXMpOworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRp
b247Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVFbmRlZChj
b25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQorewor
ICAgIG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2FibGVNb3VzZVJlbGVhc2UocG9zaXRpb24s
IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRD
b29yZGluYXRlcyA9IHBvc2l0aW9uOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0
OjpwYW5HZXN0dXJlQ2FuY2VsbGVkKCkKK3sKKyAgICAvLyBSZXNldCB0aGUgdmVsb2NpdHkgc2Ft
cGxlcyBvZiB0aGUgZmxpY2thYmxlLgorICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGJ5IHRoZSByZWNvZ25pemVyIGlmIHdlIGhhdmUgYSByZWNvZ25pemVkCisgICAgLy8gcGFuIGdl
c3R1cmUgYW5kIHJlY2VpdmUgYSB0b3VjaCBldmVudCB3aXRoIG11bHRpcGxlIHRvdWNoIHBvaW50
cworICAgIC8vIChpZS4gdHJhbnNpdGlvbiB0byBhIHBpbmNoIGdlc3R1cmUpIGFzIGl0IGRvZXMg
bm90IG1vdmUgdGhlIGNvbnRlbnQKKyAgICAvLyBiYWNrIGluc2lkZSB2YWxpZCBib3VuZHMuCisg
ICAgLy8gV2hlbiB0aGUgcGluY2ggZ2VzdHVyZSBlbmRzLCB0aGUgY29udGVudCBpcyBwb3NpdGlv
bmVkIGFuZCBzY2FsZWQKKyAgICAvLyBiYWNrIHRvIHZhbGlkIGJvdW5kYXJpZXMuCisgICAgbV92
aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7Cit9CisKK2Jvb2wgVmlld3BvcnRIYW5kbGVyQ2xp
ZW50UXQ6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY2Fs
ZUFuaW1hdGlvbi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc7Cit9CisK
K3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmNhbmNlbFNjcm9sbEFuaW1hdGlvbigpCit7
CisgICAgaWYgKCFzY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gSWYgdGhlIHBhbiBnZXN0dXJlIHJlY29nbml6ZXIgcmVjZWl2ZXMgYSB0b3VjaCBiZWdp
biBldmVudAorICAgIC8vIGR1cmluZyBhbiBvbmdvaW5nIGtpbmV0aWMgc2Nyb2xsIGFuaW1hdGlv
biBvZiBhIHByZXZpb3VzCisgICAgLy8gcGFuIGdlc3R1cmUsIHRoZSBhbmltYXRpb24gaXMgc3Rv
cHBlZCBhbmQgdGhlIGNvbnRlbnQgaXMKKyAgICAvLyBpbW1lZGlhdGVseSBwb3NpdGlvbmVkIGJh
Y2sgdG8gdmFsaWQgYm91bmRhcmllcy4KKworICAgIG1fdmlld3BvcnRJdGVtLT5jYW5jZWxGbGlj
aygpOworICAgIHNldENvbnRlbnRzUmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKCk7Cit9CisKK3Zv
aWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmludGVycnVwdFNjYWxlQW5pbWF0aW9uKCkKK3sK
KyAgICAvLyBUaGlzIGludGVycnVwdHMgdGhlIHNjYWxlIGFuaW1hdGlvbiBleGFjdGx5IHdoZXJl
IGl0IGlzLCBldmVuIGlmIGl0IGlzIG91dCBvZiBib3VuZHMuCisgICAgbV9zY2FsZUFuaW1hdGlv
bi0+c3RvcCgpOworfQorCitib29sIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1
cmVBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlci0+aGFkVXNl
ckludGVyYWN0aW9uKCkgJiYgKG1fcGluY2hTdGFydFNjYWxlID4gMCk7Cit9CisKK3ZvaWQgVmll
d3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYg
cGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpCit7CisgICAgLy8gVGhpcyBjYW4gb25s
eSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgorICAgIEFTU0VSVCht
X3ZpZXdwb3J0SGFuZGxlci0+aGFkVXNlckludGVyYWN0aW9uKCkpOworCisgICAgaWYgKCFtX3Zp
ZXdwb3J0SGFuZGxlci0+YWxsb3dzVXNlclNjYWxpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zY2FsZVN0YWNrLmNsZWFyKCk7CisgICAgbV96b29tT3V0U2NhbGUgPSAwLjA7CisKKyAg
ICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIucmVzZXQobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIo
bV92aWV3cG9ydEhhbmRsZXIsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5k
U3VzcGVuZENvbnRlbnQpKTsKKworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7CisgICAgbV9waW5jaFN0
YXJ0U2NhbGUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7Cit9CisKK3ZvaWQgVmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50
RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMsIHFyZWFsIHRvdGFsU2NhbGVGYWN0
b3IpCit7CisgICAgQVNTRVJUKG1fdmlld3BvcnRIYW5kbGVyLT5oYXNTdXNwZW5kZWRDb250ZW50
KCkpOworCisgICAgaWYgKCFtX3ZpZXdwb3J0SGFuZGxlci0+YWxsb3dzVXNlclNjYWxpbmcoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gIENoYW5nZXMgb2YgdGhlIGNlbnRlciBwb3NpdGlv
biBzaG91bGQgbW92ZSB0aGUgcGFnZSBldmVuIGlmIHRoZSB6b29tIGZhY3RvciBkb2VzIG5vdCBj
aGFuZ2UuCisgICAgY29uc3QgcXJlYWwgY3NzU2NhbGUgPSBtX3ZpZXdwb3J0SGFuZGxlci0+Y29u
dmVydEZyb21WaWV3cG9ydChtX3BpbmNoU3RhcnRTY2FsZSAqIHRvdGFsU2NhbGVGYWN0b3IpOwor
CisgICAgLy8gQWxsb3cgem9vbWluZyBvdXQgYmV5b25kIG1pbWltdW0gc2NhbGUgb24gcGFnZXMg
dGhhdCBkbyBub3QgZXhwbGljaXRseSBkaXNhbGxvdyBpdC4KKyAgICBjb25zdCBxcmVhbCB0YXJn
ZXRJdGVtU2NhbGUgPSBtX3ZpZXdwb3J0SGFuZGxlci0+Y29udmVydFRvVmlld3BvcnQobV92aWV3
cG9ydEhhbmRsZXItPm91dGVyQm91bmRlZENvbnRlbnRzU2NhbGUoY3NzU2NhbGUpKTsKKworICAg
IHNjYWxlQ29udGVudCh0YXJnZXRJdGVtU2NhbGUsIG1fdmlld3BvcnRJdGVtLT5tYXBUb1dlYkNv
bnRlbnQocGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpKTsKKworICAgIGNvbnN0IFFQ
b2ludEYgcG9zaXRpb25EaWZmID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgLSBt
X2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKKyAgICBtX2xhc3RQaW5jaENl
bnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5h
dGVzOworCisgICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobV92aWV3cG9ydEl0ZW0t
PmNvbnRlbnRQb3MoKSAtIHBvc2l0aW9uRGlmZik7CisKKyAgICAvLyBJbmZvcm0gdGhlIHdlYiBw
cm9jZXNzIHRvIHJlbmRlciB0aGUgY3VycmVudGx5IHZpc2libGUgYXJlYSB3aXRoIGxvdy1yZXNv
bHV0aW9uIHRpbGVzIG5vdAorICAgIC8vIHRvIGV4cG9zZSB3aGl0ZSB0aWxlcyBkdXJpbmcgcGlu
Y2ggZ2VzdHVyZXMgYW5kIHRvIHNob3cgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGNvcnJlY3RseS4K
KyAgICAvLyBUaGUgYWN0dWFsIHNjYWxlIGlzIHJlc3RvcmVkIGFmdGVyIHRoZSBwaW5jaCBnZXN0
dXJlIGVuZHMuCisgICAgdXBkYXRlVmlld3BvcnQoUVBvaW50RigpLCAxKTsKK30KKwordm9pZCBW
aWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGluY2hHZXN0dXJlRW5kZWQoKQoreworICAgIEFTU0VS
VChtX3ZpZXdwb3J0SGFuZGxlci0+aGFzU3VzcGVuZGVkQ29udGVudCgpKTsKKworICAgIGlmICgh
bV92aWV3cG9ydEhhbmRsZXItPmFsbG93c1VzZXJTY2FsaW5nKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fcGluY2hTdGFydFNjYWxlID0gLTE7CisKKyAgICBhbmltYXRlQ29udGVudFJlY3RW
aXNpYmxlKG5lYXJlc3RWYWxpZFZpc2libGVDb250ZW50c1JlY3QoKSk7CisgICAgbV9zY2FsZVVw
ZGF0ZURlZmVycmVyLnJlc2V0KCk7IC8vIENsZWFyIGFmdGVyIHN0YXJ0aW5nIHBvdGVudGlhbCBh
bmltYXRpb24sIHdoaWNoIHRha2VzIG92ZXIgZGVmZXJyaW5nLgorfQorCit2b2lkIFZpZXdwb3J0
SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKQoreworICAgIG1fcGluY2hT
dGFydFNjYWxlID0gLTE7CisgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLnJlc2V0KCk7Cit9CisK
K1FSZWN0RiBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNv
bnN0Cit7CisgICAgY29uc3QgUVJlY3RGIHZpc2libGVSZWN0KG1fdmlld3BvcnRJdGVtLT5ib3Vu
ZGluZ1JlY3QoKS5pbnRlcnNlY3RlZChtX3BhZ2VJdGVtLT5ib3VuZGluZ1JlY3QoKSkpOworICAg
IHJldHVybiBtX3ZpZXdwb3J0SXRlbS0+bWFwUmVjdFRvV2ViQ29udGVudCh2aXNpYmxlUmVjdCk7
Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmRpZENoYW5nZUNvbnRlbnRzU2l6
ZSgpCit7CisgICAgLy8gRW1pdCBmb3IgdGVzdGluZyBwdXJwb3Nlcywgc28gdGhhdCBpdCBjYW4g
YmUgdmVyaWZpZWQgdGhhdAorICAgIC8vIHdlIGRpZG4ndCBkbyBzY2FsZSBhZGp1c3RtZW50Lgor
ICAgIGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPmNvbnRlbnRz
U2NhbGVDb21taXR0ZWQoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6ZGlk
Q2hhbmdlVmlzaWJsZUNvbnRlbnRzKCkKK3sKKyAgICBxcmVhbCBzY2FsZSA9IG1fcGFnZUl0ZW0t
PmNvbnRlbnRzU2NhbGUoKTsKKworICAgIGlmIChzY2FsZSAhPSBtX2xhc3RDb21taXR0ZWRTY2Fs
ZSkKKyAgICAgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+
Y29udGVudHNTY2FsZUNvbW1pdHRlZCgpOworICAgIG1fbGFzdENvbW1pdHRlZFNjYWxlID0gc2Nh
bGU7CisKKyAgICAvLyBFbnN1cmUgdGhhdCB1cGRhdGVQYWludE5vZGUgaXMgYWx3YXlzIGNhbGxl
ZCBiZWZvcmUgcGFpbnRpbmcuCisgICAgbV9wYWdlSXRlbS0+dXBkYXRlKCk7Cit9CisKK3ZvaWQg
Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcygpCit7
CisgICAgLy8gTWFrZSBzdXJlIHdlIGFwcGx5IHRoZSBuZXcgaW5pdGlhbCBzY2FsZSB3aGVuIGRl
ZmVycmluZyBlbmRzLgorICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQobV92aWV3cG9y
dEhhbmRsZXIpOworCisgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRl
c3QoKS0+ZGV2aWNlUGl4ZWxSYXRpb0NoYW5nZWQoKTsKKyAgICBlbWl0IG1fdmlld3BvcnRJdGVt
LT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT52aWV3cG9ydENoYW5nZWQoKTsKK30KKwordm9pZCBW
aWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dXBkYXRlVmlld3BvcnQoY29uc3QgUVBvaW50RiYgdHJh
amVjdG9yeSwgcXJlYWwgc2NhbGUpCit7CisgICAgRmxvYXRSZWN0IGN1cnJlbnRWaXNpYmxlUmVj
dCh2aXNpYmxlQ29udGVudHNSZWN0KCkpOworICAgIGZsb2F0IHZpZXdwb3J0U2NhbGUgPSAoc2Nh
bGUgPCAwKSA/IHZpZXdwb3J0U2NhbGVGb3JSZWN0KGN1cnJlbnRWaXNpYmxlUmVjdCkgOiBzY2Fs
ZTsKKyAgICBtX3ZpZXdwb3J0SGFuZGxlci0+dXBkYXRlVmlzaWJsZUNvbnRlbnRzUmVjdChjdXJy
ZW50VmlzaWJsZVJlY3QsIHZpZXdwb3J0U2NhbGUsIHRyYWplY3RvcnkpOworfQorCit2b2lkIFZp
ZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzY2FsZUNvbnRlbnQocXJlYWwgaXRlbVNjYWxlLCBjb25z
dCBRUG9pbnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzKQoreworICAgIFFQb2ludEYgb2xkUGlu
Y2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50KGNl
bnRlckluQ1NTQ29vcmRpbmF0ZXMpOworICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2NhbGUo
aXRlbVNjYWxlKTsKKyAgICBRUG9pbnRGIG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCA9IG1fdmll
d3BvcnRJdGVtLT5tYXBGcm9tV2ViQ29udGVudChjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzKTsKKyAg
ICBtX3ZpZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyhtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBv
cygpICsgKG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCAtIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9y
dCkpOworfQorCitmbG9hdCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dmlld3BvcnRTY2FsZUZv
clJlY3QoY29uc3QgUVJlY3RGJiByZWN0KSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4obV92aWV3cG9ydEl0ZW0tPndpZHRoKCkpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJl
Y3Qud2lkdGgoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjaW5jbHVkZSAibW9j
X1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2U1OTE3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oCkBAIC0wLDAgKzEsMTU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmphbWluIFBvdWxh
aW4gPGJlbmphbWluQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0X2gKKyNkZWZpbmUgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXRfaAorCisjaW5jbHVkZSAiVmll
d3BvcnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5kbGVyQ2xpZW50LmgiCisjaW5j
bHVkZSA8UU9iamVjdD4KKyNpbmNsdWRlIDxRUG9pbnRGPgorI2luY2x1ZGUgPFFTY29wZWRQb2lu
dGVyPgorI2luY2x1ZGUgPFFWYXJpYW50PgorI2luY2x1ZGUgPFFWYXJpYW50QW5pbWF0aW9uPgor
CitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFRdWlja1dlYlBhZ2U7CitjbGFzcyBRUXVpY2tX
ZWJWaWV3OworY2xhc3MgUVJlY3RGOworUVRfRU5EX05BTUVTUEFDRQorCitjbGFzcyBRV2ViS2l0
VGVzdDsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBWaWV3cG9ydEhhbmRsZXJDbGllbnQgeworICAg
IFFfT0JKRUNUCisKK3B1YmxpYzoKKworICAgIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0KFFRdWlj
a1dlYlZpZXcqLCBRUXVpY2tXZWJQYWdlKik7CisgICAgflZpZXdwb3J0SGFuZGxlckNsaWVudFF0
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvbkluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNTY2FsZShmbG9hdCB2aWV3cG9ydFNjYWxlLCBib29sIGlzSW5pdGlhbFNjYWxlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0VG9OZWFyZXN0VmFsaWRCb3VuZHMoKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Vmlld3BvcnRVcGRhdGUoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
VmlzaWJsZUNvbnRlbnRzKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0
cmlidXRlcygpOworCisgICAgdmlydHVhbCB2b2lkIHNldFZpZXdwb3J0SGFuZGxlcihWaWV3cG9y
dEhhbmRsZXIqIGhhbmRsZXIpIHsgbV92aWV3cG9ydEhhbmRsZXIgPSBoYW5kbGVyOyB9CisKKyAg
ICAvLyBBZGRpdGlvbmFsIG1ldGhvZHMgY3VycmVudGx5IG9ubHkgcmVsZXZhbnQgaW4gdGhlIFFR
dWljayBjb250ZXh0LgorICAgIHZvaWQgdG91Y2hCZWdpbigpOworICAgIHZvaWQgdG91Y2hFbmQo
KTsKKworICAgIGJvb2wgc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkgY29uc3Q7CisgICAgdm9pZCBj
YW5jZWxTY3JvbGxBbmltYXRpb24oKTsKKworICAgIGJvb2wgcGFuR2VzdHVyZUFjdGl2ZSgpIGNv
bnN0OworICAgIHZvaWQgcGFuR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24s
IHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgdm9pZCBwYW5HZXN0dXJlUmVxdWVz
dFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWls
bGlzKTsKKyAgICB2b2lkIHBhbkdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwg
cWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB2b2lkIHBhbkdlc3R1cmVDYW5jZWxs
ZWQoKTsKKworICAgIGJvb2wgc2NhbGVBbmltYXRpb25BY3RpdmUoKSBjb25zdDsKKyAgICB2b2lk
IGludGVycnVwdFNjYWxlQW5pbWF0aW9uKCk7CisKKyAgICBib29sIHBpbmNoR2VzdHVyZUFjdGl2
ZSgpIGNvbnN0OworICAgIHZvaWQgcGluY2hHZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBw
aW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyk7CisgICAgdm9pZCBwaW5jaEdlc3R1cmVS
ZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5h
dGVzLCBxcmVhbCB0b3RhbFNjYWxlRmFjdG9yKTsKKyAgICB2b2lkIHBpbmNoR2VzdHVyZUVuZGVk
KCk7CisgICAgdm9pZCBwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKTsKKworICAgIHZvaWQgem9vbVRv
QXJlYUdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiB0b3VjaFBvaW50LCBjb25zdCBRUmVjdEYm
IHRhcmdldEFyZWEpOworICAgIHZvaWQgZm9jdXNFZGl0YWJsZUFyZWEoY29uc3QgUVJlY3RGJiBj
YXJldEFyZWEsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSk7CisKK3ByaXZhdGUgUV9TTE9UUzoK
KyAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgb2YgcG9zaXRpb24gdGhhdCBhcmUgbm90IGRyaXZl
biBieSB1cy4KKyAgICB2b2lkIHBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCk7CisKKyAgICB2b2lk
IHNjYWxlQW5pbWF0aW9uU3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUsIFFB
YnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUpOworCisgICAgdm9pZCBmbGlja01vdmVTdGFydGVkKCk7
IC8vIENhbGxlZCB3aGVuIHBhbm5pbmcgc3RhcnRzLgorICAgIHZvaWQgZmxpY2tNb3ZlRW5kZWQo
KTsgLy8gICBDYWxsZWQgd2hlbiBwYW5uaW5nICgrIGtpbmV0aWMgYW5pbWF0aW9uKSBlbmRzLgor
Citwcml2YXRlOgorICAgIGNsYXNzIFNjYWxlQW5pbWF0aW9uIDogcHVibGljIFFWYXJpYW50QW5p
bWF0aW9uIHsKKyAgICAgICAgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQqIG1faGFuZGxlckNsaWVu
dDsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjYWxlQW5pbWF0aW9uKFZpZXdwb3J0SGFuZGxlckNs
aWVudFF0KiBwYXJlbnQpCisgICAgICAgICAgICA6IFFWYXJpYW50QW5pbWF0aW9uKHBhcmVudCkK
KyAgICAgICAgICAgICwgbV9oYW5kbGVyQ2xpZW50KHBhcmVudCkKKyAgICAgICAgeyB9CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUN1cnJlbnRWYWx1ZShjb25zdCBRVmFyaWFudCYpOwor
ICAgIH07CisKKyAgICBzdHJ1Y3QgU2NhbGVTdGFja0l0ZW0geworICAgICAgICBTY2FsZVN0YWNr
SXRlbShxcmVhbCBzY2FsZSwgcXJlYWwgeFBvc2l0aW9uKQorICAgICAgICAgICAgOiBzY2FsZShz
Y2FsZSkKKyAgICAgICAgICAgICwgeFBvc2l0aW9uKHhQb3NpdGlvbikKKyAgICAgICAgeyB9CisK
KyAgICAgICAgcXJlYWwgc2NhbGU7CisgICAgICAgIHFyZWFsIHhQb3NpdGlvbjsKKyAgICB9Owor
CisgICAgZnJpZW5kIGNsYXNzIFNjYWxlQW5pbWF0aW9uOworICAgIGZyaWVuZCBjbGFzcyA6OlFX
ZWJLaXRUZXN0OworCisgICAgVmlld3BvcnRIYW5kbGVyKiBtX3ZpZXdwb3J0SGFuZGxlcjsKKyAg
ICBRUXVpY2tXZWJWaWV3KiBjb25zdCBtX3ZpZXdwb3J0SXRlbTsKKyAgICBRUXVpY2tXZWJQYWdl
KiBjb25zdCBtX3BhZ2VJdGVtOworCisgICAgYm9vbCBhbGxvd3NVc2VyU2NhbGluZygpIGNvbnN0
OworICAgIHFyZWFsIGRldmljZVBpeGVsUmF0aW8oKSBjb25zdDsKKyAgICBxcmVhbCBtaW5pbXVt
Q29udGVudHNTY2FsZSgpIGNvbnN0OworICAgIHFyZWFsIG1heGltdW1Db250ZW50c1NjYWxlKCkg
Y29uc3Q7CisgICAgcXJlYWwgY3VycmVudENvbnRlbnRzU2NhbGUoKSBjb25zdDsKKyAgICBRU2l6
ZUYgY29udGVudHNMYXlvdXRTaXplKCkgY29uc3Q7CisKKyAgICBmbG9hdCB2aWV3cG9ydFNjYWxl
Rm9yUmVjdChjb25zdCBRUmVjdEYmKSBjb25zdDsKKyAgICBRUmVjdEYgdmlzaWJsZUNvbnRlbnRz
UmVjdCgpIGNvbnN0OworICAgIFFSZWN0RiBuZWFyZXN0VmFsaWRWaXNpYmxlQ29udGVudHNSZWN0
KCkgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KGNvbnN0IFFQb2ludEYmIHRyYWpl
Y3RvcnkgPSBRUG9pbnRGKCksIHFyZWFsIHNjYWxlID0gLTEpOworICAgIHZvaWQgc2V0Q29udGVu
dFJlY3RWaXNpYmxlUG9zaXRpb25BdFNjYWxlKGNvbnN0IFFQb2ludEYmIGxvY2F0aW9uLCBxcmVh
bCBpdGVtU2NhbGUpOworICAgIHZvaWQgYW5pbWF0ZUNvbnRlbnRSZWN0VmlzaWJsZShjb25zdCBR
UmVjdEYmIGNvbnRlbnRSZWN0KTsKKyAgICB2b2lkIHNjYWxlQ29udGVudChxcmVhbCBpdGVtU2Nh
bGUsIGNvbnN0IFFQb2ludEYmIGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMgPSBRUG9pbnRGKCkpOwor
CisgICAgUVNjb3BlZFBvaW50ZXI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV9zY2FsZVVwZGF0
ZURlZmVycmVyOworICAgIFFTY29wZWRQb2ludGVyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1f
c2Nyb2xsVXBkYXRlRGVmZXJyZXI7CisgICAgUVNjb3BlZFBvaW50ZXI8Vmlld3BvcnRVcGRhdGVE
ZWZlcnJlcj4gbV90b3VjaFVwZGF0ZURlZmVycmVyOworICAgIFFTY29wZWRQb2ludGVyPFZpZXdw
b3J0VXBkYXRlRGVmZXJyZXI+IG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXI7CisKKyAgICBTY2Fs
ZUFuaW1hdGlvbiogbV9zY2FsZUFuaW1hdGlvbjsKKyAgICBRUG9pbnRGIG1fbGFzdFBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOworICAgIFFQb2ludEYgbV9sYXN0U2Nyb2xsUG9zaXRp
b247CisgICAgcXJlYWwgbV9waW5jaFN0YXJ0U2NhbGU7CisgICAgcXJlYWwgbV9sYXN0Q29tbWl0
dGVkU2NhbGU7CisgICAgcXJlYWwgbV96b29tT3V0U2NhbGU7CisgICAgUUxpc3Q8U2NhbGVTdGFj
a0l0ZW0+IG1fc2NhbGVTdGFjazsKKyAgICBib29sIG1faWdub3JlVmlld3BvcnRDaGFuZ2VzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBWaWV3cG9ydEhhbmRsZXJD
bGllbnRRdF9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggYzgyYTNhNS4uMjUwMDkxZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA5LTAzICBBbmRyYXMgQmVj
c2kgIDxhbmRyYXMuYmVjc2lAbm9raWEuY29tPgorCisgICAgICAgIFtXSzJdIE1ha2UgW1F0XVZp
ZXdwb3J0SGFuZGxlciBjcm9zcyBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgaW5pdGlhbCBzY2FsZSBmcm9tIHZpZXdwb3J0IGlu
Zm8gaXRlbSBzaW5jZSBpdCBpcworICAgICAgICBzZXQgdG8gLTEgYWZ0ZXIgYXBwbGllZCB0aHVz
IGl0IGRvZXMgbm90IGhvbGQgYW55IHZhbHVhYmxlCisgICAgICAgIGluZm9ybWF0aW9uLgorCisg
ICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sOgorCiAyMDEy
LTA5LTAzICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAK
ICAgICAgICAgW0VGTF0gRml4IHJlc2l6aW5nIGlzc3VlcyByZWxhdGVkIHRvIFVSTCBiYXIgaW4g
TWluaWJyb3dzZXIgLyBFV2ViTGF1bmNoZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2Vy
L3F0L3FtbC9WaWV3cG9ydEluZm9JdGVtLnFtbCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9W
aWV3cG9ydEluZm9JdGVtLnFtbAppbmRleCA5MmEyYTA0Li42ODRjYzcwOSAxMDA2NDQKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sCisrKyBiL1Rvb2xz
L01pbmlCcm93c2VyL3F0L3FtbC9WaWV3cG9ydEluZm9JdGVtLnFtbApAQCAtODQsMTEgKzg0LDYg
QEAgSXRlbSB7CiAKICAgICAgICAgICAgICAgICBDb2x1bW4gewogICAgICAgICAgICAgICAgICAg
ICBUZXh0IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJJbml0aWFsIHNjYWxlOiAi
ICsgZm9ybWF0U2NhbGUodGVzdC52aWV3cG9ydC5pbml0aWFsU2NhbGUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBmb250LmZhbWlseTogdGV4dEJveC5mb250RmFtaWx5Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvcjogdGV4dEJveC5mb250Q29sb3IKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBUZXh0IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHQ6ICJNaW5pbXVtIHNjYWxlOiAiICsgZm9ybWF0U2NhbGUodGVzdC52aWV3cG9ydC5taW5pbXVt
U2NhbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb250LmZhbWlseTogdGV4dEJveC5mb250
RmFtaWx5CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dEJveC5mb250Q29sb3IK
LS0gCjEuNy4xMgoK
</data>
<flag name="commit-queue"
          id="172832"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161907</attachid>
            <date>2012-09-03 05:53:26 -0700</date>
            <delta_ts>2012-09-03 06:34:25 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-WK2-Make-Qt-ViewportHandler-cross-platform.patch</filename>
            <type>text/plain</type>
            <size>107970</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSAxMTM5OGU1MTBhYjhiZDE2Mzc1ZGE4YjY5YTNiOTY4NGVkNTJkOWQwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IE1vbiwgMyBTZXAgMjAxMiAxNDoxNTozNSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtX
SzJdIE1ha2UgW1F0XVZpZXdwb3J0SGFuZGxlciBjcm9zcyBwbGF0Zm9ybQoKLS0tCiBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2MyArKysrKwog
U291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcg
Ky0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaCAgIHwg
ICAxIC0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAg
IHwgIDIzICstCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdf
cC5oICB8ICAgNCArLQogLi4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
X3BfcC5oICAgfCAgMTQgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmtp
dHRlc3QuY3BwICAgIHwgIDIxICstCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld3BvcnRI
YW5kbGVyLmNwcCAgICAgICB8IDI1MiArKysrKysrCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Vmlld3BvcnRIYW5kbGVyLmggICAgICAgICB8IDE0MiArKysrCiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVmlld3BvcnRIYW5kbGVyQ2xpZW50LmggICB8ICA1MSArKwogLi4uL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwICAgfCAgIDIgKy0KIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmggIHwgICA0ICstCiAuLi4vVUlQ
cm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwICAgICAgICB8ICAgMiArLQogLi4u
L1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwICAgICAgfCAgIDIgKy0K
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5jcHAgIHwgNzYw
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmll
d3BvcnRIYW5kbGVyLmggICAgfCAxNzggLS0tLS0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwIHwgICA0ICstCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggICB8ICAgOCArLQogLi4uL1VJUHJvY2Vzcy9xdC9W
aWV3cG9ydEhhbmRsZXJDbGllbnRRdC5jcHAgICAgICAgfCA1NzQgKysrKysrKysrKysrKysrKwog
Li4uL1dlYktpdDIvVUlQcm9jZXNzL3F0L1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmggfCAxNTkg
KysrKysKIFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDEzICsKIFRvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9WaWV3cG9ydEluZm9JdGVtLnFtbCAg
ICAgIHwgICA1IC0KIDIyIGZpbGVzIGNoYW5nZWQsIDE0MDIgaW5zZXJ0aW9ucygrKSwgOTg3IGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9W
aWV3cG9ydEhhbmRsZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1ZpZXdwb3J0SGFuZGxlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1ZpZXdwb3J0SGFuZGxlckNsaWVudC5oCiBkZWxldGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNwcAogZGVsZXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxl
ci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1ZpZXdw
b3J0SGFuZGxlckNsaWVudFF0LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDEx
MzI3N2QuLjM0ZGQ2OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNjYgQEAKKzIwMTItMDktMDMg
IEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+CisKKyAgICAgICAgW1dLMl0g
TWFrZSBbUXRdVmlld3BvcnRIYW5kbGVyIGNyb3NzIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTI1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBRdFZpZXdwb3J0SGFuZGxl
ciBpbmNsdWRlcyBiZWhhdmlvdXIgdGhhdCBpcyBub3QKKyAgICAgICAgcGxhdGZvcm0gc3BlY2lm
aWMsIHRvZ2V0aGVyIHdpdGggaG9va3MgdG8gdGhlIFF0UXVpY2sgQVBJCisgICAgICAgIGxheWVy
LgorCisgICAgICAgIEEgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW1wbGVtZW50YXRpb24gd291bGQg
YWxsb3cgb3RoZXIgcG9ydHMKKyAgICAgICAgdG8gdXNlIHRoZSB2aWV3cG9ydCBmdW5jdGlvbmFs
aXR5IHByb3ZpZGVkLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIHBsYXRmb3Jt
IGluZGVwZW5kZW50IFZpZXdwb3J0SGFuZGxlcgorICAgICAgICBjbGFzcyB0aGF0IGlzIHJlc3Bv
bnNpYmxlIGZvciBoYW5kbGluZyByZXF1ZXN0cyBmcm9tIHRoZSB3ZWIKKyAgICAgICAgcHJvY2Vz
cyAoZWcuIGNvbnRlbnQgc2l6ZSBjaGFuZ2VzLCB2aWV3cG9ydCBhdHRyaWJ1dGVzIGNoYW5nZXMK
KyAgICAgICAgYW5kIHNjcm9sbCBwb3NpdGlvbiByZXF1ZXN0cykuCisKKyAgICAgICAgVmlld3Bv
cnRIYW5kbGVyIGFsc28gYWN0cyBhcyBhIHByb3h5IGZvciBub3RpZmljYXRpb25zIHRvIHRoZQor
ICAgICAgICB3ZWIgcHJvY2VzcyBmb3IgY2hhbmdlcyBpbiB0aGUgdmlld3BvcnQgc3RhdGUgKGVn
LiB2aWV3cG9ydAorICAgICAgICBzaXplLCB2aXNpYmxlIHJlY3QsIGNvbnRlbnQgc2NhbGUgYW5k
IG1vdmVtZW50IHRyYWplY3RvcnkpLgorCisgICAgICAgIFVwZGF0ZXMgb2YgdGhlIHZpZXdwb3J0
IHN0YXRlIGFyZSBwdXNoZWQgdG8gdGhlIFZpZXdwb3J0SGFuZGxlcgorICAgICAgICBieSBhIHBs
YXRmb3JtIHNwZWNpZmljIGNsaWVudCBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHRoZQorICAgICAg
ICBWaWV3cG9ydEhhbmRsZXJDbGllbnQgYWJzdHJhY3QgaW50ZXJmYWNlLgorICAgICAgICBSZXF1
ZXN0cyBmcm9tIHRoZSB3ZWIgcHJvY2VzcyBhcmUgYWxzbyBhY3RlZCBvbiBieSB0aGUgY2xpZW50
CisgICAgICAgIHdoaWNoIHByb3ZpZGVzIGhvb2tzIHRvIHRoZSBRdCBBUEkgbGF5ZXIuCisKKyAg
ICAgICAgRm9yIG5vdyBvbmx5IFZpZXdwb3J0SGFuZGxlckNsaWVudFF0IGltcGxlbWVudHMgdGhl
CisgICAgICAgIGNsaWVudCBpbnRlcmZhY2UgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBRUXVpY2sg
c3BlY2lmaWMKKyAgICAgICAgYmVoYXZpb3VyIChnZXN0dXJlcywgYW5pbWF0aW9ucyBldGMpLgor
CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnBhZ2VfcF9wLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpvbkNvbXBvbmVudENvbXBsZXRl
KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjp+UVF1aWNrV2ViVmll
d0ZsaWNrYWJsZVByaXZhdGUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZh
dGU6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3
RmxpY2thYmxlUHJpdmF0ZTo6dXBkYXRlVmlld3BvcnRTaXplKToKKyAgICAgICAgKFFRdWlja1dl
YlZpZXdGbGlja2FibGVQcml2YXRlOjpwYWdlRGlkUmVxdWVzdFNjcm9sbCk6CisgICAgICAgIChR
UXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmg6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6OnZpZXdwb3J0
SGFuZGxlckNsaWVudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAg
IChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9xdC9xd2Via2l0dGVzdC5jcHA6CisgICAgICAgIChRV2ViS2l0VGVzdDo6dmlld3BvcnQpOgor
ICAgICAgICAoUVdlYktpdFRlc3Q6OmRldmljZVBpeGVsUmF0aW8pOgorICAgICAgICAoUVdlYktp
dFRlc3Q6OmNvbnRlbnRzU2NhbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9WaWV3cG9ydEhhbmRs
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmJvdW5k
KToKKyAgICAgICAgKFdlYktpdDo6ZnV6enlDb21wYXJlKToKKyAgICAgICAgKFdlYktpdDo6Ym91
bmRQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OlZp
ZXdwb3J0VXBkYXRlRGVmZXJyZXIpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydFVwZGF0ZURl
ZmVycmVyOjp+Vmlld3BvcnRVcGRhdGVEZWZlcnJlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdw
b3J0SGFuZGxlcjo6Vmlld3BvcnRIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyOjpjb252ZXJ0RnJvbVZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyOjpjb252ZXJ0VG9WaWV3cG9ydCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFu
ZGxlcjo6aW5uZXJCb3VuZGVkQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdw
b3J0SGFuZGxlcjo6b3V0ZXJCb3VuZGVkQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdwb3J0SGFuZGxlcjo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktp
dDo6Vmlld3BvcnRIYW5kbGVyOjpwYWdlRGlkUmVxdWVzdFNjcm9sbCk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdwb3J0SGFuZGxlcjo6YWRqdXN0Vmlld3BvcnRTaXplKToKKyAgICAgICAgKFdlYktp
dDo6Vmlld3BvcnRIYW5kbGVyOjphZGp1c3RWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAg
KFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjpzeW5jVmlzaWJsZUNvbnRlbnRzKToKKyAgICAgICAg
KFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXI6OnN1c3BlbmRDb250ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjpyZXN1bWVDb250ZW50KToKKyAgICAgICAgKFdl
YktpdDo6Vmlld3BvcnRIYW5kbGVyOjpwb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2NhbGUpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9WaWV3cG9ydEhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChWaWV3cG9ydFVwZGF0ZURlZmVy
cmVyKToKKyAgICAgICAgKFZpZXdwb3J0SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdw
b3J0SGFuZGxlcjo6flZpZXdwb3J0SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0
SGFuZGxlcjo6aGFzU3VzcGVuZGVkQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0
SGFuZGxlcjo6aGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyOjphbGxvd3NVc2VyU2NhbGluZyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFu
ZGxlcjo6Y29udGVudHNMYXlvdXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5k
bGVyOjpkZXZpY2VQaXhlbFJhdGlvKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVy
OjptaW5pbXVtQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxl
cjo6bWF4aW11bUNvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXI6OnNldEhhZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1ZpZXdwb3J0
SGFuZGxlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFZpZXdwb3J0SGFuZGxlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdwb3J0SGFuZGxlckNsaWVudDo6flZpZXdwb3J0SGFuZGxlckNsaWVudCk6CisgICAgICAg
ICogVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpRdEdlc3R1cmVSZWNvZ25pemVyOjp2aWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBh
Z2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SGFuZGxlcik6CisgICAgICAgICogVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KFF0V2ViUGFnZUV2ZW50SGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6dmlld3BvcnRIYW5kbGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRR
dCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpTY2FsZUFuaW1h
dGlvbjo6dXBkYXRlQ3VycmVudFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQ6On5WaWV3cG9ydEhhbmRsZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzZXRDb250ZW50UmVjdFZpc2libGVQb3NpdGlvbkF0
U2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6YW5pbWF0
ZUNvbnRlbnRSZWN0VmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNs
aWVudFF0OjpmbGlja01vdmVTdGFydGVkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQ6OmZsaWNrTW92ZUVuZGVkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ6OnBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYktp
dDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNjYWxlQW5pbWF0aW9uU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnRvdWNoQmVnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dG91Y2hFbmQpOgorICAg
ICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6Zm9jdXNFZGl0YWJsZUFyZWEp
OgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6em9vbVRvQXJlYUdl
c3R1cmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojpu
ZWFyZXN0VmFsaWRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQ6OnNldENvbnRlbnRzUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2V0Q29udGVudHNTY2FsZSk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzZXRDb250ZW50c1JlY3RUb05lYXJlc3RW
YWxpZEJvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojpy
ZXF1ZXN0Vmlld3BvcnRVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJD
bGllbnRRdDo6YWxsb3dzVXNlclNjYWxpbmcpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhh
bmRsZXJDbGllbnRRdDo6ZGV2aWNlUGl4ZWxSYXRpbyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdw
b3J0SGFuZGxlckNsaWVudFF0OjptaW5pbXVtQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJL
aXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjptYXhpbXVtQ29udGVudHNTY2FsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpjdXJyZW50Q29udGVudHNTY2Fs
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojpjb250ZW50c0xh
eW91dFNpemUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2Ny
b2xsQW5pbWF0aW9uQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xp
ZW50UXQ6OnBhbkdlc3R1cmVBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6cGFuR2VzdHVyZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9y
dEhhbmRsZXJDbGllbnRRdDo6cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGFuR2VzdHVyZUVuZGVkKToKKyAgICAgICAg
KFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVDYW5jZWxsZWQpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2NhbGVBbmltYXRpb25B
Y3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6Y2FuY2Vs
U2Nyb2xsQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6OmludGVycnVwdFNjYWxlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZUFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlZp
ZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVTdGFydGVkKToKKyAgICAgICAgKFdl
YktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUp
OgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGluY2hHZXN0dXJl
RW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGluY2hH
ZXN0dXJlQ2FuY2VsbGVkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktpdDo6Vmll
d3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmRpZENoYW5nZVZpc2libGVDb250ZW50cyk6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dXBkYXRl
Vmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2Nh
bGVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnZp
ZXdwb3J0U2NhbGVGb3JSZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoVmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGll
bnRRdDo6c2V0Vmlld3BvcnRIYW5kbGVyKToKKyAgICAgICAgKFNjYWxlQW5pbWF0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OlNjYWxlQW5pbWF0aW9uOjpT
Y2FsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0
OjpTY2FsZVN0YWNrSXRlbTo6U2NhbGVTdGFja0l0ZW0pOgorICAgICAgICAoU2NhbGVTdGFja0l0
ZW0pOgorCiAyMDEyLTA5LTAzICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBp
bnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBTa2lwIEVXSzJVbml0VGVzdEJhc2UuZXdr
X2Nvb2tpZV9tYW5hZ2VyX3Blcm1hbmVudF9zdG9yYWdlIEFQSSB0ZXN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRl
eCAyMWUyZGMxLi4xZTcwMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTIxOSw2ICsyMTksOCBAQCBIRUFE
RVJTICs9IFwKICAgICBVSVByb2Nlc3MvUHJvY2Vzc01vZGVsLmggXAogICAgIFVJUHJvY2Vzcy9S
ZXNwb25zaXZlbmVzc1RpbWVyLmggXAogICAgIFVJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oIFwKKyAg
ICBVSVByb2Nlc3MvVmlld3BvcnRIYW5kbGVyLmggXAorICAgIFVJUHJvY2Vzcy9WaWV3cG9ydEhh
bmRsZXJDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuaCBcCiAg
ICAgVUlQcm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaCBcCiAgICAgVUlQ
cm9jZXNzL1dlYkJhY2tGb3J3YXJkTGlzdC5oIFwKQEAgLTU2MCw2ICs1NjIsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBVSVByb2Nlc3MvUGx1Z2lucy9xdC9QbHVnaW5Qcm9jZXNzUHJveHlRdC5jcHAg
XAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAgXAog
ICAgIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1RpbWVyLmNwcCBcCisgICAgVUlQcm9jZXNzL1Zp
ZXdwb3J0SGFuZGxlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmNw
cCBcCiAgICAgVUlQcm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwIFwK
ICAgICBVSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmNwcCBcCkBAIC03NzksOSArNzgyLDkg
QEAgY29udGFpbnMoREVGSU5FUywgSEFWRV9RVFFVSUNLPTEpIHsKICAgICAgICAgVUlQcm9jZXNz
L3F0L1F0V2ViUGFnZVBvbGljeUNsaWVudC5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0V2Vi
UGFnZVNHTm9kZS5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVVJQ2xpZW50Lmgg
XAotICAgICAgICBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuaCBcCiAgICAgICAgIFVJ
UHJvY2Vzcy9xdC9RdFdlYlVuZG9Db250cm9sbGVyLmggXAogICAgICAgICBVSVByb2Nlc3MvcXQv
UXRXZWJJY29uRGF0YWJhc2VDbGllbnQuaCBcCisgICAgICAgIFVJUHJvY2Vzcy9xdC9WaWV3cG9y
dEhhbmRsZXJDbGllbnRRdC5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51
UHJveHlRdC5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYkdlb2xvY2F0aW9uUHJvdmlkZXJR
dC5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYlBvcHVwTWVudVByb3h5UXQuaApAQCAtODEz
LDcgKzgxNiw3IEBAIGNvbnRhaW5zKERFRklORVMsIEhBVkVfUVRRVUlDSz0xKSB7CiAgICAgICAg
IFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBcCiAgICAgICAgIFVJUHJv
Y2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICAgICAgVUlQcm9jZXNz
L3F0L1F0VGFwR2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKLSAgICAgICAgVUlQcm9jZXNzL3F0L1F0
Vmlld3BvcnRIYW5kbGVyLmNwcCBcCisgICAgICAgIFVJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdC5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94
eVF0LmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9XZWJHZW9sb2NhdGlvblByb3ZpZGVyUXQu
Y3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYlBvcHVwTWVudVByb3h5UXQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9w
X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3Au
aAppbmRleCBhZDFjNmFkLi5jN2FjODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oCkBAIC0yNiw3ICsyNiw2IEBACiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3MgUXRWaWV3cG9ydEhh
bmRsZXI7CiBjbGFzcyBRdFdlYlBhZ2VFdmVudEhhbmRsZXI7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IGVkZWM4Yzcu
LjMxMGY0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3LmNwcApAQCAtMjUsMTMgKzI1LDEzIEBACiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQ
cm94eUltcGwuaCIKICNpbmNsdWRlICJRdERpYWxvZ1J1bm5lci5oIgogI2luY2x1ZGUgIlF0RG93
bmxvYWRNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKICNpbmNsdWRl
ICJRdFdlYkNvbnRleHQuaCIKICNpbmNsdWRlICJRdFdlYkVycm9yLmgiCiAjaW5jbHVkZSAiUXRX
ZWJJY29uRGF0YWJhc2VDbGllbnQuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VFdmVudEhhbmRsZXIu
aCIKICNpbmNsdWRlICJRdFdlYlBhZ2VMb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdl
UG9saWN5Q2xpZW50LmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQuaCIKICNp
bmNsdWRlICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZF
UikKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgpAQCAtMzI2LDggKzMyNiw5IEBAIHZv
aWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRpYWxpemUoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIFdLUGFnZUdyb3VwUmVmIHBhCiB2b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpvbkNvbXBv
bmVudENvbXBsZXRlKCkKIHsKICAgICBRX1EoUVF1aWNrV2ViVmlldyk7Ci0gICAgbV92aWV3cG9y
dEhhbmRsZXIucmVzZXQobmV3IFF0Vmlld3BvcnRIYW5kbGVyKHdlYlBhZ2VQcm94eS5nZXQoKSwg
cSwgcGFnZVZpZXcuZGF0YSgpKSk7Ci0gICAgcGFnZVZpZXctPmV2ZW50SGFuZGxlcigpLT5zZXRW
aWV3cG9ydEhhbmRsZXIobV92aWV3cG9ydEhhbmRsZXIuZGF0YSgpKTsKKyAgICBtX3ZpZXdwb3J0
SGFuZGxlckNsaWVudC5yZXNldChuZXcgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQocSwgcGFnZVZp
ZXcuZGF0YSgpKSk7CisgICAgbV92aWV3cG9ydEhhbmRsZXIucmVzZXQobmV3IFZpZXdwb3J0SGFu
ZGxlcih3ZWJQYWdlUHJveHkuZ2V0KCksIG1fdmlld3BvcnRIYW5kbGVyQ2xpZW50LmRhdGEoKSkp
OworICAgIHBhZ2VWaWV3LT5ldmVudEhhbmRsZXIoKS0+c2V0Vmlld3BvcnRIYW5kbGVyKG1fdmll
d3BvcnRIYW5kbGVyQ2xpZW50LmRhdGEoKSk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZh
dGU6OnNldFRyYW5zcGFyZW50QmFja2dyb3VuZChib29sIGVuYWJsZSkKQEAgLTg1Niw3ICs4NTcs
NyBAQCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6UVF1aWNrV2ViVmlld0ZsaWNrYWJs
ZVByaXZhdGUoUVF1aWNrV2ViVmlldyogdmlldwogCiBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJp
dmF0ZTo6flFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlKCkKIHsKLSAgICBtX3ZpZXdwb3J0
SGFuZGxlci0+ZGlzY29ubmVjdCgpOworICAgIG1fdmlld3BvcnRIYW5kbGVyQ2xpZW50LT5kaXNj
b25uZWN0KCk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OmluaXRp
YWxpemUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJl
ZikKQEAgLTg3NSwyOCArODc2LDI4IEBAIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZh
dGU6Om9uQ29tcG9uZW50Q29tcGxldGUoKQogdm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJp
dmF0ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0
QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKIHsKICAgICBpZiAobV92aWV3cG9ydEhhbmRsZXIp
Ci0gICAgICAgIG1fdmlld3BvcnRIYW5kbGVyLT52aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKG5l
d0F0dHJpYnV0ZXMpOworICAgICAgICBtX3ZpZXdwb3J0SGFuZGxlci0+ZGlkQ2hhbmdlVmlld3Bv
cnRBdHRyaWJ1dGVzKG5ld0F0dHJpYnV0ZXMpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdGbGlj
a2FibGVQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUoKQogewotICAgIC8vIEZJWE1FOiBFeGFt
aW5lIHdoeSB0aGVyZSBpcyBub3QgYW4gdmlld3BvcnRIYW5kbGVyIGhlcmUgaW4gdGhlIGJlZ2lu
bmluZy4KKyAgICBRX1EoUVF1aWNrV2ViVmlldyk7CisKICAgICBpZiAobV92aWV3cG9ydEhhbmRs
ZXIpCi0gICAgICAgIG1fdmlld3BvcnRIYW5kbGVyLT52aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgp
OworICAgICAgICBtX3ZpZXdwb3J0SGFuZGxlci0+YWRqdXN0Vmlld3BvcnRTaXplKFFTaXplRihx
LT53aWR0aCgpLCBxLT5oZWlnaHQoKSkpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2Fi
bGVQcml2YXRlOjpwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBRUG9pbnQmIHBvcykKIHsKLSAg
ICBtX3ZpZXdwb3J0SGFuZGxlci0+cGFnZUNvbnRlbnRQb3NpdGlvblJlcXVlc3RlZChwb3MpOwor
ICAgIGlmIChtX3ZpZXdwb3J0SGFuZGxlcikKKyAgICAgICAgbV92aWV3cG9ydEhhbmRsZXItPnBh
Z2VEaWRSZXF1ZXN0U2Nyb2xsKHBvcyk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJs
ZVByaXZhdGU6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBRU2l6ZSYgbmV3U2l6ZSkKIHsK
LSAgICBRX1EoUVF1aWNrV2ViVmlldyk7Ci0KICAgICBwYWdlVmlldy0+c2V0Q29udGVudHNTaXpl
KG5ld1NpemUpOyAvLyBlbWl0cyBjb250ZW50c1NpemVDaGFuZ2VkKCkKICAgICBRUXVpY2tXZWJW
aWV3UHJpdmF0ZTo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKG5ld1NpemUpOwotICAgIG1fdmlld3Bv
cnRIYW5kbGVyLT5wYWdlQ29udGVudHNTaXplQ2hhbmdlZChuZXdTaXplLCBxLT5ib3VuZGluZ1Jl
Y3QoKS5zaXplKCkudG9TaXplKCkpOworICAgIG1fdmlld3BvcnRIYW5kbGVyLT5kaWRDaGFuZ2VD
b250ZW50c1NpemUobmV3U2l6ZSk7CiB9CiAKIHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVBy
aXZhdGU6OmhhbmRsZU1vdXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKaW5kZXggNjQ1NTM5
ZS4uMDc2YzRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXdfcC5oCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFBsYXRmb3JtV2ViVmlldzsK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBRdFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERh
dGE7Ci1jbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKK2NsYXNzIFZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0OwogY2xhc3MgUXRXZWJQYWdlTG9hZENsaWVudDsKIGNsYXNzIFF0V2ViUGFnZVBvbGljeUNs
aWVudDsKIGNsYXNzIFF0V2ViUGFnZVVJQ2xpZW50OwpAQCAtMjE3LDcgKzIxNyw3IEBAIHByaXZh
dGU6CiAgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCogbV9leHBlcmltZW50YWw7CiAKICAg
ICBmcmllbmQgY2xhc3MgUVdlYktpdFRlc3Q7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRW
aWV3cG9ydEhhbmRsZXI7CisgICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6Vmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQ7CiAgICAgZnJpZW5kIGNsYXNzIFdlYktpdDo6UXRXZWJQYWdlTG9hZENsaWVudDsK
ICAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpRdFdlYlBhZ2VQb2xpY3lDbGllbnQ7CiAgICAgZnJp
ZW5kIGNsYXNzIFdlYktpdDo6UXRXZWJQYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKaW5kZXggZmNiOWYyYS4u
MTZlYzIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVp
Y2t3ZWJ2aWV3X3BfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlld19wX3AuaApAQCAtMjQsMTAgKzI0LDEwIEBACiAjaW5jbHVkZSAiUXRQYWdlQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlVUlDbGllbnQuaCIKICNpbmNsdWRlICJRdFdlYlVu
ZG9Db250cm9sbGVyLmgiCi0KKyNpbmNsdWRlICJWaWV3cG9ydEhhbmRsZXIuaCIKKyNpbmNsdWRl
ICJWaWV3cG9ydEhhbmRsZXJDbGllbnQuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIK
ICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKLQogI2luY2x1ZGUgPFF0Q29yZS9RRWxhcHNl
ZFRpbWVyPgogI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgogI2luY2x1ZGUgPFF0Q29yZS9RU2Nv
cGVkUG9pbnRlcj4KQEAgLTM5LDExICszOSwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNz
IERvd25sb2FkUHJveHk7CiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5OwogY2xhc3MgUXREaWFsb2dS
dW5uZXI7Ci1jbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKK2NsYXNzIFZpZXdwb3J0SGFuZGxlckNs
aWVudFF0OwogY2xhc3MgUXRXZWJDb250ZXh0OwogY2xhc3MgUXRXZWJFcnJvcjsKIGNsYXNzIFF0
V2ViUGFnZUxvYWRDbGllbnQ7CiBjbGFzcyBRdFdlYlBhZ2VQb2xpY3lDbGllbnQ7CitjbGFzcyBW
aWV3cG9ydEhhbmRsZXI7CiBjbGFzcyBXZWJQYWdlUHJveHk7CiB9CiAKQEAgLTg3LDcgKzg4LDcg
QEAgcHVibGljOgogICAgIGludCBsb2FkUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX2xvYWRQ
cm9ncmVzczsgfQogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAKLSAgICB2aXJ0dWFsIFdl
YktpdDo6UXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0SGFuZGxlcigpIHsgcmV0dXJuIDA7IH0K
KyAgICBXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0KiB2aWV3cG9ydEhhbmRsZXJDbGll
bnQoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlckNsaWVudC5kYXRhKCk7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCkgeyB9CiAgICAgdm9pZCB1cGRhdGVU
b3VjaFZpZXdwb3J0U2l6ZSgpOwogCkBAIC0xNzAsNyArMTcxLDkgQEAgcHJvdGVjdGVkOgogICAg
IFFTY29wZWRQb2ludGVyPFFRdWlja1dlYlBhZ2U+IHBhZ2VWaWV3OwogICAgIFFRdWlja1dlYlZp
ZXcqIHFfcHRyOwogCi0gICAgUVNjb3BlZFBvaW50ZXI8V2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxl
cj4gbV92aWV3cG9ydEhhbmRsZXI7CisgICAgUVNjb3BlZFBvaW50ZXI8V2ViS2l0OjpWaWV3cG9y
dEhhbmRsZXI+IG1fdmlld3BvcnRIYW5kbGVyOworICAgIFFTY29wZWRQb2ludGVyPFdlYktpdDo6
Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ+IG1fdmlld3BvcnRIYW5kbGVyQ2xpZW50OworCiAgICAg
RmxpY2thYmxlQXhpc0xvY2tlciBheGlzTG9ja2VyOwogCiAgICAgUVFtbENvbXBvbmVudCogYWxl
cnREaWFsb2c7CkBAIC0yMTgsNyArMjIxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBv
bkNvbXBvbmVudENvbXBsZXRlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3Bv
cnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpOwotICAgIHZp
cnR1YWwgV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlciogdmlld3BvcnRIYW5kbGVyKCkgeyByZXR1
cm4gbV92aWV3cG9ydEhhbmRsZXIuZGF0YSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZp
ZXdwb3J0U2l6ZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNv
bnN0IFFQb2ludCYgcG9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXdlYmtpdHRlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2Via2l0dGVzdC5jcHAKaW5kZXggZjkyYzlmZi4uMDBlMzZjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVzdC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVzdC5jcHAKQEAgLTIxLDcgKzIxLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJxd2Via2l0dGVzdF9wLmgiCiAKLSNpbmNs
dWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgorI2luY2x1ZGUgIlZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0LmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wX3AuaCIKICNpbmNsdWRlIDxRTXV0YWJs
ZUxpc3RJdGVyYXRvcj4KICNpbmNsdWRlIDxRVG91Y2hFdmVudD4KQEAgLTE0OCwxMiArMTQ4LDEx
IEBAIHN0YXRpYyBpbmxpbmUgUUpzb25PYmplY3QgdG9Kc29uT2JqZWN0KGNvbnN0IFFTaXplRiYg
c2l6ZUYpCiBRSnNvbk9iamVjdCBRV2ViS2l0VGVzdDo6dmlld3BvcnQoKSBjb25zdAogewogICAg
IFFKc29uT2JqZWN0IHZpZXdwb3J0RGF0YTsKLSAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZp
ZXdwb3J0SGFuZGxlciA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlcigpKSB7Ci0g
ICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygiaW5pdGlhbFNjYWxlIiks
IHZpZXdwb3J0SGFuZGxlci0+bV9yYXdBdHRyaWJ1dGVzLmluaXRpYWxTY2FsZSk7Ci0gICAgICAg
IHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygibGF5b3V0U2l6ZSIpLCB0b0pzb25P
YmplY3QoUVNpemVGKHZpZXdwb3J0SGFuZGxlci0+bV9yYXdBdHRyaWJ1dGVzLmxheW91dFNpemUp
KSk7Ci0gICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygiaXNTY2FsYWJs
ZSIpLCAhIXZpZXdwb3J0SGFuZGxlci0+bV9yYXdBdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZSk7Ci0g
ICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygibWluaW11bVNjYWxlIiks
IHZpZXdwb3J0SGFuZGxlci0+bV9taW5pbXVtU2NhbGUpOwotICAgICAgICB2aWV3cG9ydERhdGEu
aW5zZXJ0KFFMYXRpbjFTdHJpbmcoIm1heGltdW1TY2FsZSIpLCB2aWV3cG9ydEhhbmRsZXItPm1f
bWF4aW11bVNjYWxlKTsKKyAgICBpZiAoY29uc3QgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQqIGNv
bnN0IHZpZXdwb3J0SGFuZGxlciA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlckNs
aWVudCgpKSB7CisgICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygibGF5
b3V0U2l6ZSIpLCB0b0pzb25PYmplY3Qodmlld3BvcnRIYW5kbGVyLT5jb250ZW50c0xheW91dFNp
emUoKSkpOworICAgICAgICB2aWV3cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoImlzU2Nh
bGFibGUiKSwgdmlld3BvcnRIYW5kbGVyLT5hbGxvd3NVc2VyU2NhbGluZygpKTsKKyAgICAgICAg
dmlld3BvcnREYXRhLmluc2VydChRTGF0aW4xU3RyaW5nKCJtaW5pbXVtU2NhbGUiKSwgdmlld3Bv
cnRIYW5kbGVyLT5taW5pbXVtQ29udGVudHNTY2FsZSgpKTsKKyAgICAgICAgdmlld3BvcnREYXRh
Lmluc2VydChRTGF0aW4xU3RyaW5nKCJtYXhpbXVtU2NhbGUiKSwgdmlld3BvcnRIYW5kbGVyLT5t
YXhpbXVtQ29udGVudHNTY2FsZSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICB2aWV3cG9ydERh
dGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoImluaXRpYWxTY2FsZSIpLCAxLjApOwogICAgICAgICB2
aWV3cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoImxheW91dFNpemUiKSwgdG9Kc29uT2Jq
ZWN0KFFTaXplRigpKSk7CkBAIC0xNjYsMTQgKzE2NSwxNCBAQCBRSnNvbk9iamVjdCBRV2ViS2l0
VGVzdDo6dmlld3BvcnQoKSBjb25zdAogCiBRVmFyaWFudCBRV2ViS2l0VGVzdDo6ZGV2aWNlUGl4
ZWxSYXRpbygpIGNvbnN0CiB7Ci0gICAgaWYgKFF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydCA9
IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlcigpKQotICAgICAgICByZXR1cm4gdmll
d3BvcnQtPm1fZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICBpZiAoY29uc3QgVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQqIGNvbnN0IHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5k
bGVyQ2xpZW50KCkpCisgICAgICAgIHJldHVybiB2aWV3cG9ydC0+ZGV2aWNlUGl4ZWxSYXRpbygp
OwogICAgIHJldHVybiAxLjA7CiB9CiAKIFFWYXJpYW50IFFXZWJLaXRUZXN0Ojpjb250ZW50c1Nj
YWxlKCkgY29uc3QKIHsKLSAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0ID0gbV93
ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5kbGVyKCkpCi0gICAgICAgIHJldHVybiB2aWV3cG9y
dC0+Y3VycmVudENTU1NjYWxlKCk7CisgICAgaWYgKGNvbnN0IFZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0KiBjb25zdCB2aWV3cG9ydCA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlckNs
aWVudCgpKQorICAgICAgICByZXR1cm4gdmlld3BvcnQtPmN1cnJlbnRDb250ZW50c1NjYWxlKCk7
CiAgICAgcmV0dXJuIDEuMDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9WaWV3cG9ydEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdwb3J0
SGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxOWFjMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9WaWV3cG9ydEhhbmRs
ZXIuY3BwCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJp
Z2h0IChDKSAyMDExIEJlbmphbWluIFBvdWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5kbGVyLmgiCisKKyNpbmNs
dWRlICJWaWV3cG9ydEhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRT
aXplLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYm91bmQoZmxvYXQgbWluLCBmbG9hdCB2YWx1ZSwgZmxv
YXQgbWF4KQoreworICAgIHJldHVybiBjbGFtcFRvPGZsb2F0Pih2YWx1ZSwgbWluLCBtYXgpOwor
fQorCitib29sIGZ1enp5Q29tcGFyZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBlcHNpbG9uKQor
eworICAgIHJldHVybiBzdGQ6OmFicyhhIC0gYikgPCBlcHNpbG9uOworfQorCitGbG9hdFBvaW50
IGJvdW5kUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCBtaW5Qb3NpdGlvbiwgY29uc3QgRmxvYXRQ
b2ludCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIG1heFBvc2l0aW9uKQoreworICAgIHJl
dHVybiBGbG9hdFBvaW50KGJvdW5kKG1pblBvc2l0aW9uLngoKSwgcG9zaXRpb24ueCgpLCBtYXhQ
b3NpdGlvbi54KCkpLCBib3VuZChtaW5Qb3NpdGlvbi55KCksIHBvc2l0aW9uLnkoKSwgbWF4UG9z
aXRpb24ueSgpKSk7Cit9CisKK1ZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OlZpZXdwb3J0VXBkYXRl
RGVmZXJyZXIoVmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydEhhbmRsZXIsIFN1c3BlbmRDb250ZW50
RmxhZyBzdXNwZW5kQ29udGVudEZsYWcpCisgICAgOiBoYW5kbGVyKHZpZXdwb3J0SGFuZGxlcikK
K3sKKyAgICBoYW5kbGVyLT5tX3N1c3BlbmRDb3VudCsrOworCisgICAgLy8gVGhlcmUgaXMgbm8g
bmVlZCB0byBzdXNwZW5kIGNvbnRlbnQgZm9yIGltbWVkaWF0ZSB1cGRhdGVzCisgICAgLy8gb25s
eSBkdXJpbmcgYW5pbWF0aW9ucyBvciBsb25nZXIgZ2VzdHVyZXMuCisgICAgaWYgKHN1c3BlbmRD
b250ZW50RmxhZyA9PSBEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KQorICAgICAgICBoYW5k
bGVyLT5zdXNwZW5kQ29udGVudCgpOworfQorCitWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjp+Vmll
d3BvcnRVcGRhdGVEZWZlcnJlcigpCit7CisgICAgaWYgKC0tKGhhbmRsZXItPm1fc3VzcGVuZENv
dW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaGFuZGxlci0+cmVzdW1lQ29udGVudCgpOwor
CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgd2ls
bCBiZSByZXF1ZXN0ZWQuCisgICAgaGFuZGxlci0+c3luY1Zpc2libGVDb250ZW50cygpOworfQor
CitWaWV3cG9ydEhhbmRsZXI6OlZpZXdwb3J0SGFuZGxlcihXZWJLaXQ6OldlYlBhZ2VQcm94eSog
cHJveHksIFZpZXdwb3J0SGFuZGxlckNsaWVudCogY2xpZW50KQorICAgIDogbV93ZWJQYWdlUHJv
eHkocHJveHkpCisgICAgLCBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX2FsbG93c1VzZXJTY2Fs
aW5nKGZhbHNlKQorICAgICwgbV9taW5pbXVtU2NhbGUoMSkKKyAgICAsIG1fbWF4aW11bVNjYWxl
KDEpCisgICAgLCBtX2RldmljZVBpeGVsUmF0aW8oMSkKKyAgICAsIG1fc3VzcGVuZENvdW50KDAp
CisgICAgLCBtX2hhc1N1c3BlbmRlZENvbnRlbnQoZmFsc2UpCisgICAgLCBtX2hhZFVzZXJJbnRl
cmFjdGlvbihmYWxzZSkKKyAgICAsIG1fdmlld3BvcnRTY2FsZSgxKQoreworICAgIC8vIEluaXRp
YWxpemluZyBWaWV3cG9ydCBSYXcgQXR0cmlidXRlcyB0byBhdm9pZCByYW5kb20gbmVnYXRpdmUg
c2NhbGUgZmFjdG9ycworICAgIC8vIGlmIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gYmV0d2Vl
biB0aGUgZmlyc3QgbGF5b3V0IGFuZCBzZXR0aW5nIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzIGZv
ciB0aGUgZmlyc3QgdGltZS4KKyAgICBtX3Jhd0F0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9
IG1fZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICBtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlID0g
MTsKKyAgICBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlID0gbV9taW5pbXVtU2NhbGU7Cisg
ICAgbV9yYXdBdHRyaWJ1dGVzLm1heGltdW1TY2FsZSA9IG1fbWF4aW11bVNjYWxlOworICAgIG1f
cmF3QXR0cmlidXRlcy51c2VyU2NhbGFibGUgPSBtX2FsbG93c1VzZXJTY2FsaW5nOworCisgICAg
QVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+c2V0Vmlld3BvcnRIYW5kbGVyKHRoaXMp
OworfQorCitmbG9hdCBWaWV3cG9ydEhhbmRsZXI6OmNvbnZlcnRGcm9tVmlld3BvcnQoZmxvYXQg
dmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZhbHVlIC8gbV9kZXZpY2VQaXhlbFJhdGlvOwor
fQorCitmbG9hdCBWaWV3cG9ydEhhbmRsZXI6OmNvbnZlcnRUb1ZpZXdwb3J0KGZsb2F0IHZhbHVl
KSBjb25zdAoreworICAgIHJldHVybiB2YWx1ZSAqIG1fZGV2aWNlUGl4ZWxSYXRpbzsKK30KKwor
RmxvYXRSZWN0IFZpZXdwb3J0SGFuZGxlcjo6Y29udmVydFRvVmlld3BvcnQoY29uc3QgRmxvYXRS
ZWN0JiBjc3NSZWN0KSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoCisgICAgICAgIGNv
bnZlcnRUb1ZpZXdwb3J0KGNzc1JlY3QueCgpKSwKKyAgICAgICAgY29udmVydFRvVmlld3BvcnQo
Y3NzUmVjdC55KCkpLAorICAgICAgICBjb252ZXJ0VG9WaWV3cG9ydChjc3NSZWN0LndpZHRoKCkp
LAorICAgICAgICBjb252ZXJ0VG9WaWV3cG9ydChjc3NSZWN0LmhlaWdodCgpKQorICAgICk7Cit9
CisKK2Zsb2F0IFZpZXdwb3J0SGFuZGxlcjo6aW5uZXJCb3VuZGVkQ29udGVudHNTY2FsZShmbG9h
dCBjc3NTY2FsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gYm91bmQobV9taW5pbXVtU2NhbGUsIGNz
c1NjYWxlLCBtX21heGltdW1TY2FsZSk7Cit9CisKK2Zsb2F0IFZpZXdwb3J0SGFuZGxlcjo6b3V0
ZXJCb3VuZGVkQ29udGVudHNTY2FsZShmbG9hdCBjc3NTY2FsZSkgY29uc3QKK3sKKyAgICBpZiAo
bV9hbGxvd3NVc2VyU2NhbGluZykgeworICAgICAgICAvLyBCb3VuZGVkIGJ5IFswLjEsIDEwLjBd
IGxpa2UgdGhlIHZpZXdwb3J0IG1ldGEgY29kZSBpbiBXZWJDb3JlLgorICAgICAgICBmbG9hdCBo
YXJkTWluID0gc3RkOjptYXg8ZmxvYXQ+KDAuMSwgMC41ICogbV9taW5pbXVtU2NhbGUpOworICAg
ICAgICBmbG9hdCBoYXJkTWF4ID0gc3RkOjptaW48ZmxvYXQ+KDEwLCAyICogbV9tYXhpbXVtU2Nh
bGUpOworICAgICAgICByZXR1cm4gYm91bmQoaGFyZE1pbiwgY3NzU2NhbGUsIGhhcmRNYXgpOwor
ICAgIH0KKyAgICByZXR1cm4gaW5uZXJCb3VuZGVkQ29udGVudHNTY2FsZShjc3NTY2FsZSk7Cit9
CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyOjpkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgSW50
U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAobV92aWV3cG9ydFNpemUuaXNFbXB0eSgpIHx8IG5l
d1NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRlbnRzU2l6ZSA9
IG5ld1NpemU7CisKKyAgICBmbG9hdCBtaW5pbXVtU2NhbGUgPSBXZWJDb3JlOjpjb21wdXRlTWlu
aW11bVNjYWxlRmFjdG9yRm9yQ29udGVudENvbnRhaW5lZChtX3Jhd0F0dHJpYnV0ZXMsIFdlYkNv
cmU6OnJvdW5kZWRJbnRTaXplKG1fdmlld3BvcnRTaXplKSwgbmV3U2l6ZSk7CisKKyAgICBpZiAo
IWZ1enp5Q29tcGFyZShtaW5pbXVtU2NhbGUsIG1fcmF3QXR0cmlidXRlcy5taW5pbXVtU2NhbGUs
IDAuMDAxKSkgeworICAgICAgICBtX21pbmltdW1TY2FsZSA9IG1pbmltdW1TY2FsZTsKKworICAg
ICAgICBpZiAoIW1faGFkVXNlckludGVyYWN0aW9uICYmICFoYXNTdXNwZW5kZWRDb250ZW50KCkp
CisgICAgICAgICAgICBtX2NsaWVudC0+c2V0Q29udGVudHNTY2FsZShjb252ZXJ0VG9WaWV3cG9y
dChtaW5pbXVtU2NhbGUpLCB0cnVlIC8qIGlzSW5pdGlhbFNjYWxlICovKTsKKworICAgICAgICBt
X2NsaWVudC0+ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKCk7CisgICAgfQorCisgICAgbV9j
bGllbnQtPmRpZENoYW5nZUNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTdXNwZW5kZWRD
b250ZW50KCkpCisgICAgICAgIG1fY2xpZW50LT5zZXRDb250ZW50c1JlY3RUb05lYXJlc3RWYWxp
ZEJvdW5kcygpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlcjo6cGFnZURpZFJlcXVlc3RTY3Jv
bGwoY29uc3QgSW50UG9pbnQmIGNzc1Bvc2l0aW9uKQoreworICAgIC8vIElnbm9yZSB0aGUgcmVx
dWVzdCBpZiBzdXNwZW5kZWQuIENhbiBvbmx5IGhhcHBlbiBkdWUgdG8gZGVsYXkgaW4gZXZlbnQg
ZGVsaXZlcnkuCisgICAgaWYgKG1fc3VzcGVuZENvdW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBGbG9hdFJlY3QgZW5kUG9zUmFuZ2UgPSBwb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2NhbGUo
bV92aWV3cG9ydFNjYWxlKTsKKyAgICBGbG9hdFBvaW50IGVuZFBvc2l0aW9uKGNzc1Bvc2l0aW9u
KTsKKyAgICBlbmRQb3NpdGlvbi5zY2FsZShtX3ZpZXdwb3J0U2NhbGUsIG1fdmlld3BvcnRTY2Fs
ZSk7CisgICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLm1pblhNaW5Z
Q29ybmVyKCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5tYXhYTWF4WUNvcm5lcigpKTsKKwor
ICAgIG1fY2xpZW50LT5zZXRDb250ZW50c1Bvc2l0aW9uKGVuZFBvc2l0aW9uKTsKK30KKwordm9p
ZCBWaWV3cG9ydEhhbmRsZXI6OmFkanVzdFZpZXdwb3J0U2l6ZShjb25zdCBGbG9hdFNpemUmIG5l
d1NpemUpCit7CisgICAgaWYgKG5ld1NpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3ZpZXdwb3J0U2l6ZSA9IG5ld1NpemU7CisKKyAgICAvLyBMZXQgdGhlIFdlYlByb2Nl
c3Mga25vdyBhYm91dCB0aGUgbmV3IHZpZXdwb3J0IHNpemUsIHNvIHRoYXQKKyAgICAvLyBpdCBj
YW4gcmVzaXplIHRoZSBjb250ZW50IGFjY29yZGluZ2x5LgorICAgIG1fd2ViUGFnZVByb3h5LT5z
ZXRWaWV3cG9ydFNpemUocm91bmRlZEludFNpemUobmV3U2l6ZSkpOworCisgICAgc3luY1Zpc2li
bGVDb250ZW50cygpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlcjo6YWRqdXN0VmlzaWJsZUNv
bnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGZsb2F0IHZp
ZXdwb3J0U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAg
bV92aXNpYmxlQ29udGVudHNSZWN0ID0gdmlzaWJsZUNvbnRlbnRzUmVjdDsKKyAgICBtX3ZpZXdw
b3J0U2NhbGUgPSB2aWV3cG9ydFNjYWxlOworICAgIHN5bmNWaXNpYmxlQ29udGVudHModHJhamVj
dG9yeVZlY3Rvcik7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyOjpzeW5jVmlzaWJsZUNvbnRl
bnRzKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCit7CisgICAgRHJhd2luZ0Fy
ZWFQcm94eSogY29uc3QgZHJhd2luZ0FyZWEgPSBtX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEo
KTsKKyAgICBpZiAoIWRyYXdpbmdBcmVhIHx8IG1fdmlld3BvcnRTaXplLmlzRW1wdHkoKSB8fCBt
X2NvbnRlbnRzU2l6ZS5pc0VtcHR5KCkgfHwgbV92aXNpYmxlQ29udGVudHNSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZHJhd2luZ0FyZWEtPnNldFZpc2libGVDb250ZW50
c1JlY3QobV92aXNpYmxlQ29udGVudHNSZWN0LCBtX3ZpZXdwb3J0U2NhbGUsIHRyYWplY3RvcnlW
ZWN0b3IpOworCisgICAgbV9jbGllbnQtPmRpZENoYW5nZVZpc2libGVDb250ZW50cygpOworfQor
Cit2b2lkIFZpZXdwb3J0SGFuZGxlcjo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKGNvbnN0
IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKK3sKKyAgICBpZiAo
bmV3QXR0cmlidXRlcy5sYXlvdXRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9yYXdBdHRyaWJ1dGVzID0gbmV3QXR0cmlidXRlczsKKyAgICBXZWJDb3JlOjpyZXN0cmlj
dFNjYWxlRmFjdG9yVG9Jbml0aWFsU2NhbGVJZk5vdFVzZXJTY2FsYWJsZShtX3Jhd0F0dHJpYnV0
ZXMpOworCisgICAgbV9kZXZpY2VQaXhlbFJhdGlvID0gbV9yYXdBdHRyaWJ1dGVzLmRldmljZVBp
eGVsUmF0aW87IC8vIFNob3VsZCByZXR1cm4gdmFsdWUgZnJvbSB0aGUgd2ViUGFnZVByb3h5Lgor
ICAgIG1fYWxsb3dzVXNlclNjYWxpbmcgPSAhIW1fcmF3QXR0cmlidXRlcy51c2VyU2NhbGFibGU7
CisgICAgbV9taW5pbXVtU2NhbGUgPSBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlOworICAg
IG1fbWF4aW11bVNjYWxlID0gbV9yYXdBdHRyaWJ1dGVzLm1heGltdW1TY2FsZTsKKworICAgIG1f
Y2xpZW50LT5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoKTsKK30KKwordm9pZCBWaWV3cG9y
dEhhbmRsZXI6OnN1c3BlbmRDb250ZW50KCkKK3sKKyAgICBpZiAobV9oYXNTdXNwZW5kZWRDb250
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hhc1N1c3BlbmRlZENvbnRlbnQgPSB0cnVl
OworICAgIG1fd2ViUGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXI6OnJlc3VtZUNvbnRlbnQoKQoreworICAg
IGlmICghbV9yYXdBdHRyaWJ1dGVzLmxheW91dFNpemUuaXNFbXB0eSgpICYmIG1fcmF3QXR0cmli
dXRlcy5pbml0aWFsU2NhbGUgPiAwKSB7CisgICAgICAgIG1faGFkVXNlckludGVyYWN0aW9uID0g
ZmFsc2U7CisgICAgICAgIG1fY2xpZW50LT5zZXRDb250ZW50c1NjYWxlKGNvbnZlcnRUb1ZpZXdw
b3J0KGlubmVyQm91bmRlZENvbnRlbnRzU2NhbGUobV9yYXdBdHRyaWJ1dGVzLmluaXRpYWxTY2Fs
ZSkpLCAvKiBpc0luaXRpYWxTY2FsZSAqLyB0cnVlKTsKKyAgICAgICAgbV9yYXdBdHRyaWJ1dGVz
LmluaXRpYWxTY2FsZSA9IC0xOyAvLyBNYXJrIHVzZWQuCisgICAgfQorCisgICAgbV9jbGllbnQt
PnJlcXVlc3RWaWV3cG9ydFVwZGF0ZSgpOworCisgICAgaWYgKCFtX2hhc1N1c3BlbmRlZENvbnRl
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faGFzU3VzcGVuZGVkQ29udGVudCA9IGZhbHNl
OworICAgIG1fd2ViUGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpOworfQorCitGbG9hdFJlY3QgVmlld3BvcnRIYW5kbGVyOjpwb3NpdGlvblJhbmdlRm9yQ29u
dGVudEF0U2NhbGUoZmxvYXQgdmlld3BvcnRTY2FsZSkgY29uc3QKK3sKKyAgICBjb25zdCBGbG9h
dFNpemUgY29udGVudFNpemUgPSBtX2NvbnRlbnRzU2l6ZSAqIHZpZXdwb3J0U2NhbGU7CisKKyAg
ICBjb25zdCBmbG9hdCBob3Jpem9udGFsUmFuZ2UgPSBjb250ZW50U2l6ZS53aWR0aCgpIC0gbV92
aWV3cG9ydFNpemUud2lkdGgoKTsKKyAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbFJhbmdlID0gY29u
dGVudFNpemUuaGVpZ2h0KCkgLSBtX3ZpZXdwb3J0U2l6ZS5oZWlnaHQoKTsKKworICAgIHJldHVy
biBGbG9hdFJlY3QoMCwgMCwgaG9yaXpvbnRhbFJhbmdlLCB2ZXJ0aWNhbFJhbmdlKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvVmlld3BvcnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld3BvcnRI
YW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwNzdlNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9WaWV3cG9ydEhhbmRsZXIu
aApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBCZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1pbkB3ZWJraXQub3JnPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dy
YW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBWaWV3cG9ydEhhbmRsZXJfaAorI2RlZmluZSBWaWV3cG9ydEhhbmRsZXJfaAorCisjaW5jbHVk
ZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlld3Bv
cnRBcmd1bWVudHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50UG9pbnQ7Citj
bGFzcyBJbnRTaXplOworfQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK2NsYXNzIFZpZXdwb3J0SGFuZGxlcjsK
K2NsYXNzIFZpZXdwb3J0SGFuZGxlckNsaWVudDsKKworLy8gVVBEQVRFIERFRkVSUklORyAoU1VT
UEVORC9SRVNVTUUpCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisv
LyBXaGVuIGludGVyYWN0aW9uIHdpdGggdGhlIGNvbnRlbnQsIGVpdGhlciBieSBhbmltYXRpbmcg
b3IgYnkgdGhlIGhhbmQgb2YgdGhlIHVzZXIsCisvLyBpdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJl
IHNtb290aCBhbmltYXRpb25zIG9mIGF0IGxlYXN0IDYwZnBzIGluIG9yZGVyIHRvIGdpdmUgYQor
Ly8gZ29vZCB1c2VyIGV4cGVyaWVuY2UuCisvLworLy8gSW4gb3JkZXIgdG8gZG8gdGhpcyB3ZSBu
ZWVkIHRvIGdldCByaWQgb2YgdW5rbm93biBmYWN0b3JzLiBUaGVzZSBpbmNsdWRlIGRldmljZQor
Ly8gc2Vuc29ycyAoZ2VvbG9jYXRpb24sIG9yaWVudGF0aW9uIHVwZGF0ZXMgZXRjKSwgQ1NTMyBh
bmltYXRpb25zLCBKYXZhU2NyaXB0CisvLyBleGVjdHV0aW9uLCBzdWIgcmVzb3VyY2UgbG9hZHMg
ZXRjLiBXZSBkbyB0aGlzIGJ5IGVtaXR0aW5nIHN1c3BlbmQgYW5kIHJlc3VtZQorLy8gc2lnbmFs
cywgd2hpY2ggYXJlIHRoZW4gaGFuZGxlZCBieSB0aGUgdmlld3BvcnQgYW5kIHByb3BhZ2F0ZXMg
dG8gdGhlIHJpZ2h0IHBsYWNlLgorLy8KKy8vIEZvciB0aGlzIHJlYXNvbiB0aGUgVmlld3BvcnRV
cGRhdGVEZWZlcnJlciBndWFyZCBtdXN0IGJlIHVzZWQgd2hlbiB3ZSBpbnRlcmFjdAorLy8gb3Ig
YW5pbWF0ZSB0aGUgY29udGVudC4KKy8vCisvLyBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB3aGVu
IHdlIHVwZGF0ZSBjb250ZW50IHByb3BlcnRpZXMsIHdlIG1pZ2h0IHJlY2VpdmUgbm90aWZ5Cisv
LyBzaWduYWxzIHNlbmQgYnkgdGhlIHBhZ2UgaXRzZWxmLCBhbmQgY2FyZSBzaG91bGQgYmUgdGFr
ZW4gdG8gbm90IGFjdCBvbiB0aGVzZQorLy8gdW5jb25kaXRpb25hbGx5LgorLy8KKy8vIElmIHNv
bWV0aGluZyBzaG91bGQgb25seSBiZSBleGVjdXRlZCBkdXJpbmcgdXBkYXRlIGRlZmVycmluZywg
aXQgaXMgcG9zc2libGUgdG8KKy8vIGNoZWNrIGZvciB0aGF0IHVzaW5nIEFTU0VSVChoYXNTdXNw
ZW5kZWRDb250ZW50KCkpLgorCitjbGFzcyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIFN1c3BlbmRDb250ZW50RmxhZyB7IERlZmVyVXBkYXRlLCBEZWZlclVwZGF0
ZUFuZFN1c3BlbmRDb250ZW50IH07CisgICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlcihWaWV3cG9y
dEhhbmRsZXIqLCBTdXNwZW5kQ29udGVudEZsYWcgPSBEZWZlclVwZGF0ZSk7CisgICAgflZpZXdw
b3J0VXBkYXRlRGVmZXJyZXIoKTsKKworcHJpdmF0ZToKKyAgICBWaWV3cG9ydEhhbmRsZXIqIGNv
bnN0IGhhbmRsZXI7Cit9OworCitjbGFzcyBWaWV3cG9ydEhhbmRsZXIgeworcHVibGljOgorICAg
IFZpZXdwb3J0SGFuZGxlcihXZWJLaXQ6OldlYlBhZ2VQcm94eSosIFZpZXdwb3J0SGFuZGxlckNs
aWVudCopOworICAgIHZpcnR1YWwgflZpZXdwb3J0SGFuZGxlcigpIHsgfQorCisgICAgdm9pZCBz
dXNwZW5kQ29udGVudCgpOworICAgIHZvaWQgcmVzdW1lQ29udGVudCgpOworCisgICAgRmxvYXRS
ZWN0IHBvc2l0aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZShmbG9hdCB2aWV3cG9ydFNjYWxlKSBj
b25zdDsKKworICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9WaWV3cG9ydChjb25zdCBGbG9hdFJlY3Qm
KSBjb25zdDsKKyAgICBmbG9hdCBjb252ZXJ0RnJvbVZpZXdwb3J0KGZsb2F0KSBjb25zdDsKKyAg
ICBmbG9hdCBjb252ZXJ0VG9WaWV3cG9ydChmbG9hdCkgY29uc3Q7CisKKyAgICBmbG9hdCBpbm5l
ckJvdW5kZWRDb250ZW50c1NjYWxlKGZsb2F0KSBjb25zdDsKKyAgICBmbG9hdCBvdXRlckJvdW5k
ZWRDb250ZW50c1NjYWxlKGZsb2F0KSBjb25zdDsKKworICAgIGJvb2wgaGFzU3VzcGVuZGVkQ29u
dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VzcGVuZENvdW50IHx8IG1faGFzU3VzcGVuZGVkQ29u
dGVudDsgfQorICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9o
YWRVc2VySW50ZXJhY3Rpb247IH0KKyAgICBib29sIGFsbG93c1VzZXJTY2FsaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd3NVc2VyU2NhbGluZzsgfQorCisgICAgRmxvYXRTaXplIGNvbnRlbnRz
TGF5b3V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmF3QXR0cmlidXRlcy5sYXlvdXRTaXplOyB9
CisgICAgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbygpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlUGl4
ZWxSYXRpbzsgfQorICAgIGZsb2F0IG1pbmltdW1Db250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1
cm4gbV9taW5pbXVtU2NhbGU7IH0KKyAgICBmbG9hdCBtYXhpbXVtQ29udGVudHNTY2FsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4aW11bVNjYWxlOyB9CisKKyAgICB2b2lkIHNldEhhZFVzZXJJbnRl
cmFjdGlvbihib29sIGRpZFVzZXJJbnRlcmFjdCkgeyBtX2hhZFVzZXJJbnRlcmFjdGlvbiA9IGRp
ZFVzZXJJbnRlcmFjdDsgfQorCisgICAgLy8gTm90aWZpY2F0aW9ucyB0byB0aGUgV2ViUHJvY2Vz
cy4KKyAgICB2b2lkIGFkanVzdFZpZXdwb3J0U2l6ZShjb25zdCBGbG9hdFNpemUmIG5ld1NpemUp
OworICAgIHZvaWQgYWRqdXN0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZp
c2libGVDb250ZW50c1JlY3QsIGZsb2F0IHZpZXdwb3J0U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQm
IHRyYWplY3RvcnlWZWN0b3IgPSBGbG9hdFBvaW50Ojp6ZXJvKCkpOworCisgICAgLy8gTm90aWZp
Y2F0aW9ucyBmcm9tIHRoZSBXZWJQcm9jZXNzLgorICAgIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNT
aXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRB
dHRyaWJ1dGVzKGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYpOworICAgIHZvaWQgcGFnZURpZFJl
cXVlc3RTY3JvbGwoY29uc3QgSW50UG9pbnQmIGNzc1Bvc2l0aW9uKTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHN5bmNWaXNpYmxlQ29udGVudHMoY29uc3QgRmxvYXRQb2ludCAmdHJhamVjdG9yeVZl
Y3RvciA9IEZsb2F0UG9pbnQ6Onplcm8oKSk7CisKKyAgICBXZWJQYWdlUHJveHkqIGNvbnN0IG1f
d2ViUGFnZVByb3h5OworICAgIFZpZXdwb3J0SGFuZGxlckNsaWVudCogbV9jbGllbnQ7CisKKyAg
ICBWaWV3cG9ydEF0dHJpYnV0ZXMgbV9yYXdBdHRyaWJ1dGVzOworCisgICAgYm9vbCBtX2FsbG93
c1VzZXJTY2FsaW5nOworICAgIGZsb2F0IG1fbWluaW11bVNjYWxlOworICAgIGZsb2F0IG1fbWF4
aW11bVNjYWxlOworICAgIGZsb2F0IG1fZGV2aWNlUGl4ZWxSYXRpbzsKKworICAgIGludCBtX3N1
c3BlbmRDb3VudDsKKyAgICBib29sIG1faGFzU3VzcGVuZGVkQ29udGVudDsKKyAgICBib29sIG1f
aGFkVXNlckludGVyYWN0aW9uOworCisgICAgRmxvYXRTaXplIG1fdmlld3BvcnRTaXplOworICAg
IEZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVu
dHNSZWN0OworICAgIGZsb2F0IG1fdmlld3BvcnRTY2FsZTsgLy8gU2hvdWxkIGFsd2F5cyBiZSBj
c3NTY2FsZSAqIGRldmljZVBpeGVsUmF0aW8uCisKKyAgICBmcmllbmQgY2xhc3MgVmlld3BvcnRV
cGRhdGVEZWZlcnJlcjsKK307CisKK2Jvb2wgZnV6enlDb21wYXJlKGZsb2F0LCBmbG9hdCwgZmxv
YXQgZXBzaWxvbik7CitGbG9hdFBvaW50IGJvdW5kUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCBt
aW5Qb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IG1heFBvc2l0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBWaWV3
cG9ydEhhbmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdw
b3J0SGFuZGxlckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdwb3J0SGFu
ZGxlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NDJlOWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld3BvcnRIYW5k
bGVyQ2xpZW50LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IFZpZXdwb3J0SGFuZGxlckNsaWVudF9oCisjZGVmaW5lIFZpZXdwb3J0SGFuZGxlckNsaWVudF9o
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZsb2F0UG9pbnQ7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBWaWV3cG9ydEhhbmRsZXI7CisKK2NsYXNzIFZpZXdwb3J0SGFu
ZGxlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Vmlld3BvcnRIYW5kbGVyQ2xpZW50
KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNQb3NpdGlvbihjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbkluVmlld0Nvb3JkaW5hdGVzKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQgdmlld3BvcnRTY2FsZSwgYm9vbCBpc0lu
aXRpYWxTY2FsZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3RUb05lYXJl
c3RWYWxpZEJvdW5kcygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Vmlld3BvcnRV
cGRhdGUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaXNpYmxlQ29udGVudHMoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcygpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRWaWV3cG9ydEhhbmRsZXIoVmlld3BvcnRIYW5kbGVyKikgPSAwOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBWaWV3cG9ydEhhbmRsZXJD
bGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVy
ZVJlY29nbml6ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJl
Y29nbml6ZXIuY3BwCmluZGV4IDkzYjY0MTUuLmI1ZjYwNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAKQEAgLTQxLDcgKzQx
LDcgQEAgdm9pZCBRdEdlc3R1cmVSZWNvZ25pemVyOjpyZXNldCgpCiAgICAgbV9zdGF0ZSA9IE5v
R2VzdHVyZTsKIH0KIAotUXRWaWV3cG9ydEhhbmRsZXIqIFF0R2VzdHVyZVJlY29nbml6ZXI6OnZp
ZXdwb3J0SGFuZGxlcigpCitWaWV3cG9ydEhhbmRsZXJDbGllbnRRdCogUXRHZXN0dXJlUmVjb2du
aXplcjo6dmlld3BvcnRIYW5kbGVyKCkKIHsKICAgICByZXR1cm4gbV9ldmVudEhhbmRsZXItPnZp
ZXdwb3J0SGFuZGxlcigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dEdlc3R1cmVSZWNvZ25pemVyLmgKaW5kZXggNjhlMDMyZi4uY2M5Njc1NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oCkBAIC0yOCw3
ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBRdFZpZXdwb3J0SGFuZGxl
cjsKK2NsYXNzIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OwogY2xhc3MgUXRXZWJQYWdlRXZlbnRI
YW5kbGVyOwogCiBjbGFzcyBRdEdlc3R1cmVSZWNvZ25pemVyIHsKQEAgLTQ2LDcgKzQ2LDcgQEAg
cHJvdGVjdGVkOgogICAgICAgICBHZXN0dXJlUmVjb2duaXplZAogICAgIH0gbV9zdGF0ZTsKIAot
ICAgIFF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydEhhbmRsZXIoKTsKKyAgICBWaWV3cG9ydEhh
bmRsZXJDbGllbnRRdCAqdmlld3BvcnRIYW5kbGVyKCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1
cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1
cmVSZWNvZ25pemVyLmNwcAppbmRleCBiYTljOTBhLi5iNjQxMDEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwCkBA
IC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUXRQYW5HZXN0
dXJlUmVjb2duaXplci5oIgogCi0jaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKICNpbmNs
dWRlICJRdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEhhbmRsZXJD
bGllbnRRdC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcAppbmRleCA3
NWQ0ZDIzLi5kNWI4MWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcApAQCAtMjYsOCArMjYsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlF0UGluY2hHZXN0dXJlUmVjb2duaXplci5oIgog
Ci0jaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oIgogI2luY2x1
ZGUgPFF0Q29yZS9RTGluZUY+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDVjM2JmYWYuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc2MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmphbWluIFBv
dWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKLQotI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgot
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0j
aW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCi0jaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgi
Ci0jaW5jbHVkZSAicXdlYmtpdHRlc3RfcC5oIgotI2luY2x1ZGUgPFFQb2ludEY+Ci0jaW5jbHVk
ZSA8UVRyYW5zZm9ybT4KLSNpbmNsdWRlIDxRV2hlZWxFdmVudD4KLSNpbmNsdWRlIDxRdFF1aWNr
L3FxdWlja2l0ZW0uaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2Ug
V2ViS2l0IHsKLQotc3RhdGljIGNvbnN0IGludCBrU2NhbGVBbmltYXRpb25EdXJhdGlvbk1pbGxp
cyA9IDI1MDsKLQotLy8gVVBEQVRFIERFRkVSUklORyAoU1VTUEVORC9SRVNVTUUpCi0vLyA9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBXaGVuIGludGVyYWN0aW9uIHdp
dGggdGhlIGNvbnRlbnQsIGVpdGhlciBieSBhbmltYXRpbmcgb3IgYnkgdGhlIGhhbmQgb2YgdGhl
IHVzZXIsCi0vLyBpdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHNtb290aCBhbmltYXRpb25zIG9m
IGF0IGxlYXN0IDYwZnBzIGluIG9yZGVyIHRvIGdpdmUgYQotLy8gZ29vZCB1c2VyIGV4cGVyaWVu
Y2UuCi0vLwotLy8gSW4gb3JkZXIgdG8gZG8gdGhpcyB3ZSBuZWVkIHRvIGdldCByaWQgb2YgdW5r
bm93biBmYWN0b3JzLiBUaGVzZSBpbmNsdWRlIGRldmljZQotLy8gc2Vuc29ycyAoZ2VvbG9jYXRp
b24sIG9yaWVudGF0aW9uIHVwZGF0ZXMgZXRjKSwgQ1NTMyBhbmltYXRpb25zLCBKYXZhU2NyaXB0
Ci0vLyBleGVjdHV0aW9uLCBzdWIgcmVzb3VyY2UgbG9hZHMgZXRjLiBXZSBkbyB0aGlzIGJ5IGVt
aXR0aW5nIHN1c3BlbmQgYW5kIHJlc3VtZQotLy8gc2lnbmFscywgd2hpY2ggYXJlIHRoZW4gaGFu
ZGxlZCBieSB0aGUgdmlld3BvcnQgYW5kIHByb3BhZ2F0ZXMgdG8gdGhlIHJpZ2h0IHBsYWNlLgot
Ly8KLS8vIEZvciB0aGlzIHJlYXNvbiB0aGUgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCBt
dXN0IGJlIHVzZWQgd2hlbiB3ZSBpbnRlcmFjdAotLy8gb3IgYW5pbWF0ZSB0aGUgY29udGVudC4K
LS8vCi0vLyBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB3aGVuIHdlIHVwZGF0ZSBjb250ZW50IHBy
b3BlcnRpZXMsIHdlIG1pZ2h0IHJlY2VpdmUgbm90aWZ5Ci0vLyBzaWduYWxzIHNlbmQgbXkgdGhl
IGNvbnRlbnQgaXRlbSBpdHNlbGYsIGFuZCBjYXJlIHNob3VsZCBiZSB0YWtlbiB0byBub3QgYWN0
IG9uCi0vLyB0aGVzZSB1bmNvbmRpdGlvbmFsbHkuIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGUg
cGluY2ggem9vbSwgd2hpY2ggY2hhbmdlcyB0aGUKLS8vIHBvc2l0aW9uIGFuZCB3aWxsIHRodXMg
cmVzdWx0IGluIGEgUVF1aWNrV2ViUGFnZTo6Z2VvbWV0cnlDaGFuZ2VkKCkgc2lnbmFsIGdldHRp
bmcKLS8vIGVtaXR0ZWQuCi0vLwotLy8gSWYgc29tZXRoaW5nIHNob3VsZCBvbmx5IGJlIGV4ZWN1
dGVkIGR1cmluZyB1cGRhdGUgZGVmZXJyaW5nLCBpdCBpcyBwb3NzaWJsZSB0bwotLy8gY2hlY2sg
Zm9yIHRoYXQgdXNpbmcgQVNTRVJUKG1fc3VzcGVuZENvdW50KS4KLQotY2xhc3MgVmlld3BvcnRV
cGRhdGVEZWZlcnJlciB7Ci1wdWJsaWM6Ci0gICAgZW51bSBTdXNwZW5kQ29udGVudEZsYWcgeyBE
ZWZlclVwZGF0ZSwgRGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCB9OwotICAgIFZpZXdwb3J0
VXBkYXRlRGVmZXJyZXIoUXRWaWV3cG9ydEhhbmRsZXIqIGhhbmRsZXIsIFN1c3BlbmRDb250ZW50
RmxhZyBzdXNwZW5kQ29udGVudEZsYWcgPSBEZWZlclVwZGF0ZSkKLSAgICAgICAgOiBoYW5kbGVy
KGhhbmRsZXIpCi0gICAgewotICAgICAgICBoYW5kbGVyLT5tX3N1c3BlbmRDb3VudCsrOwotCi0g
ICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gc3VzcGVuZCBjb250ZW50IGZvciBpbW1lZGlh
dGUgdXBkYXRlcwotICAgICAgICAvLyBvbmx5IGR1cmluZyBhbmltYXRpb25zIG9yIGxvbmdlciBn
ZXN0dXJlcy4KLSAgICAgICAgaWYgKHN1c3BlbmRDb250ZW50RmxhZyA9PSBEZWZlclVwZGF0ZUFu
ZFN1c3BlbmRDb250ZW50KQotICAgICAgICAgICAgaGFuZGxlci0+c3VzcGVuZFBhZ2VDb250ZW50
KCk7Ci0gICAgfQotCi0gICAgflZpZXdwb3J0VXBkYXRlRGVmZXJyZXIoKQotICAgIHsKLSAgICAg
ICAgLy8gV2UgYXJlIGNhbGxpbmcgc2V0SW5pdGlhbFNjYWxlSWZOZWVkZWQoKSBoZXJlIGFzIGl0
IHJlcXVpcmVzIGEKLSAgICAgICAgLy8gcG9zc2l0aXZlIG1fc3VzcGVuZENvdW50IGR1ZSB0byB0
aGUgYXNzZXJ0IGluIHNldFBhZ2VJdGVtUmVjdFZpc2libGUoKS4KLSAgICAgICAgaWYgKGhhbmRs
ZXItPm1fc3VzcGVuZENvdW50ID09IDEpCi0gICAgICAgICAgICBoYW5kbGVyLT5zZXRJbml0aWFs
U2NhbGVJZk5lZWRlZCgpOwotCi0gICAgICAgIGlmICgtLShoYW5kbGVyLT5tX3N1c3BlbmRDb3Vu
dCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaGFuZGxlci0+cmVzdW1lUGFnZUNv
bnRlbnQoKTsKLQotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRo
ZSB2aWV3cG9ydCB3aWxsIGJlIHJlcXVlc3RlZC4KLSAgICAgICAgaGFuZGxlci0+aW5mb3JtVmlz
aWJsZUNvbnRlbnRDaGFuZ2UoUVBvaW50RigpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUXRW
aWV3cG9ydEhhbmRsZXIqIGNvbnN0IGhhbmRsZXI7Ci19OwotCi12b2lkIFF0Vmlld3BvcnRIYW5k
bGVyOjpzdXNwZW5kUGFnZUNvbnRlbnQoKQotewotICAgIGlmIChtX2hhc1N1c3BlbmRlZENvbnRl
bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFzU3VzcGVuZGVkQ29udGVudCA9IHRydWU7
Ci0gICAgbV93ZWJQYWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpyZXN1bWVQYWdlQ29udGVudCgpCi17
Ci0gICAgaWYgKCFtX2hhc1N1c3BlbmRlZENvbnRlbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2hhc1N1c3BlbmRlZENvbnRlbnQgPSBmYWxzZTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+cmVzdW1l
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLX0KLQotLy8gQSBmbG9hdGluZyBwb2lu
dCBjb21wYXJlIHdpdGggYWJzb2x1dGUgZXJyb3IuCi1zdGF0aWMgaW5saW5lIGJvb2wgZnV6enlD
b21wYXJlKHFyZWFsIGEsIHFyZWFsIGIsIHFyZWFsIGVwc2lsb24pCi17Ci0gICAgcmV0dXJuIHFB
YnMoYSAtIGIpIDwgZXBzaWxvbjsKLX0KLQotaW5saW5lIHFyZWFsIFF0Vmlld3BvcnRIYW5kbGVy
Ojpjc3NTY2FsZUZyb21JdGVtKHFyZWFsIGl0ZW1TY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4g
aXRlbVNjYWxlIC8gbV9kZXZpY2VQaXhlbFJhdGlvOwotfQotCi1pbmxpbmUgcXJlYWwgUXRWaWV3
cG9ydEhhbmRsZXI6Oml0ZW1TY2FsZUZyb21DU1MocXJlYWwgY3NzU2NhbGUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGNzc1NjYWxlICogbV9kZXZpY2VQaXhlbFJhdGlvOwotfQotCi1pbmxpbmUgcXJl
YWwgUXRWaWV3cG9ydEhhbmRsZXI6Oml0ZW1Db29yZEZyb21DU1MocXJlYWwgdmFsdWUpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHZhbHVlICogbV9kZXZpY2VQaXhlbFJhdGlvOwotfQotCi1zdGF0aWMg
aW5saW5lIFFQb2ludEYgYm91bmRQb3NpdGlvbihjb25zdCBRUG9pbnRGIG1pblBvc2l0aW9uLCBj
b25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgY29uc3QgUVBvaW50RiYgbWF4UG9zaXRpb24pCi17Ci0g
ICAgcmV0dXJuIFFQb2ludEYocUJvdW5kKG1pblBvc2l0aW9uLngoKSwgcG9zaXRpb24ueCgpLCBt
YXhQb3NpdGlvbi54KCkpLAotICAgICAgICAgICAgICAgICAgIHFCb3VuZChtaW5Qb3NpdGlvbi55
KCksIHBvc2l0aW9uLnkoKSwgbWF4UG9zaXRpb24ueSgpKSk7Ci19Ci0KLWlubGluZSBRUmVjdEYg
UXRWaWV3cG9ydEhhbmRsZXI6Oml0ZW1SZWN0RnJvbUNTUyhjb25zdCBRUmVjdEYmIGNzc1JlY3Qp
IGNvbnN0Ci17Ci0gICAgUVJlY3RGIGl0ZW1SZWN0OwotCi0gICAgaXRlbVJlY3Quc2V0WChpdGVt
Q29vcmRGcm9tQ1NTKGNzc1JlY3QueCgpKSk7Ci0gICAgaXRlbVJlY3Quc2V0WShpdGVtQ29vcmRG
cm9tQ1NTKGNzc1JlY3QueSgpKSk7Ci0gICAgaXRlbVJlY3Quc2V0V2lkdGgoaXRlbUNvb3JkRnJv
bUNTUyhjc3NSZWN0LndpZHRoKCkpKTsKLSAgICBpdGVtUmVjdC5zZXRIZWlnaHQoaXRlbUNvb3Jk
RnJvbUNTUyhjc3NSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICByZXR1cm4gaXRlbVJlY3Q7Ci19Ci0K
LVF0Vmlld3BvcnRIYW5kbGVyOjpRdFZpZXdwb3J0SGFuZGxlcihXZWJLaXQ6OldlYlBhZ2VQcm94
eSogcHJveHksIFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0SXRlbSwgUVF1aWNrV2ViUGFnZSogcGFn
ZUl0ZW0pCi0gICAgOiBtX3dlYlBhZ2VQcm94eShwcm94eSkKLSAgICAsIG1fdmlld3BvcnRJdGVt
KHZpZXdwb3J0SXRlbSkKLSAgICAsIG1fcGFnZUl0ZW0ocGFnZUl0ZW0pCi0gICAgLCBtX2FsbG93
c1VzZXJTY2FsaW5nKGZhbHNlKQotICAgICwgbV9taW5pbXVtU2NhbGUoMSkKLSAgICAsIG1fbWF4
aW11bVNjYWxlKDEpCi0gICAgLCBtX2RldmljZVBpeGVsUmF0aW8oMSkKLSAgICAsIG1fc3VzcGVu
ZENvdW50KDApCi0gICAgLCBtX2hhc1N1c3BlbmRlZENvbnRlbnQoZmFsc2UpCi0gICAgLCBtX2hh
ZFVzZXJJbnRlcmFjdGlvbihmYWxzZSkKLSAgICAsIG1fc2NhbGVBbmltYXRpb24obmV3IFNjYWxl
QW5pbWF0aW9uKHRoaXMpKQotICAgICwgbV9waW5jaFN0YXJ0U2NhbGUoLTEpCi0gICAgLCBtX2xh
c3RDb21taXR0ZWRTY2FsZSgtMSkKLSAgICAsIG1fem9vbU91dFNjYWxlKDAuMCkKLXsKLSAgICBt
X3NjYWxlQW5pbWF0aW9uLT5zZXREdXJhdGlvbihrU2NhbGVBbmltYXRpb25EdXJhdGlvbk1pbGxp
cyk7Ci0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0RWFzaW5nQ3VydmUoUUVhc2luZ0N1cnZlOjpP
dXRDdWJpYyk7Ci0KLSAgICAvLyBJbml0aWFsaXppbmcgVmlld3BvcnQgUmF3IEF0dHJpYnV0ZXMg
dG8gYXZvaWQgcmFuZG9tIG5lZ2F0aXZlIHNjYWxlIGZhY3RvcnMKLSAgICAvLyBpZiB0aGVyZSBp
cyBhIHJhY2UgY29uZGl0aW9uIGJldHdlZW4gdGhlIGZpcnN0IGxheW91dCBhbmQgc2V0dGluZyB0
aGUgdmlld3BvcnQgYXR0cmlidXRlcyBmb3IgdGhlIGZpcnN0IHRpbWUuCi0gICAgbV9yYXdBdHRy
aWJ1dGVzLmRldmljZVBpeGVsUmF0aW8gPSBtX2RldmljZVBpeGVsUmF0aW87Ci0gICAgbV9yYXdB
dHRyaWJ1dGVzLmluaXRpYWxTY2FsZSA9IDE7Ci0gICAgbV9yYXdBdHRyaWJ1dGVzLm1pbmltdW1T
Y2FsZSA9IG1fbWluaW11bVNjYWxlOwotICAgIG1fcmF3QXR0cmlidXRlcy5tYXhpbXVtU2NhbGUg
PSBtX21heGltdW1TY2FsZTsKLSAgICBtX3Jhd0F0dHJpYnV0ZXMudXNlclNjYWxhYmxlID0gbV9h
bGxvd3NVc2VyU2NhbGluZzsKLQotICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTCht
b3ZlbWVudFN0YXJ0ZWQoKSksIFNMT1QoZmxpY2tNb3ZlU3RhcnRlZCgpKSwgUXQ6OkRpcmVjdENv
bm5lY3Rpb24pOwotICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChtb3ZlbWVudEVu
ZGVkKCkpLCBTTE9UKGZsaWNrTW92ZUVuZGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci0K
LSAgICBjb25uZWN0KG1fc2NhbGVBbmltYXRpb24sIFNJR05BTCh2YWx1ZUNoYW5nZWQoUVZhcmlh
bnQpKSwKLSAgICAgICAgICAgIFNMT1Qoc2NhbGVBbmltYXRpb25WYWx1ZUNoYW5nZWQoUVZhcmlh
bnQpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotICAgIGNvbm5lY3QobV9zY2FsZUFuaW1hdGlv
biwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJh
Y3RBbmltYXRpb246OlN0YXRlKSksCi0gICAgICAgICAgICBTTE9UKHNjYWxlQW5pbWF0aW9uU3Rh
dGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6
U3RhdGUpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotfQotCi1RdFZpZXdwb3J0SGFuZGxlcjo6
flF0Vmlld3BvcnRIYW5kbGVyKCkKLXsKLX0KLQotcXJlYWwgUXRWaWV3cG9ydEhhbmRsZXI6Omlu
bmVyQm91bmRlZENTU1NjYWxlKHFyZWFsIGNzc1NjYWxlKSBjb25zdAotewotICAgIHJldHVybiBx
Qm91bmQobV9taW5pbXVtU2NhbGUsIGNzc1NjYWxlLCBtX21heGltdW1TY2FsZSk7Ci19Ci0KLXFy
ZWFsIFF0Vmlld3BvcnRIYW5kbGVyOjpvdXRlckJvdW5kZWRDU1NTY2FsZShxcmVhbCBjc3NTY2Fs
ZSkgY29uc3QKLXsKLSAgICBpZiAobV9hbGxvd3NVc2VyU2NhbGluZykgewotICAgICAgICAvLyBC
b3VuZGVkIGJ5IFswLjEsIDEwLjBdIGxpa2UgdGhlIHZpZXdwb3J0IG1ldGEgY29kZSBpbiBXZWJD
b3JlLgotICAgICAgICBxcmVhbCBoYXJkTWluID0gcU1heDxxcmVhbD4oMC4xLCBxcmVhbCgwLjUp
ICogbV9taW5pbXVtU2NhbGUpOwotICAgICAgICBxcmVhbCBoYXJkTWF4ID0gcU1pbjxxcmVhbD4o
MTAsIHFyZWFsKDIuMCkgKiBtX21heGltdW1TY2FsZSk7Ci0gICAgICAgIHJldHVybiBxQm91bmQo
aGFyZE1pbiwgY3NzU2NhbGUsIGhhcmRNYXgpOwotICAgIH0KLSAgICByZXR1cm4gaW5uZXJCb3Vu
ZGVkQ1NTU2NhbGUoY3NzU2NhbGUpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzZXRJ
bml0aWFsU2NhbGVJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fcmF3QXR0cmlidXRlcy5sYXlvdXRT
aXplLmlzRW1wdHkoKSB8fCBtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlIDwgMCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV96b29tT3V0U2NhbGUgPSAwLjA7Ci0gICAgbV9zY2FsZVN0YWNr
LmNsZWFyKCk7Ci0KLSAgICBtX2hhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOwotCi0gICAgLy8g
V2UgbXVzdCBub3QgYW5pbWF0ZSBoZXJlIGFzIHRoZSBuZXcgY29udGVudHMgc2l6ZSBtaWdodCBi
ZSB2ZXJ5IGRpZmZlcmVudAotICAgIC8vIHRoYW4gdGhlIGN1cnJlbnQgb25lLgotICAgIHNldFBh
Z2VJdGVtUmVjdFZpc2libGUoaW5pdGlhbFJlY3QoKSk7Ci0KLSAgICBtX3Jhd0F0dHJpYnV0ZXMu
aW5pdGlhbFNjYWxlID0gLTE7IC8vIE1hcmsgdXNlZC4KLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFu
ZGxlcjo6dmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0
dHJpYnV0ZXMmIG5ld0F0dHJpYnV0ZXMpCi17Ci0gICAgaWYgKG5ld0F0dHJpYnV0ZXMubGF5b3V0
U2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcmF3QXR0cmlidXRlcyA9
IG5ld0F0dHJpYnV0ZXM7Ci0gICAgV2ViQ29yZTo6cmVzdHJpY3RTY2FsZUZhY3RvclRvSW5pdGlh
bFNjYWxlSWZOb3RVc2VyU2NhbGFibGUobV9yYXdBdHRyaWJ1dGVzKTsKLQotICAgIGlmICghcUZ1
enp5Q29tcGFyZShtX2RldmljZVBpeGVsUmF0aW8sIHN0YXRpY19jYXN0PHFyZWFsPihtX3Jhd0F0
dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbykpKSB7Ci0gICAgICAgIG1fZGV2aWNlUGl4ZWxSYXRp
byA9IG1fcmF3QXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvOyAvLyBTaG91bGQgcmV0dXJuIHZh
bHVlIGZyb20gdGhlIHdlYlBhZ2VQcm94eS4KLSAgICAgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+
ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+ZGV2aWNlUGl4ZWxSYXRpb0NoYW5nZWQoKTsKLSAgICB9
Ci0KLSAgICBtX2FsbG93c1VzZXJTY2FsaW5nID0gISFtX3Jhd0F0dHJpYnV0ZXMudXNlclNjYWxh
YmxlOwotICAgIG1fbWluaW11bVNjYWxlID0gbV9yYXdBdHRyaWJ1dGVzLm1pbmltdW1TY2FsZTsK
LSAgICBtX21heGltdW1TY2FsZSA9IG1fcmF3QXR0cmlidXRlcy5tYXhpbXVtU2NhbGU7Ci0KLSAg
ICAvLyBNYWtlIHN1cmUgd2UgYXBwbHkgdGhlIG5ldyBpbml0aWFsIHNjYWxlIHdoZW4gZGVmZXJy
aW5nIGVuZHMuCi0gICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKLQotICAg
IGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPnZpZXdwb3J0Q2hh
bmdlZCgpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwYWdlQ29udGVudHNTaXplQ2hh
bmdlZChjb25zdCBRU2l6ZSYgbmV3U2l6ZSwgY29uc3QgUVNpemUmIHZpZXdwb3J0U2l6ZSkKLXsK
LSAgICBpZiAodmlld3BvcnRTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ZmxvYXQgbWluaW11bVNjYWxlID0gV2ViQ29yZTo6Y29tcHV0ZU1pbmltdW1TY2FsZUZhY3RvckZv
ckNvbnRlbnRDb250YWluZWQobV9yYXdBdHRyaWJ1dGVzLCB2aWV3cG9ydFNpemUsIG5ld1NpemUp
OwotCi0gICAgaWYgKCFxRnV6enlDb21wYXJlKG1pbmltdW1TY2FsZSwgbV9yYXdBdHRyaWJ1dGVz
Lm1pbmltdW1TY2FsZSkpIHsKLSAgICAgICAgbV9taW5pbXVtU2NhbGUgPSBtaW5pbXVtU2NhbGU7
Ci0gICAgICAgIGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPnZp
ZXdwb3J0Q2hhbmdlZCgpOwotCi0gICAgICAgIGlmICghbV9oYWRVc2VySW50ZXJhY3Rpb24gJiYg
IW1faGFzU3VzcGVuZGVkQ29udGVudCkgewotICAgICAgICAgICAgLy8gRW1pdHMgY29udGVudHNT
Y2FsZUNoYW5nZWQoKTsKLSAgICAgICAgICAgIHNldENTU1NjYWxlKG1pbmltdW1TY2FsZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBFbWl0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCBzbyB0
aGF0IGl0IGNhbiBiZSB2ZXJpZmllZCB0aGF0Ci0gICAgLy8gd2UgZGlkbid0IGRvIHNjYWxlIGFk
anVzdG1lbnQuCi0gICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3Qo
KS0+Y29udGVudHNTY2FsZUNvbW1pdHRlZCgpOwotCi0gICAgaWYgKCFtX2hhc1N1c3BlbmRlZENv
bnRlbnQpIHsKLSAgICAgICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKLSAg
ICAgICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShuZWFyZXN0VmFsaWRCb3VuZHMoKSk7Ci0gICAg
fQotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKGNv
bnN0IFFSZWN0RiYgaXRlbVJlY3QpCi17Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3N1c3Bl
bmRDb3VudCwKLSAgICAgICAgInNldFBhZ2VJdGVtUmVjdFZpc2libGUgaGFzIHRvIGJlIGd1YXJk
ZWQgdXNpbmcgYSBWaWV3cG9ydFVwZGF0ZURlZmVycmVyLiIpOwotCi0gICAgaWYgKGl0ZW1SZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcXJlYWwgaXRlbVNjYWxlID0gbV92
aWV3cG9ydEl0ZW0tPndpZHRoKCkgLyBpdGVtUmVjdC53aWR0aCgpOwotCi0gICAgbV9wYWdlSXRl
bS0+c2V0Q29udGVudHNTY2FsZShpdGVtU2NhbGUpOwotCi0gICAgLy8gVG8gYW5pbWF0ZSB0aGUg
cG9zaXRpb24gdG9nZXRoZXIgd2l0aCB0aGUgc2NhbGUgd2UgbXVsdGlwbHkgdGhlIHBvc2l0aW9u
IHdpdGggdGhlIGN1cnJlbnQgc2NhbGUKLSAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBwYWdlIHBv
c2l0aW9uIChkaXNwbGFjZW1lbnQgb24gdGhlIGZsaWNrYWJsZSBjb250ZW50SXRlbSBiZWNhdXNl
IG9mIGFkZGl0aW9uYWwgaXRlbXMpLgotICAgIFFQb2ludEYgbmV3UG9zaXRpb24obV9wYWdlSXRl
bS0+cG9zKCkgKyAoaXRlbVJlY3QudG9wTGVmdCgpICogaXRlbVNjYWxlKSk7Ci0KLSAgICBtX3Zp
ZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyhuZXdQb3NpdGlvbik7Ci19Ci0KLXZvaWQgUXRWaWV3
cG9ydEhhbmRsZXI6OmFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgaXRl
bVJlY3QpCi17Ci0gICAgQVNTRVJUKG1fc2NhbGVBbmltYXRpb24tPnN0YXRlKCkgPT0gUUFic3Ry
YWN0QW5pbWF0aW9uOjpTdG9wcGVkKTsKLQotICAgIEFTU0VSVCghc2Nyb2xsQW5pbWF0aW9uQWN0
aXZlKCkpOwotICAgIGlmIChzY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUVJlY3RGIGN1cnJlbnRQYWdlSXRlbVJlY3RWaXNpYmxlID0gbV92aWV3cG9ydEl0
ZW0tPm1hcFJlY3RUb1dlYkNvbnRlbnQobV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpKTsK
LSAgICBpZiAoaXRlbVJlY3QgPT0gY3VycmVudFBhZ2VJdGVtUmVjdFZpc2libGUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc2NhbGVBbmltYXRpb24tPnNldFN0YXJ0VmFsdWUoY3VycmVudFBh
Z2VJdGVtUmVjdFZpc2libGUpOwotICAgIG1fc2NhbGVBbmltYXRpb24tPnNldEVuZFZhbHVlKGl0
ZW1SZWN0KTsKLQotICAgIG1fc2NhbGVBbmltYXRpb24tPnN0YXJ0KCk7Ci19Ci0KLXZvaWQgUXRW
aWV3cG9ydEhhbmRsZXI6OmZsaWNrTW92ZVN0YXJ0ZWQoKQotewotICAgIFFfQVNTRVJUKG1fdmll
d3BvcnRJdGVtLT5pc01vdmluZygpKTsKLSAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyID0gYWRv
cHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3BvcnRVcGRhdGVEZWZl
cnJlcjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOwotCi0gICAgbV9sYXN0U2Nyb2xs
UG9zaXRpb24gPSBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpOwotICAgIGNvbm5lY3QobV92
aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIFNMT1QocGFnZUl0ZW1Qb3Np
dGlvbkNoYW5nZWQoKSkpOwotICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250
ZW50WUNoYW5nZWQoKSksIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOwotfQotCi12
b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpmbGlja01vdmVFbmRlZCgpCi17Ci0gICAgUV9BU1NFUlQo
IW1fdmlld3BvcnRJdGVtLT5pc01vdmluZygpKTsKLSAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxs
ZWQgb24gdGhlIGVuZCBvZiB0aGUgcGFuIG9yIHBhbiBraW5ldGljIGFuaW1hdGlvbi4KLSAgICBt
X3Njcm9sbFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci0KLSAgICBtX2xhc3RTY3JvbGxQb3NpdGlv
biA9IFFQb2ludEYoKTsKLSAgICBkaXNjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwoY29u
dGVudFhDaGFuZ2VkKCkpLCB0aGlzLCBTTE9UKHBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkpKTsK
LSAgICBkaXNjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkp
LCB0aGlzLCBTTE9UKHBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkpKTsKLX0KLQotdm9pZCBRdFZp
ZXdwb3J0SGFuZGxlcjo6cGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKQotewotICAgIFFQb2ludEYg
bmV3UG9zaXRpb24gPSBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpOwotCi0gICAgaW5mb3Jt
VmlzaWJsZUNvbnRlbnRDaGFuZ2UobV9sYXN0U2Nyb2xsUG9zaXRpb24gLSBuZXdQb3NpdGlvbik7
Ci0KLSAgICBtX2xhc3RTY3JvbGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOwotfQotCi12b2lkIFF0
Vmlld3BvcnRIYW5kbGVyOjpwYWdlQ29udGVudFBvc2l0aW9uUmVxdWVzdGVkKGNvbnN0IFFQb2lu
dCYgY3NzUG9zaXRpb24pCi17Ci0gICAgLy8gSWdub3JlIHRoZSByZXF1ZXN0IGlmIHN1c3BlbmRl
ZC4gQ2FuIG9ubHkgaGFwcGVuIGR1ZSB0byBkZWxheSBpbiBldmVudCBkZWxpdmVyeS4KLSAgICBp
ZiAobV9zdXNwZW5kQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHFyZWFsIGVuZEl0ZW1T
Y2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsgLy8gU3RheSBhdCBzYW1lIHNjYWxl
LgotCi0gICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1B
dFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0gICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGJvdW5kUG9z
aXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBjc3NQb3NpdGlvbiAqIGVuZEl0ZW1TY2FsZSwg
ZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7Ci0KLSAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRl
bnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRp
bmdSZWN0KCkuc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKLQotICAgIFZpZXdwb3J0VXBkYXRlRGVm
ZXJyZXIgZ3VhcmQodGhpcyk7Ci0gICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShlbmRWaXNpYmxl
Q29udGVudFJlY3QpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUFuaW1hdGlv
blN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJh
Y3RBbmltYXRpb246OlN0YXRlIC8qb2xkU3RhdGUqLykKLXsKLSAgICBzd2l0Y2ggKG5ld1N0YXRl
KSB7Ci0gICAgY2FzZSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc6Ci0gICAgICAgIG1fdmll
d3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOwotICAgICAgICBBU1NFUlQoIW1fYW5pbWF0aW9uVXBk
YXRlRGVmZXJyZXIpOwotICAgICAgICBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyID0gYWRvcHRQ
dHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3BvcnRVcGRhdGVEZWZlcnJl
cjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RvcHBlZDoKLSAgICAgICAgbV9hbmltYXRpb25VcGRh
dGVEZWZlcnJlci5jbGVhcigpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNjYWxlQW5pbWF0
aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50IHZhbHVlKQotewotICAgIC8vIFJlc2V0dGluZyB0aGUg
ZW5kIHZhbHVlLCB0aGUgZWFzaW5nIGN1cnZlIG9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgc2NhbGUg
YW5pbWF0aW9uCi0gICAgLy8gdHJpZ2dlcnMgYSByZWNhbGN1bGF0aW9uIG9mIHRoZSBhbmltYXRp
b24gaW50ZXJ2YWwuIFRoaXMgbWlnaHQgY2hhbmdlIHRoZSBjdXJyZW50Ci0gICAgLy8gdmFsdWUg
b2YgdGhlIGFuaW1hdGVkIHByb3BlcnR5LgotICAgIC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IGFjdCBv
biBhbmltYXRpb24gdmFsdWUgY2hhbmdlcyBpZiB0aGUgYW5pbWF0aW9uIGlzIGFjdGl2ZS4KLSAg
ICBpZiAoIXNjYWxlQW5pbWF0aW9uQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNl
dFBhZ2VJdGVtUmVjdFZpc2libGUodmFsdWUudG9SZWN0RigpKTsKLX0KLQotdm9pZCBRdFZpZXdw
b3J0SGFuZGxlcjo6dG91Y2hCZWdpbigpCi17Ci0gICAgbV9oYWRVc2VySW50ZXJhY3Rpb24gPSB0
cnVlOwotCi0gICAgLy8gUHJldmVudHMgcmVzdW1pbmcgdGhlIHBhZ2UgYmV0d2VlbiB0aGUgdXNl
cidzIGZsaWNrcyBvZiB0aGUgcGFnZSB3aGlsZSB0aGUgYW5pbWF0aW9uIGlzIHJ1bm5pbmcuCi0g
ICAgaWYgKHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQotICAgICAgICBtX3RvdWNoVXBkYXRlRGVm
ZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9y
dFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Ci19Ci0KLXZv
aWQgUXRWaWV3cG9ydEhhbmRsZXI6OnRvdWNoRW5kKCkKLXsKLSAgICBtX3RvdWNoVXBkYXRlRGVm
ZXJyZXIuY2xlYXIoKTsKLX0KLQotUVJlY3RGIFF0Vmlld3BvcnRIYW5kbGVyOjpjb21wdXRlUG9z
UmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUocXJlYWwgaXRlbVNjYWxlKSBjb25zdAotewotICAgIGNv
bnN0IFFTaXplRiBjb250ZW50SXRlbVNpemUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NpemUoKSAq
IGl0ZW1TY2FsZTsKLSAgICBjb25zdCBRU2l6ZUYgdmlld3BvcnRJdGVtU2l6ZSA9IG1fdmlld3Bv
cnRJdGVtLT5ib3VuZGluZ1JlY3QoKS5zaXplKCk7Ci0KLSAgICBjb25zdCBxcmVhbCBob3Jpem9u
dGFsUmFuZ2UgPSBjb250ZW50SXRlbVNpemUud2lkdGgoKSAtIHZpZXdwb3J0SXRlbVNpemUud2lk
dGgoKTsKLSAgICBjb25zdCBxcmVhbCB2ZXJ0aWNhbFJhbmdlID0gY29udGVudEl0ZW1TaXplLmhl
aWdodCgpIC0gdmlld3BvcnRJdGVtU2l6ZS5oZWlnaHQoKTsKLQotICAgIHJldHVybiBRUmVjdEYo
UVBvaW50RigwLCAwKSwgUVNpemVGKGhvcml6b250YWxSYW5nZSwgdmVydGljYWxSYW5nZSkpOwot
fQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpmb2N1c0VkaXRhYmxlQXJlYShjb25zdCBRUmVj
dEYmIGNhcmV0QXJlYSwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKQotewotICAgIC8vIFRoaXMg
Y2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KLSAgICBB
U1NFUlQobV9oYWRVc2VySW50ZXJhY3Rpb24pOwotCi0gICAgUVJlY3RGIGVuZEFyZWEgPSBpdGVt
UmVjdEZyb21DU1ModGFyZ2V0QXJlYSk7Ci0KLSAgICBxcmVhbCBlbmRJdGVtU2NhbGUgPSBpdGVt
U2NhbGVGcm9tQ1NTKGlubmVyQm91bmRlZENTU1NjYWxlKDIuMCkpOwotICAgIGNvbnN0IFFSZWN0
RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCk7Ci0KLSAgICBx
cmVhbCB4OwotICAgIGNvbnN0IHFyZWFsIGJvcmRlck9mZnNldCA9IDEwOwotICAgIGlmICgoZW5k
QXJlYS53aWR0aCgpICsgYm9yZGVyT2Zmc2V0KSAqIGVuZEl0ZW1TY2FsZSA8PSB2aWV3cG9ydFJl
Y3Qud2lkdGgoKSkgewotICAgICAgICAvLyBDZW50ZXIgdGhlIGlucHV0IGZpZWxkIGluIHRoZSBt
aWRkbGUgb2YgdGhlIHZpZXcsIGlmIGl0IGlzIHNtYWxsZXIgdGhhbgotICAgICAgICAvLyB0aGUg
dmlldyBhdCB0aGUgc2NhbGUgdGFyZ2V0LgotICAgICAgICB4ID0gdmlld3BvcnRSZWN0LmNlbnRl
cigpLngoKSAtIGVuZEFyZWEud2lkdGgoKSAqIGVuZEl0ZW1TY2FsZSAvIDIuMDsKLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgY2FyZXQgYWx3YXlzIGhhcyBib3JkZXJP
ZmZzZXQgY29udGVudHMgcGl4ZWxzIHRvIHRoZSByaWdodAotICAgICAgICAvLyBvZiBpdCwgYW5k
IHNlY29uZGFyaWx5IChpZiBwb3NzaWJsZSksIHRoYXQgdGhlIGFyZWEgaGFzIGJvcmRlck9mZnNl
dAotICAgICAgICAvLyBjb250ZW50cyBwaXhlbHMgdG8gdGhlIGxlZnQgb2YgaXQuCi0gICAgICAg
IHFyZWFsIGNhcmV0T2Zmc2V0ID0gaXRlbUNvb3JkRnJvbUNTUyhjYXJldEFyZWEueCgpKSAtIGVu
ZEFyZWEueCgpOwotICAgICAgICB4ID0gcU1pbih2aWV3cG9ydFJlY3Qud2lkdGgoKSAtIChjYXJl
dE9mZnNldCArIGJvcmRlck9mZnNldCkgKiBlbmRJdGVtU2NhbGUsIGJvcmRlck9mZnNldCAqIGVu
ZEl0ZW1TY2FsZSk7Ci0gICAgfQotCi0gICAgY29uc3QgUVBvaW50RiBob3RzcG90ID0gUVBvaW50
RihlbmRBcmVhLngoKSwgZW5kQXJlYS5jZW50ZXIoKS55KCkpOwotICAgIGNvbnN0IFFQb2ludEYg
dmlld3BvcnRIb3RzcG90ID0gUVBvaW50Rih4LCAvKiBGSVhNRTogdmlzaWJsZUNlbnRlciAqLyB2
aWV3cG9ydFJlY3QuY2VudGVyKCkueSgpKTsKLQotICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBo
b3RzcG90ICogZW5kSXRlbVNjYWxlIC0gdmlld3BvcnRIb3RzcG90OwotICAgIFFSZWN0RiBlbmRQ
b3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShlbmRJdGVtU2NhbGUp
OwotCi0gICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQo
KSwgZW5kUG9zaXRpb24sIGVuZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpOwotCi0gICAgUVJlY3RG
IGVuZFZpc2libGVDb250ZW50UmVjdChlbmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3Bv
cnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2FsZSk7Ci0KLSAgICBhbmltYXRlUGFnZUl0ZW1SZWN0
VmlzaWJsZShlbmRWaXNpYmxlQ29udGVudFJlY3QpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5k
bGVyOjp6b29tVG9BcmVhR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHRvdWNoUG9pbnQsIGNv
bnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSkKLXsKLSAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBh
cyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCi0gICAgQVNTRVJUKG1faGFkVXNlcklu
dGVyYWN0aW9uKTsKLQotICAgIGlmICghdGFyZ2V0QXJlYS5pc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX3N1c3BlbmRDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y29uc3QgaW50IG1hcmdpbiA9IDEwOyAvLyBXZSB3YW50IGF0IGxlYXN0IGEgbGl0dGxlIGJpdCBv
ZiBtYXJnaW4uCi0gICAgUVJlY3RGIGVuZEFyZWEgPSBpdGVtUmVjdEZyb21DU1ModGFyZ2V0QXJl
YS5hZGp1c3RlZCgtbWFyZ2luLCAtbWFyZ2luLCBtYXJnaW4sIG1hcmdpbikpOwotCi0gICAgY29u
c3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsK
LQotICAgIHFyZWFsIHRhcmdldENTU1NjYWxlID0gdmlld3BvcnRSZWN0LnNpemUoKS53aWR0aCgp
IC8gZW5kQXJlYS5zaXplKCkud2lkdGgoKTsKLSAgICBxcmVhbCBlbmRDU1NTY2FsZSA9IGlubmVy
Qm91bmRlZENTU1NjYWxlKHFNaW4odGFyZ2V0Q1NTU2NhbGUsIHFyZWFsKDIuNSkpKTsKLSAgICBx
cmVhbCBlbmRJdGVtU2NhbGUgPSBpdGVtU2NhbGVGcm9tQ1NTKGVuZENTU1NjYWxlKTsKLSAgICBx
cmVhbCBjdXJyZW50U2NhbGUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7Ci0KLSAgICAv
LyBXZSB3YW50IHRvIGVuZCB1cCB3aXRoIHRoZSB0YXJnZXQgYXJlYSBmaWxsaW5nIHRoZSB3aG9s
ZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQgKGlmIHBvc3NpYmxlKSwKLSAgICAvLyBhbmQgY2VudHJh
bGl6ZWQgdmVydGljYWxseSB3aGVyZSB0aGUgdXNlciByZXF1ZXN0ZWQgem9vbS4gVGh1cyBvdXIg
aG90c3BvdCBpcyB0aGUgY2VudGVyIG9mCi0gICAgLy8gdGhlIHRhcmdldEFyZWEgeC13aXNlIGFu
ZCB0aGUgcmVxdWVzdGVkIHpvb20gcG9zaXRpb24sIHktd2lzZS4KLSAgICBjb25zdCBRUG9pbnRG
IGhvdHNwb3QgPSBRUG9pbnRGKGVuZEFyZWEuY2VudGVyKCkueCgpLCBpdGVtQ29vcmRGcm9tQ1NT
KHRvdWNoUG9pbnQueSgpKSk7Ci0gICAgY29uc3QgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSB2
aWV3cG9ydFJlY3QuY2VudGVyKCk7Ci0KLSAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gaG90c3Bv
dCAqIGVuZENTU1NjYWxlIC0gdmlld3BvcnRIb3RzcG90OwotCi0gICAgUVJlY3RGIGVuZFBvc1Jh
bmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0g
ICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgZW5k
UG9zaXRpb24sIGVuZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpOwotCi0gICAgUVJlY3RGIGVuZFZp
c2libGVDb250ZW50UmVjdChlbmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0
LnNpemUoKSAvIGVuZEl0ZW1TY2FsZSk7Ci0KLSAgICBlbnVtIHsgWm9vbUluLCBab29tQmFjaywg
Wm9vbU91dCwgTm9ab29tIH0gem9vbUFjdGlvbiA9IFpvb21JbjsKLQotICAgIGlmICghbV9zY2Fs
ZVN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBab29tIGJhY2sgb3V0IGlmIGF0dGVtcHRp
bmcgdG8gc2NhbGUgdG8gdGhlIHNhbWUgY3VycmVudCBzY2FsZSwgb3IKLSAgICAgICAgLy8gYXR0
ZW1wdGluZyB0byBjb250aW51ZSBzY2FsaW5nIG91dCBmcm9tIHRoZSBpbm5lciBtb3N0IGxldmVs
LgotICAgICAgICAvLyBVc2UgZnV6enkgY29tcGFyZSB3aXRoIGEgZml4ZWQgZXJyb3IgdG8gYmUg
YWJsZSB0byBkZWFsIHdpdGggbGFyZ2lzaCBkaWZmZXJlbmNlcyBkdWUgdG8gcGl4ZWwgcm91bmRp
bmcuCi0gICAgICAgIGlmIChmdXp6eUNvbXBhcmUoZW5kSXRlbVNjYWxlLCBjdXJyZW50U2NhbGUs
IDAuMDEpKSB7Ci0gICAgICAgICAgICAvLyBJZiBtb3ZpbmcgdGhlIHZpZXdwb3J0IHdvdWxkIGV4
cG9zZSBtb3JlIG9mIHRoZSB0YXJnZXRSZWN0IGFuZCBtb3ZlIGF0IGxlYXN0IDQwIHBpeGVscywg
dXBkYXRlIHBvc2l0aW9uIGJ1dCBkbyBub3Qgc2NhbGUgb3V0LgotICAgICAgICAgICAgUVJlY3RG
IGN1cnJlbnRDb250ZW50UmVjdChtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpIC8gY3VycmVu
dFNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gY3VycmVudFNjYWxlKTsKLSAgICAgICAgICAg
IFFSZWN0RiB0YXJnZXRJbnRlcnNlY3Rpb24gPSBlbmRWaXNpYmxlQ29udGVudFJlY3QuaW50ZXJz
ZWN0ZWQodGFyZ2V0QXJlYSk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb250ZW50UmVjdC5j
b250YWlucyh0YXJnZXRJbnRlcnNlY3Rpb24pICYmIChxQWJzKGVuZFZpc2libGVDb250ZW50UmVj
dC50b3AoKSAtIGN1cnJlbnRDb250ZW50UmVjdC50b3AoKSkgPj0gNDAgfHwgcUFicyhlbmRWaXNp
YmxlQ29udGVudFJlY3QubGVmdCgpIC0gY3VycmVudENvbnRlbnRSZWN0LmxlZnQoKSkgPj0gNDAp
KQotICAgICAgICAgICAgICAgIHpvb21BY3Rpb24gPSBOb1pvb207Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21CYWNrOwotICAgICAgICB9IGVsc2Ug
aWYgKGZ1enp5Q29tcGFyZShlbmRJdGVtU2NhbGUsIG1fem9vbU91dFNjYWxlLCAwLjAxKSkKLSAg
ICAgICAgICAgIHpvb21BY3Rpb24gPSBab29tQmFjazsKLSAgICAgICAgZWxzZSBpZiAoZW5kSXRl
bVNjYWxlIDwgY3VycmVudFNjYWxlKQotICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21PdXQ7
Ci0gICAgfQotCi0gICAgc3dpdGNoICh6b29tQWN0aW9uKSB7Ci0gICAgY2FzZSBab29tSW46Ci0g
ICAgICAgIG1fc2NhbGVTdGFjay5hcHBlbmQoU2NhbGVTdGFja0l0ZW0oY3VycmVudFNjYWxlLCBt
X3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpLngoKSkpOwotICAgICAgICBtX3pvb21PdXRTY2Fs
ZSA9IGVuZEl0ZW1TY2FsZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBab29tQmFjazogewot
ICAgICAgICBTY2FsZVN0YWNrSXRlbSBsYXN0U2NhbGUgPSBtX3NjYWxlU3RhY2sudGFrZUxhc3Qo
KTsKLSAgICAgICAgZW5kSXRlbVNjYWxlID0gbGFzdFNjYWxlLnNjYWxlOwotICAgICAgICBlbmRD
U1NTY2FsZSA9IGNzc1NjYWxlRnJvbUl0ZW0obGFzdFNjYWxlLnNjYWxlKTsKLSAgICAgICAgLy8g
UmVjYWxjdWxhdGUgZW5kUG9zaXRpb24gYW5kIGJvdW5kIGl0IGFjY29yZGluZyB0byBuZXcgc2Nh
bGUuCi0gICAgICAgIGVuZFBvc2l0aW9uLnNldFkoaG90c3BvdC55KCkgKiBlbmRDU1NTY2FsZSAt
IHZpZXdwb3J0SG90c3BvdC55KCkpOwotICAgICAgICBlbmRQb3NpdGlvbi5zZXRYKGxhc3RTY2Fs
ZS54UG9zaXRpb24pOwotICAgICAgICBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvclBh
Z2VJdGVtQXRTY2FsZShlbmRJdGVtU2NhbGUpOwotICAgICAgICBlbmRQb3NpdGlvbiA9IGJvdW5k
UG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2Uu
Ym90dG9tUmlnaHQoKSk7Ci0gICAgICAgIGVuZFZpc2libGVDb250ZW50UmVjdCA9IFFSZWN0Rihl
bmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1T
Y2FsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFpvb21PdXQ6Ci0gICAgICAg
IC8vIFVuc3RhY2sgYWxsIHNjYWxlLWxldmVscyBkZWVwZXIgdGhhbiB0aGUgbmV3IGxldmVsLCBz
byBhIHpvb20tYmFjayB3b24ndCBlbmQgdXAgem9vbWluZyBpbi4KLSAgICAgICAgd2hpbGUgKCFt
X3NjYWxlU3RhY2suaXNFbXB0eSgpICYmIG1fc2NhbGVTdGFjay5sYXN0KCkuc2NhbGUgPj0gZW5k
SXRlbVNjYWxlKQotICAgICAgICAgICAgbV9zY2FsZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICAg
ICAgbV96b29tT3V0U2NhbGUgPSBlbmRJdGVtU2NhbGU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgTm9ab29tOgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBhbmltYXRlUGFnZUl0ZW1S
ZWN0VmlzaWJsZShlbmRWaXNpYmxlQ29udGVudFJlY3QpOwotfQotCi1RUmVjdEYgUXRWaWV3cG9y
dEhhbmRsZXI6OmluaXRpYWxSZWN0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9yYXdBdHRyaWJ1
dGVzLmluaXRpYWxTY2FsZSA+IDApOwotCi0gICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gaXRlbVNj
YWxlRnJvbUNTUyhpbm5lckJvdW5kZWRDU1NTY2FsZShtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNj
YWxlKSk7Ci0gICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5i
b3VuZGluZ1JlY3QoKTsKLSAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KFFQb2ludEYo
MCwgMCksIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOwotCi0gICAgcmV0dXJu
IGVuZFZpc2libGVDb250ZW50UmVjdDsKLX0KLQotUVJlY3RGIFF0Vmlld3BvcnRIYW5kbGVyOjpu
ZWFyZXN0VmFsaWRCb3VuZHMoKSBjb25zdAotewotICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IGl0
ZW1TY2FsZUZyb21DU1MoaW5uZXJCb3VuZGVkQ1NTU2NhbGUoY3VycmVudENTU1NjYWxlKCkpKTsK
LQotICAgIGNvbnN0IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRp
bmdSZWN0KCk7Ci0gICAgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSB2aWV3cG9ydFJlY3QuY2Vu
dGVyKCk7Ci0KLSAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gbV92aWV3cG9ydEl0ZW0tPm1hcFRv
V2ViQ29udGVudCh2aWV3cG9ydEhvdHNwb3QpICogZW5kSXRlbVNjYWxlIC0gdmlld3BvcnRIb3Rz
cG90OwotCi0gICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0
ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0gICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9u
KGVuZFBvc1JhbmdlLnRvcExlZnQoKSwgZW5kUG9zaXRpb24sIGVuZFBvc1JhbmdlLmJvdHRvbVJp
Z2h0KCkpOwotCi0gICAgUVJlY3RGIGVuZFZpc2libGVDb250ZW50UmVjdChlbmRQb3NpdGlvbiAv
IGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2FsZSk7Ci0KLSAg
ICByZXR1cm4gZW5kVmlzaWJsZUNvbnRlbnRSZWN0OwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5k
bGVyOjpzZXRDU1NTY2FsZShxcmVhbCBzY2FsZSkKLXsKLSAgICBWaWV3cG9ydFVwZGF0ZURlZmVy
cmVyIGd1YXJkKHRoaXMpOwotCi0gICAgcXJlYWwgbmV3U2NhbGUgPSBpbm5lckJvdW5kZWRDU1NT
Y2FsZShzY2FsZSk7Ci0gICAgbV9wYWdlSXRlbS0+c2V0Q29udGVudHNTY2FsZShpdGVtU2NhbGVG
cm9tQ1NTKG5ld1NjYWxlKSk7Ci19Ci0KLXFyZWFsIFF0Vmlld3BvcnRIYW5kbGVyOjpjdXJyZW50
Q1NTU2NhbGUoKSBjb25zdAotewotICAgIHJldHVybiBjc3NTY2FsZUZyb21JdGVtKG1fcGFnZUl0
ZW0tPmNvbnRlbnRzU2NhbGUoKSk7Ci19Ci0KLWJvb2wgUXRWaWV3cG9ydEhhbmRsZXI6OnNjcm9s
bEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlld3BvcnRJdGVtLT5p
c0ZsaWNraW5nKCk7Ci19Ci0KLWJvb2wgUXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVBY3Rp
dmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3ZpZXdwb3J0SXRlbS0+aXNEcmFnZ2luZygpOwot
fQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9p
bnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQotewotICAgIC8vIFRo
aXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KLSAg
ICBBU1NFUlQobV9oYWRVc2VySW50ZXJhY3Rpb24pOwotCi0gICAgbV92aWV3cG9ydEl0ZW0tPmhh
bmRsZUZsaWNrYWJsZU1vdXNlUHJlc3MocG9zaXRpb24sIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsK
LSAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBvc2l0aW9uOwot
fQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25z
dCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQotewotICAg
IG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2FibGVNb3VzZU1vdmUocG9zaXRpb24sIGV2ZW50
VGltZXN0YW1wTWlsbGlzKTsKLSAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGlu
YXRlcyA9IHBvc2l0aW9uOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJl
RW5kZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxp
cykKLXsKLSAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxpY2thYmxlTW91c2VSZWxlYXNlKHBv
c2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7Ci0gICAgbV9sYXN0UGluY2hDZW50ZXJJblZp
ZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxl
cjo6cGFuR2VzdHVyZUNhbmNlbGxlZCgpCi17Ci0gICAgLy8gUmVzZXQgdGhlIHZlbG9jaXR5IHNh
bXBsZXMgb2YgdGhlIGZsaWNrYWJsZS4KLSAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBieSB0aGUgcmVjb2duaXplciBpZiB3ZSBoYXZlIGEgcmVjb2duaXplZAotICAgIC8vIHBhbiBn
ZXN0dXJlIGFuZCByZWNlaXZlIGEgdG91Y2ggZXZlbnQgd2l0aCBtdWx0aXBsZSB0b3VjaCBwb2lu
dHMKLSAgICAvLyAoaWUuIHRyYW5zaXRpb24gdG8gYSBwaW5jaCBnZXN0dXJlKSBhcyBpdCBkb2Vz
IG5vdCBtb3ZlIHRoZSBjb250ZW50Ci0gICAgLy8gYmFjayBpbnNpZGUgdmFsaWQgYm91bmRzLgot
ICAgIC8vIFdoZW4gdGhlIHBpbmNoIGdlc3R1cmUgZW5kcywgdGhlIGNvbnRlbnQgaXMgcG9zaXRp
b25lZCBhbmQgc2NhbGVkCi0gICAgLy8gYmFjayB0byB2YWxpZCBib3VuZGFyaWVzLgotICAgIG1f
dmlld3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOwotfQotCi1ib29sIFF0Vmlld3BvcnRIYW5kbGVy
OjpzY2FsZUFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2NhbGVBbmlt
YXRpb24tPnN0YXRlKCkgPT0gUUFic3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nOwotfQotCi12b2lk
IFF0Vmlld3BvcnRIYW5kbGVyOjpjYW5jZWxTY3JvbGxBbmltYXRpb24oKQotewotICAgIGlmICgh
c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRo
ZSBwYW4gZ2VzdHVyZSByZWNvZ25pemVyIHJlY2VpdmVzIGEgdG91Y2ggYmVnaW4gZXZlbnQKLSAg
ICAvLyBkdXJpbmcgYW4gb25nb2luZyBraW5ldGljIHNjcm9sbCBhbmltYXRpb24gb2YgYSBwcmV2
aW91cwotICAgIC8vIHBhbiBnZXN0dXJlLCB0aGUgYW5pbWF0aW9uIGlzIHN0b3BwZWQgYW5kIHRo
ZSBjb250ZW50IGlzCi0gICAgLy8gaW1tZWRpYXRlbHkgcG9zaXRpb25lZCBiYWNrIHRvIHZhbGlk
IGJvdW5kYXJpZXMuCi0KLSAgICBtX3ZpZXdwb3J0SXRlbS0+Y2FuY2VsRmxpY2soKTsKLSAgICBW
aWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKHRoaXMpOwotICAgIHNldFBhZ2VJdGVtUmVjdFZp
c2libGUobmVhcmVzdFZhbGlkQm91bmRzKCkpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVy
OjppbnRlcnJ1cHRTY2FsZUFuaW1hdGlvbigpCi17Ci0gICAgLy8gVGhpcyBpbnRlcnJ1cHRzIHRo
ZSBzY2FsZSBhbmltYXRpb24gZXhhY3RseSB3aGVyZSBpdCBpcywgZXZlbiBpZiBpdCBpcyBvdXQg
b2YgYm91bmRzLgotICAgIG1fc2NhbGVBbmltYXRpb24tPnN0b3AoKTsKLX0KLQotYm9vbCBRdFZp
ZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9waW5jaFN0YXJ0U2NhbGUgPiAwOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwaW5j
aEdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzKQotewotICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEg
dXNlciBpbnRlcmFjdGlvbi4KLSAgICBBU1NFUlQobV9oYWRVc2VySW50ZXJhY3Rpb24pOwotCi0g
ICAgaWYgKCFtX2FsbG93c1VzZXJTY2FsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nj
YWxlU3RhY2suY2xlYXIoKTsKLSAgICBtX3pvb21PdXRTY2FsZSA9IDAuMDsKLQotICAgIG1fc2Nh
bGVVcGRhdGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKHRo
aXMsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQp
KTsKLQotICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcGluY2hD
ZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7Ci0gICAgbV9waW5jaFN0YXJ0U2NhbGUgPSBtX3Bh
Z2VJdGVtLT5jb250ZW50c1NjYWxlKCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBp
bmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdw
b3J0Q29vcmRpbmF0ZXMsIHFyZWFsIHRvdGFsU2NhbGVGYWN0b3IpCi17Ci0gICAgQVNTRVJUKG1f
c3VzcGVuZENvdW50KTsKLQotICAgIGlmICghbV9hbGxvd3NVc2VyU2NhbGluZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gIENoYW5nZXMgb2YgdGhlIGNlbnRlciBwb3NpdGlvbiBzaG91bGQg
bW92ZSB0aGUgcGFnZSBldmVuIGlmIHRoZSB6b29tIGZhY3RvcgotICAgIC8vICBkb2VzIG5vdCBj
aGFuZ2UuCi0gICAgY29uc3QgcXJlYWwgY3NzU2NhbGUgPSBjc3NTY2FsZUZyb21JdGVtKG1fcGlu
Y2hTdGFydFNjYWxlICogdG90YWxTY2FsZUZhY3Rvcik7Ci0KLSAgICAvLyBBbGxvdyB6b29taW5n
IG91dCBiZXlvbmQgbWltaW11bSBzY2FsZSBvbiBwYWdlcyB0aGF0IGRvIG5vdCBleHBsaWNpdGx5
IGRpc2FsbG93IGl0LgotICAgIGNvbnN0IHFyZWFsIHRhcmdldENTU1NjYWxlID0gb3V0ZXJCb3Vu
ZGVkQ1NTU2NhbGUoY3NzU2NhbGUpOwotCi0gICAgc2NhbGVDb250ZW50KG1fdmlld3BvcnRJdGVt
LT5tYXBUb1dlYkNvbnRlbnQocGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpLCB0YXJn
ZXRDU1NTY2FsZSk7Ci0KLSAgICBjb25zdCBRUG9pbnRGIHBvc2l0aW9uRGlmZiA9IHBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzIC0gbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29v
cmRpbmF0ZXM7Ci0gICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBw
aW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKLQotICAgIG1fdmlld3BvcnRJdGVtLT5z
ZXRDb250ZW50UG9zKG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkgLSBwb3NpdGlvbkRpZmYp
OwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwaW5jaEdlc3R1cmVFbmRlZCgpCi17Ci0g
ICAgQVNTRVJUKG1fc3VzcGVuZENvdW50KTsKLQotICAgIGlmICghbV9hbGxvd3NVc2VyU2NhbGlu
ZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9waW5jaFN0YXJ0U2NhbGUgPSAtMTsKLQotICAg
IGFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKG5lYXJlc3RWYWxpZEJvdW5kcygpKTsKLSAgICBt
X3NjYWxlVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsgLy8gQ2xlYXIgYWZ0ZXIgc3RhcnRpbmcgcG90
ZW50aWFsIGFuaW1hdGlvbiwgd2hpY2ggdGFrZXMgb3ZlciBkZWZlcnJpbmcuCi19Ci0KLXZvaWQg
UXRWaWV3cG9ydEhhbmRsZXI6OnBpbmNoR2VzdHVyZUNhbmNlbGxlZCgpCi17Ci0gICAgbV9waW5j
aFN0YXJ0U2NhbGUgPSAtMTsKLSAgICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKLX0K
LQotUVJlY3RGIFF0Vmlld3BvcnRIYW5kbGVyOjp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QK
LXsKLSAgICBjb25zdCBRUmVjdEYgdmlzaWJsZVJlY3QobV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5n
UmVjdCgpLmludGVyc2VjdGVkKG1fcGFnZUl0ZW0tPmJvdW5kaW5nUmVjdCgpKSk7Ci0gICAgcmV0
dXJuIG1fdmlld3BvcnRJdGVtLT5tYXBSZWN0VG9XZWJDb250ZW50KHZpc2libGVSZWN0KTsKLX0K
LQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6aW5mb3JtVmlzaWJsZUNvbnRlbnRDaGFuZ2UoY29u
c3QgUVBvaW50RiYgdHJhamVjdG9yeVZlY3RvcikKLXsKLSAgICBEcmF3aW5nQXJlYVByb3h5KiBk
cmF3aW5nQXJlYSA9IG1fd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwotICAgIGlmICghZHJh
d2luZ0FyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIHFyZWFsIHNjYWxlID0gbV9wYWdlSXRl
bS0+Y29udGVudHNTY2FsZSgpOwotCi0gICAgaWYgKHNjYWxlICE9IG1fbGFzdENvbW1pdHRlZFNj
YWxlKQotICAgICAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgp
LT5jb250ZW50c1NjYWxlQ29tbWl0dGVkKCk7Ci0gICAgbV9sYXN0Q29tbWl0dGVkU2NhbGUgPSBz
Y2FsZTsKLQotICAgIGRyYXdpbmdBcmVhLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KHZpc2libGVD
b250ZW50c1JlY3QoKSwgc2NhbGUsIHRyYWplY3RvcnlWZWN0b3IpOwotCi0gICAgLy8gRW5zdXJl
IHRoYXQgdXBkYXRlUGFpbnROb2RlIGlzIGFsd2F5cyBjYWxsZWQgYmVmb3JlIHBhaW50aW5nLgot
ICAgIG1fcGFnZUl0ZW0tPnVwZGF0ZSgpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjp2
aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpCi17Ci0gICAgUVNpemUgdmlld3BvcnRTaXplID0gbV92
aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1NpemUoKTsKLQotICAgIGlmICh2
aWV3cG9ydFNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBMZXQgdGhl
IFdlYlByb2Nlc3Mga25vdyBhYm91dCB0aGUgbmV3IHZpZXdwb3J0IHNpemUsIHNvIHRoYXQKLSAg
ICAvLyBpdCBjYW4gcmVzaXplIHRoZSBjb250ZW50IGFjY29yZGluZ2x5LgotICAgIG1fd2ViUGFn
ZVByb3h5LT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRTaXplKTsKLQotICAgIGluZm9ybVZpc2li
bGVDb250ZW50Q2hhbmdlKFFQb2ludEYoKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6
OnNjYWxlQ29udGVudChjb25zdCBRUG9pbnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzLCBxcmVh
bCBjc3NTY2FsZSkKLXsKLSAgICBRUG9pbnRGIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9ydCA9IG1f
dmlld3BvcnRJdGVtLT5tYXBGcm9tV2ViQ29udGVudChjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzKTsK
LSAgICBtX3BhZ2VJdGVtLT5zZXRDb250ZW50c1NjYWxlKGl0ZW1TY2FsZUZyb21DU1MoY3NzU2Nh
bGUpKTsKLSAgICBRUG9pbnRGIG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCA9IG1fdmlld3BvcnRJ
dGVtLT5tYXBGcm9tV2ViQ29udGVudChjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzKTsKLQotICAgIG1f
dmlld3BvcnRJdGVtLT5zZXRDb250ZW50UG9zKG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkg
KyAobmV3UGluY2hDZW50ZXJPblZpZXdwb3J0IC0gb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0KSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jaW5jbHVkZSAibW9jX1F0Vmlld3BvcnRI
YW5kbGVyLmNwcCIKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRWaWV3cG9ydEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdw
b3J0SGFuZGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjM3ZmU5Li4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQmVuamFtaW4gUG91bGFpbiA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0K
LSNpZm5kZWYgUXRWaWV3cG9ydEhhbmRsZXJfaAotI2RlZmluZSBRdFZpZXdwb3J0SGFuZGxlcl9o
Ci0KLSNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KLSNpbmNsdWRlIDxRdENvcmUvUVJlY3RGPgot
I2luY2x1ZGUgPFF0Q29yZS9RVmFyaWFudD4KLSNpbmNsdWRlIDxRdENvcmUvUVZhcmlhbnRBbmlt
YXRpb24+Ci0jaW5jbHVkZSA8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KLQotUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRUG9pbnRGOwotY2xh
c3MgUVdoZWVsRXZlbnQ7Ci1RVF9FTkRfTkFNRVNQQUNFCi0KLWNsYXNzIFFRdWlja1dlYlBhZ2U7
Ci1jbGFzcyBRUXVpY2tXZWJWaWV3OwotCi1jbGFzcyBRV2ViS2l0VGVzdDsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLWNsYXNzIFdlYlBhZ2VQcm94eTsKLWNsYXNzIFZpZXdwb3J0VXBkYXRlRGVm
ZXJyZXI7Ci0KLWNsYXNzIFF0Vmlld3BvcnRIYW5kbGVyIDogcHVibGljIFFPYmplY3QgewotICAg
IFFfT0JKRUNUCi0KLXB1YmxpYzoKLSAgICBRdFZpZXdwb3J0SGFuZGxlcihXZWJQYWdlUHJveHkq
LCBRUXVpY2tXZWJWaWV3KiwgUVF1aWNrV2ViUGFnZSopOwotICAgIH5RdFZpZXdwb3J0SGFuZGxl
cigpOwotCi0gICAgdm9pZCB0b3VjaEJlZ2luKCk7Ci0gICAgdm9pZCB0b3VjaEVuZCgpOwotCi0g
ICAgYm9vbCBzY3JvbGxBbmltYXRpb25BY3RpdmUoKSBjb25zdDsKLSAgICB2b2lkIGNhbmNlbFNj
cm9sbEFuaW1hdGlvbigpOwotCi0gICAgYm9vbCBwYW5HZXN0dXJlQWN0aXZlKCkgY29uc3Q7Ci0g
ICAgdm9pZCBwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0
IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAgICB2b2lkIHBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRl
KGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwot
ICAgIHZvaWQgcGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQg
ZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIHZvaWQgcGFuR2VzdHVyZUNhbmNlbGxlZCgpOwot
Ci0gICAgYm9vbCBzY2FsZUFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgaW50ZXJy
dXB0U2NhbGVBbmltYXRpb24oKTsKLQotICAgIGJvb2wgcGluY2hHZXN0dXJlQWN0aXZlKCkgY29u
c3Q7Ci0gICAgdm9pZCBwaW5jaEdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzKTsKLSAgICB2b2lkIHBpbmNoR2VzdHVyZVJlcXVlc3RV
cGRhdGUoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMsIHFy
ZWFsIHRvdGFsU2NhbGVGYWN0b3IpOwotICAgIHZvaWQgcGluY2hHZXN0dXJlRW5kZWQoKTsKLSAg
ICB2b2lkIHBpbmNoR2VzdHVyZUNhbmNlbGxlZCgpOwotCi0gICAgdm9pZCB6b29tVG9BcmVhR2Vz
dHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHRvdWNoUG9pbnQsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0
QXJlYSk7Ci0gICAgdm9pZCBmb2N1c0VkaXRhYmxlQXJlYShjb25zdCBRUmVjdEYmIGNhcmV0QXJl
YSwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKTsKLQotICAgIHZvaWQgcGFnZUNvbnRlbnRQb3Np
dGlvblJlcXVlc3RlZChjb25zdCBRUG9pbnQmIHBvc2l0aW9uKTsKLQotICAgIHZvaWQgdmlld3Bv
cnRJdGVtU2l6ZUNoYW5nZWQoKTsKLSAgICB2b2lkIHZpZXdwb3J0QXR0cmlidXRlc0NoYW5nZWQo
Y29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7Ci0gICAgdm9pZCBpbmZvcm1WaXNp
YmxlQ29udGVudENoYW5nZShjb25zdCBRUG9pbnRGJiB0cmFqZWN0b3J5ID0gUVBvaW50RigpKTsK
LSAgICB2b2lkIHBhZ2VDb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFFTaXplJiBuZXdTaXplLCBj
b25zdCBRU2l6ZSYgdmlld3BvcnRTaXplKTsKLQotcHJpdmF0ZSBRX1NMT1RTOgotICAgIC8vIFJl
c3BvbmQgdG8gY2hhbmdlcyBvZiBwb3NpdGlvbiB0aGF0IGFyZSBub3QgZHJpdmVuIGJ5IHVzLgot
ICAgIHZvaWQgcGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKTsKLQotICAgIHZvaWQgc2NhbGVBbmlt
YXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5p
bWF0aW9uOjpTdGF0ZSk7Ci0gICAgdm9pZCBzY2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdlZChRVmFy
aWFudCB2YWx1ZSk7Ci0KLSAgICB2b2lkIGZsaWNrTW92ZVN0YXJ0ZWQoKTsgLy8gQ2FsbGVkIHdo
ZW4gcGFubmluZyBzdGFydHMuCi0gICAgdm9pZCBmbGlja01vdmVFbmRlZCgpOyAvLyAgIENhbGxl
ZCB3aGVuIHBhbm5pbmcgKCsga2luZXRpYyBhbmltYXRpb24pIGVuZHMuCi0KLXByaXZhdGU6Ci0g
ICAgZnJpZW5kIGNsYXNzIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI7Ci0gICAgZnJpZW5kIGNsYXNz
IDo6UVdlYktpdFRlc3Q7Ci0KLSAgICBXZWJQYWdlUHJveHkqIGNvbnN0IG1fd2ViUGFnZVByb3h5
OwotICAgIFFRdWlja1dlYlZpZXcqIGNvbnN0IG1fdmlld3BvcnRJdGVtOwotICAgIFFRdWlja1dl
YlBhZ2UqIGNvbnN0IG1fcGFnZUl0ZW07Ci0KLSAgICBxcmVhbCBjc3NTY2FsZUZyb21JdGVtKHFy
ZWFsKSBjb25zdDsKLSAgICBxcmVhbCBpdGVtU2NhbGVGcm9tQ1NTKHFyZWFsKSBjb25zdDsKLSAg
ICBxcmVhbCBpdGVtQ29vcmRGcm9tQ1NTKHFyZWFsKSBjb25zdDsKLSAgICBRUmVjdEYgaXRlbVJl
Y3RGcm9tQ1NTKGNvbnN0IFFSZWN0RiYpIGNvbnN0OwotCi0gICAgcXJlYWwgaW5uZXJCb3VuZGVk
Q1NTU2NhbGUocXJlYWwpIGNvbnN0OwotICAgIHFyZWFsIG91dGVyQm91bmRlZENTU1NjYWxlKHFy
ZWFsKSBjb25zdDsKLQotICAgIHZvaWQgc2V0SW5pdGlhbFNjYWxlSWZOZWVkZWQoKTsKLQotICAg
IHZvaWQgc2V0Q1NTU2NhbGUocXJlYWwpOwotICAgIHFyZWFsIGN1cnJlbnRDU1NTY2FsZSgpIGNv
bnN0OwotCi0gICAgdm9pZCBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYpOwot
ICAgIHZvaWQgYW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJik7Ci0KLSAg
ICBRUmVjdEYgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIFFSZWN0RiBpbml0aWFs
UmVjdCgpIGNvbnN0OwotICAgIFFSZWN0RiBuZWFyZXN0VmFsaWRCb3VuZHMoKSBjb25zdDsKLQot
ICAgIFFSZWN0RiBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUocXJlYWwgaXRlbVNj
YWxlKSBjb25zdDsKLSAgICB2b2lkIHNjYWxlQ29udGVudChjb25zdCBRUG9pbnRGJiBjZW50ZXJJ
bkNTU0Nvb3JkaW5hdGVzLCBxcmVhbCBjc3NTY2FsZSk7Ci0KLSAgICB2b2lkIHN1c3BlbmRQYWdl
Q29udGVudCgpOwotICAgIHZvaWQgcmVzdW1lUGFnZUNvbnRlbnQoKTsKLQotICAgIFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyBtX3Jhd0F0dHJpYnV0ZXM7Ci0KLSAgICBib29sIG1fYWxsb3dz
VXNlclNjYWxpbmc7Ci0gICAgcXJlYWwgbV9taW5pbXVtU2NhbGU7Ci0gICAgcXJlYWwgbV9tYXhp
bXVtU2NhbGU7Ci0gICAgcXJlYWwgbV9kZXZpY2VQaXhlbFJhdGlvOwotCi0gICAgUVNpemUgbV9s
YXlvdXRTaXplOwotCi0gICAgaW50IG1fc3VzcGVuZENvdW50OwotICAgIGJvb2wgbV9oYXNTdXNw
ZW5kZWRDb250ZW50OwotCi0gICAgT3duUHRyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fc2Nh
bGVVcGRhdGVEZWZlcnJlcjsKLSAgICBPd25QdHI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV9z
Y3JvbGxVcGRhdGVEZWZlcnJlcjsKLSAgICBPd25QdHI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4g
bV90b3VjaFVwZGF0ZURlZmVycmVyOwotICAgIE93blB0cjxWaWV3cG9ydFVwZGF0ZURlZmVycmVy
PiBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyOwotCi0gICAgYm9vbCBtX2hhZFVzZXJJbnRlcmFj
dGlvbjsKLQotICAgIGNsYXNzIFNjYWxlQW5pbWF0aW9uIDogcHVibGljIFFWYXJpYW50QW5pbWF0
aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNjYWxlQW5pbWF0aW9uKFFPYmplY3QqIHBhcmVu
dCA9IDApCi0gICAgICAgICAgICA6IFFWYXJpYW50QW5pbWF0aW9uKHBhcmVudCkKLSAgICAgICAg
eyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUN1cnJlbnRWYWx1ZShjb25zdCBRVmFy
aWFudCYpIHsgfQotICAgIH07Ci0KLSAgICBzdHJ1Y3QgU2NhbGVTdGFja0l0ZW0gewotICAgICAg
ICBTY2FsZVN0YWNrSXRlbShxcmVhbCBzY2FsZSwgcXJlYWwgeFBvc2l0aW9uKQotICAgICAgICAg
ICAgOiBzY2FsZShzY2FsZSkKLSAgICAgICAgICAgICwgeFBvc2l0aW9uKHhQb3NpdGlvbikKLSAg
ICAgICAgeyB9Ci0KLSAgICAgICAgcXJlYWwgc2NhbGU7Ci0gICAgICAgIHFyZWFsIHhQb3NpdGlv
bjsKLSAgICB9OwotCi0gICAgU2NhbGVBbmltYXRpb24qIG1fc2NhbGVBbmltYXRpb247Ci0gICAg
UVBvaW50RiBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKLSAgICBRUG9p
bnRGIG1fbGFzdFNjcm9sbFBvc2l0aW9uOwotICAgIHFyZWFsIG1fcGluY2hTdGFydFNjYWxlOwot
ICAgIHFyZWFsIG1fbGFzdENvbW1pdHRlZFNjYWxlOwotICAgIHFyZWFsIG1fem9vbU91dFNjYWxl
OwotICAgIFFMaXN0PFNjYWxlU3RhY2tJdGVtPiBtX3NjYWxlU3RhY2s7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFF0Vmlld3BvcnRIYW5kbGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAK
aW5kZXggYTAyOTAwZi4uNGNlMTNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKICNp
bmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91
c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYldoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJR
dFZpZXdwb3J0SGFuZGxlci5oIgorI2luY2x1ZGUgIlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Lmgi
CiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgi
CiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCkBAIC0zMDUsNyArMzA1LDcgQEAgdm9pZCBR
dFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUZvY3VzT3V0RXZlbnQoUUZvY3VzRXZlbnQqKQog
ICAgIG1fd2ViUGFnZVByb3h5LT52aWV3U3RhdGVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5OjpWaWV3
SXNGb2N1c2VkIHwgV2ViUGFnZVByb3h5OjpWaWV3V2luZG93SXNBY3RpdmUpOwogfQogCi12b2lk
IFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6c2V0Vmlld3BvcnRIYW5kbGVyKFF0Vmlld3BvcnRIYW5k
bGVyKiBoYW5kbGVyKQordm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0SGFu
ZGxlcihWaWV3cG9ydEhhbmRsZXJDbGllbnRRdCogaGFuZGxlcikKIHsKICAgICBtX3ZpZXdwb3J0
SGFuZGxlciA9IGhhbmRsZXI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgKaW5kZXggNDQ2ZGI3NS4uOGM5MDMwOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIu
aApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBJbnRSZWN0OwogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIE5hdGl2ZVdlYlRvdWNoRXZlbnQ7Ci1jbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKK2Ns
YXNzIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OwogY2xhc3MgU2hhcmVhYmxlQml0bWFwOwogY2xh
c3MgV2ViR2VzdHVyZUV2ZW50OwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtNzUsNyArNzUsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVJbnB1dE1ldGhvZEV2ZW50KFFJbnB1dE1ldGhvZEV2
ZW50Kik7CiAgICAgdm9pZCBoYW5kbGVUb3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7CiAKLSAgICB2
b2lkIHNldFZpZXdwb3J0SGFuZGxlcihRdFZpZXdwb3J0SGFuZGxlciopOworICAgIHZvaWQgc2V0
Vmlld3BvcnRIYW5kbGVyKFZpZXdwb3J0SGFuZGxlckNsaWVudFF0Kik7CiAKICAgICB2b2lkIGFj
dGl2YXRlVGFwSGlnaGxpZ2h0KGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50Jik7CiAgICAg
dm9pZCBkZWFjdGl2YXRlVGFwSGlnaGxpZ2h0KCk7CkBAIC05MSwxMyArOTEsMTMgQEAgcHVibGlj
OgogICAgIHZvaWQgaGFuZGxlSW5wdXRFdmVudChjb25zdCBRSW5wdXRFdmVudCopOwogICAgIHZv
aWQgcmVzZXRHZXN0dXJlUmVjb2duaXplcnMoKTsKIAotICAgIFF0Vmlld3BvcnRIYW5kbGVyKiB2
aWV3cG9ydEhhbmRsZXIoKSB7IHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlcjsgfQorICAgIFZpZXdw
b3J0SGFuZGxlckNsaWVudFF0KiB2aWV3cG9ydEhhbmRsZXIoKSB7IHJldHVybiBtX3ZpZXdwb3J0
SGFuZGxlcjsgfQogCiAgICAgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEm
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKTsKIAogcHJvdGVjdGVkOgog
ICAgIFdlYlBhZ2VQcm94eSogbV93ZWJQYWdlUHJveHk7Ci0gICAgUXRWaWV3cG9ydEhhbmRsZXIq
IG1fdmlld3BvcnRIYW5kbGVyOworICAgIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0KiBtX3ZpZXdw
b3J0SGFuZGxlcjsKICAgICBRdFBhbkdlc3R1cmVSZWNvZ25pemVyIG1fcGFuR2VzdHVyZVJlY29n
bml6ZXI7CiAgICAgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyIG1fcGluY2hHZXN0dXJlUmVjb2du
aXplcjsKICAgICBRdFRhcEdlc3R1cmVSZWNvZ25pemVyIG1fdGFwR2VzdHVyZVJlY29nbml6ZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1ZpZXdwb3J0SGFuZGxl
ckNsaWVudFF0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGVjN2Ix
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1ZpZXdwb3J0
SGFuZGxlckNsaWVudFF0LmNwcApAQCAtMCwwICsxLDU3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqIENvcHlyaWdodCAoQykgMjAxMSBCZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1pbkB3ZWJr
aXQub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQuaCIKKworI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgorI2luY2x1ZGUg
InFxdWlja3dlYnZpZXdfcC5oIgorI2luY2x1ZGUgInF3ZWJraXR0ZXN0X3AuaCIKKyNpbmNsdWRl
IDxRUG9pbnRGPgorI2luY2x1ZGUgPFFUcmFuc2Zvcm0+CisjaW5jbHVkZSA8UXRRdWljay9xcXVp
Y2tpdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0Zsb2F0U2l6ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IGlu
dCBrU2NhbGVBbmltYXRpb25EdXJhdGlvbk1pbGxpcyA9IDI1MDsKKworVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0KFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0
SXRlbSwgUVF1aWNrV2ViUGFnZSogcGFnZUl0ZW0pCisgICAgOiBtX3ZpZXdwb3J0SXRlbSh2aWV3
cG9ydEl0ZW0pCisgICAgLCBtX3BhZ2VJdGVtKHBhZ2VJdGVtKQorICAgICwgbV9zY2FsZUFuaW1h
dGlvbihuZXcgU2NhbGVBbmltYXRpb24odGhpcykpCisgICAgLCBtX3BpbmNoU3RhcnRTY2FsZSgt
MSkKKyAgICAsIG1fbGFzdENvbW1pdHRlZFNjYWxlKC0xKQorICAgICwgbV96b29tT3V0U2NhbGUo
MCkKKyAgICAsIG1faWdub3JlVmlld3BvcnRDaGFuZ2VzKHRydWUpCit7CisgICAgbV9zY2FsZUFu
aW1hdGlvbi0+c2V0RHVyYXRpb24oa1NjYWxlQW5pbWF0aW9uRHVyYXRpb25NaWxsaXMpOworICAg
IG1fc2NhbGVBbmltYXRpb24tPnNldEVhc2luZ0N1cnZlKFFFYXNpbmdDdXJ2ZTo6T3V0Q3ViaWMp
OworCisgICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKG1vdmVtZW50U3RhcnRlZCgp
KSwgU0xPVChmbGlja01vdmVTdGFydGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAg
Y29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKG1vdmVtZW50RW5kZWQoKSksIFNMT1QoZmxp
Y2tNb3ZlRW5kZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fdmll
d3BvcnRJdGVtLCBTSUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCBTTE9UKHBhZ2VJdGVtUG9zaXRp
b25DaGFuZ2VkKCkpKTsKKyAgICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwoY29udGVu
dFlDaGFuZ2VkKCkpLCBTTE9UKHBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkpKTsKKworCisgICAg
Y29ubmVjdChtX3NjYWxlQW5pbWF0aW9uLCBTSUdOQUwoc3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFu
aW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUpKSwKKyAgICAgICAgICAg
IFNMT1Qoc2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0
ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6U2NhbGVBbmltYXRpb246OnVwZGF0ZUN1cnJlbnRWYWx1ZShjb25zdCBRVmFy
aWFudCYgdmFsdWUpCit7CisgICAgLy8gUmVzZXR0aW5nIHRoZSBlbmQgdmFsdWUsIHRoZSBlYXNp
bmcgY3VydmUgb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBzY2FsZSBhbmltYXRpb24KKyAgICAvLyB0
cmlnZ2VycyBhIHJlY2FsY3VsYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBpbnRlcnZhbC4gVGhpcyBt
aWdodCBjaGFuZ2UgdGhlIGN1cnJlbnQKKyAgICAvLyB2YWx1ZSBvZiB0aGUgYW5pbWF0ZWQgcHJv
cGVydHkuCisgICAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgYWN0IG9uIGFuaW1hdGlvbiB2YWx1ZSBj
aGFuZ2VzIGlmIHRoZSBhbmltYXRpb24gaXMgYWN0aXZlLgorICAgIGlmICghbV9oYW5kbGVyQ2xp
ZW50LT5zY2FsZUFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUmVj
dEYgaXRlbVJlY3QgPSB2YWx1ZS50b1JlY3RGKCk7CisgICAgZmxvYXQgaXRlbVNjYWxlID0gbV9o
YW5kbGVyQ2xpZW50LT52aWV3cG9ydFNjYWxlRm9yUmVjdChpdGVtUmVjdCk7CisKKyAgICBtX2hh
bmRsZXJDbGllbnQtPnNldENvbnRlbnRSZWN0VmlzaWJsZVBvc2l0aW9uQXRTY2FsZShpdGVtUmVj
dC50b3BMZWZ0KCksIGl0ZW1TY2FsZSk7Cit9CisKK1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp+
Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQoKQoreworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNs
aWVudFF0OjpzZXRDb250ZW50UmVjdFZpc2libGVQb3NpdGlvbkF0U2NhbGUoY29uc3QgUVBvaW50
RiYgbG9jYXRpb24sIHFyZWFsIGl0ZW1TY2FsZSkKK3sKKyAgICBBU1NFUlQoaXRlbVNjYWxlID49
IDApOworCisgICAgc2NhbGVDb250ZW50KGl0ZW1TY2FsZSk7CisKKyAgICAvLyBUbyBhbmltYXRl
IHRoZSBwb3NpdGlvbiB0b2dldGhlciB3aXRoIHRoZSBzY2FsZSB3ZSBtdWx0aXBseSB0aGUgcG9z
aXRpb24gd2l0aCB0aGUgY3VycmVudCBzY2FsZQorICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIHBh
Z2UgcG9zaXRpb24gKGRpc3BsYWNlbWVudCBvbiB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVtIGJl
Y2F1c2Ugb2YgYWRkaXRpb25hbCBpdGVtcykuCisgICAgUVBvaW50RiBuZXdQb3NpdGlvbihtX3Bh
Z2VJdGVtLT5wb3MoKSArIGxvY2F0aW9uICogaXRlbVNjYWxlKTsKKworICAgIG1fdmlld3BvcnRJ
dGVtLT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6YW5pbWF0ZUNvbnRlbnRSZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmIGNvbnRl
bnRSZWN0KQoreworICAgIEFTU0VSVChtX3NjYWxlQW5pbWF0aW9uLT5zdGF0ZSgpID09IFFBYnN0
cmFjdEFuaW1hdGlvbjo6U3RvcHBlZCk7CisKKyAgICBBU1NFUlQoIXNjcm9sbEFuaW1hdGlvbkFj
dGl2ZSgpKTsKKyAgICBpZiAoc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFFSZWN0RiB2aWV3cG9ydFJlY3RJbkNvbnRlbnRDb29yZHMgPSBtX3ZpZXdwb3J0
SXRlbS0+bWFwUmVjdFRvV2ViQ29udGVudChtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkp
OworICAgIGlmIChjb250ZW50UmVjdCA9PSB2aWV3cG9ydFJlY3RJbkNvbnRlbnRDb29yZHMpIHsK
KyAgICAgICAgdXBkYXRlVmlld3BvcnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFNpbmNlIHdlIGhhdmUgdG8gYW5pbWF0ZSBzY2FsZSBhbmQgcG9zaXRpb24gYXQgdGhlIHNh
bWUgdGltZSB0aGUgc2NhbGUgYW5pbWF0aW9uIGludGVycG9sYXRlcworICAgIC8vIGZyb20gdGhl
IGN1cnJlbnQgdmlld3BvcnQgcmVjdCBpbiBjb250ZW50IGNvb3JkaW5hdGVzIHRvIGEgdmlzaWJs
ZSByZWN0IG9mIHRoZSBjb250ZW50LgorICAgIG1fc2NhbGVBbmltYXRpb24tPnNldFN0YXJ0VmFs
dWUodmlld3BvcnRSZWN0SW5Db250ZW50Q29vcmRzKTsKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5z
ZXRFbmRWYWx1ZShjb250ZW50UmVjdCk7CisKKyAgICAvLyBJbmZvcm0gdGhlIHdlYiBwcm9jZXNz
IGFib3V0IHRoZSByZXF1ZXN0ZWQgdmlzaWJsZSBjb250ZW50IHJlY3QKKyAgICAvLyBpZiB6b29t
aW5nLW91dCBzbyB0aGF0IG5vIHdoaXRlIHRpbGVzIGFyZSBleHBvc2VkIGR1cmluZyBhbmltYXRp
b24uCisgICAgaWYgKHZpZXdwb3J0UmVjdEluQ29udGVudENvb3Jkcy53aWR0aCgpIC8gY29udGVu
dFJlY3Qud2lkdGgoKSA8IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKSkKKyAgICAgICAgbV92
aWV3cG9ydEhhbmRsZXItPmFkanVzdFZpc2libGVDb250ZW50c1JlY3QoY29udGVudFJlY3QsIHZp
ZXdwb3J0U2NhbGVGb3JSZWN0KGNvbnRlbnRSZWN0KSk7CisKKyAgICBtX3NjYWxlQW5pbWF0aW9u
LT5zdGFydCgpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpmbGlja01vdmVT
dGFydGVkKCkKK3sKKyAgICBRX0FTU0VSVChtX3ZpZXdwb3J0SXRlbS0+aXNNb3ZpbmcoKSk7Cisg
ICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlci5yZXNldChuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJl
cihtX3ZpZXdwb3J0SGFuZGxlciwgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6RGVmZXJVcGRhdGVB
bmRTdXNwZW5kQ29udGVudCkpOworCisgICAgbV9sYXN0U2Nyb2xsUG9zaXRpb24gPSBtX3ZpZXdw
b3J0SXRlbS0+Y29udGVudFBvcygpOworCisgICAgbV9pZ25vcmVWaWV3cG9ydENoYW5nZXMgPSBm
YWxzZTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6ZmxpY2tNb3ZlRW5kZWQo
KQoreworICAgIFFfQVNTRVJUKCFtX3ZpZXdwb3J0SXRlbS0+aXNNb3ZpbmcoKSk7CisgICAgLy8g
VGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBlbmQgb2YgdGhlIHBhbiBvciBwYW4ga2luZXRp
YyBhbmltYXRpb24uCisKKyAgICBtX2lnbm9yZVZpZXdwb3J0Q2hhbmdlcyA9IHRydWU7CisKKyAg
ICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyLnJlc2V0KCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQ6OnBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9pZ25v
cmVWaWV3cG9ydENoYW5nZXMpCisgICAgICAgIHJldHVybjsKKworICAgIFFQb2ludEYgbmV3UG9z
aXRpb24gPSBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpOworCisgICAgdXBkYXRlVmlld3Bv
cnQobV9sYXN0U2Nyb2xsUG9zaXRpb24gLSBuZXdQb3NpdGlvbik7CisKKyAgICBtX2xhc3RTY3Jv
bGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0OjpzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRl
IG5ld1N0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIC8qb2xkU3RhdGUqLykKK3sKKyAg
ICBzd2l0Y2ggKG5ld1N0YXRlKSB7CisgICAgY2FzZSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5p
bmc6CisgICAgICAgIG1fdmlld3BvcnRJdGVtLT5jYW5jZWxGbGljaygpOworICAgICAgICBBU1NF
UlQoIW1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIpOworICAgICAgICBtX2FuaW1hdGlvblVwZGF0
ZURlZmVycmVyLnJlc2V0KG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKG1fdmlld3BvcnRIYW5k
bGVyLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUUFic3RyYWN0QW5pbWF0aW9uOjpTdG9wcGVk
OgorICAgICAgICBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyLnJlc2V0KCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBWaWV3
cG9ydEhhbmRsZXJDbGllbnRRdDo6dG91Y2hCZWdpbigpCit7CisgICAgbV92aWV3cG9ydEhhbmRs
ZXItPnNldEhhZFVzZXJJbnRlcmFjdGlvbih0cnVlKTsKKworICAgIC8vIFByZXZlbnRzIHJlc3Vt
aW5nIHRoZSBwYWdlIGJldHdlZW4gdGhlIHVzZXIncyBmbGlja3Mgb2YgdGhlIHBhZ2Ugd2hpbGUg
dGhlIGFuaW1hdGlvbiBpcyBydW5uaW5nLgorICAgIGlmIChzY3JvbGxBbmltYXRpb25BY3RpdmUo
KSkKKyAgICAgICAgbV90b3VjaFVwZGF0ZURlZmVycmVyLnJlc2V0KG5ldyBWaWV3cG9ydFVwZGF0
ZURlZmVycmVyKG1fdmlld3BvcnRIYW5kbGVyLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZl
clVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xp
ZW50UXQ6OnRvdWNoRW5kKCkKK3sKKyAgICBtX3RvdWNoVXBkYXRlRGVmZXJyZXIucmVzZXQoKTsK
K30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6Zm9jdXNFZGl0YWJsZUFyZWEoY29u
c3QgUVJlY3RGJiBjYXJldEFyZWEsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSkKK3sKKyAgICAv
LyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24u
CisgICAgQVNTRVJUKG1fdmlld3BvcnRIYW5kbGVyLT5oYWRVc2VySW50ZXJhY3Rpb24oKSk7CisK
KyAgICBRUmVjdEYgZW5kQXJlYSA9IG1fdmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0VG9WaWV3cG9y
dCh0YXJnZXRBcmVhKTsKKworICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IG1fdmlld3BvcnRIYW5k
bGVyLT5jb252ZXJ0VG9WaWV3cG9ydChtX3ZpZXdwb3J0SGFuZGxlci0+aW5uZXJCb3VuZGVkQ29u
dGVudHNTY2FsZSgyLjApKTsKKyAgICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3
cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpOworCisgICAgcXJlYWwgeDsKKyAgICBjb25zdCBxcmVh
bCBib3JkZXJPZmZzZXQgPSAxMDsKKyAgICBpZiAoKGVuZEFyZWEud2lkdGgoKSArIGJvcmRlck9m
ZnNldCkgKiBlbmRJdGVtU2NhbGUgPD0gdmlld3BvcnRSZWN0LndpZHRoKCkpIHsKKyAgICAgICAg
Ly8gQ2VudGVyIHRoZSBpbnB1dCBmaWVsZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB2aWV3LCBpZiBp
dCBpcyBzbWFsbGVyIHRoYW4KKyAgICAgICAgLy8gdGhlIHZpZXcgYXQgdGhlIHNjYWxlIHRhcmdl
dC4KKyAgICAgICAgeCA9IHZpZXdwb3J0UmVjdC5jZW50ZXIoKS54KCkgLSBlbmRBcmVhLndpZHRo
KCkgKiBlbmRJdGVtU2NhbGUgLyAyLjA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRW5zdXJl
IHRoYXQgdGhlIGNhcmV0IGFsd2F5cyBoYXMgYm9yZGVyT2Zmc2V0IGNvbnRlbnRzIHBpeGVscyB0
byB0aGUgcmlnaHQKKyAgICAgICAgLy8gb2YgaXQsIGFuZCBzZWNvbmRhcmlseSAoaWYgcG9zc2li
bGUpLCB0aGF0IHRoZSBhcmVhIGhhcyBib3JkZXJPZmZzZXQKKyAgICAgICAgLy8gY29udGVudHMg
cGl4ZWxzIHRvIHRoZSBsZWZ0IG9mIGl0LgorICAgICAgICBxcmVhbCBjYXJldE9mZnNldCA9IG1f
dmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0VG9WaWV3cG9ydChjYXJldEFyZWEueCgpKSAtIGVuZEFy
ZWEueCgpOworICAgICAgICB4ID0gcU1pbih2aWV3cG9ydFJlY3Qud2lkdGgoKSAtIChjYXJldE9m
ZnNldCArIGJvcmRlck9mZnNldCkgKiBlbmRJdGVtU2NhbGUsIGJvcmRlck9mZnNldCAqIGVuZEl0
ZW1TY2FsZSk7CisgICAgfQorCisgICAgY29uc3QgUVBvaW50RiBob3RzcG90ID0gUVBvaW50Rihl
bmRBcmVhLngoKSwgZW5kQXJlYS5jZW50ZXIoKS55KCkpOworICAgIGNvbnN0IFFQb2ludEYgdmll
d3BvcnRIb3RzcG90ID0gUVBvaW50Rih4LCAvKiBGSVhNRTogdmlzaWJsZUNlbnRlciAqLyB2aWV3
cG9ydFJlY3QuY2VudGVyKCkueSgpKTsKKworICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBob3Rz
cG90ICogZW5kSXRlbVNjYWxlIC0gdmlld3BvcnRIb3RzcG90OworICAgIFFSZWN0RiBlbmRQb3NS
YW5nZSA9IG1fdmlld3BvcnRIYW5kbGVyLT5wb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2NhbGUo
ZW5kSXRlbVNjYWxlKTsKKworICAgIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQb3NS
YW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgpKTsK
KworICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5kUG9zaXRpb24gLyBlbmRJdGVt
U2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOworCisgICAgYW5pbWF0
ZUNvbnRlbnRSZWN0VmlzaWJsZShlbmRWaXNpYmxlQ29udGVudFJlY3QpOworfQorCit2b2lkIFZp
ZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp6b29tVG9BcmVhR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2lu
dEYmIHRvdWNoUG9pbnQsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSkKK3sKKyAgICAvLyBUaGlz
IGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCisgICAg
QVNTRVJUKG1fdmlld3BvcnRIYW5kbGVyLT5oYWRVc2VySW50ZXJhY3Rpb24oKSk7CisKKyAgICBp
ZiAoIXRhcmdldEFyZWEuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV92
aWV3cG9ydEhhbmRsZXItPmhhc1N1c3BlbmRlZENvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgaW50IG1hcmdpbiA9IDEwOyAvLyBXZSB3YW50IGF0IGxlYXN0IGEgbGl0dGxl
IGJpdCBvZiBtYXJnaW4uCisgICAgUVJlY3RGIGVuZEFyZWEgPSBtX3ZpZXdwb3J0SGFuZGxlci0+
Y29udmVydFRvVmlld3BvcnQodGFyZ2V0QXJlYS5hZGp1c3RlZCgtbWFyZ2luLCAtbWFyZ2luLCBt
YXJnaW4sIG1hcmdpbikpOworCisgICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmll
d3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsKKworICAgIHFyZWFsIHRhcmdldENTU1NjYWxlID0g
dmlld3BvcnRSZWN0LnNpemUoKS53aWR0aCgpIC8gZW5kQXJlYS5zaXplKCkud2lkdGgoKTsKKyAg
ICBxcmVhbCBlbmRDU1NTY2FsZSA9IG1fdmlld3BvcnRIYW5kbGVyLT5pbm5lckJvdW5kZWRDb250
ZW50c1NjYWxlKHFNaW4odGFyZ2V0Q1NTU2NhbGUsIHFyZWFsKDIuNSkpKTsKKyAgICBxcmVhbCBl
bmRJdGVtU2NhbGUgPSBtX3ZpZXdwb3J0SGFuZGxlci0+Y29udmVydFRvVmlld3BvcnQoZW5kQ1NT
U2NhbGUpOworICAgIHFyZWFsIGN1cnJlbnRTY2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2Nh
bGUoKTsKKworICAgIC8vIFdlIHdhbnQgdG8gZW5kIHVwIHdpdGggdGhlIHRhcmdldCBhcmVhIGZp
bGxpbmcgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydCAoaWYgcG9zc2libGUpLAorICAg
IC8vIGFuZCBjZW50cmFsaXplZCB2ZXJ0aWNhbGx5IHdoZXJlIHRoZSB1c2VyIHJlcXVlc3RlZCB6
b29tLiBUaHVzIG91ciBob3RzcG90IGlzIHRoZSBjZW50ZXIgb2YKKyAgICAvLyB0aGUgdGFyZ2V0
QXJlYSB4LXdpc2UgYW5kIHRoZSByZXF1ZXN0ZWQgem9vbSBwb3NpdGlvbiwgeS13aXNlLgorICAg
IGNvbnN0IFFQb2ludEYgaG90c3BvdCA9IFFQb2ludEYoZW5kQXJlYS5jZW50ZXIoKS54KCksIG1f
dmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0VG9WaWV3cG9ydCh0b3VjaFBvaW50LnkoKSkpOworICAg
IGNvbnN0IFFQb2ludEYgdmlld3BvcnRIb3RzcG90ID0gdmlld3BvcnRSZWN0LmNlbnRlcigpOwor
CisgICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGhvdHNwb3QgKiBlbmRDU1NTY2FsZSAtIHZpZXdw
b3J0SG90c3BvdDsKKworICAgIFFSZWN0RiBlbmRQb3NSYW5nZSA9IG1fdmlld3BvcnRIYW5kbGVy
LT5wb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKKyAgICBlbmRQ
b3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlv
biwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7CisKKyAgICBRUmVjdEYgZW5kVmlzaWJsZUNv
bnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgp
IC8gZW5kSXRlbVNjYWxlKTsKKworICAgIGVudW0geyBab29tSW4sIFpvb21CYWNrLCBab29tT3V0
LCBOb1pvb20gfSB6b29tQWN0aW9uID0gWm9vbUluOworCisgICAgaWYgKCFtX3NjYWxlU3RhY2su
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFpvb20gYmFjayBvdXQgaWYgYXR0ZW1wdGluZyB0byBz
Y2FsZSB0byB0aGUgc2FtZSBjdXJyZW50IHNjYWxlLCBvcgorICAgICAgICAvLyBhdHRlbXB0aW5n
IHRvIGNvbnRpbnVlIHNjYWxpbmcgb3V0IGZyb20gdGhlIGlubmVyIG1vc3QgbGV2ZWwuCisgICAg
ICAgIC8vIFVzZSBmdXp6eSBjb21wYXJlIHdpdGggYSBmaXhlZCBlcnJvciB0byBiZSBhYmxlIHRv
IGRlYWwgd2l0aCBsYXJnaXNoIGRpZmZlcmVuY2VzIGR1ZSB0byBwaXhlbCByb3VuZGluZy4KKyAg
ICAgICAgaWYgKGZ1enp5Q29tcGFyZShlbmRJdGVtU2NhbGUsIGN1cnJlbnRTY2FsZSwgMC4wMSkp
IHsKKyAgICAgICAgICAgIC8vIElmIG1vdmluZyB0aGUgdmlld3BvcnQgd291bGQgZXhwb3NlIG1v
cmUgb2YgdGhlIHRhcmdldFJlY3QgYW5kIG1vdmUgYXQgbGVhc3QgNDAgcGl4ZWxzLCB1cGRhdGUg
cG9zaXRpb24gYnV0IGRvIG5vdCBzY2FsZSBvdXQuCisgICAgICAgICAgICBRUmVjdEYgY3VycmVu
dENvbnRlbnRSZWN0KHZpc2libGVDb250ZW50c1JlY3QoKSk7CisgICAgICAgICAgICBRUmVjdEYg
dGFyZ2V0SW50ZXJzZWN0aW9uID0gZW5kVmlzaWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdGVkKHRh
cmdldEFyZWEpOworICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29udGVudFJlY3QuY29udGFpbnMo
dGFyZ2V0SW50ZXJzZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICAmJiAocUFicyhlbmRWaXNp
YmxlQ29udGVudFJlY3QudG9wKCkgLSBjdXJyZW50Q29udGVudFJlY3QudG9wKCkpID49IDQwCisg
ICAgICAgICAgICAgICAgICAgIHx8IHFBYnMoZW5kVmlzaWJsZUNvbnRlbnRSZWN0LmxlZnQoKSAt
IGN1cnJlbnRDb250ZW50UmVjdC5sZWZ0KCkpID49IDQwKSkKKyAgICAgICAgICAgICAgICB6b29t
QWN0aW9uID0gTm9ab29tOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHpvb21B
Y3Rpb24gPSBab29tQmFjazsKKyAgICAgICAgfSBlbHNlIGlmIChmdXp6eUNvbXBhcmUoZW5kSXRl
bVNjYWxlLCBtX3pvb21PdXRTY2FsZSwgMC4wMSkpCisgICAgICAgICAgICB6b29tQWN0aW9uID0g
Wm9vbUJhY2s7CisgICAgICAgIGVsc2UgaWYgKGVuZEl0ZW1TY2FsZSA8IGN1cnJlbnRTY2FsZSkK
KyAgICAgICAgICAgIHpvb21BY3Rpb24gPSBab29tT3V0OworICAgIH0KKworICAgIHN3aXRjaCAo
em9vbUFjdGlvbikgeworICAgIGNhc2UgWm9vbUluOgorICAgICAgICBtX3NjYWxlU3RhY2suYXBw
ZW5kKFNjYWxlU3RhY2tJdGVtKGN1cnJlbnRTY2FsZSwgbV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQ
b3MoKS54KCkpKTsKKyAgICAgICAgbV96b29tT3V0U2NhbGUgPSBlbmRJdGVtU2NhbGU7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgWm9vbUJhY2s6IHsKKyAgICAgICAgU2NhbGVTdGFja0l0ZW0g
bGFzdFNjYWxlID0gbV9zY2FsZVN0YWNrLnRha2VMYXN0KCk7CisgICAgICAgIGVuZEl0ZW1TY2Fs
ZSA9IGxhc3RTY2FsZS5zY2FsZTsKKyAgICAgICAgZW5kQ1NTU2NhbGUgPSBtX3ZpZXdwb3J0SGFu
ZGxlci0+Y29udmVydEZyb21WaWV3cG9ydChsYXN0U2NhbGUuc2NhbGUpOworICAgICAgICAvLyBS
ZWNhbGN1bGF0ZSBlbmRQb3NpdGlvbiBhbmQgYm91bmQgaXQgYWNjb3JkaW5nIHRvIG5ldyBzY2Fs
ZS4KKyAgICAgICAgZW5kUG9zaXRpb24uc2V0WShob3RzcG90LnkoKSAqIGVuZENTU1NjYWxlIC0g
dmlld3BvcnRIb3RzcG90LnkoKSk7CisgICAgICAgIGVuZFBvc2l0aW9uLnNldFgobGFzdFNjYWxl
LnhQb3NpdGlvbik7CisgICAgICAgIGVuZFBvc1JhbmdlID0gbV92aWV3cG9ydEhhbmRsZXItPnBv
c2l0aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUpOworICAgICAgICBlbmRQ
b3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlv
biwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7CisgICAgICAgIGVuZFZpc2libGVDb250ZW50
UmVjdCA9IFFSZWN0RihlbmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3BvcnRSZWN0LnNp
emUoKSAvIGVuZEl0ZW1TY2FsZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFpv
b21PdXQ6CisgICAgICAgIC8vIFVuc3RhY2sgYWxsIHNjYWxlLWxldmVscyBkZWVwZXIgdGhhbiB0
aGUgbmV3IGxldmVsLCBzbyBhIHpvb20tYmFjayB3b24ndCBlbmQgdXAgem9vbWluZyBpbi4KKyAg
ICAgICAgd2hpbGUgKCFtX3NjYWxlU3RhY2suaXNFbXB0eSgpICYmIG1fc2NhbGVTdGFjay5sYXN0
KCkuc2NhbGUgPj0gZW5kSXRlbVNjYWxlKQorICAgICAgICAgICAgbV9zY2FsZVN0YWNrLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgbV96b29tT3V0U2NhbGUgPSBlbmRJdGVtU2NhbGU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTm9ab29tOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBh
bmltYXRlQ29udGVudFJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7Cit9CisKK1FS
ZWN0RiBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6bmVhcmVzdFZhbGlkVmlzaWJsZUNvbnRlbnRz
UmVjdCgpIGNvbnN0Cit7CisgICAgZmxvYXQgY3NzU2NhbGUgPSBtX3ZpZXdwb3J0SGFuZGxlci0+
Y29udmVydEZyb21WaWV3cG9ydChtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCkpOworICAgIGZs
b2F0IGVuZEl0ZW1TY2FsZSA9IG1fdmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0VG9WaWV3cG9ydCht
X3ZpZXdwb3J0SGFuZGxlci0+aW5uZXJCb3VuZGVkQ29udGVudHNTY2FsZShjc3NTY2FsZSkpOwor
CisgICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGlu
Z1JlY3QoKTsKKyAgICBRUG9pbnRGIHZpZXdwb3J0SG90c3BvdCA9IHZpZXdwb3J0UmVjdC5jZW50
ZXIoKTsKKyAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gbV92aWV3cG9ydEl0ZW0tPm1hcFRvV2Vi
Q29udGVudCh2aWV3cG9ydEhvdHNwb3QpICogZW5kSXRlbVNjYWxlIC0gdmlld3BvcnRIb3RzcG90
OworCisgICAgRmxvYXRSZWN0IGVuZFBvc1JhbmdlID0gbV92aWV3cG9ydEhhbmRsZXItPnBvc2l0
aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUpOworICAgIGVuZFBvc2l0aW9u
ID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS5taW5YTWluWUNvcm5lcigpLCBlbmRQb3NpdGlv
biwgZW5kUG9zUmFuZ2UubWF4WE1heFlDb3JuZXIoKSk7CisKKyAgICBRUmVjdEYgZW5kVmlzaWJs
ZUNvbnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6
ZSgpIC8gZW5kSXRlbVNjYWxlKTsKKworICAgIHJldHVybiBlbmRWaXNpYmxlQ29udGVudFJlY3Q7
Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNldENvbnRlbnRzUG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25JblZpZXdDb29yZGluYXRlcykKK3sKKyAgICBRUG9p
bnRGIG5ld1Bvc2l0aW9uKG1fcGFnZUl0ZW0tPnBvcygpICsgUVBvaW50Rihwb3NpdGlvbkluVmll
d0Nvb3JkaW5hdGVzKSk7CisgICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobmV3UG9z
aXRpb24pOworICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQ6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgdmlld3BvcnRTY2FsZSwgYm9vbCBpc0lu
aXRpYWxTY2FsZSkKK3sKKyAgICBpZiAoaXNJbml0aWFsU2NhbGUpIHsKKyAgICAgICAgbV96b29t
T3V0U2NhbGUgPSAwOworICAgICAgICBtX3NjYWxlU3RhY2suY2xlYXIoKTsKKyAgICAgICAgc2V0
Q29udGVudFJlY3RWaXNpYmxlUG9zaXRpb25BdFNjYWxlKFFQb2ludEYoKSwgdmlld3BvcnRTY2Fs
ZSk7CisgICAgfSBlbHNlCisgICAgICAgIHNjYWxlQ29udGVudCh2aWV3cG9ydFNjYWxlKTsKKwor
ICAgIHVwZGF0ZVZpZXdwb3J0KCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6
OnNldENvbnRlbnRzUmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKCkKK3sKKyAgICBWaWV3cG9ydFVw
ZGF0ZURlZmVycmVyIGd1YXJkKG1fdmlld3BvcnRIYW5kbGVyKTsKKyAgICBmbG9hdCB2YWxpZENT
U1NjYWxlID0gbV92aWV3cG9ydEhhbmRsZXItPmlubmVyQm91bmRlZENvbnRlbnRzU2NhbGUobV92
aWV3cG9ydEhhbmRsZXItPmNvbnZlcnRGcm9tVmlld3BvcnQobV9wYWdlSXRlbS0+Y29udGVudHNT
Y2FsZSgpKSk7CisgICAgc2V0Q29udGVudFJlY3RWaXNpYmxlUG9zaXRpb25BdFNjYWxlKG5lYXJl
c3RWYWxpZFZpc2libGVDb250ZW50c1JlY3QoKS50b3BMZWZ0KCksIG1fdmlld3BvcnRIYW5kbGVy
LT5jb252ZXJ0VG9WaWV3cG9ydCh2YWxpZENTU1NjYWxlKSk7Cit9CisKK3ZvaWQgVmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ6OnJlcXVlc3RWaWV3cG9ydFVwZGF0ZSgpCit7CisgICAgdXBkYXRlVmll
d3BvcnQoKTsKK30KKworYm9vbCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6YWxsb3dzVXNlclNj
YWxpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlci0+YWxsb3dzVXNl
clNjYWxpbmcoKTsKK30KKworcXJlYWwgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmRldmljZVBp
eGVsUmF0aW8oKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlci0+ZGV2aWNl
UGl4ZWxSYXRpbygpOworfQorCitxcmVhbCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6bWluaW11
bUNvbnRlbnRzU2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlci0+
bWluaW11bUNvbnRlbnRzU2NhbGUoKTsKK30KKworcXJlYWwgVmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6Om1heGltdW1Db250ZW50c1NjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3cG9y
dEhhbmRsZXItPm1heGltdW1Db250ZW50c1NjYWxlKCk7Cit9CisKK3FyZWFsIFZpZXdwb3J0SGFu
ZGxlckNsaWVudFF0OjpjdXJyZW50Q29udGVudHNTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsKK30KKworUVNpemVGIFZpZXdwb3J0SGFuZGxl
ckNsaWVudFF0Ojpjb250ZW50c0xheW91dFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Zp
ZXdwb3J0SGFuZGxlci0+Y29udGVudHNMYXlvdXRTaXplKCk7Cit9CisKK2Jvb2wgVmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ6OnNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdmlld3BvcnRJdGVtLT5pc0ZsaWNraW5nKCk7Cit9CisKK2Jvb2wgVmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Zp
ZXdwb3J0SGFuZGxlci0+aGFkVXNlckludGVyYWN0aW9uKCkgJiYgbV92aWV3cG9ydEl0ZW0tPmlz
RHJhZ2dpbmcoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGFuR2VzdHVy
ZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1p
bGxpcykKK3sKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVz
ZXIgaW50ZXJhY3Rpb24uCisgICAgQVNTRVJUKG1fdmlld3BvcnRIYW5kbGVyLT5oYWRVc2VySW50
ZXJhY3Rpb24oKSk7CisKKyAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxpY2thYmxlTW91c2VQ
cmVzcyhwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIG1fbGFzdFBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247Cit9CisKK3ZvaWQgVmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBv
c2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7CisgICAgbV92aWV3cG9ydEl0
ZW0tPmhhbmRsZUZsaWNrYWJsZU1vdXNlTW92ZShwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxs
aXMpOworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRp
b247Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVFbmRlZChj
b25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQorewor
ICAgIG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2FibGVNb3VzZVJlbGVhc2UocG9zaXRpb24s
IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRD
b29yZGluYXRlcyA9IHBvc2l0aW9uOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0
OjpwYW5HZXN0dXJlQ2FuY2VsbGVkKCkKK3sKKyAgICAvLyBSZXNldCB0aGUgdmVsb2NpdHkgc2Ft
cGxlcyBvZiB0aGUgZmxpY2thYmxlLgorICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGJ5IHRoZSByZWNvZ25pemVyIGlmIHdlIGhhdmUgYSByZWNvZ25pemVkCisgICAgLy8gcGFuIGdl
c3R1cmUgYW5kIHJlY2VpdmUgYSB0b3VjaCBldmVudCB3aXRoIG11bHRpcGxlIHRvdWNoIHBvaW50
cworICAgIC8vIChpZS4gdHJhbnNpdGlvbiB0byBhIHBpbmNoIGdlc3R1cmUpIGFzIGl0IGRvZXMg
bm90IG1vdmUgdGhlIGNvbnRlbnQKKyAgICAvLyBiYWNrIGluc2lkZSB2YWxpZCBib3VuZHMuCisg
ICAgLy8gV2hlbiB0aGUgcGluY2ggZ2VzdHVyZSBlbmRzLCB0aGUgY29udGVudCBpcyBwb3NpdGlv
bmVkIGFuZCBzY2FsZWQKKyAgICAvLyBiYWNrIHRvIHZhbGlkIGJvdW5kYXJpZXMuCisgICAgbV92
aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7Cit9CisKK2Jvb2wgVmlld3BvcnRIYW5kbGVyQ2xp
ZW50UXQ6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY2Fs
ZUFuaW1hdGlvbi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc7Cit9CisK
K3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmNhbmNlbFNjcm9sbEFuaW1hdGlvbigpCit7
CisgICAgaWYgKCFzY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gSWYgdGhlIHBhbiBnZXN0dXJlIHJlY29nbml6ZXIgcmVjZWl2ZXMgYSB0b3VjaCBiZWdp
biBldmVudAorICAgIC8vIGR1cmluZyBhbiBvbmdvaW5nIGtpbmV0aWMgc2Nyb2xsIGFuaW1hdGlv
biBvZiBhIHByZXZpb3VzCisgICAgLy8gcGFuIGdlc3R1cmUsIHRoZSBhbmltYXRpb24gaXMgc3Rv
cHBlZCBhbmQgdGhlIGNvbnRlbnQgaXMKKyAgICAvLyBpbW1lZGlhdGVseSBwb3NpdGlvbmVkIGJh
Y2sgdG8gdmFsaWQgYm91bmRhcmllcy4KKworICAgIG1fdmlld3BvcnRJdGVtLT5jYW5jZWxGbGlj
aygpOworICAgIHNldENvbnRlbnRzUmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKCk7Cit9CisKK3Zv
aWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmludGVycnVwdFNjYWxlQW5pbWF0aW9uKCkKK3sK
KyAgICAvLyBUaGlzIGludGVycnVwdHMgdGhlIHNjYWxlIGFuaW1hdGlvbiBleGFjdGx5IHdoZXJl
IGl0IGlzLCBldmVuIGlmIGl0IGlzIG91dCBvZiBib3VuZHMuCisgICAgbV9zY2FsZUFuaW1hdGlv
bi0+c3RvcCgpOworfQorCitib29sIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1
cmVBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlci0+aGFkVXNl
ckludGVyYWN0aW9uKCkgJiYgKG1fcGluY2hTdGFydFNjYWxlID4gMCk7Cit9CisKK3ZvaWQgVmll
d3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYg
cGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpCit7CisgICAgLy8gVGhpcyBjYW4gb25s
eSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgorICAgIEFTU0VSVCht
X3ZpZXdwb3J0SGFuZGxlci0+aGFkVXNlckludGVyYWN0aW9uKCkpOworCisgICAgaWYgKCFtX3Zp
ZXdwb3J0SGFuZGxlci0+YWxsb3dzVXNlclNjYWxpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9zY2FsZVN0YWNrLmNsZWFyKCk7CisgICAgbV96b29tT3V0U2NhbGUgPSAwLjA7CisKKyAg
ICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIucmVzZXQobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIo
bV92aWV3cG9ydEhhbmRsZXIsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5k
U3VzcGVuZENvbnRlbnQpKTsKKworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7CisgICAgbV9waW5jaFN0
YXJ0U2NhbGUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7Cit9CisKK3ZvaWQgVmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50
RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMsIHFyZWFsIHRvdGFsU2NhbGVGYWN0
b3IpCit7CisgICAgQVNTRVJUKG1fdmlld3BvcnRIYW5kbGVyLT5oYXNTdXNwZW5kZWRDb250ZW50
KCkpOworCisgICAgaWYgKCFtX3ZpZXdwb3J0SGFuZGxlci0+YWxsb3dzVXNlclNjYWxpbmcoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gIENoYW5nZXMgb2YgdGhlIGNlbnRlciBwb3NpdGlv
biBzaG91bGQgbW92ZSB0aGUgcGFnZSBldmVuIGlmIHRoZSB6b29tIGZhY3RvciBkb2VzIG5vdCBj
aGFuZ2UuCisgICAgY29uc3QgcXJlYWwgY3NzU2NhbGUgPSBtX3ZpZXdwb3J0SGFuZGxlci0+Y29u
dmVydEZyb21WaWV3cG9ydChtX3BpbmNoU3RhcnRTY2FsZSAqIHRvdGFsU2NhbGVGYWN0b3IpOwor
CisgICAgLy8gQWxsb3cgem9vbWluZyBvdXQgYmV5b25kIG1pbWltdW0gc2NhbGUgb24gcGFnZXMg
dGhhdCBkbyBub3QgZXhwbGljaXRseSBkaXNhbGxvdyBpdC4KKyAgICBjb25zdCBxcmVhbCB0YXJn
ZXRJdGVtU2NhbGUgPSBtX3ZpZXdwb3J0SGFuZGxlci0+Y29udmVydFRvVmlld3BvcnQobV92aWV3
cG9ydEhhbmRsZXItPm91dGVyQm91bmRlZENvbnRlbnRzU2NhbGUoY3NzU2NhbGUpKTsKKworICAg
IHNjYWxlQ29udGVudCh0YXJnZXRJdGVtU2NhbGUsIG1fdmlld3BvcnRJdGVtLT5tYXBUb1dlYkNv
bnRlbnQocGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpKTsKKworICAgIGNvbnN0IFFQ
b2ludEYgcG9zaXRpb25EaWZmID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgLSBt
X2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKKyAgICBtX2xhc3RQaW5jaENl
bnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5h
dGVzOworCisgICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobV92aWV3cG9ydEl0ZW0t
PmNvbnRlbnRQb3MoKSAtIHBvc2l0aW9uRGlmZik7CisKKyAgICAvLyBJbmZvcm0gdGhlIHdlYiBw
cm9jZXNzIHRvIHJlbmRlciB0aGUgY3VycmVudGx5IHZpc2libGUgYXJlYSB3aXRoIGxvdy1yZXNv
bHV0aW9uIHRpbGVzIG5vdAorICAgIC8vIHRvIGV4cG9zZSB3aGl0ZSB0aWxlcyBkdXJpbmcgcGlu
Y2ggZ2VzdHVyZXMgYW5kIHRvIHNob3cgZml4ZWQgcG9zaXRpb24gbGF5ZXJzIGNvcnJlY3RseS4K
KyAgICAvLyBUaGUgYWN0dWFsIHNjYWxlIGlzIHJlc3RvcmVkIGFmdGVyIHRoZSBwaW5jaCBnZXN0
dXJlIGVuZHMuCisgICAgdXBkYXRlVmlld3BvcnQoUVBvaW50RigpLCAxKTsKK30KKwordm9pZCBW
aWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGluY2hHZXN0dXJlRW5kZWQoKQoreworICAgIEFTU0VS
VChtX3ZpZXdwb3J0SGFuZGxlci0+aGFzU3VzcGVuZGVkQ29udGVudCgpKTsKKworICAgIGlmICgh
bV92aWV3cG9ydEhhbmRsZXItPmFsbG93c1VzZXJTY2FsaW5nKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fcGluY2hTdGFydFNjYWxlID0gLTE7CisKKyAgICBhbmltYXRlQ29udGVudFJlY3RW
aXNpYmxlKG5lYXJlc3RWYWxpZFZpc2libGVDb250ZW50c1JlY3QoKSk7CisgICAgbV9zY2FsZVVw
ZGF0ZURlZmVycmVyLnJlc2V0KCk7IC8vIENsZWFyIGFmdGVyIHN0YXJ0aW5nIHBvdGVudGlhbCBh
bmltYXRpb24sIHdoaWNoIHRha2VzIG92ZXIgZGVmZXJyaW5nLgorfQorCit2b2lkIFZpZXdwb3J0
SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKQoreworICAgIG1fcGluY2hT
dGFydFNjYWxlID0gLTE7CisgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLnJlc2V0KCk7Cit9CisK
K1FSZWN0RiBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNv
bnN0Cit7CisgICAgY29uc3QgUVJlY3RGIHZpc2libGVSZWN0KG1fdmlld3BvcnRJdGVtLT5ib3Vu
ZGluZ1JlY3QoKS5pbnRlcnNlY3RlZChtX3BhZ2VJdGVtLT5ib3VuZGluZ1JlY3QoKSkpOworICAg
IHJldHVybiBtX3ZpZXdwb3J0SXRlbS0+bWFwUmVjdFRvV2ViQ29udGVudCh2aXNpYmxlUmVjdCk7
Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmRpZENoYW5nZUNvbnRlbnRzU2l6
ZSgpCit7CisgICAgLy8gRW1pdCBmb3IgdGVzdGluZyBwdXJwb3Nlcywgc28gdGhhdCBpdCBjYW4g
YmUgdmVyaWZpZWQgdGhhdAorICAgIC8vIHdlIGRpZG4ndCBkbyBzY2FsZSBhZGp1c3RtZW50Lgor
ICAgIGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPmNvbnRlbnRz
U2NhbGVDb21taXR0ZWQoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6ZGlk
Q2hhbmdlVmlzaWJsZUNvbnRlbnRzKCkKK3sKKyAgICBxcmVhbCBzY2FsZSA9IG1fcGFnZUl0ZW0t
PmNvbnRlbnRzU2NhbGUoKTsKKworICAgIGlmIChzY2FsZSAhPSBtX2xhc3RDb21taXR0ZWRTY2Fs
ZSkKKyAgICAgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+
Y29udGVudHNTY2FsZUNvbW1pdHRlZCgpOworICAgIG1fbGFzdENvbW1pdHRlZFNjYWxlID0gc2Nh
bGU7CisKKyAgICAvLyBFbnN1cmUgdGhhdCB1cGRhdGVQYWludE5vZGUgaXMgYWx3YXlzIGNhbGxl
ZCBiZWZvcmUgcGFpbnRpbmcuCisgICAgbV9wYWdlSXRlbS0+dXBkYXRlKCk7Cit9CisKK3ZvaWQg
Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcygpCit7
CisgICAgLy8gTWFrZSBzdXJlIHdlIGFwcGx5IHRoZSBuZXcgaW5pdGlhbCBzY2FsZSB3aGVuIGRl
ZmVycmluZyBlbmRzLgorICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQobV92aWV3cG9y
dEhhbmRsZXIpOworCisgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRl
c3QoKS0+ZGV2aWNlUGl4ZWxSYXRpb0NoYW5nZWQoKTsKKyAgICBlbWl0IG1fdmlld3BvcnRJdGVt
LT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT52aWV3cG9ydENoYW5nZWQoKTsKK30KKwordm9pZCBW
aWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dXBkYXRlVmlld3BvcnQoY29uc3QgUVBvaW50RiYgdHJh
amVjdG9yeSwgcXJlYWwgc2NhbGUpCit7CisgICAgRmxvYXRSZWN0IGN1cnJlbnRWaXNpYmxlUmVj
dCh2aXNpYmxlQ29udGVudHNSZWN0KCkpOworICAgIGZsb2F0IHZpZXdwb3J0U2NhbGUgPSAoc2Nh
bGUgPCAwKSA/IHZpZXdwb3J0U2NhbGVGb3JSZWN0KGN1cnJlbnRWaXNpYmxlUmVjdCkgOiBzY2Fs
ZTsKKyAgICBtX3ZpZXdwb3J0SGFuZGxlci0+YWRqdXN0VmlzaWJsZUNvbnRlbnRzUmVjdChjdXJy
ZW50VmlzaWJsZVJlY3QsIHZpZXdwb3J0U2NhbGUsIHRyYWplY3RvcnkpOworfQorCit2b2lkIFZp
ZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzY2FsZUNvbnRlbnQocXJlYWwgaXRlbVNjYWxlLCBjb25z
dCBRUG9pbnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzKQoreworICAgIFFQb2ludEYgb2xkUGlu
Y2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50KGNl
bnRlckluQ1NTQ29vcmRpbmF0ZXMpOworICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2NhbGUo
aXRlbVNjYWxlKTsKKyAgICBRUG9pbnRGIG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCA9IG1fdmll
d3BvcnRJdGVtLT5tYXBGcm9tV2ViQ29udGVudChjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzKTsKKyAg
ICBtX3ZpZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyhtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBv
cygpICsgKG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCAtIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9y
dCkpOworfQorCitmbG9hdCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dmlld3BvcnRTY2FsZUZv
clJlY3QoY29uc3QgUVJlY3RGJiByZWN0KSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4obV92aWV3cG9ydEl0ZW0tPndpZHRoKCkpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJl
Y3Qud2lkdGgoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjaW5jbHVkZSAibW9j
X1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2U1OTE3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5oCkBAIC0wLDAgKzEsMTU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmphbWluIFBvdWxh
aW4gPGJlbmphbWluQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0X2gKKyNkZWZpbmUgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXRfaAorCisjaW5jbHVkZSAiVmll
d3BvcnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5kbGVyQ2xpZW50LmgiCisjaW5j
bHVkZSA8UU9iamVjdD4KKyNpbmNsdWRlIDxRUG9pbnRGPgorI2luY2x1ZGUgPFFTY29wZWRQb2lu
dGVyPgorI2luY2x1ZGUgPFFWYXJpYW50PgorI2luY2x1ZGUgPFFWYXJpYW50QW5pbWF0aW9uPgor
CitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFRdWlja1dlYlBhZ2U7CitjbGFzcyBRUXVpY2tX
ZWJWaWV3OworY2xhc3MgUVJlY3RGOworUVRfRU5EX05BTUVTUEFDRQorCitjbGFzcyBRV2ViS2l0
VGVzdDsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBWaWV3cG9ydEhhbmRsZXJDbGllbnQgeworICAg
IFFfT0JKRUNUCisKK3B1YmxpYzoKKworICAgIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0KFFRdWlj
a1dlYlZpZXcqLCBRUXVpY2tXZWJQYWdlKik7CisgICAgflZpZXdwb3J0SGFuZGxlckNsaWVudFF0
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvbkluVmlld0Nvb3JkaW5hdGVzKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNTY2FsZShmbG9hdCB2aWV3cG9ydFNjYWxlLCBib29sIGlzSW5pdGlhbFNjYWxlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNSZWN0VG9OZWFyZXN0VmFsaWRCb3VuZHMoKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Vmlld3BvcnRVcGRhdGUoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdl
VmlzaWJsZUNvbnRlbnRzKCk7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0
cmlidXRlcygpOworCisgICAgdmlydHVhbCB2b2lkIHNldFZpZXdwb3J0SGFuZGxlcihWaWV3cG9y
dEhhbmRsZXIqIGhhbmRsZXIpIHsgbV92aWV3cG9ydEhhbmRsZXIgPSBoYW5kbGVyOyB9CisKKyAg
ICAvLyBBZGRpdGlvbmFsIG1ldGhvZHMgY3VycmVudGx5IG9ubHkgcmVsZXZhbnQgaW4gdGhlIFFR
dWljayBjb250ZXh0LgorICAgIHZvaWQgdG91Y2hCZWdpbigpOworICAgIHZvaWQgdG91Y2hFbmQo
KTsKKworICAgIGJvb2wgc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkgY29uc3Q7CisgICAgdm9pZCBj
YW5jZWxTY3JvbGxBbmltYXRpb24oKTsKKworICAgIGJvb2wgcGFuR2VzdHVyZUFjdGl2ZSgpIGNv
bnN0OworICAgIHZvaWQgcGFuR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24s
IHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgdm9pZCBwYW5HZXN0dXJlUmVxdWVz
dFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWls
bGlzKTsKKyAgICB2b2lkIHBhbkdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwg
cWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB2b2lkIHBhbkdlc3R1cmVDYW5jZWxs
ZWQoKTsKKworICAgIGJvb2wgc2NhbGVBbmltYXRpb25BY3RpdmUoKSBjb25zdDsKKyAgICB2b2lk
IGludGVycnVwdFNjYWxlQW5pbWF0aW9uKCk7CisKKyAgICBib29sIHBpbmNoR2VzdHVyZUFjdGl2
ZSgpIGNvbnN0OworICAgIHZvaWQgcGluY2hHZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBw
aW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyk7CisgICAgdm9pZCBwaW5jaEdlc3R1cmVS
ZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5h
dGVzLCBxcmVhbCB0b3RhbFNjYWxlRmFjdG9yKTsKKyAgICB2b2lkIHBpbmNoR2VzdHVyZUVuZGVk
KCk7CisgICAgdm9pZCBwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKTsKKworICAgIHZvaWQgem9vbVRv
QXJlYUdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiB0b3VjaFBvaW50LCBjb25zdCBRUmVjdEYm
IHRhcmdldEFyZWEpOworICAgIHZvaWQgZm9jdXNFZGl0YWJsZUFyZWEoY29uc3QgUVJlY3RGJiBj
YXJldEFyZWEsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSk7CisKK3ByaXZhdGUgUV9TTE9UUzoK
KyAgICAvLyBSZXNwb25kIHRvIGNoYW5nZXMgb2YgcG9zaXRpb24gdGhhdCBhcmUgbm90IGRyaXZl
biBieSB1cy4KKyAgICB2b2lkIHBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCk7CisKKyAgICB2b2lk
IHNjYWxlQW5pbWF0aW9uU3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUsIFFB
YnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUpOworCisgICAgdm9pZCBmbGlja01vdmVTdGFydGVkKCk7
IC8vIENhbGxlZCB3aGVuIHBhbm5pbmcgc3RhcnRzLgorICAgIHZvaWQgZmxpY2tNb3ZlRW5kZWQo
KTsgLy8gICBDYWxsZWQgd2hlbiBwYW5uaW5nICgrIGtpbmV0aWMgYW5pbWF0aW9uKSBlbmRzLgor
Citwcml2YXRlOgorICAgIGNsYXNzIFNjYWxlQW5pbWF0aW9uIDogcHVibGljIFFWYXJpYW50QW5p
bWF0aW9uIHsKKyAgICAgICAgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQqIG1faGFuZGxlckNsaWVu
dDsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjYWxlQW5pbWF0aW9uKFZpZXdwb3J0SGFuZGxlckNs
aWVudFF0KiBwYXJlbnQpCisgICAgICAgICAgICA6IFFWYXJpYW50QW5pbWF0aW9uKHBhcmVudCkK
KyAgICAgICAgICAgICwgbV9oYW5kbGVyQ2xpZW50KHBhcmVudCkKKyAgICAgICAgeyB9CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUN1cnJlbnRWYWx1ZShjb25zdCBRVmFyaWFudCYpOwor
ICAgIH07CisKKyAgICBzdHJ1Y3QgU2NhbGVTdGFja0l0ZW0geworICAgICAgICBTY2FsZVN0YWNr
SXRlbShxcmVhbCBzY2FsZSwgcXJlYWwgeFBvc2l0aW9uKQorICAgICAgICAgICAgOiBzY2FsZShz
Y2FsZSkKKyAgICAgICAgICAgICwgeFBvc2l0aW9uKHhQb3NpdGlvbikKKyAgICAgICAgeyB9CisK
KyAgICAgICAgcXJlYWwgc2NhbGU7CisgICAgICAgIHFyZWFsIHhQb3NpdGlvbjsKKyAgICB9Owor
CisgICAgZnJpZW5kIGNsYXNzIFNjYWxlQW5pbWF0aW9uOworICAgIGZyaWVuZCBjbGFzcyA6OlFX
ZWJLaXRUZXN0OworCisgICAgVmlld3BvcnRIYW5kbGVyKiBtX3ZpZXdwb3J0SGFuZGxlcjsKKyAg
ICBRUXVpY2tXZWJWaWV3KiBjb25zdCBtX3ZpZXdwb3J0SXRlbTsKKyAgICBRUXVpY2tXZWJQYWdl
KiBjb25zdCBtX3BhZ2VJdGVtOworCisgICAgYm9vbCBhbGxvd3NVc2VyU2NhbGluZygpIGNvbnN0
OworICAgIHFyZWFsIGRldmljZVBpeGVsUmF0aW8oKSBjb25zdDsKKyAgICBxcmVhbCBtaW5pbXVt
Q29udGVudHNTY2FsZSgpIGNvbnN0OworICAgIHFyZWFsIG1heGltdW1Db250ZW50c1NjYWxlKCkg
Y29uc3Q7CisgICAgcXJlYWwgY3VycmVudENvbnRlbnRzU2NhbGUoKSBjb25zdDsKKyAgICBRU2l6
ZUYgY29udGVudHNMYXlvdXRTaXplKCkgY29uc3Q7CisKKyAgICBmbG9hdCB2aWV3cG9ydFNjYWxl
Rm9yUmVjdChjb25zdCBRUmVjdEYmKSBjb25zdDsKKyAgICBRUmVjdEYgdmlzaWJsZUNvbnRlbnRz
UmVjdCgpIGNvbnN0OworICAgIFFSZWN0RiBuZWFyZXN0VmFsaWRWaXNpYmxlQ29udGVudHNSZWN0
KCkgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KGNvbnN0IFFQb2ludEYmIHRyYWpl
Y3RvcnkgPSBRUG9pbnRGKCksIHFyZWFsIHNjYWxlID0gLTEpOworICAgIHZvaWQgc2V0Q29udGVu
dFJlY3RWaXNpYmxlUG9zaXRpb25BdFNjYWxlKGNvbnN0IFFQb2ludEYmIGxvY2F0aW9uLCBxcmVh
bCBpdGVtU2NhbGUpOworICAgIHZvaWQgYW5pbWF0ZUNvbnRlbnRSZWN0VmlzaWJsZShjb25zdCBR
UmVjdEYmIGNvbnRlbnRSZWN0KTsKKyAgICB2b2lkIHNjYWxlQ29udGVudChxcmVhbCBpdGVtU2Nh
bGUsIGNvbnN0IFFQb2ludEYmIGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMgPSBRUG9pbnRGKCkpOwor
CisgICAgUVNjb3BlZFBvaW50ZXI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV9zY2FsZVVwZGF0
ZURlZmVycmVyOworICAgIFFTY29wZWRQb2ludGVyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1f
c2Nyb2xsVXBkYXRlRGVmZXJyZXI7CisgICAgUVNjb3BlZFBvaW50ZXI8Vmlld3BvcnRVcGRhdGVE
ZWZlcnJlcj4gbV90b3VjaFVwZGF0ZURlZmVycmVyOworICAgIFFTY29wZWRQb2ludGVyPFZpZXdw
b3J0VXBkYXRlRGVmZXJyZXI+IG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXI7CisKKyAgICBTY2Fs
ZUFuaW1hdGlvbiogbV9zY2FsZUFuaW1hdGlvbjsKKyAgICBRUG9pbnRGIG1fbGFzdFBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOworICAgIFFQb2ludEYgbV9sYXN0U2Nyb2xsUG9zaXRp
b247CisgICAgcXJlYWwgbV9waW5jaFN0YXJ0U2NhbGU7CisgICAgcXJlYWwgbV9sYXN0Q29tbWl0
dGVkU2NhbGU7CisgICAgcXJlYWwgbV96b29tT3V0U2NhbGU7CisgICAgUUxpc3Q8U2NhbGVTdGFj
a0l0ZW0+IG1fc2NhbGVTdGFjazsKKyAgICBib29sIG1faWdub3JlVmlld3BvcnRDaGFuZ2VzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBWaWV3cG9ydEhhbmRsZXJD
bGllbnRRdF9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggYzgyYTNhNS4uMjUwMDkxZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA5LTAzICBBbmRyYXMgQmVj
c2kgIDxhbmRyYXMuYmVjc2lAbm9raWEuY29tPgorCisgICAgICAgIFtXSzJdIE1ha2UgW1F0XVZp
ZXdwb3J0SGFuZGxlciBjcm9zcyBwbGF0Zm9ybQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgaW5pdGlhbCBzY2FsZSBmcm9tIHZpZXdwb3J0IGlu
Zm8gaXRlbSBzaW5jZSBpdCBpcworICAgICAgICBzZXQgdG8gLTEgYWZ0ZXIgYXBwbGllZCB0aHVz
IGl0IGRvZXMgbm90IGhvbGQgYW55IHZhbHVhYmxlCisgICAgICAgIGluZm9ybWF0aW9uLgorCisg
ICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sOgorCiAyMDEy
LTA5LTAzICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAK
ICAgICAgICAgW0VGTF0gRml4IHJlc2l6aW5nIGlzc3VlcyByZWxhdGVkIHRvIFVSTCBiYXIgaW4g
TWluaWJyb3dzZXIgLyBFV2ViTGF1bmNoZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2Vy
L3F0L3FtbC9WaWV3cG9ydEluZm9JdGVtLnFtbCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9W
aWV3cG9ydEluZm9JdGVtLnFtbAppbmRleCA5MmEyYTA0Li42ODRjYzcwOSAxMDA2NDQKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sCisrKyBiL1Rvb2xz
L01pbmlCcm93c2VyL3F0L3FtbC9WaWV3cG9ydEluZm9JdGVtLnFtbApAQCAtODQsMTEgKzg0LDYg
QEAgSXRlbSB7CiAKICAgICAgICAgICAgICAgICBDb2x1bW4gewogICAgICAgICAgICAgICAgICAg
ICBUZXh0IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICJJbml0aWFsIHNjYWxlOiAi
ICsgZm9ybWF0U2NhbGUodGVzdC52aWV3cG9ydC5pbml0aWFsU2NhbGUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBmb250LmZhbWlseTogdGV4dEJveC5mb250RmFtaWx5Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvcjogdGV4dEJveC5mb250Q29sb3IKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBUZXh0IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHQ6ICJNaW5pbXVtIHNjYWxlOiAiICsgZm9ybWF0U2NhbGUodGVzdC52aWV3cG9ydC5taW5pbXVt
U2NhbGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb250LmZhbWlseTogdGV4dEJveC5mb250
RmFtaWx5CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGV4dEJveC5mb250Q29sb3IK
LS0gCjEuNy4xMgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161917</attachid>
            <date>2012-09-03 06:34:31 -0700</date>
            <delta_ts>2012-09-04 08:09:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91257-20120903153452.patch</filename>
            <type>text/plain</type>
            <size>107287</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMTEzMjc3ZDExZjA5NzJl
Yzg3ZmE5NGQ2YWEyMTM1YzRiNGQwM2RiNi4uMmRhZTdjMTQ1YmNhMjU5YWVkZDQyOGNkZTA4NjQy
MjlkNjQzMDc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NiBAQAorMjAxMi0wOS0wMyAgQW5k
cmFzIEJlY3NpICA8YW5kcmFzLmJlY3NpQG5va2lhLmNvbT4KKworICAgICAgICBbV0syXSBNYWtl
IFtRdF1WaWV3cG9ydEhhbmRsZXIgY3Jvc3MgcGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IFF0Vmlld3BvcnRIYW5kbGVyIGlu
Y2x1ZGVzIGJlaGF2aW91ciB0aGF0IGlzIG5vdAorICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpYywg
dG9nZXRoZXIgd2l0aCBob29rcyB0byB0aGUgUXRRdWljayBBUEkKKyAgICAgICAgbGF5ZXIuCisK
KyAgICAgICAgQSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBhbGxv
dyBvdGhlciBwb3J0cworICAgICAgICB0byB1c2UgdGhlIHZpZXdwb3J0IGZ1bmN0aW9uYWxpdHkg
cHJvdmlkZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgcGxhdGZvcm0gaW5k
ZXBlbmRlbnQgVmlld3BvcnRIYW5kbGVyCisgICAgICAgIGNsYXNzIHRoYXQgaXMgcmVzcG9uc2li
bGUgZm9yIGhhbmRsaW5nIHJlcXVlc3RzIGZyb20gdGhlIHdlYgorICAgICAgICBwcm9jZXNzIChl
Zy4gY29udGVudCBzaXplIGNoYW5nZXMsIHZpZXdwb3J0IGF0dHJpYnV0ZXMgY2hhbmdlcworICAg
ICAgICBhbmQgc2Nyb2xsIHBvc2l0aW9uIHJlcXVlc3RzKS4KKworICAgICAgICBWaWV3cG9ydEhh
bmRsZXIgYWxzbyBhY3RzIGFzIGEgcHJveHkgZm9yIG5vdGlmaWNhdGlvbnMgdG8gdGhlCisgICAg
ICAgIHdlYiBwcm9jZXNzIGZvciBjaGFuZ2VzIGluIHRoZSB2aWV3cG9ydCBzdGF0ZSAoZWcuIHZp
ZXdwb3J0CisgICAgICAgIHNpemUsIHZpc2libGUgcmVjdCwgY29udGVudCBzY2FsZSBhbmQgbW92
ZW1lbnQgdHJhamVjdG9yeSkuCisKKyAgICAgICAgVXBkYXRlcyBvZiB0aGUgdmlld3BvcnQgc3Rh
dGUgYXJlIHB1c2hlZCB0byB0aGUgVmlld3BvcnRIYW5kbGVyCisgICAgICAgIGJ5IGEgcGxhdGZv
cm0gc3BlY2lmaWMgY2xpZW50IGNsYXNzIHdoaWNoIGltcGxlbWVudHMgdGhlCisgICAgICAgIFZp
ZXdwb3J0SGFuZGxlckNsaWVudCBhYnN0cmFjdCBpbnRlcmZhY2UuCisgICAgICAgIFJlcXVlc3Rz
IGZyb20gdGhlIHdlYiBwcm9jZXNzIGFyZSBhbHNvIGFjdGVkIG9uIGJ5IHRoZSBjbGllbnQKKyAg
ICAgICAgd2hpY2ggcHJvdmlkZXMgaG9va3MgdG8gdGhlIFF0IEFQSSBsYXllci4KKworICAgICAg
ICBGb3Igbm93IG9ubHkgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQgaW1wbGVtZW50cyB0aGUKKyAg
ICAgICAgY2xpZW50IGludGVyZmFjZSBhbmQgaXMgcmVzcG9uc2libGUgZm9yIFFRdWljayBzcGVj
aWZpYworICAgICAgICBiZWhhdmlvdXIgKGdlc3R1cmVzLCBhbmltYXRpb25zIGV0YykuCisKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vi
cGFnZV9wX3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3Bw
OgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6Om9uQ29tcG9uZW50Q29tcGxldGUpOgor
ICAgICAgICAoUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6On5RUXVpY2tXZWJWaWV3Rmxp
Y2thYmxlUHJpdmF0ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6
ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlj
a2FibGVQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUpOgorICAgICAgICAoUVF1aWNrV2ViVmll
d0ZsaWNrYWJsZVByaXZhdGU6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKToKKyAgICAgICAgKFFRdWlj
a1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpkaWRDaGFuZ2VDb250ZW50c1NpemUpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6CisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaDoKKyAgICAg
ICAgKFdlYktpdCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6dmlld3BvcnRIYW5k
bGVyQ2xpZW50KToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlKToKKyAgICAgICAgKFFR
dWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3F3ZWJraXR0ZXN0LmNwcDoKKyAgICAgICAgKFFXZWJLaXRUZXN0Ojp2aWV3cG9ydCk6CisgICAg
ICAgIChRV2ViS2l0VGVzdDo6ZGV2aWNlUGl4ZWxSYXRpbyk6CisgICAgICAgIChRV2ViS2l0VGVz
dDo6Y29udGVudHNTY2FsZSk6CisgICAgICAgICogVUlQcm9jZXNzL1ZpZXdwb3J0SGFuZGxlci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Ym91bmQpOgor
ICAgICAgICAoV2ViS2l0OjpmdXp6eUNvbXBhcmUpOgorICAgICAgICAoV2ViS2l0Ojpib3VuZFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6Vmlld3Bv
cnRVcGRhdGVEZWZlcnJlcik6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0VXBkYXRlRGVmZXJy
ZXI6On5WaWV3cG9ydFVwZGF0ZURlZmVycmVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyOjpWaWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXI6OmNvbnZlcnRGcm9tVmlld3BvcnQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXI6OmNvbnZlcnRUb1ZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVy
Ojppbm5lckJvdW5kZWRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyOjpvdXRlckJvdW5kZWRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6Vmll
d3BvcnRIYW5kbGVyOjpkaWRDaGFuZ2VDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0OjpW
aWV3cG9ydEhhbmRsZXI6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6
Vmlld3BvcnRIYW5kbGVyOjphZGp1c3RWaWV3cG9ydFNpemUpOgorICAgICAgICAoV2ViS2l0OjpW
aWV3cG9ydEhhbmRsZXI6OmFkanVzdFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpWaWV3cG9ydEhhbmRsZXI6OnN5bmNWaXNpYmxlQ29udGVudHMpOgorICAgICAgICAoV2Vi
S2l0OjpWaWV3cG9ydEhhbmRsZXI6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlcjo6c3VzcGVuZENvbnRlbnQpOgorICAgICAgICAo
V2ViS2l0OjpWaWV3cG9ydEhhbmRsZXI6OnJlc3VtZUNvbnRlbnQpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3cG9ydEhhbmRsZXI6OnBvc2l0aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL1ZpZXdwb3J0SGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIp
OgorICAgICAgICAoVmlld3BvcnRIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyOjp+Vmlld3BvcnRIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5k
bGVyOjpoYXNTdXNwZW5kZWRDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5k
bGVyOjpoYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXI6OmFsbG93c1VzZXJTY2FsaW5nKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVy
Ojpjb250ZW50c0xheW91dFNpemUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXI6
OmRldmljZVBpeGVsUmF0aW8pOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXI6Om1p
bmltdW1Db250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyOjpt
YXhpbXVtQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlcjo6
c2V0SGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvVmlld3BvcnRIYW5k
bGVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoVmlld3BvcnRIYW5kbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6Vmll
d3BvcnRIYW5kbGVyQ2xpZW50Ojp+Vmlld3BvcnRIYW5kbGVyQ2xpZW50KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0
R2VzdHVyZVJlY29nbml6ZXI6OnZpZXdwb3J0SGFuZGxlcik6CisgICAgICAgICogVUlQcm9jZXNz
L3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICog
VUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vz
cy9xdC9RdFZpZXdwb3J0SGFuZGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNz
L3F0L1F0Vmlld3BvcnRIYW5kbGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZUV2
ZW50SGFuZGxlcjo6c2V0Vmlld3BvcnRIYW5kbGVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQv
UXRXZWJQYWdlRXZlbnRIYW5kbGVyLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlRXZlbnRIYW5k
bGVyOjp2aWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9WaWV3cG9ydEhh
bmRsZXJDbGllbnRRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0KToK
KyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OlNjYWxlQW5pbWF0aW9u
Ojp1cGRhdGVDdXJyZW50VmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJD
bGllbnRRdDo6flZpZXdwb3J0SGFuZGxlckNsaWVudFF0KToKKyAgICAgICAgKFdlYktpdDo6Vmll
d3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNldENvbnRlbnRSZWN0VmlzaWJsZVBvc2l0aW9uQXRTY2Fs
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjphbmltYXRlQ29u
dGVudFJlY3RWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6OmZsaWNrTW92ZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJD
bGllbnRRdDo6ZmxpY2tNb3ZlRW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6cGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpW
aWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dG91Y2hCZWdpbik6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp0b3VjaEVuZCk6CisgICAgICAg
IChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojpmb2N1c0VkaXRhYmxlQXJlYSk6Cisg
ICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp6b29tVG9BcmVhR2VzdHVy
ZUVuZGVkKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6Om5lYXJl
c3RWYWxpZFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhh
bmRsZXJDbGllbnRRdDo6c2V0Q29udGVudHNQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlZp
ZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktp
dDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNldENvbnRlbnRzUmVjdFRvTmVhcmVzdFZhbGlk
Qm91bmRzKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnJlcXVl
c3RWaWV3cG9ydFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0OjphbGxvd3NVc2VyU2NhbGluZyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxl
ckNsaWVudFF0OjpkZXZpY2VQaXhlbFJhdGlvKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ6Om1pbmltdW1Db250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6
Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6Om1heGltdW1Db250ZW50c1NjYWxlKToKKyAgICAgICAg
KFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmN1cnJlbnRDb250ZW50c1NjYWxlKToK
KyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmNvbnRlbnRzTGF5b3V0
U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzY3JvbGxB
bmltYXRpb25BY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRR
dDo6cGFuR2VzdHVyZUFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNs
aWVudFF0OjpwYW5HZXN0dXJlU3RhcnRlZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFu
ZGxlckNsaWVudFF0OjpwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwYW5HZXN0dXJlRW5kZWQpOgorICAgICAgICAoV2Vi
S2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGFuR2VzdHVyZUNhbmNlbGxlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzY2FsZUFuaW1hdGlvbkFjdGl2
ZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpjYW5jZWxTY3Jv
bGxBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6
aW50ZXJydXB0U2NhbGVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6cGluY2hHZXN0dXJlQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVFbmRl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwaW5jaEdlc3R1
cmVDYW5jZWxsZWQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6
dmlzaWJsZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNs
aWVudFF0OjpkaWRDaGFuZ2VDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9y
dEhhbmRsZXJDbGllbnRRdDo6ZGlkQ2hhbmdlVmlzaWJsZUNvbnRlbnRzKToKKyAgICAgICAgKFdl
YktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp1cGRhdGVWaWV3
cG9ydCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpzY2FsZUNv
bnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dmlld3Bv
cnRTY2FsZUZvclJlY3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJD
bGllbnRRdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChWaWV3cG9ydEhh
bmRsZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlckNsaWVudFF0
OjpzZXRWaWV3cG9ydEhhbmRsZXIpOgorICAgICAgICAoU2NhbGVBbmltYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6U2NhbGVBbmltYXRpb246OlNjYWxl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OlNj
YWxlU3RhY2tJdGVtOjpTY2FsZVN0YWNrSXRlbSk6CisgICAgICAgIChTY2FsZVN0YWNrSXRlbSk6
CisKIDIwMTItMDktMDMgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIFNraXAgRVdLMlVuaXRUZXN0QmFzZS5ld2tfY29v
a2llX21hbmFnZXJfcGVybWFuZW50X3N0b3JhZ2UgQVBJIHRlc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IDIx
ZTJkYzE0ZmM4ZjE0MmRiY2FmODc4N2IxOTUzNDZhMzQ0MTdjZjguLjFlNzAyNWVlNTQ2MTMwMzI4
NzdlNGQxZDQ4M2YzMDEyNjMzNzVhMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Rhcmdl
dC5wcmkKKysrIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpAQCAtMjE5LDYgKzIxOSw4IEBA
IEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9Qcm9jZXNzTW9kZWwuaCBcCiAgICAgVUlQcm9j
ZXNzL1Jlc3BvbnNpdmVuZXNzVGltZXIuaCBcCiAgICAgVUlQcm9jZXNzL1RleHRDaGVja2VyLmgg
XAorICAgIFVJUHJvY2Vzcy9WaWV3cG9ydEhhbmRsZXIuaCBcCisgICAgVUlQcm9jZXNzL1ZpZXdw
b3J0SGFuZGxlckNsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvVmlzaXRlZExpbmtQcm92aWRlci5o
IFwKICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5oIFwKICAg
ICBVSVByb2Nlc3MvV2ViQmFja0ZvcndhcmRMaXN0LmggXApAQCAtNTYwLDYgKzU2Miw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL3F0L1BsdWdpblByb2Nlc3NQcm94eVF0
LmNwcCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4LmNw
cCBcCiAgICAgVUlQcm9jZXNzL1Jlc3BvbnNpdmVuZXNzVGltZXIuY3BwIFwKKyAgICBVSVByb2Nl
c3MvVmlld3BvcnRIYW5kbGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlk
ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5j
cHAgXAogICAgIFVJUHJvY2Vzcy9XZWJCYWNrRm9yd2FyZExpc3QuY3BwIFwKQEAgLTc3OSw5ICs3
ODIsOSBAQCBjb250YWlucyhERUZJTkVTLCBIQVZFX1FUUVVJQ0s9MSkgewogICAgICAgICBVSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlUG9saWN5Q2xpZW50LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQv
UXRXZWJQYWdlU0dOb2RlLmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlVUlDbGll
bnQuaCBcCi0gICAgICAgIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oIFwKICAgICAg
ICAgVUlQcm9jZXNzL3F0L1F0V2ViVW5kb0NvbnRyb2xsZXIuaCBcCiAgICAgICAgIFVJUHJvY2Vz
cy9xdC9RdFdlYkljb25EYXRhYmFzZUNsaWVudC5oIFwKKyAgICAgICAgVUlQcm9jZXNzL3F0L1Zp
ZXdwb3J0SGFuZGxlckNsaWVudFF0LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvV2ViQ29udGV4
dE1lbnVQcm94eVF0LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvV2ViR2VvbG9jYXRpb25Qcm92
aWRlclF0LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvV2ViUG9wdXBNZW51UHJveHlRdC5oCkBA
IC04MTMsNyArODE2LDcgQEAgY29udGFpbnMoREVGSU5FUywgSEFWRV9RVFFVSUNLPTEpIHsKICAg
ICAgICAgVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICAgICAg
VUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAgICAgICBVSVBy
b2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5jcHAgXAotICAgICAgICBVSVByb2Nlc3Mv
cXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwIFwKKyAgICAgICAgVUlQcm9jZXNzL3F0L1ZpZXdwb3J0
SGFuZGxlckNsaWVudFF0LmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVu
dVByb3h5UXQuY3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYkdlb2xvY2F0aW9uUHJvdmlk
ZXJRdC5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvcXQvV2ViUG9wdXBNZW51UHJveHlRdC5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJw
YWdlX3BfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdl
X3BfcC5oCmluZGV4IGFkMWM2YWQzZjMwOGRlNjM4OTViN2Q2YjZhOGFmNjE2NTk3ZjhhZWUuLmM3
YWM4NmMzZDVjMmYyN2ZiMjVlYjU3ZTliNGMxMGUwZmQwMzE4NmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKQEAgLTI2LDcg
KzI2LDYgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFz
cyBRdFZpZXdwb3J0SGFuZGxlcjsKIGNsYXNzIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAK
aW5kZXggZWRlYzhjN2YyNmVmYmNiMGE2Yzg4Zjk0ZWNlZjIzMGFjZjgzNThiMS4uMzEwZjQ5ZGZl
YjVmYTBhYTQ4NGU2Y2FlNzljNGM0NzgwY2ZkMzVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC0yNSwxMyArMjUsMTMgQEAK
ICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5SW1wbC5oIgogI2luY2x1ZGUgIlF0RGlhbG9nUnVu
bmVyLmgiCiAjaW5jbHVkZSAiUXREb3dubG9hZE1hbmFnZXIuaCIKLSNpbmNsdWRlICJRdFZpZXdw
b3J0SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIlF0V2Vi
RXJyb3IuaCIKICNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZUNsaWVudC5oIgogI2luY2x1ZGUg
IlF0V2ViUGFnZUV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUxvYWRDbGllbnQu
aCIKICNpbmNsdWRlICJRdFdlYlBhZ2VQb2xpY3lDbGllbnQuaCIKKyNpbmNsdWRlICJWaWV3cG9y
dEhhbmRsZXJDbGllbnRRdC5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2lm
IEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQogI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5Lmgi
CkBAIC0zMjYsOCArMzI2LDkgQEAgdm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6aW5pdGlhbGl6
ZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGEKIHZvaWQgUVF1aWNr
V2ViVmlld1ByaXZhdGU6Om9uQ29tcG9uZW50Q29tcGxldGUoKQogewogICAgIFFfUShRUXVpY2tX
ZWJWaWV3KTsKLSAgICBtX3ZpZXdwb3J0SGFuZGxlci5yZXNldChuZXcgUXRWaWV3cG9ydEhhbmRs
ZXIod2ViUGFnZVByb3h5LmdldCgpLCBxLCBwYWdlVmlldy5kYXRhKCkpKTsKLSAgICBwYWdlVmll
dy0+ZXZlbnRIYW5kbGVyKCktPnNldFZpZXdwb3J0SGFuZGxlcihtX3ZpZXdwb3J0SGFuZGxlci5k
YXRhKCkpOworICAgIG1fdmlld3BvcnRIYW5kbGVyQ2xpZW50LnJlc2V0KG5ldyBWaWV3cG9ydEhh
bmRsZXJDbGllbnRRdChxLCBwYWdlVmlldy5kYXRhKCkpKTsKKyAgICBtX3ZpZXdwb3J0SGFuZGxl
ci5yZXNldChuZXcgVmlld3BvcnRIYW5kbGVyKHdlYlBhZ2VQcm94eS5nZXQoKSwgbV92aWV3cG9y
dEhhbmRsZXJDbGllbnQuZGF0YSgpKSk7CisgICAgcGFnZVZpZXctPmV2ZW50SGFuZGxlcigpLT5z
ZXRWaWV3cG9ydEhhbmRsZXIobV92aWV3cG9ydEhhbmRsZXJDbGllbnQuZGF0YSgpKTsKIH0KIAog
dm9pZCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6c2V0VHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wg
ZW5hYmxlKQpAQCAtODU2LDcgKzg1Nyw3IEBAIFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRl
OjpRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZShRUXVpY2tXZWJWaWV3KiB2aWV3CiAKIFFR
dWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjp+UVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZh
dGUoKQogewotICAgIG1fdmlld3BvcnRIYW5kbGVyLT5kaXNjb25uZWN0KCk7CisgICAgbV92aWV3
cG9ydEhhbmRsZXJDbGllbnQtPmRpc2Nvbm5lY3QoKTsKIH0KIAogdm9pZCBRUXVpY2tXZWJWaWV3
RmxpY2thYmxlUHJpdmF0ZTo6aW5pdGlhbGl6ZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQ
YWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQpAQCAtODc1LDI4ICs4NzYsMjggQEAgdm9pZCBRUXVp
Y2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6b25Db21wb25lbnRDb21wbGV0ZSgpCiB2b2lkIFFR
dWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMo
Y29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiBuZXdBdHRyaWJ1dGVzKQogewogICAg
IGlmIChtX3ZpZXdwb3J0SGFuZGxlcikKLSAgICAgICAgbV92aWV3cG9ydEhhbmRsZXItPnZpZXdw
b3J0QXR0cmlidXRlc0NoYW5nZWQobmV3QXR0cmlidXRlcyk7CisgICAgICAgIG1fdmlld3BvcnRI
YW5kbGVyLT5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMobmV3QXR0cmlidXRlcyk7CiB9CiAK
IHZvaWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnVwZGF0ZVZpZXdwb3J0U2l6ZSgp
CiB7Ci0gICAgLy8gRklYTUU6IEV4YW1pbmUgd2h5IHRoZXJlIGlzIG5vdCBhbiB2aWV3cG9ydEhh
bmRsZXIgaGVyZSBpbiB0aGUgYmVnaW5uaW5nLgorICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKKwog
ICAgIGlmIChtX3ZpZXdwb3J0SGFuZGxlcikKLSAgICAgICAgbV92aWV3cG9ydEhhbmRsZXItPnZp
ZXdwb3J0SXRlbVNpemVDaGFuZ2VkKCk7CisgICAgICAgIG1fdmlld3BvcnRIYW5kbGVyLT5hZGp1
c3RWaWV3cG9ydFNpemUoUVNpemVGKHEtPndpZHRoKCksIHEtPmhlaWdodCgpKSk7CiB9CiAKIHZv
aWQgUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNv
bnN0IFFQb2ludCYgcG9zKQogewotICAgIG1fdmlld3BvcnRIYW5kbGVyLT5wYWdlQ29udGVudFBv
c2l0aW9uUmVxdWVzdGVkKHBvcyk7CisgICAgaWYgKG1fdmlld3BvcnRIYW5kbGVyKQorICAgICAg
ICBtX3ZpZXdwb3J0SGFuZGxlci0+cGFnZURpZFJlcXVlc3RTY3JvbGwocG9zKTsKIH0KIAogdm9p
ZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNv
bnN0IFFTaXplJiBuZXdTaXplKQogewotICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKLQogICAgIHBh
Z2VWaWV3LT5zZXRDb250ZW50c1NpemUobmV3U2l6ZSk7IC8vIGVtaXRzIGNvbnRlbnRzU2l6ZUNo
YW5nZWQoKQogICAgIFFRdWlja1dlYlZpZXdQcml2YXRlOjpkaWRDaGFuZ2VDb250ZW50c1NpemUo
bmV3U2l6ZSk7Ci0gICAgbV92aWV3cG9ydEhhbmRsZXItPnBhZ2VDb250ZW50c1NpemVDaGFuZ2Vk
KG5ld1NpemUsIHEtPmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1NpemUoKSk7CisgICAgbV92aWV3
cG9ydEhhbmRsZXItPmRpZENoYW5nZUNvbnRlbnRzU2l6ZShuZXdTaXplKTsKIH0KIAogdm9pZCBR
UXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6aGFuZGxlTW91c2VFdmVudChRTW91c2VFdmVu
dCogZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Fx
dWlja3dlYnZpZXdfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3X3AuaAppbmRleCA2NDU1MzllNzM3NzAwODdmNTM3MWU2YmM3NWE0ZmZjOWE3MWVhODUx
Li4wNzZjNGJkZWVlNDM0YjAyMzcxN2IwMTM2Yjk5OTBlMTYxZGExNjZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKQEAgLTQ5LDcg
KzQ5LDcgQEAgY2xhc3MgUGxhdGZvcm1XZWJWaWV3OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNs
YXNzIFF0UmVmQ291bnRlZE5ldHdvcmtSZXF1ZXN0RGF0YTsKLWNsYXNzIFF0Vmlld3BvcnRIYW5k
bGVyOworY2xhc3MgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ7CiBjbGFzcyBRdFdlYlBhZ2VMb2Fk
Q2xpZW50OwogY2xhc3MgUXRXZWJQYWdlUG9saWN5Q2xpZW50OwogY2xhc3MgUXRXZWJQYWdlVUlD
bGllbnQ7CkBAIC0yMTcsNyArMjE3LDcgQEAgcHJpdmF0ZToKICAgICBRUXVpY2tXZWJWaWV3RXhw
ZXJpbWVudGFsKiBtX2V4cGVyaW1lbnRhbDsKIAogICAgIGZyaWVuZCBjbGFzcyBRV2ViS2l0VGVz
dDsKLSAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpRdFZpZXdwb3J0SGFuZGxlcjsKKyAgICBmcmll
bmQgY2xhc3MgV2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDsKICAgICBmcmllbmQgY2xh
c3MgV2ViS2l0OjpRdFdlYlBhZ2VMb2FkQ2xpZW50OwogICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6
OlF0V2ViUGFnZVBvbGljeUNsaWVudDsKICAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpRdFdlYlBh
Z2VVSUNsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2Vidmlld19wX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlld19wX3AuaAppbmRleCBmY2I5ZjJhYmUwM2JlYzUzNzc5YTY5NWE3MTI5M2ZlNDBk
NDY4ZWNjLi4xNmVjMjI4Mjk3NjhjNGZmNTUxNzAzYzg5Zjc4ZmE4ZWRjMGI0MmEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5o
CkBAIC0yNCwxMCArMjQsMTAgQEAKICNpbmNsdWRlICJRdFBhZ2VDbGllbnQuaCIKICNpbmNsdWRl
ICJRdFdlYlBhZ2VVSUNsaWVudC5oIgogI2luY2x1ZGUgIlF0V2ViVW5kb0NvbnRyb2xsZXIuaCIK
LQorI2luY2x1ZGUgIlZpZXdwb3J0SGFuZGxlci5oIgorI2luY2x1ZGUgIlZpZXdwb3J0SGFuZGxl
ckNsaWVudC5oIgogI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgogI2luY2x1ZGUgInFxdWlj
a3dlYnBhZ2VfcC5oIgotCiAjaW5jbHVkZSA8UXRDb3JlL1FFbGFwc2VkVGltZXI+CiAjaW5jbHVk
ZSA8UXRDb3JlL1FPYmplY3Q+CiAjaW5jbHVkZSA8UXRDb3JlL1FTY29wZWRQb2ludGVyPgpAQCAt
MzksMTEgKzM5LDEyIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRG93bmxvYWRQcm94eTsK
IGNsYXNzIERyYXdpbmdBcmVhUHJveHk7CiBjbGFzcyBRdERpYWxvZ1J1bm5lcjsKLWNsYXNzIFF0
Vmlld3BvcnRIYW5kbGVyOworY2xhc3MgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ7CiBjbGFzcyBR
dFdlYkNvbnRleHQ7CiBjbGFzcyBRdFdlYkVycm9yOwogY2xhc3MgUXRXZWJQYWdlTG9hZENsaWVu
dDsKIGNsYXNzIFF0V2ViUGFnZVBvbGljeUNsaWVudDsKK2NsYXNzIFZpZXdwb3J0SGFuZGxlcjsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIH0KIApAQCAtODcsNyArODgsNyBAQCBwdWJsaWM6CiAgICAg
aW50IGxvYWRQcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZFByb2dyZXNzOyB9CiAgICAg
dm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKIAotICAgIHZpcnR1YWwgV2ViS2l0OjpRdFZpZXdwb3J0
SGFuZGxlciogdmlld3BvcnRIYW5kbGVyKCkgeyByZXR1cm4gMDsgfQorICAgIFdlYktpdDo6Vmll
d3BvcnRIYW5kbGVyQ2xpZW50UXQqIHZpZXdwb3J0SGFuZGxlckNsaWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlld3BvcnRIYW5kbGVyQ2xpZW50LmRhdGEoKTsgfQogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVWaWV3cG9ydFNpemUoKSB7IH0KICAgICB2b2lkIHVwZGF0ZVRvdWNoVmlld3BvcnRTaXpl
KCk7CiAKQEAgLTE3MCw3ICsxNzEsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgUVNjb3BlZFBvaW50ZXI8
UVF1aWNrV2ViUGFnZT4gcGFnZVZpZXc7CiAgICAgUVF1aWNrV2ViVmlldyogcV9wdHI7CiAKLSAg
ICBRU2NvcGVkUG9pbnRlcjxXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyPiBtX3ZpZXdwb3J0SGFu
ZGxlcjsKKyAgICBRU2NvcGVkUG9pbnRlcjxXZWJLaXQ6OlZpZXdwb3J0SGFuZGxlcj4gbV92aWV3
cG9ydEhhbmRsZXI7CisgICAgUVNjb3BlZFBvaW50ZXI8V2ViS2l0OjpWaWV3cG9ydEhhbmRsZXJD
bGllbnRRdD4gbV92aWV3cG9ydEhhbmRsZXJDbGllbnQ7CisKICAgICBGbGlja2FibGVBeGlzTG9j
a2VyIGF4aXNMb2NrZXI7CiAKICAgICBRUW1sQ29tcG9uZW50KiBhbGVydERpYWxvZzsKQEAgLTIx
OCw3ICsyMjEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uQ29tcG9uZW50Q29tcGxl
dGUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29u
c3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OlF0
Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydEhhbmRsZXIoKSB7IHJldHVybiBtX3ZpZXdwb3J0SGFu
ZGxlci5kYXRhKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgUVBvaW50JiBwb3Mp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0LmNwcApp
bmRleCBmOTJjOWZmY2M4ODllOTBjYmE1N2UwOTM0YWUyZTc2Y2ViNDQ2ZmIyLi4wMGUzNmNjODcx
ZWVlODJhMmFmMjIyNmQ4Y2E4N2Q2MTZiNjUyYmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0LmNwcApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInF3ZWJraXR0ZXN0X3AuaCIKIAotI2luY2x1ZGUgIlF0
Vmlld3BvcnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQuaCIK
ICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3BfcC5oIgogI2luY2x1ZGUgPFFNdXRhYmxlTGlzdEl0
ZXJhdG9yPgogI2luY2x1ZGUgPFFUb3VjaEV2ZW50PgpAQCAtMTQ4LDEyICsxNDgsMTEgQEAgc3Rh
dGljIGlubGluZSBRSnNvbk9iamVjdCB0b0pzb25PYmplY3QoY29uc3QgUVNpemVGJiBzaXplRikK
IFFKc29uT2JqZWN0IFFXZWJLaXRUZXN0Ojp2aWV3cG9ydCgpIGNvbnN0CiB7CiAgICAgUUpzb25P
YmplY3Qgdmlld3BvcnREYXRhOwotICAgIGlmIChRdFZpZXdwb3J0SGFuZGxlciogdmlld3BvcnRI
YW5kbGVyID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5kbGVyKCkpIHsKLSAgICAgICAg
dmlld3BvcnREYXRhLmluc2VydChRTGF0aW4xU3RyaW5nKCJpbml0aWFsU2NhbGUiKSwgdmlld3Bv
cnRIYW5kbGVyLT5tX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlKTsKLSAgICAgICAgdmlld3Bv
cnREYXRhLmluc2VydChRTGF0aW4xU3RyaW5nKCJsYXlvdXRTaXplIiksIHRvSnNvbk9iamVjdChR
U2l6ZUYodmlld3BvcnRIYW5kbGVyLT5tX3Jhd0F0dHJpYnV0ZXMubGF5b3V0U2l6ZSkpKTsKLSAg
ICAgICAgdmlld3BvcnREYXRhLmluc2VydChRTGF0aW4xU3RyaW5nKCJpc1NjYWxhYmxlIiksICEh
dmlld3BvcnRIYW5kbGVyLT5tX3Jhd0F0dHJpYnV0ZXMudXNlclNjYWxhYmxlKTsKLSAgICAgICAg
dmlld3BvcnREYXRhLmluc2VydChRTGF0aW4xU3RyaW5nKCJtaW5pbXVtU2NhbGUiKSwgdmlld3Bv
cnRIYW5kbGVyLT5tX21pbmltdW1TY2FsZSk7Ci0gICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQo
UUxhdGluMVN0cmluZygibWF4aW11bVNjYWxlIiksIHZpZXdwb3J0SGFuZGxlci0+bV9tYXhpbXVt
U2NhbGUpOworICAgIGlmIChjb25zdCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdCogY29uc3Qgdmll
d3BvcnRIYW5kbGVyID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5kbGVyQ2xpZW50KCkp
IHsKKyAgICAgICAgdmlld3BvcnREYXRhLmluc2VydChRTGF0aW4xU3RyaW5nKCJsYXlvdXRTaXpl
IiksIHRvSnNvbk9iamVjdCh2aWV3cG9ydEhhbmRsZXItPmNvbnRlbnRzTGF5b3V0U2l6ZSgpKSk7
CisgICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygiaXNTY2FsYWJsZSIp
LCB2aWV3cG9ydEhhbmRsZXItPmFsbG93c1VzZXJTY2FsaW5nKCkpOworICAgICAgICB2aWV3cG9y
dERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoIm1pbmltdW1TY2FsZSIpLCB2aWV3cG9ydEhhbmRs
ZXItPm1pbmltdW1Db250ZW50c1NjYWxlKCkpOworICAgICAgICB2aWV3cG9ydERhdGEuaW5zZXJ0
KFFMYXRpbjFTdHJpbmcoIm1heGltdW1TY2FsZSIpLCB2aWV3cG9ydEhhbmRsZXItPm1heGltdW1D
b250ZW50c1NjYWxlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZpZXdwb3J0RGF0YS5pbnNl
cnQoUUxhdGluMVN0cmluZygiaW5pdGlhbFNjYWxlIiksIDEuMCk7CiAgICAgICAgIHZpZXdwb3J0
RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygibGF5b3V0U2l6ZSIpLCB0b0pzb25PYmplY3QoUVNp
emVGKCkpKTsKQEAgLTE2NiwxNCArMTY1LDE0IEBAIFFKc29uT2JqZWN0IFFXZWJLaXRUZXN0Ojp2
aWV3cG9ydCgpIGNvbnN0CiAKIFFWYXJpYW50IFFXZWJLaXRUZXN0OjpkZXZpY2VQaXhlbFJhdGlv
KCkgY29uc3QKIHsKLSAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0ID0gbV93ZWJW
aWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5kbGVyKCkpCi0gICAgICAgIHJldHVybiB2aWV3cG9ydC0+
bV9kZXZpY2VQaXhlbFJhdGlvOworICAgIGlmIChjb25zdCBWaWV3cG9ydEhhbmRsZXJDbGllbnRR
dCogY29uc3Qgdmlld3BvcnQgPSBtX3dlYlZpZXdQcml2YXRlLT52aWV3cG9ydEhhbmRsZXJDbGll
bnQoKSkKKyAgICAgICAgcmV0dXJuIHZpZXdwb3J0LT5kZXZpY2VQaXhlbFJhdGlvKCk7CiAgICAg
cmV0dXJuIDEuMDsKIH0KIAogUVZhcmlhbnQgUVdlYktpdFRlc3Q6OmNvbnRlbnRzU2NhbGUoKSBj
b25zdAogewotICAgIGlmIChRdFZpZXdwb3J0SGFuZGxlciogdmlld3BvcnQgPSBtX3dlYlZpZXdQ
cml2YXRlLT52aWV3cG9ydEhhbmRsZXIoKSkKLSAgICAgICAgcmV0dXJuIHZpZXdwb3J0LT5jdXJy
ZW50Q1NTU2NhbGUoKTsKKyAgICBpZiAoY29uc3QgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQqIGNv
bnN0IHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5kbGVyQ2xpZW50KCkp
CisgICAgICAgIHJldHVybiB2aWV3cG9ydC0+Y3VycmVudENvbnRlbnRzU2NhbGUoKTsKICAgICBy
ZXR1cm4gMS4wOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdw
b3J0SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlld3BvcnRIYW5kbGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44OTE5YWMxMTYzNjE1OTk1NjEyYjdkNzU3M2YzYWNmMTUyZTA3ODkx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdwb3J0SGFu
ZGxlci5jcHAKQEAgLTAsMCArMSwyNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQmVuamFtaW4gUG91bGFpbiA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEhhbmRsZXIuaCIKKworI2lu
Y2x1ZGUgIlZpZXdwb3J0SGFuZGxlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9h
dFNpemUuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworc3RhdGljIGlubGluZSBmbG9hdCBib3VuZChmbG9hdCBtaW4sIGZsb2F0IHZhbHVlLCBm
bG9hdCBtYXgpCit7CisgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHZhbHVlLCBtaW4sIG1heCk7
Cit9CisKK2Jvb2wgZnV6enlDb21wYXJlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGVwc2lsb24p
Cit7CisgICAgcmV0dXJuIHN0ZDo6YWJzKGEgLSBiKSA8IGVwc2lsb247Cit9CisKK0Zsb2F0UG9p
bnQgYm91bmRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50IG1pblBvc2l0aW9uLCBjb25zdCBGbG9h
dFBvaW50JiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgbWF4UG9zaXRpb24pCit7CisgICAg
cmV0dXJuIEZsb2F0UG9pbnQoYm91bmQobWluUG9zaXRpb24ueCgpLCBwb3NpdGlvbi54KCksIG1h
eFBvc2l0aW9uLngoKSksIGJvdW5kKG1pblBvc2l0aW9uLnkoKSwgcG9zaXRpb24ueSgpLCBtYXhQ
b3NpdGlvbi55KCkpKTsKK30KKworVmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6Vmlld3BvcnRVcGRh
dGVEZWZlcnJlcihWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0SGFuZGxlciwgU3VzcGVuZENvbnRl
bnRGbGFnIHN1c3BlbmRDb250ZW50RmxhZykKKyAgICA6IGhhbmRsZXIodmlld3BvcnRIYW5kbGVy
KQoreworICAgIGhhbmRsZXItPm1fc3VzcGVuZENvdW50Kys7CisKKyAgICAvLyBUaGVyZSBpcyBu
byBuZWVkIHRvIHN1c3BlbmQgY29udGVudCBmb3IgaW1tZWRpYXRlIHVwZGF0ZXMKKyAgICAvLyBv
bmx5IGR1cmluZyBhbmltYXRpb25zIG9yIGxvbmdlciBnZXN0dXJlcy4KKyAgICBpZiAoc3VzcGVu
ZENvbnRlbnRGbGFnID09IERlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpCisgICAgICAgIGhh
bmRsZXItPnN1c3BlbmRDb250ZW50KCk7Cit9CisKK1ZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6On5W
aWV3cG9ydFVwZGF0ZURlZmVycmVyKCkKK3sKKyAgICBpZiAoLS0oaGFuZGxlci0+bV9zdXNwZW5k
Q291bnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBoYW5kbGVyLT5yZXN1bWVDb250ZW50KCk7
CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCB3
aWxsIGJlIHJlcXVlc3RlZC4KKyAgICBoYW5kbGVyLT5zeW5jVmlzaWJsZUNvbnRlbnRzKCk7Cit9
CisKK1ZpZXdwb3J0SGFuZGxlcjo6Vmlld3BvcnRIYW5kbGVyKFdlYktpdDo6V2ViUGFnZVByb3h5
KiBwcm94eSwgVmlld3BvcnRIYW5kbGVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3dlYlBhZ2VQ
cm94eShwcm94eSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fYWxsb3dzVXNlclNj
YWxpbmcoZmFsc2UpCisgICAgLCBtX21pbmltdW1TY2FsZSgxKQorICAgICwgbV9tYXhpbXVtU2Nh
bGUoMSkKKyAgICAsIG1fZGV2aWNlUGl4ZWxSYXRpbygxKQorICAgICwgbV9zdXNwZW5kQ291bnQo
MCkKKyAgICAsIG1faGFzU3VzcGVuZGVkQ29udGVudChmYWxzZSkKKyAgICAsIG1faGFkVXNlcklu
dGVyYWN0aW9uKGZhbHNlKQorICAgICwgbV92aWV3cG9ydFNjYWxlKDEpCit7CisgICAgLy8gSW5p
dGlhbGl6aW5nIFZpZXdwb3J0IFJhdyBBdHRyaWJ1dGVzIHRvIGF2b2lkIHJhbmRvbSBuZWdhdGl2
ZSBzY2FsZSBmYWN0b3JzCisgICAgLy8gaWYgdGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBiZXR3
ZWVuIHRoZSBmaXJzdCBsYXlvdXQgYW5kIHNldHRpbmcgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMg
Zm9yIHRoZSBmaXJzdCB0aW1lLgorICAgIG1fcmF3QXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlv
ID0gbV9kZXZpY2VQaXhlbFJhdGlvOworICAgIG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUg
PSAxOworICAgIG1fcmF3QXR0cmlidXRlcy5taW5pbXVtU2NhbGUgPSBtX21pbmltdW1TY2FsZTsK
KyAgICBtX3Jhd0F0dHJpYnV0ZXMubWF4aW11bVNjYWxlID0gbV9tYXhpbXVtU2NhbGU7CisgICAg
bV9yYXdBdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZSA9IG1fYWxsb3dzVXNlclNjYWxpbmc7CisKKyAg
ICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT5zZXRWaWV3cG9ydEhhbmRsZXIodGhp
cyk7Cit9CisKK2Zsb2F0IFZpZXdwb3J0SGFuZGxlcjo6Y29udmVydEZyb21WaWV3cG9ydChmbG9h
dCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gdmFsdWUgLyBtX2RldmljZVBpeGVsUmF0aW87
Cit9CisKK2Zsb2F0IFZpZXdwb3J0SGFuZGxlcjo6Y29udmVydFRvVmlld3BvcnQoZmxvYXQgdmFs
dWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZhbHVlICogbV9kZXZpY2VQaXhlbFJhdGlvOworfQor
CitGbG9hdFJlY3QgVmlld3BvcnRIYW5kbGVyOjpjb252ZXJ0VG9WaWV3cG9ydChjb25zdCBGbG9h
dFJlY3QmIGNzc1JlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UmVjdCgKKyAgICAgICAg
Y29udmVydFRvVmlld3BvcnQoY3NzUmVjdC54KCkpLAorICAgICAgICBjb252ZXJ0VG9WaWV3cG9y
dChjc3NSZWN0LnkoKSksCisgICAgICAgIGNvbnZlcnRUb1ZpZXdwb3J0KGNzc1JlY3Qud2lkdGgo
KSksCisgICAgICAgIGNvbnZlcnRUb1ZpZXdwb3J0KGNzc1JlY3QuaGVpZ2h0KCkpCisgICAgKTsK
K30KKworZmxvYXQgVmlld3BvcnRIYW5kbGVyOjppbm5lckJvdW5kZWRDb250ZW50c1NjYWxlKGZs
b2F0IGNzc1NjYWxlKSBjb25zdAoreworICAgIHJldHVybiBib3VuZChtX21pbmltdW1TY2FsZSwg
Y3NzU2NhbGUsIG1fbWF4aW11bVNjYWxlKTsKK30KKworZmxvYXQgVmlld3BvcnRIYW5kbGVyOjpv
dXRlckJvdW5kZWRDb250ZW50c1NjYWxlKGZsb2F0IGNzc1NjYWxlKSBjb25zdAoreworICAgIGlm
IChtX2FsbG93c1VzZXJTY2FsaW5nKSB7CisgICAgICAgIC8vIEJvdW5kZWQgYnkgWzAuMSwgMTAu
MF0gbGlrZSB0aGUgdmlld3BvcnQgbWV0YSBjb2RlIGluIFdlYkNvcmUuCisgICAgICAgIGZsb2F0
IGhhcmRNaW4gPSBzdGQ6Om1heDxmbG9hdD4oMC4xLCAwLjUgKiBtX21pbmltdW1TY2FsZSk7Cisg
ICAgICAgIGZsb2F0IGhhcmRNYXggPSBzdGQ6Om1pbjxmbG9hdD4oMTAsIDIgKiBtX21heGltdW1T
Y2FsZSk7CisgICAgICAgIHJldHVybiBib3VuZChoYXJkTWluLCBjc3NTY2FsZSwgaGFyZE1heCk7
CisgICAgfQorICAgIHJldHVybiBpbm5lckJvdW5kZWRDb250ZW50c1NjYWxlKGNzc1NjYWxlKTsK
K30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXI6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBJ
bnRTaXplJiBuZXdTaXplKQoreworICAgIGlmIChtX3ZpZXdwb3J0U2l6ZS5pc0VtcHR5KCkgfHwg
bmV3U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGVudHNTaXpl
ID0gbmV3U2l6ZTsKKworICAgIGZsb2F0IG1pbmltdW1TY2FsZSA9IFdlYkNvcmU6OmNvbXB1dGVN
aW5pbXVtU2NhbGVGYWN0b3JGb3JDb250ZW50Q29udGFpbmVkKG1fcmF3QXR0cmlidXRlcywgV2Vi
Q29yZTo6cm91bmRlZEludFNpemUobV92aWV3cG9ydFNpemUpLCBuZXdTaXplKTsKKworICAgIGlm
ICghZnV6enlDb21wYXJlKG1pbmltdW1TY2FsZSwgbV9yYXdBdHRyaWJ1dGVzLm1pbmltdW1TY2Fs
ZSwgMC4wMDEpKSB7CisgICAgICAgIG1fbWluaW11bVNjYWxlID0gbWluaW11bVNjYWxlOworCisg
ICAgICAgIGlmICghbV9oYWRVc2VySW50ZXJhY3Rpb24gJiYgIWhhc1N1c3BlbmRlZENvbnRlbnQo
KSkKKyAgICAgICAgICAgIG1fY2xpZW50LT5zZXRDb250ZW50c1NjYWxlKGNvbnZlcnRUb1ZpZXdw
b3J0KG1pbmltdW1TY2FsZSksIHRydWUgLyogaXNJbml0aWFsU2NhbGUgKi8pOworCisgICAgICAg
IG1fY2xpZW50LT5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoKTsKKyAgICB9CisKKyAgICBt
X2NsaWVudC0+ZGlkQ2hhbmdlQ29udGVudHNTaXplKCk7CisKKyAgICBpZiAoIWhhc1N1c3BlbmRl
ZENvbnRlbnQoKSkKKyAgICAgICAgbV9jbGllbnQtPnNldENvbnRlbnRzUmVjdFRvTmVhcmVzdFZh
bGlkQm91bmRzKCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyOjpwYWdlRGlkUmVxdWVzdFNj
cm9sbChjb25zdCBJbnRQb2ludCYgY3NzUG9zaXRpb24pCit7CisgICAgLy8gSWdub3JlIHRoZSBy
ZXF1ZXN0IGlmIHN1c3BlbmRlZC4gQ2FuIG9ubHkgaGFwcGVuIGR1ZSB0byBkZWxheSBpbiBldmVu
dCBkZWxpdmVyeS4KKyAgICBpZiAobV9zdXNwZW5kQ291bnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEZsb2F0UmVjdCBlbmRQb3NSYW5nZSA9IHBvc2l0aW9uUmFuZ2VGb3JDb250ZW50QXRTY2Fs
ZShtX3ZpZXdwb3J0U2NhbGUpOworICAgIEZsb2F0UG9pbnQgZW5kUG9zaXRpb24oY3NzUG9zaXRp
b24pOworICAgIGVuZFBvc2l0aW9uLnNjYWxlKG1fdmlld3BvcnRTY2FsZSwgbV92aWV3cG9ydFNj
YWxlKTsKKyAgICBlbmRQb3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UubWluWE1p
bllDb3JuZXIoKSwgZW5kUG9zaXRpb24sIGVuZFBvc1JhbmdlLm1heFhNYXhZQ29ybmVyKCkpOwor
CisgICAgbV9jbGllbnQtPnNldENvbnRlbnRzUG9zaXRpb24oZW5kUG9zaXRpb24pOworfQorCit2
b2lkIFZpZXdwb3J0SGFuZGxlcjo6YWRqdXN0Vmlld3BvcnRTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
bmV3U2l6ZSkKK3sKKyAgICBpZiAobmV3U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fdmlld3BvcnRTaXplID0gbmV3U2l6ZTsKKworICAgIC8vIExldCB0aGUgV2ViUHJv
Y2VzcyBrbm93IGFib3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwgc28gdGhhdAorICAgIC8vIGl0
IGNhbiByZXNpemUgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkuCisgICAgbV93ZWJQYWdlUHJveHkt
PnNldFZpZXdwb3J0U2l6ZShyb3VuZGVkSW50U2l6ZShuZXdTaXplKSk7CisKKyAgICBzeW5jVmlz
aWJsZUNvbnRlbnRzKCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyOjphZGp1c3RWaXNpYmxl
Q29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQg
dmlld3BvcnRTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAg
ICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSB2aXNpYmxlQ29udGVudHNSZWN0OworICAgIG1fdmll
d3BvcnRTY2FsZSA9IHZpZXdwb3J0U2NhbGU7CisgICAgc3luY1Zpc2libGVDb250ZW50cyh0cmFq
ZWN0b3J5VmVjdG9yKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXI6OnN5bmNWaXNpYmxlQ29u
dGVudHMoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICBEcmF3aW5n
QXJlYVByb3h5KiBjb25zdCBkcmF3aW5nQXJlYSA9IG1fd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJl
YSgpOworICAgIGlmICghZHJhd2luZ0FyZWEgfHwgbV92aWV3cG9ydFNpemUuaXNFbXB0eSgpIHx8
IG1fY29udGVudHNTaXplLmlzRW1wdHkoKSB8fCBtX3Zpc2libGVDb250ZW50c1JlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkcmF3aW5nQXJlYS0+c2V0VmlzaWJsZUNvbnRl
bnRzUmVjdChtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fdmlld3BvcnRTY2FsZSwgdHJhamVjdG9y
eVZlY3Rvcik7CisKKyAgICBtX2NsaWVudC0+ZGlkQ2hhbmdlVmlzaWJsZUNvbnRlbnRzKCk7Cit9
CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyOjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoY29u
c3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiBuZXdBdHRyaWJ1dGVzKQoreworICAgIGlm
IChuZXdBdHRyaWJ1dGVzLmxheW91dFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3Jhd0F0dHJpYnV0ZXMgPSBuZXdBdHRyaWJ1dGVzOworICAgIFdlYkNvcmU6OnJlc3Ry
aWN0U2NhbGVGYWN0b3JUb0luaXRpYWxTY2FsZUlmTm90VXNlclNjYWxhYmxlKG1fcmF3QXR0cmli
dXRlcyk7CisKKyAgICBtX2RldmljZVBpeGVsUmF0aW8gPSBtX3Jhd0F0dHJpYnV0ZXMuZGV2aWNl
UGl4ZWxSYXRpbzsgLy8gU2hvdWxkIHJldHVybiB2YWx1ZSBmcm9tIHRoZSB3ZWJQYWdlUHJveHku
CisgICAgbV9hbGxvd3NVc2VyU2NhbGluZyA9ICEhbV9yYXdBdHRyaWJ1dGVzLnVzZXJTY2FsYWJs
ZTsKKyAgICBtX21pbmltdW1TY2FsZSA9IG1fcmF3QXR0cmlidXRlcy5taW5pbXVtU2NhbGU7Cisg
ICAgbV9tYXhpbXVtU2NhbGUgPSBtX3Jhd0F0dHJpYnV0ZXMubWF4aW11bVNjYWxlOworCisgICAg
bV9jbGllbnQtPmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcygpOworfQorCit2b2lkIFZpZXdw
b3J0SGFuZGxlcjo6c3VzcGVuZENvbnRlbnQoKQoreworICAgIGlmIChtX2hhc1N1c3BlbmRlZENv
bnRlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faGFzU3VzcGVuZGVkQ29udGVudCA9IHRy
dWU7CisgICAgbV93ZWJQYWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucygpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlcjo6cmVzdW1lQ29udGVudCgpCit7Cisg
ICAgaWYgKCFtX3Jhd0F0dHJpYnV0ZXMubGF5b3V0U2l6ZS5pc0VtcHR5KCkgJiYgbV9yYXdBdHRy
aWJ1dGVzLmluaXRpYWxTY2FsZSA+IDApIHsKKyAgICAgICAgbV9oYWRVc2VySW50ZXJhY3Rpb24g
PSBmYWxzZTsKKyAgICAgICAgbV9jbGllbnQtPnNldENvbnRlbnRzU2NhbGUoY29udmVydFRvVmll
d3BvcnQoaW5uZXJCb3VuZGVkQ29udGVudHNTY2FsZShtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNj
YWxlKSksIC8qIGlzSW5pdGlhbFNjYWxlICovIHRydWUpOworICAgICAgICBtX3Jhd0F0dHJpYnV0
ZXMuaW5pdGlhbFNjYWxlID0gLTE7IC8vIE1hcmsgdXNlZC4KKyAgICB9CisKKyAgICBtX2NsaWVu
dC0+cmVxdWVzdFZpZXdwb3J0VXBkYXRlKCk7CisKKyAgICBpZiAoIW1faGFzU3VzcGVuZGVkQ29u
dGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oYXNTdXNwZW5kZWRDb250ZW50ID0gZmFs
c2U7CisgICAgbV93ZWJQYWdlUHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRp
b25zKCk7Cit9CisKK0Zsb2F0UmVjdCBWaWV3cG9ydEhhbmRsZXI6OnBvc2l0aW9uUmFuZ2VGb3JD
b250ZW50QXRTY2FsZShmbG9hdCB2aWV3cG9ydFNjYWxlKSBjb25zdAoreworICAgIGNvbnN0IEZs
b2F0U2l6ZSBjb250ZW50U2l6ZSA9IG1fY29udGVudHNTaXplICogdmlld3BvcnRTY2FsZTsKKwor
ICAgIGNvbnN0IGZsb2F0IGhvcml6b250YWxSYW5nZSA9IGNvbnRlbnRTaXplLndpZHRoKCkgLSBt
X3ZpZXdwb3J0U2l6ZS53aWR0aCgpOworICAgIGNvbnN0IGZsb2F0IHZlcnRpY2FsUmFuZ2UgPSBj
b250ZW50U2l6ZS5oZWlnaHQoKSAtIG1fdmlld3BvcnRTaXplLmhlaWdodCgpOworCisgICAgcmV0
dXJuIEZsb2F0UmVjdCgwLCAwLCBob3Jpem9udGFsUmFuZ2UsIHZlcnRpY2FsUmFuZ2UpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9WaWV3cG9ydEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9WaWV3cG9y
dEhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjA3N2U3ZDdhODBlMDRkY2JjMjQ5OGU3NWMzNWJkNzNm
OGVmMmIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1ZpZXdw
b3J0SGFuZGxlci5oCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICog
Q29weXJpZ2h0IChDKSAyMDExIEJlbmphbWluIFBvdWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJv
Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIFZpZXdwb3J0SGFuZGxlcl9oCisjZGVmaW5lIFZpZXdwb3J0SGFuZGxlcl9o
CisKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJ
bnRQb2ludDsKK2NsYXNzIEludFNpemU7Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgVmlld3Bv
cnRIYW5kbGVyOworY2xhc3MgVmlld3BvcnRIYW5kbGVyQ2xpZW50OworCisvLyBVUERBVEUgREVG
RVJSSU5HIChTVVNQRU5EL1JFU1VNRSkKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorLy8KKy8vIFdoZW4gaW50ZXJhY3Rpb24gd2l0aCB0aGUgY29udGVudCwgZWl0aGVyIGJ5
IGFuaW1hdGluZyBvciBieSB0aGUgaGFuZCBvZiB0aGUgdXNlciwKKy8vIGl0IGlzIGltcG9ydGFu
dCB0byBlbnN1cmUgc21vb3RoIGFuaW1hdGlvbnMgb2YgYXQgbGVhc3QgNjBmcHMgaW4gb3JkZXIg
dG8gZ2l2ZSBhCisvLyBnb29kIHVzZXIgZXhwZXJpZW5jZS4KKy8vCisvLyBJbiBvcmRlciB0byBk
byB0aGlzIHdlIG5lZWQgdG8gZ2V0IHJpZCBvZiB1bmtub3duIGZhY3RvcnMuIFRoZXNlIGluY2x1
ZGUgZGV2aWNlCisvLyBzZW5zb3JzIChnZW9sb2NhdGlvbiwgb3JpZW50YXRpb24gdXBkYXRlcyBl
dGMpLCBDU1MzIGFuaW1hdGlvbnMsIEphdmFTY3JpcHQKKy8vIGV4ZWN0dXRpb24sIHN1YiByZXNv
dXJjZSBsb2FkcyBldGMuIFdlIGRvIHRoaXMgYnkgZW1pdHRpbmcgc3VzcGVuZCBhbmQgcmVzdW1l
CisvLyBzaWduYWxzLCB3aGljaCBhcmUgdGhlbiBoYW5kbGVkIGJ5IHRoZSB2aWV3cG9ydCBhbmQg
cHJvcGFnYXRlcyB0byB0aGUgcmlnaHQgcGxhY2UuCisvLworLy8gRm9yIHRoaXMgcmVhc29uIHRo
ZSBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkIG11c3QgYmUgdXNlZCB3aGVuIHdlIGludGVy
YWN0CisvLyBvciBhbmltYXRlIHRoZSBjb250ZW50LgorLy8KKy8vIEl0IHNob3VsZCBiZSBub3Rl
ZCB0aGF0IHdoZW4gd2UgdXBkYXRlIGNvbnRlbnQgcHJvcGVydGllcywgd2UgbWlnaHQgcmVjZWl2
ZSBub3RpZnkKKy8vIHNpZ25hbHMgc2VuZCBieSB0aGUgcGFnZSBpdHNlbGYsIGFuZCBjYXJlIHNo
b3VsZCBiZSB0YWtlbiB0byBub3QgYWN0IG9uIHRoZXNlCisvLyB1bmNvbmRpdGlvbmFsbHkuCisv
LworLy8gSWYgc29tZXRoaW5nIHNob3VsZCBvbmx5IGJlIGV4ZWN1dGVkIGR1cmluZyB1cGRhdGUg
ZGVmZXJyaW5nLCBpdCBpcyBwb3NzaWJsZSB0bworLy8gY2hlY2sgZm9yIHRoYXQgdXNpbmcgQVNT
RVJUKGhhc1N1c3BlbmRlZENvbnRlbnQoKSkuCisKK2NsYXNzIFZpZXdwb3J0VXBkYXRlRGVmZXJy
ZXIgeworcHVibGljOgorICAgIGVudW0gU3VzcGVuZENvbnRlbnRGbGFnIHsgRGVmZXJVcGRhdGUs
IERlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQgfTsKKyAgICBWaWV3cG9ydFVwZGF0ZURlZmVy
cmVyKFZpZXdwb3J0SGFuZGxlciosIFN1c3BlbmRDb250ZW50RmxhZyA9IERlZmVyVXBkYXRlKTsK
KyAgICB+Vmlld3BvcnRVcGRhdGVEZWZlcnJlcigpOworCitwcml2YXRlOgorICAgIFZpZXdwb3J0
SGFuZGxlciogY29uc3QgaGFuZGxlcjsKK307CisKK2NsYXNzIFZpZXdwb3J0SGFuZGxlciB7Citw
dWJsaWM6CisgICAgVmlld3BvcnRIYW5kbGVyKFdlYktpdDo6V2ViUGFnZVByb3h5KiwgVmlld3Bv
cnRIYW5kbGVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+Vmlld3BvcnRIYW5kbGVyKCkgeyB9CisK
KyAgICB2b2lkIHN1c3BlbmRDb250ZW50KCk7CisgICAgdm9pZCByZXN1bWVDb250ZW50KCk7CisK
KyAgICBGbG9hdFJlY3QgcG9zaXRpb25SYW5nZUZvckNvbnRlbnRBdFNjYWxlKGZsb2F0IHZpZXdw
b3J0U2NhbGUpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IGNvbnZlcnRUb1ZpZXdwb3J0KGNvbnN0
IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIGZsb2F0IGNvbnZlcnRGcm9tVmlld3BvcnQoZmxvYXQp
IGNvbnN0OworICAgIGZsb2F0IGNvbnZlcnRUb1ZpZXdwb3J0KGZsb2F0KSBjb25zdDsKKworICAg
IGZsb2F0IGlubmVyQm91bmRlZENvbnRlbnRzU2NhbGUoZmxvYXQpIGNvbnN0OworICAgIGZsb2F0
IG91dGVyQm91bmRlZENvbnRlbnRzU2NhbGUoZmxvYXQpIGNvbnN0OworCisgICAgYm9vbCBoYXNT
dXNwZW5kZWRDb250ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdXNwZW5kQ291bnQgfHwgbV9oYXNT
dXNwZW5kZWRDb250ZW50OyB9CisgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2hhZFVzZXJJbnRlcmFjdGlvbjsgfQorICAgIGJvb2wgYWxsb3dzVXNlclNjYWxp
bmcoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c1VzZXJTY2FsaW5nOyB9CisKKyAgICBGbG9hdFNp
emUgY29udGVudHNMYXlvdXRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9yYXdBdHRyaWJ1dGVzLmxh
eW91dFNpemU7IH0KKyAgICBmbG9hdCBkZXZpY2VQaXhlbFJhdGlvKCkgY29uc3QgeyByZXR1cm4g
bV9kZXZpY2VQaXhlbFJhdGlvOyB9CisgICAgZmxvYXQgbWluaW11bUNvbnRlbnRzU2NhbGUoKSBj
b25zdCB7IHJldHVybiBtX21pbmltdW1TY2FsZTsgfQorICAgIGZsb2F0IG1heGltdW1Db250ZW50
c1NjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVtU2NhbGU7IH0KKworICAgIHZvaWQgc2V0
SGFkVXNlckludGVyYWN0aW9uKGJvb2wgZGlkVXNlckludGVyYWN0KSB7IG1faGFkVXNlckludGVy
YWN0aW9uID0gZGlkVXNlckludGVyYWN0OyB9CisKKyAgICAvLyBOb3RpZmljYXRpb25zIHRvIHRo
ZSBXZWJQcm9jZXNzLgorICAgIHZvaWQgYWRqdXN0Vmlld3BvcnRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgbmV3U2l6ZSk7CisgICAgdm9pZCBhZGp1c3RWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgdmlld3BvcnRTY2FsZSwgY29uc3Qg
RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvciA9IEZsb2F0UG9pbnQ6Onplcm8oKSk7CisKKyAg
ICAvLyBOb3RpZmljYXRpb25zIGZyb20gdGhlIFdlYlByb2Nlc3MuCisgICAgdm9pZCBkaWRDaGFu
Z2VDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSk7CisgICAgdm9pZCBkaWRDaGFu
Z2VWaWV3cG9ydEF0dHJpYnV0ZXMoY29uc3QgVmlld3BvcnRBdHRyaWJ1dGVzJik7CisgICAgdm9p
ZCBwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBJbnRQb2ludCYgY3NzUG9zaXRpb24pOworCitw
cml2YXRlOgorICAgIHZvaWQgc3luY1Zpc2libGVDb250ZW50cyhjb25zdCBGbG9hdFBvaW50ICZ0
cmFqZWN0b3J5VmVjdG9yID0gRmxvYXRQb2ludDo6emVybygpKTsKKworICAgIFdlYlBhZ2VQcm94
eSogY29uc3QgbV93ZWJQYWdlUHJveHk7CisgICAgVmlld3BvcnRIYW5kbGVyQ2xpZW50KiBtX2Ns
aWVudDsKKworICAgIFZpZXdwb3J0QXR0cmlidXRlcyBtX3Jhd0F0dHJpYnV0ZXM7CisKKyAgICBi
b29sIG1fYWxsb3dzVXNlclNjYWxpbmc7CisgICAgZmxvYXQgbV9taW5pbXVtU2NhbGU7CisgICAg
ZmxvYXQgbV9tYXhpbXVtU2NhbGU7CisgICAgZmxvYXQgbV9kZXZpY2VQaXhlbFJhdGlvOworCisg
ICAgaW50IG1fc3VzcGVuZENvdW50OworICAgIGJvb2wgbV9oYXNTdXNwZW5kZWRDb250ZW50Owor
ICAgIGJvb2wgbV9oYWRVc2VySW50ZXJhY3Rpb247CisKKyAgICBGbG9hdFNpemUgbV92aWV3cG9y
dFNpemU7CisgICAgRmxvYXRTaXplIG1fY29udGVudHNTaXplOworICAgIEZsb2F0UmVjdCBtX3Zp
c2libGVDb250ZW50c1JlY3Q7CisgICAgZmxvYXQgbV92aWV3cG9ydFNjYWxlOyAvLyBTaG91bGQg
YWx3YXlzIGJlIGNzc1NjYWxlICogZGV2aWNlUGl4ZWxSYXRpby4KKworICAgIGZyaWVuZCBjbGFz
cyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOworfTsKKworYm9vbCBmdXp6eUNvbXBhcmUoZmxvYXQs
IGZsb2F0LCBmbG9hdCBlcHNpbG9uKTsKK0Zsb2F0UG9pbnQgYm91bmRQb3NpdGlvbihjb25zdCBG
bG9hdFBvaW50IG1pblBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3Qg
RmxvYXRQb2ludCYgbWF4UG9zaXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFZpZXdwb3J0SGFuZGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVmlld3BvcnRIYW5kbGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Vmlld3BvcnRIYW5kbGVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjg0MmU5ZDU4ZTYxZDY4ZGQ2NWJk
M2E2OTg4NjRmY2U0MmYwMzc2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9WaWV3cG9ydEhhbmRsZXJDbGllbnQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgVmlld3BvcnRIYW5kbGVyQ2xpZW50X2gKKyNkZWZpbmUgVmll
d3BvcnRIYW5kbGVyQ2xpZW50X2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRmxvYXRQ
b2ludDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFZpZXdwb3J0SGFuZGxlcjsK
KworY2xhc3MgVmlld3BvcnRIYW5kbGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5W
aWV3cG9ydEhhbmRsZXJDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1Bvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uSW5WaWV3Q29vcmRp
bmF0ZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCB2aWV3
cG9ydFNjYWxlLCBib29sIGlzSW5pdGlhbFNjYWxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dENvbnRlbnRzUmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKCkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RWaWV3cG9ydFVwZGF0ZSgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRD
aGFuZ2VDb250ZW50c1NpemUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVZpc2li
bGVDb250ZW50cygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRy
aWJ1dGVzKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldFZpZXdwb3J0SGFuZGxlcihWaWV3
cG9ydEhhbmRsZXIqKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFZpZXdwb3J0SGFuZGxlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAKaW5kZXggOTNiNjQxNWMzOWY5ZGJkMWRm
NjMwNTIwNzk2MmE1MGE5M2Y1NDVmMy4uYjVmNjA1NDVkZDM0ZGIxZTY2NjA5MWRkNDllYzQ1YWQ1
ZTM5NmIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVy
ZVJlY29nbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1
cmVSZWNvZ25pemVyLmNwcApAQCAtNDEsNyArNDEsNyBAQCB2b2lkIFF0R2VzdHVyZVJlY29nbml6
ZXI6OnJlc2V0KCkKICAgICBtX3N0YXRlID0gTm9HZXN0dXJlOwogfQogCi1RdFZpZXdwb3J0SGFu
ZGxlciogUXRHZXN0dXJlUmVjb2duaXplcjo6dmlld3BvcnRIYW5kbGVyKCkKK1ZpZXdwb3J0SGFu
ZGxlckNsaWVudFF0KiBRdEdlc3R1cmVSZWNvZ25pemVyOjp2aWV3cG9ydEhhbmRsZXIoKQogewog
ICAgIHJldHVybiBtX2V2ZW50SGFuZGxlci0+dmlld3BvcnRIYW5kbGVyKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaAppbmRleCA2
OGUwMzJmNDc0NGM4NjE3Zjc1NTdmNjMxMjA5MjhjZjI5NGFkMzcyLi5jYzk2NzU0ZGUwY2JhOGNj
ZTk2NzY4OGRhNTViZWRlNjc5ZGIwNjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLWNsYXNzIFF0Vmlld3BvcnRIYW5kbGVyOworY2xhc3MgVmlld3BvcnRI
YW5kbGVyQ2xpZW50UXQ7CiBjbGFzcyBRdFdlYlBhZ2VFdmVudEhhbmRsZXI7CiAKIGNsYXNzIFF0
R2VzdHVyZVJlY29nbml6ZXIgewpAQCAtNDYsNyArNDYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IEdlc3R1cmVSZWNvZ25pemVkCiAgICAgfSBtX3N0YXRlOwogCi0gICAgUXRWaWV3cG9ydEhhbmRs
ZXIqIHZpZXdwb3J0SGFuZGxlcigpOworICAgIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0ICp2aWV3
cG9ydEhhbmRsZXIoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwCmlu
ZGV4IGJhOWM5MGEzZmJiOTg1YjNlZmY5Y2Q0ODkzODQ5ZmQ1NjFlNTE0YmMuLmI2NDEwMTMyN2Q5
ZGYwN2VhZmZmNWFlMjI4YjNlNTU1MjUxMDFhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKQEAgLTI1LDggKzI1
LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJRdFBhbkdlc3R1cmVSZWNvZ25p
emVyLmgiCiAKLSNpbmNsdWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2Vi
UGFnZUV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIlZpZXdwb3J0SGFuZGxlckNsaWVudFF0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwCmluZGV4IDc1ZDRkMjNiMDE4
MTlkOWE5ZDcwM2QxZDU1YjRkZGE5ZTlmZWFkZjUuLmQ1YjgxYTk4NzA5MTgyMThhYjdhYzM2ZTQy
ODBkYjdhM2RmNjkzYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwCkBAIC0yNiw4ICsyNiw4IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmgiCiAK
LSNpbmNsdWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50
SGFuZGxlci5oIgorI2luY2x1ZGUgIlZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmgiCiAjaW5jbHVk
ZSA8UXRDb3JlL1FMaW5lRj4KIAogbmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNWMzYmZhZjhhNjFjZDdlZWViMDJkNTU3NDk1YTc3NDRlMDJjMzU2MS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNzYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQmVu
amFtaW4gUG91bGFpbiA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgotCi0jaW5jbHVkZSAiV2ViUGFnZUdy
b3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5j
ZXMuaCIKLSNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKLSNpbmNsdWRlICJxcXVpY2t3ZWJ2
aWV3X3AuaCIKLSNpbmNsdWRlICJxd2Via2l0dGVzdF9wLmgiCi0jaW5jbHVkZSA8UVBvaW50Rj4K
LSNpbmNsdWRlIDxRVHJhbnNmb3JtPgotI2luY2x1ZGUgPFFXaGVlbEV2ZW50PgotI2luY2x1ZGUg
PFF0UXVpY2svcXF1aWNraXRlbS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgY29uc3QgaW50IGtTY2FsZUFuaW1hdGlvbkR1cmF0
aW9uTWlsbGlzID0gMjUwOwotCi0vLyBVUERBVEUgREVGRVJSSU5HIChTVVNQRU5EL1JFU1VNRSkK
LS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIFdoZW4gaW50ZXJh
Y3Rpb24gd2l0aCB0aGUgY29udGVudCwgZWl0aGVyIGJ5IGFuaW1hdGluZyBvciBieSB0aGUgaGFu
ZCBvZiB0aGUgdXNlciwKLS8vIGl0IGlzIGltcG9ydGFudCB0byBlbnN1cmUgc21vb3RoIGFuaW1h
dGlvbnMgb2YgYXQgbGVhc3QgNjBmcHMgaW4gb3JkZXIgdG8gZ2l2ZSBhCi0vLyBnb29kIHVzZXIg
ZXhwZXJpZW5jZS4KLS8vCi0vLyBJbiBvcmRlciB0byBkbyB0aGlzIHdlIG5lZWQgdG8gZ2V0IHJp
ZCBvZiB1bmtub3duIGZhY3RvcnMuIFRoZXNlIGluY2x1ZGUgZGV2aWNlCi0vLyBzZW5zb3JzIChn
ZW9sb2NhdGlvbiwgb3JpZW50YXRpb24gdXBkYXRlcyBldGMpLCBDU1MzIGFuaW1hdGlvbnMsIEph
dmFTY3JpcHQKLS8vIGV4ZWN0dXRpb24sIHN1YiByZXNvdXJjZSBsb2FkcyBldGMuIFdlIGRvIHRo
aXMgYnkgZW1pdHRpbmcgc3VzcGVuZCBhbmQgcmVzdW1lCi0vLyBzaWduYWxzLCB3aGljaCBhcmUg
dGhlbiBoYW5kbGVkIGJ5IHRoZSB2aWV3cG9ydCBhbmQgcHJvcGFnYXRlcyB0byB0aGUgcmlnaHQg
cGxhY2UuCi0vLwotLy8gRm9yIHRoaXMgcmVhc29uIHRoZSBWaWV3cG9ydFVwZGF0ZURlZmVycmVy
IGd1YXJkIG11c3QgYmUgdXNlZCB3aGVuIHdlIGludGVyYWN0Ci0vLyBvciBhbmltYXRlIHRoZSBj
b250ZW50LgotLy8KLS8vIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHdoZW4gd2UgdXBkYXRlIGNv
bnRlbnQgcHJvcGVydGllcywgd2UgbWlnaHQgcmVjZWl2ZSBub3RpZnkKLS8vIHNpZ25hbHMgc2Vu
ZCBteSB0aGUgY29udGVudCBpdGVtIGl0c2VsZiwgYW5kIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRv
IG5vdCBhY3Qgb24KLS8vIHRoZXNlIHVuY29uZGl0aW9uYWxseS4gQW4gZXhhbXBsZSBvZiB0aGlz
IGlzIHRoZSBwaW5jaCB6b29tLCB3aGljaCBjaGFuZ2VzIHRoZQotLy8gcG9zaXRpb24gYW5kIHdp
bGwgdGh1cyByZXN1bHQgaW4gYSBRUXVpY2tXZWJQYWdlOjpnZW9tZXRyeUNoYW5nZWQoKSBzaWdu
YWwgZ2V0dGluZwotLy8gZW1pdHRlZC4KLS8vCi0vLyBJZiBzb21ldGhpbmcgc2hvdWxkIG9ubHkg
YmUgZXhlY3V0ZWQgZHVyaW5nIHVwZGF0ZSBkZWZlcnJpbmcsIGl0IGlzIHBvc3NpYmxlIHRvCi0v
LyBjaGVjayBmb3IgdGhhdCB1c2luZyBBU1NFUlQobV9zdXNwZW5kQ291bnQpLgotCi1jbGFzcyBW
aWV3cG9ydFVwZGF0ZURlZmVycmVyIHsKLXB1YmxpYzoKLSAgICBlbnVtIFN1c3BlbmRDb250ZW50
RmxhZyB7IERlZmVyVXBkYXRlLCBEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50IH07Ci0gICAg
Vmlld3BvcnRVcGRhdGVEZWZlcnJlcihRdFZpZXdwb3J0SGFuZGxlciogaGFuZGxlciwgU3VzcGVu
ZENvbnRlbnRGbGFnIHN1c3BlbmRDb250ZW50RmxhZyA9IERlZmVyVXBkYXRlKQotICAgICAgICA6
IGhhbmRsZXIoaGFuZGxlcikKLSAgICB7Ci0gICAgICAgIGhhbmRsZXItPm1fc3VzcGVuZENvdW50
Kys7Ci0KLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBzdXNwZW5kIGNvbnRlbnQgZm9y
IGltbWVkaWF0ZSB1cGRhdGVzCi0gICAgICAgIC8vIG9ubHkgZHVyaW5nIGFuaW1hdGlvbnMgb3Ig
bG9uZ2VyIGdlc3R1cmVzLgotICAgICAgICBpZiAoc3VzcGVuZENvbnRlbnRGbGFnID09IERlZmVy
VXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpCi0gICAgICAgICAgICBoYW5kbGVyLT5zdXNwZW5kUGFn
ZUNvbnRlbnQoKTsKLSAgICB9Ci0KLSAgICB+Vmlld3BvcnRVcGRhdGVEZWZlcnJlcigpCi0gICAg
ewotICAgICAgICAvLyBXZSBhcmUgY2FsbGluZyBzZXRJbml0aWFsU2NhbGVJZk5lZWRlZCgpIGhl
cmUgYXMgaXQgcmVxdWlyZXMgYQotICAgICAgICAvLyBwb3NzaXRpdmUgbV9zdXNwZW5kQ291bnQg
ZHVlIHRvIHRoZSBhc3NlcnQgaW4gc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZSgpLgotICAgICAgICBp
ZiAoaGFuZGxlci0+bV9zdXNwZW5kQ291bnQgPT0gMSkKLSAgICAgICAgICAgIGhhbmRsZXItPnNl
dEluaXRpYWxTY2FsZUlmTmVlZGVkKCk7Ci0KLSAgICAgICAgaWYgKC0tKGhhbmRsZXItPm1fc3Vz
cGVuZENvdW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBoYW5kbGVyLT5yZXN1
bWVQYWdlQ29udGVudCgpOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRpbGVzIGFsbCBh
cm91bmQgdGhlIHZpZXdwb3J0IHdpbGwgYmUgcmVxdWVzdGVkLgotICAgICAgICBoYW5kbGVyLT5p
bmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShRUG9pbnRGKCkpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBRdFZpZXdwb3J0SGFuZGxlciogY29uc3QgaGFuZGxlcjsKLX07Ci0KLXZvaWQgUXRWaWV3
cG9ydEhhbmRsZXI6OnN1c3BlbmRQYWdlQ29udGVudCgpCi17Ci0gICAgaWYgKG1faGFzU3VzcGVu
ZGVkQ29udGVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9oYXNTdXNwZW5kZWRDb250ZW50
ID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnJlc3VtZVBhZ2VDb250
ZW50KCkKLXsKLSAgICBpZiAoIW1faGFzU3VzcGVuZGVkQ29udGVudCkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1faGFzU3VzcGVuZGVkQ29udGVudCA9IGZhbHNlOwotICAgIG1fd2ViUGFnZVByb3h5
LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOwotfQotCi0vLyBBIGZsb2F0
aW5nIHBvaW50IGNvbXBhcmUgd2l0aCBhYnNvbHV0ZSBlcnJvci4KLXN0YXRpYyBpbmxpbmUgYm9v
bCBmdXp6eUNvbXBhcmUocXJlYWwgYSwgcXJlYWwgYiwgcXJlYWwgZXBzaWxvbikKLXsKLSAgICBy
ZXR1cm4gcUFicyhhIC0gYikgPCBlcHNpbG9uOwotfQotCi1pbmxpbmUgcXJlYWwgUXRWaWV3cG9y
dEhhbmRsZXI6OmNzc1NjYWxlRnJvbUl0ZW0ocXJlYWwgaXRlbVNjYWxlKSBjb25zdAotewotICAg
IHJldHVybiBpdGVtU2NhbGUgLyBtX2RldmljZVBpeGVsUmF0aW87Ci19Ci0KLWlubGluZSBxcmVh
bCBRdFZpZXdwb3J0SGFuZGxlcjo6aXRlbVNjYWxlRnJvbUNTUyhxcmVhbCBjc3NTY2FsZSkgY29u
c3QKLXsKLSAgICByZXR1cm4gY3NzU2NhbGUgKiBtX2RldmljZVBpeGVsUmF0aW87Ci19Ci0KLWlu
bGluZSBxcmVhbCBRdFZpZXdwb3J0SGFuZGxlcjo6aXRlbUNvb3JkRnJvbUNTUyhxcmVhbCB2YWx1
ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gdmFsdWUgKiBtX2RldmljZVBpeGVsUmF0aW87Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgUVBvaW50RiBib3VuZFBvc2l0aW9uKGNvbnN0IFFQb2ludEYgbWluUG9z
aXRpb24sIGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBjb25zdCBRUG9pbnRGJiBtYXhQb3NpdGlv
bikKLXsKLSAgICByZXR1cm4gUVBvaW50RihxQm91bmQobWluUG9zaXRpb24ueCgpLCBwb3NpdGlv
bi54KCksIG1heFBvc2l0aW9uLngoKSksCi0gICAgICAgICAgICAgICAgICAgcUJvdW5kKG1pblBv
c2l0aW9uLnkoKSwgcG9zaXRpb24ueSgpLCBtYXhQb3NpdGlvbi55KCkpKTsKLX0KLQotaW5saW5l
IFFSZWN0RiBRdFZpZXdwb3J0SGFuZGxlcjo6aXRlbVJlY3RGcm9tQ1NTKGNvbnN0IFFSZWN0RiYg
Y3NzUmVjdCkgY29uc3QKLXsKLSAgICBRUmVjdEYgaXRlbVJlY3Q7Ci0KLSAgICBpdGVtUmVjdC5z
ZXRYKGl0ZW1Db29yZEZyb21DU1MoY3NzUmVjdC54KCkpKTsKLSAgICBpdGVtUmVjdC5zZXRZKGl0
ZW1Db29yZEZyb21DU1MoY3NzUmVjdC55KCkpKTsKLSAgICBpdGVtUmVjdC5zZXRXaWR0aChpdGVt
Q29vcmRGcm9tQ1NTKGNzc1JlY3Qud2lkdGgoKSkpOwotICAgIGl0ZW1SZWN0LnNldEhlaWdodChp
dGVtQ29vcmRGcm9tQ1NTKGNzc1JlY3QuaGVpZ2h0KCkpKTsKLQotICAgIHJldHVybiBpdGVtUmVj
dDsKLX0KLQotUXRWaWV3cG9ydEhhbmRsZXI6OlF0Vmlld3BvcnRIYW5kbGVyKFdlYktpdDo6V2Vi
UGFnZVByb3h5KiBwcm94eSwgUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVtLCBRUXVpY2tXZWJQ
YWdlKiBwYWdlSXRlbSkKLSAgICA6IG1fd2ViUGFnZVByb3h5KHByb3h5KQotICAgICwgbV92aWV3
cG9ydEl0ZW0odmlld3BvcnRJdGVtKQotICAgICwgbV9wYWdlSXRlbShwYWdlSXRlbSkKLSAgICAs
IG1fYWxsb3dzVXNlclNjYWxpbmcoZmFsc2UpCi0gICAgLCBtX21pbmltdW1TY2FsZSgxKQotICAg
ICwgbV9tYXhpbXVtU2NhbGUoMSkKLSAgICAsIG1fZGV2aWNlUGl4ZWxSYXRpbygxKQotICAgICwg
bV9zdXNwZW5kQ291bnQoMCkKLSAgICAsIG1faGFzU3VzcGVuZGVkQ29udGVudChmYWxzZSkKLSAg
ICAsIG1faGFkVXNlckludGVyYWN0aW9uKGZhbHNlKQotICAgICwgbV9zY2FsZUFuaW1hdGlvbihu
ZXcgU2NhbGVBbmltYXRpb24odGhpcykpCi0gICAgLCBtX3BpbmNoU3RhcnRTY2FsZSgtMSkKLSAg
ICAsIG1fbGFzdENvbW1pdHRlZFNjYWxlKC0xKQotICAgICwgbV96b29tT3V0U2NhbGUoMC4wKQot
ewotICAgIG1fc2NhbGVBbmltYXRpb24tPnNldER1cmF0aW9uKGtTY2FsZUFuaW1hdGlvbkR1cmF0
aW9uTWlsbGlzKTsKLSAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRFYXNpbmdDdXJ2ZShRRWFzaW5n
Q3VydmU6Ok91dEN1YmljKTsKLQotICAgIC8vIEluaXRpYWxpemluZyBWaWV3cG9ydCBSYXcgQXR0
cmlidXRlcyB0byBhdm9pZCByYW5kb20gbmVnYXRpdmUgc2NhbGUgZmFjdG9ycwotICAgIC8vIGlm
IHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0aGUgZmlyc3QgbGF5b3V0IGFuZCBz
ZXR0aW5nIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzIGZvciB0aGUgZmlyc3QgdGltZS4KLSAgICBt
X3Jhd0F0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9IG1fZGV2aWNlUGl4ZWxSYXRpbzsKLSAg
ICBtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlID0gMTsKLSAgICBtX3Jhd0F0dHJpYnV0ZXMu
bWluaW11bVNjYWxlID0gbV9taW5pbXVtU2NhbGU7Ci0gICAgbV9yYXdBdHRyaWJ1dGVzLm1heGlt
dW1TY2FsZSA9IG1fbWF4aW11bVNjYWxlOwotICAgIG1fcmF3QXR0cmlidXRlcy51c2VyU2NhbGFi
bGUgPSBtX2FsbG93c1VzZXJTY2FsaW5nOwotCi0gICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwg
U0lHTkFMKG1vdmVtZW50U3RhcnRlZCgpKSwgU0xPVChmbGlja01vdmVTdGFydGVkKCkpLCBRdDo6
RGlyZWN0Q29ubmVjdGlvbik7Ci0gICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKG1v
dmVtZW50RW5kZWQoKSksIFNMT1QoZmxpY2tNb3ZlRW5kZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0
aW9uKTsKLQotICAgIGNvbm5lY3QobV9zY2FsZUFuaW1hdGlvbiwgU0lHTkFMKHZhbHVlQ2hhbmdl
ZChRVmFyaWFudCkpLAotICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdl
ZChRVmFyaWFudCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci0gICAgY29ubmVjdChtX3NjYWxl
QW5pbWF0aW9uLCBTSUdOQUwoc3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUs
IFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUpKSwKLSAgICAgICAgICAgIFNMT1Qoc2NhbGVBbmlt
YXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5p
bWF0aW9uOjpTdGF0ZSkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci19Ci0KLVF0Vmlld3BvcnRI
YW5kbGVyOjp+UXRWaWV3cG9ydEhhbmRsZXIoKQotewotfQotCi1xcmVhbCBRdFZpZXdwb3J0SGFu
ZGxlcjo6aW5uZXJCb3VuZGVkQ1NTU2NhbGUocXJlYWwgY3NzU2NhbGUpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHFCb3VuZChtX21pbmltdW1TY2FsZSwgY3NzU2NhbGUsIG1fbWF4aW11bVNjYWxlKTsK
LX0KLQotcXJlYWwgUXRWaWV3cG9ydEhhbmRsZXI6Om91dGVyQm91bmRlZENTU1NjYWxlKHFyZWFs
IGNzc1NjYWxlKSBjb25zdAotewotICAgIGlmIChtX2FsbG93c1VzZXJTY2FsaW5nKSB7Ci0gICAg
ICAgIC8vIEJvdW5kZWQgYnkgWzAuMSwgMTAuMF0gbGlrZSB0aGUgdmlld3BvcnQgbWV0YSBjb2Rl
IGluIFdlYkNvcmUuCi0gICAgICAgIHFyZWFsIGhhcmRNaW4gPSBxTWF4PHFyZWFsPigwLjEsIHFy
ZWFsKDAuNSkgKiBtX21pbmltdW1TY2FsZSk7Ci0gICAgICAgIHFyZWFsIGhhcmRNYXggPSBxTWlu
PHFyZWFsPigxMCwgcXJlYWwoMi4wKSAqIG1fbWF4aW11bVNjYWxlKTsKLSAgICAgICAgcmV0dXJu
IHFCb3VuZChoYXJkTWluLCBjc3NTY2FsZSwgaGFyZE1heCk7Ci0gICAgfQotICAgIHJldHVybiBp
bm5lckJvdW5kZWRDU1NTY2FsZShjc3NTY2FsZSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRs
ZXI6OnNldEluaXRpYWxTY2FsZUlmTmVlZGVkKCkKLXsKLSAgICBpZiAobV9yYXdBdHRyaWJ1dGVz
LmxheW91dFNpemUuaXNFbXB0eSgpIHx8IG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUgPCAw
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3pvb21PdXRTY2FsZSA9IDAuMDsKLSAgICBtX3Nj
YWxlU3RhY2suY2xlYXIoKTsKLQotICAgIG1faGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7Ci0K
LSAgICAvLyBXZSBtdXN0IG5vdCBhbmltYXRlIGhlcmUgYXMgdGhlIG5ldyBjb250ZW50cyBzaXpl
IG1pZ2h0IGJlIHZlcnkgZGlmZmVyZW50Ci0gICAgLy8gdGhhbiB0aGUgY3VycmVudCBvbmUuCi0g
ICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShpbml0aWFsUmVjdCgpKTsKLQotICAgIG1fcmF3QXR0
cmlidXRlcy5pbml0aWFsU2NhbGUgPSAtMTsgLy8gTWFyayB1c2VkLgotfQotCi12b2lkIFF0Vmll
d3BvcnRIYW5kbGVyOjp2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6OlZp
ZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKLXsKLSAgICBpZiAobmV3QXR0cmlidXRl
cy5sYXlvdXRTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yYXdBdHRy
aWJ1dGVzID0gbmV3QXR0cmlidXRlczsKLSAgICBXZWJDb3JlOjpyZXN0cmljdFNjYWxlRmFjdG9y
VG9Jbml0aWFsU2NhbGVJZk5vdFVzZXJTY2FsYWJsZShtX3Jhd0F0dHJpYnV0ZXMpOwotCi0gICAg
aWYgKCFxRnV6enlDb21wYXJlKG1fZGV2aWNlUGl4ZWxSYXRpbywgc3RhdGljX2Nhc3Q8cXJlYWw+
KG1fcmF3QXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvKSkpIHsKLSAgICAgICAgbV9kZXZpY2VQ
aXhlbFJhdGlvID0gbV9yYXdBdHRyaWJ1dGVzLmRldmljZVBpeGVsUmF0aW87IC8vIFNob3VsZCBy
ZXR1cm4gdmFsdWUgZnJvbSB0aGUgd2ViUGFnZVByb3h5LgotICAgICAgICBlbWl0IG1fdmlld3Bv
cnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT5kZXZpY2VQaXhlbFJhdGlvQ2hhbmdlZCgp
OwotICAgIH0KLQotICAgIG1fYWxsb3dzVXNlclNjYWxpbmcgPSAhIW1fcmF3QXR0cmlidXRlcy51
c2VyU2NhbGFibGU7Ci0gICAgbV9taW5pbXVtU2NhbGUgPSBtX3Jhd0F0dHJpYnV0ZXMubWluaW11
bVNjYWxlOwotICAgIG1fbWF4aW11bVNjYWxlID0gbV9yYXdBdHRyaWJ1dGVzLm1heGltdW1TY2Fs
ZTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcHBseSB0aGUgbmV3IGluaXRpYWwgc2NhbGUgd2hl
biBkZWZlcnJpbmcgZW5kcy4KLSAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKHRoaXMp
OwotCi0gICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+dmll
d3BvcnRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhZ2VDb250ZW50
c1NpemVDaGFuZ2VkKGNvbnN0IFFTaXplJiBuZXdTaXplLCBjb25zdCBRU2l6ZSYgdmlld3BvcnRT
aXplKQotewotICAgIGlmICh2aWV3cG9ydFNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmbG9hdCBtaW5pbXVtU2NhbGUgPSBXZWJDb3JlOjpjb21wdXRlTWluaW11bVNjYWxl
RmFjdG9yRm9yQ29udGVudENvbnRhaW5lZChtX3Jhd0F0dHJpYnV0ZXMsIHZpZXdwb3J0U2l6ZSwg
bmV3U2l6ZSk7Ci0KLSAgICBpZiAoIXFGdXp6eUNvbXBhcmUobWluaW11bVNjYWxlLCBtX3Jhd0F0
dHJpYnV0ZXMubWluaW11bVNjYWxlKSkgewotICAgICAgICBtX21pbmltdW1TY2FsZSA9IG1pbmlt
dW1TY2FsZTsKLSAgICAgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRl
c3QoKS0+dmlld3BvcnRDaGFuZ2VkKCk7Ci0KLSAgICAgICAgaWYgKCFtX2hhZFVzZXJJbnRlcmFj
dGlvbiAmJiAhbV9oYXNTdXNwZW5kZWRDb250ZW50KSB7Ci0gICAgICAgICAgICAvLyBFbWl0cyBj
b250ZW50c1NjYWxlQ2hhbmdlZCgpOwotICAgICAgICAgICAgc2V0Q1NTU2NhbGUobWluaW11bVNj
YWxlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEVtaXQgZm9yIHRlc3RpbmcgcHVycG9z
ZXMsIHNvIHRoYXQgaXQgY2FuIGJlIHZlcmlmaWVkIHRoYXQKLSAgICAvLyB3ZSBkaWRuJ3QgZG8g
c2NhbGUgYWRqdXN0bWVudC4KLSAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwo
KS0+dGVzdCgpLT5jb250ZW50c1NjYWxlQ29tbWl0dGVkKCk7Ci0KLSAgICBpZiAoIW1faGFzU3Vz
cGVuZGVkQ29udGVudCkgewotICAgICAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKHRo
aXMpOwotICAgICAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKG5lYXJlc3RWYWxpZEJvdW5kcygp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNldFBhZ2VJdGVtUmVjdFZp
c2libGUoY29uc3QgUVJlY3RGJiBpdGVtUmVjdCkKLXsKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fc3VzcGVuZENvdW50LAotICAgICAgICAic2V0UGFnZUl0ZW1SZWN0VmlzaWJsZSBoYXMgdG8g
YmUgZ3VhcmRlZCB1c2luZyBhIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIuIik7Ci0KLSAgICBpZiAo
aXRlbVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBxcmVhbCBpdGVtU2Nh
bGUgPSBtX3ZpZXdwb3J0SXRlbS0+d2lkdGgoKSAvIGl0ZW1SZWN0LndpZHRoKCk7Ci0KLSAgICBt
X3BhZ2VJdGVtLT5zZXRDb250ZW50c1NjYWxlKGl0ZW1TY2FsZSk7Ci0KLSAgICAvLyBUbyBhbmlt
YXRlIHRoZSBwb3NpdGlvbiB0b2dldGhlciB3aXRoIHRoZSBzY2FsZSB3ZSBtdWx0aXBseSB0aGUg
cG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCBzY2FsZQotICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhl
IHBhZ2UgcG9zaXRpb24gKGRpc3BsYWNlbWVudCBvbiB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVt
IGJlY2F1c2Ugb2YgYWRkaXRpb25hbCBpdGVtcykuCi0gICAgUVBvaW50RiBuZXdQb3NpdGlvbiht
X3BhZ2VJdGVtLT5wb3MoKSArIChpdGVtUmVjdC50b3BMZWZ0KCkgKiBpdGVtU2NhbGUpKTsKLQot
ICAgIG1fdmlld3BvcnRJdGVtLT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKLX0KLQotdm9p
ZCBRdFZpZXdwb3J0SGFuZGxlcjo6YW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJl
Y3RGJiBpdGVtUmVjdCkKLXsKLSAgICBBU1NFUlQobV9zY2FsZUFuaW1hdGlvbi0+c3RhdGUoKSA9
PSBRQWJzdHJhY3RBbmltYXRpb246OlN0b3BwZWQpOwotCi0gICAgQVNTRVJUKCFzY3JvbGxBbmlt
YXRpb25BY3RpdmUoKSk7Ci0gICAgaWYgKHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBRUmVjdEYgY3VycmVudFBhZ2VJdGVtUmVjdFZpc2libGUgPSBtX3Zp
ZXdwb3J0SXRlbS0+bWFwUmVjdFRvV2ViQ29udGVudChtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdS
ZWN0KCkpOwotICAgIGlmIChpdGVtUmVjdCA9PSBjdXJyZW50UGFnZUl0ZW1SZWN0VmlzaWJsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0U3RhcnRWYWx1ZShj
dXJyZW50UGFnZUl0ZW1SZWN0VmlzaWJsZSk7Ci0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0RW5k
VmFsdWUoaXRlbVJlY3QpOwotCi0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c3RhcnQoKTsKLX0KLQot
dm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6ZmxpY2tNb3ZlU3RhcnRlZCgpCi17Ci0gICAgUV9BU1NF
UlQobV92aWV3cG9ydEl0ZW0tPmlzTW92aW5nKCkpOwotICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJy
ZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9ydFVw
ZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Ci0KLSAgICBtX2xh
c3RTY3JvbGxQb3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCk7Ci0gICAgY29u
bmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwgU0xPVChwYWdl
SXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7Ci0gICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lH
TkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgU0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7
Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OmZsaWNrTW92ZUVuZGVkKCkKLXsKLSAgICBR
X0FTU0VSVCghbV92aWV3cG9ydEl0ZW0tPmlzTW92aW5nKCkpOwotICAgIC8vIFRoaXMgbWV0aG9k
IGlzIGNhbGxlZCBvbiB0aGUgZW5kIG9mIHRoZSBwYW4gb3IgcGFuIGtpbmV0aWMgYW5pbWF0aW9u
LgotICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsKLQotICAgIG1fbGFzdFNjcm9s
bFBvc2l0aW9uID0gUVBvaW50RigpOwotICAgIGRpc2Nvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJ
R05BTChjb250ZW50WENoYW5nZWQoKSksIHRoaXMsIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNoYW5n
ZWQoKSkpOwotICAgIGRpc2Nvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50WUNo
YW5nZWQoKSksIHRoaXMsIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOwotfQotCi12
b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpCi17Ci0gICAg
UVBvaW50RiBuZXdQb3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCk7Ci0KLSAg
ICBpbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShtX2xhc3RTY3JvbGxQb3NpdGlvbiAtIG5ld1Bv
c2l0aW9uKTsKLQotICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247Ci19Ci0K
LXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhZ2VDb250ZW50UG9zaXRpb25SZXF1ZXN0ZWQoY29u
c3QgUVBvaW50JiBjc3NQb3NpdGlvbikKLXsKLSAgICAvLyBJZ25vcmUgdGhlIHJlcXVlc3QgaWYg
c3VzcGVuZGVkLiBDYW4gb25seSBoYXBwZW4gZHVlIHRvIGRlbGF5IGluIGV2ZW50IGRlbGl2ZXJ5
LgotICAgIGlmIChtX3N1c3BlbmRDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcXJlYWwg
ZW5kSXRlbVNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOyAvLyBTdGF5IGF0IHNh
bWUgc2NhbGUuCi0KLSAgICBRUmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JQ
YWdlSXRlbUF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKLSAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0g
Ym91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGNzc1Bvc2l0aW9uICogZW5kSXRl
bVNjYWxlLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgpKTsKLQotICAgIFFSZWN0RiBlbmRWaXNp
YmxlQ29udGVudFJlY3QoZW5kUG9zaXRpb24gLyBlbmRJdGVtU2NhbGUsIG1fdmlld3BvcnRJdGVt
LT5ib3VuZGluZ1JlY3QoKS5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOwotCi0gICAgVmlld3BvcnRV
cGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKLSAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKGVu
ZFZpc2libGVDb250ZW50UmVjdCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNjYWxl
QW5pbWF0aW9uU3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUs
IFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgLypvbGRTdGF0ZSovKQotewotICAgIHN3aXRjaCAo
bmV3U3RhdGUpIHsKLSAgICBjYXNlIFFBYnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZzoKLSAgICAg
ICAgbV92aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7Ci0gICAgICAgIEFTU0VSVCghbV9hbmlt
YXRpb25VcGRhdGVEZWZlcnJlcik7Ci0gICAgICAgIG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIg
PSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9ydFVwZGF0
ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUUFic3RyYWN0QW5pbWF0aW9uOjpTdG9wcGVkOgotICAgICAgICBtX2FuaW1h
dGlvblVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6c2Nh
bGVBbmltYXRpb25WYWx1ZUNoYW5nZWQoUVZhcmlhbnQgdmFsdWUpCi17Ci0gICAgLy8gUmVzZXR0
aW5nIHRoZSBlbmQgdmFsdWUsIHRoZSBlYXNpbmcgY3VydmUgb3IgdGhlIGR1cmF0aW9uIG9mIHRo
ZSBzY2FsZSBhbmltYXRpb24KLSAgICAvLyB0cmlnZ2VycyBhIHJlY2FsY3VsYXRpb24gb2YgdGhl
IGFuaW1hdGlvbiBpbnRlcnZhbC4gVGhpcyBtaWdodCBjaGFuZ2UgdGhlIGN1cnJlbnQKLSAgICAv
LyB2YWx1ZSBvZiB0aGUgYW5pbWF0ZWQgcHJvcGVydHkuCi0gICAgLy8gTWFrZSBzdXJlIHdlIG9u
bHkgYWN0IG9uIGFuaW1hdGlvbiB2YWx1ZSBjaGFuZ2VzIGlmIHRoZSBhbmltYXRpb24gaXMgYWN0
aXZlLgotICAgIGlmICghc2NhbGVBbmltYXRpb25BY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZSh2YWx1ZS50b1JlY3RGKCkpOwotfQotCi12b2lk
IFF0Vmlld3BvcnRIYW5kbGVyOjp0b3VjaEJlZ2luKCkKLXsKLSAgICBtX2hhZFVzZXJJbnRlcmFj
dGlvbiA9IHRydWU7Ci0KLSAgICAvLyBQcmV2ZW50cyByZXN1bWluZyB0aGUgcGFnZSBiZXR3ZWVu
IHRoZSB1c2VyJ3MgZmxpY2tzIG9mIHRoZSBwYWdlIHdoaWxlIHRoZSBhbmltYXRpb24gaXMgcnVu
bmluZy4KLSAgICBpZiAoc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCi0gICAgICAgIG1fdG91Y2hV
cGRhdGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKHRoaXMs
IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsK
LX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6dG91Y2hFbmQoKQotewotICAgIG1fdG91Y2hV
cGRhdGVEZWZlcnJlci5jbGVhcigpOwotfQotCi1RUmVjdEYgUXRWaWV3cG9ydEhhbmRsZXI6OmNv
bXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0Ci17
Ci0gICAgY29uc3QgUVNpemVGIGNvbnRlbnRJdGVtU2l6ZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRz
U2l6ZSgpICogaXRlbVNjYWxlOwotICAgIGNvbnN0IFFTaXplRiB2aWV3cG9ydEl0ZW1TaXplID0g
bV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNpemUoKTsKLQotICAgIGNvbnN0IHFyZWFs
IGhvcml6b250YWxSYW5nZSA9IGNvbnRlbnRJdGVtU2l6ZS53aWR0aCgpIC0gdmlld3BvcnRJdGVt
U2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IHFyZWFsIHZlcnRpY2FsUmFuZ2UgPSBjb250ZW50SXRl
bVNpemUuaGVpZ2h0KCkgLSB2aWV3cG9ydEl0ZW1TaXplLmhlaWdodCgpOwotCi0gICAgcmV0dXJu
IFFSZWN0RihRUG9pbnRGKDAsIDApLCBRU2l6ZUYoaG9yaXpvbnRhbFJhbmdlLCB2ZXJ0aWNhbFJh
bmdlKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OmZvY3VzRWRpdGFibGVBcmVhKGNv
bnN0IFFSZWN0RiYgY2FyZXRBcmVhLCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpCi17Ci0gICAg
Ly8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9u
LgotICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7Ci0KLSAgICBRUmVjdEYgZW5kQXJl
YSA9IGl0ZW1SZWN0RnJvbUNTUyh0YXJnZXRBcmVhKTsKLQotICAgIHFyZWFsIGVuZEl0ZW1TY2Fs
ZSA9IGl0ZW1TY2FsZUZyb21DU1MoaW5uZXJCb3VuZGVkQ1NTU2NhbGUoMi4wKSk7Ci0gICAgY29u
c3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsK
LQotICAgIHFyZWFsIHg7Ci0gICAgY29uc3QgcXJlYWwgYm9yZGVyT2Zmc2V0ID0gMTA7Ci0gICAg
aWYgKChlbmRBcmVhLndpZHRoKCkgKyBib3JkZXJPZmZzZXQpICogZW5kSXRlbVNjYWxlIDw9IHZp
ZXdwb3J0UmVjdC53aWR0aCgpKSB7Ci0gICAgICAgIC8vIENlbnRlciB0aGUgaW5wdXQgZmllbGQg
aW4gdGhlIG1pZGRsZSBvZiB0aGUgdmlldywgaWYgaXQgaXMgc21hbGxlciB0aGFuCi0gICAgICAg
IC8vIHRoZSB2aWV3IGF0IHRoZSBzY2FsZSB0YXJnZXQuCi0gICAgICAgIHggPSB2aWV3cG9ydFJl
Y3QuY2VudGVyKCkueCgpIC0gZW5kQXJlYS53aWR0aCgpICogZW5kSXRlbVNjYWxlIC8gMi4wOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBjYXJldCBhbHdheXMgaGFz
IGJvcmRlck9mZnNldCBjb250ZW50cyBwaXhlbHMgdG8gdGhlIHJpZ2h0Ci0gICAgICAgIC8vIG9m
IGl0LCBhbmQgc2Vjb25kYXJpbHkgKGlmIHBvc3NpYmxlKSwgdGhhdCB0aGUgYXJlYSBoYXMgYm9y
ZGVyT2Zmc2V0Ci0gICAgICAgIC8vIGNvbnRlbnRzIHBpeGVscyB0byB0aGUgbGVmdCBvZiBpdC4K
LSAgICAgICAgcXJlYWwgY2FyZXRPZmZzZXQgPSBpdGVtQ29vcmRGcm9tQ1NTKGNhcmV0QXJlYS54
KCkpIC0gZW5kQXJlYS54KCk7Ci0gICAgICAgIHggPSBxTWluKHZpZXdwb3J0UmVjdC53aWR0aCgp
IC0gKGNhcmV0T2Zmc2V0ICsgYm9yZGVyT2Zmc2V0KSAqIGVuZEl0ZW1TY2FsZSwgYm9yZGVyT2Zm
c2V0ICogZW5kSXRlbVNjYWxlKTsKLSAgICB9Ci0KLSAgICBjb25zdCBRUG9pbnRGIGhvdHNwb3Qg
PSBRUG9pbnRGKGVuZEFyZWEueCgpLCBlbmRBcmVhLmNlbnRlcigpLnkoKSk7Ci0gICAgY29uc3Qg
UVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSBRUG9pbnRGKHgsIC8qIEZJWE1FOiB2aXNpYmxlQ2Vu
dGVyICovIHZpZXdwb3J0UmVjdC5jZW50ZXIoKS55KCkpOwotCi0gICAgUVBvaW50RiBlbmRQb3Np
dGlvbiA9IGhvdHNwb3QgKiBlbmRJdGVtU2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Q7Ci0gICAgUVJl
Y3RGIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0
ZW1TY2FsZSk7Ci0KLSAgICBlbmRQb3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2Uu
dG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7Ci0KLSAg
ICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxl
LCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKLQotICAgIGFuaW1hdGVQYWdl
SXRlbVJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7Ci19Ci0KLXZvaWQgUXRWaWV3
cG9ydEhhbmRsZXI6Onpvb21Ub0FyZWFHZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgdG91Y2hQ
b2ludCwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKQotewotICAgIC8vIFRoaXMgY2FuIG9ubHkg
aGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KLSAgICBBU1NFUlQobV9o
YWRVc2VySW50ZXJhY3Rpb24pOwotCi0gICAgaWYgKCF0YXJnZXRBcmVhLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc3VzcGVuZENvdW50KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjb25zdCBpbnQgbWFyZ2luID0gMTA7IC8vIFdlIHdhbnQgYXQgbGVhc3QgYSBsaXR0
bGUgYml0IG9mIG1hcmdpbi4KLSAgICBRUmVjdEYgZW5kQXJlYSA9IGl0ZW1SZWN0RnJvbUNTUyh0
YXJnZXRBcmVhLmFkanVzdGVkKC1tYXJnaW4sIC1tYXJnaW4sIG1hcmdpbiwgbWFyZ2luKSk7Ci0K
LSAgICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5n
UmVjdCgpOwotCi0gICAgcXJlYWwgdGFyZ2V0Q1NTU2NhbGUgPSB2aWV3cG9ydFJlY3Quc2l6ZSgp
LndpZHRoKCkgLyBlbmRBcmVhLnNpemUoKS53aWR0aCgpOwotICAgIHFyZWFsIGVuZENTU1NjYWxl
ID0gaW5uZXJCb3VuZGVkQ1NTU2NhbGUocU1pbih0YXJnZXRDU1NTY2FsZSwgcXJlYWwoMi41KSkp
OwotICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IGl0ZW1TY2FsZUZyb21DU1MoZW5kQ1NTU2NhbGUp
OwotICAgIHFyZWFsIGN1cnJlbnRTY2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsK
LQotICAgIC8vIFdlIHdhbnQgdG8gZW5kIHVwIHdpdGggdGhlIHRhcmdldCBhcmVhIGZpbGxpbmcg
dGhlIHdob2xlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydCAoaWYgcG9zc2libGUpLAotICAgIC8vIGFu
ZCBjZW50cmFsaXplZCB2ZXJ0aWNhbGx5IHdoZXJlIHRoZSB1c2VyIHJlcXVlc3RlZCB6b29tLiBU
aHVzIG91ciBob3RzcG90IGlzIHRoZSBjZW50ZXIgb2YKLSAgICAvLyB0aGUgdGFyZ2V0QXJlYSB4
LXdpc2UgYW5kIHRoZSByZXF1ZXN0ZWQgem9vbSBwb3NpdGlvbiwgeS13aXNlLgotICAgIGNvbnN0
IFFQb2ludEYgaG90c3BvdCA9IFFQb2ludEYoZW5kQXJlYS5jZW50ZXIoKS54KCksIGl0ZW1Db29y
ZEZyb21DU1ModG91Y2hQb2ludC55KCkpKTsKLSAgICBjb25zdCBRUG9pbnRGIHZpZXdwb3J0SG90
c3BvdCA9IHZpZXdwb3J0UmVjdC5jZW50ZXIoKTsKLQotICAgIFFQb2ludEYgZW5kUG9zaXRpb24g
PSBob3RzcG90ICogZW5kQ1NTU2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Q7Ci0KLSAgICBRUmVjdEYg
ZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUoZW5kSXRlbVNj
YWxlKTsKLSAgICBlbmRQb3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVm
dCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7Ci0KLSAgICBRUmVj
dEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3
cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKLQotICAgIGVudW0geyBab29tSW4sIFpv
b21CYWNrLCBab29tT3V0LCBOb1pvb20gfSB6b29tQWN0aW9uID0gWm9vbUluOwotCi0gICAgaWYg
KCFtX3NjYWxlU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFpvb20gYmFjayBvdXQgaWYg
YXR0ZW1wdGluZyB0byBzY2FsZSB0byB0aGUgc2FtZSBjdXJyZW50IHNjYWxlLCBvcgotICAgICAg
ICAvLyBhdHRlbXB0aW5nIHRvIGNvbnRpbnVlIHNjYWxpbmcgb3V0IGZyb20gdGhlIGlubmVyIG1v
c3QgbGV2ZWwuCi0gICAgICAgIC8vIFVzZSBmdXp6eSBjb21wYXJlIHdpdGggYSBmaXhlZCBlcnJv
ciB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aCBsYXJnaXNoIGRpZmZlcmVuY2VzIGR1ZSB0byBwaXhl
bCByb3VuZGluZy4KLSAgICAgICAgaWYgKGZ1enp5Q29tcGFyZShlbmRJdGVtU2NhbGUsIGN1cnJl
bnRTY2FsZSwgMC4wMSkpIHsKLSAgICAgICAgICAgIC8vIElmIG1vdmluZyB0aGUgdmlld3BvcnQg
d291bGQgZXhwb3NlIG1vcmUgb2YgdGhlIHRhcmdldFJlY3QgYW5kIG1vdmUgYXQgbGVhc3QgNDAg
cGl4ZWxzLCB1cGRhdGUgcG9zaXRpb24gYnV0IGRvIG5vdCBzY2FsZSBvdXQuCi0gICAgICAgICAg
ICBRUmVjdEYgY3VycmVudENvbnRlbnRSZWN0KG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkg
LyBjdXJyZW50U2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBjdXJyZW50U2NhbGUpOwotICAg
ICAgICAgICAgUVJlY3RGIHRhcmdldEludGVyc2VjdGlvbiA9IGVuZFZpc2libGVDb250ZW50UmVj
dC5pbnRlcnNlY3RlZCh0YXJnZXRBcmVhKTsKLSAgICAgICAgICAgIGlmICghY3VycmVudENvbnRl
bnRSZWN0LmNvbnRhaW5zKHRhcmdldEludGVyc2VjdGlvbikgJiYgKHFBYnMoZW5kVmlzaWJsZUNv
bnRlbnRSZWN0LnRvcCgpIC0gY3VycmVudENvbnRlbnRSZWN0LnRvcCgpKSA+PSA0MCB8fCBxQWJz
KGVuZFZpc2libGVDb250ZW50UmVjdC5sZWZ0KCkgLSBjdXJyZW50Q29udGVudFJlY3QubGVmdCgp
KSA+PSA0MCkpCi0gICAgICAgICAgICAgICAgem9vbUFjdGlvbiA9IE5vWm9vbTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB6b29tQWN0aW9uID0gWm9vbUJhY2s7Ci0gICAgICAg
IH0gZWxzZSBpZiAoZnV6enlDb21wYXJlKGVuZEl0ZW1TY2FsZSwgbV96b29tT3V0U2NhbGUsIDAu
MDEpKQotICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21CYWNrOwotICAgICAgICBlbHNlIGlm
IChlbmRJdGVtU2NhbGUgPCBjdXJyZW50U2NhbGUpCi0gICAgICAgICAgICB6b29tQWN0aW9uID0g
Wm9vbU91dDsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHpvb21BY3Rpb24pIHsKLSAgICBjYXNlIFpv
b21JbjoKLSAgICAgICAgbV9zY2FsZVN0YWNrLmFwcGVuZChTY2FsZVN0YWNrSXRlbShjdXJyZW50
U2NhbGUsIG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkueCgpKSk7Ci0gICAgICAgIG1fem9v
bU91dFNjYWxlID0gZW5kSXRlbVNjYWxlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFpvb21C
YWNrOiB7Ci0gICAgICAgIFNjYWxlU3RhY2tJdGVtIGxhc3RTY2FsZSA9IG1fc2NhbGVTdGFjay50
YWtlTGFzdCgpOwotICAgICAgICBlbmRJdGVtU2NhbGUgPSBsYXN0U2NhbGUuc2NhbGU7Ci0gICAg
ICAgIGVuZENTU1NjYWxlID0gY3NzU2NhbGVGcm9tSXRlbShsYXN0U2NhbGUuc2NhbGUpOwotICAg
ICAgICAvLyBSZWNhbGN1bGF0ZSBlbmRQb3NpdGlvbiBhbmQgYm91bmQgaXQgYWNjb3JkaW5nIHRv
IG5ldyBzY2FsZS4KLSAgICAgICAgZW5kUG9zaXRpb24uc2V0WShob3RzcG90LnkoKSAqIGVuZENT
U1NjYWxlIC0gdmlld3BvcnRIb3RzcG90LnkoKSk7Ci0gICAgICAgIGVuZFBvc2l0aW9uLnNldFgo
bGFzdFNjYWxlLnhQb3NpdGlvbik7Ci0gICAgICAgIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1Jh
bmdlRm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0gICAgICAgIGVuZFBvc2l0aW9u
ID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQ
b3NSYW5nZS5ib3R0b21SaWdodCgpKTsKLSAgICAgICAgZW5kVmlzaWJsZUNvbnRlbnRSZWN0ID0g
UVJlY3RGKGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8g
ZW5kSXRlbVNjYWxlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgWm9vbU91dDoK
LSAgICAgICAgLy8gVW5zdGFjayBhbGwgc2NhbGUtbGV2ZWxzIGRlZXBlciB0aGFuIHRoZSBuZXcg
bGV2ZWwsIHNvIGEgem9vbS1iYWNrIHdvbid0IGVuZCB1cCB6b29taW5nIGluLgotICAgICAgICB3
aGlsZSAoIW1fc2NhbGVTdGFjay5pc0VtcHR5KCkgJiYgbV9zY2FsZVN0YWNrLmxhc3QoKS5zY2Fs
ZSA+PSBlbmRJdGVtU2NhbGUpCi0gICAgICAgICAgICBtX3NjYWxlU3RhY2sucmVtb3ZlTGFzdCgp
OwotICAgICAgICBtX3pvb21PdXRTY2FsZSA9IGVuZEl0ZW1TY2FsZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBOb1pvb206Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGFuaW1hdGVQ
YWdlSXRlbVJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7Ci19Ci0KLVFSZWN0RiBR
dFZpZXdwb3J0SGFuZGxlcjo6aW5pdGlhbFJlY3QoKSBjb25zdAotewotICAgIEFTU0VSVChtX3Jh
d0F0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlID4gMCk7Ci0KLSAgICBxcmVhbCBlbmRJdGVtU2NhbGUg
PSBpdGVtU2NhbGVGcm9tQ1NTKGlubmVyQm91bmRlZENTU1NjYWxlKG1fcmF3QXR0cmlidXRlcy5p
bml0aWFsU2NhbGUpKTsKLSAgICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3cG9y
dEl0ZW0tPmJvdW5kaW5nUmVjdCgpOwotICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3Qo
UVBvaW50RigwLCAwKSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2FsZSk7Ci0KLSAg
ICByZXR1cm4gZW5kVmlzaWJsZUNvbnRlbnRSZWN0OwotfQotCi1RUmVjdEYgUXRWaWV3cG9ydEhh
bmRsZXI6Om5lYXJlc3RWYWxpZEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcXJlYWwgZW5kSXRlbVNj
YWxlID0gaXRlbVNjYWxlRnJvbUNTUyhpbm5lckJvdW5kZWRDU1NTY2FsZShjdXJyZW50Q1NTU2Nh
bGUoKSkpOwotCi0gICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVt
LT5ib3VuZGluZ1JlY3QoKTsKLSAgICBRUG9pbnRGIHZpZXdwb3J0SG90c3BvdCA9IHZpZXdwb3J0
UmVjdC5jZW50ZXIoKTsKLQotICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBtX3ZpZXdwb3J0SXRl
bS0+bWFwVG9XZWJDb250ZW50KHZpZXdwb3J0SG90c3BvdCkgKiBlbmRJdGVtU2NhbGUgLSB2aWV3
cG9ydEhvdHNwb3Q7Ci0KLSAgICBRUmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VG
b3JQYWdlSXRlbUF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKLSAgICBlbmRQb3NpdGlvbiA9IGJvdW5k
UG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2Uu
Ym90dG9tUmlnaHQoKSk7Ci0KLSAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBv
c2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxl
KTsKLQotICAgIHJldHVybiBlbmRWaXNpYmxlQ29udGVudFJlY3Q7Ci19Ci0KLXZvaWQgUXRWaWV3
cG9ydEhhbmRsZXI6OnNldENTU1NjYWxlKHFyZWFsIHNjYWxlKQotewotICAgIFZpZXdwb3J0VXBk
YXRlRGVmZXJyZXIgZ3VhcmQodGhpcyk7Ci0KLSAgICBxcmVhbCBuZXdTY2FsZSA9IGlubmVyQm91
bmRlZENTU1NjYWxlKHNjYWxlKTsKLSAgICBtX3BhZ2VJdGVtLT5zZXRDb250ZW50c1NjYWxlKGl0
ZW1TY2FsZUZyb21DU1MobmV3U2NhbGUpKTsKLX0KLQotcXJlYWwgUXRWaWV3cG9ydEhhbmRsZXI6
OmN1cnJlbnRDU1NTY2FsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNzc1NjYWxlRnJvbUl0ZW0o
bV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpKTsKLX0KLQotYm9vbCBRdFZpZXdwb3J0SGFuZGxl
cjo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92aWV3cG9y
dEl0ZW0tPmlzRmxpY2tpbmcoKTsKLX0KLQotYm9vbCBRdFZpZXdwb3J0SGFuZGxlcjo6cGFuR2Vz
dHVyZUFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmlld3BvcnRJdGVtLT5pc0RyYWdn
aW5nKCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVTdGFydGVkKGNv
bnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCi17Ci0g
ICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0
aW9uLgotICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7Ci0KLSAgICBtX3ZpZXdwb3J0
SXRlbS0+aGFuZGxlRmxpY2thYmxlTW91c2VQcmVzcyhwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBN
aWxsaXMpOwotICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9z
aXRpb247Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVSZXF1ZXN0VXBk
YXRlKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMp
Ci17Ci0gICAgbV92aWV3cG9ydEl0ZW0tPmhhbmRsZUZsaWNrYWJsZU1vdXNlTW92ZShwb3NpdGlv
biwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9y
dENvb3JkaW5hdGVzID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBh
bkdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0
YW1wTWlsbGlzKQotewotICAgIG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2FibGVNb3VzZVJl
bGVhc2UocG9zaXRpb24sIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAgICBtX2xhc3RQaW5jaENl
bnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBvc2l0aW9uOwotfQotCi12b2lkIFF0Vmlld3Bv
cnRIYW5kbGVyOjpwYW5HZXN0dXJlQ2FuY2VsbGVkKCkKLXsKLSAgICAvLyBSZXNldCB0aGUgdmVs
b2NpdHkgc2FtcGxlcyBvZiB0aGUgZmxpY2thYmxlLgotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGJ5IHRoZSByZWNvZ25pemVyIGlmIHdlIGhhdmUgYSByZWNvZ25pemVkCi0gICAg
Ly8gcGFuIGdlc3R1cmUgYW5kIHJlY2VpdmUgYSB0b3VjaCBldmVudCB3aXRoIG11bHRpcGxlIHRv
dWNoIHBvaW50cwotICAgIC8vIChpZS4gdHJhbnNpdGlvbiB0byBhIHBpbmNoIGdlc3R1cmUpIGFz
IGl0IGRvZXMgbm90IG1vdmUgdGhlIGNvbnRlbnQKLSAgICAvLyBiYWNrIGluc2lkZSB2YWxpZCBi
b3VuZHMuCi0gICAgLy8gV2hlbiB0aGUgcGluY2ggZ2VzdHVyZSBlbmRzLCB0aGUgY29udGVudCBp
cyBwb3NpdGlvbmVkIGFuZCBzY2FsZWQKLSAgICAvLyBiYWNrIHRvIHZhbGlkIGJvdW5kYXJpZXMu
Ci0gICAgbV92aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7Ci19Ci0KLWJvb2wgUXRWaWV3cG9y
dEhhbmRsZXI6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9z
Y2FsZUFuaW1hdGlvbi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc7Ci19
Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OmNhbmNlbFNjcm9sbEFuaW1hdGlvbigpCi17Ci0g
ICAgaWYgKCFzY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gSWYgdGhlIHBhbiBnZXN0dXJlIHJlY29nbml6ZXIgcmVjZWl2ZXMgYSB0b3VjaCBiZWdpbiBl
dmVudAotICAgIC8vIGR1cmluZyBhbiBvbmdvaW5nIGtpbmV0aWMgc2Nyb2xsIGFuaW1hdGlvbiBv
ZiBhIHByZXZpb3VzCi0gICAgLy8gcGFuIGdlc3R1cmUsIHRoZSBhbmltYXRpb24gaXMgc3RvcHBl
ZCBhbmQgdGhlIGNvbnRlbnQgaXMKLSAgICAvLyBpbW1lZGlhdGVseSBwb3NpdGlvbmVkIGJhY2sg
dG8gdmFsaWQgYm91bmRhcmllcy4KLQotICAgIG1fdmlld3BvcnRJdGVtLT5jYW5jZWxGbGljaygp
OwotICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQodGhpcyk7Ci0gICAgc2V0UGFnZUl0
ZW1SZWN0VmlzaWJsZShuZWFyZXN0VmFsaWRCb3VuZHMoKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9y
dEhhbmRsZXI6OmludGVycnVwdFNjYWxlQW5pbWF0aW9uKCkKLXsKLSAgICAvLyBUaGlzIGludGVy
cnVwdHMgdGhlIHNjYWxlIGFuaW1hdGlvbiBleGFjdGx5IHdoZXJlIGl0IGlzLCBldmVuIGlmIGl0
IGlzIG91dCBvZiBib3VuZHMuCi0gICAgbV9zY2FsZUFuaW1hdGlvbi0+c3RvcCgpOwotfQotCi1i
b29sIFF0Vmlld3BvcnRIYW5kbGVyOjpwaW5jaEdlc3R1cmVBY3RpdmUoKSBjb25zdAotewotICAg
IHJldHVybiBtX3BpbmNoU3RhcnRTY2FsZSA+IDA7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRs
ZXI6OnBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdw
b3J0Q29vcmRpbmF0ZXMpCi17Ci0gICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1
bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgotICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFjdGlv
bik7Ci0KLSAgICBpZiAoIW1fYWxsb3dzVXNlclNjYWxpbmcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fc2NhbGVTdGFjay5jbGVhcigpOwotICAgIG1fem9vbU91dFNjYWxlID0gMC4wOwotCi0g
ICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyID0gYWRvcHRQdHIobmV3IFZpZXdwb3J0VXBkYXRlRGVm
ZXJyZXIodGhpcywgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5k
Q29udGVudCkpOwotCi0gICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMg
PSBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKLSAgICBtX3BpbmNoU3RhcnRTY2Fs
ZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFu
ZGxlcjo6cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRl
ckluVmlld3BvcnRDb29yZGluYXRlcywgcXJlYWwgdG90YWxTY2FsZUZhY3RvcikKLXsKLSAgICBB
U1NFUlQobV9zdXNwZW5kQ291bnQpOwotCi0gICAgaWYgKCFtX2FsbG93c1VzZXJTY2FsaW5nKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyAgQ2hhbmdlcyBvZiB0aGUgY2VudGVyIHBvc2l0aW9u
IHNob3VsZCBtb3ZlIHRoZSBwYWdlIGV2ZW4gaWYgdGhlIHpvb20gZmFjdG9yCi0gICAgLy8gIGRv
ZXMgbm90IGNoYW5nZS4KLSAgICBjb25zdCBxcmVhbCBjc3NTY2FsZSA9IGNzc1NjYWxlRnJvbUl0
ZW0obV9waW5jaFN0YXJ0U2NhbGUgKiB0b3RhbFNjYWxlRmFjdG9yKTsKLQotICAgIC8vIEFsbG93
IHpvb21pbmcgb3V0IGJleW9uZCBtaW1pbXVtIHNjYWxlIG9uIHBhZ2VzIHRoYXQgZG8gbm90IGV4
cGxpY2l0bHkgZGlzYWxsb3cgaXQuCi0gICAgY29uc3QgcXJlYWwgdGFyZ2V0Q1NTU2NhbGUgPSBv
dXRlckJvdW5kZWRDU1NTY2FsZShjc3NTY2FsZSk7Ci0KLSAgICBzY2FsZUNvbnRlbnQobV92aWV3
cG9ydEl0ZW0tPm1hcFRvV2ViQ29udGVudChwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRl
cyksIHRhcmdldENTU1NjYWxlKTsKLQotICAgIGNvbnN0IFFQb2ludEYgcG9zaXRpb25EaWZmID0g
cGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgLSBtX2xhc3RQaW5jaENlbnRlckluVmll
d3BvcnRDb29yZGluYXRlczsKLSAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGlu
YXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOwotCi0gICAgbV92aWV3cG9y
dEl0ZW0tPnNldENvbnRlbnRQb3MobV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKSAtIHBvc2l0
aW9uRGlmZik7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBpbmNoR2VzdHVyZUVuZGVk
KCkKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kQ291bnQpOwotCi0gICAgaWYgKCFtX2FsbG93c1Vz
ZXJTY2FsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3BpbmNoU3RhcnRTY2FsZSA9IC0x
OwotCi0gICAgYW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUobmVhcmVzdFZhbGlkQm91bmRzKCkp
OwotICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOyAvLyBDbGVhciBhZnRlciBzdGFy
dGluZyBwb3RlbnRpYWwgYW5pbWF0aW9uLCB3aGljaCB0YWtlcyBvdmVyIGRlZmVycmluZy4KLX0K
LQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlQ2FuY2VsbGVkKCkKLXsKLSAg
ICBtX3BpbmNoU3RhcnRTY2FsZSA9IC0xOwotICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVh
cigpOwotfQotCi1RUmVjdEYgUXRWaWV3cG9ydEhhbmRsZXI6OnZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdAotewotICAgIGNvbnN0IFFSZWN0RiB2aXNpYmxlUmVjdChtX3ZpZXdwb3J0SXRlbS0+
Ym91bmRpbmdSZWN0KCkuaW50ZXJzZWN0ZWQobV9wYWdlSXRlbS0+Ym91bmRpbmdSZWN0KCkpKTsK
LSAgICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPm1hcFJlY3RUb1dlYkNvbnRlbnQodmlzaWJsZVJl
Y3QpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjppbmZvcm1WaXNpYmxlQ29udGVudENo
YW5nZShjb25zdCBRUG9pbnRGJiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAgIERyYXdpbmdBcmVh
UHJveHkqIGRyYXdpbmdBcmVhID0gbV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7Ci0gICAg
aWYgKCFkcmF3aW5nQXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcXJlYWwgc2NhbGUgPSBt
X3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7Ci0KLSAgICBpZiAoc2NhbGUgIT0gbV9sYXN0Q29t
bWl0dGVkU2NhbGUpCi0gICAgICAgIGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgp
LT50ZXN0KCktPmNvbnRlbnRzU2NhbGVDb21taXR0ZWQoKTsKLSAgICBtX2xhc3RDb21taXR0ZWRT
Y2FsZSA9IHNjYWxlOwotCi0gICAgZHJhd2luZ0FyZWEtPnNldFZpc2libGVDb250ZW50c1JlY3Qo
dmlzaWJsZUNvbnRlbnRzUmVjdCgpLCBzY2FsZSwgdHJhamVjdG9yeVZlY3Rvcik7Ci0KLSAgICAv
LyBFbnN1cmUgdGhhdCB1cGRhdGVQYWludE5vZGUgaXMgYWx3YXlzIGNhbGxlZCBiZWZvcmUgcGFp
bnRpbmcuCi0gICAgbV9wYWdlSXRlbS0+dXBkYXRlKCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhh
bmRsZXI6OnZpZXdwb3J0SXRlbVNpemVDaGFuZ2VkKCkKLXsKLSAgICBRU2l6ZSB2aWV3cG9ydFNp
emUgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkuc2l6ZSgpLnRvU2l6ZSgpOwotCi0g
ICAgaWYgKHZpZXdwb3J0U2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IExldCB0aGUgV2ViUHJvY2VzcyBrbm93IGFib3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwgc28g
dGhhdAotICAgIC8vIGl0IGNhbiByZXNpemUgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkuCi0gICAg
bV93ZWJQYWdlUHJveHktPnNldFZpZXdwb3J0U2l6ZSh2aWV3cG9ydFNpemUpOwotCi0gICAgaW5m
b3JtVmlzaWJsZUNvbnRlbnRDaGFuZ2UoUVBvaW50RigpKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0
SGFuZGxlcjo6c2NhbGVDb250ZW50KGNvbnN0IFFQb2ludEYmIGNlbnRlckluQ1NTQ29vcmRpbmF0
ZXMsIHFyZWFsIGNzc1NjYWxlKQotewotICAgIFFQb2ludEYgb2xkUGluY2hDZW50ZXJPblZpZXdw
b3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50KGNlbnRlckluQ1NTQ29vcmRp
bmF0ZXMpOwotICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2NhbGUoaXRlbVNjYWxlRnJvbUNT
Uyhjc3NTY2FsZSkpOwotICAgIFFQb2ludEYgbmV3UGluY2hDZW50ZXJPblZpZXdwb3J0ID0gbV92
aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOwot
Ci0gICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobV92aWV3cG9ydEl0ZW0tPmNvbnRl
bnRQb3MoKSArIChuZXdQaW5jaENlbnRlck9uVmlld3BvcnQgLSBvbGRQaW5jaENlbnRlck9uVmll
d3BvcnQpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNpbmNsdWRlICJtb2NfUXRW
aWV3cG9ydEhhbmRsZXIuY3BwIgotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0Vmlld3BvcnRIYW5kbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMzdm
ZTlmMzYzMzE4NzU4YmFiYWJmNGJlYjdjOWVjZGRiYzEzYWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
Vmlld3BvcnRIYW5kbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMSBCZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1p
bkB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBRdFZpZXdwb3J0SGFuZGxlcl9oCi0jZGVmaW5lIFF0
Vmlld3BvcnRIYW5kbGVyX2gKLQotI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgotI2luY2x1ZGUg
PFF0Q29yZS9RUmVjdEY+Ci0jaW5jbHVkZSA8UXRDb3JlL1FWYXJpYW50PgotI2luY2x1ZGUgPFF0
Q29yZS9RVmFyaWFudEFuaW1hdGlvbj4KLSNpbmNsdWRlIDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1l
bnRzLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNs
YXNzIFFQb2ludEY7Ci1jbGFzcyBRV2hlZWxFdmVudDsKLVFUX0VORF9OQU1FU1BBQ0UKLQotY2xh
c3MgUVF1aWNrV2ViUGFnZTsKLWNsYXNzIFFRdWlja1dlYlZpZXc7Ci0KLWNsYXNzIFFXZWJLaXRU
ZXN0OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViUGFnZVByb3h5OwotY2xhc3Mg
Vmlld3BvcnRVcGRhdGVEZWZlcnJlcjsKLQotY2xhc3MgUXRWaWV3cG9ydEhhbmRsZXIgOiBwdWJs
aWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLQotcHVibGljOgotICAgIFF0Vmlld3BvcnRIYW5k
bGVyKFdlYlBhZ2VQcm94eSosIFFRdWlja1dlYlZpZXcqLCBRUXVpY2tXZWJQYWdlKik7Ci0gICAg
flF0Vmlld3BvcnRIYW5kbGVyKCk7Ci0KLSAgICB2b2lkIHRvdWNoQmVnaW4oKTsKLSAgICB2b2lk
IHRvdWNoRW5kKCk7Ci0KLSAgICBib29sIHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0Owot
ICAgIHZvaWQgY2FuY2VsU2Nyb2xsQW5pbWF0aW9uKCk7Ci0KLSAgICBib29sIHBhbkdlc3R1cmVB
Y3RpdmUoKSBjb25zdDsKLSAgICB2b2lkIHBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYm
IHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIHZvaWQgcGFuR2Vz
dHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRp
bWVzdGFtcE1pbGxpcyk7Ci0gICAgdm9pZCBwYW5HZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYg
cG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7Ci0gICAgdm9pZCBwYW5HZXN0
dXJlQ2FuY2VsbGVkKCk7Ci0KLSAgICBib29sIHNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3Q7
Ci0gICAgdm9pZCBpbnRlcnJ1cHRTY2FsZUFuaW1hdGlvbigpOwotCi0gICAgYm9vbCBwaW5jaEdl
c3R1cmVBY3RpdmUoKSBjb25zdDsKLSAgICB2b2lkIHBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29uc3Qg
UVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpOwotICAgIHZvaWQgcGlu
Y2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3Bv
cnRDb29yZGluYXRlcywgcXJlYWwgdG90YWxTY2FsZUZhY3Rvcik7Ci0gICAgdm9pZCBwaW5jaEdl
c3R1cmVFbmRlZCgpOwotICAgIHZvaWQgcGluY2hHZXN0dXJlQ2FuY2VsbGVkKCk7Ci0KLSAgICB2
b2lkIHpvb21Ub0FyZWFHZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29u
c3QgUVJlY3RGJiB0YXJnZXRBcmVhKTsKLSAgICB2b2lkIGZvY3VzRWRpdGFibGVBcmVhKGNvbnN0
IFFSZWN0RiYgY2FyZXRBcmVhLCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpOwotCi0gICAgdm9p
ZCBwYWdlQ29udGVudFBvc2l0aW9uUmVxdWVzdGVkKGNvbnN0IFFQb2ludCYgcG9zaXRpb24pOwot
Ci0gICAgdm9pZCB2aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpOwotICAgIHZvaWQgdmlld3BvcnRB
dHRyaWJ1dGVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmKTsKLSAg
ICB2b2lkIGluZm9ybVZpc2libGVDb250ZW50Q2hhbmdlKGNvbnN0IFFQb2ludEYmIHRyYWplY3Rv
cnkgPSBRUG9pbnRGKCkpOwotICAgIHZvaWQgcGFnZUNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3Qg
UVNpemUmIG5ld1NpemUsIGNvbnN0IFFTaXplJiB2aWV3cG9ydFNpemUpOwotCi1wcml2YXRlIFFf
U0xPVFM6Ci0gICAgLy8gUmVzcG9uZCB0byBjaGFuZ2VzIG9mIHBvc2l0aW9uIHRoYXQgYXJlIG5v
dCBkcml2ZW4gYnkgdXMuCi0gICAgdm9pZCBwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpOwotCi0g
ICAgdm9pZCBzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0
YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKTsKLSAgICB2b2lkIHNjYWxlQW5pbWF0aW9u
VmFsdWVDaGFuZ2VkKFFWYXJpYW50IHZhbHVlKTsKLQotICAgIHZvaWQgZmxpY2tNb3ZlU3RhcnRl
ZCgpOyAvLyBDYWxsZWQgd2hlbiBwYW5uaW5nIHN0YXJ0cy4KLSAgICB2b2lkIGZsaWNrTW92ZUVu
ZGVkKCk7IC8vICAgQ2FsbGVkIHdoZW4gcGFubmluZyAoKyBraW5ldGljIGFuaW1hdGlvbikgZW5k
cy4KLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjsK
LSAgICBmcmllbmQgY2xhc3MgOjpRV2ViS2l0VGVzdDsKLQotICAgIFdlYlBhZ2VQcm94eSogY29u
c3QgbV93ZWJQYWdlUHJveHk7Ci0gICAgUVF1aWNrV2ViVmlldyogY29uc3QgbV92aWV3cG9ydEl0
ZW07Ci0gICAgUVF1aWNrV2ViUGFnZSogY29uc3QgbV9wYWdlSXRlbTsKLQotICAgIHFyZWFsIGNz
c1NjYWxlRnJvbUl0ZW0ocXJlYWwpIGNvbnN0OwotICAgIHFyZWFsIGl0ZW1TY2FsZUZyb21DU1Mo
cXJlYWwpIGNvbnN0OwotICAgIHFyZWFsIGl0ZW1Db29yZEZyb21DU1MocXJlYWwpIGNvbnN0Owot
ICAgIFFSZWN0RiBpdGVtUmVjdEZyb21DU1MoY29uc3QgUVJlY3RGJikgY29uc3Q7Ci0KLSAgICBx
cmVhbCBpbm5lckJvdW5kZWRDU1NTY2FsZShxcmVhbCkgY29uc3Q7Ci0gICAgcXJlYWwgb3V0ZXJC
b3VuZGVkQ1NTU2NhbGUocXJlYWwpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRJbml0aWFsU2NhbGVJ
Zk5lZWRlZCgpOwotCi0gICAgdm9pZCBzZXRDU1NTY2FsZShxcmVhbCk7Ci0gICAgcXJlYWwgY3Vy
cmVudENTU1NjYWxlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFBhZ2VJdGVtUmVjdFZpc2libGUo
Y29uc3QgUVJlY3RGJik7Ci0gICAgdm9pZCBhbmltYXRlUGFnZUl0ZW1SZWN0VmlzaWJsZShjb25z
dCBRUmVjdEYmKTsKLQotICAgIFFSZWN0RiB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7Ci0g
ICAgUVJlY3RGIGluaXRpYWxSZWN0KCkgY29uc3Q7Ci0gICAgUVJlY3RGIG5lYXJlc3RWYWxpZEJv
dW5kcygpIGNvbnN0OwotCi0gICAgUVJlY3RGIGNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRT
Y2FsZShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0OwotICAgIHZvaWQgc2NhbGVDb250ZW50KGNvbnN0
IFFQb2ludEYmIGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFsIGNzc1NjYWxlKTsKLQotICAg
IHZvaWQgc3VzcGVuZFBhZ2VDb250ZW50KCk7Ci0gICAgdm9pZCByZXN1bWVQYWdlQ29udGVudCgp
OwotCi0gICAgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIG1fcmF3QXR0cmlidXRlczsKLQot
ICAgIGJvb2wgbV9hbGxvd3NVc2VyU2NhbGluZzsKLSAgICBxcmVhbCBtX21pbmltdW1TY2FsZTsK
LSAgICBxcmVhbCBtX21heGltdW1TY2FsZTsKLSAgICBxcmVhbCBtX2RldmljZVBpeGVsUmF0aW87
Ci0KLSAgICBRU2l6ZSBtX2xheW91dFNpemU7Ci0KLSAgICBpbnQgbV9zdXNwZW5kQ291bnQ7Ci0g
ICAgYm9vbCBtX2hhc1N1c3BlbmRlZENvbnRlbnQ7Ci0KLSAgICBPd25QdHI8Vmlld3BvcnRVcGRh
dGVEZWZlcnJlcj4gbV9zY2FsZVVwZGF0ZURlZmVycmVyOwotICAgIE93blB0cjxWaWV3cG9ydFVw
ZGF0ZURlZmVycmVyPiBtX3Njcm9sbFVwZGF0ZURlZmVycmVyOwotICAgIE93blB0cjxWaWV3cG9y
dFVwZGF0ZURlZmVycmVyPiBtX3RvdWNoVXBkYXRlRGVmZXJyZXI7Ci0gICAgT3duUHRyPFZpZXdw
b3J0VXBkYXRlRGVmZXJyZXI+IG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXI7Ci0KLSAgICBib29s
IG1faGFkVXNlckludGVyYWN0aW9uOwotCi0gICAgY2xhc3MgU2NhbGVBbmltYXRpb24gOiBwdWJs
aWMgUVZhcmlhbnRBbmltYXRpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgU2NhbGVBbmltYXRp
b24oUU9iamVjdCogcGFyZW50ID0gMCkKLSAgICAgICAgICAgIDogUVZhcmlhbnRBbmltYXRpb24o
cGFyZW50KQotICAgICAgICB7IH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ3VycmVu
dFZhbHVlKGNvbnN0IFFWYXJpYW50JikgeyB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCBTY2FsZVN0
YWNrSXRlbSB7Ci0gICAgICAgIFNjYWxlU3RhY2tJdGVtKHFyZWFsIHNjYWxlLCBxcmVhbCB4UG9z
aXRpb24pCi0gICAgICAgICAgICA6IHNjYWxlKHNjYWxlKQotICAgICAgICAgICAgLCB4UG9zaXRp
b24oeFBvc2l0aW9uKQotICAgICAgICB7IH0KLQotICAgICAgICBxcmVhbCBzY2FsZTsKLSAgICAg
ICAgcXJlYWwgeFBvc2l0aW9uOwotICAgIH07Ci0KLSAgICBTY2FsZUFuaW1hdGlvbiogbV9zY2Fs
ZUFuaW1hdGlvbjsKLSAgICBRUG9pbnRGIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3Jk
aW5hdGVzOwotICAgIFFQb2ludEYgbV9sYXN0U2Nyb2xsUG9zaXRpb247Ci0gICAgcXJlYWwgbV9w
aW5jaFN0YXJ0U2NhbGU7Ci0gICAgcXJlYWwgbV9sYXN0Q29tbWl0dGVkU2NhbGU7Ci0gICAgcXJl
YWwgbV96b29tT3V0U2NhbGU7Ci0gICAgUUxpc3Q8U2NhbGVTdGFja0l0ZW0+IG1fc2NhbGVTdGFj
azsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gUXRWaWV3cG9ydEhh
bmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZUV2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdl
RXZlbnRIYW5kbGVyLmNwcAppbmRleCBhMDI5MDBmY2RmYjM3YTBiMWExMDY0YWEzNDZkYTg1OGIx
OTM3NWE0Li40Y2UxM2JkYzI4NmIxYjA5ZDljOTUxMjE5MzM5NTlkM2VkOTgwOTAwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVy
LmNwcApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQu
aCIKICNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2Vi
V2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlF0Vmlld3BvcnRIYW5kbGVyLmgiCisjaW5jbHVkZSAi
Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNp
bmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIK
QEAgLTMwNSw3ICszMDUsNyBAQCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRm9j
dXNPdXRFdmVudChRRm9jdXNFdmVudCopCiAgICAgbV93ZWJQYWdlUHJveHktPnZpZXdTdGF0ZURp
ZENoYW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdX
aW5kb3dJc0FjdGl2ZSk7CiB9CiAKLXZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpzZXRWaWV3
cG9ydEhhbmRsZXIoUXRWaWV3cG9ydEhhbmRsZXIqIGhhbmRsZXIpCit2b2lkIFF0V2ViUGFnZUV2
ZW50SGFuZGxlcjo6c2V0Vmlld3BvcnRIYW5kbGVyKFZpZXdwb3J0SGFuZGxlckNsaWVudFF0KiBo
YW5kbGVyKQogewogICAgIG1fdmlld3BvcnRIYW5kbGVyID0gaGFuZGxlcjsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaAppbmRl
eCA0NDZkYjc1M2RmY2JhYjg5MzAzMjI5NDNkMmY2MDcwZTZkNTIwNmI3Li44YzkwMzA5MzdkZDE3
OGE1YjBkNzg5YWY1NGI4Yzc4YTk3N2E5M2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5oCkBAIC00Niw3ICs0Niw3IEBAIGNs
YXNzIEludFJlY3Q7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmF0aXZlV2ViVG91Y2hF
dmVudDsKLWNsYXNzIFF0Vmlld3BvcnRIYW5kbGVyOworY2xhc3MgVmlld3BvcnRIYW5kbGVyQ2xp
ZW50UXQ7CiBjbGFzcyBTaGFyZWFibGVCaXRtYXA7CiBjbGFzcyBXZWJHZXN0dXJlRXZlbnQ7CiBj
bGFzcyBXZWJQYWdlUHJveHk7CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGhh
bmRsZUlucHV0TWV0aG9kRXZlbnQoUUlucHV0TWV0aG9kRXZlbnQqKTsKICAgICB2b2lkIGhhbmRs
ZVRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqKTsKIAotICAgIHZvaWQgc2V0Vmlld3BvcnRIYW5kbGVy
KFF0Vmlld3BvcnRIYW5kbGVyKik7CisgICAgdm9pZCBzZXRWaWV3cG9ydEhhbmRsZXIoVmlld3Bv
cnRIYW5kbGVyQ2xpZW50UXQqKTsKIAogICAgIHZvaWQgYWN0aXZhdGVUYXBIaWdobGlnaHQoY29u
c3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmKTsKICAgICB2b2lkIGRlYWN0aXZhdGVUYXBIaWdo
bGlnaHQoKTsKQEAgLTkxLDEzICs5MSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVJbnB1
dEV2ZW50KGNvbnN0IFFJbnB1dEV2ZW50Kik7CiAgICAgdm9pZCByZXNldEdlc3R1cmVSZWNvZ25p
emVycygpOwogCi0gICAgUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0SGFuZGxlcigpIHsgcmV0
dXJuIG1fdmlld3BvcnRIYW5kbGVyOyB9CisgICAgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQqIHZp
ZXdwb3J0SGFuZGxlcigpIHsgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVyOyB9CiAKICAgICB2b2lk
IHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBkcmFnSW1hZ2UpOwogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViUGFnZVByb3h5KiBtX3dl
YlBhZ2VQcm94eTsKLSAgICBRdFZpZXdwb3J0SGFuZGxlciogbV92aWV3cG9ydEhhbmRsZXI7Cisg
ICAgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQqIG1fdmlld3BvcnRIYW5kbGVyOwogICAgIFF0UGFu
R2VzdHVyZVJlY29nbml6ZXIgbV9wYW5HZXN0dXJlUmVjb2duaXplcjsKICAgICBRdFBpbmNoR2Vz
dHVyZVJlY29nbml6ZXIgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyOwogICAgIFF0VGFwR2VzdHVy
ZVJlY29nbml6ZXIgbV90YXBHZXN0dXJlUmVjb2duaXplcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9WaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvcXQvVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY4ZWM3YjFkOWViMTZmMjhiNzZiYTJhMzQ3NWJlYWRkYzliZTU5YzQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQuY3BwCkBAIC0wLDAgKzEsNTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJp
Z2h0IChDKSAyMDExIEJlbmphbWluIFBvdWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+CisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEhhbmRsZXJDbGllbnRRdC5o
IgorCisjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmll
d19wLmgiCisjaW5jbHVkZSAicXdlYmtpdHRlc3RfcC5oIgorI2luY2x1ZGUgPFFQb2ludEY+Cisj
aW5jbHVkZSA8UVRyYW5zZm9ybT4KKyNpbmNsdWRlIDxRdFF1aWNrL3FxdWlja2l0ZW0uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXpl
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgaW50IGtTY2FsZUFuaW1h
dGlvbkR1cmF0aW9uTWlsbGlzID0gMjUwOworCitWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6Vmll
d3BvcnRIYW5kbGVyQ2xpZW50UXQoUVF1aWNrV2ViVmlldyogdmlld3BvcnRJdGVtLCBRUXVpY2tX
ZWJQYWdlKiBwYWdlSXRlbSkKKyAgICA6IG1fdmlld3BvcnRJdGVtKHZpZXdwb3J0SXRlbSkKKyAg
ICAsIG1fcGFnZUl0ZW0ocGFnZUl0ZW0pCisgICAgLCBtX3NjYWxlQW5pbWF0aW9uKG5ldyBTY2Fs
ZUFuaW1hdGlvbih0aGlzKSkKKyAgICAsIG1fcGluY2hTdGFydFNjYWxlKC0xKQorICAgICwgbV9s
YXN0Q29tbWl0dGVkU2NhbGUoLTEpCisgICAgLCBtX3pvb21PdXRTY2FsZSgwKQorICAgICwgbV9p
Z25vcmVWaWV3cG9ydENoYW5nZXModHJ1ZSkKK3sKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRE
dXJhdGlvbihrU2NhbGVBbmltYXRpb25EdXJhdGlvbk1pbGxpcyk7CisgICAgbV9zY2FsZUFuaW1h
dGlvbi0+c2V0RWFzaW5nQ3VydmUoUUVhc2luZ0N1cnZlOjpPdXRDdWJpYyk7CisKKyAgICBjb25u
ZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRTdGFydGVkKCkpLCBTTE9UKGZsaWNr
TW92ZVN0YXJ0ZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKKyAgICBjb25uZWN0KG1fdmll
d3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRFbmRlZCgpKSwgU0xPVChmbGlja01vdmVFbmRlZCgp
KSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJ
R05BTChjb250ZW50WENoYW5nZWQoKSksIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkp
OworICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50WUNoYW5nZWQoKSks
IFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOworCisKKyAgICBjb25uZWN0KG1fc2Nh
bGVBbmltYXRpb24sIFNJR05BTChzdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0
ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpLAorICAgICAgICAgICAgU0xPVChzY2FsZUFu
aW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RB
bmltYXRpb246OlN0YXRlKSkpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpT
Y2FsZUFuaW1hdGlvbjo6dXBkYXRlQ3VycmVudFZhbHVlKGNvbnN0IFFWYXJpYW50JiB2YWx1ZSkK
K3sKKyAgICAvLyBSZXNldHRpbmcgdGhlIGVuZCB2YWx1ZSwgdGhlIGVhc2luZyBjdXJ2ZSBvciB0
aGUgZHVyYXRpb24gb2YgdGhlIHNjYWxlIGFuaW1hdGlvbgorICAgIC8vIHRyaWdnZXJzIGEgcmVj
YWxjdWxhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGludGVydmFsLiBUaGlzIG1pZ2h0IGNoYW5nZSB0
aGUgY3VycmVudAorICAgIC8vIHZhbHVlIG9mIHRoZSBhbmltYXRlZCBwcm9wZXJ0eS4KKyAgICAv
LyBNYWtlIHN1cmUgd2Ugb25seSBhY3Qgb24gYW5pbWF0aW9uIHZhbHVlIGNoYW5nZXMgaWYgdGhl
IGFuaW1hdGlvbiBpcyBhY3RpdmUuCisgICAgaWYgKCFtX2hhbmRsZXJDbGllbnQtPnNjYWxlQW5p
bWF0aW9uQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFSZWN0RiBpdGVtUmVjdCA9
IHZhbHVlLnRvUmVjdEYoKTsKKyAgICBmbG9hdCBpdGVtU2NhbGUgPSBtX2hhbmRsZXJDbGllbnQt
PnZpZXdwb3J0U2NhbGVGb3JSZWN0KGl0ZW1SZWN0KTsKKworICAgIG1faGFuZGxlckNsaWVudC0+
c2V0Q29udGVudFJlY3RWaXNpYmxlUG9zaXRpb25BdFNjYWxlKGl0ZW1SZWN0LnRvcExlZnQoKSwg
aXRlbVNjYWxlKTsKK30KKworVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6On5WaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdCgpCit7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNldENv
bnRlbnRSZWN0VmlzaWJsZVBvc2l0aW9uQXRTY2FsZShjb25zdCBRUG9pbnRGJiBsb2NhdGlvbiwg
cXJlYWwgaXRlbVNjYWxlKQoreworICAgIEFTU0VSVChpdGVtU2NhbGUgPj0gMCk7CisKKyAgICBz
Y2FsZUNvbnRlbnQoaXRlbVNjYWxlKTsKKworICAgIC8vIFRvIGFuaW1hdGUgdGhlIHBvc2l0aW9u
IHRvZ2V0aGVyIHdpdGggdGhlIHNjYWxlIHdlIG11bHRpcGx5IHRoZSBwb3NpdGlvbiB3aXRoIHRo
ZSBjdXJyZW50IHNjYWxlCisgICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgcGFnZSBwb3NpdGlvbiAo
ZGlzcGxhY2VtZW50IG9uIHRoZSBmbGlja2FibGUgY29udGVudEl0ZW0gYmVjYXVzZSBvZiBhZGRp
dGlvbmFsIGl0ZW1zKS4KKyAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uKG1fcGFnZUl0ZW0tPnBvcygp
ICsgbG9jYXRpb24gKiBpdGVtU2NhbGUpOworCisgICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRl
bnRQb3MobmV3UG9zaXRpb24pOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojph
bmltYXRlQ29udGVudFJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgY29udGVudFJlY3QpCit7Cisg
ICAgQVNTRVJUKG1fc2NhbGVBbmltYXRpb24tPnN0YXRlKCkgPT0gUUFic3RyYWN0QW5pbWF0aW9u
OjpTdG9wcGVkKTsKKworICAgIEFTU0VSVCghc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpOworICAg
IGlmIChzY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVJl
Y3RGIHZpZXdwb3J0UmVjdEluQ29udGVudENvb3JkcyA9IG1fdmlld3BvcnRJdGVtLT5tYXBSZWN0
VG9XZWJDb250ZW50KG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKSk7CisgICAgaWYgKGNv
bnRlbnRSZWN0ID09IHZpZXdwb3J0UmVjdEluQ29udGVudENvb3JkcykgeworICAgICAgICB1cGRh
dGVWaWV3cG9ydCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2luY2Ugd2Ug
aGF2ZSB0byBhbmltYXRlIHNjYWxlIGFuZCBwb3NpdGlvbiBhdCB0aGUgc2FtZSB0aW1lIHRoZSBz
Y2FsZSBhbmltYXRpb24gaW50ZXJwb2xhdGVzCisgICAgLy8gZnJvbSB0aGUgY3VycmVudCB2aWV3
cG9ydCByZWN0IGluIGNvbnRlbnQgY29vcmRpbmF0ZXMgdG8gYSB2aXNpYmxlIHJlY3Qgb2YgdGhl
IGNvbnRlbnQuCisgICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0U3RhcnRWYWx1ZSh2aWV3cG9ydFJl
Y3RJbkNvbnRlbnRDb29yZHMpOworICAgIG1fc2NhbGVBbmltYXRpb24tPnNldEVuZFZhbHVlKGNv
bnRlbnRSZWN0KTsKKworICAgIC8vIEluZm9ybSB0aGUgd2ViIHByb2Nlc3MgYWJvdXQgdGhlIHJl
cXVlc3RlZCB2aXNpYmxlIGNvbnRlbnQgcmVjdAorICAgIC8vIGlmIHpvb21pbmctb3V0IHNvIHRo
YXQgbm8gd2hpdGUgdGlsZXMgYXJlIGV4cG9zZWQgZHVyaW5nIGFuaW1hdGlvbi4KKyAgICBpZiAo
dmlld3BvcnRSZWN0SW5Db250ZW50Q29vcmRzLndpZHRoKCkgLyBjb250ZW50UmVjdC53aWR0aCgp
IDwgbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpKQorICAgICAgICBtX3ZpZXdwb3J0SGFuZGxl
ci0+YWRqdXN0VmlzaWJsZUNvbnRlbnRzUmVjdChjb250ZW50UmVjdCwgdmlld3BvcnRTY2FsZUZv
clJlY3QoY29udGVudFJlY3QpKTsKKworICAgIG1fc2NhbGVBbmltYXRpb24tPnN0YXJ0KCk7Cit9
CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmZsaWNrTW92ZVN0YXJ0ZWQoKQorewor
ICAgIFFfQVNTRVJUKG1fdmlld3BvcnRJdGVtLT5pc01vdmluZygpKTsKKyAgICBtX3Njcm9sbFVw
ZGF0ZURlZmVycmVyLnJlc2V0KG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKG1fdmlld3BvcnRI
YW5kbGVyLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250
ZW50KSk7CisKKyAgICBtX2xhc3RTY3JvbGxQb3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5jb250
ZW50UG9zKCk7CisKKyAgICBtX2lnbm9yZVZpZXdwb3J0Q2hhbmdlcyA9IGZhbHNlOworfQorCit2
b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpmbGlja01vdmVFbmRlZCgpCit7CisgICAgUV9B
U1NFUlQoIW1fdmlld3BvcnRJdGVtLT5pc01vdmluZygpKTsKKyAgICAvLyBUaGlzIG1ldGhvZCBp
cyBjYWxsZWQgb24gdGhlIGVuZCBvZiB0aGUgcGFuIG9yIHBhbiBraW5ldGljIGFuaW1hdGlvbi4K
KworICAgIG1faWdub3JlVmlld3BvcnRDaGFuZ2VzID0gdHJ1ZTsKKworICAgIG1fc2Nyb2xsVXBk
YXRlRGVmZXJyZXIucmVzZXQoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6
cGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKQoreworICAgIGlmIChtX2lnbm9yZVZpZXdwb3J0Q2hh
bmdlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUVBvaW50RiBuZXdQb3NpdGlvbiA9IG1fdmll
d3BvcnRJdGVtLT5jb250ZW50UG9zKCk7CisKKyAgICB1cGRhdGVWaWV3cG9ydChtX2xhc3RTY3Jv
bGxQb3NpdGlvbiAtIG5ld1Bvc2l0aW9uKTsKKworICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0g
bmV3UG9zaXRpb247Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnNjYWxlQW5p
bWF0aW9uU3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgbmV3U3RhdGUsIFFB
YnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgLypvbGRTdGF0ZSovKQoreworICAgIHN3aXRjaCAobmV3
U3RhdGUpIHsKKyAgICBjYXNlIFFBYnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZzoKKyAgICAgICAg
bV92aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7CisgICAgICAgIEFTU0VSVCghbV9hbmltYXRp
b25VcGRhdGVEZWZlcnJlcik7CisgICAgICAgIG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIucmVz
ZXQobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIobV92aWV3cG9ydEhhbmRsZXIsIFZpZXdwb3J0
VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBRQWJzdHJhY3RBbmltYXRpb246OlN0b3BwZWQ6CisgICAgICAgIG1f
YW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIucmVzZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNs
aWVudFF0Ojp0b3VjaEJlZ2luKCkKK3sKKyAgICBtX3ZpZXdwb3J0SGFuZGxlci0+c2V0SGFkVXNl
ckludGVyYWN0aW9uKHRydWUpOworCisgICAgLy8gUHJldmVudHMgcmVzdW1pbmcgdGhlIHBhZ2Ug
YmV0d2VlbiB0aGUgdXNlcidzIGZsaWNrcyBvZiB0aGUgcGFnZSB3aGlsZSB0aGUgYW5pbWF0aW9u
IGlzIHJ1bm5pbmcuCisgICAgaWYgKHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICBt
X3RvdWNoVXBkYXRlRGVmZXJyZXIucmVzZXQobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIobV92
aWV3cG9ydEhhbmRsZXIsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3Vz
cGVuZENvbnRlbnQpKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6dG91Y2hF
bmQoKQoreworICAgIG1fdG91Y2hVcGRhdGVEZWZlcnJlci5yZXNldCgpOworfQorCit2b2lkIFZp
ZXdwb3J0SGFuZGxlckNsaWVudFF0Ojpmb2N1c0VkaXRhYmxlQXJlYShjb25zdCBRUmVjdEYmIGNh
cmV0QXJlYSwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKQoreworICAgIC8vIFRoaXMgY2FuIG9u
bHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KKyAgICBBU1NFUlQo
bV92aWV3cG9ydEhhbmRsZXItPmhhZFVzZXJJbnRlcmFjdGlvbigpKTsKKworICAgIFFSZWN0RiBl
bmRBcmVhID0gbV92aWV3cG9ydEhhbmRsZXItPmNvbnZlcnRUb1ZpZXdwb3J0KHRhcmdldEFyZWEp
OworCisgICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gbV92aWV3cG9ydEhhbmRsZXItPmNvbnZlcnRU
b1ZpZXdwb3J0KG1fdmlld3BvcnRIYW5kbGVyLT5pbm5lckJvdW5kZWRDb250ZW50c1NjYWxlKDIu
MCkpOworICAgIGNvbnN0IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91
bmRpbmdSZWN0KCk7CisKKyAgICBxcmVhbCB4OworICAgIGNvbnN0IHFyZWFsIGJvcmRlck9mZnNl
dCA9IDEwOworICAgIGlmICgoZW5kQXJlYS53aWR0aCgpICsgYm9yZGVyT2Zmc2V0KSAqIGVuZEl0
ZW1TY2FsZSA8PSB2aWV3cG9ydFJlY3Qud2lkdGgoKSkgeworICAgICAgICAvLyBDZW50ZXIgdGhl
IGlucHV0IGZpZWxkIGluIHRoZSBtaWRkbGUgb2YgdGhlIHZpZXcsIGlmIGl0IGlzIHNtYWxsZXIg
dGhhbgorICAgICAgICAvLyB0aGUgdmlldyBhdCB0aGUgc2NhbGUgdGFyZ2V0LgorICAgICAgICB4
ID0gdmlld3BvcnRSZWN0LmNlbnRlcigpLngoKSAtIGVuZEFyZWEud2lkdGgoKSAqIGVuZEl0ZW1T
Y2FsZSAvIDIuMDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgY2Fy
ZXQgYWx3YXlzIGhhcyBib3JkZXJPZmZzZXQgY29udGVudHMgcGl4ZWxzIHRvIHRoZSByaWdodAor
ICAgICAgICAvLyBvZiBpdCwgYW5kIHNlY29uZGFyaWx5IChpZiBwb3NzaWJsZSksIHRoYXQgdGhl
IGFyZWEgaGFzIGJvcmRlck9mZnNldAorICAgICAgICAvLyBjb250ZW50cyBwaXhlbHMgdG8gdGhl
IGxlZnQgb2YgaXQuCisgICAgICAgIHFyZWFsIGNhcmV0T2Zmc2V0ID0gbV92aWV3cG9ydEhhbmRs
ZXItPmNvbnZlcnRUb1ZpZXdwb3J0KGNhcmV0QXJlYS54KCkpIC0gZW5kQXJlYS54KCk7CisgICAg
ICAgIHggPSBxTWluKHZpZXdwb3J0UmVjdC53aWR0aCgpIC0gKGNhcmV0T2Zmc2V0ICsgYm9yZGVy
T2Zmc2V0KSAqIGVuZEl0ZW1TY2FsZSwgYm9yZGVyT2Zmc2V0ICogZW5kSXRlbVNjYWxlKTsKKyAg
ICB9CisKKyAgICBjb25zdCBRUG9pbnRGIGhvdHNwb3QgPSBRUG9pbnRGKGVuZEFyZWEueCgpLCBl
bmRBcmVhLmNlbnRlcigpLnkoKSk7CisgICAgY29uc3QgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3Qg
PSBRUG9pbnRGKHgsIC8qIEZJWE1FOiB2aXNpYmxlQ2VudGVyICovIHZpZXdwb3J0UmVjdC5jZW50
ZXIoKS55KCkpOworCisgICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGhvdHNwb3QgKiBlbmRJdGVt
U2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Q7CisgICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gbV92aWV3
cG9ydEhhbmRsZXItPnBvc2l0aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUp
OworCisgICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1JhbmdlLnRvcExlZnQo
KSwgZW5kUG9zaXRpb24sIGVuZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpOworCisgICAgUVJlY3RG
IGVuZFZpc2libGVDb250ZW50UmVjdChlbmRQb3NpdGlvbiAvIGVuZEl0ZW1TY2FsZSwgdmlld3Bv
cnRSZWN0LnNpemUoKSAvIGVuZEl0ZW1TY2FsZSk7CisKKyAgICBhbmltYXRlQ29udGVudFJlY3RW
aXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQ6Onpvb21Ub0FyZWFHZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgdG91Y2hQb2lu
dCwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKQoreworICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFw
cGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlvbi4KKyAgICBBU1NFUlQobV92aWV3
cG9ydEhhbmRsZXItPmhhZFVzZXJJbnRlcmFjdGlvbigpKTsKKworICAgIGlmICghdGFyZ2V0QXJl
YS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3ZpZXdwb3J0SGFuZGxl
ci0+aGFzU3VzcGVuZGVkQ29udGVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBp
bnQgbWFyZ2luID0gMTA7IC8vIFdlIHdhbnQgYXQgbGVhc3QgYSBsaXR0bGUgYml0IG9mIG1hcmdp
bi4KKyAgICBRUmVjdEYgZW5kQXJlYSA9IG1fdmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0VG9WaWV3
cG9ydCh0YXJnZXRBcmVhLmFkanVzdGVkKC1tYXJnaW4sIC1tYXJnaW4sIG1hcmdpbiwgbWFyZ2lu
KSk7CisKKyAgICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3cG9ydEl0ZW0tPmJv
dW5kaW5nUmVjdCgpOworCisgICAgcXJlYWwgdGFyZ2V0Q1NTU2NhbGUgPSB2aWV3cG9ydFJlY3Qu
c2l6ZSgpLndpZHRoKCkgLyBlbmRBcmVhLnNpemUoKS53aWR0aCgpOworICAgIHFyZWFsIGVuZENT
U1NjYWxlID0gbV92aWV3cG9ydEhhbmRsZXItPmlubmVyQm91bmRlZENvbnRlbnRzU2NhbGUocU1p
bih0YXJnZXRDU1NTY2FsZSwgcXJlYWwoMi41KSkpOworICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9
IG1fdmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0VG9WaWV3cG9ydChlbmRDU1NTY2FsZSk7CisgICAg
cXJlYWwgY3VycmVudFNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOworCisgICAg
Ly8gV2Ugd2FudCB0byBlbmQgdXAgd2l0aCB0aGUgdGFyZ2V0IGFyZWEgZmlsbGluZyB0aGUgd2hv
bGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0IChpZiBwb3NzaWJsZSksCisgICAgLy8gYW5kIGNlbnRy
YWxpemVkIHZlcnRpY2FsbHkgd2hlcmUgdGhlIHVzZXIgcmVxdWVzdGVkIHpvb20uIFRodXMgb3Vy
IGhvdHNwb3QgaXMgdGhlIGNlbnRlciBvZgorICAgIC8vIHRoZSB0YXJnZXRBcmVhIHgtd2lzZSBh
bmQgdGhlIHJlcXVlc3RlZCB6b29tIHBvc2l0aW9uLCB5LXdpc2UuCisgICAgY29uc3QgUVBvaW50
RiBob3RzcG90ID0gUVBvaW50RihlbmRBcmVhLmNlbnRlcigpLngoKSwgbV92aWV3cG9ydEhhbmRs
ZXItPmNvbnZlcnRUb1ZpZXdwb3J0KHRvdWNoUG9pbnQueSgpKSk7CisgICAgY29uc3QgUVBvaW50
RiB2aWV3cG9ydEhvdHNwb3QgPSB2aWV3cG9ydFJlY3QuY2VudGVyKCk7CisKKyAgICBRUG9pbnRG
IGVuZFBvc2l0aW9uID0gaG90c3BvdCAqIGVuZENTU1NjYWxlIC0gdmlld3BvcnRIb3RzcG90Owor
CisgICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gbV92aWV3cG9ydEhhbmRsZXItPnBvc2l0aW9uUmFu
Z2VGb3JDb250ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUpOworICAgIGVuZFBvc2l0aW9uID0gYm91
bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5n
ZS5ib3R0b21SaWdodCgpKTsKKworICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5k
UG9zaXRpb24gLyBlbmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2Nh
bGUpOworCisgICAgZW51bSB7IFpvb21JbiwgWm9vbUJhY2ssIFpvb21PdXQsIE5vWm9vbSB9IHpv
b21BY3Rpb24gPSBab29tSW47CisKKyAgICBpZiAoIW1fc2NhbGVTdGFjay5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gWm9vbSBiYWNrIG91dCBpZiBhdHRlbXB0aW5nIHRvIHNjYWxlIHRvIHRoZSBz
YW1lIGN1cnJlbnQgc2NhbGUsIG9yCisgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gY29udGludWUg
c2NhbGluZyBvdXQgZnJvbSB0aGUgaW5uZXIgbW9zdCBsZXZlbC4KKyAgICAgICAgLy8gVXNlIGZ1
enp5IGNvbXBhcmUgd2l0aCBhIGZpeGVkIGVycm9yIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRoIGxh
cmdpc2ggZGlmZmVyZW5jZXMgZHVlIHRvIHBpeGVsIHJvdW5kaW5nLgorICAgICAgICBpZiAoZnV6
enlDb21wYXJlKGVuZEl0ZW1TY2FsZSwgY3VycmVudFNjYWxlLCAwLjAxKSkgeworICAgICAgICAg
ICAgLy8gSWYgbW92aW5nIHRoZSB2aWV3cG9ydCB3b3VsZCBleHBvc2UgbW9yZSBvZiB0aGUgdGFy
Z2V0UmVjdCBhbmQgbW92ZSBhdCBsZWFzdCA0MCBwaXhlbHMsIHVwZGF0ZSBwb3NpdGlvbiBidXQg
ZG8gbm90IHNjYWxlIG91dC4KKyAgICAgICAgICAgIFFSZWN0RiBjdXJyZW50Q29udGVudFJlY3Qo
dmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKKyAgICAgICAgICAgIFFSZWN0RiB0YXJnZXRJbnRlcnNl
Y3Rpb24gPSBlbmRWaXNpYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0ZWQodGFyZ2V0QXJlYSk7Cisg
ICAgICAgICAgICBpZiAoIWN1cnJlbnRDb250ZW50UmVjdC5jb250YWlucyh0YXJnZXRJbnRlcnNl
Y3Rpb24pCisgICAgICAgICAgICAgICAgICAgICYmIChxQWJzKGVuZFZpc2libGVDb250ZW50UmVj
dC50b3AoKSAtIGN1cnJlbnRDb250ZW50UmVjdC50b3AoKSkgPj0gNDAKKyAgICAgICAgICAgICAg
ICAgICAgfHwgcUFicyhlbmRWaXNpYmxlQ29udGVudFJlY3QubGVmdCgpIC0gY3VycmVudENvbnRl
bnRSZWN0LmxlZnQoKSkgPj0gNDApKQorICAgICAgICAgICAgICAgIHpvb21BY3Rpb24gPSBOb1pv
b207CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21C
YWNrOworICAgICAgICB9IGVsc2UgaWYgKGZ1enp5Q29tcGFyZShlbmRJdGVtU2NhbGUsIG1fem9v
bU91dFNjYWxlLCAwLjAxKSkKKyAgICAgICAgICAgIHpvb21BY3Rpb24gPSBab29tQmFjazsKKyAg
ICAgICAgZWxzZSBpZiAoZW5kSXRlbVNjYWxlIDwgY3VycmVudFNjYWxlKQorICAgICAgICAgICAg
em9vbUFjdGlvbiA9IFpvb21PdXQ7CisgICAgfQorCisgICAgc3dpdGNoICh6b29tQWN0aW9uKSB7
CisgICAgY2FzZSBab29tSW46CisgICAgICAgIG1fc2NhbGVTdGFjay5hcHBlbmQoU2NhbGVTdGFj
a0l0ZW0oY3VycmVudFNjYWxlLCBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpLngoKSkpOwor
ICAgICAgICBtX3pvb21PdXRTY2FsZSA9IGVuZEl0ZW1TY2FsZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBab29tQmFjazogeworICAgICAgICBTY2FsZVN0YWNrSXRlbSBsYXN0U2NhbGUgPSBt
X3NjYWxlU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgZW5kSXRlbVNjYWxlID0gbGFzdFNjYWxl
LnNjYWxlOworICAgICAgICBlbmRDU1NTY2FsZSA9IG1fdmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0
RnJvbVZpZXdwb3J0KGxhc3RTY2FsZS5zY2FsZSk7CisgICAgICAgIC8vIFJlY2FsY3VsYXRlIGVu
ZFBvc2l0aW9uIGFuZCBib3VuZCBpdCBhY2NvcmRpbmcgdG8gbmV3IHNjYWxlLgorICAgICAgICBl
bmRQb3NpdGlvbi5zZXRZKGhvdHNwb3QueSgpICogZW5kQ1NTU2NhbGUgLSB2aWV3cG9ydEhvdHNw
b3QueSgpKTsKKyAgICAgICAgZW5kUG9zaXRpb24uc2V0WChsYXN0U2NhbGUueFBvc2l0aW9uKTsK
KyAgICAgICAgZW5kUG9zUmFuZ2UgPSBtX3ZpZXdwb3J0SGFuZGxlci0+cG9zaXRpb25SYW5nZUZv
ckNvbnRlbnRBdFNjYWxlKGVuZEl0ZW1TY2FsZSk7CisgICAgICAgIGVuZFBvc2l0aW9uID0gYm91
bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5n
ZS5ib3R0b21SaWdodCgpKTsKKyAgICAgICAgZW5kVmlzaWJsZUNvbnRlbnRSZWN0ID0gUVJlY3RG
KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRl
bVNjYWxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgWm9vbU91dDoKKyAgICAg
ICAgLy8gVW5zdGFjayBhbGwgc2NhbGUtbGV2ZWxzIGRlZXBlciB0aGFuIHRoZSBuZXcgbGV2ZWws
IHNvIGEgem9vbS1iYWNrIHdvbid0IGVuZCB1cCB6b29taW5nIGluLgorICAgICAgICB3aGlsZSAo
IW1fc2NhbGVTdGFjay5pc0VtcHR5KCkgJiYgbV9zY2FsZVN0YWNrLmxhc3QoKS5zY2FsZSA+PSBl
bmRJdGVtU2NhbGUpCisgICAgICAgICAgICBtX3NjYWxlU3RhY2sucmVtb3ZlTGFzdCgpOworICAg
ICAgICBtX3pvb21PdXRTY2FsZSA9IGVuZEl0ZW1TY2FsZTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBOb1pvb206CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGFuaW1hdGVDb250ZW50
UmVjdFZpc2libGUoZW5kVmlzaWJsZUNvbnRlbnRSZWN0KTsKK30KKworUVJlY3RGIFZpZXdwb3J0
SGFuZGxlckNsaWVudFF0OjpuZWFyZXN0VmFsaWRWaXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QK
K3sKKyAgICBmbG9hdCBjc3NTY2FsZSA9IG1fdmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0RnJvbVZp
ZXdwb3J0KG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKSk7CisgICAgZmxvYXQgZW5kSXRlbVNj
YWxlID0gbV92aWV3cG9ydEhhbmRsZXItPmNvbnZlcnRUb1ZpZXdwb3J0KG1fdmlld3BvcnRIYW5k
bGVyLT5pbm5lckJvdW5kZWRDb250ZW50c1NjYWxlKGNzc1NjYWxlKSk7CisKKyAgICBjb25zdCBR
UmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpOworICAg
IFFQb2ludEYgdmlld3BvcnRIb3RzcG90ID0gdmlld3BvcnRSZWN0LmNlbnRlcigpOworICAgIFFQ
b2ludEYgZW5kUG9zaXRpb24gPSBtX3ZpZXdwb3J0SXRlbS0+bWFwVG9XZWJDb250ZW50KHZpZXdw
b3J0SG90c3BvdCkgKiBlbmRJdGVtU2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Q7CisKKyAgICBGbG9h
dFJlY3QgZW5kUG9zUmFuZ2UgPSBtX3ZpZXdwb3J0SGFuZGxlci0+cG9zaXRpb25SYW5nZUZvckNv
bnRlbnRBdFNjYWxlKGVuZEl0ZW1TY2FsZSk7CisgICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0
aW9uKGVuZFBvc1JhbmdlLm1pblhNaW5ZQ29ybmVyKCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5n
ZS5tYXhYTWF4WUNvcm5lcigpKTsKKworICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3Qo
ZW5kUG9zaXRpb24gLyBlbmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVt
U2NhbGUpOworCisgICAgcmV0dXJuIGVuZFZpc2libGVDb250ZW50UmVjdDsKK30KKwordm9pZCBW
aWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2V0Q29udGVudHNQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvbkluVmlld0Nvb3JkaW5hdGVzKQoreworICAgIFFQb2ludEYgbmV3UG9zaXRp
b24obV9wYWdlSXRlbS0+cG9zKCkgKyBRUG9pbnRGKHBvc2l0aW9uSW5WaWV3Q29vcmRpbmF0ZXMp
KTsKKyAgICBtX3ZpZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyhuZXdQb3NpdGlvbik7CisgICAg
dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2V0
Q29udGVudHNTY2FsZShmbG9hdCB2aWV3cG9ydFNjYWxlLCBib29sIGlzSW5pdGlhbFNjYWxlKQor
eworICAgIGlmIChpc0luaXRpYWxTY2FsZSkgeworICAgICAgICBtX3pvb21PdXRTY2FsZSA9IDA7
CisgICAgICAgIG1fc2NhbGVTdGFjay5jbGVhcigpOworICAgICAgICBzZXRDb250ZW50UmVjdFZp
c2libGVQb3NpdGlvbkF0U2NhbGUoUVBvaW50RigpLCB2aWV3cG9ydFNjYWxlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgc2NhbGVDb250ZW50KHZpZXdwb3J0U2NhbGUpOworCisgICAgdXBkYXRlVmll
d3BvcnQoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2V0Q29udGVudHNS
ZWN0VG9OZWFyZXN0VmFsaWRCb3VuZHMoKQoreworICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIg
Z3VhcmQobV92aWV3cG9ydEhhbmRsZXIpOworICAgIGZsb2F0IHZhbGlkQ1NTU2NhbGUgPSBtX3Zp
ZXdwb3J0SGFuZGxlci0+aW5uZXJCb3VuZGVkQ29udGVudHNTY2FsZShtX3ZpZXdwb3J0SGFuZGxl
ci0+Y29udmVydEZyb21WaWV3cG9ydChtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCkpKTsKKyAg
ICBzZXRDb250ZW50UmVjdFZpc2libGVQb3NpdGlvbkF0U2NhbGUobmVhcmVzdFZhbGlkVmlzaWJs
ZUNvbnRlbnRzUmVjdCgpLnRvcExlZnQoKSwgbV92aWV3cG9ydEhhbmRsZXItPmNvbnZlcnRUb1Zp
ZXdwb3J0KHZhbGlkQ1NTU2NhbGUpKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRR
dDo6cmVxdWVzdFZpZXdwb3J0VXBkYXRlKCkKK3sKKyAgICB1cGRhdGVWaWV3cG9ydCgpOworfQor
Citib29sIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjphbGxvd3NVc2VyU2NhbGluZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVyLT5hbGxvd3NVc2VyU2NhbGluZygpOwor
fQorCitxcmVhbCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6ZGV2aWNlUGl4ZWxSYXRpbygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVyLT5kZXZpY2VQaXhlbFJhdGlvKCk7
Cit9CisKK3FyZWFsIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjptaW5pbXVtQ29udGVudHNTY2Fs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVyLT5taW5pbXVtQ29udGVu
dHNTY2FsZSgpOworfQorCitxcmVhbCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6bWF4aW11bUNv
bnRlbnRzU2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlci0+bWF4
aW11bUNvbnRlbnRzU2NhbGUoKTsKK30KKworcXJlYWwgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6
OmN1cnJlbnRDb250ZW50c1NjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYWdlSXRlbS0+
Y29udGVudHNTY2FsZSgpOworfQorCitRU2l6ZUYgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OmNv
bnRlbnRzTGF5b3V0U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVy
LT5jb250ZW50c0xheW91dFNpemUoKTsKK30KKworYm9vbCBWaWV3cG9ydEhhbmRsZXJDbGllbnRR
dDo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3cG9y
dEl0ZW0tPmlzRmxpY2tpbmcoKTsKK30KKworYm9vbCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6
cGFuR2VzdHVyZUFjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVy
LT5oYWRVc2VySW50ZXJhY3Rpb24oKSAmJiBtX3ZpZXdwb3J0SXRlbS0+aXNEcmFnZ2luZygpOwor
fQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpwYW5HZXN0dXJlU3RhcnRlZChjb25z
dCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQoreworICAg
IC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlv
bi4KKyAgICBBU1NFUlQobV92aWV3cG9ydEhhbmRsZXItPmhhZFVzZXJJbnRlcmFjdGlvbigpKTsK
KworICAgIG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2FibGVNb3VzZVByZXNzKHBvc2l0aW9u
LCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0
Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRR
dDo6cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2
NCBldmVudFRpbWVzdGFtcE1pbGxpcykKK3sKKyAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxp
Y2thYmxlTW91c2VNb3ZlKHBvc2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9s
YXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKK30KKwordm9p
ZCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6cGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYm
IHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7CisgICAgbV92aWV3cG9y
dEl0ZW0tPmhhbmRsZUZsaWNrYWJsZU1vdXNlUmVsZWFzZShwb3NpdGlvbiwgZXZlbnRUaW1lc3Rh
bXBNaWxsaXMpOworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0g
cG9zaXRpb247Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVD
YW5jZWxsZWQoKQoreworICAgIC8vIFJlc2V0IHRoZSB2ZWxvY2l0eSBzYW1wbGVzIG9mIHRoZSBm
bGlja2FibGUuCisgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIHJlY29n
bml6ZXIgaWYgd2UgaGF2ZSBhIHJlY29nbml6ZWQKKyAgICAvLyBwYW4gZ2VzdHVyZSBhbmQgcmVj
ZWl2ZSBhIHRvdWNoIGV2ZW50IHdpdGggbXVsdGlwbGUgdG91Y2ggcG9pbnRzCisgICAgLy8gKGll
LiB0cmFuc2l0aW9uIHRvIGEgcGluY2ggZ2VzdHVyZSkgYXMgaXQgZG9lcyBub3QgbW92ZSB0aGUg
Y29udGVudAorICAgIC8vIGJhY2sgaW5zaWRlIHZhbGlkIGJvdW5kcy4KKyAgICAvLyBXaGVuIHRo
ZSBwaW5jaCBnZXN0dXJlIGVuZHMsIHRoZSBjb250ZW50IGlzIHBvc2l0aW9uZWQgYW5kIHNjYWxl
ZAorICAgIC8vIGJhY2sgdG8gdmFsaWQgYm91bmRhcmllcy4KKyAgICBtX3ZpZXdwb3J0SXRlbS0+
Y2FuY2VsRmxpY2soKTsKK30KKworYm9vbCBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6c2NhbGVB
bmltYXRpb25BY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjYWxlQW5pbWF0aW9uLT5z
dGF0ZSgpID09IFFBYnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZzsKK30KKwordm9pZCBWaWV3cG9y
dEhhbmRsZXJDbGllbnRRdDo6Y2FuY2VsU2Nyb2xsQW5pbWF0aW9uKCkKK3sKKyAgICBpZiAoIXNj
cm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB0aGUg
cGFuIGdlc3R1cmUgcmVjb2duaXplciByZWNlaXZlcyBhIHRvdWNoIGJlZ2luIGV2ZW50CisgICAg
Ly8gZHVyaW5nIGFuIG9uZ29pbmcga2luZXRpYyBzY3JvbGwgYW5pbWF0aW9uIG9mIGEgcHJldmlv
dXMKKyAgICAvLyBwYW4gZ2VzdHVyZSwgdGhlIGFuaW1hdGlvbiBpcyBzdG9wcGVkIGFuZCB0aGUg
Y29udGVudCBpcworICAgIC8vIGltbWVkaWF0ZWx5IHBvc2l0aW9uZWQgYmFjayB0byB2YWxpZCBi
b3VuZGFyaWVzLgorCisgICAgbV92aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7CisgICAgc2V0
Q29udGVudHNSZWN0VG9OZWFyZXN0VmFsaWRCb3VuZHMoKTsKK30KKwordm9pZCBWaWV3cG9ydEhh
bmRsZXJDbGllbnRRdDo6aW50ZXJydXB0U2NhbGVBbmltYXRpb24oKQoreworICAgIC8vIFRoaXMg
aW50ZXJydXB0cyB0aGUgc2NhbGUgYW5pbWF0aW9uIGV4YWN0bHkgd2hlcmUgaXQgaXMsIGV2ZW4g
aWYgaXQgaXMgb3V0IG9mIGJvdW5kcy4KKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zdG9wKCk7Cit9
CisKK2Jvb2wgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZUFjdGl2ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVyLT5oYWRVc2VySW50ZXJhY3Rpb24o
KSAmJiAobV9waW5jaFN0YXJ0U2NhbGUgPiAwKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJD
bGllbnRRdDo6cGluY2hHZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlcklu
Vmlld3BvcnRDb29yZGluYXRlcykKK3sKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBh
IHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgQVNTRVJUKG1fdmlld3BvcnRIYW5k
bGVyLT5oYWRVc2VySW50ZXJhY3Rpb24oKSk7CisKKyAgICBpZiAoIW1fdmlld3BvcnRIYW5kbGVy
LT5hbGxvd3NVc2VyU2NhbGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3NjYWxlU3Rh
Y2suY2xlYXIoKTsKKyAgICBtX3pvb21PdXRTY2FsZSA9IDAuMDsKKworICAgIG1fc2NhbGVVcGRh
dGVEZWZlcnJlci5yZXNldChuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcihtX3ZpZXdwb3J0SGFu
ZGxlciwgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVu
dCkpOworCisgICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwaW5j
aENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKKyAgICBtX3BpbmNoU3RhcnRTY2FsZSA9IG1f
cGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRsZXJDbGll
bnRRdDo6cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRl
ckluVmlld3BvcnRDb29yZGluYXRlcywgcXJlYWwgdG90YWxTY2FsZUZhY3RvcikKK3sKKyAgICBB
U1NFUlQobV92aWV3cG9ydEhhbmRsZXItPmhhc1N1c3BlbmRlZENvbnRlbnQoKSk7CisKKyAgICBp
ZiAoIW1fdmlld3BvcnRIYW5kbGVyLT5hbGxvd3NVc2VyU2NhbGluZygpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyAgQ2hhbmdlcyBvZiB0aGUgY2VudGVyIHBvc2l0aW9uIHNob3VsZCBtb3Zl
IHRoZSBwYWdlIGV2ZW4gaWYgdGhlIHpvb20gZmFjdG9yIGRvZXMgbm90IGNoYW5nZS4KKyAgICBj
b25zdCBxcmVhbCBjc3NTY2FsZSA9IG1fdmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0RnJvbVZpZXdw
b3J0KG1fcGluY2hTdGFydFNjYWxlICogdG90YWxTY2FsZUZhY3Rvcik7CisKKyAgICAvLyBBbGxv
dyB6b29taW5nIG91dCBiZXlvbmQgbWltaW11bSBzY2FsZSBvbiBwYWdlcyB0aGF0IGRvIG5vdCBl
eHBsaWNpdGx5IGRpc2FsbG93IGl0LgorICAgIGNvbnN0IHFyZWFsIHRhcmdldEl0ZW1TY2FsZSA9
IG1fdmlld3BvcnRIYW5kbGVyLT5jb252ZXJ0VG9WaWV3cG9ydChtX3ZpZXdwb3J0SGFuZGxlci0+
b3V0ZXJCb3VuZGVkQ29udGVudHNTY2FsZShjc3NTY2FsZSkpOworCisgICAgc2NhbGVDb250ZW50
KHRhcmdldEl0ZW1TY2FsZSwgbV92aWV3cG9ydEl0ZW0tPm1hcFRvV2ViQ29udGVudChwaW5jaENl
bnRlckluVmlld3BvcnRDb29yZGluYXRlcykpOworCisgICAgY29uc3QgUVBvaW50RiBwb3NpdGlv
bkRpZmYgPSBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyAtIG1fbGFzdFBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOworICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9y
dENvb3JkaW5hdGVzID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7CisKKyAgICBt
X3ZpZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyhtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygp
IC0gcG9zaXRpb25EaWZmKTsKKworICAgIC8vIEluZm9ybSB0aGUgd2ViIHByb2Nlc3MgdG8gcmVu
ZGVyIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBhcmVhIHdpdGggbG93LXJlc29sdXRpb24gdGlsZXMg
bm90CisgICAgLy8gdG8gZXhwb3NlIHdoaXRlIHRpbGVzIGR1cmluZyBwaW5jaCBnZXN0dXJlcyBh
bmQgdG8gc2hvdyBmaXhlZCBwb3NpdGlvbiBsYXllcnMgY29ycmVjdGx5LgorICAgIC8vIFRoZSBh
Y3R1YWwgc2NhbGUgaXMgcmVzdG9yZWQgYWZ0ZXIgdGhlIHBpbmNoIGdlc3R1cmUgZW5kcy4KKyAg
ICB1cGRhdGVWaWV3cG9ydChRUG9pbnRGKCksIDEpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxl
ckNsaWVudFF0OjpwaW5jaEdlc3R1cmVFbmRlZCgpCit7CisgICAgQVNTRVJUKG1fdmlld3BvcnRI
YW5kbGVyLT5oYXNTdXNwZW5kZWRDb250ZW50KCkpOworCisgICAgaWYgKCFtX3ZpZXdwb3J0SGFu
ZGxlci0+YWxsb3dzVXNlclNjYWxpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9waW5j
aFN0YXJ0U2NhbGUgPSAtMTsKKworICAgIGFuaW1hdGVDb250ZW50UmVjdFZpc2libGUobmVhcmVz
dFZhbGlkVmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKKyAgICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIu
cmVzZXQoKTsgLy8gQ2xlYXIgYWZ0ZXIgc3RhcnRpbmcgcG90ZW50aWFsIGFuaW1hdGlvbiwgd2hp
Y2ggdGFrZXMgb3ZlciBkZWZlcnJpbmcuCit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQ6OnBpbmNoR2VzdHVyZUNhbmNlbGxlZCgpCit7CisgICAgbV9waW5jaFN0YXJ0U2NhbGUgPSAt
MTsKKyAgICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIucmVzZXQoKTsKK30KKworUVJlY3RGIFZpZXdw
b3J0SGFuZGxlckNsaWVudFF0Ojp2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKK3sKKyAgICBj
b25zdCBRUmVjdEYgdmlzaWJsZVJlY3QobV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLmlu
dGVyc2VjdGVkKG1fcGFnZUl0ZW0tPmJvdW5kaW5nUmVjdCgpKSk7CisgICAgcmV0dXJuIG1fdmll
d3BvcnRJdGVtLT5tYXBSZWN0VG9XZWJDb250ZW50KHZpc2libGVSZWN0KTsKK30KKwordm9pZCBW
aWV3cG9ydEhhbmRsZXJDbGllbnRRdDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKCkKK3sKKyAgICAv
LyBFbWl0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCBzbyB0aGF0IGl0IGNhbiBiZSB2ZXJpZmllZCB0
aGF0CisgICAgLy8gd2UgZGlkbid0IGRvIHNjYWxlIGFkanVzdG1lbnQuCisgICAgZW1pdCBtX3Zp
ZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+Y29udGVudHNTY2FsZUNvbW1pdHRl
ZCgpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxlckNsaWVudFF0OjpkaWRDaGFuZ2VWaXNpYmxl
Q29udGVudHMoKQoreworICAgIHFyZWFsIHNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2Fs
ZSgpOworCisgICAgaWYgKHNjYWxlICE9IG1fbGFzdENvbW1pdHRlZFNjYWxlKQorICAgICAgICBl
bWl0IG1fdmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT5jb250ZW50c1NjYWxl
Q29tbWl0dGVkKCk7CisgICAgbV9sYXN0Q29tbWl0dGVkU2NhbGUgPSBzY2FsZTsKKworICAgIC8v
IEVuc3VyZSB0aGF0IHVwZGF0ZVBhaW50Tm9kZSBpcyBhbHdheXMgY2FsbGVkIGJlZm9yZSBwYWlu
dGluZy4KKyAgICBtX3BhZ2VJdGVtLT51cGRhdGUoKTsKK30KKwordm9pZCBWaWV3cG9ydEhhbmRs
ZXJDbGllbnRRdDo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKCkKK3sKKyAgICAvLyBNYWtl
IHN1cmUgd2UgYXBwbHkgdGhlIG5ldyBpbml0aWFsIHNjYWxlIHdoZW4gZGVmZXJyaW5nIGVuZHMu
CisgICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZChtX3ZpZXdwb3J0SGFuZGxlcik7CisK
KyAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT5kZXZpY2VQ
aXhlbFJhdGlvQ2hhbmdlZCgpOworICAgIGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRh
bCgpLT50ZXN0KCktPnZpZXdwb3J0Q2hhbmdlZCgpOworfQorCit2b2lkIFZpZXdwb3J0SGFuZGxl
ckNsaWVudFF0Ojp1cGRhdGVWaWV3cG9ydChjb25zdCBRUG9pbnRGJiB0cmFqZWN0b3J5LCBxcmVh
bCBzY2FsZSkKK3sKKyAgICBGbG9hdFJlY3QgY3VycmVudFZpc2libGVSZWN0KHZpc2libGVDb250
ZW50c1JlY3QoKSk7CisgICAgZmxvYXQgdmlld3BvcnRTY2FsZSA9IChzY2FsZSA8IDApID8gdmll
d3BvcnRTY2FsZUZvclJlY3QoY3VycmVudFZpc2libGVSZWN0KSA6IHNjYWxlOworICAgIG1fdmll
d3BvcnRIYW5kbGVyLT5hZGp1c3RWaXNpYmxlQ29udGVudHNSZWN0KGN1cnJlbnRWaXNpYmxlUmVj
dCwgdmlld3BvcnRTY2FsZSwgdHJhamVjdG9yeSk7Cit9CisKK3ZvaWQgVmlld3BvcnRIYW5kbGVy
Q2xpZW50UXQ6OnNjYWxlQ29udGVudChxcmVhbCBpdGVtU2NhbGUsIGNvbnN0IFFQb2ludEYmIGNl
bnRlckluQ1NTQ29vcmRpbmF0ZXMpCit7CisgICAgUVBvaW50RiBvbGRQaW5jaENlbnRlck9uVmll
d3BvcnQgPSBtX3ZpZXdwb3J0SXRlbS0+bWFwRnJvbVdlYkNvbnRlbnQoY2VudGVySW5DU1NDb29y
ZGluYXRlcyk7CisgICAgbV9wYWdlSXRlbS0+c2V0Q29udGVudHNTY2FsZShpdGVtU2NhbGUpOwor
ICAgIFFQb2ludEYgbmV3UGluY2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1h
cEZyb21XZWJDb250ZW50KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOworICAgIG1fdmlld3BvcnRJ
dGVtLT5zZXRDb250ZW50UG9zKG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkgKyAobmV3UGlu
Y2hDZW50ZXJPblZpZXdwb3J0IC0gb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0KSk7Cit9CisKK2Zs
b2F0IFZpZXdwb3J0SGFuZGxlckNsaWVudFF0Ojp2aWV3cG9ydFNjYWxlRm9yUmVjdChjb25zdCBR
UmVjdEYmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX3Zp
ZXdwb3J0SXRlbS0+d2lkdGgoKSkgLyBzdGF0aWNfY2FzdDxmbG9hdD4ocmVjdC53aWR0aCgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNpbmNsdWRlICJtb2NfVmlld3BvcnRIYW5k
bGVyQ2xpZW50UXQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTU5MTc2MzdhYTIzNDMxMWJk
MGQwZjhjZjQyMjVjMGZjNzMzOTRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1ZpZXdwb3J0SGFuZGxlckNsaWVudFF0LmgKQEAgLTAsMCArMSwxNTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQmVuamFtaW4gUG91bGFpbiA8
YmVuamFtaW5Ad2Via2l0Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXRf
aAorI2RlZmluZSBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdF9oCisKKyNpbmNsdWRlICJWaWV3cG9y
dEhhbmRsZXIuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEhhbmRsZXJDbGllbnQuaCIKKyNpbmNsdWRl
IDxRT2JqZWN0PgorI2luY2x1ZGUgPFFQb2ludEY+CisjaW5jbHVkZSA8UVNjb3BlZFBvaW50ZXI+
CisjaW5jbHVkZSA8UVZhcmlhbnQ+CisjaW5jbHVkZSA8UVZhcmlhbnRBbmltYXRpb24+CisKK1FU
X0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVF1aWNrV2ViUGFnZTsKK2NsYXNzIFFRdWlja1dlYlZp
ZXc7CitjbGFzcyBRUmVjdEY7CitRVF9FTkRfTkFNRVNQQUNFCisKK2NsYXNzIFFXZWJLaXRUZXN0
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQg
OiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFZpZXdwb3J0SGFuZGxlckNsaWVudCB7CisgICAgUV9P
QkpFQ1QKKworcHVibGljOgorCisgICAgVmlld3BvcnRIYW5kbGVyQ2xpZW50UXQoUVF1aWNrV2Vi
VmlldyosIFFRdWlja1dlYlBhZ2UqKTsKKyAgICB+Vmlld3BvcnRIYW5kbGVyQ2xpZW50UXQoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Bvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
IHBvc2l0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c1NjYWxlKGZsb2F0IHZpZXdwb3J0U2NhbGUsIGJvb2wgaXNJbml0aWFsU2NhbGUpOworICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3RUb05lYXJlc3RWYWxpZEJvdW5kcygpOworCisgICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RWaWV3cG9ydFVwZGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZUNvbnRlbnRzU2l6ZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaXNp
YmxlQ29udGVudHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1
dGVzKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld3BvcnRIYW5kbGVyKFZpZXdwb3J0SGFu
ZGxlciogaGFuZGxlcikgeyBtX3ZpZXdwb3J0SGFuZGxlciA9IGhhbmRsZXI7IH0KKworICAgIC8v
IEFkZGl0aW9uYWwgbWV0aG9kcyBjdXJyZW50bHkgb25seSByZWxldmFudCBpbiB0aGUgUVF1aWNr
IGNvbnRleHQuCisgICAgdm9pZCB0b3VjaEJlZ2luKCk7CisgICAgdm9pZCB0b3VjaEVuZCgpOwor
CisgICAgYm9vbCBzY3JvbGxBbmltYXRpb25BY3RpdmUoKSBjb25zdDsKKyAgICB2b2lkIGNhbmNl
bFNjcm9sbEFuaW1hdGlvbigpOworCisgICAgYm9vbCBwYW5HZXN0dXJlQWN0aXZlKCkgY29uc3Q7
CisgICAgdm9pZCBwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWlu
dDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB2b2lkIHBhbkdlc3R1cmVSZXF1ZXN0VXBk
YXRlKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMp
OworICAgIHZvaWQgcGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50
NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQgcGFuR2VzdHVyZUNhbmNlbGxlZCgp
OworCisgICAgYm9vbCBzY2FsZUFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0OworICAgIHZvaWQgaW50
ZXJydXB0U2NhbGVBbmltYXRpb24oKTsKKworICAgIGJvb2wgcGluY2hHZXN0dXJlQWN0aXZlKCkg
Y29uc3Q7CisgICAgdm9pZCBwaW5jaEdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBpbmNo
Q2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzKTsKKyAgICB2b2lkIHBpbmNoR2VzdHVyZVJlcXVl
c3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMs
IHFyZWFsIHRvdGFsU2NhbGVGYWN0b3IpOworICAgIHZvaWQgcGluY2hHZXN0dXJlRW5kZWQoKTsK
KyAgICB2b2lkIHBpbmNoR2VzdHVyZUNhbmNlbGxlZCgpOworCisgICAgdm9pZCB6b29tVG9BcmVh
R2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHRvdWNoUG9pbnQsIGNvbnN0IFFSZWN0RiYgdGFy
Z2V0QXJlYSk7CisgICAgdm9pZCBmb2N1c0VkaXRhYmxlQXJlYShjb25zdCBRUmVjdEYmIGNhcmV0
QXJlYSwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKTsKKworcHJpdmF0ZSBRX1NMT1RTOgorICAg
IC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBvZiBwb3NpdGlvbiB0aGF0IGFyZSBub3QgZHJpdmVuIGJ5
IHVzLgorICAgIHZvaWQgcGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKTsKKworICAgIHZvaWQgc2Nh
bGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3Ry
YWN0QW5pbWF0aW9uOjpTdGF0ZSk7CisKKyAgICB2b2lkIGZsaWNrTW92ZVN0YXJ0ZWQoKTsgLy8g
Q2FsbGVkIHdoZW4gcGFubmluZyBzdGFydHMuCisgICAgdm9pZCBmbGlja01vdmVFbmRlZCgpOyAv
LyAgIENhbGxlZCB3aGVuIHBhbm5pbmcgKCsga2luZXRpYyBhbmltYXRpb24pIGVuZHMuCisKK3By
aXZhdGU6CisgICAgY2xhc3MgU2NhbGVBbmltYXRpb24gOiBwdWJsaWMgUVZhcmlhbnRBbmltYXRp
b24geworICAgICAgICBWaWV3cG9ydEhhbmRsZXJDbGllbnRRdCogbV9oYW5kbGVyQ2xpZW50Owor
ICAgIHB1YmxpYzoKKyAgICAgICAgU2NhbGVBbmltYXRpb24oVmlld3BvcnRIYW5kbGVyQ2xpZW50
UXQqIHBhcmVudCkKKyAgICAgICAgICAgIDogUVZhcmlhbnRBbmltYXRpb24ocGFyZW50KQorICAg
ICAgICAgICAgLCBtX2hhbmRsZXJDbGllbnQocGFyZW50KQorICAgICAgICB7IH0KKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ3VycmVudFZhbHVlKGNvbnN0IFFWYXJpYW50Jik7CisgICAg
fTsKKworICAgIHN0cnVjdCBTY2FsZVN0YWNrSXRlbSB7CisgICAgICAgIFNjYWxlU3RhY2tJdGVt
KHFyZWFsIHNjYWxlLCBxcmVhbCB4UG9zaXRpb24pCisgICAgICAgICAgICA6IHNjYWxlKHNjYWxl
KQorICAgICAgICAgICAgLCB4UG9zaXRpb24oeFBvc2l0aW9uKQorICAgICAgICB7IH0KKworICAg
ICAgICBxcmVhbCBzY2FsZTsKKyAgICAgICAgcXJlYWwgeFBvc2l0aW9uOworICAgIH07CisKKyAg
ICBmcmllbmQgY2xhc3MgU2NhbGVBbmltYXRpb247CisgICAgZnJpZW5kIGNsYXNzIDo6UVdlYktp
dFRlc3Q7CisKKyAgICBWaWV3cG9ydEhhbmRsZXIqIG1fdmlld3BvcnRIYW5kbGVyOworICAgIFFR
dWlja1dlYlZpZXcqIGNvbnN0IG1fdmlld3BvcnRJdGVtOworICAgIFFRdWlja1dlYlBhZ2UqIGNv
bnN0IG1fcGFnZUl0ZW07CisKKyAgICBib29sIGFsbG93c1VzZXJTY2FsaW5nKCkgY29uc3Q7Cisg
ICAgcXJlYWwgZGV2aWNlUGl4ZWxSYXRpbygpIGNvbnN0OworICAgIHFyZWFsIG1pbmltdW1Db250
ZW50c1NjYWxlKCkgY29uc3Q7CisgICAgcXJlYWwgbWF4aW11bUNvbnRlbnRzU2NhbGUoKSBjb25z
dDsKKyAgICBxcmVhbCBjdXJyZW50Q29udGVudHNTY2FsZSgpIGNvbnN0OworICAgIFFTaXplRiBj
b250ZW50c0xheW91dFNpemUoKSBjb25zdDsKKworICAgIGZsb2F0IHZpZXdwb3J0U2NhbGVGb3JS
ZWN0KGNvbnN0IFFSZWN0RiYpIGNvbnN0OworICAgIFFSZWN0RiB2aXNpYmxlQ29udGVudHNSZWN0
KCkgY29uc3Q7CisgICAgUVJlY3RGIG5lYXJlc3RWYWxpZFZpc2libGVDb250ZW50c1JlY3QoKSBj
b25zdDsKKworICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoY29uc3QgUVBvaW50RiYgdHJhamVjdG9y
eSA9IFFQb2ludEYoKSwgcXJlYWwgc2NhbGUgPSAtMSk7CisgICAgdm9pZCBzZXRDb250ZW50UmVj
dFZpc2libGVQb3NpdGlvbkF0U2NhbGUoY29uc3QgUVBvaW50RiYgbG9jYXRpb24sIHFyZWFsIGl0
ZW1TY2FsZSk7CisgICAgdm9pZCBhbmltYXRlQ29udGVudFJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0
RiYgY29udGVudFJlY3QpOworICAgIHZvaWQgc2NhbGVDb250ZW50KHFyZWFsIGl0ZW1TY2FsZSwg
Y29uc3QgUVBvaW50RiYgY2VudGVySW5DU1NDb29yZGluYXRlcyA9IFFQb2ludEYoKSk7CisKKyAg
ICBRU2NvcGVkUG9pbnRlcjxWaWV3cG9ydFVwZGF0ZURlZmVycmVyPiBtX3NjYWxlVXBkYXRlRGVm
ZXJyZXI7CisgICAgUVNjb3BlZFBvaW50ZXI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV9zY3Jv
bGxVcGRhdGVEZWZlcnJlcjsKKyAgICBRU2NvcGVkUG9pbnRlcjxWaWV3cG9ydFVwZGF0ZURlZmVy
cmVyPiBtX3RvdWNoVXBkYXRlRGVmZXJyZXI7CisgICAgUVNjb3BlZFBvaW50ZXI8Vmlld3BvcnRV
cGRhdGVEZWZlcnJlcj4gbV9hbmltYXRpb25VcGRhdGVEZWZlcnJlcjsKKworICAgIFNjYWxlQW5p
bWF0aW9uKiBtX3NjYWxlQW5pbWF0aW9uOworICAgIFFQb2ludEYgbV9sYXN0UGluY2hDZW50ZXJJ
blZpZXdwb3J0Q29vcmRpbmF0ZXM7CisgICAgUVBvaW50RiBtX2xhc3RTY3JvbGxQb3NpdGlvbjsK
KyAgICBxcmVhbCBtX3BpbmNoU3RhcnRTY2FsZTsKKyAgICBxcmVhbCBtX2xhc3RDb21taXR0ZWRT
Y2FsZTsKKyAgICBxcmVhbCBtX3pvb21PdXRTY2FsZTsKKyAgICBRTGlzdDxTY2FsZVN0YWNrSXRl
bT4gbV9zY2FsZVN0YWNrOworICAgIGJvb2wgbV9pZ25vcmVWaWV3cG9ydENoYW5nZXM7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFZpZXdwb3J0SGFuZGxlckNsaWVu
dFF0X2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCBjODJhM2E1NDg4MmI5NWE2MjA0NGFmNmFjNTZiOWFlODE2ODc1YWJiLi4yNTAwOTFmYjBhOTk1
YzRmZDBjNzdiNTQwOTE1NTMwZTYxYmY2OWNhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDktMDMgIEFuZHJh
cyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+CisKKyAgICAgICAgW1dLMl0gTWFrZSBb
UXRdVmlld3BvcnRIYW5kbGVyIGNyb3NzIHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBpbml0aWFsIHNjYWxlIGZyb20gdmlld3Bv
cnQgaW5mbyBpdGVtIHNpbmNlIGl0IGlzCisgICAgICAgIHNldCB0byAtMSBhZnRlciBhcHBsaWVk
IHRodXMgaXQgZG9lcyBub3QgaG9sZCBhbnkgdmFsdWFibGUKKyAgICAgICAgaW5mb3JtYXRpb24u
CisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9xbWwvVmlld3BvcnRJbmZvSXRlbS5xbWw6CisK
IDIwMTItMDktMDMgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNv
bT4KIAogICAgICAgICBbRUZMXSBGaXggcmVzaXppbmcgaXNzdWVzIHJlbGF0ZWQgdG8gVVJMIGJh
ciBpbiBNaW5pYnJvd3NlciAvIEVXZWJMYXVuY2hlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvcXQvcW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQv
cW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sCmluZGV4IDkyYTJhMDQxYWViMjBiNmQ0NzYwY2I0OTQ4
MjUxMTJjOGEyN2FmOGYuLjY4NGNjNzA5YjQ5NzE4NWY5ZTFiMzA1OGIwZDhiNDlhMDEwOWJhZTgg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9WaWV3cG9ydEluZm9JdGVtLnFt
bAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvVmlld3BvcnRJbmZvSXRlbS5xbWwKQEAg
LTg0LDExICs4NCw2IEBAIEl0ZW0gewogCiAgICAgICAgICAgICAgICAgQ29sdW1uIHsKICAgICAg
ICAgICAgICAgICAgICAgVGV4dCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiSW5p
dGlhbCBzY2FsZTogIiArIGZvcm1hdFNjYWxlKHRlc3Qudmlld3BvcnQuaW5pdGlhbFNjYWxlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5mYW1pbHk6IHRleHRCb3guZm9udEZhbWlseQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRleHRCb3guZm9udENvbG9yCi0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgVGV4dCB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0OiAiTWluaW11bSBzY2FsZTogIiArIGZvcm1hdFNjYWxlKHRlc3Qudmll
d3BvcnQubWluaW11bVNjYWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5mYW1pbHk6
IHRleHRCb3guZm9udEZhbWlseQogICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRleHRC
b3guZm9udENvbG9yCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162044</attachid>
            <date>2012-09-04 08:09:46 -0700</date>
            <delta_ts>2012-09-05 08:47:00 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>viewporthandler.patch</filename>
            <type>text/plain</type>
            <size>118115</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4MjkxNGRmLi40ZTliNDM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTc2
IEBACisyMDEyLTA5LTA0ICBBbmRyYXMgQmVjc2kgIDxhbmRyYXMuYmVjc2lAbm9raWEuY29tPgor
CisgICAgICAgIFtXSzJdIE1ha2UgW1F0XVZpZXdwb3J0SGFuZGxlciBjcm9zcyBwbGF0Zm9ybQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkg
UXRWaWV3cG9ydEhhbmRsZXIgaW5jbHVkZXMgYmVoYXZpb3VyIHRoYXQgaXMgbm90CisgICAgICAg
IHBsYXRmb3JtIHNwZWNpZmljLCB0b2dldGhlciB3aXRoIGhvb2tzIHRvIHRoZSBRdFF1aWNrIEFQ
SSBsYXllci4KKworICAgICAgICBBIHBsYXRmb3JtIGluZGVwZW5kZW50IGltcGxlbWVudGF0aW9u
IHdvdWxkIGFsbG93IG90aGVyIHBvcnRzCisgICAgICAgIHRvIHVzZSB0aGUgdmlld3BvcnQgZnVu
Y3Rpb25hbGl0eSBwcm92aWRlZC4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBw
bGF0Zm9ybSBpbmRlcGVuZGVudCBQYWdlVmlld3BvcnRDb250cm9sbGVyCisgICAgICAgIGNsYXNz
IHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHJlcXVlc3RzIGZyb20gdGhlIHdlYiBw
cm9jZXNzCisgICAgICAgIChlZy4gY29udGVudCBzaXplIGNoYW5nZXMsIHZpZXdwb3J0IGF0dHJp
YnV0ZXMgY2hhbmdlcyBhbmQgc2Nyb2xsCisgICAgICAgIHBvc2l0aW9uIHJlcXVlc3RzKS4KKwor
ICAgICAgICBQYWdlVmlld3BvcnRDb250cm9sbGVyIGFsc28gYWN0cyBhcyBhIHByb3h5IGZvciBu
b3RpZmljYXRpb25zIHRvIHRoZQorICAgICAgICB3ZWIgcHJvY2VzcyBmb3IgY2hhbmdlcyBpbiB0
aGUgdmlld3BvcnQgc3RhdGUgKGVnLiB2aWV3cG9ydCBzaXplLAorICAgICAgICB2aXNpYmxlIHJl
Y3QsIGNvbnRlbnQgc2NhbGUgYW5kIG1vdmVtZW50IHRyYWplY3RvcnkpLgorCisgICAgICAgIFVw
ZGF0ZXMgb2YgdGhlIHZpZXdwb3J0IHN0YXRlIGFyZSBwdXNoZWQgdG8gdGhlIFBhZ2VWaWV3cG9y
dENvbnRyb2xsZXIKKyAgICAgICAgYnkgYSBwbGF0Zm9ybSBzcGVjaWZpYyBjbGllbnQgY2xhc3Mg
d2hpY2ggaW1wbGVtZW50cyB0aGUKKyAgICAgICAgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dCBhYnN0cmFjdCBpbnRlcmZhY2UuCisgICAgICAgIFJlcXVlc3RzIGZyb20gdGhlIHdlYiBwcm9j
ZXNzIGFyZSBhbHNvIGFjdGVkIG9uIGJ5IHRoZSBjbGllbnQgd2hpY2gKKyAgICAgICAgcHJvdmlk
ZXMgaG9va3MgdG8gdGhlIFF0IEFQSSBsYXllci4KKworICAgICAgICBGb3Igbm93IG9ubHkgUGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0IGltcGxlbWVudHMgdGhlIGNsaWVudAorICAgICAg
ICBpbnRlcmZhY2UgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBRUXVpY2sgc3BlY2lmaWMgYmVoYXZp
b3VyCisgICAgICAgIChnZXN0dXJlcywgYW5pbWF0aW9ucyBldGMpLgorCisKKyAgICAgICAgKiBU
YXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3Au
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwOgorICAgICAg
ICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6Om9uQ29tcG9uZW50Q29tcGxldGUpOgorICAgICAgICAo
UVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6On5RUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJp
dmF0ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6ZGlkQ2hhbmdl
Vmlld3BvcnRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2
YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0ZsaWNrYWJs
ZVByaXZhdGU6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdG
bGlja2FibGVQcml2YXRlOjpkaWRDaGFuZ2VDb250ZW50c1NpemUpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaDoKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6cGFnZVZpZXdwb3J0Q29udHJvbGxl
ckNsaWVudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAgIChRUXVp
Y2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
d2Via2l0dGVzdC5jcHA6CisgICAgICAgIChRV2ViS2l0VGVzdDo6dmlld3BvcnQpOgorICAgICAg
ICAoUVdlYktpdFRlc3Q6OmRldmljZVBpeGVsUmF0aW8pOgorICAgICAgICAoUVdlYktpdFRlc3Q6
OmNvbnRlbnRzU2NhbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9s
bGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0Ojpib3Vu
ZCk6CisgICAgICAgIChXZWJLaXQ6OmZ1enp5Q29tcGFyZSk6CisgICAgICAgIChXZWJLaXQ6OmJv
dW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpW
aWV3cG9ydFVwZGF0ZURlZmVycmVyKToKKyAgICAgICAgKFdlYktpdDo6Vmlld3BvcnRVcGRhdGVE
ZWZlcnJlcjo6flZpZXdwb3J0VXBkYXRlRGVmZXJyZXIpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
Vmlld3BvcnRDb250cm9sbGVyOjpQYWdlVmlld3BvcnRDb250cm9sbGVyKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6Y29udmVydEZyb21WaWV3cG9ydCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmNvbnZlcnRUb1ZpZXdwb3J0KToK
KyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6aW5uZXJCb3VuZGVkQ29u
dGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6Om91
dGVyQm91bmRlZENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRD
b250cm9sbGVyOjpkaWRDaGFuZ2VDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
Vmlld3BvcnRDb250cm9sbGVyOjpwYWdlRGlkUmVxdWVzdFNjcm9sbCk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmFkanVzdFZpZXdwb3J0U2l6ZSk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmFkanVzdFZpc2libGVDb250ZW50c1Jl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyOjpzeW5jVmlzaWJs
ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6ZGlk
Q2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0
Q29udHJvbGxlcjo6c3VzcGVuZENvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3Bv
cnRDb250cm9sbGVyOjpyZXN1bWVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdw
b3J0Q29udHJvbGxlcjo6cG9zaXRpb25SYW5nZUZvckNvbnRlbnRBdFNjYWxlKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFZpZXdwb3J0VXBkYXRlRGVmZXJy
ZXIpOgorICAgICAgICAoUGFnZVZpZXdwb3J0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6On5QYWdlVmlld3BvcnRDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6aGFzU3VzcGVuZGVkQ29udGVudCk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmhhZFVzZXJJbnRlcmFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmFsbG93c1Vz
ZXJTY2FsaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6Y29u
dGVudHNMYXlvdXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxl
cjo6ZGV2aWNlUGl4ZWxSYXRpbyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRy
b2xsZXI6Om1pbmltdW1Db250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdw
b3J0Q29udHJvbGxlcjo6bWF4aW11bUNvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlVmlld3BvcnRDb250cm9sbGVyOjpzZXRIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnQ6On5QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvcXQvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
UXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6U2NhbGVBbmltYXRpb246OnVwZGF0ZUN1cnJl
bnRWYWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRR
dDo6flBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6c2V0Q29udGVudFJlY3RWaXNpYmxlUG9zaXRp
b25BdFNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dFF0OjphbmltYXRlQ29udGVudFJlY3RWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpmbGlja01vdmVTdGFydGVkKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpmbGlja01vdmVFbmRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6cGFnZUl0ZW1Q
b3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50UXQ6OnNjYWxlQW5pbWF0aW9uU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojp0b3VjaEJlZ2luKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojp0b3VjaEVuZCk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6Zm9jdXNFZGl0YWJsZUFy
ZWEpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6Onpv
b21Ub0FyZWFHZXN0dXJlRW5kZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50UXQ6Om5lYXJlc3RWYWxpZFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnNldENvbnRlbnRzUG9z
aXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6
OnNldENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50UXQ6OnNldENvbnRlbnRzUmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpyZXF1ZXN0Vmlld3Bv
cnRVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
UXQ6OmFsbG93c1VzZXJTY2FsaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudFF0OjpkZXZpY2VQaXhlbFJhdGlvKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjptaW5pbXVtQ29udGVudHNTY2FsZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6bWF4aW11bUNvbnRl
bnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
UXQ6OmN1cnJlbnRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudFF0Ojpjb250ZW50c0xheW91dFNpemUpOgorICAgICAgICAoV2ViS2l0
OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnNjcm9sbEFuaW1hdGlvbkFjdGl2ZSk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6cGFuR2Vz
dHVyZUFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnRRdDo6cGFuR2VzdHVyZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpwYW5HZXN0dXJlRW5kZWQpOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnBhbkdlc3R1
cmVDYW5jZWxsZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50UXQ6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudFF0OjpjYW5jZWxTY3JvbGxBbmltYXRpb24pOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OmludGVycnVwdFNjYWxlQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0
OjpwaW5jaEdlc3R1cmVBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnBpbmNo
R2VzdHVyZUVuZGVkKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNs
aWVudFF0OjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OmRpZENoYW5nZUNvbnRlbnRz
U2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6
ZGlkQ2hhbmdlVmlzaWJsZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudFF0OjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnVwZGF0ZVZpZXdwb3J0
KToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpzY2Fs
ZUNvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
UXQ6OnZpZXdwb3J0U2NhbGVGb3JSZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdCk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6c2V0UGFnZVZpZXdwb3J0Q29udHJvbGxl
cik6CisgICAgICAgIChTY2FsZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6U2NhbGVBbmltYXRpb246OlNjYWxlQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpTY2FsZVN0
YWNrSXRlbTo6U2NhbGVTdGFja0l0ZW0pOgorICAgICAgICAoU2NhbGVTdGFja0l0ZW0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6UXRHZXN0dXJlUmVjb2duaXplcjo6dmlld3BvcnRDb250cm9sbGVyKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6OlF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OmZpbmlzaCk6CisgICAgICAgIChXZWJLaXQ6
OlF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OmNhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0UGluY2hH
ZXN0dXJlUmVjb2duaXplcjo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UXRQaW5jaEdlc3R1
cmVSZWNvZ25pemVyOjpmaW5pc2gpOgorICAgICAgICAoV2ViS2l0OjpRdFBpbmNoR2VzdHVyZVJl
Y29nbml6ZXI6OmNhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5k
bGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpRdFdl
YlBhZ2VFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VFdmVudEhhbmRs
ZXI6OnNldFZpZXdwb3J0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZUV2
ZW50SGFuZGxlcjo6aW5wdXRQYW5lbFZpc2libGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6
UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVJbnB1dEV2ZW50KToKKyAgICAgICAgKFdlYktp
dDo6UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkb25lV2l0aFRvdWNoRXZlbnQpOgorICAgICAgICAo
V2ViS2l0OjpRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRpZEZpbmRab29tYWJsZUFyZWEpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKFdl
YktpdCk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViS2l0
OjpRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnZpZXdwb3J0Q29udHJvbGxlcik6CisKIDIwMTItMDkt
MDQgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBub2tpYS5jb20+CiAKICAg
ICAgICAgQWxsb3cgY2hpbGQtZnJhbWUgY29udGVudCBpbiBoaXQtdGVzdHMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQpp
bmRleCAyMWUyZGMxLi43MmY4NTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTIxMyw2ICsyMTMsOCBAQCBI
RUFERVJTICs9IFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25N
YW5hZ2VyUHJveHkuaCBcCiAgICAgVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0
aW9uUHJvdmlkZXIuaCBcCiAgICAgVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBcCisgICAgVUlQcm9j
ZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXIuaCBcCisgICAgVUlQcm9jZXNzL1BhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0
b3JlLmggXAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5oIFwKICAg
ICBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5oIFwKQEAgLTU1Myw2ICs1
NTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3Rp
ZmljYXRpb24uY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRp
b25NYW5hZ2VyUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3Rp
ZmljYXRpb25Qcm92aWRlci5jcHAgXAorICAgIFVJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9s
bGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCiAg
ICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBcCiAgICAgVUlQcm9j
ZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIuY3BwIFwKQEAgLTc2NSw2ICs3NjgsNyBA
QCBjb250YWlucyhERUZJTkVTLCBIQVZFX1FUUVVJQ0s9MSkgewogICAgICAgICBVSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja25ldHdvcmtyZXF1ZXN0X3AuaCBcCiAgICAgICAgIFVJUHJvY2Vzcy9BUEkv
cXQvcXF1aWNrdXJsc2NoZW1lZGVsZWdhdGVfcC5oIFwKICAgICAgICAgVUlQcm9jZXNzL0FQSS9x
dC9xd2Via2l0dGVzdF9wLmggXAorICAgICAgICBVSVByb2Nlc3MvcXQvUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudFF0LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0Lmgg
XAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggXAogICAgICAg
ICBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oIFwKQEAgLTc3OSw3ICs3ODMsNiBA
QCBjb250YWlucyhERUZJTkVTLCBIQVZFX1FUUVVJQ0s9MSkgewogICAgICAgICBVSVByb2Nlc3Mv
cXQvUXRXZWJQYWdlUG9saWN5Q2xpZW50LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlU0dOb2RlLmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlVUlDbGllbnQuaCBc
Ci0gICAgICAgIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oIFwKICAgICAgICAgVUlQ
cm9jZXNzL3F0L1F0V2ViVW5kb0NvbnRyb2xsZXIuaCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9R
dFdlYkljb25EYXRhYmFzZUNsaWVudC5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRl
eHRNZW51UHJveHlRdC5oIFwKQEAgLTgwMSw2ICs4MDQsNyBAQCBjb250YWlucyhERUZJTkVTLCBI
QVZFX1FUUVVJQ0s9MSkgewogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVt
ZWRlbGVnYXRlLmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2Vz
LmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmtpdHRlc3QuY3BwIFwKKyAgICAg
ICAgVUlQcm9jZXNzL3F0L1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5jcHAgXAogICAg
ICAgICBVSVByb2Nlc3MvcXQvUXRXZWJFcnJvci5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvcXQv
UXREaWFsb2dSdW5uZXIuY3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0RG93bmxvYWRNYW5h
Z2VyLmNwcCBcCkBAIC04MTMsNyArODE3LDYgQEAgY29udGFpbnMoREVGSU5FUywgSEFWRV9RVFFV
SUNLPTEpIHsKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3Bw
IFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAgXAog
ICAgICAgICBVSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5jcHAgXAotICAgICAg
ICBVSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwIFwKICAgICAgICAgVUlQcm9jZXNz
L3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvcXQvV2Vi
R2VvbG9jYXRpb25Qcm92aWRlclF0LmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9XZWJQb3B1
cE1lbnVQcm94eVF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnBhZ2VfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2VfcF9wLmgKaW5kZXggYWQxYzZhZC4uYzdhYzg2YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaApA
QCAtMjYsNyArMjYsNiBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYlBhZ2VQcm94
eTsKLWNsYXNzIFF0Vmlld3BvcnRIYW5kbGVyOwogY2xhc3MgUXRXZWJQYWdlRXZlbnRIYW5kbGVy
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3LmNwcAppbmRleCBlZGVjOGM3Li5hMWVhMGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTIzLDkgKzIzLDkgQEAKIAog
I2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5SW1w
bC5oIgorI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5oIgogI2luY2x1
ZGUgIlF0RGlhbG9nUnVubmVyLmgiCiAjaW5jbHVkZSAiUXREb3dubG9hZE1hbmFnZXIuaCIKLSNp
bmNsdWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2ViQ29udGV4dC5oIgog
I2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIKICNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFzZUNsaWVu
dC5oIgpAQCAtMzI2LDggKzMyNiw5IEBAIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmluaXRp
YWxpemUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhCiB2b2lkIFFR
dWlja1dlYlZpZXdQcml2YXRlOjpvbkNvbXBvbmVudENvbXBsZXRlKCkKIHsKICAgICBRX1EoUVF1
aWNrV2ViVmlldyk7Ci0gICAgbV92aWV3cG9ydEhhbmRsZXIucmVzZXQobmV3IFF0Vmlld3BvcnRI
YW5kbGVyKHdlYlBhZ2VQcm94eS5nZXQoKSwgcSwgcGFnZVZpZXcuZGF0YSgpKSk7Ci0gICAgcGFn
ZVZpZXctPmV2ZW50SGFuZGxlcigpLT5zZXRWaWV3cG9ydEhhbmRsZXIobV92aWV3cG9ydEhhbmRs
ZXIuZGF0YSgpKTsKKyAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQucmVzZXQobmV3
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdChxLCBwYWdlVmlldy5kYXRhKCkpKTsKKyAg
ICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIucmVzZXQobmV3IFBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXIod2ViUGFnZVByb3h5LmdldCgpLCBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQuZGF0
YSgpKSk7CisgICAgcGFnZVZpZXctPmV2ZW50SGFuZGxlcigpLT5zZXRWaWV3cG9ydENvbnRyb2xs
ZXIobV9wYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50LmRhdGEoKSk7CiB9CiAKIHZvaWQgUVF1
aWNrV2ViVmlld1ByaXZhdGU6OnNldFRyYW5zcGFyZW50QmFja2dyb3VuZChib29sIGVuYWJsZSkK
QEAgLTg1Niw3ICs4NTcsNyBAQCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6UVF1aWNr
V2ViVmlld0ZsaWNrYWJsZVByaXZhdGUoUVF1aWNrV2ViVmlldyogdmlldwogCiBRUXVpY2tXZWJW
aWV3RmxpY2thYmxlUHJpdmF0ZTo6flFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlKCkKIHsK
LSAgICBtX3ZpZXdwb3J0SGFuZGxlci0+ZGlzY29ubmVjdCgpOworICAgIG1fcGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudC0+ZGlzY29ubmVjdCgpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdG
bGlja2FibGVQcml2YXRlOjppbml0aWFsaXplKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCkBAIC04NzQsMjkgKzg3NSwyOSBAQCB2b2lkIFFRdWlj
a1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpvbkNvbXBvbmVudENvbXBsZXRlKCkKIAogdm9pZCBR
UXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVz
KGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKIHsKLSAg
ICBpZiAobV92aWV3cG9ydEhhbmRsZXIpCi0gICAgICAgIG1fdmlld3BvcnRIYW5kbGVyLT52aWV3
cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKG5ld0F0dHJpYnV0ZXMpOworICAgIGlmIChtX3BhZ2VWaWV3
cG9ydENvbnRyb2xsZXIpCisgICAgICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+ZGlkQ2hh
bmdlVmlld3BvcnRBdHRyaWJ1dGVzKG5ld0F0dHJpYnV0ZXMpOwogfQogCiB2b2lkIFFRdWlja1dl
YlZpZXdGbGlja2FibGVQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUoKQogewotICAgIC8vIEZJ
WE1FOiBFeGFtaW5lIHdoeSB0aGVyZSBpcyBub3QgYW4gdmlld3BvcnRIYW5kbGVyIGhlcmUgaW4g
dGhlIGJlZ2lubmluZy4KLSAgICBpZiAobV92aWV3cG9ydEhhbmRsZXIpCi0gICAgICAgIG1fdmll
d3BvcnRIYW5kbGVyLT52aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpOworICAgIFFfUShRUXVpY2tX
ZWJWaWV3KTsKKworICAgIGlmIChtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIpCisgICAgICAgIG1f
cGFnZVZpZXdwb3J0Q29udHJvbGxlci0+YWRqdXN0Vmlld3BvcnRTaXplKFFTaXplRihxLT53aWR0
aCgpLCBxLT5oZWlnaHQoKSkpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2
YXRlOjpwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBRUG9pbnQmIHBvcykKIHsKLSAgICBtX3Zp
ZXdwb3J0SGFuZGxlci0+cGFnZUNvbnRlbnRQb3NpdGlvblJlcXVlc3RlZChwb3MpOworICAgIGlm
IChtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIpCisgICAgICAgIG1fcGFnZVZpZXdwb3J0Q29udHJv
bGxlci0+cGFnZURpZFJlcXVlc3RTY3JvbGwocG9zKTsKIH0KIAogdm9pZCBRUXVpY2tXZWJWaWV3
RmxpY2thYmxlUHJpdmF0ZTo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFFTaXplJiBuZXdT
aXplKQogewotICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKLQogICAgIHBhZ2VWaWV3LT5zZXRDb250
ZW50c1NpemUobmV3U2l6ZSk7IC8vIGVtaXRzIGNvbnRlbnRzU2l6ZUNoYW5nZWQoKQogICAgIFFR
dWlja1dlYlZpZXdQcml2YXRlOjpkaWRDaGFuZ2VDb250ZW50c1NpemUobmV3U2l6ZSk7Ci0gICAg
bV92aWV3cG9ydEhhbmRsZXItPnBhZ2VDb250ZW50c1NpemVDaGFuZ2VkKG5ld1NpemUsIHEtPmJv
dW5kaW5nUmVjdCgpLnNpemUoKS50b1NpemUoKSk7CisgICAgbV9wYWdlVmlld3BvcnRDb250cm9s
bGVyLT5kaWRDaGFuZ2VDb250ZW50c1NpemUobmV3U2l6ZSk7CiB9CiAKIHZvaWQgUVF1aWNrV2Vi
Vmlld0ZsaWNrYWJsZVByaXZhdGU6OmhhbmRsZU1vdXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19w
LmgKaW5kZXggNjQ1NTM5ZS4uMTIzY2IzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFBs
YXRmb3JtV2ViVmlldzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBRdFJlZkNvdW50ZWRO
ZXR3b3JrUmVxdWVzdERhdGE7Ci1jbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKK2NsYXNzIFBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDsKIGNsYXNzIFF0V2ViUGFnZUxvYWRDbGllbnQ7CiBj
bGFzcyBRdFdlYlBhZ2VQb2xpY3lDbGllbnQ7CiBjbGFzcyBRdFdlYlBhZ2VVSUNsaWVudDsKQEAg
LTIxNyw3ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWwq
IG1fZXhwZXJpbWVudGFsOwogCiAgICAgZnJpZW5kIGNsYXNzIFFXZWJLaXRUZXN0OwotICAgIGZy
aWVuZCBjbGFzcyBXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOworICAgIGZyaWVuZCBjbGFzcyBX
ZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDsKICAgICBmcmllbmQgY2xhc3Mg
V2ViS2l0OjpRdFdlYlBhZ2VMb2FkQ2xpZW50OwogICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlF0
V2ViUGFnZVBvbGljeUNsaWVudDsKICAgICBmcmllbmQgY2xhc3MgV2ViS2l0OjpRdFdlYlBhZ2VV
SUNsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1
aWNrd2Vidmlld19wX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2Vidmlld19wX3AuaAppbmRleCBmY2I5ZjJhLi4zOGUyMDU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCkBAIC0yMSwxMyAr
MjEsMTMgQEAKICNpZm5kZWYgcXF1aWNrd2Vidmlld19wX3BfaAogI2RlZmluZSBxcXVpY2t3ZWJ2
aWV3X3BfcF9oCiAKKyNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudC5oIgogI2luY2x1ZGUgIlF0UGFnZUNsaWVu
dC5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZVVJQ2xpZW50LmgiCiAjaW5jbHVkZSAiUXRXZWJVbmRv
Q29udHJvbGxlci5oIgotCiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVkZSAi
cXF1aWNrd2VicGFnZV9wLmgiCi0KICNpbmNsdWRlIDxRdENvcmUvUUVsYXBzZWRUaW1lcj4KICNp
bmNsdWRlIDxRdENvcmUvUU9iamVjdD4KICNpbmNsdWRlIDxRdENvcmUvUVNjb3BlZFBvaW50ZXI+
CkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgRG93bmxvYWRQcm94
eTsKIGNsYXNzIERyYXdpbmdBcmVhUHJveHk7CiBjbGFzcyBRdERpYWxvZ1J1bm5lcjsKLWNsYXNz
IFF0Vmlld3BvcnRIYW5kbGVyOworY2xhc3MgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0
OwogY2xhc3MgUXRXZWJDb250ZXh0OwogY2xhc3MgUXRXZWJFcnJvcjsKIGNsYXNzIFF0V2ViUGFn
ZUxvYWRDbGllbnQ7CkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICBpbnQgbG9hZFByb2dy
ZXNzKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkUHJvZ3Jlc3M7IH0KICAgICB2b2lkIHNldE5lZWRz
RGlzcGxheSgpOwogCi0gICAgdmlydHVhbCBXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3
cG9ydEhhbmRsZXIoKSB7IHJldHVybiAwOyB9CisgICAgV2ViS2l0OjpQYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50UXQqIHBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQuZGF0YSgpOyB9CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpIHsgfQogICAgIHZvaWQgdXBkYXRlVG91Y2hWaWV3
cG9ydFNpemUoKTsKIApAQCAtMTcwLDcgKzE3MCw5IEBAIHByb3RlY3RlZDoKICAgICBRU2NvcGVk
UG9pbnRlcjxRUXVpY2tXZWJQYWdlPiBwYWdlVmlldzsKICAgICBRUXVpY2tXZWJWaWV3KiBxX3B0
cjsKIAotICAgIFFTY29wZWRQb2ludGVyPFdlYktpdDo6UXRWaWV3cG9ydEhhbmRsZXI+IG1fdmll
d3BvcnRIYW5kbGVyOworICAgIFFTY29wZWRQb2ludGVyPFdlYktpdDo6UGFnZVZpZXdwb3J0Q29u
dHJvbGxlcj4gbV9wYWdlVmlld3BvcnRDb250cm9sbGVyOworICAgIFFTY29wZWRQb2ludGVyPFdl
YktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0PiBtX3BhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnQ7CisKICAgICBGbGlja2FibGVBeGlzTG9ja2VyIGF4aXNMb2NrZXI7CiAKICAg
ICBRUW1sQ29tcG9uZW50KiBhbGVydERpYWxvZzsKQEAgLTIxOCw3ICsyMjAsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIG9uQ29tcG9uZW50Q29tcGxldGUoKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRB
dHRyaWJ1dGVzJik7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3
cG9ydEhhbmRsZXIoKSB7IHJldHVybiBtX3ZpZXdwb3J0SGFuZGxlci5kYXRhKCk7IH0KICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFn
ZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgUVBvaW50JiBwb3MpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0LmNwcAppbmRleCBmOTJjOWZmLi4xZjIxODdh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0LmNw
cApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInF3ZWJr
aXR0ZXN0X3AuaCIKIAotI2luY2x1ZGUgIlF0Vmlld3BvcnRIYW5kbGVyLmgiCisjaW5jbHVkZSAi
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0LmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vidmll
d19wX3AuaCIKICNpbmNsdWRlIDxRTXV0YWJsZUxpc3RJdGVyYXRvcj4KICNpbmNsdWRlIDxRVG91
Y2hFdmVudD4KQEAgLTE0OCwxMiArMTQ4LDExIEBAIHN0YXRpYyBpbmxpbmUgUUpzb25PYmplY3Qg
dG9Kc29uT2JqZWN0KGNvbnN0IFFTaXplRiYgc2l6ZUYpCiBRSnNvbk9iamVjdCBRV2ViS2l0VGVz
dDo6dmlld3BvcnQoKSBjb25zdAogewogICAgIFFKc29uT2JqZWN0IHZpZXdwb3J0RGF0YTsKLSAg
ICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0SGFuZGxlciA9IG1fd2ViVmlld1ByaXZh
dGUtPnZpZXdwb3J0SGFuZGxlcigpKSB7Ci0gICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxh
dGluMVN0cmluZygiaW5pdGlhbFNjYWxlIiksIHZpZXdwb3J0SGFuZGxlci0+bV9yYXdBdHRyaWJ1
dGVzLmluaXRpYWxTY2FsZSk7Ci0gICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0
cmluZygibGF5b3V0U2l6ZSIpLCB0b0pzb25PYmplY3QoUVNpemVGKHZpZXdwb3J0SGFuZGxlci0+
bV9yYXdBdHRyaWJ1dGVzLmxheW91dFNpemUpKSk7Ci0gICAgICAgIHZpZXdwb3J0RGF0YS5pbnNl
cnQoUUxhdGluMVN0cmluZygiaXNTY2FsYWJsZSIpLCAhIXZpZXdwb3J0SGFuZGxlci0+bV9yYXdB
dHRyaWJ1dGVzLnVzZXJTY2FsYWJsZSk7Ci0gICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxh
dGluMVN0cmluZygibWluaW11bVNjYWxlIiksIHZpZXdwb3J0SGFuZGxlci0+bV9taW5pbXVtU2Nh
bGUpOwotICAgICAgICB2aWV3cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoIm1heGltdW1T
Y2FsZSIpLCB2aWV3cG9ydEhhbmRsZXItPm1fbWF4aW11bVNjYWxlKTsKKyAgICBpZiAoY29uc3Qg
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0KiBjb25zdCB2aWV3cG9ydEhhbmRsZXIgPSBt
X3dlYlZpZXdQcml2YXRlLT5wYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50KCkpIHsKKyAgICAg
ICAgdmlld3BvcnREYXRhLmluc2VydChRTGF0aW4xU3RyaW5nKCJsYXlvdXRTaXplIiksIHRvSnNv
bk9iamVjdCh2aWV3cG9ydEhhbmRsZXItPmNvbnRlbnRzTGF5b3V0U2l6ZSgpKSk7CisgICAgICAg
IHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygiaXNTY2FsYWJsZSIpLCB2aWV3cG9y
dEhhbmRsZXItPmFsbG93c1VzZXJTY2FsaW5nKCkpOworICAgICAgICB2aWV3cG9ydERhdGEuaW5z
ZXJ0KFFMYXRpbjFTdHJpbmcoIm1pbmltdW1TY2FsZSIpLCB2aWV3cG9ydEhhbmRsZXItPm1pbmlt
dW1Db250ZW50c1NjYWxlKCkpOworICAgICAgICB2aWV3cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFT
dHJpbmcoIm1heGltdW1TY2FsZSIpLCB2aWV3cG9ydEhhbmRsZXItPm1heGltdW1Db250ZW50c1Nj
YWxlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGlu
MVN0cmluZygiaW5pdGlhbFNjYWxlIiksIDEuMCk7CiAgICAgICAgIHZpZXdwb3J0RGF0YS5pbnNl
cnQoUUxhdGluMVN0cmluZygibGF5b3V0U2l6ZSIpLCB0b0pzb25PYmplY3QoUVNpemVGKCkpKTsK
QEAgLTE2NiwxNCArMTY1LDE0IEBAIFFKc29uT2JqZWN0IFFXZWJLaXRUZXN0Ojp2aWV3cG9ydCgp
IGNvbnN0CiAKIFFWYXJpYW50IFFXZWJLaXRUZXN0OjpkZXZpY2VQaXhlbFJhdGlvKCkgY29uc3QK
IHsKLSAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0
ZS0+dmlld3BvcnRIYW5kbGVyKCkpCi0gICAgICAgIHJldHVybiB2aWV3cG9ydC0+bV9kZXZpY2VQ
aXhlbFJhdGlvOworICAgIGlmIChjb25zdCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQq
IGNvbnN0IHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0ZS0+cGFnZVZpZXdwb3J0Q29udHJvbGxl
ckNsaWVudCgpKQorICAgICAgICByZXR1cm4gdmlld3BvcnQtPmRldmljZVBpeGVsUmF0aW8oKTsK
ICAgICByZXR1cm4gMS4wOwogfQogCiBRVmFyaWFudCBRV2ViS2l0VGVzdDo6Y29udGVudHNTY2Fs
ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKFF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydCA9IG1fd2Vi
Vmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlcigpKQotICAgICAgICByZXR1cm4gdmlld3BvcnQt
PmN1cnJlbnRDU1NTY2FsZSgpOworICAgIGlmIChjb25zdCBQYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50UXQqIGNvbnN0IHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0ZS0+cGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudCgpKQorICAgICAgICByZXR1cm4gdmlld3BvcnQtPmN1cnJlbnRDb250
ZW50c1NjYWxlKCk7CiAgICAgcmV0dXJuIDEuMDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yMjFkODk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMjUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmphbWluIFBv
dWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGlj
IGlubGluZSBmbG9hdCBib3VuZChmbG9hdCBtaW4sIGZsb2F0IHZhbHVlLCBmbG9hdCBtYXgpCit7
CisgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHZhbHVlLCBtaW4sIG1heCk7Cit9CisKK2Jvb2wg
ZnV6enlDb21wYXJlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IGVwc2lsb24pCit7CisgICAgcmV0
dXJuIHN0ZDo6YWJzKGEgLSBiKSA8IGVwc2lsb247Cit9CisKK0Zsb2F0UG9pbnQgYm91bmRQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50IG1pblBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbiwgY29uc3QgRmxvYXRQb2ludCYgbWF4UG9zaXRpb24pCit7CisgICAgcmV0dXJuIEZsb2F0
UG9pbnQoYm91bmQobWluUG9zaXRpb24ueCgpLCBwb3NpdGlvbi54KCksIG1heFBvc2l0aW9uLngo
KSksIGJvdW5kKG1pblBvc2l0aW9uLnkoKSwgcG9zaXRpb24ueSgpLCBtYXhQb3NpdGlvbi55KCkp
KTsKK30KKworVmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6Vmlld3BvcnRVcGRhdGVEZWZlcnJlcihQ
YWdlVmlld3BvcnRDb250cm9sbGVyKiBQYWdlVmlld3BvcnRDb250cm9sbGVyLCBTdXNwZW5kQ29u
dGVudEZsYWcgc3VzcGVuZENvbnRlbnRGbGFnKQorICAgIDogbV9jb250cm9sbGVyKFBhZ2VWaWV3
cG9ydENvbnRyb2xsZXIpCit7CisgICAgbV9jb250cm9sbGVyLT5tX3N1c3BlbmRDb3VudCsrOwor
CisgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBzdXNwZW5kIGNvbnRlbnQgZm9yIGltbWVkaWF0
ZSB1cGRhdGVzCisgICAgLy8gb25seSBkdXJpbmcgYW5pbWF0aW9ucyBvciBsb25nZXIgZ2VzdHVy
ZXMuCisgICAgaWYgKHN1c3BlbmRDb250ZW50RmxhZyA9PSBEZWZlclVwZGF0ZUFuZFN1c3BlbmRD
b250ZW50KQorICAgICAgICBtX2NvbnRyb2xsZXItPnN1c3BlbmRDb250ZW50KCk7Cit9CisKK1Zp
ZXdwb3J0VXBkYXRlRGVmZXJyZXI6On5WaWV3cG9ydFVwZGF0ZURlZmVycmVyKCkKK3sKKyAgICBp
ZiAoLS0obV9jb250cm9sbGVyLT5tX3N1c3BlbmRDb3VudCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fY29udHJvbGxlci0+cmVzdW1lQ29udGVudCgpOworCisgICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgd2lsbCBiZSByZXF1ZXN0ZWQuCisgICAg
bV9jb250cm9sbGVyLT5zeW5jVmlzaWJsZUNvbnRlbnRzKCk7Cit9CisKK1BhZ2VWaWV3cG9ydENv
bnRyb2xsZXI6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBy
b3h5LCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3dlYlBh
Z2VQcm94eShwcm94eSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fYWxsb3dzVXNl
clNjYWxpbmcoZmFsc2UpCisgICAgLCBtX21pbmltdW1TY2FsZSgxKQorICAgICwgbV9tYXhpbXVt
U2NhbGUoMSkKKyAgICAsIG1fZGV2aWNlUGl4ZWxSYXRpbygxKQorICAgICwgbV9zdXNwZW5kQ291
bnQoMCkKKyAgICAsIG1faGFzU3VzcGVuZGVkQ29udGVudChmYWxzZSkKKyAgICAsIG1faGFkVXNl
ckludGVyYWN0aW9uKGZhbHNlKQorICAgICwgbV92aWV3cG9ydFNjYWxlKDEpCit7CisgICAgLy8g
SW5pdGlhbGl6aW5nIFZpZXdwb3J0IFJhdyBBdHRyaWJ1dGVzIHRvIGF2b2lkIHJhbmRvbSBuZWdh
dGl2ZSBzY2FsZSBmYWN0b3JzCisgICAgLy8gaWYgdGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBi
ZXR3ZWVuIHRoZSBmaXJzdCBsYXlvdXQgYW5kIHNldHRpbmcgdGhlIHZpZXdwb3J0IGF0dHJpYnV0
ZXMgZm9yIHRoZSBmaXJzdCB0aW1lLgorICAgIG1fcmF3QXR0cmlidXRlcy5kZXZpY2VQaXhlbFJh
dGlvID0gbV9kZXZpY2VQaXhlbFJhdGlvOworICAgIG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2Nh
bGUgPSAxOworICAgIG1fcmF3QXR0cmlidXRlcy5taW5pbXVtU2NhbGUgPSBtX21pbmltdW1TY2Fs
ZTsKKyAgICBtX3Jhd0F0dHJpYnV0ZXMubWF4aW11bVNjYWxlID0gbV9tYXhpbXVtU2NhbGU7Cisg
ICAgbV9yYXdBdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZSA9IG1fYWxsb3dzVXNlclNjYWxpbmc7CisK
KyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LT5zZXRQYWdlVmlld3BvcnRDb250
cm9sbGVyKHRoaXMpOworfQorCitmbG9hdCBQYWdlVmlld3BvcnRDb250cm9sbGVyOjpjb252ZXJ0
RnJvbVZpZXdwb3J0KGZsb2F0IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiB2YWx1ZSAvIG1f
ZGV2aWNlUGl4ZWxSYXRpbzsKK30KKworZmxvYXQgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6Y29u
dmVydFRvVmlld3BvcnQoZmxvYXQgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZhbHVlICog
bV9kZXZpY2VQaXhlbFJhdGlvOworfQorCitGbG9hdFJlY3QgUGFnZVZpZXdwb3J0Q29udHJvbGxl
cjo6Y29udmVydFRvVmlld3BvcnQoY29uc3QgRmxvYXRSZWN0JiBjc3NSZWN0KSBjb25zdAorewor
ICAgIHJldHVybiBGbG9hdFJlY3QoCisgICAgICAgIGNvbnZlcnRUb1ZpZXdwb3J0KGNzc1JlY3Qu
eCgpKSwKKyAgICAgICAgY29udmVydFRvVmlld3BvcnQoY3NzUmVjdC55KCkpLAorICAgICAgICBj
b252ZXJ0VG9WaWV3cG9ydChjc3NSZWN0LndpZHRoKCkpLAorICAgICAgICBjb252ZXJ0VG9WaWV3
cG9ydChjc3NSZWN0LmhlaWdodCgpKQorICAgICk7Cit9CisKK2Zsb2F0IFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXI6OmlubmVyQm91bmRlZENvbnRlbnRzU2NhbGUoZmxvYXQgY3NzU2NhbGUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGJvdW5kKG1fbWluaW11bVNjYWxlLCBjc3NTY2FsZSwgbV9tYXhpbXVt
U2NhbGUpOworfQorCitmbG9hdCBQYWdlVmlld3BvcnRDb250cm9sbGVyOjpvdXRlckJvdW5kZWRD
b250ZW50c1NjYWxlKGZsb2F0IGNzc1NjYWxlKSBjb25zdAoreworICAgIGlmIChtX2FsbG93c1Vz
ZXJTY2FsaW5nKSB7CisgICAgICAgIC8vIEJvdW5kZWQgYnkgWzAuMSwgMTAuMF0gbGlrZSB0aGUg
dmlld3BvcnQgbWV0YSBjb2RlIGluIFdlYkNvcmUuCisgICAgICAgIGZsb2F0IGhhcmRNaW4gPSBz
dGQ6Om1heDxmbG9hdD4oMC4xLCAwLjUgKiBtX21pbmltdW1TY2FsZSk7CisgICAgICAgIGZsb2F0
IGhhcmRNYXggPSBzdGQ6Om1pbjxmbG9hdD4oMTAsIDIgKiBtX21heGltdW1TY2FsZSk7CisgICAg
ICAgIHJldHVybiBib3VuZChoYXJkTWluLCBjc3NTY2FsZSwgaGFyZE1heCk7CisgICAgfQorICAg
IHJldHVybiBpbm5lckJvdW5kZWRDb250ZW50c1NjYWxlKGNzc1NjYWxlKTsKK30KKwordm9pZCBQ
YWdlVmlld3BvcnRDb250cm9sbGVyOjpkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgSW50U2l6
ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAobV92aWV3cG9ydFNpemUuaXNFbXB0eSgpIHx8IG5ld1Np
emUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRlbnRzU2l6ZSA9IG5l
d1NpemU7CisKKyAgICBmbG9hdCBtaW5pbXVtU2NhbGUgPSBXZWJDb3JlOjpjb21wdXRlTWluaW11
bVNjYWxlRmFjdG9yRm9yQ29udGVudENvbnRhaW5lZChtX3Jhd0F0dHJpYnV0ZXMsIFdlYkNvcmU6
OnJvdW5kZWRJbnRTaXplKG1fdmlld3BvcnRTaXplKSwgbmV3U2l6ZSk7CisKKyAgICBpZiAoIWZ1
enp5Q29tcGFyZShtaW5pbXVtU2NhbGUsIG1fcmF3QXR0cmlidXRlcy5taW5pbXVtU2NhbGUsIDAu
MDAxKSkgeworICAgICAgICBtX21pbmltdW1TY2FsZSA9IG1pbmltdW1TY2FsZTsKKworICAgICAg
ICBpZiAoIW1faGFkVXNlckludGVyYWN0aW9uICYmICFoYXNTdXNwZW5kZWRDb250ZW50KCkpCisg
ICAgICAgICAgICBtX2NsaWVudC0+c2V0Q29udGVudHNTY2FsZShjb252ZXJ0VG9WaWV3cG9ydCht
aW5pbXVtU2NhbGUpLCB0cnVlIC8qIGlzSW5pdGlhbFNjYWxlICovKTsKKworICAgICAgICBtX2Ns
aWVudC0+ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKCk7CisgICAgfQorCisgICAgbV9jbGll
bnQtPmRpZENoYW5nZUNvbnRlbnRzU2l6ZSgpOworCisgICAgaWYgKCFoYXNTdXNwZW5kZWRDb250
ZW50KCkpCisgICAgICAgIG1fY2xpZW50LT5zZXRDb250ZW50c1JlY3RUb05lYXJlc3RWYWxpZEJv
dW5kcygpOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnBhZ2VEaWRSZXF1ZXN0
U2Nyb2xsKGNvbnN0IEludFBvaW50JiBjc3NQb3NpdGlvbikKK3sKKyAgICAvLyBJZ25vcmUgdGhl
IHJlcXVlc3QgaWYgc3VzcGVuZGVkLiBDYW4gb25seSBoYXBwZW4gZHVlIHRvIGRlbGF5IGluIGV2
ZW50IGRlbGl2ZXJ5LgorICAgIGlmIChtX3N1c3BlbmRDb3VudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRmxvYXRSZWN0IGVuZFBvc1JhbmdlID0gcG9zaXRpb25SYW5nZUZvckNvbnRlbnRBdFNj
YWxlKG1fdmlld3BvcnRTY2FsZSk7CisgICAgRmxvYXRQb2ludCBlbmRQb3NpdGlvbihjc3NQb3Np
dGlvbik7CisgICAgZW5kUG9zaXRpb24uc2NhbGUobV92aWV3cG9ydFNjYWxlLCBtX3ZpZXdwb3J0
U2NhbGUpOworICAgIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS5taW5Y
TWluWUNvcm5lcigpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UubWF4WE1heFlDb3JuZXIoKSk7
CisKKyAgICBtX2NsaWVudC0+c2V0Q29udGVudHNQb3NpdGlvbihlbmRQb3NpdGlvbik7Cit9CisK
K3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6YWRqdXN0Vmlld3BvcnRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAobmV3U2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fdmlld3BvcnRTaXplID0gbmV3U2l6ZTsKKworICAgIC8vIExldCB0
aGUgV2ViUHJvY2VzcyBrbm93IGFib3V0IHRoZSBuZXcgdmlld3BvcnQgc2l6ZSwgc28gdGhhdAor
ICAgIC8vIGl0IGNhbiByZXNpemUgdGhlIGNvbnRlbnQgYWNjb3JkaW5nbHkuCisgICAgbV93ZWJQ
YWdlUHJveHktPnNldFZpZXdwb3J0U2l6ZShyb3VuZGVkSW50U2l6ZShuZXdTaXplKSk7CisKKyAg
ICBzeW5jVmlzaWJsZUNvbnRlbnRzKCk7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxl
cjo6YWRqdXN0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHZpc2libGVDb250
ZW50c1JlY3QsIGZsb2F0IHZpZXdwb3J0U2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3Rv
cnlWZWN0b3IpCit7CisgICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gdmlzaWJsZUNvbnRlbnRz
UmVjdDsKKyAgICBtX3ZpZXdwb3J0U2NhbGUgPSB2aWV3cG9ydFNjYWxlOworICAgIHN5bmNWaXNp
YmxlQ29udGVudHModHJhamVjdG9yeVZlY3Rvcik7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29u
dHJvbGxlcjo6c3luY1Zpc2libGVDb250ZW50cyhjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5
VmVjdG9yKQoreworICAgIERyYXdpbmdBcmVhUHJveHkqIGNvbnN0IGRyYXdpbmdBcmVhID0gbV93
ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7CisgICAgaWYgKCFkcmF3aW5nQXJlYSB8fCBtX3Zp
ZXdwb3J0U2l6ZS5pc0VtcHR5KCkgfHwgbV9jb250ZW50c1NpemUuaXNFbXB0eSgpIHx8IG1fdmlz
aWJsZUNvbnRlbnRzUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRyYXdp
bmdBcmVhLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KG1fdmlzaWJsZUNvbnRlbnRzUmVjdCwgbV92
aWV3cG9ydFNjYWxlLCB0cmFqZWN0b3J5VmVjdG9yKTsKKworICAgIG1fY2xpZW50LT5kaWRDaGFu
Z2VWaXNpYmxlQ29udGVudHMoKTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyOjpk
aWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1
dGVzJiBuZXdBdHRyaWJ1dGVzKQoreworICAgIGlmIChuZXdBdHRyaWJ1dGVzLmxheW91dFNpemUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jhd0F0dHJpYnV0ZXMgPSBuZXdB
dHRyaWJ1dGVzOworICAgIFdlYkNvcmU6OnJlc3RyaWN0U2NhbGVGYWN0b3JUb0luaXRpYWxTY2Fs
ZUlmTm90VXNlclNjYWxhYmxlKG1fcmF3QXR0cmlidXRlcyk7CisKKyAgICBtX2RldmljZVBpeGVs
UmF0aW8gPSBtX3Jhd0F0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbzsgLy8gU2hvdWxkIHJldHVy
biB2YWx1ZSBmcm9tIHRoZSB3ZWJQYWdlUHJveHkuCisgICAgbV9hbGxvd3NVc2VyU2NhbGluZyA9
ICEhbV9yYXdBdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZTsKKyAgICBtX21pbmltdW1TY2FsZSA9IG1f
cmF3QXR0cmlidXRlcy5taW5pbXVtU2NhbGU7CisgICAgbV9tYXhpbXVtU2NhbGUgPSBtX3Jhd0F0
dHJpYnV0ZXMubWF4aW11bVNjYWxlOworCisgICAgbV9jbGllbnQtPmRpZENoYW5nZVZpZXdwb3J0
QXR0cmlidXRlcygpOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnN1c3BlbmRD
b250ZW50KCkKK3sKKyAgICBpZiAobV9oYXNTdXNwZW5kZWRDb250ZW50KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2hhc1N1c3BlbmRlZENvbnRlbnQgPSB0cnVlOworICAgIG1fd2ViUGFnZVBy
b3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBQ
YWdlVmlld3BvcnRDb250cm9sbGVyOjpyZXN1bWVDb250ZW50KCkKK3sKKyAgICBpZiAoIW1fcmF3
QXR0cmlidXRlcy5sYXlvdXRTaXplLmlzRW1wdHkoKSAmJiBtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlh
bFNjYWxlID4gMCkgeworICAgICAgICBtX2hhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAg
ICAgICBtX2NsaWVudC0+c2V0Q29udGVudHNTY2FsZShjb252ZXJ0VG9WaWV3cG9ydChpbm5lckJv
dW5kZWRDb250ZW50c1NjYWxlKG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUpKSwgLyogaXNJ
bml0aWFsU2NhbGUgKi8gdHJ1ZSk7CisgICAgICAgIG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2Nh
bGUgPSAtMTsgLy8gTWFyayB1c2VkLgorICAgIH0KKworICAgIG1fY2xpZW50LT5yZXF1ZXN0Vmll
d3BvcnRVcGRhdGUoKTsKKworICAgIGlmICghbV9oYXNTdXNwZW5kZWRDb250ZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2hhc1N1c3BlbmRlZENvbnRlbnQgPSBmYWxzZTsKKyAgICBtX3dl
YlBhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKwor
RmxvYXRSZWN0IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnBvc2l0aW9uUmFuZ2VGb3JDb250ZW50
QXRTY2FsZShmbG9hdCB2aWV3cG9ydFNjYWxlKSBjb25zdAoreworICAgIGNvbnN0IEZsb2F0U2l6
ZSBjb250ZW50U2l6ZSA9IG1fY29udGVudHNTaXplICogdmlld3BvcnRTY2FsZTsKKworICAgIGNv
bnN0IGZsb2F0IGhvcml6b250YWxSYW5nZSA9IGNvbnRlbnRTaXplLndpZHRoKCkgLSBtX3ZpZXdw
b3J0U2l6ZS53aWR0aCgpOworICAgIGNvbnN0IGZsb2F0IHZlcnRpY2FsUmFuZ2UgPSBjb250ZW50
U2l6ZS5oZWlnaHQoKSAtIG1fdmlld3BvcnRTaXplLmhlaWdodCgpOworCisgICAgcmV0dXJuIEZs
b2F0UmVjdCgwLCAwLCBob3Jpem9udGFsUmFuZ2UsIHZlcnRpY2FsUmFuZ2UpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlVmlld3BvcnRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZVZp
ZXdwb3J0Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZk
YWI2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZVZp
ZXdwb3J0Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmphbWluIFBvdWxhaW4gPGJlbmphbWluQHdlYmtp
dC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJfaAorI2RlZmluZSBQYWdl
Vmlld3BvcnRDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2ludC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNp
emUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIEludFBvaW50OworY2xhc3MgSW50U2l6ZTsKK30KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJQYWdl
UHJveHk7CitjbGFzcyBQYWdlVmlld3BvcnRDb250cm9sbGVyOworY2xhc3MgUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudDsKKworLy8gVVBEQVRFIERFRkVSUklORyAoU1VTUEVORC9SRVNVTUUp
CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vCisvLyBXaGVuIGludGVy
YWN0aW9uIHdpdGggdGhlIGNvbnRlbnQsIGVpdGhlciBieSBhbmltYXRpbmcgb3IgYnkgdGhlIGhh
bmQgb2YgdGhlIHVzZXIsCisvLyBpdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHNtb290aCBhbmlt
YXRpb25zIG9mIGF0IGxlYXN0IDYwZnBzIGluIG9yZGVyIHRvIGdpdmUgYQorLy8gZ29vZCB1c2Vy
IGV4cGVyaWVuY2UuCisvLworLy8gSW4gb3JkZXIgdG8gZG8gdGhpcyB3ZSBuZWVkIHRvIGdldCBy
aWQgb2YgdW5rbm93biBmYWN0b3JzLiBUaGVzZSBpbmNsdWRlIGRldmljZQorLy8gc2Vuc29ycyAo
Z2VvbG9jYXRpb24sIG9yaWVudGF0aW9uIHVwZGF0ZXMgZXRjKSwgQ1NTMyBhbmltYXRpb25zLCBK
YXZhU2NyaXB0CisvLyBleGVjdHV0aW9uLCBzdWIgcmVzb3VyY2UgbG9hZHMgZXRjLiBXZSBkbyB0
aGlzIGJ5IGVtaXR0aW5nIHN1c3BlbmQgYW5kIHJlc3VtZQorLy8gc2lnbmFscywgd2hpY2ggYXJl
IHRoZW4gaGFuZGxlZCBieSB0aGUgdmlld3BvcnQgYW5kIHByb3BhZ2F0ZXMgdG8gdGhlIHJpZ2h0
IHBsYWNlLgorLy8KKy8vIEZvciB0aGlzIHJlYXNvbiB0aGUgVmlld3BvcnRVcGRhdGVEZWZlcnJl
ciBndWFyZCBtdXN0IGJlIHVzZWQgd2hlbiB3ZSBpbnRlcmFjdAorLy8gb3IgYW5pbWF0ZSB0aGUg
Y29udGVudC4KKy8vCisvLyBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB3aGVuIHdlIHVwZGF0ZSBj
b250ZW50IHByb3BlcnRpZXMsIHdlIG1pZ2h0IHJlY2VpdmUgbm90aWZ5CisvLyBzaWduYWxzIHNl
bmQgYnkgdGhlIHBhZ2UgaXRzZWxmLCBhbmQgY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gbm90IGFj
dCBvbiB0aGVzZQorLy8gdW5jb25kaXRpb25hbGx5LgorLy8KKy8vIElmIHNvbWV0aGluZyBzaG91
bGQgb25seSBiZSBleGVjdXRlZCBkdXJpbmcgdXBkYXRlIGRlZmVycmluZywgaXQgaXMgcG9zc2li
bGUgdG8KKy8vIGNoZWNrIGZvciB0aGF0IHVzaW5nIEFTU0VSVChoYXNTdXNwZW5kZWRDb250ZW50
KCkpLgorCitjbGFzcyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIHsKK3B1YmxpYzoKKyAgICBlbnVt
IFN1c3BlbmRDb250ZW50RmxhZyB7IERlZmVyVXBkYXRlLCBEZWZlclVwZGF0ZUFuZFN1c3BlbmRD
b250ZW50IH07CisgICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlcihQYWdlVmlld3BvcnRDb250cm9s
bGVyKiwgU3VzcGVuZENvbnRlbnRGbGFnID0gRGVmZXJVcGRhdGUpOworICAgIH5WaWV3cG9ydFVw
ZGF0ZURlZmVycmVyKCk7CisKK3ByaXZhdGU6CisgICAgUGFnZVZpZXdwb3J0Q29udHJvbGxlciog
Y29uc3QgbV9jb250cm9sbGVyOworfTsKKworY2xhc3MgUGFnZVZpZXdwb3J0Q29udHJvbGxlciB7
CitwdWJsaWM6CisgICAgUGFnZVZpZXdwb3J0Q29udHJvbGxlcihXZWJLaXQ6OldlYlBhZ2VQcm94
eSosIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5QYWdlVmll
d3BvcnRDb250cm9sbGVyKCkgeyB9CisKKyAgICB2b2lkIHN1c3BlbmRDb250ZW50KCk7CisgICAg
dm9pZCByZXN1bWVDb250ZW50KCk7CisKKyAgICBGbG9hdFJlY3QgcG9zaXRpb25SYW5nZUZvckNv
bnRlbnRBdFNjYWxlKGZsb2F0IHZpZXdwb3J0U2NhbGUpIGNvbnN0OworCisgICAgRmxvYXRSZWN0
IGNvbnZlcnRUb1ZpZXdwb3J0KGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OworICAgIGZsb2F0IGNv
bnZlcnRGcm9tVmlld3BvcnQoZmxvYXQpIGNvbnN0OworICAgIGZsb2F0IGNvbnZlcnRUb1ZpZXdw
b3J0KGZsb2F0KSBjb25zdDsKKworICAgIGZsb2F0IGlubmVyQm91bmRlZENvbnRlbnRzU2NhbGUo
ZmxvYXQpIGNvbnN0OworICAgIGZsb2F0IG91dGVyQm91bmRlZENvbnRlbnRzU2NhbGUoZmxvYXQp
IGNvbnN0OworCisgICAgYm9vbCBoYXNTdXNwZW5kZWRDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
bV9zdXNwZW5kQ291bnQgfHwgbV9oYXNTdXNwZW5kZWRDb250ZW50OyB9CisgICAgYm9vbCBoYWRV
c2VySW50ZXJhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2hhZFVzZXJJbnRlcmFjdGlvbjsgfQor
ICAgIGJvb2wgYWxsb3dzVXNlclNjYWxpbmcoKSBjb25zdCB7IHJldHVybiBtX2FsbG93c1VzZXJT
Y2FsaW5nOyB9CisKKyAgICBGbG9hdFNpemUgY29udGVudHNMYXlvdXRTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYXdBdHRyaWJ1dGVzLmxheW91dFNpemU7IH0KKyAgICBmbG9hdCBkZXZpY2VQaXhl
bFJhdGlvKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VQaXhlbFJhdGlvOyB9CisgICAgZmxvYXQg
bWluaW11bUNvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1TY2FsZTsgfQor
ICAgIGZsb2F0IG1heGltdW1Db250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9tYXhpbXVt
U2NhbGU7IH0KKworICAgIHZvaWQgc2V0SGFkVXNlckludGVyYWN0aW9uKGJvb2wgZGlkVXNlcklu
dGVyYWN0KSB7IG1faGFkVXNlckludGVyYWN0aW9uID0gZGlkVXNlckludGVyYWN0OyB9CisKKyAg
ICAvLyBOb3RpZmljYXRpb25zIHRvIHRoZSBXZWJQcm9jZXNzLgorICAgIHZvaWQgYWRqdXN0Vmll
d3BvcnRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgbmV3U2l6ZSk7CisgICAgdm9pZCBhZGp1c3RWaXNp
YmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxv
YXQgdmlld3BvcnRTY2FsZSwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvciA9IEZs
b2F0UG9pbnQ6Onplcm8oKSk7CisKKyAgICAvLyBOb3RpZmljYXRpb25zIGZyb20gdGhlIFdlYlBy
b2Nlc3MuCisgICAgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYgbmV3
U2l6ZSk7CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoY29uc3QgVmlld3Bv
cnRBdHRyaWJ1dGVzJik7CisgICAgdm9pZCBwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBJbnRQ
b2ludCYgY3NzUG9zaXRpb24pOworCitwcml2YXRlOgorICAgIHZvaWQgc3luY1Zpc2libGVDb250
ZW50cyhjb25zdCBGbG9hdFBvaW50ICZ0cmFqZWN0b3J5VmVjdG9yID0gRmxvYXRQb2ludDo6emVy
bygpKTsKKworICAgIFdlYlBhZ2VQcm94eSogY29uc3QgbV93ZWJQYWdlUHJveHk7CisgICAgUGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCogbV9jbGllbnQ7CisKKyAgICBWaWV3cG9ydEF0dHJp
YnV0ZXMgbV9yYXdBdHRyaWJ1dGVzOworCisgICAgYm9vbCBtX2FsbG93c1VzZXJTY2FsaW5nOwor
ICAgIGZsb2F0IG1fbWluaW11bVNjYWxlOworICAgIGZsb2F0IG1fbWF4aW11bVNjYWxlOworICAg
IGZsb2F0IG1fZGV2aWNlUGl4ZWxSYXRpbzsKKworICAgIGludCBtX3N1c3BlbmRDb3VudDsKKyAg
ICBib29sIG1faGFzU3VzcGVuZGVkQ29udGVudDsKKyAgICBib29sIG1faGFkVXNlckludGVyYWN0
aW9uOworCisgICAgRmxvYXRTaXplIG1fdmlld3BvcnRTaXplOworICAgIEZsb2F0U2l6ZSBtX2Nv
bnRlbnRzU2l6ZTsKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OworICAgIGZs
b2F0IG1fdmlld3BvcnRTY2FsZTsgLy8gU2hvdWxkIGFsd2F5cyBiZSBjc3NTY2FsZSAqIGRldmlj
ZVBpeGVsUmF0aW8uCisKKyAgICBmcmllbmQgY2xhc3MgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjsK
K307CisKK2Jvb2wgZnV6enlDb21wYXJlKGZsb2F0LCBmbG9hdCwgZmxvYXQgZXBzaWxvbik7CitG
bG9hdFBvaW50IGJvdW5kUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCBtaW5Qb3NpdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIG1heFBvc2l0aW9uKTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdlVmlld3BvcnRDb250cm9s
bGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlj
NjliY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHBy
b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50X2gKKyNkZWZpbmUgUGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNz
IEZsb2F0UG9pbnQ7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBQYWdlVmlld3Bv
cnRDb250cm9sbGVyOworCitjbGFzcyBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50IHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50KCkgeyB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBwb3NpdGlvbkluVmlld0Nvb3JkaW5hdGVzKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldENvbnRlbnRzU2NhbGUoZmxvYXQgdmlld3BvcnRTY2FsZSwgYm9vbCBpc0luaXRpYWxTY2Fs
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3RUb05lYXJlc3RWYWxpZEJv
dW5kcygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Vmlld3BvcnRVcGRhdGUoKSA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaXNpYmxlQ29udGVudHMoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcygpID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBzZXRQYWdlVmlld3BvcnRDb250cm9sbGVyKFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIqKSA9
IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTZhYjRmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5j
cHAKQEAgLTAsMCArMSw1NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQmVuamFtaW4gUG91bGFpbiA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRR
dC5oIgorCisjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vi
dmlld19wLmgiCisjaW5jbHVkZSAicXdlYmtpdHRlc3RfcC5oIgorI2luY2x1ZGUgPFFQb2ludEY+
CisjaW5jbHVkZSA8UVRyYW5zZm9ybT4KKyNpbmNsdWRlIDxRdFF1aWNrL3FxdWlja2l0ZW0uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRT
aXplLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgaW50IGtTY2FsZUFu
aW1hdGlvbkR1cmF0aW9uTWlsbGlzID0gMjUwOworCitQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50UXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdChRUXVpY2tXZWJWaWV3KiB2aWV3
cG9ydEl0ZW0sIFFRdWlja1dlYlBhZ2UqIHBhZ2VJdGVtKQorICAgIDogbV92aWV3cG9ydEl0ZW0o
dmlld3BvcnRJdGVtKQorICAgICwgbV9wYWdlSXRlbShwYWdlSXRlbSkKKyAgICAsIG1fc2NhbGVB
bmltYXRpb24obmV3IFNjYWxlQW5pbWF0aW9uKHRoaXMpKQorICAgICwgbV9waW5jaFN0YXJ0U2Nh
bGUoLTEpCisgICAgLCBtX2xhc3RDb21taXR0ZWRTY2FsZSgtMSkKKyAgICAsIG1fem9vbU91dFNj
YWxlKDApCisgICAgLCBtX2lnbm9yZVZpZXdwb3J0Q2hhbmdlcyh0cnVlKQoreworICAgIG1fc2Nh
bGVBbmltYXRpb24tPnNldER1cmF0aW9uKGtTY2FsZUFuaW1hdGlvbkR1cmF0aW9uTWlsbGlzKTsK
KyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRFYXNpbmdDdXJ2ZShRRWFzaW5nQ3VydmU6Ok91dEN1
YmljKTsKKworICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChtb3ZlbWVudFN0YXJ0
ZWQoKSksIFNMT1QoZmxpY2tNb3ZlU3RhcnRlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwor
ICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChtb3ZlbWVudEVuZGVkKCkpLCBTTE9U
KGZsaWNrTW92ZUVuZGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7CisgICAgY29ubmVjdCht
X3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgpKSwgU0xPVChwYWdlSXRlbVBv
c2l0aW9uQ2hhbmdlZCgpKSk7CisgICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNv
bnRlbnRZQ2hhbmdlZCgpKSwgU0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7CisKKwor
ICAgIGNvbm5lY3QobV9zY2FsZUFuaW1hdGlvbiwgU0lHTkFMKHN0YXRlQ2hhbmdlZChRQWJzdHJh
Y3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKSksCisgICAgICAg
ICAgICBTTE9UKHNjYWxlQW5pbWF0aW9uU3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6
U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUpKSk7Cit9CisKK3ZvaWQgUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudFF0OjpTY2FsZUFuaW1hdGlvbjo6dXBkYXRlQ3VycmVudFZhbHVl
KGNvbnN0IFFWYXJpYW50JiB2YWx1ZSkKK3sKKyAgICAvLyBSZXNldHRpbmcgdGhlIGVuZCB2YWx1
ZSwgdGhlIGVhc2luZyBjdXJ2ZSBvciB0aGUgZHVyYXRpb24gb2YgdGhlIHNjYWxlIGFuaW1hdGlv
bgorICAgIC8vIHRyaWdnZXJzIGEgcmVjYWxjdWxhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGludGVy
dmFsLiBUaGlzIG1pZ2h0IGNoYW5nZSB0aGUgY3VycmVudAorICAgIC8vIHZhbHVlIG9mIHRoZSBh
bmltYXRlZCBwcm9wZXJ0eS4KKyAgICAvLyBNYWtlIHN1cmUgd2Ugb25seSBhY3Qgb24gYW5pbWF0
aW9uIHZhbHVlIGNoYW5nZXMgaWYgdGhlIGFuaW1hdGlvbiBpcyBhY3RpdmUuCisgICAgaWYgKCFt
X2NvbnRyb2xsZXJDbGllbnQtPnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFFSZWN0RiBpdGVtUmVjdCA9IHZhbHVlLnRvUmVjdEYoKTsKKyAgICBmbG9hdCBp
dGVtU2NhbGUgPSBtX2NvbnRyb2xsZXJDbGllbnQtPnZpZXdwb3J0U2NhbGVGb3JSZWN0KGl0ZW1S
ZWN0KTsKKworICAgIG1fY29udHJvbGxlckNsaWVudC0+c2V0Q29udGVudFJlY3RWaXNpYmxlUG9z
aXRpb25BdFNjYWxlKGl0ZW1SZWN0LnRvcExlZnQoKSwgaXRlbVNjYWxlKTsKK30KKworUGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojp+UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0
KCkKK3sKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnNldENvbnRl
bnRSZWN0VmlzaWJsZVBvc2l0aW9uQXRTY2FsZShjb25zdCBRUG9pbnRGJiBsb2NhdGlvbiwgcXJl
YWwgaXRlbVNjYWxlKQoreworICAgIEFTU0VSVChpdGVtU2NhbGUgPj0gMCk7CisKKyAgICBzY2Fs
ZUNvbnRlbnQoaXRlbVNjYWxlKTsKKworICAgIC8vIFRvIGFuaW1hdGUgdGhlIHBvc2l0aW9uIHRv
Z2V0aGVyIHdpdGggdGhlIHNjYWxlIHdlIG11bHRpcGx5IHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBj
dXJyZW50IHNjYWxlCisgICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgcGFnZSBwb3NpdGlvbiAoZGlz
cGxhY2VtZW50IG9uIHRoZSBmbGlja2FibGUgY29udGVudEl0ZW0gYmVjYXVzZSBvZiBhZGRpdGlv
bmFsIGl0ZW1zKS4KKyAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uKG1fcGFnZUl0ZW0tPnBvcygpICsg
bG9jYXRpb24gKiBpdGVtU2NhbGUpOworCisgICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQ
b3MobmV3UG9zaXRpb24pOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRR
dDo6YW5pbWF0ZUNvbnRlbnRSZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmIGNvbnRlbnRSZWN0KQor
eworICAgIEFTU0VSVChtX3NjYWxlQW5pbWF0aW9uLT5zdGF0ZSgpID09IFFBYnN0cmFjdEFuaW1h
dGlvbjo6U3RvcHBlZCk7CisKKyAgICBBU1NFUlQoIXNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKTsK
KyAgICBpZiAoc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFFSZWN0RiB2aWV3cG9ydFJlY3RJbkNvbnRlbnRDb29yZHMgPSBtX3ZpZXdwb3J0SXRlbS0+bWFw
UmVjdFRvV2ViQ29udGVudChtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkpOworICAgIGlm
IChjb250ZW50UmVjdCA9PSB2aWV3cG9ydFJlY3RJbkNvbnRlbnRDb29yZHMpIHsKKyAgICAgICAg
dXBkYXRlVmlld3BvcnQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNpbmNl
IHdlIGhhdmUgdG8gYW5pbWF0ZSBzY2FsZSBhbmQgcG9zaXRpb24gYXQgdGhlIHNhbWUgdGltZSB0
aGUgc2NhbGUgYW5pbWF0aW9uIGludGVycG9sYXRlcworICAgIC8vIGZyb20gdGhlIGN1cnJlbnQg
dmlld3BvcnQgcmVjdCBpbiBjb250ZW50IGNvb3JkaW5hdGVzIHRvIGEgdmlzaWJsZSByZWN0IG9m
IHRoZSBjb250ZW50LgorICAgIG1fc2NhbGVBbmltYXRpb24tPnNldFN0YXJ0VmFsdWUodmlld3Bv
cnRSZWN0SW5Db250ZW50Q29vcmRzKTsKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRFbmRWYWx1
ZShjb250ZW50UmVjdCk7CisKKyAgICAvLyBJbmZvcm0gdGhlIHdlYiBwcm9jZXNzIGFib3V0IHRo
ZSByZXF1ZXN0ZWQgdmlzaWJsZSBjb250ZW50IHJlY3QKKyAgICAvLyBpZiB6b29taW5nLW91dCBz
byB0aGF0IG5vIHdoaXRlIHRpbGVzIGFyZSBleHBvc2VkIGR1cmluZyBhbmltYXRpb24uCisgICAg
aWYgKHZpZXdwb3J0UmVjdEluQ29udGVudENvb3Jkcy53aWR0aCgpIC8gY29udGVudFJlY3Qud2lk
dGgoKSA8IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKSkKKyAgICAgICAgbV92aWV3cG9ydENv
bnRyb2xsZXItPmFkanVzdFZpc2libGVDb250ZW50c1JlY3QoY29udGVudFJlY3QsIHZpZXdwb3J0
U2NhbGVGb3JSZWN0KGNvbnRlbnRSZWN0KSk7CisKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zdGFy
dCgpOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6ZmxpY2tNb3Zl
U3RhcnRlZCgpCit7CisgICAgUV9BU1NFUlQobV92aWV3cG9ydEl0ZW0tPmlzTW92aW5nKCkpOwor
ICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIucmVzZXQobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJy
ZXIobV92aWV3cG9ydENvbnRyb2xsZXIsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBk
YXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKKworICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gbV92
aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKTsKKworICAgIG1faWdub3JlVmlld3BvcnRDaGFuZ2Vz
ID0gZmFsc2U7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpmbGlj
a01vdmVFbmRlZCgpCit7CisgICAgUV9BU1NFUlQoIW1fdmlld3BvcnRJdGVtLT5pc01vdmluZygp
KTsKKyAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gdGhlIGVuZCBvZiB0aGUgcGFuIG9y
IHBhbiBraW5ldGljIGFuaW1hdGlvbi4KKworICAgIG1faWdub3JlVmlld3BvcnRDaGFuZ2VzID0g
dHJ1ZTsKKworICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIucmVzZXQoKTsKK30KKwordm9pZCBQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkK
K3sKKyAgICBpZiAobV9pZ25vcmVWaWV3cG9ydENoYW5nZXMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFFQb2ludEYgbmV3UG9zaXRpb24gPSBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpOwor
CisgICAgdXBkYXRlVmlld3BvcnQobV9sYXN0U2Nyb2xsUG9zaXRpb24gLSBuZXdQb3NpdGlvbik7
CisKKyAgICBtX2xhc3RTY3JvbGxQb3NpdGlvbiA9IG5ld1Bvc2l0aW9uOworfQorCit2b2lkIFBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6c2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQo
UUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSBuZXdTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpT
dGF0ZSAvKm9sZFN0YXRlKi8pCit7CisgICAgc3dpdGNoIChuZXdTdGF0ZSkgeworICAgIGNhc2Ug
UUFic3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nOgorICAgICAgICBtX3ZpZXdwb3J0SXRlbS0+Y2Fu
Y2VsRmxpY2soKTsKKyAgICAgICAgQVNTRVJUKCFtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyKTsK
KyAgICAgICAgbV9hbmltYXRpb25VcGRhdGVEZWZlcnJlci5yZXNldChuZXcgVmlld3BvcnRVcGRh
dGVEZWZlcnJlcihtX3ZpZXdwb3J0Q29udHJvbGxlciwgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6
RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RvcHBlZDoKKyAgICAgICAgbV9hbmltYXRpb25VcGRhdGVE
ZWZlcnJlci5yZXNldCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojp0
b3VjaEJlZ2luKCkKK3sKKyAgICBtX3ZpZXdwb3J0Q29udHJvbGxlci0+c2V0SGFkVXNlckludGVy
YWN0aW9uKHRydWUpOworCisgICAgLy8gUHJldmVudHMgcmVzdW1pbmcgdGhlIHBhZ2UgYmV0d2Vl
biB0aGUgdXNlcidzIGZsaWNrcyBvZiB0aGUgcGFnZSB3aGlsZSB0aGUgYW5pbWF0aW9uIGlzIHJ1
bm5pbmcuCisgICAgaWYgKHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICBtX3RvdWNo
VXBkYXRlRGVmZXJyZXIucmVzZXQobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIobV92aWV3cG9y
dENvbnRyb2xsZXIsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVu
ZENvbnRlbnQpKTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnRv
dWNoRW5kKCkKK3sKKyAgICBtX3RvdWNoVXBkYXRlRGVmZXJyZXIucmVzZXQoKTsKK30KKwordm9p
ZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OmZvY3VzRWRpdGFibGVBcmVhKGNvbnN0
IFFSZWN0RiYgY2FyZXRBcmVhLCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpCit7CisgICAgLy8g
VGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgor
ICAgIEFTU0VSVChtX3ZpZXdwb3J0Q29udHJvbGxlci0+aGFkVXNlckludGVyYWN0aW9uKCkpOwor
CisgICAgUVJlY3RGIGVuZEFyZWEgPSBtX3ZpZXdwb3J0Q29udHJvbGxlci0+Y29udmVydFRvVmll
d3BvcnQodGFyZ2V0QXJlYSk7CisKKyAgICBxcmVhbCBlbmRJdGVtU2NhbGUgPSBtX3ZpZXdwb3J0
Q29udHJvbGxlci0+Y29udmVydFRvVmlld3BvcnQobV92aWV3cG9ydENvbnRyb2xsZXItPmlubmVy
Qm91bmRlZENvbnRlbnRzU2NhbGUoMi4wKSk7CisgICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVj
dCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsKKworICAgIHFyZWFsIHg7CisgICAg
Y29uc3QgcXJlYWwgYm9yZGVyT2Zmc2V0ID0gMTA7CisgICAgaWYgKChlbmRBcmVhLndpZHRoKCkg
KyBib3JkZXJPZmZzZXQpICogZW5kSXRlbVNjYWxlIDw9IHZpZXdwb3J0UmVjdC53aWR0aCgpKSB7
CisgICAgICAgIC8vIENlbnRlciB0aGUgaW5wdXQgZmllbGQgaW4gdGhlIG1pZGRsZSBvZiB0aGUg
dmlldywgaWYgaXQgaXMgc21hbGxlciB0aGFuCisgICAgICAgIC8vIHRoZSB2aWV3IGF0IHRoZSBz
Y2FsZSB0YXJnZXQuCisgICAgICAgIHggPSB2aWV3cG9ydFJlY3QuY2VudGVyKCkueCgpIC0gZW5k
QXJlYS53aWR0aCgpICogZW5kSXRlbVNjYWxlIC8gMi4wOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIEVuc3VyZSB0aGF0IHRoZSBjYXJldCBhbHdheXMgaGFzIGJvcmRlck9mZnNldCBjb250ZW50
cyBwaXhlbHMgdG8gdGhlIHJpZ2h0CisgICAgICAgIC8vIG9mIGl0LCBhbmQgc2Vjb25kYXJpbHkg
KGlmIHBvc3NpYmxlKSwgdGhhdCB0aGUgYXJlYSBoYXMgYm9yZGVyT2Zmc2V0CisgICAgICAgIC8v
IGNvbnRlbnRzIHBpeGVscyB0byB0aGUgbGVmdCBvZiBpdC4KKyAgICAgICAgcXJlYWwgY2FyZXRP
ZmZzZXQgPSBtX3ZpZXdwb3J0Q29udHJvbGxlci0+Y29udmVydFRvVmlld3BvcnQoY2FyZXRBcmVh
LngoKSkgLSBlbmRBcmVhLngoKTsKKyAgICAgICAgeCA9IHFNaW4odmlld3BvcnRSZWN0LndpZHRo
KCkgLSAoY2FyZXRPZmZzZXQgKyBib3JkZXJPZmZzZXQpICogZW5kSXRlbVNjYWxlLCBib3JkZXJP
ZmZzZXQgKiBlbmRJdGVtU2NhbGUpOworICAgIH0KKworICAgIGNvbnN0IFFQb2ludEYgaG90c3Bv
dCA9IFFQb2ludEYoZW5kQXJlYS54KCksIGVuZEFyZWEuY2VudGVyKCkueSgpKTsKKyAgICBjb25z
dCBRUG9pbnRGIHZpZXdwb3J0SG90c3BvdCA9IFFQb2ludEYoeCwgLyogRklYTUU6IHZpc2libGVD
ZW50ZXIgKi8gdmlld3BvcnRSZWN0LmNlbnRlcigpLnkoKSk7CisKKyAgICBRUG9pbnRGIGVuZFBv
c2l0aW9uID0gaG90c3BvdCAqIGVuZEl0ZW1TY2FsZSAtIHZpZXdwb3J0SG90c3BvdDsKKyAgICBR
UmVjdEYgZW5kUG9zUmFuZ2UgPSBtX3ZpZXdwb3J0Q29udHJvbGxlci0+cG9zaXRpb25SYW5nZUZv
ckNvbnRlbnRBdFNjYWxlKGVuZEl0ZW1TY2FsZSk7CisKKyAgICBlbmRQb3NpdGlvbiA9IGJvdW5k
UG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2Uu
Ym90dG9tUmlnaHQoKSk7CisKKyAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBv
c2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxl
KTsKKworICAgIGFuaW1hdGVDb250ZW50UmVjdFZpc2libGUoZW5kVmlzaWJsZUNvbnRlbnRSZWN0
KTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6Onpvb21Ub0FyZWFH
ZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29uc3QgUVJlY3RGJiB0YXJn
ZXRBcmVhKQoreworICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEg
dXNlciBpbnRlcmFjdGlvbi4KKyAgICBBU1NFUlQobV92aWV3cG9ydENvbnRyb2xsZXItPmhhZFVz
ZXJJbnRlcmFjdGlvbigpKTsKKworICAgIGlmICghdGFyZ2V0QXJlYS5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX3ZpZXdwb3J0Q29udHJvbGxlci0+aGFzU3VzcGVuZGVk
Q29udGVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBpbnQgbWFyZ2luID0gMTA7
IC8vIFdlIHdhbnQgYXQgbGVhc3QgYSBsaXR0bGUgYml0IG9mIG1hcmdpbi4KKyAgICBRUmVjdEYg
ZW5kQXJlYSA9IG1fdmlld3BvcnRDb250cm9sbGVyLT5jb252ZXJ0VG9WaWV3cG9ydCh0YXJnZXRB
cmVhLmFkanVzdGVkKC1tYXJnaW4sIC1tYXJnaW4sIG1hcmdpbiwgbWFyZ2luKSk7CisKKyAgICBj
b25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgp
OworCisgICAgcXJlYWwgdGFyZ2V0Q1NTU2NhbGUgPSB2aWV3cG9ydFJlY3Quc2l6ZSgpLndpZHRo
KCkgLyBlbmRBcmVhLnNpemUoKS53aWR0aCgpOworICAgIHFyZWFsIGVuZENTU1NjYWxlID0gbV92
aWV3cG9ydENvbnRyb2xsZXItPmlubmVyQm91bmRlZENvbnRlbnRzU2NhbGUocU1pbih0YXJnZXRD
U1NTY2FsZSwgcXJlYWwoMi41KSkpOworICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IG1fdmlld3Bv
cnRDb250cm9sbGVyLT5jb252ZXJ0VG9WaWV3cG9ydChlbmRDU1NTY2FsZSk7CisgICAgcXJlYWwg
Y3VycmVudFNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOworCisgICAgLy8gV2Ug
d2FudCB0byBlbmQgdXAgd2l0aCB0aGUgdGFyZ2V0IGFyZWEgZmlsbGluZyB0aGUgd2hvbGUgd2lk
dGggb2YgdGhlIHZpZXdwb3J0IChpZiBwb3NzaWJsZSksCisgICAgLy8gYW5kIGNlbnRyYWxpemVk
IHZlcnRpY2FsbHkgd2hlcmUgdGhlIHVzZXIgcmVxdWVzdGVkIHpvb20uIFRodXMgb3VyIGhvdHNw
b3QgaXMgdGhlIGNlbnRlciBvZgorICAgIC8vIHRoZSB0YXJnZXRBcmVhIHgtd2lzZSBhbmQgdGhl
IHJlcXVlc3RlZCB6b29tIHBvc2l0aW9uLCB5LXdpc2UuCisgICAgY29uc3QgUVBvaW50RiBob3Rz
cG90ID0gUVBvaW50RihlbmRBcmVhLmNlbnRlcigpLngoKSwgbV92aWV3cG9ydENvbnRyb2xsZXIt
PmNvbnZlcnRUb1ZpZXdwb3J0KHRvdWNoUG9pbnQueSgpKSk7CisgICAgY29uc3QgUVBvaW50RiB2
aWV3cG9ydEhvdHNwb3QgPSB2aWV3cG9ydFJlY3QuY2VudGVyKCk7CisKKyAgICBRUG9pbnRGIGVu
ZFBvc2l0aW9uID0gaG90c3BvdCAqIGVuZENTU1NjYWxlIC0gdmlld3BvcnRIb3RzcG90OworCisg
ICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gbV92aWV3cG9ydENvbnRyb2xsZXItPnBvc2l0aW9uUmFu
Z2VGb3JDb250ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUpOworICAgIGVuZFBvc2l0aW9uID0gYm91
bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5n
ZS5ib3R0b21SaWdodCgpKTsKKworICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5k
UG9zaXRpb24gLyBlbmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2Nh
bGUpOworCisgICAgZW51bSB7IFpvb21JbiwgWm9vbUJhY2ssIFpvb21PdXQsIE5vWm9vbSB9IHpv
b21BY3Rpb24gPSBab29tSW47CisKKyAgICBpZiAoIW1fc2NhbGVTdGFjay5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gWm9vbSBiYWNrIG91dCBpZiBhdHRlbXB0aW5nIHRvIHNjYWxlIHRvIHRoZSBz
YW1lIGN1cnJlbnQgc2NhbGUsIG9yCisgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gY29udGludWUg
c2NhbGluZyBvdXQgZnJvbSB0aGUgaW5uZXIgbW9zdCBsZXZlbC4KKyAgICAgICAgLy8gVXNlIGZ1
enp5IGNvbXBhcmUgd2l0aCBhIGZpeGVkIGVycm9yIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRoIGxh
cmdpc2ggZGlmZmVyZW5jZXMgZHVlIHRvIHBpeGVsIHJvdW5kaW5nLgorICAgICAgICBpZiAoZnV6
enlDb21wYXJlKGVuZEl0ZW1TY2FsZSwgY3VycmVudFNjYWxlLCAwLjAxKSkgeworICAgICAgICAg
ICAgLy8gSWYgbW92aW5nIHRoZSB2aWV3cG9ydCB3b3VsZCBleHBvc2UgbW9yZSBvZiB0aGUgdGFy
Z2V0UmVjdCBhbmQgbW92ZSBhdCBsZWFzdCA0MCBwaXhlbHMsIHVwZGF0ZSBwb3NpdGlvbiBidXQg
ZG8gbm90IHNjYWxlIG91dC4KKyAgICAgICAgICAgIFFSZWN0RiBjdXJyZW50Q29udGVudFJlY3Qo
dmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKKyAgICAgICAgICAgIFFSZWN0RiB0YXJnZXRJbnRlcnNl
Y3Rpb24gPSBlbmRWaXNpYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0ZWQodGFyZ2V0QXJlYSk7Cisg
ICAgICAgICAgICBpZiAoIWN1cnJlbnRDb250ZW50UmVjdC5jb250YWlucyh0YXJnZXRJbnRlcnNl
Y3Rpb24pCisgICAgICAgICAgICAgICAgICAgICYmIChxQWJzKGVuZFZpc2libGVDb250ZW50UmVj
dC50b3AoKSAtIGN1cnJlbnRDb250ZW50UmVjdC50b3AoKSkgPj0gNDAKKyAgICAgICAgICAgICAg
ICAgICAgfHwgcUFicyhlbmRWaXNpYmxlQ29udGVudFJlY3QubGVmdCgpIC0gY3VycmVudENvbnRl
bnRSZWN0LmxlZnQoKSkgPj0gNDApKQorICAgICAgICAgICAgICAgIHpvb21BY3Rpb24gPSBOb1pv
b207CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21C
YWNrOworICAgICAgICB9IGVsc2UgaWYgKGZ1enp5Q29tcGFyZShlbmRJdGVtU2NhbGUsIG1fem9v
bU91dFNjYWxlLCAwLjAxKSkKKyAgICAgICAgICAgIHpvb21BY3Rpb24gPSBab29tQmFjazsKKyAg
ICAgICAgZWxzZSBpZiAoZW5kSXRlbVNjYWxlIDwgY3VycmVudFNjYWxlKQorICAgICAgICAgICAg
em9vbUFjdGlvbiA9IFpvb21PdXQ7CisgICAgfQorCisgICAgc3dpdGNoICh6b29tQWN0aW9uKSB7
CisgICAgY2FzZSBab29tSW46CisgICAgICAgIG1fc2NhbGVTdGFjay5hcHBlbmQoU2NhbGVTdGFj
a0l0ZW0oY3VycmVudFNjYWxlLCBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpLngoKSkpOwor
ICAgICAgICBtX3pvb21PdXRTY2FsZSA9IGVuZEl0ZW1TY2FsZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBab29tQmFjazogeworICAgICAgICBTY2FsZVN0YWNrSXRlbSBsYXN0U2NhbGUgPSBt
X3NjYWxlU3RhY2sudGFrZUxhc3QoKTsKKyAgICAgICAgZW5kSXRlbVNjYWxlID0gbGFzdFNjYWxl
LnNjYWxlOworICAgICAgICBlbmRDU1NTY2FsZSA9IG1fdmlld3BvcnRDb250cm9sbGVyLT5jb252
ZXJ0RnJvbVZpZXdwb3J0KGxhc3RTY2FsZS5zY2FsZSk7CisgICAgICAgIC8vIFJlY2FsY3VsYXRl
IGVuZFBvc2l0aW9uIGFuZCBib3VuZCBpdCBhY2NvcmRpbmcgdG8gbmV3IHNjYWxlLgorICAgICAg
ICBlbmRQb3NpdGlvbi5zZXRZKGhvdHNwb3QueSgpICogZW5kQ1NTU2NhbGUgLSB2aWV3cG9ydEhv
dHNwb3QueSgpKTsKKyAgICAgICAgZW5kUG9zaXRpb24uc2V0WChsYXN0U2NhbGUueFBvc2l0aW9u
KTsKKyAgICAgICAgZW5kUG9zUmFuZ2UgPSBtX3ZpZXdwb3J0Q29udHJvbGxlci0+cG9zaXRpb25S
YW5nZUZvckNvbnRlbnRBdFNjYWxlKGVuZEl0ZW1TY2FsZSk7CisgICAgICAgIGVuZFBvc2l0aW9u
ID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQ
b3NSYW5nZS5ib3R0b21SaWdodCgpKTsKKyAgICAgICAgZW5kVmlzaWJsZUNvbnRlbnRSZWN0ID0g
UVJlY3RGKGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8g
ZW5kSXRlbVNjYWxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgWm9vbU91dDoK
KyAgICAgICAgLy8gVW5zdGFjayBhbGwgc2NhbGUtbGV2ZWxzIGRlZXBlciB0aGFuIHRoZSBuZXcg
bGV2ZWwsIHNvIGEgem9vbS1iYWNrIHdvbid0IGVuZCB1cCB6b29taW5nIGluLgorICAgICAgICB3
aGlsZSAoIW1fc2NhbGVTdGFjay5pc0VtcHR5KCkgJiYgbV9zY2FsZVN0YWNrLmxhc3QoKS5zY2Fs
ZSA+PSBlbmRJdGVtU2NhbGUpCisgICAgICAgICAgICBtX3NjYWxlU3RhY2sucmVtb3ZlTGFzdCgp
OworICAgICAgICBtX3pvb21PdXRTY2FsZSA9IGVuZEl0ZW1TY2FsZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBOb1pvb206CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGFuaW1hdGVD
b250ZW50UmVjdFZpc2libGUoZW5kVmlzaWJsZUNvbnRlbnRSZWN0KTsKK30KKworUVJlY3RGIFBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6bmVhcmVzdFZhbGlkVmlzaWJsZUNvbnRlbnRz
UmVjdCgpIGNvbnN0Cit7CisgICAgZmxvYXQgY3NzU2NhbGUgPSBtX3ZpZXdwb3J0Q29udHJvbGxl
ci0+Y29udmVydEZyb21WaWV3cG9ydChtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCkpOworICAg
IGZsb2F0IGVuZEl0ZW1TY2FsZSA9IG1fdmlld3BvcnRDb250cm9sbGVyLT5jb252ZXJ0VG9WaWV3
cG9ydChtX3ZpZXdwb3J0Q29udHJvbGxlci0+aW5uZXJCb3VuZGVkQ29udGVudHNTY2FsZShjc3NT
Y2FsZSkpOworCisgICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVt
LT5ib3VuZGluZ1JlY3QoKTsKKyAgICBRUG9pbnRGIHZpZXdwb3J0SG90c3BvdCA9IHZpZXdwb3J0
UmVjdC5jZW50ZXIoKTsKKyAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gbV92aWV3cG9ydEl0ZW0t
Pm1hcFRvV2ViQ29udGVudCh2aWV3cG9ydEhvdHNwb3QpICogZW5kSXRlbVNjYWxlIC0gdmlld3Bv
cnRIb3RzcG90OworCisgICAgRmxvYXRSZWN0IGVuZFBvc1JhbmdlID0gbV92aWV3cG9ydENvbnRy
b2xsZXItPnBvc2l0aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUpOworICAg
IGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS5taW5YTWluWUNvcm5lcigp
LCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UubWF4WE1heFlDb3JuZXIoKSk7CisKKyAgICBRUmVj
dEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3
cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKKworICAgIHJldHVybiBlbmRWaXNpYmxl
Q29udGVudFJlY3Q7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojpz
ZXRDb250ZW50c1Bvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uSW5WaWV3Q29vcmRp
bmF0ZXMpCit7CisgICAgUVBvaW50RiBuZXdQb3NpdGlvbihtX3BhZ2VJdGVtLT5wb3MoKSArIFFQ
b2ludEYocG9zaXRpb25JblZpZXdDb29yZGluYXRlcykpOworICAgIG1fdmlld3BvcnRJdGVtLT5z
ZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKKyAgICB1cGRhdGVWaWV3cG9ydCgpOworfQorCit2
b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6c2V0Q29udGVudHNTY2FsZShmbG9h
dCB2aWV3cG9ydFNjYWxlLCBib29sIGlzSW5pdGlhbFNjYWxlKQoreworICAgIGlmIChpc0luaXRp
YWxTY2FsZSkgeworICAgICAgICBtX3pvb21PdXRTY2FsZSA9IDA7CisgICAgICAgIG1fc2NhbGVT
dGFjay5jbGVhcigpOworICAgICAgICBzZXRDb250ZW50UmVjdFZpc2libGVQb3NpdGlvbkF0U2Nh
bGUoUVBvaW50RigpLCB2aWV3cG9ydFNjYWxlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2NhbGVD
b250ZW50KHZpZXdwb3J0U2NhbGUpOworCisgICAgdXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9p
ZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnNldENvbnRlbnRzUmVjdFRvTmVhcmVz
dFZhbGlkQm91bmRzKCkKK3sKKyAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKG1fdmll
d3BvcnRDb250cm9sbGVyKTsKKyAgICBmbG9hdCB2YWxpZENTU1NjYWxlID0gbV92aWV3cG9ydENv
bnRyb2xsZXItPmlubmVyQm91bmRlZENvbnRlbnRzU2NhbGUobV92aWV3cG9ydENvbnRyb2xsZXIt
PmNvbnZlcnRGcm9tVmlld3BvcnQobV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpKSk7CisgICAg
c2V0Q29udGVudFJlY3RWaXNpYmxlUG9zaXRpb25BdFNjYWxlKG5lYXJlc3RWYWxpZFZpc2libGVD
b250ZW50c1JlY3QoKS50b3BMZWZ0KCksIG1fdmlld3BvcnRDb250cm9sbGVyLT5jb252ZXJ0VG9W
aWV3cG9ydCh2YWxpZENTU1NjYWxlKSk7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxl
ckNsaWVudFF0OjpyZXF1ZXN0Vmlld3BvcnRVcGRhdGUoKQoreworICAgIHVwZGF0ZVZpZXdwb3J0
KCk7Cit9CisKK2Jvb2wgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjphbGxvd3NVc2Vy
U2NhbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlld3BvcnRDb250cm9sbGVyLT5hbGxv
d3NVc2VyU2NhbGluZygpOworfQorCitxcmVhbCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
UXQ6OmRldmljZVBpeGVsUmF0aW8oKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0Q29u
dHJvbGxlci0+ZGV2aWNlUGl4ZWxSYXRpbygpOworfQorCitxcmVhbCBQYWdlVmlld3BvcnRDb250
cm9sbGVyQ2xpZW50UXQ6Om1pbmltdW1Db250ZW50c1NjYWxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV92aWV3cG9ydENvbnRyb2xsZXItPm1pbmltdW1Db250ZW50c1NjYWxlKCk7Cit9CisKK3Fy
ZWFsIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6bWF4aW11bUNvbnRlbnRzU2NhbGUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0Q29udHJvbGxlci0+bWF4aW11bUNvbnRl
bnRzU2NhbGUoKTsKK30KKworcXJlYWwgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojpj
dXJyZW50Q29udGVudHNTY2FsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFnZUl0ZW0tPmNv
bnRlbnRzU2NhbGUoKTsKK30KKworUVNpemVGIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRR
dDo6Y29udGVudHNMYXlvdXRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3cG9ydENv
bnRyb2xsZXItPmNvbnRlbnRzTGF5b3V0U2l6ZSgpOworfQorCitib29sIFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRRdDo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV92aWV3cG9ydEl0ZW0tPmlzRmxpY2tpbmcoKTsKK30KKworYm9vbCBQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ZpZXdwb3J0Q29udHJvbGxlci0+aGFkVXNlckludGVyYWN0aW9uKCkgJiYgbV92aWV3
cG9ydEl0ZW0tPmlzRHJhZ2dpbmcoKTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50UXQ6OnBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50
NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7CisgICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4g
YXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgorICAgIEFTU0VSVChtX3ZpZXdwb3J0
Q29udHJvbGxlci0+aGFkVXNlckludGVyYWN0aW9uKCkpOworCisgICAgbV92aWV3cG9ydEl0ZW0t
PmhhbmRsZUZsaWNrYWJsZU1vdXNlUHJlc3MocG9zaXRpb24sIGV2ZW50VGltZXN0YW1wTWlsbGlz
KTsKKyAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBvc2l0aW9u
OworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6cGFuR2VzdHVyZVJl
cXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFt
cE1pbGxpcykKK3sKKyAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxpY2thYmxlTW91c2VNb3Zl
KHBvc2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9sYXN0UGluY2hDZW50ZXJJ
blZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKK30KKwordm9pZCBQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlv
biwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQoreworICAgIG1fdmlld3BvcnRJdGVtLT5o
YW5kbGVGbGlja2FibGVNb3VzZVJlbGVhc2UocG9zaXRpb24sIGV2ZW50VGltZXN0YW1wTWlsbGlz
KTsKKyAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBvc2l0aW9u
OworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6cGFuR2VzdHVyZUNh
bmNlbGxlZCgpCit7CisgICAgLy8gUmVzZXQgdGhlIHZlbG9jaXR5IHNhbXBsZXMgb2YgdGhlIGZs
aWNrYWJsZS4KKyAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgcmVjb2du
aXplciBpZiB3ZSBoYXZlIGEgcmVjb2duaXplZAorICAgIC8vIHBhbiBnZXN0dXJlIGFuZCByZWNl
aXZlIGEgdG91Y2ggZXZlbnQgd2l0aCBtdWx0aXBsZSB0b3VjaCBwb2ludHMKKyAgICAvLyAoaWUu
IHRyYW5zaXRpb24gdG8gYSBwaW5jaCBnZXN0dXJlKSBhcyBpdCBkb2VzIG5vdCBtb3ZlIHRoZSBj
b250ZW50CisgICAgLy8gYmFjayBpbnNpZGUgdmFsaWQgYm91bmRzLgorICAgIC8vIFdoZW4gdGhl
IHBpbmNoIGdlc3R1cmUgZW5kcywgdGhlIGNvbnRlbnQgaXMgcG9zaXRpb25lZCBhbmQgc2NhbGVk
CisgICAgLy8gYmFjayB0byB2YWxpZCBib3VuZGFyaWVzLgorICAgIG1fdmlld3BvcnRJdGVtLT5j
YW5jZWxGbGljaygpOworfQorCitib29sIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6
c2NhbGVBbmltYXRpb25BY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3NjYWxlQW5pbWF0
aW9uLT5zdGF0ZSgpID09IFFBYnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZzsKK30KKwordm9pZCBQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OmNhbmNlbFNjcm9sbEFuaW1hdGlvbigpCit7
CisgICAgaWYgKCFzY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gSWYgdGhlIHBhbiBnZXN0dXJlIHJlY29nbml6ZXIgcmVjZWl2ZXMgYSB0b3VjaCBiZWdp
biBldmVudAorICAgIC8vIGR1cmluZyBhbiBvbmdvaW5nIGtpbmV0aWMgc2Nyb2xsIGFuaW1hdGlv
biBvZiBhIHByZXZpb3VzCisgICAgLy8gcGFuIGdlc3R1cmUsIHRoZSBhbmltYXRpb24gaXMgc3Rv
cHBlZCBhbmQgdGhlIGNvbnRlbnQgaXMKKyAgICAvLyBpbW1lZGlhdGVseSBwb3NpdGlvbmVkIGJh
Y2sgdG8gdmFsaWQgYm91bmRhcmllcy4KKworICAgIG1fdmlld3BvcnRJdGVtLT5jYW5jZWxGbGlj
aygpOworICAgIHNldENvbnRlbnRzUmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKCk7Cit9CisKK3Zv
aWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjppbnRlcnJ1cHRTY2FsZUFuaW1hdGlv
bigpCit7CisgICAgLy8gVGhpcyBpbnRlcnJ1cHRzIHRoZSBzY2FsZSBhbmltYXRpb24gZXhhY3Rs
eSB3aGVyZSBpdCBpcywgZXZlbiBpZiBpdCBpcyBvdXQgb2YgYm91bmRzLgorICAgIG1fc2NhbGVB
bmltYXRpb24tPnN0b3AoKTsKK30KKworYm9vbCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
UXQ6OnBpbmNoR2VzdHVyZUFjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlld3BvcnRD
b250cm9sbGVyLT5oYWRVc2VySW50ZXJhY3Rpb24oKSAmJiAobV9waW5jaFN0YXJ0U2NhbGUgPiAw
KTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVy
ZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMp
Cit7CisgICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGlu
dGVyYWN0aW9uLgorICAgIEFTU0VSVChtX3ZpZXdwb3J0Q29udHJvbGxlci0+aGFkVXNlckludGVy
YWN0aW9uKCkpOworCisgICAgaWYgKCFtX3ZpZXdwb3J0Q29udHJvbGxlci0+YWxsb3dzVXNlclNj
YWxpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY2FsZVN0YWNrLmNsZWFyKCk7Cisg
ICAgbV96b29tT3V0U2NhbGUgPSAwLjA7CisKKyAgICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIucmVz
ZXQobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIobV92aWV3cG9ydENvbnRyb2xsZXIsIFZpZXdw
b3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKKworICAg
IG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcGluY2hDZW50ZXJJblZp
ZXdwb3J0Q29vcmRpbmF0ZXM7CisgICAgbV9waW5jaFN0YXJ0U2NhbGUgPSBtX3BhZ2VJdGVtLT5j
b250ZW50c1NjYWxlKCk7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0
OjpwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5W
aWV3cG9ydENvb3JkaW5hdGVzLCBxcmVhbCB0b3RhbFNjYWxlRmFjdG9yKQoreworICAgIEFTU0VS
VChtX3ZpZXdwb3J0Q29udHJvbGxlci0+aGFzU3VzcGVuZGVkQ29udGVudCgpKTsKKworICAgIGlm
ICghbV92aWV3cG9ydENvbnRyb2xsZXItPmFsbG93c1VzZXJTY2FsaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vICBDaGFuZ2VzIG9mIHRoZSBjZW50ZXIgcG9zaXRpb24gc2hvdWxkIG1v
dmUgdGhlIHBhZ2UgZXZlbiBpZiB0aGUgem9vbSBmYWN0b3IgZG9lcyBub3QgY2hhbmdlLgorICAg
IGNvbnN0IHFyZWFsIGNzc1NjYWxlID0gbV92aWV3cG9ydENvbnRyb2xsZXItPmNvbnZlcnRGcm9t
Vmlld3BvcnQobV9waW5jaFN0YXJ0U2NhbGUgKiB0b3RhbFNjYWxlRmFjdG9yKTsKKworICAgIC8v
IEFsbG93IHpvb21pbmcgb3V0IGJleW9uZCBtaW1pbXVtIHNjYWxlIG9uIHBhZ2VzIHRoYXQgZG8g
bm90IGV4cGxpY2l0bHkgZGlzYWxsb3cgaXQuCisgICAgY29uc3QgcXJlYWwgdGFyZ2V0SXRlbVNj
YWxlID0gbV92aWV3cG9ydENvbnRyb2xsZXItPmNvbnZlcnRUb1ZpZXdwb3J0KG1fdmlld3BvcnRD
b250cm9sbGVyLT5vdXRlckJvdW5kZWRDb250ZW50c1NjYWxlKGNzc1NjYWxlKSk7CisKKyAgICBz
Y2FsZUNvbnRlbnQodGFyZ2V0SXRlbVNjYWxlLCBtX3ZpZXdwb3J0SXRlbS0+bWFwVG9XZWJDb250
ZW50KHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzKSk7CisKKyAgICBjb25zdCBRUG9p
bnRGIHBvc2l0aW9uRGlmZiA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzIC0gbV9s
YXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7CisgICAgbV9sYXN0UGluY2hDZW50
ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRl
czsKKworICAgIG1fdmlld3BvcnRJdGVtLT5zZXRDb250ZW50UG9zKG1fdmlld3BvcnRJdGVtLT5j
b250ZW50UG9zKCkgLSBwb3NpdGlvbkRpZmYpOworCisgICAgLy8gSW5mb3JtIHRoZSB3ZWIgcHJv
Y2VzcyB0byByZW5kZXIgdGhlIGN1cnJlbnRseSB2aXNpYmxlIGFyZWEgd2l0aCBsb3ctcmVzb2x1
dGlvbiB0aWxlcyBub3QKKyAgICAvLyB0byBleHBvc2Ugd2hpdGUgdGlsZXMgZHVyaW5nIHBpbmNo
IGdlc3R1cmVzIGFuZCB0byBzaG93IGZpeGVkIHBvc2l0aW9uIGxheWVycyBjb3JyZWN0bHkuCisg
ICAgLy8gVGhlIGFjdHVhbCBzY2FsZSBpcyByZXN0b3JlZCBhZnRlciB0aGUgcGluY2ggZ2VzdHVy
ZSBlbmRzLgorICAgIHVwZGF0ZVZpZXdwb3J0KFFQb2ludEYoKSwgMSk7Cit9CisKK3ZvaWQgUGFn
ZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVFbmRlZCgpCit7CisgICAg
QVNTRVJUKG1fdmlld3BvcnRDb250cm9sbGVyLT5oYXNTdXNwZW5kZWRDb250ZW50KCkpOworCisg
ICAgaWYgKCFtX3ZpZXdwb3J0Q29udHJvbGxlci0+YWxsb3dzVXNlclNjYWxpbmcoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9waW5jaFN0YXJ0U2NhbGUgPSAtMTsKKworICAgIGFuaW1hdGVD
b250ZW50UmVjdFZpc2libGUobmVhcmVzdFZhbGlkVmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKKyAg
ICBtX3NjYWxlVXBkYXRlRGVmZXJyZXIucmVzZXQoKTsgLy8gQ2xlYXIgYWZ0ZXIgc3RhcnRpbmcg
cG90ZW50aWFsIGFuaW1hdGlvbiwgd2hpY2ggdGFrZXMgb3ZlciBkZWZlcnJpbmcuCit9CisKK3Zv
aWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQo
KQoreworICAgIG1fcGluY2hTdGFydFNjYWxlID0gLTE7CisgICAgbV9zY2FsZVVwZGF0ZURlZmVy
cmVyLnJlc2V0KCk7Cit9CisKK1FSZWN0RiBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6
OnZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdAoreworICAgIGNvbnN0IFFSZWN0RiB2aXNpYmxl
UmVjdChtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkuaW50ZXJzZWN0ZWQobV9wYWdlSXRl
bS0+Ym91bmRpbmdSZWN0KCkpKTsKKyAgICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPm1hcFJlY3RU
b1dlYkNvbnRlbnQodmlzaWJsZVJlY3QpOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRRdDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKCkKK3sKKyAgICAvLyBFbWl0IGZvciB0
ZXN0aW5nIHB1cnBvc2VzLCBzbyB0aGF0IGl0IGNhbiBiZSB2ZXJpZmllZCB0aGF0CisgICAgLy8g
d2UgZGlkbid0IGRvIHNjYWxlIGFkanVzdG1lbnQuCisgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+
ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+Y29udGVudHNTY2FsZUNvbW1pdHRlZCgpOworfQorCit2
b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6ZGlkQ2hhbmdlVmlzaWJsZUNvbnRl
bnRzKCkKK3sKKyAgICBxcmVhbCBzY2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsK
KworICAgIGlmIChzY2FsZSAhPSBtX2xhc3RDb21taXR0ZWRTY2FsZSkKKyAgICAgICAgZW1pdCBt
X3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+Y29udGVudHNTY2FsZUNvbW1p
dHRlZCgpOworICAgIG1fbGFzdENvbW1pdHRlZFNjYWxlID0gc2NhbGU7CisKKyAgICAvLyBFbnN1
cmUgdGhhdCB1cGRhdGVQYWludE5vZGUgaXMgYWx3YXlzIGNhbGxlZCBiZWZvcmUgcGFpbnRpbmcu
CisgICAgbV9wYWdlSXRlbS0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJv
bGxlckNsaWVudFF0OjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoKQoreworICAgIC8vIE1h
a2Ugc3VyZSB3ZSBhcHBseSB0aGUgbmV3IGluaXRpYWwgc2NhbGUgd2hlbiBkZWZlcnJpbmcgZW5k
cy4KKyAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKG1fdmlld3BvcnRDb250cm9sbGVy
KTsKKworICAgIGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPmRl
dmljZVBpeGVsUmF0aW9DaGFuZ2VkKCk7CisgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJp
bWVudGFsKCktPnRlc3QoKS0+dmlld3BvcnRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudFF0Ojp1cGRhdGVWaWV3cG9ydChjb25zdCBRUG9pbnRGJiB0cmFq
ZWN0b3J5LCBxcmVhbCBzY2FsZSkKK3sKKyAgICBGbG9hdFJlY3QgY3VycmVudFZpc2libGVSZWN0
KHZpc2libGVDb250ZW50c1JlY3QoKSk7CisgICAgZmxvYXQgdmlld3BvcnRTY2FsZSA9IChzY2Fs
ZSA8IDApID8gdmlld3BvcnRTY2FsZUZvclJlY3QoY3VycmVudFZpc2libGVSZWN0KSA6IHNjYWxl
OworICAgIG1fdmlld3BvcnRDb250cm9sbGVyLT5hZGp1c3RWaXNpYmxlQ29udGVudHNSZWN0KGN1
cnJlbnRWaXNpYmxlUmVjdCwgdmlld3BvcnRTY2FsZSwgdHJhamVjdG9yeSk7Cit9CisKK3ZvaWQg
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpzY2FsZUNvbnRlbnQocXJlYWwgaXRlbVNj
YWxlLCBjb25zdCBRUG9pbnRGJiBjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzKQoreworICAgIFFQb2lu
dEYgb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJD
b250ZW50KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOworICAgIG1fcGFnZUl0ZW0tPnNldENvbnRl
bnRzU2NhbGUoaXRlbVNjYWxlKTsKKyAgICBRUG9pbnRGIG5ld1BpbmNoQ2VudGVyT25WaWV3cG9y
dCA9IG1fdmlld3BvcnRJdGVtLT5tYXBGcm9tV2ViQ29udGVudChjZW50ZXJJbkNTU0Nvb3JkaW5h
dGVzKTsKKyAgICBtX3ZpZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyhtX3ZpZXdwb3J0SXRlbS0+
Y29udGVudFBvcygpICsgKG5ld1BpbmNoQ2VudGVyT25WaWV3cG9ydCAtIG9sZFBpbmNoQ2VudGVy
T25WaWV3cG9ydCkpOworfQorCitmbG9hdCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6
OnZpZXdwb3J0U2NhbGVGb3JSZWN0KGNvbnN0IFFSZWN0RiYgcmVjdCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmlld3BvcnRJdGVtLT53aWR0aCgpKSAvIHN0YXRp
Y19jYXN0PGZsb2F0PihyZWN0LndpZHRoKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2luY2x1ZGUgIm1vY19QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQuY3BwIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRRdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1BhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNm
NWZiN2IwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1Bh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5oCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmphbWluIFBvdWxhaW4gPGJl
bmphbWluQHdlYmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnRRdF9oCisjZGVmaW5lIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdF9oCisKKyNpbmNs
dWRlICJQYWdlVmlld3BvcnRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudC5oIgorI2luY2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8UVBvaW50Rj4K
KyNpbmNsdWRlIDxRU2NvcGVkUG9pbnRlcj4KKyNpbmNsdWRlIDxRVmFyaWFudD4KKyNpbmNsdWRl
IDxRVmFyaWFudEFuaW1hdGlvbj4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRUXVpY2tX
ZWJQYWdlOworY2xhc3MgUVF1aWNrV2ViVmlldzsKK2NsYXNzIFFSZWN0RjsKK1FUX0VORF9OQU1F
U1BBQ0UKKworY2xhc3MgUVdlYktpdFRlc3Q7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGlj
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoK
KworICAgIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdChRUXVpY2tXZWJWaWV3KiwgUVF1
aWNrV2ViUGFnZSopOworICAgIH5QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQoKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Bvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBv
c2l0aW9uSW5WaWV3Q29vcmRpbmF0ZXMpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Nj
YWxlKGZsb2F0IHZpZXdwb3J0U2NhbGUsIGJvb2wgaXNJbml0aWFsU2NhbGUpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1JlY3RUb05lYXJlc3RWYWxpZEJvdW5kcygpOworCisgICAgdmly
dHVhbCB2b2lkIHJlcXVlc3RWaWV3cG9ydFVwZGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIGRp
ZENoYW5nZUNvbnRlbnRzU2l6ZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaXNpYmxl
Q29udGVudHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVz
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFnZVZpZXdwb3J0Q29udHJvbGxlcihQYWdlVmll
d3BvcnRDb250cm9sbGVyKiBoYW5kbGVyKSB7IG1fdmlld3BvcnRDb250cm9sbGVyID0gaGFuZGxl
cjsgfQorCisgICAgLy8gQWRkaXRpb25hbCBtZXRob2RzIGN1cnJlbnRseSBvbmx5IHJlbGV2YW50
IGluIHRoZSBRUXVpY2sgY29udGV4dC4KKyAgICB2b2lkIHRvdWNoQmVnaW4oKTsKKyAgICB2b2lk
IHRvdWNoRW5kKCk7CisKKyAgICBib29sIHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0Owor
ICAgIHZvaWQgY2FuY2VsU2Nyb2xsQW5pbWF0aW9uKCk7CisKKyAgICBib29sIHBhbkdlc3R1cmVB
Y3RpdmUoKSBjb25zdDsKKyAgICB2b2lkIHBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYm
IHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQgcGFuR2Vz
dHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRp
bWVzdGFtcE1pbGxpcyk7CisgICAgdm9pZCBwYW5HZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYg
cG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgdm9pZCBwYW5HZXN0
dXJlQ2FuY2VsbGVkKCk7CisKKyAgICBib29sIHNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3Q7
CisgICAgdm9pZCBpbnRlcnJ1cHRTY2FsZUFuaW1hdGlvbigpOworCisgICAgYm9vbCBwaW5jaEdl
c3R1cmVBY3RpdmUoKSBjb25zdDsKKyAgICB2b2lkIHBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29uc3Qg
UVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpOworICAgIHZvaWQgcGlu
Y2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3Bv
cnRDb29yZGluYXRlcywgcXJlYWwgdG90YWxTY2FsZUZhY3Rvcik7CisgICAgdm9pZCBwaW5jaEdl
c3R1cmVFbmRlZCgpOworICAgIHZvaWQgcGluY2hHZXN0dXJlQ2FuY2VsbGVkKCk7CisKKyAgICB2
b2lkIHpvb21Ub0FyZWFHZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29u
c3QgUVJlY3RGJiB0YXJnZXRBcmVhKTsKKyAgICB2b2lkIGZvY3VzRWRpdGFibGVBcmVhKGNvbnN0
IFFSZWN0RiYgY2FyZXRBcmVhLCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpOworCitwcml2YXRl
IFFfU0xPVFM6CisgICAgLy8gUmVzcG9uZCB0byBjaGFuZ2VzIG9mIHBvc2l0aW9uIHRoYXQgYXJl
IG5vdCBkcml2ZW4gYnkgdXMuCisgICAgdm9pZCBwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpOwor
CisgICAgdm9pZCBzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246
OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKTsKKworICAgIHZvaWQgZmxpY2tNb3Zl
U3RhcnRlZCgpOyAvLyBDYWxsZWQgd2hlbiBwYW5uaW5nIHN0YXJ0cy4KKyAgICB2b2lkIGZsaWNr
TW92ZUVuZGVkKCk7IC8vICAgQ2FsbGVkIHdoZW4gcGFubmluZyAoKyBraW5ldGljIGFuaW1hdGlv
bikgZW5kcy4KKworcHJpdmF0ZToKKyAgICBjbGFzcyBTY2FsZUFuaW1hdGlvbiA6IHB1YmxpYyBR
VmFyaWFudEFuaW1hdGlvbiB7CisgICAgICAgIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRR
dCogbV9jb250cm9sbGVyQ2xpZW50OworICAgIHB1YmxpYzoKKyAgICAgICAgU2NhbGVBbmltYXRp
b24oUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0KiBwYXJlbnQpCisgICAgICAgICAgICA6
IFFWYXJpYW50QW5pbWF0aW9uKHBhcmVudCkKKyAgICAgICAgICAgICwgbV9jb250cm9sbGVyQ2xp
ZW50KHBhcmVudCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUN1
cnJlbnRWYWx1ZShjb25zdCBRVmFyaWFudCYpOworICAgIH07CisKKyAgICBzdHJ1Y3QgU2NhbGVT
dGFja0l0ZW0geworICAgICAgICBTY2FsZVN0YWNrSXRlbShxcmVhbCBzY2FsZSwgcXJlYWwgeFBv
c2l0aW9uKQorICAgICAgICAgICAgOiBzY2FsZShzY2FsZSkKKyAgICAgICAgICAgICwgeFBvc2l0
aW9uKHhQb3NpdGlvbikKKyAgICAgICAgeyB9CisKKyAgICAgICAgcXJlYWwgc2NhbGU7CisgICAg
ICAgIHFyZWFsIHhQb3NpdGlvbjsKKyAgICB9OworCisgICAgZnJpZW5kIGNsYXNzIFNjYWxlQW5p
bWF0aW9uOworICAgIGZyaWVuZCBjbGFzcyA6OlFXZWJLaXRUZXN0OworCisgICAgUGFnZVZpZXdw
b3J0Q29udHJvbGxlciogbV92aWV3cG9ydENvbnRyb2xsZXI7CisgICAgUVF1aWNrV2ViVmlldyog
Y29uc3QgbV92aWV3cG9ydEl0ZW07CisgICAgUVF1aWNrV2ViUGFnZSogY29uc3QgbV9wYWdlSXRl
bTsKKworICAgIGJvb2wgYWxsb3dzVXNlclNjYWxpbmcoKSBjb25zdDsKKyAgICBxcmVhbCBkZXZp
Y2VQaXhlbFJhdGlvKCkgY29uc3Q7CisgICAgcXJlYWwgbWluaW11bUNvbnRlbnRzU2NhbGUoKSBj
b25zdDsKKyAgICBxcmVhbCBtYXhpbXVtQ29udGVudHNTY2FsZSgpIGNvbnN0OworICAgIHFyZWFs
IGN1cnJlbnRDb250ZW50c1NjYWxlKCkgY29uc3Q7CisgICAgUVNpemVGIGNvbnRlbnRzTGF5b3V0
U2l6ZSgpIGNvbnN0OworCisgICAgZmxvYXQgdmlld3BvcnRTY2FsZUZvclJlY3QoY29uc3QgUVJl
Y3RGJikgY29uc3Q7CisgICAgUVJlY3RGIHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdDsKKyAg
ICBRUmVjdEYgbmVhcmVzdFZhbGlkVmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OworCisgICAg
dm9pZCB1cGRhdGVWaWV3cG9ydChjb25zdCBRUG9pbnRGJiB0cmFqZWN0b3J5ID0gUVBvaW50Rigp
LCBxcmVhbCBzY2FsZSA9IC0xKTsKKyAgICB2b2lkIHNldENvbnRlbnRSZWN0VmlzaWJsZVBvc2l0
aW9uQXRTY2FsZShjb25zdCBRUG9pbnRGJiBsb2NhdGlvbiwgcXJlYWwgaXRlbVNjYWxlKTsKKyAg
ICB2b2lkIGFuaW1hdGVDb250ZW50UmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBjb250ZW50UmVj
dCk7CisgICAgdm9pZCBzY2FsZUNvbnRlbnQocXJlYWwgaXRlbVNjYWxlLCBjb25zdCBRUG9pbnRG
JiBjZW50ZXJJbkNTU0Nvb3JkaW5hdGVzID0gUVBvaW50RigpKTsKKworICAgIFFTY29wZWRQb2lu
dGVyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fc2NhbGVVcGRhdGVEZWZlcnJlcjsKKyAgICBR
U2NvcGVkUG9pbnRlcjxWaWV3cG9ydFVwZGF0ZURlZmVycmVyPiBtX3Njcm9sbFVwZGF0ZURlZmVy
cmVyOworICAgIFFTY29wZWRQb2ludGVyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fdG91Y2hV
cGRhdGVEZWZlcnJlcjsKKyAgICBRU2NvcGVkUG9pbnRlcjxWaWV3cG9ydFVwZGF0ZURlZmVycmVy
PiBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyOworCisgICAgU2NhbGVBbmltYXRpb24qIG1fc2Nh
bGVBbmltYXRpb247CisgICAgUVBvaW50RiBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29y
ZGluYXRlczsKKyAgICBRUG9pbnRGIG1fbGFzdFNjcm9sbFBvc2l0aW9uOworICAgIHFyZWFsIG1f
cGluY2hTdGFydFNjYWxlOworICAgIHFyZWFsIG1fbGFzdENvbW1pdHRlZFNjYWxlOworICAgIHFy
ZWFsIG1fem9vbU91dFNjYWxlOworICAgIFFMaXN0PFNjYWxlU3RhY2tJdGVtPiBtX3NjYWxlU3Rh
Y2s7CisgICAgYm9vbCBtX2lnbm9yZVZpZXdwb3J0Q2hhbmdlczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25p
emVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVy
LmNwcAppbmRleCA5M2I2NDE1Li44YzU3Yzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwCkBAIC00MSw5ICs0MSw5IEBAIHZv
aWQgUXRHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKQogICAgIG1fc3RhdGUgPSBOb0dlc3R1cmU7
CiB9CiAKLVF0Vmlld3BvcnRIYW5kbGVyKiBRdEdlc3R1cmVSZWNvZ25pemVyOjp2aWV3cG9ydEhh
bmRsZXIoKQorUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0KiBRdEdlc3R1cmVSZWNvZ25p
emVyOjp2aWV3cG9ydENvbnRyb2xsZXIoKQogewotICAgIHJldHVybiBtX2V2ZW50SGFuZGxlci0+
dmlld3BvcnRIYW5kbGVyKCk7CisgICAgcmV0dXJuIG1fZXZlbnRIYW5kbGVyLT52aWV3cG9ydENv
bnRyb2xsZXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaAppbmRleCA2OGUwMzJmLi4x
MTVlNzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJl
UmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVS
ZWNvZ25pemVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNs
YXNzIFF0Vmlld3BvcnRIYW5kbGVyOworY2xhc3MgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dFF0OwogY2xhc3MgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOwogCiBjbGFzcyBRdEdlc3R1cmVSZWNv
Z25pemVyIHsKQEAgLTQ2LDcgKzQ2LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBHZXN0dXJlUmVj
b2duaXplZAogICAgIH0gbV9zdGF0ZTsKIAotICAgIFF0Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9y
dEhhbmRsZXIoKTsKKyAgICBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQqIHZpZXdwb3J0
Q29udHJvbGxlcigpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKaW5k
ZXggYmE5YzkwYS4uMGFhYTA2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlF0UGFuR2VzdHVyZVJlY29nbml6ZXIuaCIKIAot
I2luY2x1ZGUgIlF0Vmlld3BvcnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudFF0LmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAK
IG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMzgsNyArMzgsNyBAQCBRdFBhbkdlc3R1cmVSZWNvZ25p
emVyOjpRdFBhbkdlc3R1cmVSZWNvZ25pemVyKFF0V2ViUGFnZUV2ZW50SGFuZGxlciogZXZlbnRI
YW5kbAogCiBib29sIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZShjb25zdCBRVG91Y2hF
dmVudDo6VG91Y2hQb2ludCYgdG91Y2hQb2ludCwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlz
KQogewotICAgIGlmICghdmlld3BvcnRIYW5kbGVyKCkpCisgICAgaWYgKCF2aWV3cG9ydENvbnRy
b2xsZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9sYXN0UG9zaXRpb24gPSB0
b3VjaFBvaW50LnBvcygpOwpAQCAtNDgsNyArNDgsNyBAQCBib29sIFF0UGFuR2VzdHVyZVJlY29n
bml6ZXI6OnVwZGF0ZShjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91Y2hQb2ludCwg
cQogICAgIGNhc2UgTm9HZXN0dXJlOgogICAgICAgICBtX3N0YXRlID0gR2VzdHVyZVJlY29nbml0
aW9uU3RhcnRlZDsKICAgICAgICAgbV9maXJzdFNjcmVlblBvc2l0aW9uID0gdG91Y2hQb2ludC5z
Y3JlZW5Qb3MoKTsKLSAgICAgICAgdmlld3BvcnRIYW5kbGVyKCktPmNhbmNlbFNjcm9sbEFuaW1h
dGlvbigpOworICAgICAgICB2aWV3cG9ydENvbnRyb2xsZXIoKS0+Y2FuY2VsU2Nyb2xsQW5pbWF0
aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pdGlv
blN0YXJ0ZWQ6IHsKICAgICAgICAgLy8gVG8gc3RhcnQgdGhlIGdlc3R1cmUsIHRoZSBkZWx0YSBm
cm9tIHN0YXJ0IGluIHNjcmVlbiBjb29yZGluYXRlcwpAQCAtNTgsMTEgKzU4LDExIEBAIGJvb2wg
UXRQYW5HZXN0dXJlUmVjb2duaXplcjo6dXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBv
aW50JiB0b3VjaFBvaW50LCBxCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
bV9zdGF0ZSA9IEdlc3R1cmVSZWNvZ25pemVkOwotICAgICAgICB2aWV3cG9ydEhhbmRsZXIoKS0+
cGFuR2VzdHVyZVN0YXJ0ZWQodG91Y2hQb2ludC5wb3MoKSwgZXZlbnRUaW1lc3RhbXBNaWxsaXMp
OworICAgICAgICB2aWV3cG9ydENvbnRyb2xsZXIoKS0+cGFuR2VzdHVyZVN0YXJ0ZWQodG91Y2hQ
b2ludC5wb3MoKSwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplZDoKLSAgICAgICAgdmlld3BvcnRIYW5k
bGVyKCktPnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGlt
ZXN0YW1wTWlsbGlzKTsKKyAgICAgICAgdmlld3BvcnRDb250cm9sbGVyKCktPnBhbkdlc3R1cmVS
ZXF1ZXN0VXBkYXRlKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC03NSw4ICs3NSw4IEBAIHZvaWQgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6Zmlu
aXNoKGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiB0b3VjaFBvaW50LCBxCiAgICAgaWYg
KG1fc3RhdGUgPT0gTm9HZXN0dXJlKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQodmll
d3BvcnRIYW5kbGVyKCkpOwotICAgIHZpZXdwb3J0SGFuZGxlcigpLT5wYW5HZXN0dXJlRW5kZWQo
dG91Y2hQb2ludC5wb3MoKSwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIEFTU0VSVCh2aWV3
cG9ydENvbnRyb2xsZXIoKSk7CisgICAgdmlld3BvcnRDb250cm9sbGVyKCktPnBhbkdlc3R1cmVF
bmRlZCh0b3VjaFBvaW50LnBvcygpLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CiAgICAgcmVzZXQo
KTsKIH0KIApAQCAtODUsOCArODUsOCBAQCB2b2lkIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OmNh
bmNlbCgpCiAgICAgaWYgKG1fc3RhdGUgPT0gTm9HZXN0dXJlKQogICAgICAgICByZXR1cm47CiAK
LSAgICB2aWV3cG9ydEhhbmRsZXIoKS0+cGFuR2VzdHVyZUVuZGVkKG1fbGFzdFBvc2l0aW9uLCBt
X2xhc3RFdmVudFRpbWVzdGFtcE1pbGxpcyk7Ci0gICAgdmlld3BvcnRIYW5kbGVyKCktPnBhbkdl
c3R1cmVDYW5jZWxsZWQoKTsKKyAgICB2aWV3cG9ydENvbnRyb2xsZXIoKS0+cGFuR2VzdHVyZUVu
ZGVkKG1fbGFzdFBvc2l0aW9uLCBtX2xhc3RFdmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgdmll
d3BvcnRDb250cm9sbGVyKCktPnBhbkdlc3R1cmVDYW5jZWxsZWQoKTsKICAgICByZXNldCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1
cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2Vz
dHVyZVJlY29nbml6ZXIuY3BwCmluZGV4IDc1ZDRkMjMuLmExMDM2N2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIu
Y3BwCkBAIC0yNiw3ICsyNiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUXRQ
aW5jaEdlc3R1cmVSZWNvZ25pemVyLmgiCiAKLSNpbmNsdWRlICJRdFZpZXdwb3J0SGFuZGxlci5o
IgorCisjaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0LmgiCiAjaW5jbHVk
ZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSA8UXRDb3JlL1FMaW5lRj4KIApA
QCAtNDcsNyArNDgsNyBAQCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OlF0UGluY2hHZXN0dXJl
UmVjb2duaXplcihRdFdlYlBhZ2VFdmVudEhhbmRsZXIqIGV2ZW50SAogCiBib29sIFF0UGluY2hH
ZXN0dXJlUmVjb2duaXplcjo6dXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiBw
b2ludDEsIGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiBwb2ludDIpCiB7Ci0gICAgQVNT
RVJUKHZpZXdwb3J0SGFuZGxlcigpKTsKKyAgICBBU1NFUlQodmlld3BvcnRDb250cm9sbGVyKCkp
OwogICAgIGNvbnN0IHFyZWFsIGN1cnJlbnRGaW5nZXJEaXN0YW5jZSA9IFFMaW5lRihwb2ludDEu
c2NyZWVuUG9zKCksIHBvaW50Mi5zY3JlZW5Qb3MoKSkubGVuZ3RoKCk7CiAgICAgc3dpdGNoICht
X3N0YXRlKSB7CiAgICAgY2FzZSBOb0dlc3R1cmU6CkBAIC01OSw3ICs2MCw3IEBAIGJvb2wgUXRQ
aW5jaEdlc3R1cmVSZWNvZ25pemVyOjp1cGRhdGUoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9p
bnQmIHBvaW50MSwgY29uCiAgICAgICAgIGlmIChwaW5jaERpc3RhbmNlIDwgcGluY2hJbml0aWFs
VHJpZ2dlckRpc3RhbmNlVGhyZXNob2xkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBtX3N0YXRlID0gR2VzdHVyZVJlY29nbml6ZWQ7Ci0gICAgICAgIHZpZXdwb3J0SGFuZGxl
cigpLT5waW5jaEdlc3R1cmVTdGFydGVkKGNvbXB1dGVQaW5jaENlbnRlcihwb2ludDEsIHBvaW50
MikpOworICAgICAgICB2aWV3cG9ydENvbnRyb2xsZXIoKS0+cGluY2hHZXN0dXJlU3RhcnRlZChj
b21wdXRlUGluY2hDZW50ZXIocG9pbnQxLCBwb2ludDIpKTsKIAogICAgICAgICAvLyBXZSByZXNl
dCB0aGUgaW5pdGlhbCBzcGFuIGRpc3RhbmNlIHRvIHRoZSBjdXJyZW50IGRpc3RhbmNlIG9mIHRo
ZQogICAgICAgICAvLyB0b3VjaCBwb2ludHMgaW4gb3JkZXIgdG8gYXZvaWQgdGhlIGp1bXAgY2F1
c2VkIGJ5IHRoZSBldmVudHMgd2hpY2gKQEAgLTcxLDcgKzcyLDcgQEAgYm9vbCBRdFBpbmNoR2Vz
dHVyZVJlY29nbml6ZXI6OnVwZGF0ZShjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgcG9p
bnQxLCBjb24KICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVkOgogICAgICAgICBjb25zdCBxcmVh
bCB0b3RhbFNjYWxlRmFjdG9yID0gY3VycmVudEZpbmdlckRpc3RhbmNlIC8gbV9pbml0aWFsRmlu
Z2VyRGlzdGFuY2U7CiAgICAgICAgIGNvbnN0IFFQb2ludEYgdG91Y2hDZW50ZXJJblZpZXdDb29y
ZGluYXRlcyA9IGNvbXB1dGVQaW5jaENlbnRlcihwb2ludDEsIHBvaW50Mik7Ci0gICAgICAgIHZp
ZXdwb3J0SGFuZGxlcigpLT5waW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKHRvdWNoQ2VudGVySW5W
aWV3Q29vcmRpbmF0ZXMsIHRvdGFsU2NhbGVGYWN0b3IpOworICAgICAgICB2aWV3cG9ydENvbnRy
b2xsZXIoKS0+cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZSh0b3VjaENlbnRlckluVmlld0Nvb3Jk
aW5hdGVzLCB0b3RhbFNjYWxlRmFjdG9yKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTg1LDggKzg2LDggQEAgdm9pZCBRdFBpbmNoR2VzdHVyZVJlY29n
bml6ZXI6OmZpbmlzaCgpCiAgICAgaWYgKG1fc3RhdGUgPT0gTm9HZXN0dXJlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBBU1NFUlQodmlld3BvcnRIYW5kbGVyKCkpOwotICAgIHZpZXdwb3J0SGFu
ZGxlcigpLT5waW5jaEdlc3R1cmVFbmRlZCgpOworICAgIEFTU0VSVCh2aWV3cG9ydENvbnRyb2xs
ZXIoKSk7CisgICAgdmlld3BvcnRDb250cm9sbGVyKCktPnBpbmNoR2VzdHVyZUVuZGVkKCk7CiAg
ICAgcmVzZXQoKTsKIH0KIApAQCAtOTUsOCArOTYsOCBAQCB2b2lkIFF0UGluY2hHZXN0dXJlUmVj
b2duaXplcjo6Y2FuY2VsKCkKICAgICBpZiAobV9zdGF0ZSA9PSBOb0dlc3R1cmUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIEFTU0VSVCh2aWV3cG9ydEhhbmRsZXIoKSk7Ci0gICAgdmlld3BvcnRI
YW5kbGVyKCktPnBpbmNoR2VzdHVyZUNhbmNlbGxlZCgpOworICAgIEFTU0VSVCh2aWV3cG9ydENv
bnRyb2xsZXIoKSk7CisgICAgdmlld3BvcnRDb250cm9sbGVyKCktPnBpbmNoR2VzdHVyZUNhbmNl
bGxlZCgpOwogICAgIHJlc2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA1YzNiZmFmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZp
ZXdwb3J0SGFuZGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NjAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMSBCZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1p
bkB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlF0Vmlld3Bv
cnRIYW5kbGVyLmgiCi0KLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQ
YWdlUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgInFxdWlj
a3dlYnBhZ2VfcC5oIgotI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgotI2luY2x1ZGUgInF3
ZWJraXR0ZXN0X3AuaCIKLSNpbmNsdWRlIDxRUG9pbnRGPgotI2luY2x1ZGUgPFFUcmFuc2Zvcm0+
Ci0jaW5jbHVkZSA8UVdoZWVsRXZlbnQ+Ci0jaW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0
YXRpYyBjb25zdCBpbnQga1NjYWxlQW5pbWF0aW9uRHVyYXRpb25NaWxsaXMgPSAyNTA7Ci0KLS8v
IFVQREFURSBERUZFUlJJTkcgKFNVU1BFTkQvUkVTVU1FKQotLy8gPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0vLwotLy8gV2hlbiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb250ZW50
LCBlaXRoZXIgYnkgYW5pbWF0aW5nIG9yIGJ5IHRoZSBoYW5kIG9mIHRoZSB1c2VyLAotLy8gaXQg
aXMgaW1wb3J0YW50IHRvIGVuc3VyZSBzbW9vdGggYW5pbWF0aW9ucyBvZiBhdCBsZWFzdCA2MGZw
cyBpbiBvcmRlciB0byBnaXZlIGEKLS8vIGdvb2QgdXNlciBleHBlcmllbmNlLgotLy8KLS8vIElu
IG9yZGVyIHRvIGRvIHRoaXMgd2UgbmVlZCB0byBnZXQgcmlkIG9mIHVua25vd24gZmFjdG9ycy4g
VGhlc2UgaW5jbHVkZSBkZXZpY2UKLS8vIHNlbnNvcnMgKGdlb2xvY2F0aW9uLCBvcmllbnRhdGlv
biB1cGRhdGVzIGV0YyksIENTUzMgYW5pbWF0aW9ucywgSmF2YVNjcmlwdAotLy8gZXhlY3R1dGlv
biwgc3ViIHJlc291cmNlIGxvYWRzIGV0Yy4gV2UgZG8gdGhpcyBieSBlbWl0dGluZyBzdXNwZW5k
IGFuZCByZXN1bWUKLS8vIHNpZ25hbHMsIHdoaWNoIGFyZSB0aGVuIGhhbmRsZWQgYnkgdGhlIHZp
ZXdwb3J0IGFuZCBwcm9wYWdhdGVzIHRvIHRoZSByaWdodCBwbGFjZS4KLS8vCi0vLyBGb3IgdGhp
cyByZWFzb24gdGhlIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQgbXVzdCBiZSB1c2VkIHdo
ZW4gd2UgaW50ZXJhY3QKLS8vIG9yIGFuaW1hdGUgdGhlIGNvbnRlbnQuCi0vLwotLy8gSXQgc2hv
dWxkIGJlIG5vdGVkIHRoYXQgd2hlbiB3ZSB1cGRhdGUgY29udGVudCBwcm9wZXJ0aWVzLCB3ZSBt
aWdodCByZWNlaXZlIG5vdGlmeQotLy8gc2lnbmFscyBzZW5kIG15IHRoZSBjb250ZW50IGl0ZW0g
aXRzZWxmLCBhbmQgY2FyZSBzaG91bGQgYmUgdGFrZW4gdG8gbm90IGFjdCBvbgotLy8gdGhlc2Ug
dW5jb25kaXRpb25hbGx5LiBBbiBleGFtcGxlIG9mIHRoaXMgaXMgdGhlIHBpbmNoIHpvb20sIHdo
aWNoIGNoYW5nZXMgdGhlCi0vLyBwb3NpdGlvbiBhbmQgd2lsbCB0aHVzIHJlc3VsdCBpbiBhIFFR
dWlja1dlYlBhZ2U6Omdlb21ldHJ5Q2hhbmdlZCgpIHNpZ25hbCBnZXR0aW5nCi0vLyBlbWl0dGVk
LgotLy8KLS8vIElmIHNvbWV0aGluZyBzaG91bGQgb25seSBiZSBleGVjdXRlZCBkdXJpbmcgdXBk
YXRlIGRlZmVycmluZywgaXQgaXMgcG9zc2libGUgdG8KLS8vIGNoZWNrIGZvciB0aGF0IHVzaW5n
IEFTU0VSVChtX3N1c3BlbmRDb3VudCkuCi0KLWNsYXNzIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIg
ewotcHVibGljOgotICAgIGVudW0gU3VzcGVuZENvbnRlbnRGbGFnIHsgRGVmZXJVcGRhdGUsIERl
ZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQgfTsKLSAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVy
KFF0Vmlld3BvcnRIYW5kbGVyKiBoYW5kbGVyLCBTdXNwZW5kQ29udGVudEZsYWcgc3VzcGVuZENv
bnRlbnRGbGFnID0gRGVmZXJVcGRhdGUpCi0gICAgICAgIDogaGFuZGxlcihoYW5kbGVyKQotICAg
IHsKLSAgICAgICAgaGFuZGxlci0+bV9zdXNwZW5kQ291bnQrKzsKLQotICAgICAgICAvLyBUaGVy
ZSBpcyBubyBuZWVkIHRvIHN1c3BlbmQgY29udGVudCBmb3IgaW1tZWRpYXRlIHVwZGF0ZXMKLSAg
ICAgICAgLy8gb25seSBkdXJpbmcgYW5pbWF0aW9ucyBvciBsb25nZXIgZ2VzdHVyZXMuCi0gICAg
ICAgIGlmIChzdXNwZW5kQ29udGVudEZsYWcgPT0gRGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVu
dCkKLSAgICAgICAgICAgIGhhbmRsZXItPnN1c3BlbmRQYWdlQ29udGVudCgpOwotICAgIH0KLQot
ICAgIH5WaWV3cG9ydFVwZGF0ZURlZmVycmVyKCkKLSAgICB7Ci0gICAgICAgIC8vIFdlIGFyZSBj
YWxsaW5nIHNldEluaXRpYWxTY2FsZUlmTmVlZGVkKCkgaGVyZSBhcyBpdCByZXF1aXJlcyBhCi0g
ICAgICAgIC8vIHBvc3NpdGl2ZSBtX3N1c3BlbmRDb3VudCBkdWUgdG8gdGhlIGFzc2VydCBpbiBz
ZXRQYWdlSXRlbVJlY3RWaXNpYmxlKCkuCi0gICAgICAgIGlmIChoYW5kbGVyLT5tX3N1c3BlbmRD
b3VudCA9PSAxKQotICAgICAgICAgICAgaGFuZGxlci0+c2V0SW5pdGlhbFNjYWxlSWZOZWVkZWQo
KTsKLQotICAgICAgICBpZiAoLS0oaGFuZGxlci0+bV9zdXNwZW5kQ291bnQpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGhhbmRsZXItPnJlc3VtZVBhZ2VDb250ZW50KCk7Ci0KLSAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGlsZXMgYWxsIGFyb3VuZCB0aGUgdmlld3BvcnQgd2ls
bCBiZSByZXF1ZXN0ZWQuCi0gICAgICAgIGhhbmRsZXItPmluZm9ybVZpc2libGVDb250ZW50Q2hh
bmdlKFFQb2ludEYoKSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFF0Vmlld3BvcnRIYW5kbGVy
KiBjb25zdCBoYW5kbGVyOwotfTsKLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6c3VzcGVuZFBh
Z2VDb250ZW50KCkKLXsKLSAgICBpZiAobV9oYXNTdXNwZW5kZWRDb250ZW50KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2hhc1N1c3BlbmRlZENvbnRlbnQgPSB0cnVlOwotICAgIG1fd2ViUGFn
ZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLX0KLQotdm9p
ZCBRdFZpZXdwb3J0SGFuZGxlcjo6cmVzdW1lUGFnZUNvbnRlbnQoKQotewotICAgIGlmICghbV9o
YXNTdXNwZW5kZWRDb250ZW50KQotICAgICAgICByZXR1cm47Ci0gICAgbV9oYXNTdXNwZW5kZWRD
b250ZW50ID0gZmFsc2U7Ci0gICAgbV93ZWJQYWdlUHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zKCk7Ci19Ci0KLS8vIEEgZmxvYXRpbmcgcG9pbnQgY29tcGFyZSB3aXRo
IGFic29sdXRlIGVycm9yLgotc3RhdGljIGlubGluZSBib29sIGZ1enp5Q29tcGFyZShxcmVhbCBh
LCBxcmVhbCBiLCBxcmVhbCBlcHNpbG9uKQotewotICAgIHJldHVybiBxQWJzKGEgLSBiKSA8IGVw
c2lsb247Ci19Ci0KLWlubGluZSBxcmVhbCBRdFZpZXdwb3J0SGFuZGxlcjo6Y3NzU2NhbGVGcm9t
SXRlbShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGl0ZW1TY2FsZSAvIG1f
ZGV2aWNlUGl4ZWxSYXRpbzsKLX0KLQotaW5saW5lIHFyZWFsIFF0Vmlld3BvcnRIYW5kbGVyOjpp
dGVtU2NhbGVGcm9tQ1NTKHFyZWFsIGNzc1NjYWxlKSBjb25zdAotewotICAgIHJldHVybiBjc3NT
Y2FsZSAqIG1fZGV2aWNlUGl4ZWxSYXRpbzsKLX0KLQotaW5saW5lIHFyZWFsIFF0Vmlld3BvcnRI
YW5kbGVyOjppdGVtQ29vcmRGcm9tQ1NTKHFyZWFsIHZhbHVlKSBjb25zdAotewotICAgIHJldHVy
biB2YWx1ZSAqIG1fZGV2aWNlUGl4ZWxSYXRpbzsKLX0KLQotc3RhdGljIGlubGluZSBRUG9pbnRG
IGJvdW5kUG9zaXRpb24oY29uc3QgUVBvaW50RiBtaW5Qb3NpdGlvbiwgY29uc3QgUVBvaW50RiYg
cG9zaXRpb24sIGNvbnN0IFFQb2ludEYmIG1heFBvc2l0aW9uKQotewotICAgIHJldHVybiBRUG9p
bnRGKHFCb3VuZChtaW5Qb3NpdGlvbi54KCksIHBvc2l0aW9uLngoKSwgbWF4UG9zaXRpb24ueCgp
KSwKLSAgICAgICAgICAgICAgICAgICBxQm91bmQobWluUG9zaXRpb24ueSgpLCBwb3NpdGlvbi55
KCksIG1heFBvc2l0aW9uLnkoKSkpOwotfQotCi1pbmxpbmUgUVJlY3RGIFF0Vmlld3BvcnRIYW5k
bGVyOjppdGVtUmVjdEZyb21DU1MoY29uc3QgUVJlY3RGJiBjc3NSZWN0KSBjb25zdAotewotICAg
IFFSZWN0RiBpdGVtUmVjdDsKLQotICAgIGl0ZW1SZWN0LnNldFgoaXRlbUNvb3JkRnJvbUNTUyhj
c3NSZWN0LngoKSkpOwotICAgIGl0ZW1SZWN0LnNldFkoaXRlbUNvb3JkRnJvbUNTUyhjc3NSZWN0
LnkoKSkpOwotICAgIGl0ZW1SZWN0LnNldFdpZHRoKGl0ZW1Db29yZEZyb21DU1MoY3NzUmVjdC53
aWR0aCgpKSk7Ci0gICAgaXRlbVJlY3Quc2V0SGVpZ2h0KGl0ZW1Db29yZEZyb21DU1MoY3NzUmVj
dC5oZWlnaHQoKSkpOwotCi0gICAgcmV0dXJuIGl0ZW1SZWN0OwotfQotCi1RdFZpZXdwb3J0SGFu
ZGxlcjo6UXRWaWV3cG9ydEhhbmRsZXIoV2ViS2l0OjpXZWJQYWdlUHJveHkqIHByb3h5LCBRUXVp
Y2tXZWJWaWV3KiB2aWV3cG9ydEl0ZW0sIFFRdWlja1dlYlBhZ2UqIHBhZ2VJdGVtKQotICAgIDog
bV93ZWJQYWdlUHJveHkocHJveHkpCi0gICAgLCBtX3ZpZXdwb3J0SXRlbSh2aWV3cG9ydEl0ZW0p
Ci0gICAgLCBtX3BhZ2VJdGVtKHBhZ2VJdGVtKQotICAgICwgbV9hbGxvd3NVc2VyU2NhbGluZyhm
YWxzZSkKLSAgICAsIG1fbWluaW11bVNjYWxlKDEpCi0gICAgLCBtX21heGltdW1TY2FsZSgxKQot
ICAgICwgbV9kZXZpY2VQaXhlbFJhdGlvKDEpCi0gICAgLCBtX3N1c3BlbmRDb3VudCgwKQotICAg
ICwgbV9oYXNTdXNwZW5kZWRDb250ZW50KGZhbHNlKQotICAgICwgbV9oYWRVc2VySW50ZXJhY3Rp
b24oZmFsc2UpCi0gICAgLCBtX3NjYWxlQW5pbWF0aW9uKG5ldyBTY2FsZUFuaW1hdGlvbih0aGlz
KSkKLSAgICAsIG1fcGluY2hTdGFydFNjYWxlKC0xKQotICAgICwgbV9sYXN0Q29tbWl0dGVkU2Nh
bGUoLTEpCi0gICAgLCBtX3pvb21PdXRTY2FsZSgwLjApCi17Ci0gICAgbV9zY2FsZUFuaW1hdGlv
bi0+c2V0RHVyYXRpb24oa1NjYWxlQW5pbWF0aW9uRHVyYXRpb25NaWxsaXMpOwotICAgIG1fc2Nh
bGVBbmltYXRpb24tPnNldEVhc2luZ0N1cnZlKFFFYXNpbmdDdXJ2ZTo6T3V0Q3ViaWMpOwotCi0g
ICAgLy8gSW5pdGlhbGl6aW5nIFZpZXdwb3J0IFJhdyBBdHRyaWJ1dGVzIHRvIGF2b2lkIHJhbmRv
bSBuZWdhdGl2ZSBzY2FsZSBmYWN0b3JzCi0gICAgLy8gaWYgdGhlcmUgaXMgYSByYWNlIGNvbmRp
dGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBsYXlvdXQgYW5kIHNldHRpbmcgdGhlIHZpZXdwb3J0IGF0
dHJpYnV0ZXMgZm9yIHRoZSBmaXJzdCB0aW1lLgotICAgIG1fcmF3QXR0cmlidXRlcy5kZXZpY2VQ
aXhlbFJhdGlvID0gbV9kZXZpY2VQaXhlbFJhdGlvOwotICAgIG1fcmF3QXR0cmlidXRlcy5pbml0
aWFsU2NhbGUgPSAxOwotICAgIG1fcmF3QXR0cmlidXRlcy5taW5pbXVtU2NhbGUgPSBtX21pbmlt
dW1TY2FsZTsKLSAgICBtX3Jhd0F0dHJpYnV0ZXMubWF4aW11bVNjYWxlID0gbV9tYXhpbXVtU2Nh
bGU7Ci0gICAgbV9yYXdBdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZSA9IG1fYWxsb3dzVXNlclNjYWxp
bmc7Ci0KLSAgICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRTdGFydGVk
KCkpLCBTTE9UKGZsaWNrTW92ZVN0YXJ0ZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLSAg
ICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRFbmRlZCgpKSwgU0xPVChm
bGlja01vdmVFbmRlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOwotCi0gICAgY29ubmVjdCht
X3NjYWxlQW5pbWF0aW9uLCBTSUdOQUwodmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksCi0gICAgICAg
ICAgICBTTE9UKHNjYWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50KSksIFF0OjpEaXJl
Y3RDb25uZWN0aW9uKTsKLSAgICBjb25uZWN0KG1fc2NhbGVBbmltYXRpb24sIFNJR05BTChzdGF0
ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpT
dGF0ZSkpLAotICAgICAgICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJz
dHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKSksIFF0OjpE
aXJlY3RDb25uZWN0aW9uKTsKLX0KLQotUXRWaWV3cG9ydEhhbmRsZXI6On5RdFZpZXdwb3J0SGFu
ZGxlcigpCi17Ci19Ci0KLXFyZWFsIFF0Vmlld3BvcnRIYW5kbGVyOjppbm5lckJvdW5kZWRDU1NT
Y2FsZShxcmVhbCBjc3NTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gcUJvdW5kKG1fbWluaW11
bVNjYWxlLCBjc3NTY2FsZSwgbV9tYXhpbXVtU2NhbGUpOwotfQotCi1xcmVhbCBRdFZpZXdwb3J0
SGFuZGxlcjo6b3V0ZXJCb3VuZGVkQ1NTU2NhbGUocXJlYWwgY3NzU2NhbGUpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fYWxsb3dzVXNlclNjYWxpbmcpIHsKLSAgICAgICAgLy8gQm91bmRlZCBieSBbMC4x
LCAxMC4wXSBsaWtlIHRoZSB2aWV3cG9ydCBtZXRhIGNvZGUgaW4gV2ViQ29yZS4KLSAgICAgICAg
cXJlYWwgaGFyZE1pbiA9IHFNYXg8cXJlYWw+KDAuMSwgcXJlYWwoMC41KSAqIG1fbWluaW11bVNj
YWxlKTsKLSAgICAgICAgcXJlYWwgaGFyZE1heCA9IHFNaW48cXJlYWw+KDEwLCBxcmVhbCgyLjAp
ICogbV9tYXhpbXVtU2NhbGUpOwotICAgICAgICByZXR1cm4gcUJvdW5kKGhhcmRNaW4sIGNzc1Nj
YWxlLCBoYXJkTWF4KTsKLSAgICB9Ci0gICAgcmV0dXJuIGlubmVyQm91bmRlZENTU1NjYWxlKGNz
c1NjYWxlKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6c2V0SW5pdGlhbFNjYWxlSWZO
ZWVkZWQoKQotewotICAgIGlmIChtX3Jhd0F0dHJpYnV0ZXMubGF5b3V0U2l6ZS5pc0VtcHR5KCkg
fHwgbV9yYXdBdHRyaWJ1dGVzLmluaXRpYWxTY2FsZSA8IDApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fem9vbU91dFNjYWxlID0gMC4wOwotICAgIG1fc2NhbGVTdGFjay5jbGVhcigpOwotCi0g
ICAgbV9oYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKLQotICAgIC8vIFdlIG11c3Qgbm90IGFu
aW1hdGUgaGVyZSBhcyB0aGUgbmV3IGNvbnRlbnRzIHNpemUgbWlnaHQgYmUgdmVyeSBkaWZmZXJl
bnQKLSAgICAvLyB0aGFuIHRoZSBjdXJyZW50IG9uZS4KLSAgICBzZXRQYWdlSXRlbVJlY3RWaXNp
YmxlKGluaXRpYWxSZWN0KCkpOwotCi0gICAgbV9yYXdBdHRyaWJ1dGVzLmluaXRpYWxTY2FsZSA9
IC0xOyAvLyBNYXJrIHVzZWQuCi19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnZpZXdwb3J0
QXR0cmlidXRlc0NoYW5nZWQoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJiBuZXdB
dHRyaWJ1dGVzKQotewotICAgIGlmIChuZXdBdHRyaWJ1dGVzLmxheW91dFNpemUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jhd0F0dHJpYnV0ZXMgPSBuZXdBdHRyaWJ1dGVz
OwotICAgIFdlYkNvcmU6OnJlc3RyaWN0U2NhbGVGYWN0b3JUb0luaXRpYWxTY2FsZUlmTm90VXNl
clNjYWxhYmxlKG1fcmF3QXR0cmlidXRlcyk7Ci0KLSAgICBpZiAoIXFGdXp6eUNvbXBhcmUobV9k
ZXZpY2VQaXhlbFJhdGlvLCBzdGF0aWNfY2FzdDxxcmVhbD4obV9yYXdBdHRyaWJ1dGVzLmRldmlj
ZVBpeGVsUmF0aW8pKSkgewotICAgICAgICBtX2RldmljZVBpeGVsUmF0aW8gPSBtX3Jhd0F0dHJp
YnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbzsgLy8gU2hvdWxkIHJldHVybiB2YWx1ZSBmcm9tIHRoZSB3
ZWJQYWdlUHJveHkuCi0gICAgICAgIGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgp
LT50ZXN0KCktPmRldmljZVBpeGVsUmF0aW9DaGFuZ2VkKCk7Ci0gICAgfQotCi0gICAgbV9hbGxv
d3NVc2VyU2NhbGluZyA9ICEhbV9yYXdBdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZTsKLSAgICBtX21p
bmltdW1TY2FsZSA9IG1fcmF3QXR0cmlidXRlcy5taW5pbXVtU2NhbGU7Ci0gICAgbV9tYXhpbXVt
U2NhbGUgPSBtX3Jhd0F0dHJpYnV0ZXMubWF4aW11bVNjYWxlOwotCi0gICAgLy8gTWFrZSBzdXJl
IHdlIGFwcGx5IHRoZSBuZXcgaW5pdGlhbCBzY2FsZSB3aGVuIGRlZmVycmluZyBlbmRzLgotICAg
IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQodGhpcyk7Ci0KLSAgICBlbWl0IG1fdmlld3Bv
cnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT52aWV3cG9ydENoYW5nZWQoKTsKLX0KLQot
dm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGFnZUNvbnRlbnRzU2l6ZUNoYW5nZWQoY29uc3QgUVNp
emUmIG5ld1NpemUsIGNvbnN0IFFTaXplJiB2aWV3cG9ydFNpemUpCi17Ci0gICAgaWYgKHZpZXdw
b3J0U2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IG1pbmltdW1T
Y2FsZSA9IFdlYkNvcmU6OmNvbXB1dGVNaW5pbXVtU2NhbGVGYWN0b3JGb3JDb250ZW50Q29udGFp
bmVkKG1fcmF3QXR0cmlidXRlcywgdmlld3BvcnRTaXplLCBuZXdTaXplKTsKLQotICAgIGlmICgh
cUZ1enp5Q29tcGFyZShtaW5pbXVtU2NhbGUsIG1fcmF3QXR0cmlidXRlcy5taW5pbXVtU2NhbGUp
KSB7Ci0gICAgICAgIG1fbWluaW11bVNjYWxlID0gbWluaW11bVNjYWxlOwotICAgICAgICBlbWl0
IG1fdmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT52aWV3cG9ydENoYW5nZWQo
KTsKLQotICAgICAgICBpZiAoIW1faGFkVXNlckludGVyYWN0aW9uICYmICFtX2hhc1N1c3BlbmRl
ZENvbnRlbnQpIHsKLSAgICAgICAgICAgIC8vIEVtaXRzIGNvbnRlbnRzU2NhbGVDaGFuZ2VkKCk7
Ci0gICAgICAgICAgICBzZXRDU1NTY2FsZShtaW5pbXVtU2NhbGUpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgLy8gRW1pdCBmb3IgdGVzdGluZyBwdXJwb3Nlcywgc28gdGhhdCBpdCBjYW4gYmUg
dmVyaWZpZWQgdGhhdAotICAgIC8vIHdlIGRpZG4ndCBkbyBzY2FsZSBhZGp1c3RtZW50LgotICAg
IGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPmNvbnRlbnRzU2Nh
bGVDb21taXR0ZWQoKTsKLQotICAgIGlmICghbV9oYXNTdXNwZW5kZWRDb250ZW50KSB7Ci0gICAg
ICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQodGhpcyk7Ci0gICAgICAgIHNldFBhZ2VJ
dGVtUmVjdFZpc2libGUobmVhcmVzdFZhbGlkQm91bmRzKCkpOwotICAgIH0KLX0KLQotdm9pZCBR
dFZpZXdwb3J0SGFuZGxlcjo6c2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmIGl0
ZW1SZWN0KQotewotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9zdXNwZW5kQ291bnQsCi0gICAg
ICAgICJzZXRQYWdlSXRlbVJlY3RWaXNpYmxlIGhhcyB0byBiZSBndWFyZGVkIHVzaW5nIGEgVmll
d3BvcnRVcGRhdGVEZWZlcnJlci4iKTsKLQotICAgIGlmIChpdGVtUmVjdC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHFyZWFsIGl0ZW1TY2FsZSA9IG1fdmlld3BvcnRJdGVtLT53
aWR0aCgpIC8gaXRlbVJlY3Qud2lkdGgoKTsKLQotICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRz
U2NhbGUoaXRlbVNjYWxlKTsKLQotICAgIC8vIFRvIGFuaW1hdGUgdGhlIHBvc2l0aW9uIHRvZ2V0
aGVyIHdpdGggdGhlIHNjYWxlIHdlIG11bHRpcGx5IHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBjdXJy
ZW50IHNjYWxlCi0gICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgcGFnZSBwb3NpdGlvbiAoZGlzcGxh
Y2VtZW50IG9uIHRoZSBmbGlja2FibGUgY29udGVudEl0ZW0gYmVjYXVzZSBvZiBhZGRpdGlvbmFs
IGl0ZW1zKS4KLSAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uKG1fcGFnZUl0ZW0tPnBvcygpICsgKGl0
ZW1SZWN0LnRvcExlZnQoKSAqIGl0ZW1TY2FsZSkpOwotCi0gICAgbV92aWV3cG9ydEl0ZW0tPnNl
dENvbnRlbnRQb3MobmV3UG9zaXRpb24pOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjph
bmltYXRlUGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmIGl0ZW1SZWN0KQotewotICAg
IEFTU0VSVChtX3NjYWxlQW5pbWF0aW9uLT5zdGF0ZSgpID09IFFBYnN0cmFjdEFuaW1hdGlvbjo6
U3RvcHBlZCk7Ci0KLSAgICBBU1NFUlQoIXNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKTsKLSAgICBp
ZiAoc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFFSZWN0
RiBjdXJyZW50UGFnZUl0ZW1SZWN0VmlzaWJsZSA9IG1fdmlld3BvcnRJdGVtLT5tYXBSZWN0VG9X
ZWJDb250ZW50KG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKSk7Ci0gICAgaWYgKGl0ZW1S
ZWN0ID09IGN1cnJlbnRQYWdlSXRlbVJlY3RWaXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRTdGFydFZhbHVlKGN1cnJlbnRQYWdlSXRlbVJlY3RWaXNp
YmxlKTsKLSAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRFbmRWYWx1ZShpdGVtUmVjdCk7Ci0KLSAg
ICBtX3NjYWxlQW5pbWF0aW9uLT5zdGFydCgpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVy
OjpmbGlja01vdmVTdGFydGVkKCkKLXsKLSAgICBRX0FTU0VSVChtX3ZpZXdwb3J0SXRlbS0+aXNN
b3ZpbmcoKSk7Ci0gICAgbV9zY3JvbGxVcGRhdGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3
cG9ydFVwZGF0ZURlZmVycmVyKHRoaXMsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBk
YXRlQW5kU3VzcGVuZENvbnRlbnQpKTsKLQotICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gbV92
aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKTsKLSAgICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBT
SUdOQUwoY29udGVudFhDaGFuZ2VkKCkpLCBTTE9UKHBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkp
KTsKLSAgICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwoY29udGVudFlDaGFuZ2VkKCkp
LCBTTE9UKHBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkpKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0
SGFuZGxlcjo6ZmxpY2tNb3ZlRW5kZWQoKQotewotICAgIFFfQVNTRVJUKCFtX3ZpZXdwb3J0SXRl
bS0+aXNNb3ZpbmcoKSk7Ci0gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBlbmQg
b2YgdGhlIHBhbiBvciBwYW4ga2luZXRpYyBhbmltYXRpb24uCi0gICAgbV9zY3JvbGxVcGRhdGVE
ZWZlcnJlci5jbGVhcigpOwotCi0gICAgbV9sYXN0U2Nyb2xsUG9zaXRpb24gPSBRUG9pbnRGKCk7
Ci0gICAgZGlzY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRYQ2hhbmdlZCgp
KSwgdGhpcywgU0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7Ci0gICAgZGlzY29ubmVj
dChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgdGhpcywgU0xPVChw
YWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6
OnBhZ2VJdGVtUG9zaXRpb25DaGFuZ2VkKCkKLXsKLSAgICBRUG9pbnRGIG5ld1Bvc2l0aW9uID0g
bV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKTsKLQotICAgIGluZm9ybVZpc2libGVDb250ZW50
Q2hhbmdlKG1fbGFzdFNjcm9sbFBvc2l0aW9uIC0gbmV3UG9zaXRpb24pOwotCi0gICAgbV9sYXN0
U2Nyb2xsUG9zaXRpb24gPSBuZXdQb3NpdGlvbjsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxl
cjo6cGFnZUNvbnRlbnRQb3NpdGlvblJlcXVlc3RlZChjb25zdCBRUG9pbnQmIGNzc1Bvc2l0aW9u
KQotewotICAgIC8vIElnbm9yZSB0aGUgcmVxdWVzdCBpZiBzdXNwZW5kZWQuIENhbiBvbmx5IGhh
cHBlbiBkdWUgdG8gZGVsYXkgaW4gZXZlbnQgZGVsaXZlcnkuCi0gICAgaWYgKG1fc3VzcGVuZENv
dW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBxcmVhbCBlbmRJdGVtU2NhbGUgPSBtX3BhZ2VJ
dGVtLT5jb250ZW50c1NjYWxlKCk7IC8vIFN0YXkgYXQgc2FtZSBzY2FsZS4KLQotICAgIFFSZWN0
RiBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShlbmRJdGVt
U2NhbGUpOwotICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1Jh
bmdlLnRvcExlZnQoKSwgY3NzUG9zaXRpb24gKiBlbmRJdGVtU2NhbGUsIGVuZFBvc1JhbmdlLmJv
dHRvbVJpZ2h0KCkpOwotCi0gICAgUVJlY3RGIGVuZFZpc2libGVDb250ZW50UmVjdChlbmRQb3Np
dGlvbiAvIGVuZEl0ZW1TY2FsZSwgbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNpemUo
KSAvIGVuZEl0ZW1TY2FsZSk7Ci0KLSAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKHRo
aXMpOwotICAgIHNldFBhZ2VJdGVtUmVjdFZpc2libGUoZW5kVmlzaWJsZUNvbnRlbnRSZWN0KTsK
LX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6c2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQo
UUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSBuZXdTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpT
dGF0ZSAvKm9sZFN0YXRlKi8pCi17Ci0gICAgc3dpdGNoIChuZXdTdGF0ZSkgewotICAgIGNhc2Ug
UUFic3RyYWN0QW5pbWF0aW9uOjpSdW5uaW5nOgotICAgICAgICBtX3ZpZXdwb3J0SXRlbS0+Y2Fu
Y2VsRmxpY2soKTsKLSAgICAgICAgQVNTRVJUKCFtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyKTsK
LSAgICAgICAgbV9hbmltYXRpb25VcGRhdGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9y
dFVwZGF0ZURlZmVycmVyKHRoaXMsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRl
QW5kU3VzcGVuZENvbnRlbnQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRQWJzdHJhY3RB
bmltYXRpb246OlN0b3BwZWQ6Ci0gICAgICAgIG1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIuY2xl
YXIoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUFuaW1hdGlvblZhbHVlQ2hhbmdl
ZChRVmFyaWFudCB2YWx1ZSkKLXsKLSAgICAvLyBSZXNldHRpbmcgdGhlIGVuZCB2YWx1ZSwgdGhl
IGVhc2luZyBjdXJ2ZSBvciB0aGUgZHVyYXRpb24gb2YgdGhlIHNjYWxlIGFuaW1hdGlvbgotICAg
IC8vIHRyaWdnZXJzIGEgcmVjYWxjdWxhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGludGVydmFsLiBU
aGlzIG1pZ2h0IGNoYW5nZSB0aGUgY3VycmVudAotICAgIC8vIHZhbHVlIG9mIHRoZSBhbmltYXRl
ZCBwcm9wZXJ0eS4KLSAgICAvLyBNYWtlIHN1cmUgd2Ugb25seSBhY3Qgb24gYW5pbWF0aW9uIHZh
bHVlIGNoYW5nZXMgaWYgdGhlIGFuaW1hdGlvbiBpcyBhY3RpdmUuCi0gICAgaWYgKCFzY2FsZUFu
aW1hdGlvbkFjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXRQYWdlSXRlbVJlY3RW
aXNpYmxlKHZhbHVlLnRvUmVjdEYoKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnRv
dWNoQmVnaW4oKQotewotICAgIG1faGFkVXNlckludGVyYWN0aW9uID0gdHJ1ZTsKLQotICAgIC8v
IFByZXZlbnRzIHJlc3VtaW5nIHRoZSBwYWdlIGJldHdlZW4gdGhlIHVzZXIncyBmbGlja3Mgb2Yg
dGhlIHBhZ2Ugd2hpbGUgdGhlIGFuaW1hdGlvbiBpcyBydW5uaW5nLgotICAgIGlmIChzY3JvbGxB
bmltYXRpb25BY3RpdmUoKSkKLSAgICAgICAgbV90b3VjaFVwZGF0ZURlZmVycmVyID0gYWRvcHRQ
dHIobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3BvcnRVcGRhdGVEZWZlcnJl
cjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOwotfQotCi12b2lkIFF0Vmlld3BvcnRI
YW5kbGVyOjp0b3VjaEVuZCgpCi17Ci0gICAgbV90b3VjaFVwZGF0ZURlZmVycmVyLmNsZWFyKCk7
Ci19Ci0KLVFSZWN0RiBRdFZpZXdwb3J0SGFuZGxlcjo6Y29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0
ZW1BdFNjYWxlKHFyZWFsIGl0ZW1TY2FsZSkgY29uc3QKLXsKLSAgICBjb25zdCBRU2l6ZUYgY29u
dGVudEl0ZW1TaXplID0gbV9wYWdlSXRlbS0+Y29udGVudHNTaXplKCkgKiBpdGVtU2NhbGU7Ci0g
ICAgY29uc3QgUVNpemVGIHZpZXdwb3J0SXRlbVNpemUgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRp
bmdSZWN0KCkuc2l6ZSgpOwotCi0gICAgY29uc3QgcXJlYWwgaG9yaXpvbnRhbFJhbmdlID0gY29u
dGVudEl0ZW1TaXplLndpZHRoKCkgLSB2aWV3cG9ydEl0ZW1TaXplLndpZHRoKCk7Ci0gICAgY29u
c3QgcXJlYWwgdmVydGljYWxSYW5nZSA9IGNvbnRlbnRJdGVtU2l6ZS5oZWlnaHQoKSAtIHZpZXdw
b3J0SXRlbVNpemUuaGVpZ2h0KCk7Ci0KLSAgICByZXR1cm4gUVJlY3RGKFFQb2ludEYoMCwgMCks
IFFTaXplRihob3Jpem9udGFsUmFuZ2UsIHZlcnRpY2FsUmFuZ2UpKTsKLX0KLQotdm9pZCBRdFZp
ZXdwb3J0SGFuZGxlcjo6Zm9jdXNFZGl0YWJsZUFyZWEoY29uc3QgUVJlY3RGJiBjYXJldEFyZWEs
IGNvbnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSkKLXsKLSAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBl
biBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCi0gICAgQVNTRVJUKG1faGFkVXNl
ckludGVyYWN0aW9uKTsKLQotICAgIFFSZWN0RiBlbmRBcmVhID0gaXRlbVJlY3RGcm9tQ1NTKHRh
cmdldEFyZWEpOwotCi0gICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gaXRlbVNjYWxlRnJvbUNTUyhp
bm5lckJvdW5kZWRDU1NTY2FsZSgyLjApKTsKLSAgICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0
ID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpOwotCi0gICAgcXJlYWwgeDsKLSAgICBj
b25zdCBxcmVhbCBib3JkZXJPZmZzZXQgPSAxMDsKLSAgICBpZiAoKGVuZEFyZWEud2lkdGgoKSAr
IGJvcmRlck9mZnNldCkgKiBlbmRJdGVtU2NhbGUgPD0gdmlld3BvcnRSZWN0LndpZHRoKCkpIHsK
LSAgICAgICAgLy8gQ2VudGVyIHRoZSBpbnB1dCBmaWVsZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB2
aWV3LCBpZiBpdCBpcyBzbWFsbGVyIHRoYW4KLSAgICAgICAgLy8gdGhlIHZpZXcgYXQgdGhlIHNj
YWxlIHRhcmdldC4KLSAgICAgICAgeCA9IHZpZXdwb3J0UmVjdC5jZW50ZXIoKS54KCkgLSBlbmRB
cmVhLndpZHRoKCkgKiBlbmRJdGVtU2NhbGUgLyAyLjA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gRW5zdXJlIHRoYXQgdGhlIGNhcmV0IGFsd2F5cyBoYXMgYm9yZGVyT2Zmc2V0IGNvbnRlbnRz
IHBpeGVscyB0byB0aGUgcmlnaHQKLSAgICAgICAgLy8gb2YgaXQsIGFuZCBzZWNvbmRhcmlseSAo
aWYgcG9zc2libGUpLCB0aGF0IHRoZSBhcmVhIGhhcyBib3JkZXJPZmZzZXQKLSAgICAgICAgLy8g
Y29udGVudHMgcGl4ZWxzIHRvIHRoZSBsZWZ0IG9mIGl0LgotICAgICAgICBxcmVhbCBjYXJldE9m
ZnNldCA9IGl0ZW1Db29yZEZyb21DU1MoY2FyZXRBcmVhLngoKSkgLSBlbmRBcmVhLngoKTsKLSAg
ICAgICAgeCA9IHFNaW4odmlld3BvcnRSZWN0LndpZHRoKCkgLSAoY2FyZXRPZmZzZXQgKyBib3Jk
ZXJPZmZzZXQpICogZW5kSXRlbVNjYWxlLCBib3JkZXJPZmZzZXQgKiBlbmRJdGVtU2NhbGUpOwot
ICAgIH0KLQotICAgIGNvbnN0IFFQb2ludEYgaG90c3BvdCA9IFFQb2ludEYoZW5kQXJlYS54KCks
IGVuZEFyZWEuY2VudGVyKCkueSgpKTsKLSAgICBjb25zdCBRUG9pbnRGIHZpZXdwb3J0SG90c3Bv
dCA9IFFQb2ludEYoeCwgLyogRklYTUU6IHZpc2libGVDZW50ZXIgKi8gdmlld3BvcnRSZWN0LmNl
bnRlcigpLnkoKSk7Ci0KLSAgICBRUG9pbnRGIGVuZFBvc2l0aW9uID0gaG90c3BvdCAqIGVuZEl0
ZW1TY2FsZSAtIHZpZXdwb3J0SG90c3BvdDsKLSAgICBRUmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21w
dXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKLQotICAgIGVuZFBv
c2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9u
LCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgpKTsKLQotICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29u
dGVudFJlY3QoZW5kUG9zaXRpb24gLyBlbmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkg
LyBlbmRJdGVtU2NhbGUpOwotCi0gICAgYW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoZW5kVmlz
aWJsZUNvbnRlbnRSZWN0KTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6em9vbVRvQXJl
YUdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiB0b3VjaFBvaW50LCBjb25zdCBRUmVjdEYmIHRh
cmdldEFyZWEpCi17Ci0gICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2Yg
YSB1c2VyIGludGVyYWN0aW9uLgotICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7Ci0K
LSAgICBpZiAoIXRhcmdldEFyZWEuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9zdXNwZW5kQ291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGludCBtYXJn
aW4gPSAxMDsgLy8gV2Ugd2FudCBhdCBsZWFzdCBhIGxpdHRsZSBiaXQgb2YgbWFyZ2luLgotICAg
IFFSZWN0RiBlbmRBcmVhID0gaXRlbVJlY3RGcm9tQ1NTKHRhcmdldEFyZWEuYWRqdXN0ZWQoLW1h
cmdpbiwgLW1hcmdpbiwgbWFyZ2luLCBtYXJnaW4pKTsKLQotICAgIGNvbnN0IFFSZWN0RiB2aWV3
cG9ydFJlY3QgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCk7Ci0KLSAgICBxcmVhbCB0
YXJnZXRDU1NTY2FsZSA9IHZpZXdwb3J0UmVjdC5zaXplKCkud2lkdGgoKSAvIGVuZEFyZWEuc2l6
ZSgpLndpZHRoKCk7Ci0gICAgcXJlYWwgZW5kQ1NTU2NhbGUgPSBpbm5lckJvdW5kZWRDU1NTY2Fs
ZShxTWluKHRhcmdldENTU1NjYWxlLCBxcmVhbCgyLjUpKSk7Ci0gICAgcXJlYWwgZW5kSXRlbVNj
YWxlID0gaXRlbVNjYWxlRnJvbUNTUyhlbmRDU1NTY2FsZSk7Ci0gICAgcXJlYWwgY3VycmVudFNj
YWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOwotCi0gICAgLy8gV2Ugd2FudCB0byBl
bmQgdXAgd2l0aCB0aGUgdGFyZ2V0IGFyZWEgZmlsbGluZyB0aGUgd2hvbGUgd2lkdGggb2YgdGhl
IHZpZXdwb3J0IChpZiBwb3NzaWJsZSksCi0gICAgLy8gYW5kIGNlbnRyYWxpemVkIHZlcnRpY2Fs
bHkgd2hlcmUgdGhlIHVzZXIgcmVxdWVzdGVkIHpvb20uIFRodXMgb3VyIGhvdHNwb3QgaXMgdGhl
IGNlbnRlciBvZgotICAgIC8vIHRoZSB0YXJnZXRBcmVhIHgtd2lzZSBhbmQgdGhlIHJlcXVlc3Rl
ZCB6b29tIHBvc2l0aW9uLCB5LXdpc2UuCi0gICAgY29uc3QgUVBvaW50RiBob3RzcG90ID0gUVBv
aW50RihlbmRBcmVhLmNlbnRlcigpLngoKSwgaXRlbUNvb3JkRnJvbUNTUyh0b3VjaFBvaW50Lnko
KSkpOwotICAgIGNvbnN0IFFQb2ludEYgdmlld3BvcnRIb3RzcG90ID0gdmlld3BvcnRSZWN0LmNl
bnRlcigpOwotCi0gICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGhvdHNwb3QgKiBlbmRDU1NTY2Fs
ZSAtIHZpZXdwb3J0SG90c3BvdDsKLQotICAgIFFSZWN0RiBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQ
b3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShlbmRJdGVtU2NhbGUpOwotICAgIGVuZFBvc2l0aW9u
ID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQ
b3NSYW5nZS5ib3R0b21SaWdodCgpKTsKLQotICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJl
Y3QoZW5kUG9zaXRpb24gLyBlbmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJ
dGVtU2NhbGUpOwotCi0gICAgZW51bSB7IFpvb21JbiwgWm9vbUJhY2ssIFpvb21PdXQsIE5vWm9v
bSB9IHpvb21BY3Rpb24gPSBab29tSW47Ci0KLSAgICBpZiAoIW1fc2NhbGVTdGFjay5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gWm9vbSBiYWNrIG91dCBpZiBhdHRlbXB0aW5nIHRvIHNjYWxlIHRv
IHRoZSBzYW1lIGN1cnJlbnQgc2NhbGUsIG9yCi0gICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gY29u
dGludWUgc2NhbGluZyBvdXQgZnJvbSB0aGUgaW5uZXIgbW9zdCBsZXZlbC4KLSAgICAgICAgLy8g
VXNlIGZ1enp5IGNvbXBhcmUgd2l0aCBhIGZpeGVkIGVycm9yIHRvIGJlIGFibGUgdG8gZGVhbCB3
aXRoIGxhcmdpc2ggZGlmZmVyZW5jZXMgZHVlIHRvIHBpeGVsIHJvdW5kaW5nLgotICAgICAgICBp
ZiAoZnV6enlDb21wYXJlKGVuZEl0ZW1TY2FsZSwgY3VycmVudFNjYWxlLCAwLjAxKSkgewotICAg
ICAgICAgICAgLy8gSWYgbW92aW5nIHRoZSB2aWV3cG9ydCB3b3VsZCBleHBvc2UgbW9yZSBvZiB0
aGUgdGFyZ2V0UmVjdCBhbmQgbW92ZSBhdCBsZWFzdCA0MCBwaXhlbHMsIHVwZGF0ZSBwb3NpdGlv
biBidXQgZG8gbm90IHNjYWxlIG91dC4KLSAgICAgICAgICAgIFFSZWN0RiBjdXJyZW50Q29udGVu
dFJlY3QobV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKSAvIGN1cnJlbnRTY2FsZSwgdmlld3Bv
cnRSZWN0LnNpemUoKSAvIGN1cnJlbnRTY2FsZSk7Ci0gICAgICAgICAgICBRUmVjdEYgdGFyZ2V0
SW50ZXJzZWN0aW9uID0gZW5kVmlzaWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdGVkKHRhcmdldEFy
ZWEpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29udGVudFJlY3QuY29udGFpbnModGFyZ2V0
SW50ZXJzZWN0aW9uKSAmJiAocUFicyhlbmRWaXNpYmxlQ29udGVudFJlY3QudG9wKCkgLSBjdXJy
ZW50Q29udGVudFJlY3QudG9wKCkpID49IDQwIHx8IHFBYnMoZW5kVmlzaWJsZUNvbnRlbnRSZWN0
LmxlZnQoKSAtIGN1cnJlbnRDb250ZW50UmVjdC5sZWZ0KCkpID49IDQwKSkKLSAgICAgICAgICAg
ICAgICB6b29tQWN0aW9uID0gTm9ab29tOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHpvb21BY3Rpb24gPSBab29tQmFjazsKLSAgICAgICAgfSBlbHNlIGlmIChmdXp6eUNvbXBh
cmUoZW5kSXRlbVNjYWxlLCBtX3pvb21PdXRTY2FsZSwgMC4wMSkpCi0gICAgICAgICAgICB6b29t
QWN0aW9uID0gWm9vbUJhY2s7Ci0gICAgICAgIGVsc2UgaWYgKGVuZEl0ZW1TY2FsZSA8IGN1cnJl
bnRTY2FsZSkKLSAgICAgICAgICAgIHpvb21BY3Rpb24gPSBab29tT3V0OwotICAgIH0KLQotICAg
IHN3aXRjaCAoem9vbUFjdGlvbikgewotICAgIGNhc2UgWm9vbUluOgotICAgICAgICBtX3NjYWxl
U3RhY2suYXBwZW5kKFNjYWxlU3RhY2tJdGVtKGN1cnJlbnRTY2FsZSwgbV92aWV3cG9ydEl0ZW0t
PmNvbnRlbnRQb3MoKS54KCkpKTsKLSAgICAgICAgbV96b29tT3V0U2NhbGUgPSBlbmRJdGVtU2Nh
bGU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWm9vbUJhY2s6IHsKLSAgICAgICAgU2NhbGVT
dGFja0l0ZW0gbGFzdFNjYWxlID0gbV9zY2FsZVN0YWNrLnRha2VMYXN0KCk7Ci0gICAgICAgIGVu
ZEl0ZW1TY2FsZSA9IGxhc3RTY2FsZS5zY2FsZTsKLSAgICAgICAgZW5kQ1NTU2NhbGUgPSBjc3NT
Y2FsZUZyb21JdGVtKGxhc3RTY2FsZS5zY2FsZSk7Ci0gICAgICAgIC8vIFJlY2FsY3VsYXRlIGVu
ZFBvc2l0aW9uIGFuZCBib3VuZCBpdCBhY2NvcmRpbmcgdG8gbmV3IHNjYWxlLgotICAgICAgICBl
bmRQb3NpdGlvbi5zZXRZKGhvdHNwb3QueSgpICogZW5kQ1NTU2NhbGUgLSB2aWV3cG9ydEhvdHNw
b3QueSgpKTsKLSAgICAgICAgZW5kUG9zaXRpb24uc2V0WChsYXN0U2NhbGUueFBvc2l0aW9uKTsK
LSAgICAgICAgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUo
ZW5kSXRlbVNjYWxlKTsKLSAgICAgICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBv
c1JhbmdlLnRvcExlZnQoKSwgZW5kUG9zaXRpb24sIGVuZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkp
OwotICAgICAgICBlbmRWaXNpYmxlQ29udGVudFJlY3QgPSBRUmVjdEYoZW5kUG9zaXRpb24gLyBl
bmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBab29tT3V0OgotICAgICAgICAvLyBVbnN0YWNrIGFs
bCBzY2FsZS1sZXZlbHMgZGVlcGVyIHRoYW4gdGhlIG5ldyBsZXZlbCwgc28gYSB6b29tLWJhY2sg
d29uJ3QgZW5kIHVwIHpvb21pbmcgaW4uCi0gICAgICAgIHdoaWxlICghbV9zY2FsZVN0YWNrLmlz
RW1wdHkoKSAmJiBtX3NjYWxlU3RhY2subGFzdCgpLnNjYWxlID49IGVuZEl0ZW1TY2FsZSkKLSAg
ICAgICAgICAgIG1fc2NhbGVTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIG1fem9vbU91dFNj
YWxlID0gZW5kSXRlbVNjYWxlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5vWm9vbToKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgYW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUoZW5k
VmlzaWJsZUNvbnRlbnRSZWN0KTsKLX0KLQotUVJlY3RGIFF0Vmlld3BvcnRIYW5kbGVyOjppbml0
aWFsUmVjdCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2Nh
bGUgPiAwKTsKLQotICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IGl0ZW1TY2FsZUZyb21DU1MoaW5u
ZXJCb3VuZGVkQ1NTU2NhbGUobV9yYXdBdHRyaWJ1dGVzLmluaXRpYWxTY2FsZSkpOwotICAgIGNv
bnN0IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCk7
Ci0gICAgUVJlY3RGIGVuZFZpc2libGVDb250ZW50UmVjdChRUG9pbnRGKDAsIDApLCB2aWV3cG9y
dFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKLQotICAgIHJldHVybiBlbmRWaXNpYmxlQ29u
dGVudFJlY3Q7Ci19Ci0KLVFSZWN0RiBRdFZpZXdwb3J0SGFuZGxlcjo6bmVhcmVzdFZhbGlkQm91
bmRzKCkgY29uc3QKLXsKLSAgICBxcmVhbCBlbmRJdGVtU2NhbGUgPSBpdGVtU2NhbGVGcm9tQ1NT
KGlubmVyQm91bmRlZENTU1NjYWxlKGN1cnJlbnRDU1NTY2FsZSgpKSk7Ci0KLSAgICBjb25zdCBR
UmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpOwotICAg
IFFQb2ludEYgdmlld3BvcnRIb3RzcG90ID0gdmlld3BvcnRSZWN0LmNlbnRlcigpOwotCi0gICAg
UVBvaW50RiBlbmRQb3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5tYXBUb1dlYkNvbnRlbnQodmll
d3BvcnRIb3RzcG90KSAqIGVuZEl0ZW1TY2FsZSAtIHZpZXdwb3J0SG90c3BvdDsKLQotICAgIFFS
ZWN0RiBlbmRQb3NSYW5nZSA9IGNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShlbmRJ
dGVtU2NhbGUpOwotICAgIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50
b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgpKTsKLQotICAg
IFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5kUG9zaXRpb24gLyBlbmRJdGVtU2NhbGUs
IHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOwotCi0gICAgcmV0dXJuIGVuZFZp
c2libGVDb250ZW50UmVjdDsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6c2V0Q1NTU2Nh
bGUocXJlYWwgc2NhbGUpCi17Ci0gICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlz
KTsKLQotICAgIHFyZWFsIG5ld1NjYWxlID0gaW5uZXJCb3VuZGVkQ1NTU2NhbGUoc2NhbGUpOwot
ICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2NhbGUoaXRlbVNjYWxlRnJvbUNTUyhuZXdTY2Fs
ZSkpOwotfQotCi1xcmVhbCBRdFZpZXdwb3J0SGFuZGxlcjo6Y3VycmVudENTU1NjYWxlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gY3NzU2NhbGVGcm9tSXRlbShtX3BhZ2VJdGVtLT5jb250ZW50c1Nj
YWxlKCkpOwotfQotCi1ib29sIFF0Vmlld3BvcnRIYW5kbGVyOjpzY3JvbGxBbmltYXRpb25BY3Rp
dmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3ZpZXdwb3J0SXRlbS0+aXNGbGlja2luZygpOwot
fQotCi1ib29sIFF0Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJlQWN0aXZlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPmlzRHJhZ2dpbmcoKTsKLX0KLQotdm9pZCBRdFZp
ZXdwb3J0SGFuZGxlcjo6cGFuR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24s
IHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKLXsKLSAgICAvLyBUaGlzIGNhbiBvbmx5IGhh
cHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCi0gICAgQVNTRVJUKG1faGFk
VXNlckludGVyYWN0aW9uKTsKLQotICAgIG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2FibGVN
b3VzZVByZXNzKHBvc2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7Ci0gICAgbV9sYXN0UGlu
Y2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlvbjsKLX0KLQotdm9pZCBRdFZp
ZXdwb3J0SGFuZGxlcjo6cGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcG9z
aXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKLXsKLSAgICBtX3ZpZXdwb3J0SXRl
bS0+aGFuZGxlRmxpY2thYmxlTW91c2VNb3ZlKHBvc2l0aW9uLCBldmVudFRpbWVzdGFtcE1pbGxp
cyk7Ci0gICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwb3NpdGlv
bjsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQ
b2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCi17Ci0gICAgbV92
aWV3cG9ydEl0ZW0tPmhhbmRsZUZsaWNrYWJsZU1vdXNlUmVsZWFzZShwb3NpdGlvbiwgZXZlbnRU
aW1lc3RhbXBNaWxsaXMpOwotICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5h
dGVzID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVD
YW5jZWxsZWQoKQotewotICAgIC8vIFJlc2V0IHRoZSB2ZWxvY2l0eSBzYW1wbGVzIG9mIHRoZSBm
bGlja2FibGUuCi0gICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIHJlY29n
bml6ZXIgaWYgd2UgaGF2ZSBhIHJlY29nbml6ZWQKLSAgICAvLyBwYW4gZ2VzdHVyZSBhbmQgcmVj
ZWl2ZSBhIHRvdWNoIGV2ZW50IHdpdGggbXVsdGlwbGUgdG91Y2ggcG9pbnRzCi0gICAgLy8gKGll
LiB0cmFuc2l0aW9uIHRvIGEgcGluY2ggZ2VzdHVyZSkgYXMgaXQgZG9lcyBub3QgbW92ZSB0aGUg
Y29udGVudAotICAgIC8vIGJhY2sgaW5zaWRlIHZhbGlkIGJvdW5kcy4KLSAgICAvLyBXaGVuIHRo
ZSBwaW5jaCBnZXN0dXJlIGVuZHMsIHRoZSBjb250ZW50IGlzIHBvc2l0aW9uZWQgYW5kIHNjYWxl
ZAotICAgIC8vIGJhY2sgdG8gdmFsaWQgYm91bmRhcmllcy4KLSAgICBtX3ZpZXdwb3J0SXRlbS0+
Y2FuY2VsRmxpY2soKTsKLX0KLQotYm9vbCBRdFZpZXdwb3J0SGFuZGxlcjo6c2NhbGVBbmltYXRp
b25BY3RpdmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3NjYWxlQW5pbWF0aW9uLT5zdGF0ZSgp
ID09IFFBYnN0cmFjdEFuaW1hdGlvbjo6UnVubmluZzsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFu
ZGxlcjo6Y2FuY2VsU2Nyb2xsQW5pbWF0aW9uKCkKLXsKLSAgICBpZiAoIXNjcm9sbEFuaW1hdGlv
bkFjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB0aGUgcGFuIGdlc3R1cmUg
cmVjb2duaXplciByZWNlaXZlcyBhIHRvdWNoIGJlZ2luIGV2ZW50Ci0gICAgLy8gZHVyaW5nIGFu
IG9uZ29pbmcga2luZXRpYyBzY3JvbGwgYW5pbWF0aW9uIG9mIGEgcHJldmlvdXMKLSAgICAvLyBw
YW4gZ2VzdHVyZSwgdGhlIGFuaW1hdGlvbiBpcyBzdG9wcGVkIGFuZCB0aGUgY29udGVudCBpcwot
ICAgIC8vIGltbWVkaWF0ZWx5IHBvc2l0aW9uZWQgYmFjayB0byB2YWxpZCBib3VuZGFyaWVzLgot
Ci0gICAgbV92aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7Ci0gICAgVmlld3BvcnRVcGRhdGVE
ZWZlcnJlciBndWFyZCh0aGlzKTsKLSAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKG5lYXJlc3RW
YWxpZEJvdW5kcygpKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6aW50ZXJydXB0U2Nh
bGVBbmltYXRpb24oKQotewotICAgIC8vIFRoaXMgaW50ZXJydXB0cyB0aGUgc2NhbGUgYW5pbWF0
aW9uIGV4YWN0bHkgd2hlcmUgaXQgaXMsIGV2ZW4gaWYgaXQgaXMgb3V0IG9mIGJvdW5kcy4KLSAg
ICBtX3NjYWxlQW5pbWF0aW9uLT5zdG9wKCk7Ci19Ci0KLWJvb2wgUXRWaWV3cG9ydEhhbmRsZXI6
OnBpbmNoR2VzdHVyZUFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGluY2hTdGFydFNj
YWxlID4gMDsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlU3RhcnRl
ZChjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcykKLXsKLSAg
ICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rp
b24uCi0gICAgQVNTRVJUKG1faGFkVXNlckludGVyYWN0aW9uKTsKLQotICAgIGlmICghbV9hbGxv
d3NVc2VyU2NhbGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY2FsZVN0YWNrLmNsZWFy
KCk7Ci0gICAgbV96b29tT3V0U2NhbGUgPSAwLjA7Ci0KLSAgICBtX3NjYWxlVXBkYXRlRGVmZXJy
ZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0aGlzLCBWaWV3cG9ydFVw
ZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50KSk7Ci0KLSAgICBtX2xh
c3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9y
dENvb3JkaW5hdGVzOwotICAgIG1fcGluY2hTdGFydFNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVu
dHNTY2FsZSgpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwaW5jaEdlc3R1cmVSZXF1
ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVz
LCBxcmVhbCB0b3RhbFNjYWxlRmFjdG9yKQotewotICAgIEFTU0VSVChtX3N1c3BlbmRDb3VudCk7
Ci0KLSAgICBpZiAoIW1fYWxsb3dzVXNlclNjYWxpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vICBDaGFuZ2VzIG9mIHRoZSBjZW50ZXIgcG9zaXRpb24gc2hvdWxkIG1vdmUgdGhlIHBhZ2Ug
ZXZlbiBpZiB0aGUgem9vbSBmYWN0b3IKLSAgICAvLyAgZG9lcyBub3QgY2hhbmdlLgotICAgIGNv
bnN0IHFyZWFsIGNzc1NjYWxlID0gY3NzU2NhbGVGcm9tSXRlbShtX3BpbmNoU3RhcnRTY2FsZSAq
IHRvdGFsU2NhbGVGYWN0b3IpOwotCi0gICAgLy8gQWxsb3cgem9vbWluZyBvdXQgYmV5b25kIG1p
bWltdW0gc2NhbGUgb24gcGFnZXMgdGhhdCBkbyBub3QgZXhwbGljaXRseSBkaXNhbGxvdyBpdC4K
LSAgICBjb25zdCBxcmVhbCB0YXJnZXRDU1NTY2FsZSA9IG91dGVyQm91bmRlZENTU1NjYWxlKGNz
c1NjYWxlKTsKLQotICAgIHNjYWxlQ29udGVudChtX3ZpZXdwb3J0SXRlbS0+bWFwVG9XZWJDb250
ZW50KHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzKSwgdGFyZ2V0Q1NTU2NhbGUpOwot
Ci0gICAgY29uc3QgUVBvaW50RiBwb3NpdGlvbkRpZmYgPSBwaW5jaENlbnRlckluVmlld3BvcnRD
b29yZGluYXRlcyAtIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOwotICAg
IG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcGluY2hDZW50ZXJJblZp
ZXdwb3J0Q29vcmRpbmF0ZXM7Ci0KLSAgICBtX3ZpZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyht
X3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpIC0gcG9zaXRpb25EaWZmKTsKLX0KLQotdm9pZCBR
dFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlRW5kZWQoKQotewotICAgIEFTU0VSVChtX3N1
c3BlbmRDb3VudCk7Ci0KLSAgICBpZiAoIW1fYWxsb3dzVXNlclNjYWxpbmcpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fcGluY2hTdGFydFNjYWxlID0gLTE7Ci0KLSAgICBhbmltYXRlUGFnZUl0
ZW1SZWN0VmlzaWJsZShuZWFyZXN0VmFsaWRCb3VuZHMoKSk7Ci0gICAgbV9zY2FsZVVwZGF0ZURl
ZmVycmVyLmNsZWFyKCk7IC8vIENsZWFyIGFmdGVyIHN0YXJ0aW5nIHBvdGVudGlhbCBhbmltYXRp
b24sIHdoaWNoIHRha2VzIG92ZXIgZGVmZXJyaW5nLgotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5k
bGVyOjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKQotewotICAgIG1fcGluY2hTdGFydFNjYWxlID0g
LTE7Ci0gICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci19Ci0KLVFSZWN0RiBRdFZp
ZXdwb3J0SGFuZGxlcjo6dmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
UVJlY3RGIHZpc2libGVSZWN0KG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKS5pbnRlcnNl
Y3RlZChtX3BhZ2VJdGVtLT5ib3VuZGluZ1JlY3QoKSkpOwotICAgIHJldHVybiBtX3ZpZXdwb3J0
SXRlbS0+bWFwUmVjdFRvV2ViQ29udGVudCh2aXNpYmxlUmVjdCk7Ci19Ci0KLXZvaWQgUXRWaWV3
cG9ydEhhbmRsZXI6OmluZm9ybVZpc2libGVDb250ZW50Q2hhbmdlKGNvbnN0IFFQb2ludEYmIHRy
YWplY3RvcnlWZWN0b3IpCi17Ci0gICAgRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBt
X3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKLSAgICBpZiAoIWRyYXdpbmdBcmVhKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBxcmVhbCBzY2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2Nh
bGUoKTsKLQotICAgIGlmIChzY2FsZSAhPSBtX2xhc3RDb21taXR0ZWRTY2FsZSkKLSAgICAgICAg
ZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+Y29udGVudHNTY2Fs
ZUNvbW1pdHRlZCgpOwotICAgIG1fbGFzdENvbW1pdHRlZFNjYWxlID0gc2NhbGU7Ci0KLSAgICBk
cmF3aW5nQXJlYS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNpYmxlQ29udGVudHNSZWN0KCks
IHNjYWxlLCB0cmFqZWN0b3J5VmVjdG9yKTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHVwZGF0ZVBh
aW50Tm9kZSBpcyBhbHdheXMgY2FsbGVkIGJlZm9yZSBwYWludGluZy4KLSAgICBtX3BhZ2VJdGVt
LT51cGRhdGUoKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6dmlld3BvcnRJdGVtU2l6
ZUNoYW5nZWQoKQotewotICAgIFFTaXplIHZpZXdwb3J0U2l6ZSA9IG1fdmlld3BvcnRJdGVtLT5i
b3VuZGluZ1JlY3QoKS5zaXplKCkudG9TaXplKCk7Ci0KLSAgICBpZiAodmlld3BvcnRTaXplLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTGV0IHRoZSBXZWJQcm9jZXNzIGtu
b3cgYWJvdXQgdGhlIG5ldyB2aWV3cG9ydCBzaXplLCBzbyB0aGF0Ci0gICAgLy8gaXQgY2FuIHJl
c2l6ZSB0aGUgY29udGVudCBhY2NvcmRpbmdseS4KLSAgICBtX3dlYlBhZ2VQcm94eS0+c2V0Vmll
d3BvcnRTaXplKHZpZXdwb3J0U2l6ZSk7Ci0KLSAgICBpbmZvcm1WaXNpYmxlQ29udGVudENoYW5n
ZShRUG9pbnRGKCkpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpzY2FsZUNvbnRlbnQo
Y29uc3QgUVBvaW50RiYgY2VudGVySW5DU1NDb29yZGluYXRlcywgcXJlYWwgY3NzU2NhbGUpCi17
Ci0gICAgUVBvaW50RiBvbGRQaW5jaENlbnRlck9uVmlld3BvcnQgPSBtX3ZpZXdwb3J0SXRlbS0+
bWFwRnJvbVdlYkNvbnRlbnQoY2VudGVySW5DU1NDb29yZGluYXRlcyk7Ci0gICAgbV9wYWdlSXRl
bS0+c2V0Q29udGVudHNTY2FsZShpdGVtU2NhbGVGcm9tQ1NTKGNzc1NjYWxlKSk7Ci0gICAgUVBv
aW50RiBuZXdQaW5jaENlbnRlck9uVmlld3BvcnQgPSBtX3ZpZXdwb3J0SXRlbS0+bWFwRnJvbVdl
YkNvbnRlbnQoY2VudGVySW5DU1NDb29yZGluYXRlcyk7Ci0KLSAgICBtX3ZpZXdwb3J0SXRlbS0+
c2V0Q29udGVudFBvcyhtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpICsgKG5ld1BpbmNoQ2Vu
dGVyT25WaWV3cG9ydCAtIG9sZFBpbmNoQ2VudGVyT25WaWV3cG9ydCkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2luY2x1ZGUgIm1vY19RdFZpZXdwb3J0SGFuZGxlci5jcHAiCi0K
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5k
bGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIzN2ZlOS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuaAorKysgL2Rldi9udWxs
CkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDEx
IEJlbmphbWluIFBvdWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+Ci0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaWZuZGVmIFF0Vmll
d3BvcnRIYW5kbGVyX2gKLSNkZWZpbmUgUXRWaWV3cG9ydEhhbmRsZXJfaAotCi0jaW5jbHVkZSA8
UXRDb3JlL1FPYmplY3Q+Ci0jaW5jbHVkZSA8UXRDb3JlL1FSZWN0Rj4KLSNpbmNsdWRlIDxRdENv
cmUvUVZhcmlhbnQ+Ci0jaW5jbHVkZSA8UXRDb3JlL1FWYXJpYW50QW5pbWF0aW9uPgotI2luY2x1
ZGUgPFdlYkNvcmUvVmlld3BvcnRBcmd1bWVudHMuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
Ci0KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVBvaW50RjsKLWNsYXNzIFFXaGVlbEV2ZW50
OwotUVRfRU5EX05BTUVTUEFDRQotCi1jbGFzcyBRUXVpY2tXZWJQYWdlOwotY2xhc3MgUVF1aWNr
V2ViVmlldzsKLQotY2xhc3MgUVdlYktpdFRlc3Q7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1j
bGFzcyBXZWJQYWdlUHJveHk7Ci1jbGFzcyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOwotCi1jbGFz
cyBRdFZpZXdwb3J0SGFuZGxlciA6IHB1YmxpYyBRT2JqZWN0IHsKLSAgICBRX09CSkVDVAotCi1w
dWJsaWM6Ci0gICAgUXRWaWV3cG9ydEhhbmRsZXIoV2ViUGFnZVByb3h5KiwgUVF1aWNrV2ViVmll
dyosIFFRdWlja1dlYlBhZ2UqKTsKLSAgICB+UXRWaWV3cG9ydEhhbmRsZXIoKTsKLQotICAgIHZv
aWQgdG91Y2hCZWdpbigpOwotICAgIHZvaWQgdG91Y2hFbmQoKTsKLQotICAgIGJvb2wgc2Nyb2xs
QW5pbWF0aW9uQWN0aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBjYW5jZWxTY3JvbGxBbmltYXRpb24o
KTsKLQotICAgIGJvb2wgcGFuR2VzdHVyZUFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgcGFuR2Vz
dHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFt
cE1pbGxpcyk7Ci0gICAgdm9pZCBwYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRG
JiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKLSAgICB2b2lkIHBhbkdl
c3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1w
TWlsbGlzKTsKLSAgICB2b2lkIHBhbkdlc3R1cmVDYW5jZWxsZWQoKTsKLQotICAgIGJvb2wgc2Nh
bGVBbmltYXRpb25BY3RpdmUoKSBjb25zdDsKLSAgICB2b2lkIGludGVycnVwdFNjYWxlQW5pbWF0
aW9uKCk7Ci0KLSAgICBib29sIHBpbmNoR2VzdHVyZUFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQg
cGluY2hHZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRD
b29yZGluYXRlcyk7Ci0gICAgdm9pZCBwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQ
b2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzLCBxcmVhbCB0b3RhbFNjYWxl
RmFjdG9yKTsKLSAgICB2b2lkIHBpbmNoR2VzdHVyZUVuZGVkKCk7Ci0gICAgdm9pZCBwaW5jaEdl
c3R1cmVDYW5jZWxsZWQoKTsKLQotICAgIHZvaWQgem9vbVRvQXJlYUdlc3R1cmVFbmRlZChjb25z
dCBRUG9pbnRGJiB0b3VjaFBvaW50LCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpOwotICAgIHZv
aWQgZm9jdXNFZGl0YWJsZUFyZWEoY29uc3QgUVJlY3RGJiBjYXJldEFyZWEsIGNvbnN0IFFSZWN0
RiYgdGFyZ2V0QXJlYSk7Ci0KLSAgICB2b2lkIHBhZ2VDb250ZW50UG9zaXRpb25SZXF1ZXN0ZWQo
Y29uc3QgUVBvaW50JiBwb3NpdGlvbik7Ci0KLSAgICB2b2lkIHZpZXdwb3J0SXRlbVNpemVDaGFu
Z2VkKCk7Ci0gICAgdm9pZCB2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKGNvbnN0IFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyYpOwotICAgIHZvaWQgaW5mb3JtVmlzaWJsZUNvbnRlbnRDaGFu
Z2UoY29uc3QgUVBvaW50RiYgdHJhamVjdG9yeSA9IFFQb2ludEYoKSk7Ci0gICAgdm9pZCBwYWdl
Q29udGVudHNTaXplQ2hhbmdlZChjb25zdCBRU2l6ZSYgbmV3U2l6ZSwgY29uc3QgUVNpemUmIHZp
ZXdwb3J0U2l6ZSk7Ci0KLXByaXZhdGUgUV9TTE9UUzoKLSAgICAvLyBSZXNwb25kIHRvIGNoYW5n
ZXMgb2YgcG9zaXRpb24gdGhhdCBhcmUgbm90IGRyaXZlbiBieSB1cy4KLSAgICB2b2lkIHBhZ2VJ
dGVtUG9zaXRpb25DaGFuZ2VkKCk7Ci0KLSAgICB2b2lkIHNjYWxlQW5pbWF0aW9uU3RhdGVDaGFu
Z2VkKFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUp
OwotICAgIHZvaWQgc2NhbGVBbmltYXRpb25WYWx1ZUNoYW5nZWQoUVZhcmlhbnQgdmFsdWUpOwot
Ci0gICAgdm9pZCBmbGlja01vdmVTdGFydGVkKCk7IC8vIENhbGxlZCB3aGVuIHBhbm5pbmcgc3Rh
cnRzLgotICAgIHZvaWQgZmxpY2tNb3ZlRW5kZWQoKTsgLy8gICBDYWxsZWQgd2hlbiBwYW5uaW5n
ICgrIGtpbmV0aWMgYW5pbWF0aW9uKSBlbmRzLgotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOwotICAgIGZyaWVuZCBjbGFzcyA6OlFXZWJLaXRUZXN0
OwotCi0gICAgV2ViUGFnZVByb3h5KiBjb25zdCBtX3dlYlBhZ2VQcm94eTsKLSAgICBRUXVpY2tX
ZWJWaWV3KiBjb25zdCBtX3ZpZXdwb3J0SXRlbTsKLSAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBt
X3BhZ2VJdGVtOwotCi0gICAgcXJlYWwgY3NzU2NhbGVGcm9tSXRlbShxcmVhbCkgY29uc3Q7Ci0g
ICAgcXJlYWwgaXRlbVNjYWxlRnJvbUNTUyhxcmVhbCkgY29uc3Q7Ci0gICAgcXJlYWwgaXRlbUNv
b3JkRnJvbUNTUyhxcmVhbCkgY29uc3Q7Ci0gICAgUVJlY3RGIGl0ZW1SZWN0RnJvbUNTUyhjb25z
dCBRUmVjdEYmKSBjb25zdDsKLQotICAgIHFyZWFsIGlubmVyQm91bmRlZENTU1NjYWxlKHFyZWFs
KSBjb25zdDsKLSAgICBxcmVhbCBvdXRlckJvdW5kZWRDU1NTY2FsZShxcmVhbCkgY29uc3Q7Ci0K
LSAgICB2b2lkIHNldEluaXRpYWxTY2FsZUlmTmVlZGVkKCk7Ci0KLSAgICB2b2lkIHNldENTU1Nj
YWxlKHFyZWFsKTsKLSAgICBxcmVhbCBjdXJyZW50Q1NTU2NhbGUoKSBjb25zdDsKLQotICAgIHZv
aWQgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmKTsKLSAgICB2b2lkIGFuaW1h
dGVQYWdlSXRlbVJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYpOwotCi0gICAgUVJlY3RGIHZpc2li
bGVDb250ZW50c1JlY3QoKSBjb25zdDsKLSAgICBRUmVjdEYgaW5pdGlhbFJlY3QoKSBjb25zdDsK
LSAgICBRUmVjdEYgbmVhcmVzdFZhbGlkQm91bmRzKCkgY29uc3Q7Ci0KLSAgICBRUmVjdEYgY29t
cHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxlKHFyZWFsIGl0ZW1TY2FsZSkgY29uc3Q7Ci0g
ICAgdm9pZCBzY2FsZUNvbnRlbnQoY29uc3QgUVBvaW50RiYgY2VudGVySW5DU1NDb29yZGluYXRl
cywgcXJlYWwgY3NzU2NhbGUpOwotCi0gICAgdm9pZCBzdXNwZW5kUGFnZUNvbnRlbnQoKTsKLSAg
ICB2b2lkIHJlc3VtZVBhZ2VDb250ZW50KCk7Ci0KLSAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJp
YnV0ZXMgbV9yYXdBdHRyaWJ1dGVzOwotCi0gICAgYm9vbCBtX2FsbG93c1VzZXJTY2FsaW5nOwot
ICAgIHFyZWFsIG1fbWluaW11bVNjYWxlOwotICAgIHFyZWFsIG1fbWF4aW11bVNjYWxlOwotICAg
IHFyZWFsIG1fZGV2aWNlUGl4ZWxSYXRpbzsKLQotICAgIFFTaXplIG1fbGF5b3V0U2l6ZTsKLQot
ICAgIGludCBtX3N1c3BlbmRDb3VudDsKLSAgICBib29sIG1faGFzU3VzcGVuZGVkQ29udGVudDsK
LQotICAgIE93blB0cjxWaWV3cG9ydFVwZGF0ZURlZmVycmVyPiBtX3NjYWxlVXBkYXRlRGVmZXJy
ZXI7Ci0gICAgT3duUHRyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fc2Nyb2xsVXBkYXRlRGVm
ZXJyZXI7Ci0gICAgT3duUHRyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fdG91Y2hVcGRhdGVE
ZWZlcnJlcjsKLSAgICBPd25QdHI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV9hbmltYXRpb25V
cGRhdGVEZWZlcnJlcjsKLQotICAgIGJvb2wgbV9oYWRVc2VySW50ZXJhY3Rpb247Ci0KLSAgICBj
bGFzcyBTY2FsZUFuaW1hdGlvbiA6IHB1YmxpYyBRVmFyaWFudEFuaW1hdGlvbiB7Ci0gICAgcHVi
bGljOgotICAgICAgICBTY2FsZUFuaW1hdGlvbihRT2JqZWN0KiBwYXJlbnQgPSAwKQotICAgICAg
ICAgICAgOiBRVmFyaWFudEFuaW1hdGlvbihwYXJlbnQpCi0gICAgICAgIHsgfQotCi0gICAgICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVDdXJyZW50VmFsdWUoY29uc3QgUVZhcmlhbnQmKSB7IH0KLSAg
ICB9OwotCi0gICAgc3RydWN0IFNjYWxlU3RhY2tJdGVtIHsKLSAgICAgICAgU2NhbGVTdGFja0l0
ZW0ocXJlYWwgc2NhbGUsIHFyZWFsIHhQb3NpdGlvbikKLSAgICAgICAgICAgIDogc2NhbGUoc2Nh
bGUpCi0gICAgICAgICAgICAsIHhQb3NpdGlvbih4UG9zaXRpb24pCi0gICAgICAgIHsgfQotCi0g
ICAgICAgIHFyZWFsIHNjYWxlOwotICAgICAgICBxcmVhbCB4UG9zaXRpb247Ci0gICAgfTsKLQot
ICAgIFNjYWxlQW5pbWF0aW9uKiBtX3NjYWxlQW5pbWF0aW9uOwotICAgIFFQb2ludEYgbV9sYXN0
UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXM7Ci0gICAgUVBvaW50RiBtX2xhc3RTY3Jv
bGxQb3NpdGlvbjsKLSAgICBxcmVhbCBtX3BpbmNoU3RhcnRTY2FsZTsKLSAgICBxcmVhbCBtX2xh
c3RDb21taXR0ZWRTY2FsZTsKLSAgICBxcmVhbCBtX3pvb21PdXRTY2FsZTsKLSAgICBRTGlzdDxT
Y2FsZVN0YWNrSXRlbT4gbV9zY2FsZVN0YWNrOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBRdFZpZXdwb3J0SGFuZGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCmluZGV4IGEwMjkwMGYu
LmEzOTY0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VFdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdl
YlBhZ2VFdmVudEhhbmRsZXIuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNp
bmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRs
ZXIuaCIKKyNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQuaCIKICNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKICNpbmNs
dWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKQEAgLTkxLDcgKzkxLDcgQEAgc3RhdGljIGlubGluZSBX
ZWJDb3JlOjpEcmFnT3BlcmF0aW9uIGRyb3BBY3Rpb25Ub0RyYWdPcGVyYXRpb24oUXQ6OkRyb3BB
Y3Rpb25zIGEKIAogUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpRdFdlYlBhZ2VFdmVudEhhbmRsZXIo
V0tQYWdlUmVmIHBhZ2VSZWYsIFFRdWlja1dlYlBhZ2UqIHFtbFdlYlBhZ2UsIFFRdWlja1dlYlZp
ZXcqIHFtbFdlYlZpZXcpCiAgICAgOiBtX3dlYlBhZ2VQcm94eSh0b0ltcGwocGFnZVJlZikpCi0g
ICAgLCBtX3ZpZXdwb3J0SGFuZGxlcigwKQorICAgICwgbV92aWV3cG9ydENvbnRyb2xsZXIoMCkK
ICAgICAsIG1fcGFuR2VzdHVyZVJlY29nbml6ZXIodGhpcykKICAgICAsIG1fcGluY2hHZXN0dXJl
UmVjb2duaXplcih0aGlzKQogICAgICwgbV90YXBHZXN0dXJlUmVjb2duaXplcih0aGlzKQpAQCAt
MzA1LDkgKzMwNSw5IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVGb2N1c091
dEV2ZW50KFFGb2N1c0V2ZW50KikKICAgICBtX3dlYlBhZ2VQcm94eS0+dmlld1N0YXRlRGlkQ2hh
bmdlKFdlYlBhZ2VQcm94eTo6Vmlld0lzRm9jdXNlZCB8IFdlYlBhZ2VQcm94eTo6Vmlld1dpbmRv
d0lzQWN0aXZlKTsKIH0KIAotdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnNldFZpZXdwb3J0
SGFuZGxlcihRdFZpZXdwb3J0SGFuZGxlciogaGFuZGxlcikKK3ZvaWQgUXRXZWJQYWdlRXZlbnRI
YW5kbGVyOjpzZXRWaWV3cG9ydENvbnRyb2xsZXIoUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dFF0KiBjb250cm9sbGVyKQogewotICAgIG1fdmlld3BvcnRIYW5kbGVyID0gaGFuZGxlcjsKKyAg
ICBtX3ZpZXdwb3J0Q29udHJvbGxlciA9IGNvbnRyb2xsZXI7CiB9CiAKIHZvaWQgUXRXZWJQYWdl
RXZlbnRIYW5kbGVyOjpoYW5kbGVJbnB1dE1ldGhvZEV2ZW50KFFJbnB1dE1ldGhvZEV2ZW50KiBl
dikKQEAgLTQwNiw3ICs0MDYsNyBAQCBzdGF0aWMgdm9pZCBzZXRJbnB1dFBhbmVsVmlzaWJsZShi
b29sIHZpc2libGUpCiAKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjppbnB1dFBhbmVsVmlz
aWJsZUNoYW5nZWQoKQogewotICAgIGlmICghbV92aWV3cG9ydEhhbmRsZXIpCisgICAgaWYgKCFt
X3ZpZXdwb3J0Q29udHJvbGxlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2Ugb25seSBy
ZXNwb25kIHRvIHRoZSBpbnB1dCBwYW5lbCBiZWNvbWluZyB2aXNpYmxlLgpAQCAtNDE1LDcgKzQx
NSw3IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjppbnB1dFBhbmVsVmlzaWJsZUNoYW5n
ZWQoKQogCiAgICAgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvciA9IG1fd2ViUGFnZVByb3h5LT5l
ZGl0b3JTdGF0ZSgpOwogICAgIGlmIChlZGl0b3IuaXNDb250ZW50RWRpdGFibGUpCi0gICAgICAg
IG1fdmlld3BvcnRIYW5kbGVyLT5mb2N1c0VkaXRhYmxlQXJlYShRUmVjdEYoZWRpdG9yLmN1cnNv
clJlY3QpLCBRUmVjdEYoZWRpdG9yLmVkaXRvclJlY3QpKTsKKyAgICAgICAgbV92aWV3cG9ydENv
bnRyb2xsZXItPmZvY3VzRWRpdGFibGVBcmVhKFFSZWN0RihlZGl0b3IuY3Vyc29yUmVjdCksIFFS
ZWN0RihlZGl0b3IuZWRpdG9yUmVjdCkpOwogfQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxl
cjo6dXBkYXRlVGV4dElucHV0U3RhdGUoKQpAQCAtNDUwLDcgKzQ1MCw3IEBAIHZvaWQgUXRXZWJQ
YWdlRXZlbnRIYW5kbGVyOjpkb25lV2l0aEdlc3R1cmVFdmVudChjb25zdCBXZWJHZXN0dXJlRXZl
bnQmIGV2ZW50LCBiCiAKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVJbnB1dEV2
ZW50KGNvbnN0IFFJbnB1dEV2ZW50KiBldmVudCkKIHsKLSAgICBBU1NFUlQobV92aWV3cG9ydEhh
bmRsZXIpOworICAgIEFTU0VSVChtX3ZpZXdwb3J0Q29udHJvbGxlcik7CiAKICAgICBib29sIGlz
TW91c2VFdmVudCA9IGZhbHNlOwogCkBAIC00NjAsOSArNDYwLDkgQEAgdm9pZCBRdFdlYlBhZ2VF
dmVudEhhbmRsZXI6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgUUlucHV0RXZlbnQqIGV2ZW50KQog
ICAgICAgICBtX2lzTW91c2VCdXR0b25QcmVzc2VkID0gdHJ1ZTsKICAgICAgICAgLy8gRmFsbCB0
aHJvdWdoLgogICAgIGNhc2UgUUV2ZW50OjpUb3VjaEJlZ2luOgotICAgICAgICBBU1NFUlQoIW1f
dmlld3BvcnRIYW5kbGVyLT5wYW5HZXN0dXJlQWN0aXZlKCkpOwotICAgICAgICBBU1NFUlQoIW1f
dmlld3BvcnRIYW5kbGVyLT5waW5jaEdlc3R1cmVBY3RpdmUoKSk7Ci0gICAgICAgIG1fdmlld3Bv
cnRIYW5kbGVyLT50b3VjaEJlZ2luKCk7CisgICAgICAgIEFTU0VSVCghbV92aWV3cG9ydENvbnRy
b2xsZXItPnBhbkdlc3R1cmVBY3RpdmUoKSk7CisgICAgICAgIEFTU0VSVCghbV92aWV3cG9ydENv
bnRyb2xsZXItPnBpbmNoR2VzdHVyZUFjdGl2ZSgpKTsKKyAgICAgICAgbV92aWV3cG9ydENvbnRy
b2xsZXItPnRvdWNoQmVnaW4oKTsKIAogICAgICAgICAvLyBUaGUgaW50ZXJhY3Rpb24gZW5naW5l
IG1pZ2h0IHN0aWxsIGJlIGFuaW1hdGluZyBraW5ldGljIHNjcm9sbGluZyBvciBhIHNjYWxlIGFu
aW1hdGlvbgogICAgICAgICAvLyBzdWNoIGFzIGRvdWJsZS10YXAgdG8gem9vbSBvciB0aGUgYm91
bmNlIGJhY2sgZWZmZWN0LiBBIHRvdWNoIHN0b3BzIHRoZSBraW5ldGljIHNjcm9sbGluZwpAQCAt
NDc3LDE1ICs0NzcsMTUgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRsZUlucHV0
RXZlbnQoY29uc3QgUUlucHV0RXZlbnQqIGV2ZW50KQogICAgICAgICAvLyBGYWxsIHRocm91Z2gu
CiAgICAgY2FzZSBRRXZlbnQ6OlRvdWNoVXBkYXRlOgogICAgICAgICAvLyBUaGUgc2NhbGUgYW5p
bWF0aW9uIGNhbiBvbmx5IGJlIGludGVycnVwdGVkIGJ5IGEgcGluY2ggZ2VzdHVyZSwgd2hpY2gg
d2lsbCB0aGVuIHRha2Ugb3Zlci4KLSAgICAgICAgaWYgKG1fdmlld3BvcnRIYW5kbGVyLT5zY2Fs
ZUFuaW1hdGlvbkFjdGl2ZSgpICYmIG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5pc1JlY29nbml6
ZWQoKSkKLSAgICAgICAgICAgIG1fdmlld3BvcnRIYW5kbGVyLT5pbnRlcnJ1cHRTY2FsZUFuaW1h
dGlvbigpOworICAgICAgICBpZiAobV92aWV3cG9ydENvbnRyb2xsZXItPnNjYWxlQW5pbWF0aW9u
QWN0aXZlKCkgJiYgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLmlzUmVjb2duaXplZCgpKQorICAg
ICAgICAgICAgbV92aWV3cG9ydENvbnRyb2xsZXItPmludGVycnVwdFNjYWxlQW5pbWF0aW9uKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRvblJlbGVhc2U6CiAg
ICAgICAgIGlzTW91c2VFdmVudCA9IHRydWU7CiAgICAgICAgIG1faXNNb3VzZUJ1dHRvblByZXNz
ZWQgPSBmYWxzZTsKICAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgogICAgIGNhc2UgUUV2ZW50OjpU
b3VjaEVuZDoKLSAgICAgICAgbV92aWV3cG9ydEhhbmRsZXItPnRvdWNoRW5kKCk7CisgICAgICAg
IG1fdmlld3BvcnRDb250cm9sbGVyLT50b3VjaEVuZCgpOwogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OgogICAgICAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBRRXZlbnQ6Ok1vdXNlQnV0
dG9uRGJsQ2xpY2spOwpAQCAtNDk0LDcgKzQ5NCw3IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5k
bGVyOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFFJbnB1dEV2ZW50KiBldmVudCkKIAogICAgIC8v
IElmIHRoZSBzY2FsZSBhbmltYXRpb24gaXMgYWN0aXZlIHdlIGRvbid0IHBhc3MgdGhlIGV2ZW50
IHRvIHRoZSByZWNvZ25pemVycy4gSW4gdGhlIGZ1dHVyZQogICAgIC8vIHdlIHdvdWxkIHdhbnQg
dG8gcXVldWUgdGhlIGV2ZW50IGhlcmUgYW5kIHJlcG9zdCB0aGVuIHdoZW4gdGhlIGFuaW1hdGlv
biBlbmRzLgotICAgIGlmIChtX3ZpZXdwb3J0SGFuZGxlci0+c2NhbGVBbmltYXRpb25BY3RpdmUo
KSkKKyAgICBpZiAobV92aWV3cG9ydENvbnRyb2xsZXItPnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIFFMaXN0PFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50PiBh
Y3RpdmVUb3VjaFBvaW50czsKQEAgLTU2OCw3ICs1NjgsNyBAQCB2b2lkIFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBRSW5wdXRFdmVudCogZXZlbnQpCiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkb25lV2l0
aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYgZXZlbnQsIGJvb2wgd2FzRXZl
bnRIYW5kbGVkKQogewotICAgIGlmICghbV92aWV3cG9ydEhhbmRsZXIpCisgICAgaWYgKCFtX3Zp
ZXdwb3J0Q29udHJvbGxlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHdhc0V2ZW50SGFu
ZGxlZCB8fCBldmVudC50eXBlKCkgPT0gV2ViRXZlbnQ6OlRvdWNoQ2FuY2VsKSB7CkBAIC01ODcs
MTIgKzU4NywxMiBAQCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6ZG9uZVdpdGhUb3VjaEV2
ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW50LAogCiB2b2lkIFF0V2ViUGFnZUV2
ZW50SGFuZGxlcjo6ZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBJbnRQb2ludCYgdGFyZ2V0LCBj
b25zdCBJbnRSZWN0JiBhcmVhKQogewotICAgIGlmICghbV92aWV3cG9ydEhhbmRsZXIpCisgICAg
aWYgKCFtX3ZpZXdwb3J0Q29udHJvbGxlcikKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklY
TUU6IEFzIHRoZSBmaW5kIG1ldGhvZCBtaWdodCBub3QgcmVzcG9uZCBpbW1lZGlhdGVseSBkdXJp
bmcgbG9hZCBldGMsCiAgICAgLy8gd2Ugc2hvdWxkIGlnbm9yZSBhbGwgYnV0IHRoZSBsYXRlc3Qg
cmVxdWVzdC4KLSAgICBtX3ZpZXdwb3J0SGFuZGxlci0+em9vbVRvQXJlYUdlc3R1cmVFbmRlZChR
UG9pbnRGKHRhcmdldCksIFFSZWN0RihhcmVhKSk7CisgICAgbV92aWV3cG9ydENvbnRyb2xsZXIt
Pnpvb21Ub0FyZWFHZXN0dXJlRW5kZWQoUVBvaW50Rih0YXJnZXQpLCBRUmVjdEYoYXJlYSkpOwog
fQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6c3RhcnREcmFnKGNvbnN0IFdlYkNvcmU6
OkRyYWdEYXRhJiBkcmFnRGF0YSwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFn
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVu
dEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhh
bmRsZXIuaAppbmRleCA0NDZkYjc1Li44NzI0ZjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5oCkBAIC00Niw3ICs0Niw3IEBA
IGNsYXNzIEludFJlY3Q7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmF0aXZlV2ViVG91
Y2hFdmVudDsKLWNsYXNzIFF0Vmlld3BvcnRIYW5kbGVyOworY2xhc3MgUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudFF0OwogY2xhc3MgU2hhcmVhYmxlQml0bWFwOwogY2xhc3MgV2ViR2VzdHVy
ZUV2ZW50OwogY2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBoYW5kbGVJbnB1dE1ldGhvZEV2ZW50KFFJbnB1dE1ldGhvZEV2ZW50Kik7CiAgICAg
dm9pZCBoYW5kbGVUb3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7CiAKLSAgICB2b2lkIHNldFZpZXdw
b3J0SGFuZGxlcihRdFZpZXdwb3J0SGFuZGxlciopOworICAgIHZvaWQgc2V0Vmlld3BvcnRDb250
cm9sbGVyKFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdCopOwogCiAgICAgdm9pZCBhY3Rp
dmF0ZVRhcEhpZ2hsaWdodChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYpOwogICAgIHZv
aWQgZGVhY3RpdmF0ZVRhcEhpZ2hsaWdodCgpOwpAQCAtOTEsMTMgKzkxLDEzIEBAIHB1YmxpYzoK
ICAgICB2b2lkIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgUUlucHV0RXZlbnQqKTsKICAgICB2b2lk
IHJlc2V0R2VzdHVyZVJlY29nbml6ZXJzKCk7CiAKLSAgICBRdFZpZXdwb3J0SGFuZGxlciogdmll
d3BvcnRIYW5kbGVyKCkgeyByZXR1cm4gbV92aWV3cG9ydEhhbmRsZXI7IH0KKyAgICBQYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50UXQqIHZpZXdwb3J0Q29udHJvbGxlcigpIHsgcmV0dXJuIG1f
dmlld3BvcnRDb250cm9sbGVyOyB9CiAKICAgICB2b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJDb3Jl
OjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgV2ViUGFnZVByb3h5KiBtX3dlYlBhZ2VQcm94eTsKLSAgICBRdFZpZXdw
b3J0SGFuZGxlciogbV92aWV3cG9ydEhhbmRsZXI7CisgICAgUGFnZVZpZXdwb3J0Q29udHJvbGxl
ckNsaWVudFF0KiBtX3ZpZXdwb3J0Q29udHJvbGxlcjsKICAgICBRdFBhbkdlc3R1cmVSZWNvZ25p
emVyIG1fcGFuR2VzdHVyZVJlY29nbml6ZXI7CiAgICAgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVy
IG1fcGluY2hHZXN0dXJlUmVjb2duaXplcjsKICAgICBRdFRhcEdlc3R1cmVSZWNvZ25pemVyIG1f
dGFwR2VzdHVyZVJlY29nbml6ZXI7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29s
cy9DaGFuZ2VMb2cKaW5kZXggNTM2MDllMi4uODY2YzhlNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA5LTA0
ICBBbmRyYXMgQmVjc2kgIDxhbmRyYXMuYmVjc2lAbm9raWEuY29tPgorCisgICAgICAgIFtXSzJd
IE1ha2UgW1F0XVZpZXdwb3J0SGFuZGxlciBjcm9zcyBwbGF0Zm9ybQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTEyNTcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgaW5pdGlhbCBzY2FsZSBmcm9t
IHZpZXdwb3J0IGluZm8gaXRlbSBzaW5jZSBpdCBpcworICAgICAgICBzZXQgdG8gLTEgYWZ0ZXIg
YXBwbGllZCB0aHVzIGl0IGRvZXMgbm90IGhvbGQgYW55IHZhbHVhYmxlCisgICAgICAgIGluZm9y
bWF0aW9uLgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL1ZpZXdwb3J0SW5mb0l0ZW0u
cW1sOgorCiAyMDEyLTA5LTAzICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4K
IAogICAgICAgICBbRUZMXSBDaGFuZ2UgdGhlIGZvY3VzIHdoZW4gdGhlIHdlYiB2aWV3IGlzIGNs
aWNrZWQgaW4gTWluaUJyb3dzZXIgYW5kIEVXZWJMYXVuY2hlcgpkaWZmIC0tZ2l0IGEvVG9vbHMv
TWluaUJyb3dzZXIvcXQvcW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sIGIvVG9vbHMvTWluaUJyb3dz
ZXIvcXQvcW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sCmluZGV4IDkyYTJhMDQuLjY4NGNjNzA5IDEw
MDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvVmlld3BvcnRJbmZvSXRlbS5xbWwK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sCkBAIC04
NCwxMSArODQsNiBAQCBJdGVtIHsKIAogICAgICAgICAgICAgICAgIENvbHVtbiB7CiAgICAgICAg
ICAgICAgICAgICAgIFRleHQgewotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogIkluaXRp
YWwgc2NhbGU6ICIgKyBmb3JtYXRTY2FsZSh0ZXN0LnZpZXdwb3J0LmluaXRpYWxTY2FsZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvbnQuZmFtaWx5OiB0ZXh0Qm94LmZvbnRGYW1pbHkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0ZXh0Qm94LmZvbnRDb2xvcgotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFRleHQgewogICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dDogIk1pbmltdW0gc2NhbGU6ICIgKyBmb3JtYXRTY2FsZSh0ZXN0LnZpZXdw
b3J0Lm1pbmltdW1TY2FsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQuZmFtaWx5OiB0
ZXh0Qm94LmZvbnRGYW1pbHkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0ZXh0Qm94
LmZvbnRDb2xvcgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162259</attachid>
            <date>2012-09-05 08:47:07 -0700</date>
            <delta_ts>2012-09-06 04:10:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91257-20120905174732.patch</filename>
            <type>text/plain</type>
            <size>118999</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3NTk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjBjNWIyMDkyZmNmMjEy
YjFhZjg0N2FlMjVkNGJjMmViZDViZjI2Zi4uYjFhODEyNTgzYzczNTc2OWU4M2RiYWViMTkyZGRi
MDAwYzIwMWNhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3MyBAQAorMjAxMi0wOS0wNSAgQW5k
cmFzIEJlY3NpICA8YW5kcmFzLmJlY3NpQG5va2lhLmNvbT4KKworICAgICAgICBbV0syXSBNYWtl
IFtRdF1WaWV3cG9ydEhhbmRsZXIgY3Jvc3MgcGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2UgUXRWaWV3cG9ydEhhbmRsZXIgaW5jbHVk
ZXMgYmVoYXZpb3VyIHRoYXQgaXMgbm90IHBsYXRmb3JtCisgICAgICAgIHNwZWNpZmljIHRvZ2V0
aGVyIHdpdGggaG9va3MgdG8gdGhlIFF0UXVpY2sgQVBJIGxheWVyLCBhIHBsYXRmb3JtCisgICAg
ICAgIGluZGVwZW5kZW50IGltcGxlbWVudGF0aW9uIHdvdWxkIGFsbG93IG90aGVyIHBvcnRzIHRv
IHVzZSB0aGUKKyAgICAgICAgdmlld3BvcnQgY29udHJvbGxpbmcgZnVuY3Rpb25hbGl0eSBwcm92
aWRlZC4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgUXRWaWV3cG9ydEhhbmRsZXIgYW5k
IGludHJvZHVjZXMgYSBwbGF0Zm9ybQorICAgICAgICBpbmRlcGVuZGVudCBQYWdlVmlld3BvcnRD
b250cm9sbGVyIGNsYXNzIHRoYXQgaXMgcmVzcG9uc2libGUKKyAgICAgICAgZm9yIGhhbmRsaW5n
IHJlcXVlc3RzIGZyb20gdGhlIHdlYiBwcm9jZXNzIChlZy4gY29udGVudCBzaXplCisgICAgICAg
IGNoYW5nZXMsIHZpZXdwb3J0IGF0dHJpYnV0ZXMgY2hhbmdlcyBhbmQgc2Nyb2xsIHBvc2l0aW9u
IHJlcXVlc3RzKS4KKyAgICAgICAgUmVxdWVzdHMgZnJvbSB0aGUgd2ViIHByb2Nlc3MgYXJlIGFj
dGVkIG9uIGJ5IGEgcGxhdGZvcm0gc3BlY2lmaWMKKyAgICAgICAgY2xpZW50IGNsYXNzIHdoaWNo
IGltcGxlbWVudHMgdGhlIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQKKyAgICAgICAgaW50
ZXJmYWNlIHdoaWNoIHByb3ZpZGVzIGhvb2tzIHRvIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBBUEkg
bGF5ZXIuCisKKyAgICAgICAgVGhlIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIgaXMgYWxzbyByZXNw
b25zaWJsZSB0byBub3RpZnkgdGhlIHdlYgorICAgICAgICBwcm9jZXNzIGFib3V0IGNoYW5nZXMg
aW4gdGhlIHZpZXdwb3J0IHN0YXRlIChlZy4gdmlld3BvcnQgc2l6ZSwKKyAgICAgICAgdmlzaWJs
ZSByZWN0LCBjb250ZW50IHNjYWxlIGFuZCBtb3ZlbWVudCB0cmFqZWN0b3J5KS4KKyAgICAgICAg
VGhlIGNsaWVudCBpcyByZXNwb25zaWJsZSB0byBkZWxlZ2F0ZSB0aGVzZSBVSSBjaGFuZ2VzIHRv
IHRoZQorICAgICAgICBQYWdlVmlld3BvcnRDb250cm9sbGVyLgorCisgICAgICAgIEZvciBub3cg
b25seSBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQgaW1wbGVtZW50cyB0aGUgY2xpZW50
CisgICAgICAgIGludGVyZmFjZSBiZXNpZGVzIHByb3ZpZGluZyBvdGhlciBRUXVpY2sgc3BlY2lm
aWMgZnVuY3Rpb25hbGl0eQorICAgICAgICAoZ2VzdHVyZXMsIGFuaW1hdGlvbnMsIGV0YykuCisK
KyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNr
d2VicGFnZV9wX3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcu
Y3BwOgorICAgICAgICAoUVF1aWNrV2ViVmlld1ByaXZhdGU6Om9uQ29tcG9uZW50Q29tcGxldGUp
OgorICAgICAgICAoUVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6On5RUXVpY2tXZWJWaWV3
RmxpY2thYmxlUHJpdmF0ZSk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0
ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFFRdWlja1dlYlZpZXdG
bGlja2FibGVQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUpOgorICAgICAgICAoUVF1aWNrV2Vi
Vmlld0ZsaWNrYWJsZVByaXZhdGU6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKToKKyAgICAgICAgKFFR
dWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpkaWRDaGFuZ2VDb250ZW50c1NpemUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6CisgICAgICAgIChXZWJL
aXQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6cGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudCk6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6Cisg
ICAgICAgIChRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xd2Via2l0dGVzdC5jcHA6CisgICAgICAgIChRV2ViS2l0VGVzdDo6dmlld3Bv
cnQpOgorICAgICAgICAoUVdlYktpdFRlc3Q6OmRldmljZVBpeGVsUmF0aW8pOgorICAgICAgICAo
UVdlYktpdFRlc3Q6OmNvbnRlbnRzU2NhbGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlVmll
d3BvcnRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAo
V2ViS2l0Ojpib3VuZCk6CisgICAgICAgIChXZWJLaXQ6OmZ1enp5Q29tcGFyZSk6CisgICAgICAg
IChXZWJLaXQ6OmJvdW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpWaWV3cG9ydFVwZGF0
ZURlZmVycmVyOjpWaWV3cG9ydFVwZGF0ZURlZmVycmVyKToKKyAgICAgICAgKFdlYktpdDo6Vmll
d3BvcnRVcGRhdGVEZWZlcnJlcjo6flZpZXdwb3J0VXBkYXRlRGVmZXJyZXIpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyOjpQYWdlVmlld3BvcnRDb250cm9sbGVyKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6Y29udmVydEZyb21WaWV3
cG9ydCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmNvbnZlcnRU
b1ZpZXdwb3J0KToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6aW5u
ZXJCb3VuZGVkQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENv
bnRyb2xsZXI6Om91dGVyQm91bmRlZENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlVmlld3BvcnRDb250cm9sbGVyOjpkaWRDaGFuZ2VDb250ZW50c1NpemUpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyOjpwYWdlRGlkUmVxdWVzdFNjcm9sbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnNldFZpZXdwb3J0U2l6ZSk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OnNldFZpc2libGVDb250
ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyOjpzeW5j
VmlzaWJsZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxl
cjo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZp
ZXdwb3J0Q29udHJvbGxlcjo6c3VzcGVuZENvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
Vmlld3BvcnRDb250cm9sbGVyOjpyZXN1bWVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVZpZXdwb3J0Q29udHJvbGxlcjo6cG9zaXRpb25SYW5nZUZvckNvbnRlbnRBdFNjYWxlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFZpZXdwb3J0VXBkYXRl
RGVmZXJyZXIpOgorICAgICAgICAoUGFnZVZpZXdwb3J0Q29udHJvbGxlcik6CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6On5QYWdlVmlld3BvcnRDb250cm9sbGVyKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6aGFzU3VzcGVuZGVkQ29u
dGVudCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmhhZFVzZXJJ
bnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmFs
bG93c1VzZXJTY2FsaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxl
cjo6Y29udGVudHNMYXlvdXRTaXplKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29u
dHJvbGxlcjo6ZGV2aWNlUGl4ZWxSYXRpbyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9y
dENvbnRyb2xsZXI6Om1pbmltdW1Db250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZVZpZXdwb3J0Q29udHJvbGxlcjo6bWF4aW11bUNvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyOjpzZXRIYWRVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50OjpQYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudDo6flBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9xdC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRRdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0KToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpTY2FsZUFuaW1hdGlvbjo6dXBk
YXRlQ3VycmVudFZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxl
ckNsaWVudFF0Ojp+UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0KToKKyAgICAgICAgKFdl
YktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpzZXRDb250ZW50UmVjdFZpc2li
bGVQb3NpdGlvbkF0U2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50UXQ6OmFuaW1hdGVDb250ZW50UmVjdFZpc2libGUpOgorICAgICAgICAoV2ViS2l0
OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OmZsaWNrTW92ZVN0YXJ0ZWQpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OmZsaWNrTW92ZUVu
ZGVkKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojpw
YWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRRdDo6c2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnRvdWNoQmVnaW4pOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnRvdWNoRW5kKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojpmb2N1c0Vk
aXRhYmxlQXJlYSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnRRdDo6em9vbVRvQXJlYUdlc3R1cmVFbmRlZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6bmVhcmVzdFZhbGlkVmlzaWJsZUNvbnRlbnRzUmVjdCk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6c2V0Q29u
dGVudHNQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnRRdDo6c2V0Q29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRRdDo6c2V0Q29udGVudHNSZWN0VG9OZWFyZXN0VmFsaWRCb3VuZHMp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OmRpZFJl
c3VtZUNvbnRlbnQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50UXQ6OmFsbG93c1VzZXJTY2FsaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0
Q29udHJvbGxlckNsaWVudFF0OjpkZXZpY2VQaXhlbFJhdGlvKToKKyAgICAgICAgKFdlYktpdDo6
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjptaW5pbXVtQ29udGVudHNTY2FsZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6bWF4aW11bUNv
bnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50UXQ6OmN1cnJlbnRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudFF0Ojpjb250ZW50c0xheW91dFNpemUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnNjcm9sbEFuaW1hdGlvbkFjdGl2
ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6cGFu
R2VzdHVyZUFjdGl2ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnRRdDo6cGFuR2VzdHVyZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpwYW5HZXN0dXJlRW5kZWQp
OgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnBhbkdl
c3R1cmVDYW5jZWxsZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50UXQ6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpjYW5jZWxTY3JvbGxBbmltYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OmludGVycnVwdFNjYWxl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dFF0OjpwaW5jaEdlc3R1cmVBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZVN0YXJ0ZWQpOgorICAgICAgICAoV2ViS2l0
OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZVJlcXVlc3RVcGRh
dGUpOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnBp
bmNoR2VzdHVyZUVuZGVkKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxl
ckNsaWVudFF0OjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQpOgorICAgICAgICAoV2ViS2l0OjpQYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OmRpZENoYW5nZUNvbnRl
bnRzU2l6ZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRR
dDo6ZGlkQ2hhbmdlVmlzaWJsZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudFF0OjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnVwZGF0ZVZpZXdw
b3J0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnRRdDo6c2NhbGVDb250ZW50KToKKyAgICAgICAgKFdlYktpdDo6UGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudFF0Ojp2aWV3cG9ydFNjYWxlRm9yUmVjdCk6CisgICAgICAgICogVUlQcm9j
ZXNzL3F0L1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQpOgorICAg
ICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnNldENvbnRyb2xs
ZXIpOgorICAgICAgICAoU2NhbGVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OlNjYWxlQW5pbWF0aW9uOjpTY2FsZUFuaW1hdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6U2NhbGVT
dGFja0l0ZW06OlNjYWxlU3RhY2tJdGVtKToKKyAgICAgICAgKFNjYWxlU3RhY2tJdGVtKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlF0R2VzdHVyZVJlY29nbml6ZXI6OnZpZXdwb3J0Q29udHJvbGxlcik6CisgICAgICAg
ICogVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaDoKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjp1cGRhdGUpOgorICAgICAgICAo
V2ViS2l0OjpRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpmaW5pc2gpOgorICAgICAgICAoV2ViS2l0
OjpRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpjYW5jZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9x
dC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdFBpbmNo
R2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0UGluY2hHZXN0
dXJlUmVjb2duaXplcjo6ZmluaXNoKToKKyAgICAgICAgKFdlYktpdDo6UXRQaW5jaEdlc3R1cmVS
ZWNvZ25pemVyOjpjYW5jZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFu
ZGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6UXRX
ZWJQYWdlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlRXZlbnRIYW5k
bGVyOjpzZXRWaWV3cG9ydENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpRdFdlYlBhZ2VF
dmVudEhhbmRsZXI6OmlucHV0UGFuZWxWaXNpYmxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6
OlF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlSW5wdXRFdmVudCk6CisgICAgICAgIChXZWJL
aXQ6OlF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6ZG9uZVdpdGhUb3VjaEV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpkaWRGaW5kWm9vbWFibGVBcmVhKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmg6CisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKFdlYktp
dDo6UXRXZWJQYWdlRXZlbnRIYW5kbGVyOjp2aWV3cG9ydENvbnRyb2xsZXIpOgorCiAyMDEyLTA5
LTA1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBGcmVxdWVu
dCBjcmFzaGVzIGluIFBsdWdpblZpZXc6OnNjcmlwdE9iamVjdCB1bmRlciBydW50aW1lT2JqZWN0
Q3VzdG9tR2V0T3duUHJvcGVydHlTbG90CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9UYXJn
ZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCAyMWUyZGMxNGZjOGYxNDJk
YmNhZjg3ODdiMTk1MzQ2YTM0NDE3Y2Y4Li43MmY4NTUxZWMxYWQwMGVmYjMwZjY0MjI5ODI1Y2Fh
ZDNjMmZiMjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTIxMyw2ICsyMTMsOCBAQCBIRUFERVJTICs9IFwK
ICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHku
aCBcCiAgICAgVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIu
aCBcCiAgICAgVUlQcm9jZXNzL1BhZ2VDbGllbnQuaCBcCisgICAgVUlQcm9jZXNzL1BhZ2VWaWV3
cG9ydENvbnRyb2xsZXIuaCBcCisgICAgVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnQuaCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmggXAogICAg
IFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5oIFwKICAgICBVSVByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5oIFwKQEAgLTU1Myw2ICs1NTUsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb24uY3Bw
IFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJv
eHkuY3BwIFwKICAgICBVSVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25Qcm92
aWRlci5jcHAgXAorICAgIFVJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250cm9sbGVyLmNwcCBcCiAg
ICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCiAgICAgVUlQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJvY2Vzc01hbmFnZXIuY3BwIFwKQEAgLTc2NSw2ICs3NjgsNyBAQCBjb250YWlucyhE
RUZJTkVTLCBIQVZFX1FUUVVJQ0s9MSkgewogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a25ldHdvcmtyZXF1ZXN0X3AuaCBcCiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrdXJs
c2NoZW1lZGVsZWdhdGVfcC5oIFwKICAgICAgICAgVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVz
dF9wLmggXAorICAgICAgICBVSVByb2Nlc3MvcXQvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dFF0LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJDb250ZXh0LmggXAogICAgICAgICBV
SVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmggXAogICAgICAgICBVSVByb2Nlc3Mv
cXQvUXRHZXN0dXJlUmVjb2duaXplci5oIFwKQEAgLTc3OSw3ICs3ODMsNiBAQCBjb250YWlucyhE
RUZJTkVTLCBIQVZFX1FUUVVJQ0s9MSkgewogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdl
UG9saWN5Q2xpZW50LmggXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmgg
XAogICAgICAgICBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlVUlDbGllbnQuaCBcCi0gICAgICAgIFVJ
UHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0
V2ViVW5kb0NvbnRyb2xsZXIuaCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9RdFdlYkljb25EYXRh
YmFzZUNsaWVudC5oIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlR
dC5oIFwKQEAgLTgwMSw2ICs4MDQsNyBAQCBjb250YWlucyhERUZJTkVTLCBIQVZFX1FUUVVJQ0s9
MSkgewogICAgICAgICBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3VybHNjaGVtZWRlbGVnYXRlLmNw
cCBcCiAgICAgICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYnByZWZlcmVuY2VzLmNwcCBcCiAgICAg
ICAgIFVJUHJvY2Vzcy9BUEkvcXQvcXdlYmtpdHRlc3QuY3BwIFwKKyAgICAgICAgVUlQcm9jZXNz
L3F0L1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5jcHAgXAogICAgICAgICBVSVByb2Nl
c3MvcXQvUXRXZWJFcnJvci5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvcXQvUXREaWFsb2dSdW5u
ZXIuY3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1F0RG93bmxvYWRNYW5hZ2VyLmNwcCBcCkBA
IC04MTMsNyArODE3LDYgQEAgY29udGFpbnMoREVGSU5FUywgSEFWRV9RVFFVSUNLPTEpIHsKICAg
ICAgICAgVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwIFwKICAgICAgICAg
VUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAgXAogICAgICAgICBVSVBy
b2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5jcHAgXAotICAgICAgICBVSVByb2Nlc3Mv
cXQvUXRWaWV3cG9ydEhhbmRsZXIuY3BwIFwKICAgICAgICAgVUlQcm9jZXNzL3F0L1dlYkNvbnRl
eHRNZW51UHJveHlRdC5jcHAgXAogICAgICAgICBVSVByb2Nlc3MvcXQvV2ViR2VvbG9jYXRpb25Q
cm92aWRlclF0LmNwcCBcCiAgICAgICAgIFVJUHJvY2Vzcy9xdC9XZWJQb3B1cE1lbnVQcm94eVF0
LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlj
a3dlYnBhZ2VfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnBhZ2VfcF9wLmgKaW5kZXggYWQxYzZhZDNmMzA4ZGU2Mzg5NWI3ZDZiNmE4YWY2MTY1OTdmOGFl
ZS4uYzdhYzg2YzNkNWMyZjI3ZmIyNWViNTdlOWI0YzEwZTBmZDAzMTg2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlX3BfcC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZV9wX3AuaApAQCAt
MjYsNyArMjYsNiBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYlBhZ2VQcm94eTsK
LWNsYXNzIFF0Vmlld3BvcnRIYW5kbGVyOwogY2xhc3MgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dl
YnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
LmNwcAppbmRleCBlZGVjOGM3ZjI2ZWZiY2IwYTZjODhmOTRlY2VmMjMwYWNmODM1OGIxLi43MjQ0
N2QxMmZhMWQ5ODY5NWM3YTA3YTA1OGNmZmFkNzIyNDc2YmRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTIzLDkgKzIzLDkg
QEAKIAogI2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVBy
b3h5SW1wbC5oIgorI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5oIgog
I2luY2x1ZGUgIlF0RGlhbG9nUnVubmVyLmgiCiAjaW5jbHVkZSAiUXREb3dubG9hZE1hbmFnZXIu
aCIKLSNpbmNsdWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgogI2luY2x1ZGUgIlF0V2ViQ29udGV4
dC5oIgogI2luY2x1ZGUgIlF0V2ViRXJyb3IuaCIKICNpbmNsdWRlICJRdFdlYkljb25EYXRhYmFz
ZUNsaWVudC5oIgpAQCAtMzI2LDggKzMyNiw5IEBAIHZvaWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6
OmluaXRpYWxpemUoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhCiB2
b2lkIFFRdWlja1dlYlZpZXdQcml2YXRlOjpvbkNvbXBvbmVudENvbXBsZXRlKCkKIHsKICAgICBR
X1EoUVF1aWNrV2ViVmlldyk7Ci0gICAgbV92aWV3cG9ydEhhbmRsZXIucmVzZXQobmV3IFF0Vmll
d3BvcnRIYW5kbGVyKHdlYlBhZ2VQcm94eS5nZXQoKSwgcSwgcGFnZVZpZXcuZGF0YSgpKSk7Ci0g
ICAgcGFnZVZpZXctPmV2ZW50SGFuZGxlcigpLT5zZXRWaWV3cG9ydEhhbmRsZXIobV92aWV3cG9y
dEhhbmRsZXIuZGF0YSgpKTsKKyAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQucmVz
ZXQobmV3IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdChxLCBwYWdlVmlldy5kYXRhKCkp
KTsKKyAgICBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIucmVzZXQobmV3IFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXIod2ViUGFnZVByb3h5LmdldCgpLCBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnQuZGF0YSgpKSk7CisgICAgcGFnZVZpZXctPmV2ZW50SGFuZGxlcigpLT5zZXRWaWV3cG9ydENv
bnRyb2xsZXIobV9wYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50LmRhdGEoKSk7CiB9CiAKIHZv
aWQgUVF1aWNrV2ViVmlld1ByaXZhdGU6OnNldFRyYW5zcGFyZW50QmFja2dyb3VuZChib29sIGVu
YWJsZSkKQEAgLTg1Niw3ICs4NTcsNyBAQCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6
UVF1aWNrV2ViVmlld0ZsaWNrYWJsZVByaXZhdGUoUVF1aWNrV2ViVmlldyogdmlldwogCiBRUXVp
Y2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6flFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRl
KCkKIHsKLSAgICBtX3ZpZXdwb3J0SGFuZGxlci0+ZGlzY29ubmVjdCgpOworICAgIG1fcGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudC0+ZGlzY29ubmVjdCgpOwogfQogCiB2b2lkIFFRdWlja1dl
YlZpZXdGbGlja2FibGVQcml2YXRlOjppbml0aWFsaXplKFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCkBAIC04NzQsMjkgKzg3NSwyOSBAQCB2b2lk
IFFRdWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjpvbkNvbXBvbmVudENvbXBsZXRlKCkKIAog
dm9pZCBRUXVpY2tXZWJWaWV3RmxpY2thYmxlUHJpdmF0ZTo6ZGlkQ2hhbmdlVmlld3BvcnRQcm9w
ZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykK
IHsKLSAgICBpZiAobV92aWV3cG9ydEhhbmRsZXIpCi0gICAgICAgIG1fdmlld3BvcnRIYW5kbGVy
LT52aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2VkKG5ld0F0dHJpYnV0ZXMpOworICAgIGlmIChtX3Bh
Z2VWaWV3cG9ydENvbnRyb2xsZXIpCisgICAgICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+
ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKG5ld0F0dHJpYnV0ZXMpOwogfQogCiB2b2lkIFFR
dWlja1dlYlZpZXdGbGlja2FibGVQcml2YXRlOjp1cGRhdGVWaWV3cG9ydFNpemUoKQogewotICAg
IC8vIEZJWE1FOiBFeGFtaW5lIHdoeSB0aGVyZSBpcyBub3QgYW4gdmlld3BvcnRIYW5kbGVyIGhl
cmUgaW4gdGhlIGJlZ2lubmluZy4KLSAgICBpZiAobV92aWV3cG9ydEhhbmRsZXIpCi0gICAgICAg
IG1fdmlld3BvcnRIYW5kbGVyLT52aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpOworICAgIFFfUShR
UXVpY2tXZWJWaWV3KTsKKworICAgIGlmIChtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIpCisgICAg
ICAgIG1fcGFnZVZpZXdwb3J0Q29udHJvbGxlci0+c2V0Vmlld3BvcnRTaXplKFFTaXplRihxLT53
aWR0aCgpLCBxLT5oZWlnaHQoKSkpOwogfQogCiB2b2lkIFFRdWlja1dlYlZpZXdGbGlja2FibGVQ
cml2YXRlOjpwYWdlRGlkUmVxdWVzdFNjcm9sbChjb25zdCBRUG9pbnQmIHBvcykKIHsKLSAgICBt
X3ZpZXdwb3J0SGFuZGxlci0+cGFnZUNvbnRlbnRQb3NpdGlvblJlcXVlc3RlZChwb3MpOworICAg
IGlmIChtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXIpCisgICAgICAgIG1fcGFnZVZpZXdwb3J0Q29u
dHJvbGxlci0+cGFnZURpZFJlcXVlc3RTY3JvbGwocG9zKTsKIH0KIAogdm9pZCBRUXVpY2tXZWJW
aWV3RmxpY2thYmxlUHJpdmF0ZTo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFFTaXplJiBu
ZXdTaXplKQogewotICAgIFFfUShRUXVpY2tXZWJWaWV3KTsKLQogICAgIHBhZ2VWaWV3LT5zZXRD
b250ZW50c1NpemUobmV3U2l6ZSk7IC8vIGVtaXRzIGNvbnRlbnRzU2l6ZUNoYW5nZWQoKQogICAg
IFFRdWlja1dlYlZpZXdQcml2YXRlOjpkaWRDaGFuZ2VDb250ZW50c1NpemUobmV3U2l6ZSk7Ci0g
ICAgbV92aWV3cG9ydEhhbmRsZXItPnBhZ2VDb250ZW50c1NpemVDaGFuZ2VkKG5ld1NpemUsIHEt
PmJvdW5kaW5nUmVjdCgpLnNpemUoKS50b1NpemUoKSk7CisgICAgbV9wYWdlVmlld3BvcnRDb250
cm9sbGVyLT5kaWRDaGFuZ2VDb250ZW50c1NpemUobmV3U2l6ZSk7CiB9CiAKIHZvaWQgUVF1aWNr
V2ViVmlld0ZsaWNrYWJsZVByaXZhdGU6OmhhbmRsZU1vdXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2
ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wLmgKaW5kZXggNjQ1NTM5ZTczNzcwMDg3ZjUzNzFlNmJjNzVhNGZmYzlhNzFlYTg1MS4uMTIz
Y2IzMWU3MmQ0ODc4OWU5MzEwYjAwZmM3MzYyNjc5MDVhNjJiMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCkBAIC00OSw3ICs0OSw3
IEBAIGNsYXNzIFBsYXRmb3JtV2ViVmlldzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBR
dFJlZkNvdW50ZWROZXR3b3JrUmVxdWVzdERhdGE7Ci1jbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsK
K2NsYXNzIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDsKIGNsYXNzIFF0V2ViUGFnZUxv
YWRDbGllbnQ7CiBjbGFzcyBRdFdlYlBhZ2VQb2xpY3lDbGllbnQ7CiBjbGFzcyBRdFdlYlBhZ2VV
SUNsaWVudDsKQEAgLTIxNyw3ICsyMTcsNyBAQCBwcml2YXRlOgogICAgIFFRdWlja1dlYlZpZXdF
eHBlcmltZW50YWwqIG1fZXhwZXJpbWVudGFsOwogCiAgICAgZnJpZW5kIGNsYXNzIFFXZWJLaXRU
ZXN0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJLaXQ6OlF0Vmlld3BvcnRIYW5kbGVyOworICAgIGZy
aWVuZCBjbGFzcyBXZWJLaXQ6OlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDsKICAgICBm
cmllbmQgY2xhc3MgV2ViS2l0OjpRdFdlYlBhZ2VMb2FkQ2xpZW50OwogICAgIGZyaWVuZCBjbGFz
cyBXZWJLaXQ6OlF0V2ViUGFnZVBvbGljeUNsaWVudDsKICAgICBmcmllbmQgY2xhc3MgV2ViS2l0
OjpRdFdlYlBhZ2VVSUNsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaAppbmRleCBmY2I5ZjJhYmUwM2JlYzUzNzc5YTY5NWE3
MTI5M2ZlNDBkNDY4ZWNjLi4zOGUyMDU5ODFmOTczZDA4NTQzYjAzMTU2OWI5OWI0NmFkYjA0MjVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXdfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2
aWV3X3BfcC5oCkBAIC0yMSwxMyArMjEsMTMgQEAKICNpZm5kZWYgcXF1aWNrd2Vidmlld19wX3Bf
aAogI2RlZmluZSBxcXVpY2t3ZWJ2aWV3X3BfcF9oCiAKKyNpbmNsdWRlICJQYWdlVmlld3BvcnRD
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudC5oIgog
I2luY2x1ZGUgIlF0UGFnZUNsaWVudC5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZVVJQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiUXRXZWJVbmRvQ29udHJvbGxlci5oIgotCiAjaW5jbHVkZSAicXF1aWNrd2Vi
dmlld19wLmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCi0KICNpbmNsdWRlIDxRdENv
cmUvUUVsYXBzZWRUaW1lcj4KICNpbmNsdWRlIDxRdENvcmUvUU9iamVjdD4KICNpbmNsdWRlIDxR
dENvcmUvUVNjb3BlZFBvaW50ZXI+CkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERyYXdpbmdBcmVhUHJveHk7CiBjbGFzcyBR
dERpYWxvZ1J1bm5lcjsKLWNsYXNzIFF0Vmlld3BvcnRIYW5kbGVyOworY2xhc3MgUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudFF0OwogY2xhc3MgUXRXZWJDb250ZXh0OwogY2xhc3MgUXRXZWJF
cnJvcjsKIGNsYXNzIFF0V2ViUGFnZUxvYWRDbGllbnQ7CkBAIC04Nyw3ICs4Nyw3IEBAIHB1Ymxp
YzoKICAgICBpbnQgbG9hZFByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9sb2FkUHJvZ3Jlc3M7
IH0KICAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOwogCi0gICAgdmlydHVhbCBXZWJLaXQ6OlF0
Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydEhhbmRsZXIoKSB7IHJldHVybiAwOyB9CisgICAgV2Vi
S2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQqIHBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQu
ZGF0YSgpOyB9CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpIHsgfQogICAg
IHZvaWQgdXBkYXRlVG91Y2hWaWV3cG9ydFNpemUoKTsKIApAQCAtMTcwLDcgKzE3MCw5IEBAIHBy
b3RlY3RlZDoKICAgICBRU2NvcGVkUG9pbnRlcjxRUXVpY2tXZWJQYWdlPiBwYWdlVmlldzsKICAg
ICBRUXVpY2tXZWJWaWV3KiBxX3B0cjsKIAotICAgIFFTY29wZWRQb2ludGVyPFdlYktpdDo6UXRW
aWV3cG9ydEhhbmRsZXI+IG1fdmlld3BvcnRIYW5kbGVyOworICAgIFFTY29wZWRQb2ludGVyPFdl
YktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcj4gbV9wYWdlVmlld3BvcnRDb250cm9sbGVyOwor
ICAgIFFTY29wZWRQb2ludGVyPFdlYktpdDo6UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0
PiBtX3BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQ7CisKICAgICBGbGlja2FibGVBeGlzTG9j
a2VyIGF4aXNMb2NrZXI7CiAKICAgICBRUW1sQ29tcG9uZW50KiBhbGVydERpYWxvZzsKQEAgLTIx
OCw3ICsyMjAsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG9uQ29tcG9uZW50Q29tcGxl
dGUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29u
c3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzJik7Ci0gICAgdmlydHVhbCBXZWJLaXQ6OlF0
Vmlld3BvcnRIYW5kbGVyKiB2aWV3cG9ydEhhbmRsZXIoKSB7IHJldHVybiBtX3ZpZXdwb3J0SGFu
ZGxlci5kYXRhKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnRTaXplKCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgUVBvaW50JiBwb3Mp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2Via2l0dGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0LmNwcApp
bmRleCBmOTJjOWZmY2M4ODllOTBjYmE1N2UwOTM0YWUyZTc2Y2ViNDQ2ZmIyLi4xZjIxODdhODgx
ZGE0ZDRmMzVmNTA3NTMxNTU2NzAyNWE1MjA5ZmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3F3ZWJraXR0ZXN0LmNwcApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInF3ZWJraXR0ZXN0X3AuaCIKIAotI2luY2x1ZGUgIlF0
Vmlld3BvcnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dFF0LmgiCiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wX3AuaCIKICNpbmNsdWRlIDxRTXV0YWJs
ZUxpc3RJdGVyYXRvcj4KICNpbmNsdWRlIDxRVG91Y2hFdmVudD4KQEAgLTE0OCwxMiArMTQ4LDEx
IEBAIHN0YXRpYyBpbmxpbmUgUUpzb25PYmplY3QgdG9Kc29uT2JqZWN0KGNvbnN0IFFTaXplRiYg
c2l6ZUYpCiBRSnNvbk9iamVjdCBRV2ViS2l0VGVzdDo6dmlld3BvcnQoKSBjb25zdAogewogICAg
IFFKc29uT2JqZWN0IHZpZXdwb3J0RGF0YTsKLSAgICBpZiAoUXRWaWV3cG9ydEhhbmRsZXIqIHZp
ZXdwb3J0SGFuZGxlciA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxlcigpKSB7Ci0g
ICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygiaW5pdGlhbFNjYWxlIiks
IHZpZXdwb3J0SGFuZGxlci0+bV9yYXdBdHRyaWJ1dGVzLmluaXRpYWxTY2FsZSk7Ci0gICAgICAg
IHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygibGF5b3V0U2l6ZSIpLCB0b0pzb25P
YmplY3QoUVNpemVGKHZpZXdwb3J0SGFuZGxlci0+bV9yYXdBdHRyaWJ1dGVzLmxheW91dFNpemUp
KSk7Ci0gICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygiaXNTY2FsYWJs
ZSIpLCAhIXZpZXdwb3J0SGFuZGxlci0+bV9yYXdBdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZSk7Ci0g
ICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygibWluaW11bVNjYWxlIiks
IHZpZXdwb3J0SGFuZGxlci0+bV9taW5pbXVtU2NhbGUpOwotICAgICAgICB2aWV3cG9ydERhdGEu
aW5zZXJ0KFFMYXRpbjFTdHJpbmcoIm1heGltdW1TY2FsZSIpLCB2aWV3cG9ydEhhbmRsZXItPm1f
bWF4aW11bVNjYWxlKTsKKyAgICBpZiAoY29uc3QgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dFF0KiBjb25zdCB2aWV3cG9ydEhhbmRsZXIgPSBtX3dlYlZpZXdQcml2YXRlLT5wYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50KCkpIHsKKyAgICAgICAgdmlld3BvcnREYXRhLmluc2VydChRTGF0
aW4xU3RyaW5nKCJsYXlvdXRTaXplIiksIHRvSnNvbk9iamVjdCh2aWV3cG9ydEhhbmRsZXItPmNv
bnRlbnRzTGF5b3V0U2l6ZSgpKSk7CisgICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGlu
MVN0cmluZygiaXNTY2FsYWJsZSIpLCB2aWV3cG9ydEhhbmRsZXItPmFsbG93c1VzZXJTY2FsaW5n
KCkpOworICAgICAgICB2aWV3cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoIm1pbmltdW1T
Y2FsZSIpLCB2aWV3cG9ydEhhbmRsZXItPm1pbmltdW1Db250ZW50c1NjYWxlKCkpOworICAgICAg
ICB2aWV3cG9ydERhdGEuaW5zZXJ0KFFMYXRpbjFTdHJpbmcoIm1heGltdW1TY2FsZSIpLCB2aWV3
cG9ydEhhbmRsZXItPm1heGltdW1Db250ZW50c1NjYWxlKCkpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygiaW5pdGlhbFNjYWxlIiksIDEu
MCk7CiAgICAgICAgIHZpZXdwb3J0RGF0YS5pbnNlcnQoUUxhdGluMVN0cmluZygibGF5b3V0U2l6
ZSIpLCB0b0pzb25PYmplY3QoUVNpemVGKCkpKTsKQEAgLTE2NiwxNCArMTY1LDE0IEBAIFFKc29u
T2JqZWN0IFFXZWJLaXRUZXN0Ojp2aWV3cG9ydCgpIGNvbnN0CiAKIFFWYXJpYW50IFFXZWJLaXRU
ZXN0OjpkZXZpY2VQaXhlbFJhdGlvKCkgY29uc3QKIHsKLSAgICBpZiAoUXRWaWV3cG9ydEhhbmRs
ZXIqIHZpZXdwb3J0ID0gbV93ZWJWaWV3UHJpdmF0ZS0+dmlld3BvcnRIYW5kbGVyKCkpCi0gICAg
ICAgIHJldHVybiB2aWV3cG9ydC0+bV9kZXZpY2VQaXhlbFJhdGlvOworICAgIGlmIChjb25zdCBQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQqIGNvbnN0IHZpZXdwb3J0ID0gbV93ZWJWaWV3
UHJpdmF0ZS0+cGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCgpKQorICAgICAgICByZXR1cm4g
dmlld3BvcnQtPmRldmljZVBpeGVsUmF0aW8oKTsKICAgICByZXR1cm4gMS4wOwogfQogCiBRVmFy
aWFudCBRV2ViS2l0VGVzdDo6Y29udGVudHNTY2FsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKFF0Vmll
d3BvcnRIYW5kbGVyKiB2aWV3cG9ydCA9IG1fd2ViVmlld1ByaXZhdGUtPnZpZXdwb3J0SGFuZGxl
cigpKQotICAgICAgICByZXR1cm4gdmlld3BvcnQtPmN1cnJlbnRDU1NTY2FsZSgpOworICAgIGlm
IChjb25zdCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQqIGNvbnN0IHZpZXdwb3J0ID0g
bV93ZWJWaWV3UHJpdmF0ZS0+cGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCgpKQorICAgICAg
ICByZXR1cm4gdmlld3BvcnQtPmN1cnJlbnRDb250ZW50c1NjYWxlKCk7CiAgICAgcmV0dXJuIDEu
MDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlVmlld3BvcnRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlVmlld3BvcnRDb250
cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMzNmZWJjODE1YTVkNzZhOGE0MWMyODg0NzRmZDBlZWVl
MzkzZTAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VW
aWV3cG9ydENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorICogQ29weXJpZ2h0IChDKSAyMDExIEJlbmphbWluIFBvdWxhaW4gPGJlbmphbWluQHdl
YmtpdC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZVZpZXdwb3J0
Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudC5o
IgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGlubGluZSBmbG9hdCBib3Vu
ZChmbG9hdCBtaW4sIGZsb2F0IHZhbHVlLCBmbG9hdCBtYXgpCit7CisgICAgcmV0dXJuIGNsYW1w
VG88ZmxvYXQ+KHZhbHVlLCBtaW4sIG1heCk7Cit9CisKK2Jvb2wgZnV6enlDb21wYXJlKGZsb2F0
IGEsIGZsb2F0IGIsIGZsb2F0IGVwc2lsb24pCit7CisgICAgcmV0dXJuIHN0ZDo6YWJzKGEgLSBi
KSA8IGVwc2lsb247Cit9CisKK0Zsb2F0UG9pbnQgYm91bmRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50IG1pblBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgRmxvYXRQ
b2ludCYgbWF4UG9zaXRpb24pCit7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoYm91bmQobWluUG9z
aXRpb24ueCgpLCBwb3NpdGlvbi54KCksIG1heFBvc2l0aW9uLngoKSksIGJvdW5kKG1pblBvc2l0
aW9uLnkoKSwgcG9zaXRpb24ueSgpLCBtYXhQb3NpdGlvbi55KCkpKTsKK30KKworVmlld3BvcnRV
cGRhdGVEZWZlcnJlcjo6Vmlld3BvcnRVcGRhdGVEZWZlcnJlcihQYWdlVmlld3BvcnRDb250cm9s
bGVyKiBQYWdlVmlld3BvcnRDb250cm9sbGVyLCBTdXNwZW5kQ29udGVudEZsYWcgc3VzcGVuZENv
bnRlbnRGbGFnKQorICAgIDogbV9jb250cm9sbGVyKFBhZ2VWaWV3cG9ydENvbnRyb2xsZXIpCit7
CisgICAgbV9jb250cm9sbGVyLT5tX2FjdGl2ZURlZmVycmVyQ291bnQrKzsKKworICAgIC8vIFRo
ZXJlIGlzIG5vIG5lZWQgdG8gc3VzcGVuZCBjb250ZW50IGZvciBpbW1lZGlhdGUgdXBkYXRlcwor
ICAgIC8vIG9ubHkgZHVyaW5nIGFuaW1hdGlvbnMgb3IgbG9uZ2VyIGdlc3R1cmVzLgorICAgIGlm
IChzdXNwZW5kQ29udGVudEZsYWcgPT0gRGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkKKyAg
ICAgICAgbV9jb250cm9sbGVyLT5zdXNwZW5kQ29udGVudCgpOworfQorCitWaWV3cG9ydFVwZGF0
ZURlZmVycmVyOjp+Vmlld3BvcnRVcGRhdGVEZWZlcnJlcigpCit7CisgICAgaWYgKC0tKG1fY29u
dHJvbGxlci0+bV9hY3RpdmVEZWZlcnJlckNvdW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jb250cm9sbGVyLT5yZXN1bWVDb250ZW50KCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aWxlcyBhbGwgYXJvdW5kIHRoZSB2aWV3cG9ydCB3aWxsIGJlIHJlcXVlc3RlZC4KKyAgICBtX2Nv
bnRyb2xsZXItPnN5bmNWaXNpYmxlQ29udGVudHMoKTsKK30KKworUGFnZVZpZXdwb3J0Q29udHJv
bGxlcjo6UGFnZVZpZXdwb3J0Q29udHJvbGxlcihXZWJLaXQ6OldlYlBhZ2VQcm94eSogcHJveHks
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fd2ViUGFnZVBy
b3h5KHByb3h5KQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9hbGxvd3NVc2VyU2Nh
bGluZyhmYWxzZSkKKyAgICAsIG1fbWluaW11bVNjYWxlKDEpCisgICAgLCBtX21heGltdW1TY2Fs
ZSgxKQorICAgICwgbV9kZXZpY2VQaXhlbFJhdGlvKDEpCisgICAgLCBtX2FjdGl2ZURlZmVycmVy
Q291bnQoMCkKKyAgICAsIG1faGFzU3VzcGVuZGVkQ29udGVudChmYWxzZSkKKyAgICAsIG1faGFk
VXNlckludGVyYWN0aW9uKGZhbHNlKQorICAgICwgbV9lZmZlY3RpdmVTY2FsZSgxKQoreworICAg
IC8vIEluaXRpYWxpemluZyBWaWV3cG9ydCBSYXcgQXR0cmlidXRlcyB0byBhdm9pZCByYW5kb20g
bmVnYXRpdmUgc2NhbGUgZmFjdG9ycworICAgIC8vIGlmIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRp
b24gYmV0d2VlbiB0aGUgZmlyc3QgbGF5b3V0IGFuZCBzZXR0aW5nIHRoZSB2aWV3cG9ydCBhdHRy
aWJ1dGVzIGZvciB0aGUgZmlyc3QgdGltZS4KKyAgICBtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNj
YWxlID0gMTsKKyAgICBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlID0gbV9taW5pbXVtU2Nh
bGU7CisgICAgbV9yYXdBdHRyaWJ1dGVzLm1heGltdW1TY2FsZSA9IG1fbWF4aW11bVNjYWxlOwor
ICAgIG1fcmF3QXR0cmlidXRlcy51c2VyU2NhbGFibGUgPSBtX2FsbG93c1VzZXJTY2FsaW5nOwor
CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC0+c2V0Q29udHJvbGxlcih0aGlz
KTsKK30KKworZmxvYXQgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6Y29udmVydEZyb21WaWV3cG9y
dChmbG9hdCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gdmFsdWUgLyBtX2RldmljZVBpeGVs
UmF0aW87Cit9CisKK2Zsb2F0IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmNvbnZlcnRUb1ZpZXdw
b3J0KGZsb2F0IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiB2YWx1ZSAqIG1fZGV2aWNlUGl4
ZWxSYXRpbzsKK30KKworRmxvYXRSZWN0IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXI6OmNvbnZlcnRU
b1ZpZXdwb3J0KGNvbnN0IEZsb2F0UmVjdCYgY3NzUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4g
RmxvYXRSZWN0KAorICAgICAgICBjb252ZXJ0VG9WaWV3cG9ydChjc3NSZWN0LngoKSksCisgICAg
ICAgIGNvbnZlcnRUb1ZpZXdwb3J0KGNzc1JlY3QueSgpKSwKKyAgICAgICAgY29udmVydFRvVmll
d3BvcnQoY3NzUmVjdC53aWR0aCgpKSwKKyAgICAgICAgY29udmVydFRvVmlld3BvcnQoY3NzUmVj
dC5oZWlnaHQoKSkKKyAgICApOworfQorCitmbG9hdCBQYWdlVmlld3BvcnRDb250cm9sbGVyOjpp
bm5lckJvdW5kZWRDb250ZW50c1NjYWxlKGZsb2F0IGNzc1NjYWxlKSBjb25zdAoreworICAgIHJl
dHVybiBib3VuZChtX21pbmltdW1TY2FsZSwgY3NzU2NhbGUsIG1fbWF4aW11bVNjYWxlKTsKK30K
KworZmxvYXQgUGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6b3V0ZXJCb3VuZGVkQ29udGVudHNTY2Fs
ZShmbG9hdCBjc3NTY2FsZSkgY29uc3QKK3sKKyAgICBpZiAobV9hbGxvd3NVc2VyU2NhbGluZykg
eworICAgICAgICAvLyBCb3VuZGVkIGJ5IFswLjEsIDEwLjBdIGxpa2UgdGhlIHZpZXdwb3J0IG1l
dGEgY29kZSBpbiBXZWJDb3JlLgorICAgICAgICBmbG9hdCBoYXJkTWluID0gc3RkOjptYXg8Zmxv
YXQ+KDAuMSwgMC41ICogbV9taW5pbXVtU2NhbGUpOworICAgICAgICBmbG9hdCBoYXJkTWF4ID0g
c3RkOjptaW48ZmxvYXQ+KDEwLCAyICogbV9tYXhpbXVtU2NhbGUpOworICAgICAgICByZXR1cm4g
Ym91bmQoaGFyZE1pbiwgY3NzU2NhbGUsIGhhcmRNYXgpOworICAgIH0KKyAgICByZXR1cm4gaW5u
ZXJCb3VuZGVkQ29udGVudHNTY2FsZShjc3NTY2FsZSk7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0
Q29udHJvbGxlcjo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUp
Cit7CisgICAgaWYgKG1fdmlld3BvcnRTaXplLmlzRW1wdHkoKSB8fCBuZXdTaXplLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZW50c1NpemUgPSBuZXdTaXplOworCisg
ICAgZmxvYXQgbWluaW11bVNjYWxlID0gV2ViQ29yZTo6Y29tcHV0ZU1pbmltdW1TY2FsZUZhY3Rv
ckZvckNvbnRlbnRDb250YWluZWQobV9yYXdBdHRyaWJ1dGVzLCBXZWJDb3JlOjpyb3VuZGVkSW50
U2l6ZShtX3ZpZXdwb3J0U2l6ZSksIG5ld1NpemUpOworCisgICAgaWYgKCFmdXp6eUNvbXBhcmUo
bWluaW11bVNjYWxlLCBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlLCAwLjAwMSkpIHsKKyAg
ICAgICAgbV9taW5pbXVtU2NhbGUgPSBtaW5pbXVtU2NhbGU7CisKKyAgICAgICAgaWYgKCFtX2hh
ZFVzZXJJbnRlcmFjdGlvbiAmJiAhaGFzU3VzcGVuZGVkQ29udGVudCgpKQorICAgICAgICAgICAg
bV9jbGllbnQtPnNldENvbnRlbnRzU2NhbGUoY29udmVydFRvVmlld3BvcnQobWluaW11bVNjYWxl
KSwgdHJ1ZSAvKiBpc0luaXRpYWxTY2FsZSAqLyk7CisKKyAgICAgICAgbV9jbGllbnQtPmRpZENo
YW5nZVZpZXdwb3J0QXR0cmlidXRlcygpOworICAgIH0KKworICAgIG1fY2xpZW50LT5kaWRDaGFu
Z2VDb250ZW50c1NpemUoKTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyOjpwYWdl
RGlkUmVxdWVzdFNjcm9sbChjb25zdCBJbnRQb2ludCYgY3NzUG9zaXRpb24pCit7CisgICAgLy8g
SWdub3JlIHRoZSByZXF1ZXN0IGlmIHN1c3BlbmRlZC4gQ2FuIG9ubHkgaGFwcGVuIGR1ZSB0byBk
ZWxheSBpbiBldmVudCBkZWxpdmVyeS4KKyAgICBpZiAobV9hY3RpdmVEZWZlcnJlckNvdW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3QgZW5kUG9zUmFuZ2UgPSBwb3NpdGlvblJh
bmdlRm9yQ29udGVudEF0U2NhbGUobV9lZmZlY3RpdmVTY2FsZSk7CisgICAgRmxvYXRQb2ludCBl
bmRQb3NpdGlvbihjc3NQb3NpdGlvbik7CisgICAgZW5kUG9zaXRpb24uc2NhbGUobV9lZmZlY3Rp
dmVTY2FsZSwgbV9lZmZlY3RpdmVTY2FsZSk7CisgICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0
aW9uKGVuZFBvc1JhbmdlLm1pblhNaW5ZQ29ybmVyKCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5n
ZS5tYXhYTWF4WUNvcm5lcigpKTsKKworICAgIG1fY2xpZW50LT5zZXRDb250ZW50c1Bvc2l0aW9u
KGVuZFBvc2l0aW9uKTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyOjpzZXRWaWV3
cG9ydFNpemUoY29uc3QgRmxvYXRTaXplJiBuZXdTaXplKQoreworICAgIGlmIChuZXdTaXplLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV92aWV3cG9ydFNpemUgPSBuZXdTaXpl
OworCisgICAgLy8gTGV0IHRoZSBXZWJQcm9jZXNzIGtub3cgYWJvdXQgdGhlIG5ldyB2aWV3cG9y
dCBzaXplLCBzbyB0aGF0CisgICAgLy8gaXQgY2FuIHJlc2l6ZSB0aGUgY29udGVudCBhY2NvcmRp
bmdseS4KKyAgICBtX3dlYlBhZ2VQcm94eS0+c2V0Vmlld3BvcnRTaXplKHJvdW5kZWRJbnRTaXpl
KG5ld1NpemUpKTsKKworICAgIHN5bmNWaXNpYmxlQ29udGVudHMoKTsKK30KKwordm9pZCBQYWdl
Vmlld3BvcnRDb250cm9sbGVyOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgdmlzaWJsZUNvbnRlbnRzUmVjdCwgZmxvYXQgdmlld3BvcnRTY2FsZSwgY29uc3QgRmxvYXRQ
b2ludCYgdHJhamVjdG9yeVZlY3RvcikKK3sKKyAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSB2
aXNpYmxlQ29udGVudHNSZWN0OworICAgIG1fZWZmZWN0aXZlU2NhbGUgPSB2aWV3cG9ydFNjYWxl
OworICAgIHN5bmNWaXNpYmxlQ29udGVudHModHJhamVjdG9yeVZlY3Rvcik7Cit9CisKK3ZvaWQg
UGFnZVZpZXdwb3J0Q29udHJvbGxlcjo6c3luY1Zpc2libGVDb250ZW50cyhjb25zdCBGbG9hdFBv
aW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIERyYXdpbmdBcmVhUHJveHkqIGNvbnN0IGRy
YXdpbmdBcmVhID0gbV93ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCk7CisgICAgaWYgKCFkcmF3
aW5nQXJlYSB8fCBtX3ZpZXdwb3J0U2l6ZS5pc0VtcHR5KCkgfHwgbV9jb250ZW50c1NpemUuaXNF
bXB0eSgpIHx8IG1fdmlzaWJsZUNvbnRlbnRzUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGRyYXdpbmdBcmVhLT5zZXRWaXNpYmxlQ29udGVudHNSZWN0KG1fdmlzaWJsZUNv
bnRlbnRzUmVjdCwgbV9lZmZlY3RpdmVTY2FsZSwgdHJhamVjdG9yeVZlY3Rvcik7CisKKyAgICBt
X2NsaWVudC0+ZGlkQ2hhbmdlVmlzaWJsZUNvbnRlbnRzKCk7Cit9CisKK3ZvaWQgUGFnZVZpZXdw
b3J0Q29udHJvbGxlcjo6ZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKGNvbnN0IFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKK3sKKyAgICBpZiAobmV3QXR0cmli
dXRlcy5sYXlvdXRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yYXdB
dHRyaWJ1dGVzID0gbmV3QXR0cmlidXRlczsKKyAgICBXZWJDb3JlOjpyZXN0cmljdFNjYWxlRmFj
dG9yVG9Jbml0aWFsU2NhbGVJZk5vdFVzZXJTY2FsYWJsZShtX3Jhd0F0dHJpYnV0ZXMpOworCisg
ICAgbV9kZXZpY2VQaXhlbFJhdGlvID0gbV93ZWJQYWdlUHJveHktPmRldmljZVNjYWxlRmFjdG9y
KCk7CisgICAgbV9hbGxvd3NVc2VyU2NhbGluZyA9ICEhbV9yYXdBdHRyaWJ1dGVzLnVzZXJTY2Fs
YWJsZTsKKyAgICBtX21pbmltdW1TY2FsZSA9IG1fcmF3QXR0cmlidXRlcy5taW5pbXVtU2NhbGU7
CisgICAgbV9tYXhpbXVtU2NhbGUgPSBtX3Jhd0F0dHJpYnV0ZXMubWF4aW11bVNjYWxlOworCisg
ICAgbV9jbGllbnQtPmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcygpOworfQorCit2b2lkIFBh
Z2VWaWV3cG9ydENvbnRyb2xsZXI6OnN1c3BlbmRDb250ZW50KCkKK3sKKyAgICBpZiAobV9oYXNT
dXNwZW5kZWRDb250ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hhc1N1c3BlbmRlZENv
bnRlbnQgPSB0cnVlOworICAgIG1fd2ViUGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0
c0FuZEFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyOjpyZXN1
bWVDb250ZW50KCkKK3sKKyAgICBpZiAoIW1fcmF3QXR0cmlidXRlcy5sYXlvdXRTaXplLmlzRW1w
dHkoKSAmJiBtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlID4gMCkgeworICAgICAgICBtX2hh
ZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgICAgICBtX2NsaWVudC0+c2V0Q29udGVudHNT
Y2FsZShjb252ZXJ0VG9WaWV3cG9ydChpbm5lckJvdW5kZWRDb250ZW50c1NjYWxlKG1fcmF3QXR0
cmlidXRlcy5pbml0aWFsU2NhbGUpKSwgLyogaXNJbml0aWFsU2NhbGUgKi8gdHJ1ZSk7CisgICAg
ICAgIG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUgPSAtMTsgLy8gTWFyayB1c2VkLgorICAg
IH0KKworICAgIG1fY2xpZW50LT5kaWRSZXN1bWVDb250ZW50KCk7CisKKyAgICBpZiAoIW1faGFz
U3VzcGVuZGVkQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oYXNTdXNwZW5kZWRD
b250ZW50ID0gZmFsc2U7CisgICAgbV93ZWJQYWdlUHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zKCk7Cit9CisKK0Zsb2F0UmVjdCBQYWdlVmlld3BvcnRDb250cm9sbGVy
Ojpwb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2NhbGUoZmxvYXQgdmlld3BvcnRTY2FsZSkgY29u
c3QKK3sKKyAgICBjb25zdCBGbG9hdFNpemUgY29udGVudFNpemUgPSBtX2NvbnRlbnRzU2l6ZSAq
IHZpZXdwb3J0U2NhbGU7CisKKyAgICBjb25zdCBmbG9hdCBob3Jpem9udGFsUmFuZ2UgPSBjb250
ZW50U2l6ZS53aWR0aCgpIC0gbV92aWV3cG9ydFNpemUud2lkdGgoKTsKKyAgICBjb25zdCBmbG9h
dCB2ZXJ0aWNhbFJhbmdlID0gY29udGVudFNpemUuaGVpZ2h0KCkgLSBtX3ZpZXdwb3J0U2l6ZS5o
ZWlnaHQoKTsKKworICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgaG9yaXpvbnRhbFJhbmdlLCB2
ZXJ0aWNhbFJhbmdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZVZpZXdwb3J0Q29udHJvbGxlci5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
YTE3YTMxMDAzZGEzYjRjYjI0YWQxZWRjMTY1NDIzMzg5NjllYzcyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXIuaApAQCAt
MCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBCZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1pbkB3ZWJraXQub3JnPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBQYWdl
Vmlld3BvcnRDb250cm9sbGVyX2gKKyNkZWZpbmUgUGFnZVZpZXdwb3J0Q29udHJvbGxlcl9oCisK
KyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9WaWV3cG9ydEFyZ3VtZW50cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRQ
b2ludDsKK2NsYXNzIEludFNpemU7Cit9CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgUGFnZVZpZXdw
b3J0Q29udHJvbGxlcjsKK2NsYXNzIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQ7CisKKy8v
IFdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgY29udGVudCwgZWl0aGVyIGJ5IGFuaW1hdGluZyBv
ciBieSB0aGUgaGFuZCBvZiB0aGUgdXNlciwKKy8vIGl0IGlzIGltcG9ydGFudCB0byBlbnN1cmUg
c21vb3RoIGFuaW1hdGlvbnMgb2YgYXQgbGVhc3QgNjBmcHMgaW4gb3JkZXIgdG8gZ2l2ZSBhCisv
LyBnb29kIHVzZXIgZXhwZXJpZW5jZS4KKy8vCisvLyBJbiBvcmRlciB0byBkbyB0aGlzIHdlIG5l
ZWQgdG8gZ2V0IHJpZCBvZiB1bmtub3duIGZhY3RvcnMuIFRoZXNlIGluY2x1ZGUgZGV2aWNlCisv
LyBzZW5zb3JzIChnZW9sb2NhdGlvbiwgb3JpZW50YXRpb24gdXBkYXRlcyBldGMpLCBDU1MzIGFu
aW1hdGlvbnMsIEphdmFTY3JpcHQKKy8vIGV4ZWN0dXRpb24sIHN1YiByZXNvdXJjZSBsb2FkcyBl
dGMuCisvLyBXZSBkbyB0aGlzIGJ5IHNlbmRpbmcgc3VzcGVuZCBhbmQgcmVzdW1lIG5vdGlmaWNh
dGlvbnMgdG8gdGhlIHdlYiBwcm9jZXNzLgorLy8KKy8vIEZvciB0aGlzIHB1cnBvc2UgdGhlIFZp
ZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQgY2FuIGJlIHVzZWQgd2hlbiBpbnRlcmFjdGluZwor
Ly8gd2l0aCBvciBhbmltYXRpbmcgdGhlIGNvbnRlbnQgdG8gc2NvcGUgc3VzcGVuZCAvIHJlc3Vt
ZSBhbmQgZGVmZXIgdXBkYXRlCisvLyBub3RpZmljYXRpb25zLgorLy8KKy8vIElmIHNvbWV0aGlu
ZyBzaG91bGQgb25seSBiZSBleGVjdXRlZCB3aGVuIHRoZSBjb250ZW50IGlzIHN1c3BlbmRlZCwg
aXQgaXMgcG9zc2libGUKKy8vIHRvIGNoZWNrIGZvciB0aGF0IHVzaW5nIEFTU0VSVChoYXNTdXNw
ZW5kZWRDb250ZW50KCkpLgorCitjbGFzcyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIFN1c3BlbmRDb250ZW50RmxhZyB7IERlZmVyVXBkYXRlLCBEZWZlclVwZGF0
ZUFuZFN1c3BlbmRDb250ZW50IH07CisgICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlcihQYWdlVmll
d3BvcnRDb250cm9sbGVyKiwgU3VzcGVuZENvbnRlbnRGbGFnID0gRGVmZXJVcGRhdGUpOworICAg
IH5WaWV3cG9ydFVwZGF0ZURlZmVycmVyKCk7CisKK3ByaXZhdGU6CisgICAgUGFnZVZpZXdwb3J0
Q29udHJvbGxlciogY29uc3QgbV9jb250cm9sbGVyOworfTsKKworY2xhc3MgUGFnZVZpZXdwb3J0
Q29udHJvbGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZVZpZXdwb3J0Q29udHJv
bGxlcik7CisKK3B1YmxpYzoKKyAgICBQYWdlVmlld3BvcnRDb250cm9sbGVyKFdlYktpdDo6V2Vi
UGFnZVByb3h5KiwgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudCopOworICAgIHZpcnR1YWwg
flBhZ2VWaWV3cG9ydENvbnRyb2xsZXIoKSB7IH0KKworICAgIHZvaWQgc3VzcGVuZENvbnRlbnQo
KTsKKyAgICB2b2lkIHJlc3VtZUNvbnRlbnQoKTsKKworICAgIEZsb2F0UmVjdCBwb3NpdGlvblJh
bmdlRm9yQ29udGVudEF0U2NhbGUoZmxvYXQgdmlld3BvcnRTY2FsZSkgY29uc3Q7CisKKyAgICBG
bG9hdFJlY3QgY29udmVydFRvVmlld3BvcnQoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAg
ZmxvYXQgY29udmVydEZyb21WaWV3cG9ydChmbG9hdCkgY29uc3Q7CisgICAgZmxvYXQgY29udmVy
dFRvVmlld3BvcnQoZmxvYXQpIGNvbnN0OworCisgICAgZmxvYXQgaW5uZXJCb3VuZGVkQ29udGVu
dHNTY2FsZShmbG9hdCkgY29uc3Q7CisgICAgZmxvYXQgb3V0ZXJCb3VuZGVkQ29udGVudHNTY2Fs
ZShmbG9hdCkgY29uc3Q7CisKKyAgICBib29sIGhhc1N1c3BlbmRlZENvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBtX2hhc1N1c3BlbmRlZENvbnRlbnQ7IH0KKyAgICBib29sIGhhZFVzZXJJbnRlcmFj
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFkVXNlckludGVyYWN0aW9uOyB9CisgICAgYm9vbCBh
bGxvd3NVc2VyU2NhbGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzVXNlclNjYWxpbmc7IH0K
KworICAgIEZsb2F0U2l6ZSBjb250ZW50c0xheW91dFNpemUoKSBjb25zdCB7IHJldHVybiBtX3Jh
d0F0dHJpYnV0ZXMubGF5b3V0U2l6ZTsgfQorICAgIGZsb2F0IGRldmljZVBpeGVsUmF0aW8oKSBj
b25zdCB7IHJldHVybiBtX2RldmljZVBpeGVsUmF0aW87IH0KKyAgICBmbG9hdCBtaW5pbXVtQ29u
dGVudHNTY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWluaW11bVNjYWxlOyB9CisgICAgZmxvYXQg
bWF4aW11bUNvbnRlbnRzU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX21heGltdW1TY2FsZTsgfQor
CisgICAgdm9pZCBzZXRIYWRVc2VySW50ZXJhY3Rpb24oYm9vbCBkaWRVc2VySW50ZXJhY3QpIHsg
bV9oYWRVc2VySW50ZXJhY3Rpb24gPSBkaWRVc2VySW50ZXJhY3Q7IH0KKworICAgIC8vIE5vdGlm
aWNhdGlvbnMgdG8gdGhlIFdlYlByb2Nlc3MuCisgICAgdm9pZCBzZXRWaWV3cG9ydFNpemUoY29u
c3QgRmxvYXRTaXplJiBuZXdTaXplKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudHNSZWN0LCBmbG9hdCB2aWV3cG9ydFNjYWxl
LCBjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yID0gRmxvYXRQb2ludDo6emVybygp
KTsKKworICAgIC8vIE5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKyAgICB2b2lk
IGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKTsKKyAgICB2b2lk
IGRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRlcyhjb25zdCBWaWV3cG9ydEF0dHJpYnV0ZXMmKTsK
KyAgICB2b2lkIHBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0IEludFBvaW50JiBjc3NQb3NpdGlv
bik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzeW5jVmlzaWJsZUNvbnRlbnRzKGNvbnN0IEZsb2F0
UG9pbnQgJnRyYWplY3RvcnlWZWN0b3IgPSBGbG9hdFBvaW50Ojp6ZXJvKCkpOworCisgICAgV2Vi
UGFnZVByb3h5KiBjb25zdCBtX3dlYlBhZ2VQcm94eTsKKyAgICBQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50KiBtX2NsaWVudDsKKworICAgIFZpZXdwb3J0QXR0cmlidXRlcyBtX3Jhd0F0dHJp
YnV0ZXM7CisKKyAgICBib29sIG1fYWxsb3dzVXNlclNjYWxpbmc7CisgICAgZmxvYXQgbV9taW5p
bXVtU2NhbGU7CisgICAgZmxvYXQgbV9tYXhpbXVtU2NhbGU7CisgICAgZmxvYXQgbV9kZXZpY2VQ
aXhlbFJhdGlvOworCisgICAgaW50IG1fYWN0aXZlRGVmZXJyZXJDb3VudDsKKyAgICBib29sIG1f
aGFzU3VzcGVuZGVkQ29udGVudDsKKyAgICBib29sIG1faGFkVXNlckludGVyYWN0aW9uOworCisg
ICAgRmxvYXRTaXplIG1fdmlld3BvcnRTaXplOworICAgIEZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6
ZTsKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OworICAgIGZsb2F0IG1fZWZm
ZWN0aXZlU2NhbGU7IC8vIFNob3VsZCBhbHdheXMgYmUgY3NzU2NhbGUgKiBkZXZpY2VQaXhlbFJh
dGlvLgorCisgICAgZnJpZW5kIGNsYXNzIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI7Cit9OworCiti
b29sIGZ1enp5Q29tcGFyZShmbG9hdCwgZmxvYXQsIGZsb2F0IGVwc2lsb24pOworRmxvYXRQb2lu
dCBib3VuZFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQgbWluUG9zaXRpb24sIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBtYXhQb3NpdGlvbik7CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUGFnZVZpZXdwb3J0Q29udHJvbGxlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZVZpZXdwb3J0Q29udHJvbGxl
ckNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTUwYjQyMTc5MzYwMTRjNTQwMzg2MzAzMzM0ODk2MGNj
ZWVmMmEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnQuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorICAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudF9oCisjZGVmaW5lIFBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBQYWdlVmlld3BvcnRDb250cm9sbGVy
OworCitjbGFzcyBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50KTsKK3B1YmxpYzoKKyAgICBQ
YWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB+UGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYWxQb2ludCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0IGxvY2FsU2NhbGUsIGJvb2wgdHJl
YXRBc0luaXRpYWxWYWx1ZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRpZFJlc3VtZUNvbnRl
bnQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZSgpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlzaWJsZUNvbnRlbnRzKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udHJvbGxlcihQYWdlVmlld3BvcnRDb250cm9sbGVyKikgPSAwOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9QYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTk5NzVk
ZWJhOTM0MjEwNDg0MGRiMmZlNmI5ZjQ5ZjFhNGE0YjlhOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQu
Y3BwCkBAIC0wLDAgKzEsNTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0
IChDKSAyMDExIEJlbmphbWluIFBvdWxhaW4gPGJlbmphbWluQHdlYmtpdC5vcmc+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
UXQuaCIKKworI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgorI2luY2x1ZGUgInFxdWlja3dl
YnZpZXdfcC5oIgorI2luY2x1ZGUgInF3ZWJraXR0ZXN0X3AuaCIKKyNpbmNsdWRlIDxRUG9pbnRG
PgorI2luY2x1ZGUgPFFUcmFuc2Zvcm0+CisjaW5jbHVkZSA8UXRRdWljay9xcXVpY2tpdGVtLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0
U2l6ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIGNvbnN0IGludCBrU2NhbGVB
bmltYXRpb25EdXJhdGlvbk1pbGxpcyA9IDI1MDsKKworUGFnZVZpZXdwb3J0Q29udHJvbGxlckNs
aWVudFF0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQoUVF1aWNrV2ViVmlldyogdmll
d3BvcnRJdGVtLCBRUXVpY2tXZWJQYWdlKiBwYWdlSXRlbSkKKyAgICA6IG1fdmlld3BvcnRJdGVt
KHZpZXdwb3J0SXRlbSkKKyAgICAsIG1fcGFnZUl0ZW0ocGFnZUl0ZW0pCisgICAgLCBtX3NjYWxl
QW5pbWF0aW9uKG5ldyBTY2FsZUFuaW1hdGlvbih0aGlzKSkKKyAgICAsIG1fcGluY2hTdGFydFNj
YWxlKC0xKQorICAgICwgbV9sYXN0Q29tbWl0dGVkU2NhbGUoLTEpCisgICAgLCBtX3pvb21PdXRT
Y2FsZSgwKQorICAgICwgbV9pZ25vcmVWaWV3cG9ydENoYW5nZXModHJ1ZSkKK3sKKyAgICBtX3Nj
YWxlQW5pbWF0aW9uLT5zZXREdXJhdGlvbihrU2NhbGVBbmltYXRpb25EdXJhdGlvbk1pbGxpcyk7
CisgICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0RWFzaW5nQ3VydmUoUUVhc2luZ0N1cnZlOjpPdXRD
dWJpYyk7CisKKyAgICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRTdGFy
dGVkKCkpLCBTTE9UKGZsaWNrTW92ZVN0YXJ0ZWQoKSksIFF0OjpEaXJlY3RDb25uZWN0aW9uKTsK
KyAgICBjb25uZWN0KG1fdmlld3BvcnRJdGVtLCBTSUdOQUwobW92ZW1lbnRFbmRlZCgpKSwgU0xP
VChmbGlja01vdmVFbmRlZCgpKSwgUXQ6OkRpcmVjdENvbm5lY3Rpb24pOworICAgIGNvbm5lY3Qo
bV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIFNMT1QocGFnZUl0ZW1Q
b3NpdGlvbkNoYW5nZWQoKSkpOworICAgIGNvbm5lY3QobV92aWV3cG9ydEl0ZW0sIFNJR05BTChj
b250ZW50WUNoYW5nZWQoKSksIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOworCisK
KyAgICBjb25uZWN0KG1fc2NhbGVBbmltYXRpb24sIFNJR05BTChzdGF0ZUNoYW5nZWQoUUFic3Ry
YWN0QW5pbWF0aW9uOjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpLAorICAgICAg
ICAgICAgU0xPVChzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJzdHJhY3RBbmltYXRpb246
OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKSkpOworfQorCit2b2lkIFBhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6U2NhbGVBbmltYXRpb246OnVwZGF0ZUN1cnJlbnRWYWx1
ZShjb25zdCBRVmFyaWFudCYgdmFsdWUpCit7CisgICAgLy8gUmVzZXR0aW5nIHRoZSBlbmQgdmFs
dWUsIHRoZSBlYXNpbmcgY3VydmUgb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBzY2FsZSBhbmltYXRp
b24KKyAgICAvLyB0cmlnZ2VycyBhIHJlY2FsY3VsYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBpbnRl
cnZhbC4gVGhpcyBtaWdodCBjaGFuZ2UgdGhlIGN1cnJlbnQKKyAgICAvLyB2YWx1ZSBvZiB0aGUg
YW5pbWF0ZWQgcHJvcGVydHkuCisgICAgLy8gTWFrZSBzdXJlIHdlIG9ubHkgYWN0IG9uIGFuaW1h
dGlvbiB2YWx1ZSBjaGFuZ2VzIGlmIHRoZSBhbmltYXRpb24gaXMgYWN0aXZlLgorICAgIGlmICgh
bV9jb250cm9sbGVyQ2xpZW50LT5zY2FsZUFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBRUmVjdEYgaXRlbVJlY3QgPSB2YWx1ZS50b1JlY3RGKCk7CisgICAgZmxvYXQg
aXRlbVNjYWxlID0gbV9jb250cm9sbGVyQ2xpZW50LT52aWV3cG9ydFNjYWxlRm9yUmVjdChpdGVt
UmVjdCk7CisKKyAgICBtX2NvbnRyb2xsZXJDbGllbnQtPnNldENvbnRlbnRSZWN0VmlzaWJsZVBv
c2l0aW9uQXRTY2FsZShpdGVtUmVjdC50b3BMZWZ0KCksIGl0ZW1TY2FsZSk7Cit9CisKK1BhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6flBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRR
dCgpCit7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpzZXRDb250
ZW50UmVjdFZpc2libGVQb3NpdGlvbkF0U2NhbGUoY29uc3QgUVBvaW50RiYgbG9jYXRpb24sIHFy
ZWFsIGl0ZW1TY2FsZSkKK3sKKyAgICBBU1NFUlQoaXRlbVNjYWxlID49IDApOworCisgICAgc2Nh
bGVDb250ZW50KGl0ZW1TY2FsZSk7CisKKyAgICAvLyBUbyBhbmltYXRlIHRoZSBwb3NpdGlvbiB0
b2dldGhlciB3aXRoIHRoZSBzY2FsZSB3ZSBtdWx0aXBseSB0aGUgcG9zaXRpb24gd2l0aCB0aGUg
Y3VycmVudCBzY2FsZQorICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIHBhZ2UgcG9zaXRpb24gKGRp
c3BsYWNlbWVudCBvbiB0aGUgZmxpY2thYmxlIGNvbnRlbnRJdGVtIGJlY2F1c2Ugb2YgYWRkaXRp
b25hbCBpdGVtcykuCisgICAgUVBvaW50RiBuZXdQb3NpdGlvbihtX3BhZ2VJdGVtLT5wb3MoKSAr
IGxvY2F0aW9uICogaXRlbVNjYWxlKTsKKworICAgIG1fdmlld3BvcnRJdGVtLT5zZXRDb250ZW50
UG9zKG5ld1Bvc2l0aW9uKTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
UXQ6OmFuaW1hdGVDb250ZW50UmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBjb250ZW50UmVjdCkK
K3sKKyAgICBBU1NFUlQobV9zY2FsZUFuaW1hdGlvbi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RBbmlt
YXRpb246OlN0b3BwZWQpOworCisgICAgQVNTRVJUKCFzY3JvbGxBbmltYXRpb25BY3RpdmUoKSk7
CisgICAgaWYgKHNjcm9sbEFuaW1hdGlvbkFjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBRUmVjdEYgdmlld3BvcnRSZWN0SW5Db250ZW50Q29vcmRzID0gbV92aWV3cG9ydEl0ZW0tPm1h
cFJlY3RUb1dlYkNvbnRlbnQobV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpKTsKKyAgICBp
ZiAoY29udGVudFJlY3QgPT0gdmlld3BvcnRSZWN0SW5Db250ZW50Q29vcmRzKSB7CisgICAgICAg
IHVwZGF0ZVZpZXdwb3J0Q29udHJvbGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gU2luY2Ugd2UgaGF2ZSB0byBhbmltYXRlIHNjYWxlIGFuZCBwb3NpdGlvbiBhdCB0aGUg
c2FtZSB0aW1lIHRoZSBzY2FsZSBhbmltYXRpb24gaW50ZXJwb2xhdGVzCisgICAgLy8gZnJvbSB0
aGUgY3VycmVudCB2aWV3cG9ydCByZWN0IGluIGNvbnRlbnQgY29vcmRpbmF0ZXMgdG8gYSB2aXNp
YmxlIHJlY3Qgb2YgdGhlIGNvbnRlbnQuCisgICAgbV9zY2FsZUFuaW1hdGlvbi0+c2V0U3RhcnRW
YWx1ZSh2aWV3cG9ydFJlY3RJbkNvbnRlbnRDb29yZHMpOworICAgIG1fc2NhbGVBbmltYXRpb24t
PnNldEVuZFZhbHVlKGNvbnRlbnRSZWN0KTsKKworICAgIC8vIEluZm9ybSB0aGUgd2ViIHByb2Nl
c3MgYWJvdXQgdGhlIHJlcXVlc3RlZCB2aXNpYmxlIGNvbnRlbnQgcmVjdAorICAgIC8vIGlmIHpv
b21pbmctb3V0IHNvIHRoYXQgbm8gd2hpdGUgdGlsZXMgYXJlIGV4cG9zZWQgZHVyaW5nIGFuaW1h
dGlvbi4KKyAgICBpZiAodmlld3BvcnRSZWN0SW5Db250ZW50Q29vcmRzLndpZHRoKCkgLyBjb250
ZW50UmVjdC53aWR0aCgpIDwgbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpKQorICAgICAgICBt
X2NvbnRyb2xsZXItPnNldFZpc2libGVDb250ZW50c1JlY3QoY29udGVudFJlY3QsIHZpZXdwb3J0
U2NhbGVGb3JSZWN0KGNvbnRlbnRSZWN0KSk7CisKKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zdGFy
dCgpOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6ZmxpY2tNb3Zl
U3RhcnRlZCgpCit7CisgICAgUV9BU1NFUlQobV92aWV3cG9ydEl0ZW0tPmlzTW92aW5nKCkpOwor
ICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIucmVzZXQobmV3IFZpZXdwb3J0VXBkYXRlRGVmZXJy
ZXIobV9jb250cm9sbGVyLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1
c3BlbmRDb250ZW50KSk7CisKKyAgICBtX2xhc3RTY3JvbGxQb3NpdGlvbiA9IG1fdmlld3BvcnRJ
dGVtLT5jb250ZW50UG9zKCk7CisKKyAgICBtX2lnbm9yZVZpZXdwb3J0Q2hhbmdlcyA9IGZhbHNl
OworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6ZmxpY2tNb3ZlRW5k
ZWQoKQoreworICAgIFFfQVNTRVJUKCFtX3ZpZXdwb3J0SXRlbS0+aXNNb3ZpbmcoKSk7CisgICAg
Ly8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBlbmQgb2YgdGhlIHBhbiBvciBwYW4ga2lu
ZXRpYyBhbmltYXRpb24uCisKKyAgICBtX2lnbm9yZVZpZXdwb3J0Q2hhbmdlcyA9IHRydWU7CisK
KyAgICBtX3Njcm9sbFVwZGF0ZURlZmVycmVyLnJlc2V0KCk7Cit9CisKK3ZvaWQgUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudFF0OjpwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpCit7CisgICAg
aWYgKG1faWdub3JlVmlld3BvcnRDaGFuZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICBRUG9p
bnRGIG5ld1Bvc2l0aW9uID0gbV92aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKTsKKworICAgIHVw
ZGF0ZVZpZXdwb3J0Q29udHJvbGxlcihtX2xhc3RTY3JvbGxQb3NpdGlvbiAtIG5ld1Bvc2l0aW9u
KTsKKworICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gbmV3UG9zaXRpb247Cit9CisKK3ZvaWQg
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdl
ZChRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlIG5ld1N0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246
OlN0YXRlIC8qb2xkU3RhdGUqLykKK3sKKyAgICBzd2l0Y2ggKG5ld1N0YXRlKSB7CisgICAgY2Fz
ZSBRQWJzdHJhY3RBbmltYXRpb246OlJ1bm5pbmc6CisgICAgICAgIG1fdmlld3BvcnRJdGVtLT5j
YW5jZWxGbGljaygpOworICAgICAgICBBU1NFUlQoIW1fYW5pbWF0aW9uVXBkYXRlRGVmZXJyZXIp
OworICAgICAgICBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyLnJlc2V0KG5ldyBWaWV3cG9ydFVw
ZGF0ZURlZmVycmVyKG1fY29udHJvbGxlciwgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6RGVmZXJV
cGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFFBYnN0
cmFjdEFuaW1hdGlvbjo6U3RvcHBlZDoKKyAgICAgICAgbV9hbmltYXRpb25VcGRhdGVEZWZlcnJl
ci5yZXNldCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojp0b3VjaEJl
Z2luKCkKK3sKKyAgICBtX2NvbnRyb2xsZXItPnNldEhhZFVzZXJJbnRlcmFjdGlvbih0cnVlKTsK
KworICAgIC8vIFByZXZlbnRzIHJlc3VtaW5nIHRoZSBwYWdlIGJldHdlZW4gdGhlIHVzZXIncyBm
bGlja3Mgb2YgdGhlIHBhZ2Ugd2hpbGUgdGhlIGFuaW1hdGlvbiBpcyBydW5uaW5nLgorICAgIGlm
IChzY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKKyAgICAgICAgbV90b3VjaFVwZGF0ZURlZmVycmVy
LnJlc2V0KG5ldyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKG1fY29udHJvbGxlciwgVmlld3BvcnRV
cGRhdGVEZWZlcnJlcjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOworfQorCit2b2lk
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6dG91Y2hFbmQoKQoreworICAgIG1fdG91
Y2hVcGRhdGVEZWZlcnJlci5yZXNldCgpOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRRdDo6Zm9jdXNFZGl0YWJsZUFyZWEoY29uc3QgUVJlY3RGJiBjYXJldEFyZWEsIGNv
bnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSkKK3sKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBh
cyBhIHJlc3VsdCBvZiBhIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgQVNTRVJUKG1fY29udHJvbGxl
ci0+aGFkVXNlckludGVyYWN0aW9uKCkpOworCisgICAgUVJlY3RGIGVuZEFyZWEgPSBtX2NvbnRy
b2xsZXItPmNvbnZlcnRUb1ZpZXdwb3J0KHRhcmdldEFyZWEpOworCisgICAgcXJlYWwgZW5kSXRl
bVNjYWxlID0gbV9jb250cm9sbGVyLT5jb252ZXJ0VG9WaWV3cG9ydChtX2NvbnRyb2xsZXItPmlu
bmVyQm91bmRlZENvbnRlbnRzU2NhbGUoMi4wKSk7CisgICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0
UmVjdCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsKKworICAgIHFyZWFsIHg7Cisg
ICAgY29uc3QgcXJlYWwgYm9yZGVyT2Zmc2V0ID0gMTA7CisgICAgaWYgKChlbmRBcmVhLndpZHRo
KCkgKyBib3JkZXJPZmZzZXQpICogZW5kSXRlbVNjYWxlIDw9IHZpZXdwb3J0UmVjdC53aWR0aCgp
KSB7CisgICAgICAgIC8vIENlbnRlciB0aGUgaW5wdXQgZmllbGQgaW4gdGhlIG1pZGRsZSBvZiB0
aGUgdmlldywgaWYgaXQgaXMgc21hbGxlciB0aGFuCisgICAgICAgIC8vIHRoZSB2aWV3IGF0IHRo
ZSBzY2FsZSB0YXJnZXQuCisgICAgICAgIHggPSB2aWV3cG9ydFJlY3QuY2VudGVyKCkueCgpIC0g
ZW5kQXJlYS53aWR0aCgpICogZW5kSXRlbVNjYWxlIC8gMi4wOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBjYXJldCBhbHdheXMgaGFzIGJvcmRlck9mZnNldCBjb250
ZW50cyBwaXhlbHMgdG8gdGhlIHJpZ2h0CisgICAgICAgIC8vIG9mIGl0LCBhbmQgc2Vjb25kYXJp
bHkgKGlmIHBvc3NpYmxlKSwgdGhhdCB0aGUgYXJlYSBoYXMgYm9yZGVyT2Zmc2V0CisgICAgICAg
IC8vIGNvbnRlbnRzIHBpeGVscyB0byB0aGUgbGVmdCBvZiBpdC4KKyAgICAgICAgcXJlYWwgY2Fy
ZXRPZmZzZXQgPSBtX2NvbnRyb2xsZXItPmNvbnZlcnRUb1ZpZXdwb3J0KGNhcmV0QXJlYS54KCkp
IC0gZW5kQXJlYS54KCk7CisgICAgICAgIHggPSBxTWluKHZpZXdwb3J0UmVjdC53aWR0aCgpIC0g
KGNhcmV0T2Zmc2V0ICsgYm9yZGVyT2Zmc2V0KSAqIGVuZEl0ZW1TY2FsZSwgYm9yZGVyT2Zmc2V0
ICogZW5kSXRlbVNjYWxlKTsKKyAgICB9CisKKyAgICBjb25zdCBRUG9pbnRGIGhvdHNwb3QgPSBR
UG9pbnRGKGVuZEFyZWEueCgpLCBlbmRBcmVhLmNlbnRlcigpLnkoKSk7CisgICAgY29uc3QgUVBv
aW50RiB2aWV3cG9ydEhvdHNwb3QgPSBRUG9pbnRGKHgsIC8qIEZJWE1FOiB2aXNpYmxlQ2VudGVy
ICovIHZpZXdwb3J0UmVjdC5jZW50ZXIoKS55KCkpOworCisgICAgUVBvaW50RiBlbmRQb3NpdGlv
biA9IGhvdHNwb3QgKiBlbmRJdGVtU2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Q7CisgICAgUVJlY3RG
IGVuZFBvc1JhbmdlID0gbV9jb250cm9sbGVyLT5wb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2Nh
bGUoZW5kSXRlbVNjYWxlKTsKKworICAgIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQ
b3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgp
KTsKKworICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5kUG9zaXRpb24gLyBlbmRJ
dGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOworCisgICAgYW5p
bWF0ZUNvbnRlbnRSZWN0VmlzaWJsZShlbmRWaXNpYmxlQ29udGVudFJlY3QpOworfQorCit2b2lk
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6em9vbVRvQXJlYUdlc3R1cmVFbmRlZChj
b25zdCBRUG9pbnRGJiB0b3VjaFBvaW50LCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpCit7Cisg
ICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0
aW9uLgorICAgIEFTU0VSVChtX2NvbnRyb2xsZXItPmhhZFVzZXJJbnRlcmFjdGlvbigpKTsKKwor
ICAgIGlmICghdGFyZ2V0QXJlYS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX2NvbnRyb2xsZXItPmhhc1N1c3BlbmRlZENvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgaW50IG1hcmdpbiA9IDEwOyAvLyBXZSB3YW50IGF0IGxlYXN0IGEgbGl0dGxl
IGJpdCBvZiBtYXJnaW4uCisgICAgUVJlY3RGIGVuZEFyZWEgPSBtX2NvbnRyb2xsZXItPmNvbnZl
cnRUb1ZpZXdwb3J0KHRhcmdldEFyZWEuYWRqdXN0ZWQoLW1hcmdpbiwgLW1hcmdpbiwgbWFyZ2lu
LCBtYXJnaW4pKTsKKworICAgIGNvbnN0IFFSZWN0RiB2aWV3cG9ydFJlY3QgPSBtX3ZpZXdwb3J0
SXRlbS0+Ym91bmRpbmdSZWN0KCk7CisKKyAgICBxcmVhbCB0YXJnZXRDU1NTY2FsZSA9IHZpZXdw
b3J0UmVjdC5zaXplKCkud2lkdGgoKSAvIGVuZEFyZWEuc2l6ZSgpLndpZHRoKCk7CisgICAgcXJl
YWwgZW5kQ1NTU2NhbGUgPSBtX2NvbnRyb2xsZXItPmlubmVyQm91bmRlZENvbnRlbnRzU2NhbGUo
cU1pbih0YXJnZXRDU1NTY2FsZSwgcXJlYWwoMi41KSkpOworICAgIHFyZWFsIGVuZEl0ZW1TY2Fs
ZSA9IG1fY29udHJvbGxlci0+Y29udmVydFRvVmlld3BvcnQoZW5kQ1NTU2NhbGUpOworICAgIHFy
ZWFsIGN1cnJlbnRTY2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsKKworICAgIC8v
IFdlIHdhbnQgdG8gZW5kIHVwIHdpdGggdGhlIHRhcmdldCBhcmVhIGZpbGxpbmcgdGhlIHdob2xl
IHdpZHRoIG9mIHRoZSB2aWV3cG9ydCAoaWYgcG9zc2libGUpLAorICAgIC8vIGFuZCBjZW50cmFs
aXplZCB2ZXJ0aWNhbGx5IHdoZXJlIHRoZSB1c2VyIHJlcXVlc3RlZCB6b29tLiBUaHVzIG91ciBo
b3RzcG90IGlzIHRoZSBjZW50ZXIgb2YKKyAgICAvLyB0aGUgdGFyZ2V0QXJlYSB4LXdpc2UgYW5k
IHRoZSByZXF1ZXN0ZWQgem9vbSBwb3NpdGlvbiwgeS13aXNlLgorICAgIGNvbnN0IFFQb2ludEYg
aG90c3BvdCA9IFFQb2ludEYoZW5kQXJlYS5jZW50ZXIoKS54KCksIG1fY29udHJvbGxlci0+Y29u
dmVydFRvVmlld3BvcnQodG91Y2hQb2ludC55KCkpKTsKKyAgICBjb25zdCBRUG9pbnRGIHZpZXdw
b3J0SG90c3BvdCA9IHZpZXdwb3J0UmVjdC5jZW50ZXIoKTsKKworICAgIFFQb2ludEYgZW5kUG9z
aXRpb24gPSBob3RzcG90ICogZW5kQ1NTU2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Q7CisKKyAgICBR
UmVjdEYgZW5kUG9zUmFuZ2UgPSBtX2NvbnRyb2xsZXItPnBvc2l0aW9uUmFuZ2VGb3JDb250ZW50
QXRTY2FsZShlbmRJdGVtU2NhbGUpOworICAgIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihl
bmRQb3NSYW5nZS50b3BMZWZ0KCksIGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdo
dCgpKTsKKworICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5kUG9zaXRpb24gLyBl
bmRJdGVtU2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOworCisgICAg
ZW51bSB7IFpvb21JbiwgWm9vbUJhY2ssIFpvb21PdXQsIE5vWm9vbSB9IHpvb21BY3Rpb24gPSBa
b29tSW47CisKKyAgICBpZiAoIW1fc2NhbGVTdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8g
Wm9vbSBiYWNrIG91dCBpZiBhdHRlbXB0aW5nIHRvIHNjYWxlIHRvIHRoZSBzYW1lIGN1cnJlbnQg
c2NhbGUsIG9yCisgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gY29udGludWUgc2NhbGluZyBvdXQg
ZnJvbSB0aGUgaW5uZXIgbW9zdCBsZXZlbC4KKyAgICAgICAgLy8gVXNlIGZ1enp5IGNvbXBhcmUg
d2l0aCBhIGZpeGVkIGVycm9yIHRvIGJlIGFibGUgdG8gZGVhbCB3aXRoIGxhcmdpc2ggZGlmZmVy
ZW5jZXMgZHVlIHRvIHBpeGVsIHJvdW5kaW5nLgorICAgICAgICBpZiAoZnV6enlDb21wYXJlKGVu
ZEl0ZW1TY2FsZSwgY3VycmVudFNjYWxlLCAwLjAxKSkgeworICAgICAgICAgICAgLy8gSWYgbW92
aW5nIHRoZSB2aWV3cG9ydCB3b3VsZCBleHBvc2UgbW9yZSBvZiB0aGUgdGFyZ2V0UmVjdCBhbmQg
bW92ZSBhdCBsZWFzdCA0MCBwaXhlbHMsIHVwZGF0ZSBwb3NpdGlvbiBidXQgZG8gbm90IHNjYWxl
IG91dC4KKyAgICAgICAgICAgIFFSZWN0RiBjdXJyZW50Q29udGVudFJlY3QodmlzaWJsZUNvbnRl
bnRzUmVjdCgpKTsKKyAgICAgICAgICAgIFFSZWN0RiB0YXJnZXRJbnRlcnNlY3Rpb24gPSBlbmRW
aXNpYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0ZWQodGFyZ2V0QXJlYSk7CisgICAgICAgICAgICBp
ZiAoIWN1cnJlbnRDb250ZW50UmVjdC5jb250YWlucyh0YXJnZXRJbnRlcnNlY3Rpb24pCisgICAg
ICAgICAgICAgICAgICAgICYmIChxQWJzKGVuZFZpc2libGVDb250ZW50UmVjdC50b3AoKSAtIGN1
cnJlbnRDb250ZW50UmVjdC50b3AoKSkgPj0gNDAKKyAgICAgICAgICAgICAgICAgICAgfHwgcUFi
cyhlbmRWaXNpYmxlQ29udGVudFJlY3QubGVmdCgpIC0gY3VycmVudENvbnRlbnRSZWN0LmxlZnQo
KSkgPj0gNDApKQorICAgICAgICAgICAgICAgIHpvb21BY3Rpb24gPSBOb1pvb207CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21CYWNrOworICAgICAg
ICB9IGVsc2UgaWYgKGZ1enp5Q29tcGFyZShlbmRJdGVtU2NhbGUsIG1fem9vbU91dFNjYWxlLCAw
LjAxKSkKKyAgICAgICAgICAgIHpvb21BY3Rpb24gPSBab29tQmFjazsKKyAgICAgICAgZWxzZSBp
ZiAoZW5kSXRlbVNjYWxlIDwgY3VycmVudFNjYWxlKQorICAgICAgICAgICAgem9vbUFjdGlvbiA9
IFpvb21PdXQ7CisgICAgfQorCisgICAgc3dpdGNoICh6b29tQWN0aW9uKSB7CisgICAgY2FzZSBa
b29tSW46CisgICAgICAgIG1fc2NhbGVTdGFjay5hcHBlbmQoU2NhbGVTdGFja0l0ZW0oY3VycmVu
dFNjYWxlLCBtX3ZpZXdwb3J0SXRlbS0+Y29udGVudFBvcygpLngoKSkpOworICAgICAgICBtX3pv
b21PdXRTY2FsZSA9IGVuZEl0ZW1TY2FsZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBab29t
QmFjazogeworICAgICAgICBTY2FsZVN0YWNrSXRlbSBsYXN0U2NhbGUgPSBtX3NjYWxlU3RhY2su
dGFrZUxhc3QoKTsKKyAgICAgICAgZW5kSXRlbVNjYWxlID0gbGFzdFNjYWxlLnNjYWxlOworICAg
ICAgICBlbmRDU1NTY2FsZSA9IG1fY29udHJvbGxlci0+Y29udmVydEZyb21WaWV3cG9ydChsYXN0
U2NhbGUuc2NhbGUpOworICAgICAgICAvLyBSZWNhbGN1bGF0ZSBlbmRQb3NpdGlvbiBhbmQgYm91
bmQgaXQgYWNjb3JkaW5nIHRvIG5ldyBzY2FsZS4KKyAgICAgICAgZW5kUG9zaXRpb24uc2V0WSho
b3RzcG90LnkoKSAqIGVuZENTU1NjYWxlIC0gdmlld3BvcnRIb3RzcG90LnkoKSk7CisgICAgICAg
IGVuZFBvc2l0aW9uLnNldFgobGFzdFNjYWxlLnhQb3NpdGlvbik7CisgICAgICAgIGVuZFBvc1Jh
bmdlID0gbV9jb250cm9sbGVyLT5wb3NpdGlvblJhbmdlRm9yQ29udGVudEF0U2NhbGUoZW5kSXRl
bVNjYWxlKTsKKyAgICAgICAgZW5kUG9zaXRpb24gPSBib3VuZFBvc2l0aW9uKGVuZFBvc1Jhbmdl
LnRvcExlZnQoKSwgZW5kUG9zaXRpb24sIGVuZFBvc1JhbmdlLmJvdHRvbVJpZ2h0KCkpOworICAg
ICAgICBlbmRWaXNpYmxlQ29udGVudFJlY3QgPSBRUmVjdEYoZW5kUG9zaXRpb24gLyBlbmRJdGVt
U2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBlbmRJdGVtU2NhbGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBab29tT3V0OgorICAgICAgICAvLyBVbnN0YWNrIGFsbCBzY2Fs
ZS1sZXZlbHMgZGVlcGVyIHRoYW4gdGhlIG5ldyBsZXZlbCwgc28gYSB6b29tLWJhY2sgd29uJ3Qg
ZW5kIHVwIHpvb21pbmcgaW4uCisgICAgICAgIHdoaWxlICghbV9zY2FsZVN0YWNrLmlzRW1wdHko
KSAmJiBtX3NjYWxlU3RhY2subGFzdCgpLnNjYWxlID49IGVuZEl0ZW1TY2FsZSkKKyAgICAgICAg
ICAgIG1fc2NhbGVTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fem9vbU91dFNjYWxlID0g
ZW5kSXRlbVNjYWxlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5vWm9vbToKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgYW5pbWF0ZUNvbnRlbnRSZWN0VmlzaWJsZShlbmRWaXNpYmxl
Q29udGVudFJlY3QpOworfQorCitRUmVjdEYgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0
OjpuZWFyZXN0VmFsaWRWaXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKK3sKKyAgICBmbG9hdCBj
c3NTY2FsZSA9IG1fY29udHJvbGxlci0+Y29udmVydEZyb21WaWV3cG9ydChtX3BhZ2VJdGVtLT5j
b250ZW50c1NjYWxlKCkpOworICAgIGZsb2F0IGVuZEl0ZW1TY2FsZSA9IG1fY29udHJvbGxlci0+
Y29udmVydFRvVmlld3BvcnQobV9jb250cm9sbGVyLT5pbm5lckJvdW5kZWRDb250ZW50c1NjYWxl
KGNzc1NjYWxlKSk7CisKKyAgICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3cG9y
dEl0ZW0tPmJvdW5kaW5nUmVjdCgpOworICAgIFFQb2ludEYgdmlld3BvcnRIb3RzcG90ID0gdmll
d3BvcnRSZWN0LmNlbnRlcigpOworICAgIFFQb2ludEYgZW5kUG9zaXRpb24gPSBtX3ZpZXdwb3J0
SXRlbS0+bWFwVG9XZWJDb250ZW50KHZpZXdwb3J0SG90c3BvdCkgKiBlbmRJdGVtU2NhbGUgLSB2
aWV3cG9ydEhvdHNwb3Q7CisKKyAgICBGbG9hdFJlY3QgZW5kUG9zUmFuZ2UgPSBtX2NvbnRyb2xs
ZXItPnBvc2l0aW9uUmFuZ2VGb3JDb250ZW50QXRTY2FsZShlbmRJdGVtU2NhbGUpOworICAgIGVu
ZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS5taW5YTWluWUNvcm5lcigpLCBl
bmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UubWF4WE1heFlDb3JuZXIoKSk7CisKKyAgICBRUmVjdEYg
ZW5kVmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9y
dFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKKworICAgIHJldHVybiBlbmRWaXNpYmxlQ29u
dGVudFJlY3Q7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpzZXRD
b250ZW50c1Bvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsUG9pbnQpCit7CisgICAgUVBv
aW50RiBuZXdQb3NpdGlvbihtX3BhZ2VJdGVtLT5wb3MoKSArIFFQb2ludEYobG9jYWxQb2ludCkp
OworICAgIG1fdmlld3BvcnRJdGVtLT5zZXRDb250ZW50UG9zKG5ld1Bvc2l0aW9uKTsKKyAgICB1
cGRhdGVWaWV3cG9ydENvbnRyb2xsZXIoKTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50UXQ6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgbG9jYWxTY2FsZSwgYm9vbCB0cmVh
dEFzSW5pdGlhbFZhbHVlKQoreworICAgIGlmICh0cmVhdEFzSW5pdGlhbFZhbHVlKSB7CisgICAg
ICAgIG1fem9vbU91dFNjYWxlID0gMDsKKyAgICAgICAgbV9zY2FsZVN0YWNrLmNsZWFyKCk7Cisg
ICAgICAgIHNldENvbnRlbnRSZWN0VmlzaWJsZVBvc2l0aW9uQXRTY2FsZShRUG9pbnRGKCksIGxv
Y2FsU2NhbGUpOworICAgIH0gZWxzZQorICAgICAgICBzY2FsZUNvbnRlbnQobG9jYWxTY2FsZSk7
CisKKyAgICB1cGRhdGVWaWV3cG9ydENvbnRyb2xsZXIoKTsKK30KKwordm9pZCBQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50UXQ6OnNldENvbnRlbnRzUmVjdFRvTmVhcmVzdFZhbGlkQm91bmRz
KCkKK3sKKyAgICBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkKG1fY29udHJvbGxlcik7Cisg
ICAgZmxvYXQgdmFsaWRDU1NTY2FsZSA9IG1fY29udHJvbGxlci0+aW5uZXJCb3VuZGVkQ29udGVu
dHNTY2FsZShtX2NvbnRyb2xsZXItPmNvbnZlcnRGcm9tVmlld3BvcnQobV9wYWdlSXRlbS0+Y29u
dGVudHNTY2FsZSgpKSk7CisgICAgc2V0Q29udGVudFJlY3RWaXNpYmxlUG9zaXRpb25BdFNjYWxl
KG5lYXJlc3RWYWxpZFZpc2libGVDb250ZW50c1JlY3QoKS50b3BMZWZ0KCksIG1fY29udHJvbGxl
ci0+Y29udmVydFRvVmlld3BvcnQodmFsaWRDU1NTY2FsZSkpOworfQorCit2b2lkIFBhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6ZGlkUmVzdW1lQ29udGVudCgpCit7CisgICAgdXBkYXRl
Vmlld3BvcnRDb250cm9sbGVyKCk7Cit9CisKK2Jvb2wgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNs
aWVudFF0OjphbGxvd3NVc2VyU2NhbGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udHJv
bGxlci0+YWxsb3dzVXNlclNjYWxpbmcoKTsKK30KKworcXJlYWwgUGFnZVZpZXdwb3J0Q29udHJv
bGxlckNsaWVudFF0OjpkZXZpY2VQaXhlbFJhdGlvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9j
b250cm9sbGVyLT5kZXZpY2VQaXhlbFJhdGlvKCk7Cit9CisKK3FyZWFsIFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRRdDo6bWluaW11bUNvbnRlbnRzU2NhbGUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2NvbnRyb2xsZXItPm1pbmltdW1Db250ZW50c1NjYWxlKCk7Cit9CisKK3FyZWFsIFBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6bWF4aW11bUNvbnRlbnRzU2NhbGUoKSBjb25z
dAoreworICAgIHJldHVybiBtX2NvbnRyb2xsZXItPm1heGltdW1Db250ZW50c1NjYWxlKCk7Cit9
CisKK3FyZWFsIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6Y3VycmVudENvbnRlbnRz
U2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7
Cit9CisKK1FTaXplRiBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OmNvbnRlbnRzTGF5
b3V0U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udHJvbGxlci0+Y29udGVudHNMYXlv
dXRTaXplKCk7Cit9CisKK2Jvb2wgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpzY3Jv
bGxBbmltYXRpb25BY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZpZXdwb3J0SXRlbS0+
aXNGbGlja2luZygpOworfQorCitib29sIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6
cGFuR2VzdHVyZUFjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udHJvbGxlci0+aGFk
VXNlckludGVyYWN0aW9uKCkgJiYgbV92aWV3cG9ydEl0ZW0tPmlzRHJhZ2dpbmcoKTsKK30KKwor
dm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnBhbkdlc3R1cmVTdGFydGVkKGNv
bnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7Cisg
ICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0
aW9uLgorICAgIEFTU0VSVChtX2NvbnRyb2xsZXItPmhhZFVzZXJJbnRlcmFjdGlvbigpKTsKKwor
ICAgIG1fdmlld3BvcnRJdGVtLT5oYW5kbGVGbGlja2FibGVNb3VzZVByZXNzKHBvc2l0aW9uLCBl
dmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29v
cmRpbmF0ZXMgPSBwb3NpdGlvbjsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50UXQ6OnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBx
aW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCit7CisgICAgbV92aWV3cG9ydEl0ZW0tPmhhbmRs
ZUZsaWNrYWJsZU1vdXNlTW92ZShwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAg
IG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247Cit9CisK
K3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpwYW5HZXN0dXJlRW5kZWQoY29u
c3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcykKK3sKKyAg
ICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxpY2thYmxlTW91c2VSZWxlYXNlKHBvc2l0aW9uLCBl
dmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29v
cmRpbmF0ZXMgPSBwb3NpdGlvbjsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50UXQ6OnBhbkdlc3R1cmVDYW5jZWxsZWQoKQoreworICAgIC8vIFJlc2V0IHRoZSB2ZWxvY2l0
eSBzYW1wbGVzIG9mIHRoZSBmbGlja2FibGUuCisgICAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBj
YWxsZWQgYnkgdGhlIHJlY29nbml6ZXIgaWYgd2UgaGF2ZSBhIHJlY29nbml6ZWQKKyAgICAvLyBw
YW4gZ2VzdHVyZSBhbmQgcmVjZWl2ZSBhIHRvdWNoIGV2ZW50IHdpdGggbXVsdGlwbGUgdG91Y2gg
cG9pbnRzCisgICAgLy8gKGllLiB0cmFuc2l0aW9uIHRvIGEgcGluY2ggZ2VzdHVyZSkgYXMgaXQg
ZG9lcyBub3QgbW92ZSB0aGUgY29udGVudAorICAgIC8vIGJhY2sgaW5zaWRlIHZhbGlkIGJvdW5k
cy4KKyAgICAvLyBXaGVuIHRoZSBwaW5jaCBnZXN0dXJlIGVuZHMsIHRoZSBjb250ZW50IGlzIHBv
c2l0aW9uZWQgYW5kIHNjYWxlZAorICAgIC8vIGJhY2sgdG8gdmFsaWQgYm91bmRhcmllcy4KKyAg
ICBtX3ZpZXdwb3J0SXRlbS0+Y2FuY2VsRmxpY2soKTsKK30KKworYm9vbCBQYWdlVmlld3BvcnRD
b250cm9sbGVyQ2xpZW50UXQ6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zY2FsZUFuaW1hdGlvbi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlJ1
bm5pbmc7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0OjpjYW5jZWxT
Y3JvbGxBbmltYXRpb24oKQoreworICAgIGlmICghc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSBwYW4gZ2VzdHVyZSByZWNvZ25pemVyIHJl
Y2VpdmVzIGEgdG91Y2ggYmVnaW4gZXZlbnQKKyAgICAvLyBkdXJpbmcgYW4gb25nb2luZyBraW5l
dGljIHNjcm9sbCBhbmltYXRpb24gb2YgYSBwcmV2aW91cworICAgIC8vIHBhbiBnZXN0dXJlLCB0
aGUgYW5pbWF0aW9uIGlzIHN0b3BwZWQgYW5kIHRoZSBjb250ZW50IGlzCisgICAgLy8gaW1tZWRp
YXRlbHkgcG9zaXRpb25lZCBiYWNrIHRvIHZhbGlkIGJvdW5kYXJpZXMuCisKKyAgICBtX3ZpZXdw
b3J0SXRlbS0+Y2FuY2VsRmxpY2soKTsKKyAgICBzZXRDb250ZW50c1JlY3RUb05lYXJlc3RWYWxp
ZEJvdW5kcygpOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6aW50
ZXJydXB0U2NhbGVBbmltYXRpb24oKQoreworICAgIC8vIFRoaXMgaW50ZXJydXB0cyB0aGUgc2Nh
bGUgYW5pbWF0aW9uIGV4YWN0bHkgd2hlcmUgaXQgaXMsIGV2ZW4gaWYgaXQgaXMgb3V0IG9mIGJv
dW5kcy4KKyAgICBtX3NjYWxlQW5pbWF0aW9uLT5zdG9wKCk7Cit9CisKK2Jvb2wgUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudFF0OjpwaW5jaEdlc3R1cmVBY3RpdmUoKSBjb25zdAoreworICAg
IHJldHVybiBtX2NvbnRyb2xsZXItPmhhZFVzZXJJbnRlcmFjdGlvbigpICYmIChtX3BpbmNoU3Rh
cnRTY2FsZSA+IDApOworfQorCit2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6
cGluY2hHZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRD
b29yZGluYXRlcykKK3sKKyAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBhcyBhIHJlc3VsdCBv
ZiBhIHVzZXIgaW50ZXJhY3Rpb24uCisgICAgQVNTRVJUKG1fY29udHJvbGxlci0+aGFkVXNlcklu
dGVyYWN0aW9uKCkpOworCisgICAgaWYgKCFtX2NvbnRyb2xsZXItPmFsbG93c1VzZXJTY2FsaW5n
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2NhbGVTdGFjay5jbGVhcigpOworICAgIG1f
em9vbU91dFNjYWxlID0gMC4wOworCisgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLnJlc2V0KG5l
dyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyKG1fY29udHJvbGxlciwgVmlld3BvcnRVcGRhdGVEZWZl
cnJlcjo6RGVmZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOworCisgICAgbV9sYXN0UGluY2hD
ZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgPSBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGlu
YXRlczsKKyAgICBtX3BpbmNoU3RhcnRTY2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUo
KTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVy
ZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRp
bmF0ZXMsIHFyZWFsIHRvdGFsU2NhbGVGYWN0b3IpCit7CisgICAgQVNTRVJUKG1fY29udHJvbGxl
ci0+aGFzU3VzcGVuZGVkQ29udGVudCgpKTsKKworICAgIGlmICghbV9jb250cm9sbGVyLT5hbGxv
d3NVc2VyU2NhbGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyAgQ2hhbmdlcyBvZiB0
aGUgY2VudGVyIHBvc2l0aW9uIHNob3VsZCBtb3ZlIHRoZSBwYWdlIGV2ZW4gaWYgdGhlIHpvb20g
ZmFjdG9yIGRvZXMgbm90IGNoYW5nZS4KKyAgICBjb25zdCBxcmVhbCBjc3NTY2FsZSA9IG1fY29u
dHJvbGxlci0+Y29udmVydEZyb21WaWV3cG9ydChtX3BpbmNoU3RhcnRTY2FsZSAqIHRvdGFsU2Nh
bGVGYWN0b3IpOworCisgICAgLy8gQWxsb3cgem9vbWluZyBvdXQgYmV5b25kIG1pbWltdW0gc2Nh
bGUgb24gcGFnZXMgdGhhdCBkbyBub3QgZXhwbGljaXRseSBkaXNhbGxvdyBpdC4KKyAgICBjb25z
dCBxcmVhbCB0YXJnZXRJdGVtU2NhbGUgPSBtX2NvbnRyb2xsZXItPmNvbnZlcnRUb1ZpZXdwb3J0
KG1fY29udHJvbGxlci0+b3V0ZXJCb3VuZGVkQ29udGVudHNTY2FsZShjc3NTY2FsZSkpOworCisg
ICAgc2NhbGVDb250ZW50KHRhcmdldEl0ZW1TY2FsZSwgbV92aWV3cG9ydEl0ZW0tPm1hcFRvV2Vi
Q29udGVudChwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcykpOworCisgICAgY29uc3Qg
UVBvaW50RiBwb3NpdGlvbkRpZmYgPSBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyAt
IG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOworICAgIG1fbGFzdFBpbmNo
Q2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRp
bmF0ZXM7CisKKyAgICBtX3ZpZXdwb3J0SXRlbS0+c2V0Q29udGVudFBvcyhtX3ZpZXdwb3J0SXRl
bS0+Y29udGVudFBvcygpIC0gcG9zaXRpb25EaWZmKTsKKworICAgIC8vIEluZm9ybSB0aGUgd2Vi
IHByb2Nlc3MgdG8gcmVuZGVyIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBhcmVhIHdpdGggbG93LXJl
c29sdXRpb24gdGlsZXMgbm90CisgICAgLy8gdG8gZXhwb3NlIHdoaXRlIHRpbGVzIGR1cmluZyBw
aW5jaCBnZXN0dXJlcyBhbmQgdG8gc2hvdyBmaXhlZCBwb3NpdGlvbiBsYXllcnMgY29ycmVjdGx5
LgorICAgIC8vIFRoZSBhY3R1YWwgc2NhbGUgaXMgcmVzdG9yZWQgYWZ0ZXIgdGhlIHBpbmNoIGdl
c3R1cmUgZW5kcy4KKyAgICB1cGRhdGVWaWV3cG9ydENvbnRyb2xsZXIoUVBvaW50RigpLCAxKTsK
K30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OnBpbmNoR2VzdHVyZUVu
ZGVkKCkKK3sKKyAgICBBU1NFUlQobV9jb250cm9sbGVyLT5oYXNTdXNwZW5kZWRDb250ZW50KCkp
OworCisgICAgaWYgKCFtX2NvbnRyb2xsZXItPmFsbG93c1VzZXJTY2FsaW5nKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcGluY2hTdGFydFNjYWxlID0gLTE7CisKKyAgICBhbmltYXRlQ29u
dGVudFJlY3RWaXNpYmxlKG5lYXJlc3RWYWxpZFZpc2libGVDb250ZW50c1JlY3QoKSk7CisgICAg
bV9zY2FsZVVwZGF0ZURlZmVycmVyLnJlc2V0KCk7IC8vIENsZWFyIGFmdGVyIHN0YXJ0aW5nIHBv
dGVudGlhbCBhbmltYXRpb24sIHdoaWNoIHRha2VzIG92ZXIgZGVmZXJyaW5nLgorfQorCit2b2lk
IFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6cGluY2hHZXN0dXJlQ2FuY2VsbGVkKCkK
K3sKKyAgICBtX3BpbmNoU3RhcnRTY2FsZSA9IC0xOworICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJl
ci5yZXNldCgpOworfQorCitRUmVjdEYgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojp2
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKK3sKKyAgICBjb25zdCBRUmVjdEYgdmlzaWJsZVJl
Y3QobV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLmludGVyc2VjdGVkKG1fcGFnZUl0ZW0t
PmJvdW5kaW5nUmVjdCgpKSk7CisgICAgcmV0dXJuIG1fdmlld3BvcnRJdGVtLT5tYXBSZWN0VG9X
ZWJDb250ZW50KHZpc2libGVSZWN0KTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50UXQ6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZSgpCit7CisgICAgLy8gRW1pdCBmb3IgdGVz
dGluZyBwdXJwb3Nlcywgc28gdGhhdCBpdCBjYW4gYmUgdmVyaWZpZWQgdGhhdAorICAgIC8vIHdl
IGRpZG4ndCBkbyBzY2FsZSBhZGp1c3RtZW50LgorICAgIGVtaXQgbV92aWV3cG9ydEl0ZW0tPmV4
cGVyaW1lbnRhbCgpLT50ZXN0KCktPmNvbnRlbnRzU2NhbGVDb21taXR0ZWQoKTsKKworICAgIGlm
ICghbV9jb250cm9sbGVyLT5oYXNTdXNwZW5kZWRDb250ZW50KCkpCisgICAgICAgIHNldENvbnRl
bnRzUmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKCk7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudFF0OjpkaWRDaGFuZ2VWaXNpYmxlQ29udGVudHMoKQoreworICAgIHFyZWFs
IHNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpOworCisgICAgaWYgKHNjYWxlICE9
IG1fbGFzdENvbW1pdHRlZFNjYWxlKQorICAgICAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBl
cmltZW50YWwoKS0+dGVzdCgpLT5jb250ZW50c1NjYWxlQ29tbWl0dGVkKCk7CisgICAgbV9sYXN0
Q29tbWl0dGVkU2NhbGUgPSBzY2FsZTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHVwZGF0ZVBhaW50
Tm9kZSBpcyBhbHdheXMgY2FsbGVkIGJlZm9yZSBwYWludGluZy4KKyAgICBtX3BhZ2VJdGVtLT51
cGRhdGUoKTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQ6OmRpZENo
YW5nZVZpZXdwb3J0QXR0cmlidXRlcygpCit7CisgICAgLy8gTWFrZSBzdXJlIHdlIGFwcGx5IHRo
ZSBuZXcgaW5pdGlhbCBzY2FsZSB3aGVuIGRlZmVycmluZyBlbmRzLgorICAgIFZpZXdwb3J0VXBk
YXRlRGVmZXJyZXIgZ3VhcmQobV9jb250cm9sbGVyKTsKKworICAgIGVtaXQgbV92aWV3cG9ydEl0
ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPmRldmljZVBpeGVsUmF0aW9DaGFuZ2VkKCk7Cisg
ICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+dmlld3BvcnRD
aGFuZ2VkKCk7Cit9CisKK3ZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0Ojp1cGRh
dGVWaWV3cG9ydENvbnRyb2xsZXIoY29uc3QgUVBvaW50RiYgdHJhamVjdG9yeSwgcXJlYWwgc2Nh
bGUpCit7CisgICAgRmxvYXRSZWN0IGN1cnJlbnRWaXNpYmxlUmVjdCh2aXNpYmxlQ29udGVudHNS
ZWN0KCkpOworICAgIGZsb2F0IHZpZXdwb3J0U2NhbGUgPSAoc2NhbGUgPCAwKSA/IHZpZXdwb3J0
U2NhbGVGb3JSZWN0KGN1cnJlbnRWaXNpYmxlUmVjdCkgOiBzY2FsZTsKKyAgICBtX2NvbnRyb2xs
ZXItPnNldFZpc2libGVDb250ZW50c1JlY3QoY3VycmVudFZpc2libGVSZWN0LCB2aWV3cG9ydFNj
YWxlLCB0cmFqZWN0b3J5KTsKK30KKwordm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
UXQ6OnNjYWxlQ29udGVudChxcmVhbCBpdGVtU2NhbGUsIGNvbnN0IFFQb2ludEYmIGNlbnRlcklu
Q1NTQ29vcmRpbmF0ZXMpCit7CisgICAgUVBvaW50RiBvbGRQaW5jaENlbnRlck9uVmlld3BvcnQg
PSBtX3ZpZXdwb3J0SXRlbS0+bWFwRnJvbVdlYkNvbnRlbnQoY2VudGVySW5DU1NDb29yZGluYXRl
cyk7CisgICAgbV9wYWdlSXRlbS0+c2V0Q29udGVudHNTY2FsZShpdGVtU2NhbGUpOworICAgIFFQ
b2ludEYgbmV3UGluY2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21X
ZWJDb250ZW50KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOworICAgIG1fdmlld3BvcnRJdGVtLT5z
ZXRDb250ZW50UG9zKG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkgKyAobmV3UGluY2hDZW50
ZXJPblZpZXdwb3J0IC0gb2xkUGluY2hDZW50ZXJPblZpZXdwb3J0KSk7Cit9CisKK2Zsb2F0IFBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDo6dmlld3BvcnRTY2FsZUZvclJlY3QoY29uc3Qg
UVJlY3RGJiByZWN0KSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4obV92
aWV3cG9ydEl0ZW0tPndpZHRoKCkpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlY3Qud2lkdGgoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjaW5jbHVkZSAibW9jX1BhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRRdC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTdiZDUyYmM1YzAzYWFmZGZjMzcxZjQxMWM5YzZkMTI4NDkzN2JlNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9QYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50UXQuaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBCZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1pbkB3ZWJraXQub3JnPgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dy
YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2lmbmRlZiBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXRfaAorI2RlZmluZSBQYWdl
Vmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXRfaAorCisjaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnQuaCIKKyNp
bmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFFQb2ludEY+CisjaW5jbHVkZSA8UVNjb3BlZFBv
aW50ZXI+CisjaW5jbHVkZSA8UVZhcmlhbnQ+CisjaW5jbHVkZSA8UVZhcmlhbnRBbmltYXRpb24+
CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVF1aWNrV2ViUGFnZTsKK2NsYXNzIFFRdWlj
a1dlYlZpZXc7CitjbGFzcyBRUmVjdEY7CitRVF9FTkRfTkFNRVNQQUNFCisKK2NsYXNzIFFXZWJL
aXRUZXN0OworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUGFnZVZpZXdwb3J0Q29udHJv
bGxlckNsaWVudFF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50IHsKKyAgICBRX09CSkVDVAorCitwdWJsaWM6CisgICAgUGFnZVZpZXdwb3J0Q29u
dHJvbGxlckNsaWVudFF0KFFRdWlja1dlYlZpZXcqLCBRUXVpY2tXZWJQYWdlKik7CisgICAgflBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdCgpOworCisgICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgbG9jYWxQb2ludCk7CisgICAgdmlydHVh
bCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQgbG9jYWxTY2FsZSwgYm9vbCB0cmVhdEFzSW5p
dGlhbFZhbHVlKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRSZXN1bWVDb250ZW50KCk7CisgICAg
dmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZSgpOworICAgIHZpcnR1YWwgdm9pZCBk
aWRDaGFuZ2VWaXNpYmxlQ29udGVudHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmll
d3BvcnRBdHRyaWJ1dGVzKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udHJvbGxlcihQYWdl
Vmlld3BvcnRDb250cm9sbGVyKiBjb250cm9sbGVyKSB7IG1fY29udHJvbGxlciA9IGNvbnRyb2xs
ZXI7IH0KKworICAgIC8vIEFkZGl0aW9uYWwgbWV0aG9kcyBjdXJyZW50bHkgb25seSByZWxldmFu
dCBpbiB0aGUgUVF1aWNrIGNvbnRleHQuCisgICAgdm9pZCB0b3VjaEJlZ2luKCk7CisgICAgdm9p
ZCB0b3VjaEVuZCgpOworCisgICAgYm9vbCBzY3JvbGxBbmltYXRpb25BY3RpdmUoKSBjb25zdDsK
KyAgICB2b2lkIGNhbmNlbFNjcm9sbEFuaW1hdGlvbigpOworCisgICAgYm9vbCBwYW5HZXN0dXJl
QWN0aXZlKCkgY29uc3Q7CisgICAgdm9pZCBwYW5HZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRG
JiBwb3NpdGlvbiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB2b2lkIHBhbkdl
c3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRU
aW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQgcGFuR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYm
IHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQgcGFuR2Vz
dHVyZUNhbmNlbGxlZCgpOworCisgICAgYm9vbCBzY2FsZUFuaW1hdGlvbkFjdGl2ZSgpIGNvbnN0
OworICAgIHZvaWQgaW50ZXJydXB0U2NhbGVBbmltYXRpb24oKTsKKworICAgIGJvb2wgcGluY2hH
ZXN0dXJlQWN0aXZlKCkgY29uc3Q7CisgICAgdm9pZCBwaW5jaEdlc3R1cmVTdGFydGVkKGNvbnN0
IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzKTsKKyAgICB2b2lkIHBp
bmNoR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdw
b3J0Q29vcmRpbmF0ZXMsIHFyZWFsIHRvdGFsU2NhbGVGYWN0b3IpOworICAgIHZvaWQgcGluY2hH
ZXN0dXJlRW5kZWQoKTsKKyAgICB2b2lkIHBpbmNoR2VzdHVyZUNhbmNlbGxlZCgpOworCisgICAg
dm9pZCB6b29tVG9BcmVhR2VzdHVyZUVuZGVkKGNvbnN0IFFQb2ludEYmIHRvdWNoUG9pbnQsIGNv
bnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSk7CisgICAgdm9pZCBmb2N1c0VkaXRhYmxlQXJlYShjb25z
dCBRUmVjdEYmIGNhcmV0QXJlYSwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKTsKKworcHJpdmF0
ZSBRX1NMT1RTOgorICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBvZiBwb3NpdGlvbiB0aGF0IGFy
ZSBub3QgZHJpdmVuIGJ5IHVzLgorICAgIHZvaWQgcGFnZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKTsK
KworICAgIHZvaWQgc2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9u
OjpTdGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSk7CisKKyAgICB2b2lkIGZsaWNrTW92
ZVN0YXJ0ZWQoKTsgLy8gQ2FsbGVkIHdoZW4gcGFubmluZyBzdGFydHMuCisgICAgdm9pZCBmbGlj
a01vdmVFbmRlZCgpOyAvLyAgIENhbGxlZCB3aGVuIHBhbm5pbmcgKCsga2luZXRpYyBhbmltYXRp
b24pIGVuZHMuCisKK3ByaXZhdGU6CisgICAgY2xhc3MgU2NhbGVBbmltYXRpb24gOiBwdWJsaWMg
UVZhcmlhbnRBbmltYXRpb24geworICAgICAgICBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
UXQqIG1fY29udHJvbGxlckNsaWVudDsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjYWxlQW5pbWF0
aW9uKFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdCogcGFyZW50KQorICAgICAgICAgICAg
OiBRVmFyaWFudEFuaW1hdGlvbihwYXJlbnQpCisgICAgICAgICAgICAsIG1fY29udHJvbGxlckNs
aWVudChwYXJlbnQpCisgICAgICAgIHsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVD
dXJyZW50VmFsdWUoY29uc3QgUVZhcmlhbnQmKTsKKyAgICB9OworCisgICAgc3RydWN0IFNjYWxl
U3RhY2tJdGVtIHsKKyAgICAgICAgU2NhbGVTdGFja0l0ZW0ocXJlYWwgc2NhbGUsIHFyZWFsIHhQ
b3NpdGlvbikKKyAgICAgICAgICAgIDogc2NhbGUoc2NhbGUpCisgICAgICAgICAgICAsIHhQb3Np
dGlvbih4UG9zaXRpb24pCisgICAgICAgIHsgfQorCisgICAgICAgIHFyZWFsIHNjYWxlOworICAg
ICAgICBxcmVhbCB4UG9zaXRpb247CisgICAgfTsKKworICAgIGZyaWVuZCBjbGFzcyBTY2FsZUFu
aW1hdGlvbjsKKyAgICBmcmllbmQgY2xhc3MgOjpRV2ViS2l0VGVzdDsKKworICAgIFBhZ2VWaWV3
cG9ydENvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKKyAgICBRUXVpY2tXZWJWaWV3KiBjb25zdCBt
X3ZpZXdwb3J0SXRlbTsKKyAgICBRUXVpY2tXZWJQYWdlKiBjb25zdCBtX3BhZ2VJdGVtOworCisg
ICAgYm9vbCBhbGxvd3NVc2VyU2NhbGluZygpIGNvbnN0OworICAgIHFyZWFsIGRldmljZVBpeGVs
UmF0aW8oKSBjb25zdDsKKyAgICBxcmVhbCBtaW5pbXVtQ29udGVudHNTY2FsZSgpIGNvbnN0Owor
ICAgIHFyZWFsIG1heGltdW1Db250ZW50c1NjYWxlKCkgY29uc3Q7CisgICAgcXJlYWwgY3VycmVu
dENvbnRlbnRzU2NhbGUoKSBjb25zdDsKKyAgICBRU2l6ZUYgY29udGVudHNMYXlvdXRTaXplKCkg
Y29uc3Q7CisKKyAgICBmbG9hdCB2aWV3cG9ydFNjYWxlRm9yUmVjdChjb25zdCBRUmVjdEYmKSBj
b25zdDsKKyAgICBRUmVjdEYgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OworICAgIFFSZWN0
RiBuZWFyZXN0VmFsaWRWaXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CisKKyAgICB2b2lkIHNl
dENvbnRlbnRzUmVjdFRvTmVhcmVzdFZhbGlkQm91bmRzKCk7CisgICAgdm9pZCB1cGRhdGVWaWV3
cG9ydENvbnRyb2xsZXIoY29uc3QgUVBvaW50RiYgdHJhamVjdG9yeSA9IFFQb2ludEYoKSwgcXJl
YWwgc2NhbGUgPSAtMSk7CisgICAgdm9pZCBzZXRDb250ZW50UmVjdFZpc2libGVQb3NpdGlvbkF0
U2NhbGUoY29uc3QgUVBvaW50RiYgbG9jYXRpb24sIHFyZWFsIGl0ZW1TY2FsZSk7CisgICAgdm9p
ZCBhbmltYXRlQ29udGVudFJlY3RWaXNpYmxlKGNvbnN0IFFSZWN0RiYgY29udGVudFJlY3QpOwor
ICAgIHZvaWQgc2NhbGVDb250ZW50KHFyZWFsIGl0ZW1TY2FsZSwgY29uc3QgUVBvaW50RiYgY2Vu
dGVySW5DU1NDb29yZGluYXRlcyA9IFFQb2ludEYoKSk7CisKKyAgICBRU2NvcGVkUG9pbnRlcjxW
aWV3cG9ydFVwZGF0ZURlZmVycmVyPiBtX3NjYWxlVXBkYXRlRGVmZXJyZXI7CisgICAgUVNjb3Bl
ZFBvaW50ZXI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV9zY3JvbGxVcGRhdGVEZWZlcnJlcjsK
KyAgICBRU2NvcGVkUG9pbnRlcjxWaWV3cG9ydFVwZGF0ZURlZmVycmVyPiBtX3RvdWNoVXBkYXRl
RGVmZXJyZXI7CisgICAgUVNjb3BlZFBvaW50ZXI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV9h
bmltYXRpb25VcGRhdGVEZWZlcnJlcjsKKworICAgIFNjYWxlQW5pbWF0aW9uKiBtX3NjYWxlQW5p
bWF0aW9uOworICAgIFFQb2ludEYgbV9sYXN0UGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0
ZXM7CisgICAgUVBvaW50RiBtX2xhc3RTY3JvbGxQb3NpdGlvbjsKKyAgICBxcmVhbCBtX3BpbmNo
U3RhcnRTY2FsZTsKKyAgICBxcmVhbCBtX2xhc3RDb21taXR0ZWRTY2FsZTsKKyAgICBxcmVhbCBt
X3pvb21PdXRTY2FsZTsKKyAgICBRTGlzdDxTY2FsZVN0YWNrSXRlbT4gbV9zY2FsZVN0YWNrOwor
ICAgIGJvb2wgbV9pZ25vcmVWaWV3cG9ydENoYW5nZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRHZXN0dXJlUmVjb2duaXplci5jcHAK
aW5kZXggOTNiNjQxNWMzOWY5ZGJkMWRmNjMwNTIwNzk2MmE1MGE5M2Y1NDVmMy4uOGM1N2M4ODk4
OWFiZDE0YjY1ZTJlYmU4YWU1MWQxNmE0NmIyZmZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmNwcApAQCAtNDEsOSArNDEsOSBA
QCB2b2lkIFF0R2VzdHVyZVJlY29nbml6ZXI6OnJlc2V0KCkKICAgICBtX3N0YXRlID0gTm9HZXN0
dXJlOwogfQogCi1RdFZpZXdwb3J0SGFuZGxlciogUXRHZXN0dXJlUmVjb2duaXplcjo6dmlld3Bv
cnRIYW5kbGVyKCkKK1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdCogUXRHZXN0dXJlUmVj
b2duaXplcjo6dmlld3BvcnRDb250cm9sbGVyKCkKIHsKLSAgICByZXR1cm4gbV9ldmVudEhhbmRs
ZXItPnZpZXdwb3J0SGFuZGxlcigpOworICAgIHJldHVybiBtX2V2ZW50SGFuZGxlci0+dmlld3Bv
cnRDb250cm9sbGVyKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdEdlc3R1cmVSZWNvZ25pemVyLmgKaW5kZXggNjhlMDMy
ZjQ3NDRjODYxN2Y3NTU3ZjYzMTIwOTI4Y2YyOTRhZDM3Mi4uMTE1ZTcxNzljMmM4MWRhNTYwMGU2
ZjhlMTZmNGRkM2MzOWUzMjMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0R2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRHZXN0dXJlUmVjb2duaXplci5oCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1jbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKK2NsYXNzIFBhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRRdDsKIGNsYXNzIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjsKIAogY2xhc3Mg
UXRHZXN0dXJlUmVjb2duaXplciB7CkBAIC00Niw3ICs0Niw3IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgR2VzdHVyZVJlY29nbml6ZWQKICAgICB9IG1fc3RhdGU7CiAKLSAgICBRdFZpZXdwb3J0SGFu
ZGxlciogdmlld3BvcnRIYW5kbGVyKCk7CisgICAgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dFF0KiB2aWV3cG9ydENvbnRyb2xsZXIoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29n
bml6ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29n
bml6ZXIuY3BwCmluZGV4IGJhOWM5MGEzZmJiOTg1YjNlZmY5Y2Q0ODkzODQ5ZmQ1NjFlNTE0YmMu
LjBhYWEwNjY5MDRkNDlhMmM2MjhmMmM0NmJiMjUxMGUyZGU2ODhkYjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAK
QEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJRdFBhbkdl
c3R1cmVSZWNvZ25pemVyLmgiCiAKLSNpbmNsdWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgorI2lu
Y2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdC5oIgogI2luY2x1ZGUgIlF0V2Vi
UGFnZUV2ZW50SGFuZGxlci5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTM4LDcgKzM4LDcg
QEAgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6UXRQYW5HZXN0dXJlUmVjb2duaXplcihRdFdlYlBh
Z2VFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGwKIAogYm9vbCBRdFBhbkdlc3R1cmVSZWNvZ25pemVy
Ojp1cGRhdGUoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHRvdWNoUG9pbnQsIHFpbnQ2
NCBldmVudFRpbWVzdGFtcE1pbGxpcykKIHsKLSAgICBpZiAoIXZpZXdwb3J0SGFuZGxlcigpKQor
ICAgIGlmICghdmlld3BvcnRDb250cm9sbGVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIG1fbGFzdFBvc2l0aW9uID0gdG91Y2hQb2ludC5wb3MoKTsKQEAgLTQ4LDcgKzQ4LDcgQEAg
Ym9vbCBRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjp1cGRhdGUoY29uc3QgUVRvdWNoRXZlbnQ6OlRv
dWNoUG9pbnQmIHRvdWNoUG9pbnQsIHEKICAgICBjYXNlIE5vR2VzdHVyZToKICAgICAgICAgbV9z
dGF0ZSA9IEdlc3R1cmVSZWNvZ25pdGlvblN0YXJ0ZWQ7CiAgICAgICAgIG1fZmlyc3RTY3JlZW5Q
b3NpdGlvbiA9IHRvdWNoUG9pbnQuc2NyZWVuUG9zKCk7Ci0gICAgICAgIHZpZXdwb3J0SGFuZGxl
cigpLT5jYW5jZWxTY3JvbGxBbmltYXRpb24oKTsKKyAgICAgICAgdmlld3BvcnRDb250cm9sbGVy
KCktPmNhbmNlbFNjcm9sbEFuaW1hdGlvbigpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Y2FzZSBHZXN0dXJlUmVjb2duaXRpb25TdGFydGVkOiB7CiAgICAgICAgIC8vIFRvIHN0YXJ0IHRo
ZSBnZXN0dXJlLCB0aGUgZGVsdGEgZnJvbSBzdGFydCBpbiBzY3JlZW4gY29vcmRpbmF0ZXMKQEAg
LTU4LDExICs1OCwxMSBAQCBib29sIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZShjb25z
dCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91Y2hQb2ludCwgcQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgIG1fc3RhdGUgPSBHZXN0dXJlUmVjb2duaXplZDsKLSAgICAg
ICAgdmlld3BvcnRIYW5kbGVyKCktPnBhbkdlc3R1cmVTdGFydGVkKHRvdWNoUG9pbnQucG9zKCks
IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICAgICAgdmlld3BvcnRDb250cm9sbGVyKCktPnBh
bkdlc3R1cmVTdGFydGVkKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZWQ6
Ci0gICAgICAgIHZpZXdwb3J0SGFuZGxlcigpLT5wYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZSh0b3Vj
aFBvaW50LnBvcygpLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgICAgIHZpZXdwb3J0Q29u
dHJvbGxlcigpLT5wYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZSh0b3VjaFBvaW50LnBvcygpLCBldmVu
dFRpbWVzdGFtcE1pbGxpcyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNzUsOCArNzUsOCBAQCB2b2lkIFF0UGFu
R2VzdHVyZVJlY29nbml6ZXI6OmZpbmlzaChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYg
dG91Y2hQb2ludCwgcQogICAgIGlmIChtX3N0YXRlID09IE5vR2VzdHVyZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgQVNTRVJUKHZpZXdwb3J0SGFuZGxlcigpKTsKLSAgICB2aWV3cG9ydEhhbmRs
ZXIoKS0+cGFuR2VzdHVyZUVuZGVkKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGltZXN0YW1wTWls
bGlzKTsKKyAgICBBU1NFUlQodmlld3BvcnRDb250cm9sbGVyKCkpOworICAgIHZpZXdwb3J0Q29u
dHJvbGxlcigpLT5wYW5HZXN0dXJlRW5kZWQodG91Y2hQb2ludC5wb3MoKSwgZXZlbnRUaW1lc3Rh
bXBNaWxsaXMpOwogICAgIHJlc2V0KCk7CiB9CiAKQEAgLTg1LDggKzg1LDggQEAgdm9pZCBRdFBh
bkdlc3R1cmVSZWNvZ25pemVyOjpjYW5jZWwoKQogICAgIGlmIChtX3N0YXRlID09IE5vR2VzdHVy
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdmlld3BvcnRIYW5kbGVyKCktPnBhbkdlc3R1cmVF
bmRlZChtX2xhc3RQb3NpdGlvbiwgbV9sYXN0RXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIHZp
ZXdwb3J0SGFuZGxlcigpLT5wYW5HZXN0dXJlQ2FuY2VsbGVkKCk7CisgICAgdmlld3BvcnRDb250
cm9sbGVyKCktPnBhbkdlc3R1cmVFbmRlZChtX2xhc3RQb3NpdGlvbiwgbV9sYXN0RXZlbnRUaW1l
c3RhbXBNaWxsaXMpOworICAgIHZpZXdwb3J0Q29udHJvbGxlcigpLT5wYW5HZXN0dXJlQ2FuY2Vs
bGVkKCk7CiAgICAgcmVzZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcAppbmRleCA3NWQ0ZDIzYjAx
ODE5ZDlhOWQ3MDNkMWQ1NWI0ZGRhOWU5ZmVhZGY1Li5hMTAzNjdhNDBiNWRmOTNkMDFlNTc3NTk0
ZjI5NDA4MmNmMjAxM2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcApAQCAtMjYsNyArMjYsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlF0UGluY2hHZXN0dXJlUmVjb2duaXplci5oIgog
Ci0jaW5jbHVkZSAiUXRWaWV3cG9ydEhhbmRsZXIuaCIKKworI2luY2x1ZGUgIlBhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRRdC5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFuZGxlci5o
IgogI2luY2x1ZGUgPFF0Q29yZS9RTGluZUY+CiAKQEAgLTQ3LDcgKzQ4LDcgQEAgUXRQaW5jaEdl
c3R1cmVSZWNvZ25pemVyOjpRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIoUXRXZWJQYWdlRXZlbnRI
YW5kbGVyKiBldmVudEgKIAogYm9vbCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZShj
b25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgcG9pbnQxLCBjb25zdCBRVG91Y2hFdmVudDo6
VG91Y2hQb2ludCYgcG9pbnQyKQogewotICAgIEFTU0VSVCh2aWV3cG9ydEhhbmRsZXIoKSk7Cisg
ICAgQVNTRVJUKHZpZXdwb3J0Q29udHJvbGxlcigpKTsKICAgICBjb25zdCBxcmVhbCBjdXJyZW50
RmluZ2VyRGlzdGFuY2UgPSBRTGluZUYocG9pbnQxLnNjcmVlblBvcygpLCBwb2ludDIuc2NyZWVu
UG9zKCkpLmxlbmd0aCgpOwogICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgIGNhc2UgTm9HZXN0
dXJlOgpAQCAtNTksNyArNjAsNyBAQCBib29sIFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6dXBk
YXRlKGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiBwb2ludDEsIGNvbgogICAgICAgICBp
ZiAocGluY2hEaXN0YW5jZSA8IHBpbmNoSW5pdGlhbFRyaWdnZXJEaXN0YW5jZVRocmVzaG9sZCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgbV9zdGF0ZSA9IEdlc3R1cmVSZWNv
Z25pemVkOwotICAgICAgICB2aWV3cG9ydEhhbmRsZXIoKS0+cGluY2hHZXN0dXJlU3RhcnRlZChj
b21wdXRlUGluY2hDZW50ZXIocG9pbnQxLCBwb2ludDIpKTsKKyAgICAgICAgdmlld3BvcnRDb250
cm9sbGVyKCktPnBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29tcHV0ZVBpbmNoQ2VudGVyKHBvaW50MSwg
cG9pbnQyKSk7CiAKICAgICAgICAgLy8gV2UgcmVzZXQgdGhlIGluaXRpYWwgc3BhbiBkaXN0YW5j
ZSB0byB0aGUgY3VycmVudCBkaXN0YW5jZSBvZiB0aGUKICAgICAgICAgLy8gdG91Y2ggcG9pbnRz
IGluIG9yZGVyIHRvIGF2b2lkIHRoZSBqdW1wIGNhdXNlZCBieSB0aGUgZXZlbnRzIHdoaWNoCkBA
IC03MSw3ICs3Miw3IEBAIGJvb2wgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjp1cGRhdGUoY29u
c3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50MSwgY29uCiAgICAgY2FzZSBHZXN0dXJl
UmVjb2duaXplZDoKICAgICAgICAgY29uc3QgcXJlYWwgdG90YWxTY2FsZUZhY3RvciA9IGN1cnJl
bnRGaW5nZXJEaXN0YW5jZSAvIG1faW5pdGlhbEZpbmdlckRpc3RhbmNlOwogICAgICAgICBjb25z
dCBRUG9pbnRGIHRvdWNoQ2VudGVySW5WaWV3Q29vcmRpbmF0ZXMgPSBjb21wdXRlUGluY2hDZW50
ZXIocG9pbnQxLCBwb2ludDIpOwotICAgICAgICB2aWV3cG9ydEhhbmRsZXIoKS0+cGluY2hHZXN0
dXJlUmVxdWVzdFVwZGF0ZSh0b3VjaENlbnRlckluVmlld0Nvb3JkaW5hdGVzLCB0b3RhbFNjYWxl
RmFjdG9yKTsKKyAgICAgICAgdmlld3BvcnRDb250cm9sbGVyKCktPnBpbmNoR2VzdHVyZVJlcXVl
c3RVcGRhdGUodG91Y2hDZW50ZXJJblZpZXdDb29yZGluYXRlcywgdG90YWxTY2FsZUZhY3Rvcik7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC04NSw4ICs4
Niw4IEBAIHZvaWQgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjpmaW5pc2goKQogICAgIGlmICht
X3N0YXRlID09IE5vR2VzdHVyZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKHZpZXdw
b3J0SGFuZGxlcigpKTsKLSAgICB2aWV3cG9ydEhhbmRsZXIoKS0+cGluY2hHZXN0dXJlRW5kZWQo
KTsKKyAgICBBU1NFUlQodmlld3BvcnRDb250cm9sbGVyKCkpOworICAgIHZpZXdwb3J0Q29udHJv
bGxlcigpLT5waW5jaEdlc3R1cmVFbmRlZCgpOwogICAgIHJlc2V0KCk7CiB9CiAKQEAgLTk1LDgg
Kzk2LDggQEAgdm9pZCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OmNhbmNlbCgpCiAgICAgaWYg
KG1fc3RhdGUgPT0gTm9HZXN0dXJlKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQodmll
d3BvcnRIYW5kbGVyKCkpOwotICAgIHZpZXdwb3J0SGFuZGxlcigpLT5waW5jaEdlc3R1cmVDYW5j
ZWxsZWQoKTsKKyAgICBBU1NFUlQodmlld3BvcnRDb250cm9sbGVyKCkpOworICAgIHZpZXdwb3J0
Q29udHJvbGxlcigpLT5waW5jaEdlc3R1cmVDYW5jZWxsZWQoKTsKICAgICByZXNldCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRs
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMzYmZhZjhhNjFjZDdlZWViMDJkNTU3
NDk1YTc3NDRlMDJjMzU2MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEhhbmRsZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNzYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQmVuamFtaW4gUG91bGFpbiA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJRdFZpZXdwb3J0SGFuZGxlci5oIgotCi0j
aW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCi0jaW5j
bHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKLSNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKLSNp
bmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKLSNpbmNsdWRlICJxd2Via2l0dGVzdF9wLmgiCi0j
aW5jbHVkZSA8UVBvaW50Rj4KLSNpbmNsdWRlIDxRVHJhbnNmb3JtPgotI2luY2x1ZGUgPFFXaGVl
bEV2ZW50PgotI2luY2x1ZGUgPFF0UXVpY2svcXF1aWNraXRlbS5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgY29uc3QgaW50IGtT
Y2FsZUFuaW1hdGlvbkR1cmF0aW9uTWlsbGlzID0gMjUwOwotCi0vLyBVUERBVEUgREVGRVJSSU5H
IChTVVNQRU5EL1JFU1VNRSkKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
Ly8KLS8vIFdoZW4gaW50ZXJhY3Rpb24gd2l0aCB0aGUgY29udGVudCwgZWl0aGVyIGJ5IGFuaW1h
dGluZyBvciBieSB0aGUgaGFuZCBvZiB0aGUgdXNlciwKLS8vIGl0IGlzIGltcG9ydGFudCB0byBl
bnN1cmUgc21vb3RoIGFuaW1hdGlvbnMgb2YgYXQgbGVhc3QgNjBmcHMgaW4gb3JkZXIgdG8gZ2l2
ZSBhCi0vLyBnb29kIHVzZXIgZXhwZXJpZW5jZS4KLS8vCi0vLyBJbiBvcmRlciB0byBkbyB0aGlz
IHdlIG5lZWQgdG8gZ2V0IHJpZCBvZiB1bmtub3duIGZhY3RvcnMuIFRoZXNlIGluY2x1ZGUgZGV2
aWNlCi0vLyBzZW5zb3JzIChnZW9sb2NhdGlvbiwgb3JpZW50YXRpb24gdXBkYXRlcyBldGMpLCBD
U1MzIGFuaW1hdGlvbnMsIEphdmFTY3JpcHQKLS8vIGV4ZWN0dXRpb24sIHN1YiByZXNvdXJjZSBs
b2FkcyBldGMuIFdlIGRvIHRoaXMgYnkgZW1pdHRpbmcgc3VzcGVuZCBhbmQgcmVzdW1lCi0vLyBz
aWduYWxzLCB3aGljaCBhcmUgdGhlbiBoYW5kbGVkIGJ5IHRoZSB2aWV3cG9ydCBhbmQgcHJvcGFn
YXRlcyB0byB0aGUgcmlnaHQgcGxhY2UuCi0vLwotLy8gRm9yIHRoaXMgcmVhc29uIHRoZSBWaWV3
cG9ydFVwZGF0ZURlZmVycmVyIGd1YXJkIG11c3QgYmUgdXNlZCB3aGVuIHdlIGludGVyYWN0Ci0v
LyBvciBhbmltYXRlIHRoZSBjb250ZW50LgotLy8KLS8vIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0
IHdoZW4gd2UgdXBkYXRlIGNvbnRlbnQgcHJvcGVydGllcywgd2UgbWlnaHQgcmVjZWl2ZSBub3Rp
ZnkKLS8vIHNpZ25hbHMgc2VuZCBteSB0aGUgY29udGVudCBpdGVtIGl0c2VsZiwgYW5kIGNhcmUg
c2hvdWxkIGJlIHRha2VuIHRvIG5vdCBhY3Qgb24KLS8vIHRoZXNlIHVuY29uZGl0aW9uYWxseS4g
QW4gZXhhbXBsZSBvZiB0aGlzIGlzIHRoZSBwaW5jaCB6b29tLCB3aGljaCBjaGFuZ2VzIHRoZQot
Ly8gcG9zaXRpb24gYW5kIHdpbGwgdGh1cyByZXN1bHQgaW4gYSBRUXVpY2tXZWJQYWdlOjpnZW9t
ZXRyeUNoYW5nZWQoKSBzaWduYWwgZ2V0dGluZwotLy8gZW1pdHRlZC4KLS8vCi0vLyBJZiBzb21l
dGhpbmcgc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgZHVyaW5nIHVwZGF0ZSBkZWZlcnJpbmcsIGl0
IGlzIHBvc3NpYmxlIHRvCi0vLyBjaGVjayBmb3IgdGhhdCB1c2luZyBBU1NFUlQobV9zdXNwZW5k
Q291bnQpLgotCi1jbGFzcyBWaWV3cG9ydFVwZGF0ZURlZmVycmVyIHsKLXB1YmxpYzoKLSAgICBl
bnVtIFN1c3BlbmRDb250ZW50RmxhZyB7IERlZmVyVXBkYXRlLCBEZWZlclVwZGF0ZUFuZFN1c3Bl
bmRDb250ZW50IH07Ci0gICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlcihRdFZpZXdwb3J0SGFuZGxl
ciogaGFuZGxlciwgU3VzcGVuZENvbnRlbnRGbGFnIHN1c3BlbmRDb250ZW50RmxhZyA9IERlZmVy
VXBkYXRlKQotICAgICAgICA6IGhhbmRsZXIoaGFuZGxlcikKLSAgICB7Ci0gICAgICAgIGhhbmRs
ZXItPm1fc3VzcGVuZENvdW50Kys7Ci0KLSAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBz
dXNwZW5kIGNvbnRlbnQgZm9yIGltbWVkaWF0ZSB1cGRhdGVzCi0gICAgICAgIC8vIG9ubHkgZHVy
aW5nIGFuaW1hdGlvbnMgb3IgbG9uZ2VyIGdlc3R1cmVzLgotICAgICAgICBpZiAoc3VzcGVuZENv
bnRlbnRGbGFnID09IERlZmVyVXBkYXRlQW5kU3VzcGVuZENvbnRlbnQpCi0gICAgICAgICAgICBo
YW5kbGVyLT5zdXNwZW5kUGFnZUNvbnRlbnQoKTsKLSAgICB9Ci0KLSAgICB+Vmlld3BvcnRVcGRh
dGVEZWZlcnJlcigpCi0gICAgewotICAgICAgICAvLyBXZSBhcmUgY2FsbGluZyBzZXRJbml0aWFs
U2NhbGVJZk5lZWRlZCgpIGhlcmUgYXMgaXQgcmVxdWlyZXMgYQotICAgICAgICAvLyBwb3NzaXRp
dmUgbV9zdXNwZW5kQ291bnQgZHVlIHRvIHRoZSBhc3NlcnQgaW4gc2V0UGFnZUl0ZW1SZWN0Vmlz
aWJsZSgpLgotICAgICAgICBpZiAoaGFuZGxlci0+bV9zdXNwZW5kQ291bnQgPT0gMSkKLSAgICAg
ICAgICAgIGhhbmRsZXItPnNldEluaXRpYWxTY2FsZUlmTmVlZGVkKCk7Ci0KLSAgICAgICAgaWYg
KC0tKGhhbmRsZXItPm1fc3VzcGVuZENvdW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBoYW5kbGVyLT5yZXN1bWVQYWdlQ29udGVudCgpOwotCi0gICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRpbGVzIGFsbCBhcm91bmQgdGhlIHZpZXdwb3J0IHdpbGwgYmUgcmVxdWVzdGVkLgot
ICAgICAgICBoYW5kbGVyLT5pbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShRUG9pbnRGKCkpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBRdFZpZXdwb3J0SGFuZGxlciogY29uc3QgaGFuZGxlcjsK
LX07Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnN1c3BlbmRQYWdlQ29udGVudCgpCi17Ci0g
ICAgaWYgKG1faGFzU3VzcGVuZGVkQ29udGVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9o
YXNTdXNwZW5kZWRDb250ZW50ID0gdHJ1ZTsKLSAgICBtX3dlYlBhZ2VQcm94eS0+c3VzcGVuZEFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRs
ZXI6OnJlc3VtZVBhZ2VDb250ZW50KCkKLXsKLSAgICBpZiAoIW1faGFzU3VzcGVuZGVkQ29udGVu
dCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faGFzU3VzcGVuZGVkQ29udGVudCA9IGZhbHNlOwot
ICAgIG1fd2ViUGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygp
OwotfQotCi0vLyBBIGZsb2F0aW5nIHBvaW50IGNvbXBhcmUgd2l0aCBhYnNvbHV0ZSBlcnJvci4K
LXN0YXRpYyBpbmxpbmUgYm9vbCBmdXp6eUNvbXBhcmUocXJlYWwgYSwgcXJlYWwgYiwgcXJlYWwg
ZXBzaWxvbikKLXsKLSAgICByZXR1cm4gcUFicyhhIC0gYikgPCBlcHNpbG9uOwotfQotCi1pbmxp
bmUgcXJlYWwgUXRWaWV3cG9ydEhhbmRsZXI6OmNzc1NjYWxlRnJvbUl0ZW0ocXJlYWwgaXRlbVNj
YWxlKSBjb25zdAotewotICAgIHJldHVybiBpdGVtU2NhbGUgLyBtX2RldmljZVBpeGVsUmF0aW87
Ci19Ci0KLWlubGluZSBxcmVhbCBRdFZpZXdwb3J0SGFuZGxlcjo6aXRlbVNjYWxlRnJvbUNTUyhx
cmVhbCBjc3NTY2FsZSkgY29uc3QKLXsKLSAgICByZXR1cm4gY3NzU2NhbGUgKiBtX2RldmljZVBp
eGVsUmF0aW87Ci19Ci0KLWlubGluZSBxcmVhbCBRdFZpZXdwb3J0SGFuZGxlcjo6aXRlbUNvb3Jk
RnJvbUNTUyhxcmVhbCB2YWx1ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gdmFsdWUgKiBtX2Rldmlj
ZVBpeGVsUmF0aW87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUVBvaW50RiBib3VuZFBvc2l0aW9uKGNv
bnN0IFFQb2ludEYgbWluUG9zaXRpb24sIGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBjb25zdCBR
UG9pbnRGJiBtYXhQb3NpdGlvbikKLXsKLSAgICByZXR1cm4gUVBvaW50RihxQm91bmQobWluUG9z
aXRpb24ueCgpLCBwb3NpdGlvbi54KCksIG1heFBvc2l0aW9uLngoKSksCi0gICAgICAgICAgICAg
ICAgICAgcUJvdW5kKG1pblBvc2l0aW9uLnkoKSwgcG9zaXRpb24ueSgpLCBtYXhQb3NpdGlvbi55
KCkpKTsKLX0KLQotaW5saW5lIFFSZWN0RiBRdFZpZXdwb3J0SGFuZGxlcjo6aXRlbVJlY3RGcm9t
Q1NTKGNvbnN0IFFSZWN0RiYgY3NzUmVjdCkgY29uc3QKLXsKLSAgICBRUmVjdEYgaXRlbVJlY3Q7
Ci0KLSAgICBpdGVtUmVjdC5zZXRYKGl0ZW1Db29yZEZyb21DU1MoY3NzUmVjdC54KCkpKTsKLSAg
ICBpdGVtUmVjdC5zZXRZKGl0ZW1Db29yZEZyb21DU1MoY3NzUmVjdC55KCkpKTsKLSAgICBpdGVt
UmVjdC5zZXRXaWR0aChpdGVtQ29vcmRGcm9tQ1NTKGNzc1JlY3Qud2lkdGgoKSkpOwotICAgIGl0
ZW1SZWN0LnNldEhlaWdodChpdGVtQ29vcmRGcm9tQ1NTKGNzc1JlY3QuaGVpZ2h0KCkpKTsKLQot
ICAgIHJldHVybiBpdGVtUmVjdDsKLX0KLQotUXRWaWV3cG9ydEhhbmRsZXI6OlF0Vmlld3BvcnRI
YW5kbGVyKFdlYktpdDo6V2ViUGFnZVByb3h5KiBwcm94eSwgUVF1aWNrV2ViVmlldyogdmlld3Bv
cnRJdGVtLCBRUXVpY2tXZWJQYWdlKiBwYWdlSXRlbSkKLSAgICA6IG1fd2ViUGFnZVByb3h5KHBy
b3h5KQotICAgICwgbV92aWV3cG9ydEl0ZW0odmlld3BvcnRJdGVtKQotICAgICwgbV9wYWdlSXRl
bShwYWdlSXRlbSkKLSAgICAsIG1fYWxsb3dzVXNlclNjYWxpbmcoZmFsc2UpCi0gICAgLCBtX21p
bmltdW1TY2FsZSgxKQotICAgICwgbV9tYXhpbXVtU2NhbGUoMSkKLSAgICAsIG1fZGV2aWNlUGl4
ZWxSYXRpbygxKQotICAgICwgbV9zdXNwZW5kQ291bnQoMCkKLSAgICAsIG1faGFzU3VzcGVuZGVk
Q29udGVudChmYWxzZSkKLSAgICAsIG1faGFkVXNlckludGVyYWN0aW9uKGZhbHNlKQotICAgICwg
bV9zY2FsZUFuaW1hdGlvbihuZXcgU2NhbGVBbmltYXRpb24odGhpcykpCi0gICAgLCBtX3BpbmNo
U3RhcnRTY2FsZSgtMSkKLSAgICAsIG1fbGFzdENvbW1pdHRlZFNjYWxlKC0xKQotICAgICwgbV96
b29tT3V0U2NhbGUoMC4wKQotewotICAgIG1fc2NhbGVBbmltYXRpb24tPnNldER1cmF0aW9uKGtT
Y2FsZUFuaW1hdGlvbkR1cmF0aW9uTWlsbGlzKTsKLSAgICBtX3NjYWxlQW5pbWF0aW9uLT5zZXRF
YXNpbmdDdXJ2ZShRRWFzaW5nQ3VydmU6Ok91dEN1YmljKTsKLQotICAgIC8vIEluaXRpYWxpemlu
ZyBWaWV3cG9ydCBSYXcgQXR0cmlidXRlcyB0byBhdm9pZCByYW5kb20gbmVnYXRpdmUgc2NhbGUg
ZmFjdG9ycwotICAgIC8vIGlmIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gYmV0d2VlbiB0aGUg
Zmlyc3QgbGF5b3V0IGFuZCBzZXR0aW5nIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzIGZvciB0aGUg
Zmlyc3QgdGltZS4KLSAgICBtX3Jhd0F0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9IG1fZGV2
aWNlUGl4ZWxSYXRpbzsKLSAgICBtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlID0gMTsKLSAg
ICBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlID0gbV9taW5pbXVtU2NhbGU7Ci0gICAgbV9y
YXdBdHRyaWJ1dGVzLm1heGltdW1TY2FsZSA9IG1fbWF4aW11bVNjYWxlOwotICAgIG1fcmF3QXR0
cmlidXRlcy51c2VyU2NhbGFibGUgPSBtX2FsbG93c1VzZXJTY2FsaW5nOwotCi0gICAgY29ubmVj
dChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKG1vdmVtZW50U3RhcnRlZCgpKSwgU0xPVChmbGlja01v
dmVTdGFydGVkKCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci0gICAgY29ubmVjdChtX3ZpZXdw
b3J0SXRlbSwgU0lHTkFMKG1vdmVtZW50RW5kZWQoKSksIFNMT1QoZmxpY2tNb3ZlRW5kZWQoKSks
IFF0OjpEaXJlY3RDb25uZWN0aW9uKTsKLQotICAgIGNvbm5lY3QobV9zY2FsZUFuaW1hdGlvbiwg
U0lHTkFMKHZhbHVlQ2hhbmdlZChRVmFyaWFudCkpLAotICAgICAgICAgICAgU0xPVChzY2FsZUFu
aW1hdGlvblZhbHVlQ2hhbmdlZChRVmFyaWFudCkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7Ci0g
ICAgY29ubmVjdChtX3NjYWxlQW5pbWF0aW9uLCBTSUdOQUwoc3RhdGVDaGFuZ2VkKFFBYnN0cmFj
dEFuaW1hdGlvbjo6U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUpKSwKLSAgICAgICAg
ICAgIFNMT1Qoc2NhbGVBbmltYXRpb25TdGF0ZUNoYW5nZWQoUUFic3RyYWN0QW5pbWF0aW9uOjpT
dGF0ZSwgUUFic3RyYWN0QW5pbWF0aW9uOjpTdGF0ZSkpLCBRdDo6RGlyZWN0Q29ubmVjdGlvbik7
Ci19Ci0KLVF0Vmlld3BvcnRIYW5kbGVyOjp+UXRWaWV3cG9ydEhhbmRsZXIoKQotewotfQotCi1x
cmVhbCBRdFZpZXdwb3J0SGFuZGxlcjo6aW5uZXJCb3VuZGVkQ1NTU2NhbGUocXJlYWwgY3NzU2Nh
bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHFCb3VuZChtX21pbmltdW1TY2FsZSwgY3NzU2NhbGUs
IG1fbWF4aW11bVNjYWxlKTsKLX0KLQotcXJlYWwgUXRWaWV3cG9ydEhhbmRsZXI6Om91dGVyQm91
bmRlZENTU1NjYWxlKHFyZWFsIGNzc1NjYWxlKSBjb25zdAotewotICAgIGlmIChtX2FsbG93c1Vz
ZXJTY2FsaW5nKSB7Ci0gICAgICAgIC8vIEJvdW5kZWQgYnkgWzAuMSwgMTAuMF0gbGlrZSB0aGUg
dmlld3BvcnQgbWV0YSBjb2RlIGluIFdlYkNvcmUuCi0gICAgICAgIHFyZWFsIGhhcmRNaW4gPSBx
TWF4PHFyZWFsPigwLjEsIHFyZWFsKDAuNSkgKiBtX21pbmltdW1TY2FsZSk7Ci0gICAgICAgIHFy
ZWFsIGhhcmRNYXggPSBxTWluPHFyZWFsPigxMCwgcXJlYWwoMi4wKSAqIG1fbWF4aW11bVNjYWxl
KTsKLSAgICAgICAgcmV0dXJuIHFCb3VuZChoYXJkTWluLCBjc3NTY2FsZSwgaGFyZE1heCk7Ci0g
ICAgfQotICAgIHJldHVybiBpbm5lckJvdW5kZWRDU1NTY2FsZShjc3NTY2FsZSk7Ci19Ci0KLXZv
aWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNldEluaXRpYWxTY2FsZUlmTmVlZGVkKCkKLXsKLSAgICBp
ZiAobV9yYXdBdHRyaWJ1dGVzLmxheW91dFNpemUuaXNFbXB0eSgpIHx8IG1fcmF3QXR0cmlidXRl
cy5pbml0aWFsU2NhbGUgPCAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3pvb21PdXRTY2Fs
ZSA9IDAuMDsKLSAgICBtX3NjYWxlU3RhY2suY2xlYXIoKTsKLQotICAgIG1faGFkVXNlckludGVy
YWN0aW9uID0gZmFsc2U7Ci0KLSAgICAvLyBXZSBtdXN0IG5vdCBhbmltYXRlIGhlcmUgYXMgdGhl
IG5ldyBjb250ZW50cyBzaXplIG1pZ2h0IGJlIHZlcnkgZGlmZmVyZW50Ci0gICAgLy8gdGhhbiB0
aGUgY3VycmVudCBvbmUuCi0gICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShpbml0aWFsUmVjdCgp
KTsKLQotICAgIG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUgPSAtMTsgLy8gTWFyayB1c2Vk
LgotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjp2aWV3cG9ydEF0dHJpYnV0ZXNDaGFuZ2Vk
KGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYgbmV3QXR0cmlidXRlcykKLXsKLSAg
ICBpZiAobmV3QXR0cmlidXRlcy5sYXlvdXRTaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9yYXdBdHRyaWJ1dGVzID0gbmV3QXR0cmlidXRlczsKLSAgICBXZWJDb3JlOjpy
ZXN0cmljdFNjYWxlRmFjdG9yVG9Jbml0aWFsU2NhbGVJZk5vdFVzZXJTY2FsYWJsZShtX3Jhd0F0
dHJpYnV0ZXMpOwotCi0gICAgaWYgKCFxRnV6enlDb21wYXJlKG1fZGV2aWNlUGl4ZWxSYXRpbywg
c3RhdGljX2Nhc3Q8cXJlYWw+KG1fcmF3QXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvKSkpIHsK
LSAgICAgICAgbV9kZXZpY2VQaXhlbFJhdGlvID0gbV9yYXdBdHRyaWJ1dGVzLmRldmljZVBpeGVs
UmF0aW87IC8vIFNob3VsZCByZXR1cm4gdmFsdWUgZnJvbSB0aGUgd2ViUGFnZVByb3h5LgotICAg
ICAgICBlbWl0IG1fdmlld3BvcnRJdGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT5kZXZpY2VQ
aXhlbFJhdGlvQ2hhbmdlZCgpOwotICAgIH0KLQotICAgIG1fYWxsb3dzVXNlclNjYWxpbmcgPSAh
IW1fcmF3QXR0cmlidXRlcy51c2VyU2NhbGFibGU7Ci0gICAgbV9taW5pbXVtU2NhbGUgPSBtX3Jh
d0F0dHJpYnV0ZXMubWluaW11bVNjYWxlOwotICAgIG1fbWF4aW11bVNjYWxlID0gbV9yYXdBdHRy
aWJ1dGVzLm1heGltdW1TY2FsZTsKLQotICAgIC8vIE1ha2Ugc3VyZSB3ZSBhcHBseSB0aGUgbmV3
IGluaXRpYWwgc2NhbGUgd2hlbiBkZWZlcnJpbmcgZW5kcy4KLSAgICBWaWV3cG9ydFVwZGF0ZURl
ZmVycmVyIGd1YXJkKHRoaXMpOwotCi0gICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+ZXhwZXJpbWVu
dGFsKCktPnRlc3QoKS0+dmlld3BvcnRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhh
bmRsZXI6OnBhZ2VDb250ZW50c1NpemVDaGFuZ2VkKGNvbnN0IFFTaXplJiBuZXdTaXplLCBjb25z
dCBRU2l6ZSYgdmlld3BvcnRTaXplKQotewotICAgIGlmICh2aWV3cG9ydFNpemUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmbG9hdCBtaW5pbXVtU2NhbGUgPSBXZWJDb3JlOjpj
b21wdXRlTWluaW11bVNjYWxlRmFjdG9yRm9yQ29udGVudENvbnRhaW5lZChtX3Jhd0F0dHJpYnV0
ZXMsIHZpZXdwb3J0U2l6ZSwgbmV3U2l6ZSk7Ci0KLSAgICBpZiAoIXFGdXp6eUNvbXBhcmUobWlu
aW11bVNjYWxlLCBtX3Jhd0F0dHJpYnV0ZXMubWluaW11bVNjYWxlKSkgewotICAgICAgICBtX21p
bmltdW1TY2FsZSA9IG1pbmltdW1TY2FsZTsKLSAgICAgICAgZW1pdCBtX3ZpZXdwb3J0SXRlbS0+
ZXhwZXJpbWVudGFsKCktPnRlc3QoKS0+dmlld3BvcnRDaGFuZ2VkKCk7Ci0KLSAgICAgICAgaWYg
KCFtX2hhZFVzZXJJbnRlcmFjdGlvbiAmJiAhbV9oYXNTdXNwZW5kZWRDb250ZW50KSB7Ci0gICAg
ICAgICAgICAvLyBFbWl0cyBjb250ZW50c1NjYWxlQ2hhbmdlZCgpOwotICAgICAgICAgICAgc2V0
Q1NTU2NhbGUobWluaW11bVNjYWxlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEVtaXQg
Zm9yIHRlc3RpbmcgcHVycG9zZXMsIHNvIHRoYXQgaXQgY2FuIGJlIHZlcmlmaWVkIHRoYXQKLSAg
ICAvLyB3ZSBkaWRuJ3QgZG8gc2NhbGUgYWRqdXN0bWVudC4KLSAgICBlbWl0IG1fdmlld3BvcnRJ
dGVtLT5leHBlcmltZW50YWwoKS0+dGVzdCgpLT5jb250ZW50c1NjYWxlQ29tbWl0dGVkKCk7Ci0K
LSAgICBpZiAoIW1faGFzU3VzcGVuZGVkQ29udGVudCkgewotICAgICAgICBWaWV3cG9ydFVwZGF0
ZURlZmVycmVyIGd1YXJkKHRoaXMpOwotICAgICAgICBzZXRQYWdlSXRlbVJlY3RWaXNpYmxlKG5l
YXJlc3RWYWxpZEJvdW5kcygpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6
OnNldFBhZ2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJiBpdGVtUmVjdCkKLXsKLSAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKG1fc3VzcGVuZENvdW50LAotICAgICAgICAic2V0UGFnZUl0ZW1S
ZWN0VmlzaWJsZSBoYXMgdG8gYmUgZ3VhcmRlZCB1c2luZyBhIFZpZXdwb3J0VXBkYXRlRGVmZXJy
ZXIuIik7Ci0KLSAgICBpZiAoaXRlbVJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBxcmVhbCBpdGVtU2NhbGUgPSBtX3ZpZXdwb3J0SXRlbS0+d2lkdGgoKSAvIGl0ZW1SZWN0
LndpZHRoKCk7Ci0KLSAgICBtX3BhZ2VJdGVtLT5zZXRDb250ZW50c1NjYWxlKGl0ZW1TY2FsZSk7
Ci0KLSAgICAvLyBUbyBhbmltYXRlIHRoZSBwb3NpdGlvbiB0b2dldGhlciB3aXRoIHRoZSBzY2Fs
ZSB3ZSBtdWx0aXBseSB0aGUgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCBzY2FsZQotICAgIC8v
IGFuZCBhZGQgaXQgdG8gdGhlIHBhZ2UgcG9zaXRpb24gKGRpc3BsYWNlbWVudCBvbiB0aGUgZmxp
Y2thYmxlIGNvbnRlbnRJdGVtIGJlY2F1c2Ugb2YgYWRkaXRpb25hbCBpdGVtcykuCi0gICAgUVBv
aW50RiBuZXdQb3NpdGlvbihtX3BhZ2VJdGVtLT5wb3MoKSArIChpdGVtUmVjdC50b3BMZWZ0KCkg
KiBpdGVtU2NhbGUpKTsKLQotICAgIG1fdmlld3BvcnRJdGVtLT5zZXRDb250ZW50UG9zKG5ld1Bv
c2l0aW9uKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6YW5pbWF0ZVBhZ2VJdGVtUmVj
dFZpc2libGUoY29uc3QgUVJlY3RGJiBpdGVtUmVjdCkKLXsKLSAgICBBU1NFUlQobV9zY2FsZUFu
aW1hdGlvbi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RBbmltYXRpb246OlN0b3BwZWQpOwotCi0gICAg
QVNTRVJUKCFzY3JvbGxBbmltYXRpb25BY3RpdmUoKSk7Ci0gICAgaWYgKHNjcm9sbEFuaW1hdGlv
bkFjdGl2ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBRUmVjdEYgY3VycmVudFBhZ2VJdGVt
UmVjdFZpc2libGUgPSBtX3ZpZXdwb3J0SXRlbS0+bWFwUmVjdFRvV2ViQ29udGVudChtX3ZpZXdw
b3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkpOwotICAgIGlmIChpdGVtUmVjdCA9PSBjdXJyZW50UGFn
ZUl0ZW1SZWN0VmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY2FsZUFuaW1hdGlv
bi0+c2V0U3RhcnRWYWx1ZShjdXJyZW50UGFnZUl0ZW1SZWN0VmlzaWJsZSk7Ci0gICAgbV9zY2Fs
ZUFuaW1hdGlvbi0+c2V0RW5kVmFsdWUoaXRlbVJlY3QpOwotCi0gICAgbV9zY2FsZUFuaW1hdGlv
bi0+c3RhcnQoKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6ZmxpY2tNb3ZlU3RhcnRl
ZCgpCi17Ci0gICAgUV9BU1NFUlQobV92aWV3cG9ydEl0ZW0tPmlzTW92aW5nKCkpOwotICAgIG1f
c2Nyb2xsVXBkYXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJl
cih0aGlzLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250
ZW50KSk7Ci0KLSAgICBtX2xhc3RTY3JvbGxQb3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5jb250
ZW50UG9zKCk7Ci0gICAgY29ubmVjdChtX3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRYQ2hh
bmdlZCgpKSwgU0xPVChwYWdlSXRlbVBvc2l0aW9uQ2hhbmdlZCgpKSk7Ci0gICAgY29ubmVjdCht
X3ZpZXdwb3J0SXRlbSwgU0lHTkFMKGNvbnRlbnRZQ2hhbmdlZCgpKSwgU0xPVChwYWdlSXRlbVBv
c2l0aW9uQ2hhbmdlZCgpKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OmZsaWNrTW92
ZUVuZGVkKCkKLXsKLSAgICBRX0FTU0VSVCghbV92aWV3cG9ydEl0ZW0tPmlzTW92aW5nKCkpOwot
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgZW5kIG9mIHRoZSBwYW4gb3IgcGFu
IGtpbmV0aWMgYW5pbWF0aW9uLgotICAgIG1fc2Nyb2xsVXBkYXRlRGVmZXJyZXIuY2xlYXIoKTsK
LQotICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0gUVBvaW50RigpOwotICAgIGRpc2Nvbm5lY3Qo
bV92aWV3cG9ydEl0ZW0sIFNJR05BTChjb250ZW50WENoYW5nZWQoKSksIHRoaXMsIFNMT1QocGFn
ZUl0ZW1Qb3NpdGlvbkNoYW5nZWQoKSkpOwotICAgIGRpc2Nvbm5lY3QobV92aWV3cG9ydEl0ZW0s
IFNJR05BTChjb250ZW50WUNoYW5nZWQoKSksIHRoaXMsIFNMT1QocGFnZUl0ZW1Qb3NpdGlvbkNo
YW5nZWQoKSkpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwYWdlSXRlbVBvc2l0aW9u
Q2hhbmdlZCgpCi17Ci0gICAgUVBvaW50RiBuZXdQb3NpdGlvbiA9IG1fdmlld3BvcnRJdGVtLT5j
b250ZW50UG9zKCk7Ci0KLSAgICBpbmZvcm1WaXNpYmxlQ29udGVudENoYW5nZShtX2xhc3RTY3Jv
bGxQb3NpdGlvbiAtIG5ld1Bvc2l0aW9uKTsKLQotICAgIG1fbGFzdFNjcm9sbFBvc2l0aW9uID0g
bmV3UG9zaXRpb247Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBhZ2VDb250ZW50UG9z
aXRpb25SZXF1ZXN0ZWQoY29uc3QgUVBvaW50JiBjc3NQb3NpdGlvbikKLXsKLSAgICAvLyBJZ25v
cmUgdGhlIHJlcXVlc3QgaWYgc3VzcGVuZGVkLiBDYW4gb25seSBoYXBwZW4gZHVlIHRvIGRlbGF5
IGluIGV2ZW50IGRlbGl2ZXJ5LgotICAgIGlmIChtX3N1c3BlbmRDb3VudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gbV9wYWdlSXRlbS0+Y29udGVudHNTY2Fs
ZSgpOyAvLyBTdGF5IGF0IHNhbWUgc2NhbGUuCi0KLSAgICBRUmVjdEYgZW5kUG9zUmFuZ2UgPSBj
b21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKLSAgICBRUG9p
bnRGIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCksIGNz
c1Bvc2l0aW9uICogZW5kSXRlbVNjYWxlLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgpKTsKLQot
ICAgIFFSZWN0RiBlbmRWaXNpYmxlQ29udGVudFJlY3QoZW5kUG9zaXRpb24gLyBlbmRJdGVtU2Nh
bGUsIG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKS5zaXplKCkgLyBlbmRJdGVtU2NhbGUp
OwotCi0gICAgVmlld3BvcnRVcGRhdGVEZWZlcnJlciBndWFyZCh0aGlzKTsKLSAgICBzZXRQYWdl
SXRlbVJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7Ci19Ci0KLXZvaWQgUXRWaWV3
cG9ydEhhbmRsZXI6OnNjYWxlQW5pbWF0aW9uU3RhdGVDaGFuZ2VkKFFBYnN0cmFjdEFuaW1hdGlv
bjo6U3RhdGUgbmV3U3RhdGUsIFFBYnN0cmFjdEFuaW1hdGlvbjo6U3RhdGUgLypvbGRTdGF0ZSov
KQotewotICAgIHN3aXRjaCAobmV3U3RhdGUpIHsKLSAgICBjYXNlIFFBYnN0cmFjdEFuaW1hdGlv
bjo6UnVubmluZzoKLSAgICAgICAgbV92aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7Ci0gICAg
ICAgIEFTU0VSVCghbV9hbmltYXRpb25VcGRhdGVEZWZlcnJlcik7Ci0gICAgICAgIG1fYW5pbWF0
aW9uVXBkYXRlRGVmZXJyZXIgPSBhZG9wdFB0cihuZXcgVmlld3BvcnRVcGRhdGVEZWZlcnJlcih0
aGlzLCBWaWV3cG9ydFVwZGF0ZURlZmVycmVyOjpEZWZlclVwZGF0ZUFuZFN1c3BlbmRDb250ZW50
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUUFic3RyYWN0QW5pbWF0aW9uOjpTdG9wcGVk
OgotICAgICAgICBtX2FuaW1hdGlvblVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBRdFZp
ZXdwb3J0SGFuZGxlcjo6c2NhbGVBbmltYXRpb25WYWx1ZUNoYW5nZWQoUVZhcmlhbnQgdmFsdWUp
Ci17Ci0gICAgLy8gUmVzZXR0aW5nIHRoZSBlbmQgdmFsdWUsIHRoZSBlYXNpbmcgY3VydmUgb3Ig
dGhlIGR1cmF0aW9uIG9mIHRoZSBzY2FsZSBhbmltYXRpb24KLSAgICAvLyB0cmlnZ2VycyBhIHJl
Y2FsY3VsYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBpbnRlcnZhbC4gVGhpcyBtaWdodCBjaGFuZ2Ug
dGhlIGN1cnJlbnQKLSAgICAvLyB2YWx1ZSBvZiB0aGUgYW5pbWF0ZWQgcHJvcGVydHkuCi0gICAg
Ly8gTWFrZSBzdXJlIHdlIG9ubHkgYWN0IG9uIGFuaW1hdGlvbiB2YWx1ZSBjaGFuZ2VzIGlmIHRo
ZSBhbmltYXRpb24gaXMgYWN0aXZlLgotICAgIGlmICghc2NhbGVBbmltYXRpb25BY3RpdmUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZSh2YWx1ZS50b1Jl
Y3RGKCkpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjp0b3VjaEJlZ2luKCkKLXsKLSAg
ICBtX2hhZFVzZXJJbnRlcmFjdGlvbiA9IHRydWU7Ci0KLSAgICAvLyBQcmV2ZW50cyByZXN1bWlu
ZyB0aGUgcGFnZSBiZXR3ZWVuIHRoZSB1c2VyJ3MgZmxpY2tzIG9mIHRoZSBwYWdlIHdoaWxlIHRo
ZSBhbmltYXRpb24gaXMgcnVubmluZy4KLSAgICBpZiAoc2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkp
Ci0gICAgICAgIG1fdG91Y2hVcGRhdGVEZWZlcnJlciA9IGFkb3B0UHRyKG5ldyBWaWV3cG9ydFVw
ZGF0ZURlZmVycmVyKHRoaXMsIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI6OkRlZmVyVXBkYXRlQW5k
U3VzcGVuZENvbnRlbnQpKTsKLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6dG91Y2hFbmQo
KQotewotICAgIG1fdG91Y2hVcGRhdGVEZWZlcnJlci5jbGVhcigpOwotfQotCi1RUmVjdEYgUXRW
aWV3cG9ydEhhbmRsZXI6OmNvbXB1dGVQb3NSYW5nZUZvclBhZ2VJdGVtQXRTY2FsZShxcmVhbCBp
dGVtU2NhbGUpIGNvbnN0Ci17Ci0gICAgY29uc3QgUVNpemVGIGNvbnRlbnRJdGVtU2l6ZSA9IG1f
cGFnZUl0ZW0tPmNvbnRlbnRzU2l6ZSgpICogaXRlbVNjYWxlOwotICAgIGNvbnN0IFFTaXplRiB2
aWV3cG9ydEl0ZW1TaXplID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpLnNpemUoKTsK
LQotICAgIGNvbnN0IHFyZWFsIGhvcml6b250YWxSYW5nZSA9IGNvbnRlbnRJdGVtU2l6ZS53aWR0
aCgpIC0gdmlld3BvcnRJdGVtU2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IHFyZWFsIHZlcnRpY2Fs
UmFuZ2UgPSBjb250ZW50SXRlbVNpemUuaGVpZ2h0KCkgLSB2aWV3cG9ydEl0ZW1TaXplLmhlaWdo
dCgpOwotCi0gICAgcmV0dXJuIFFSZWN0RihRUG9pbnRGKDAsIDApLCBRU2l6ZUYoaG9yaXpvbnRh
bFJhbmdlLCB2ZXJ0aWNhbFJhbmdlKSk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OmZv
Y3VzRWRpdGFibGVBcmVhKGNvbnN0IFFSZWN0RiYgY2FyZXRBcmVhLCBjb25zdCBRUmVjdEYmIHRh
cmdldEFyZWEpCi17Ci0gICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQgb2Yg
YSB1c2VyIGludGVyYWN0aW9uLgotICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7Ci0K
LSAgICBRUmVjdEYgZW5kQXJlYSA9IGl0ZW1SZWN0RnJvbUNTUyh0YXJnZXRBcmVhKTsKLQotICAg
IHFyZWFsIGVuZEl0ZW1TY2FsZSA9IGl0ZW1TY2FsZUZyb21DU1MoaW5uZXJCb3VuZGVkQ1NTU2Nh
bGUoMi4wKSk7Ci0gICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVjdCA9IG1fdmlld3BvcnRJdGVt
LT5ib3VuZGluZ1JlY3QoKTsKLQotICAgIHFyZWFsIHg7Ci0gICAgY29uc3QgcXJlYWwgYm9yZGVy
T2Zmc2V0ID0gMTA7Ci0gICAgaWYgKChlbmRBcmVhLndpZHRoKCkgKyBib3JkZXJPZmZzZXQpICog
ZW5kSXRlbVNjYWxlIDw9IHZpZXdwb3J0UmVjdC53aWR0aCgpKSB7Ci0gICAgICAgIC8vIENlbnRl
ciB0aGUgaW5wdXQgZmllbGQgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdmlldywgaWYgaXQgaXMgc21h
bGxlciB0aGFuCi0gICAgICAgIC8vIHRoZSB2aWV3IGF0IHRoZSBzY2FsZSB0YXJnZXQuCi0gICAg
ICAgIHggPSB2aWV3cG9ydFJlY3QuY2VudGVyKCkueCgpIC0gZW5kQXJlYS53aWR0aCgpICogZW5k
SXRlbVNjYWxlIC8gMi4wOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRo
ZSBjYXJldCBhbHdheXMgaGFzIGJvcmRlck9mZnNldCBjb250ZW50cyBwaXhlbHMgdG8gdGhlIHJp
Z2h0Ci0gICAgICAgIC8vIG9mIGl0LCBhbmQgc2Vjb25kYXJpbHkgKGlmIHBvc3NpYmxlKSwgdGhh
dCB0aGUgYXJlYSBoYXMgYm9yZGVyT2Zmc2V0Ci0gICAgICAgIC8vIGNvbnRlbnRzIHBpeGVscyB0
byB0aGUgbGVmdCBvZiBpdC4KLSAgICAgICAgcXJlYWwgY2FyZXRPZmZzZXQgPSBpdGVtQ29vcmRG
cm9tQ1NTKGNhcmV0QXJlYS54KCkpIC0gZW5kQXJlYS54KCk7Ci0gICAgICAgIHggPSBxTWluKHZp
ZXdwb3J0UmVjdC53aWR0aCgpIC0gKGNhcmV0T2Zmc2V0ICsgYm9yZGVyT2Zmc2V0KSAqIGVuZEl0
ZW1TY2FsZSwgYm9yZGVyT2Zmc2V0ICogZW5kSXRlbVNjYWxlKTsKLSAgICB9Ci0KLSAgICBjb25z
dCBRUG9pbnRGIGhvdHNwb3QgPSBRUG9pbnRGKGVuZEFyZWEueCgpLCBlbmRBcmVhLmNlbnRlcigp
LnkoKSk7Ci0gICAgY29uc3QgUVBvaW50RiB2aWV3cG9ydEhvdHNwb3QgPSBRUG9pbnRGKHgsIC8q
IEZJWE1FOiB2aXNpYmxlQ2VudGVyICovIHZpZXdwb3J0UmVjdC5jZW50ZXIoKS55KCkpOwotCi0g
ICAgUVBvaW50RiBlbmRQb3NpdGlvbiA9IGhvdHNwb3QgKiBlbmRJdGVtU2NhbGUgLSB2aWV3cG9y
dEhvdHNwb3Q7Ci0gICAgUVJlY3RGIGVuZFBvc1JhbmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFn
ZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0KLSAgICBlbmRQb3NpdGlvbiA9IGJvdW5kUG9z
aXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UuYm90
dG9tUmlnaHQoKSk7Ci0KLSAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBvc2l0
aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsK
LQotICAgIGFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVjdCk7
Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6Onpvb21Ub0FyZWFHZXN0dXJlRW5kZWQoY29u
c3QgUVBvaW50RiYgdG91Y2hQb2ludCwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKQotewotICAg
IC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGFzIGEgcmVzdWx0IG9mIGEgdXNlciBpbnRlcmFjdGlv
bi4KLSAgICBBU1NFUlQobV9oYWRVc2VySW50ZXJhY3Rpb24pOwotCi0gICAgaWYgKCF0YXJnZXRB
cmVhLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc3VzcGVuZENvdW50
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBpbnQgbWFyZ2luID0gMTA7IC8vIFdlIHdh
bnQgYXQgbGVhc3QgYSBsaXR0bGUgYml0IG9mIG1hcmdpbi4KLSAgICBRUmVjdEYgZW5kQXJlYSA9
IGl0ZW1SZWN0RnJvbUNTUyh0YXJnZXRBcmVhLmFkanVzdGVkKC1tYXJnaW4sIC1tYXJnaW4sIG1h
cmdpbiwgbWFyZ2luKSk7Ci0KLSAgICBjb25zdCBRUmVjdEYgdmlld3BvcnRSZWN0ID0gbV92aWV3
cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpOwotCi0gICAgcXJlYWwgdGFyZ2V0Q1NTU2NhbGUgPSB2
aWV3cG9ydFJlY3Quc2l6ZSgpLndpZHRoKCkgLyBlbmRBcmVhLnNpemUoKS53aWR0aCgpOwotICAg
IHFyZWFsIGVuZENTU1NjYWxlID0gaW5uZXJCb3VuZGVkQ1NTU2NhbGUocU1pbih0YXJnZXRDU1NT
Y2FsZSwgcXJlYWwoMi41KSkpOwotICAgIHFyZWFsIGVuZEl0ZW1TY2FsZSA9IGl0ZW1TY2FsZUZy
b21DU1MoZW5kQ1NTU2NhbGUpOwotICAgIHFyZWFsIGN1cnJlbnRTY2FsZSA9IG1fcGFnZUl0ZW0t
PmNvbnRlbnRzU2NhbGUoKTsKLQotICAgIC8vIFdlIHdhbnQgdG8gZW5kIHVwIHdpdGggdGhlIHRh
cmdldCBhcmVhIGZpbGxpbmcgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydCAoaWYgcG9z
c2libGUpLAotICAgIC8vIGFuZCBjZW50cmFsaXplZCB2ZXJ0aWNhbGx5IHdoZXJlIHRoZSB1c2Vy
IHJlcXVlc3RlZCB6b29tLiBUaHVzIG91ciBob3RzcG90IGlzIHRoZSBjZW50ZXIgb2YKLSAgICAv
LyB0aGUgdGFyZ2V0QXJlYSB4LXdpc2UgYW5kIHRoZSByZXF1ZXN0ZWQgem9vbSBwb3NpdGlvbiwg
eS13aXNlLgotICAgIGNvbnN0IFFQb2ludEYgaG90c3BvdCA9IFFQb2ludEYoZW5kQXJlYS5jZW50
ZXIoKS54KCksIGl0ZW1Db29yZEZyb21DU1ModG91Y2hQb2ludC55KCkpKTsKLSAgICBjb25zdCBR
UG9pbnRGIHZpZXdwb3J0SG90c3BvdCA9IHZpZXdwb3J0UmVjdC5jZW50ZXIoKTsKLQotICAgIFFQ
b2ludEYgZW5kUG9zaXRpb24gPSBob3RzcG90ICogZW5kQ1NTU2NhbGUgLSB2aWV3cG9ydEhvdHNw
b3Q7Ci0KLSAgICBRUmVjdEYgZW5kUG9zUmFuZ2UgPSBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRl
bUF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKLSAgICBlbmRQb3NpdGlvbiA9IGJvdW5kUG9zaXRpb24o
ZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3NpdGlvbiwgZW5kUG9zUmFuZ2UuYm90dG9tUmln
aHQoKSk7Ci0KLSAgICBRUmVjdEYgZW5kVmlzaWJsZUNvbnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8g
ZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKLQotICAg
IGVudW0geyBab29tSW4sIFpvb21CYWNrLCBab29tT3V0LCBOb1pvb20gfSB6b29tQWN0aW9uID0g
Wm9vbUluOwotCi0gICAgaWYgKCFtX3NjYWxlU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8v
IFpvb20gYmFjayBvdXQgaWYgYXR0ZW1wdGluZyB0byBzY2FsZSB0byB0aGUgc2FtZSBjdXJyZW50
IHNjYWxlLCBvcgotICAgICAgICAvLyBhdHRlbXB0aW5nIHRvIGNvbnRpbnVlIHNjYWxpbmcgb3V0
IGZyb20gdGhlIGlubmVyIG1vc3QgbGV2ZWwuCi0gICAgICAgIC8vIFVzZSBmdXp6eSBjb21wYXJl
IHdpdGggYSBmaXhlZCBlcnJvciB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aCBsYXJnaXNoIGRpZmZl
cmVuY2VzIGR1ZSB0byBwaXhlbCByb3VuZGluZy4KLSAgICAgICAgaWYgKGZ1enp5Q29tcGFyZShl
bmRJdGVtU2NhbGUsIGN1cnJlbnRTY2FsZSwgMC4wMSkpIHsKLSAgICAgICAgICAgIC8vIElmIG1v
dmluZyB0aGUgdmlld3BvcnQgd291bGQgZXhwb3NlIG1vcmUgb2YgdGhlIHRhcmdldFJlY3QgYW5k
IG1vdmUgYXQgbGVhc3QgNDAgcGl4ZWxzLCB1cGRhdGUgcG9zaXRpb24gYnV0IGRvIG5vdCBzY2Fs
ZSBvdXQuCi0gICAgICAgICAgICBRUmVjdEYgY3VycmVudENvbnRlbnRSZWN0KG1fdmlld3BvcnRJ
dGVtLT5jb250ZW50UG9zKCkgLyBjdXJyZW50U2NhbGUsIHZpZXdwb3J0UmVjdC5zaXplKCkgLyBj
dXJyZW50U2NhbGUpOwotICAgICAgICAgICAgUVJlY3RGIHRhcmdldEludGVyc2VjdGlvbiA9IGVu
ZFZpc2libGVDb250ZW50UmVjdC5pbnRlcnNlY3RlZCh0YXJnZXRBcmVhKTsKLSAgICAgICAgICAg
IGlmICghY3VycmVudENvbnRlbnRSZWN0LmNvbnRhaW5zKHRhcmdldEludGVyc2VjdGlvbikgJiYg
KHFBYnMoZW5kVmlzaWJsZUNvbnRlbnRSZWN0LnRvcCgpIC0gY3VycmVudENvbnRlbnRSZWN0LnRv
cCgpKSA+PSA0MCB8fCBxQWJzKGVuZFZpc2libGVDb250ZW50UmVjdC5sZWZ0KCkgLSBjdXJyZW50
Q29udGVudFJlY3QubGVmdCgpKSA+PSA0MCkpCi0gICAgICAgICAgICAgICAgem9vbUFjdGlvbiA9
IE5vWm9vbTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB6b29tQWN0aW9uID0g
Wm9vbUJhY2s7Ci0gICAgICAgIH0gZWxzZSBpZiAoZnV6enlDb21wYXJlKGVuZEl0ZW1TY2FsZSwg
bV96b29tT3V0U2NhbGUsIDAuMDEpKQotICAgICAgICAgICAgem9vbUFjdGlvbiA9IFpvb21CYWNr
OwotICAgICAgICBlbHNlIGlmIChlbmRJdGVtU2NhbGUgPCBjdXJyZW50U2NhbGUpCi0gICAgICAg
ICAgICB6b29tQWN0aW9uID0gWm9vbU91dDsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHpvb21BY3Rp
b24pIHsKLSAgICBjYXNlIFpvb21JbjoKLSAgICAgICAgbV9zY2FsZVN0YWNrLmFwcGVuZChTY2Fs
ZVN0YWNrSXRlbShjdXJyZW50U2NhbGUsIG1fdmlld3BvcnRJdGVtLT5jb250ZW50UG9zKCkueCgp
KSk7Ci0gICAgICAgIG1fem9vbU91dFNjYWxlID0gZW5kSXRlbVNjYWxlOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFpvb21CYWNrOiB7Ci0gICAgICAgIFNjYWxlU3RhY2tJdGVtIGxhc3RTY2Fs
ZSA9IG1fc2NhbGVTdGFjay50YWtlTGFzdCgpOwotICAgICAgICBlbmRJdGVtU2NhbGUgPSBsYXN0
U2NhbGUuc2NhbGU7Ci0gICAgICAgIGVuZENTU1NjYWxlID0gY3NzU2NhbGVGcm9tSXRlbShsYXN0
U2NhbGUuc2NhbGUpOwotICAgICAgICAvLyBSZWNhbGN1bGF0ZSBlbmRQb3NpdGlvbiBhbmQgYm91
bmQgaXQgYWNjb3JkaW5nIHRvIG5ldyBzY2FsZS4KLSAgICAgICAgZW5kUG9zaXRpb24uc2V0WSho
b3RzcG90LnkoKSAqIGVuZENTU1NjYWxlIC0gdmlld3BvcnRIb3RzcG90LnkoKSk7Ci0gICAgICAg
IGVuZFBvc2l0aW9uLnNldFgobGFzdFNjYWxlLnhQb3NpdGlvbik7Ci0gICAgICAgIGVuZFBvc1Jh
bmdlID0gY29tcHV0ZVBvc1JhbmdlRm9yUGFnZUl0ZW1BdFNjYWxlKGVuZEl0ZW1TY2FsZSk7Ci0g
ICAgICAgIGVuZFBvc2l0aW9uID0gYm91bmRQb3NpdGlvbihlbmRQb3NSYW5nZS50b3BMZWZ0KCks
IGVuZFBvc2l0aW9uLCBlbmRQb3NSYW5nZS5ib3R0b21SaWdodCgpKTsKLSAgICAgICAgZW5kVmlz
aWJsZUNvbnRlbnRSZWN0ID0gUVJlY3RGKGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3
cG9ydFJlY3Quc2l6ZSgpIC8gZW5kSXRlbVNjYWxlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGNhc2UgWm9vbU91dDoKLSAgICAgICAgLy8gVW5zdGFjayBhbGwgc2NhbGUtbGV2ZWxzIGRl
ZXBlciB0aGFuIHRoZSBuZXcgbGV2ZWwsIHNvIGEgem9vbS1iYWNrIHdvbid0IGVuZCB1cCB6b29t
aW5nIGluLgotICAgICAgICB3aGlsZSAoIW1fc2NhbGVTdGFjay5pc0VtcHR5KCkgJiYgbV9zY2Fs
ZVN0YWNrLmxhc3QoKS5zY2FsZSA+PSBlbmRJdGVtU2NhbGUpCi0gICAgICAgICAgICBtX3NjYWxl
U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICBtX3pvb21PdXRTY2FsZSA9IGVuZEl0ZW1TY2Fs
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOb1pvb206Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGFuaW1hdGVQYWdlSXRlbVJlY3RWaXNpYmxlKGVuZFZpc2libGVDb250ZW50UmVj
dCk7Ci19Ci0KLVFSZWN0RiBRdFZpZXdwb3J0SGFuZGxlcjo6aW5pdGlhbFJlY3QoKSBjb25zdAot
ewotICAgIEFTU0VSVChtX3Jhd0F0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlID4gMCk7Ci0KLSAgICBx
cmVhbCBlbmRJdGVtU2NhbGUgPSBpdGVtU2NhbGVGcm9tQ1NTKGlubmVyQm91bmRlZENTU1NjYWxl
KG1fcmF3QXR0cmlidXRlcy5pbml0aWFsU2NhbGUpKTsKLSAgICBjb25zdCBRUmVjdEYgdmlld3Bv
cnRSZWN0ID0gbV92aWV3cG9ydEl0ZW0tPmJvdW5kaW5nUmVjdCgpOwotICAgIFFSZWN0RiBlbmRW
aXNpYmxlQ29udGVudFJlY3QoUVBvaW50RigwLCAwKSwgdmlld3BvcnRSZWN0LnNpemUoKSAvIGVu
ZEl0ZW1TY2FsZSk7Ci0KLSAgICByZXR1cm4gZW5kVmlzaWJsZUNvbnRlbnRSZWN0OwotfQotCi1R
UmVjdEYgUXRWaWV3cG9ydEhhbmRsZXI6Om5lYXJlc3RWYWxpZEJvdW5kcygpIGNvbnN0Ci17Ci0g
ICAgcXJlYWwgZW5kSXRlbVNjYWxlID0gaXRlbVNjYWxlRnJvbUNTUyhpbm5lckJvdW5kZWRDU1NT
Y2FsZShjdXJyZW50Q1NTU2NhbGUoKSkpOwotCi0gICAgY29uc3QgUVJlY3RGIHZpZXdwb3J0UmVj
dCA9IG1fdmlld3BvcnRJdGVtLT5ib3VuZGluZ1JlY3QoKTsKLSAgICBRUG9pbnRGIHZpZXdwb3J0
SG90c3BvdCA9IHZpZXdwb3J0UmVjdC5jZW50ZXIoKTsKLQotICAgIFFQb2ludEYgZW5kUG9zaXRp
b24gPSBtX3ZpZXdwb3J0SXRlbS0+bWFwVG9XZWJDb250ZW50KHZpZXdwb3J0SG90c3BvdCkgKiBl
bmRJdGVtU2NhbGUgLSB2aWV3cG9ydEhvdHNwb3Q7Ci0KLSAgICBRUmVjdEYgZW5kUG9zUmFuZ2Ug
PSBjb21wdXRlUG9zUmFuZ2VGb3JQYWdlSXRlbUF0U2NhbGUoZW5kSXRlbVNjYWxlKTsKLSAgICBl
bmRQb3NpdGlvbiA9IGJvdW5kUG9zaXRpb24oZW5kUG9zUmFuZ2UudG9wTGVmdCgpLCBlbmRQb3Np
dGlvbiwgZW5kUG9zUmFuZ2UuYm90dG9tUmlnaHQoKSk7Ci0KLSAgICBRUmVjdEYgZW5kVmlzaWJs
ZUNvbnRlbnRSZWN0KGVuZFBvc2l0aW9uIC8gZW5kSXRlbVNjYWxlLCB2aWV3cG9ydFJlY3Quc2l6
ZSgpIC8gZW5kSXRlbVNjYWxlKTsKLQotICAgIHJldHVybiBlbmRWaXNpYmxlQ29udGVudFJlY3Q7
Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnNldENTU1NjYWxlKHFyZWFsIHNjYWxlKQot
ewotICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQodGhpcyk7Ci0KLSAgICBxcmVhbCBu
ZXdTY2FsZSA9IGlubmVyQm91bmRlZENTU1NjYWxlKHNjYWxlKTsKLSAgICBtX3BhZ2VJdGVtLT5z
ZXRDb250ZW50c1NjYWxlKGl0ZW1TY2FsZUZyb21DU1MobmV3U2NhbGUpKTsKLX0KLQotcXJlYWwg
UXRWaWV3cG9ydEhhbmRsZXI6OmN1cnJlbnRDU1NTY2FsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGNzc1NjYWxlRnJvbUl0ZW0obV9wYWdlSXRlbS0+Y29udGVudHNTY2FsZSgpKTsKLX0KLQotYm9v
bCBRdFZpZXdwb3J0SGFuZGxlcjo6c2Nyb2xsQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPmlzRmxpY2tpbmcoKTsKLX0KLQotYm9vbCBRdFZpZXdw
b3J0SGFuZGxlcjo6cGFuR2VzdHVyZUFjdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmll
d3BvcnRJdGVtLT5pc0RyYWdnaW5nKCk7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBh
bkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1l
c3RhbXBNaWxsaXMpCi17Ci0gICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gYXMgYSByZXN1bHQg
b2YgYSB1c2VyIGludGVyYWN0aW9uLgotICAgIEFTU0VSVChtX2hhZFVzZXJJbnRlcmFjdGlvbik7
Ci0KLSAgICBtX3ZpZXdwb3J0SXRlbS0+aGFuZGxlRmxpY2thYmxlTW91c2VQcmVzcyhwb3NpdGlv
biwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIG1fbGFzdFBpbmNoQ2VudGVySW5WaWV3cG9y
dENvb3JkaW5hdGVzID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBh
bkdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZl
bnRUaW1lc3RhbXBNaWxsaXMpCi17Ci0gICAgbV92aWV3cG9ydEl0ZW0tPmhhbmRsZUZsaWNrYWJs
ZU1vdXNlTW92ZShwb3NpdGlvbiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIG1fbGFzdFBp
bmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzID0gcG9zaXRpb247Ci19Ci0KLXZvaWQgUXRW
aWV3cG9ydEhhbmRsZXI6OnBhbkdlc3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiBwb3NpdGlvbiwg
cWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQotewotICAgIG1fdmlld3BvcnRJdGVtLT5oYW5k
bGVGbGlja2FibGVNb3VzZVJlbGVhc2UocG9zaXRpb24sIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsK
LSAgICBtX2xhc3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBvc2l0aW9uOwot
fQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjpwYW5HZXN0dXJlQ2FuY2VsbGVkKCkKLXsKLSAg
ICAvLyBSZXNldCB0aGUgdmVsb2NpdHkgc2FtcGxlcyBvZiB0aGUgZmxpY2thYmxlLgotICAgIC8v
IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSByZWNvZ25pemVyIGlmIHdlIGhhdmUg
YSByZWNvZ25pemVkCi0gICAgLy8gcGFuIGdlc3R1cmUgYW5kIHJlY2VpdmUgYSB0b3VjaCBldmVu
dCB3aXRoIG11bHRpcGxlIHRvdWNoIHBvaW50cwotICAgIC8vIChpZS4gdHJhbnNpdGlvbiB0byBh
IHBpbmNoIGdlc3R1cmUpIGFzIGl0IGRvZXMgbm90IG1vdmUgdGhlIGNvbnRlbnQKLSAgICAvLyBi
YWNrIGluc2lkZSB2YWxpZCBib3VuZHMuCi0gICAgLy8gV2hlbiB0aGUgcGluY2ggZ2VzdHVyZSBl
bmRzLCB0aGUgY29udGVudCBpcyBwb3NpdGlvbmVkIGFuZCBzY2FsZWQKLSAgICAvLyBiYWNrIHRv
IHZhbGlkIGJvdW5kYXJpZXMuCi0gICAgbV92aWV3cG9ydEl0ZW0tPmNhbmNlbEZsaWNrKCk7Ci19
Ci0KLWJvb2wgUXRWaWV3cG9ydEhhbmRsZXI6OnNjYWxlQW5pbWF0aW9uQWN0aXZlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9zY2FsZUFuaW1hdGlvbi0+c3RhdGUoKSA9PSBRQWJzdHJhY3RBbmlt
YXRpb246OlJ1bm5pbmc7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OmNhbmNlbFNjcm9s
bEFuaW1hdGlvbigpCi17Ci0gICAgaWYgKCFzY3JvbGxBbmltYXRpb25BY3RpdmUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gSWYgdGhlIHBhbiBnZXN0dXJlIHJlY29nbml6ZXIgcmVjZWl2
ZXMgYSB0b3VjaCBiZWdpbiBldmVudAotICAgIC8vIGR1cmluZyBhbiBvbmdvaW5nIGtpbmV0aWMg
c2Nyb2xsIGFuaW1hdGlvbiBvZiBhIHByZXZpb3VzCi0gICAgLy8gcGFuIGdlc3R1cmUsIHRoZSBh
bmltYXRpb24gaXMgc3RvcHBlZCBhbmQgdGhlIGNvbnRlbnQgaXMKLSAgICAvLyBpbW1lZGlhdGVs
eSBwb3NpdGlvbmVkIGJhY2sgdG8gdmFsaWQgYm91bmRhcmllcy4KLQotICAgIG1fdmlld3BvcnRJ
dGVtLT5jYW5jZWxGbGljaygpOwotICAgIFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIgZ3VhcmQodGhp
cyk7Ci0gICAgc2V0UGFnZUl0ZW1SZWN0VmlzaWJsZShuZWFyZXN0VmFsaWRCb3VuZHMoKSk7Ci19
Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OmludGVycnVwdFNjYWxlQW5pbWF0aW9uKCkKLXsK
LSAgICAvLyBUaGlzIGludGVycnVwdHMgdGhlIHNjYWxlIGFuaW1hdGlvbiBleGFjdGx5IHdoZXJl
IGl0IGlzLCBldmVuIGlmIGl0IGlzIG91dCBvZiBib3VuZHMuCi0gICAgbV9zY2FsZUFuaW1hdGlv
bi0+c3RvcCgpOwotfQotCi1ib29sIFF0Vmlld3BvcnRIYW5kbGVyOjpwaW5jaEdlc3R1cmVBY3Rp
dmUoKSBjb25zdAotewotICAgIHJldHVybiBtX3BpbmNoU3RhcnRTY2FsZSA+IDA7Ci19Ci0KLXZv
aWQgUXRWaWV3cG9ydEhhbmRsZXI6OnBpbmNoR2VzdHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYg
cGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMpCi17Ci0gICAgLy8gVGhpcyBjYW4gb25s
eSBoYXBwZW4gYXMgYSByZXN1bHQgb2YgYSB1c2VyIGludGVyYWN0aW9uLgotICAgIEFTU0VSVCht
X2hhZFVzZXJJbnRlcmFjdGlvbik7Ci0KLSAgICBpZiAoIW1fYWxsb3dzVXNlclNjYWxpbmcpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc2NhbGVTdGFjay5jbGVhcigpOwotICAgIG1fem9vbU91
dFNjYWxlID0gMC4wOwotCi0gICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyID0gYWRvcHRQdHIobmV3
IFZpZXdwb3J0VXBkYXRlRGVmZXJyZXIodGhpcywgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjo6RGVm
ZXJVcGRhdGVBbmRTdXNwZW5kQ29udGVudCkpOwotCi0gICAgbV9sYXN0UGluY2hDZW50ZXJJblZp
ZXdwb3J0Q29vcmRpbmF0ZXMgPSBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKLSAg
ICBtX3BpbmNoU3RhcnRTY2FsZSA9IG1fcGFnZUl0ZW0tPmNvbnRlbnRzU2NhbGUoKTsKLX0KLQot
dm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBR
UG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcywgcXJlYWwgdG90YWxTY2Fs
ZUZhY3RvcikKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kQ291bnQpOwotCi0gICAgaWYgKCFtX2Fs
bG93c1VzZXJTY2FsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyAgQ2hhbmdlcyBvZiB0
aGUgY2VudGVyIHBvc2l0aW9uIHNob3VsZCBtb3ZlIHRoZSBwYWdlIGV2ZW4gaWYgdGhlIHpvb20g
ZmFjdG9yCi0gICAgLy8gIGRvZXMgbm90IGNoYW5nZS4KLSAgICBjb25zdCBxcmVhbCBjc3NTY2Fs
ZSA9IGNzc1NjYWxlRnJvbUl0ZW0obV9waW5jaFN0YXJ0U2NhbGUgKiB0b3RhbFNjYWxlRmFjdG9y
KTsKLQotICAgIC8vIEFsbG93IHpvb21pbmcgb3V0IGJleW9uZCBtaW1pbXVtIHNjYWxlIG9uIHBh
Z2VzIHRoYXQgZG8gbm90IGV4cGxpY2l0bHkgZGlzYWxsb3cgaXQuCi0gICAgY29uc3QgcXJlYWwg
dGFyZ2V0Q1NTU2NhbGUgPSBvdXRlckJvdW5kZWRDU1NTY2FsZShjc3NTY2FsZSk7Ci0KLSAgICBz
Y2FsZUNvbnRlbnQobV92aWV3cG9ydEl0ZW0tPm1hcFRvV2ViQ29udGVudChwaW5jaENlbnRlcklu
Vmlld3BvcnRDb29yZGluYXRlcyksIHRhcmdldENTU1NjYWxlKTsKLQotICAgIGNvbnN0IFFQb2lu
dEYgcG9zaXRpb25EaWZmID0gcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0ZXMgLSBtX2xh
c3RQaW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlczsKLSAgICBtX2xhc3RQaW5jaENlbnRl
ckluVmlld3BvcnRDb29yZGluYXRlcyA9IHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVz
OwotCi0gICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobV92aWV3cG9ydEl0ZW0tPmNv
bnRlbnRQb3MoKSAtIHBvc2l0aW9uRGlmZik7Ci19Ci0KLXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6
OnBpbmNoR2VzdHVyZUVuZGVkKCkKLXsKLSAgICBBU1NFUlQobV9zdXNwZW5kQ291bnQpOwotCi0g
ICAgaWYgKCFtX2FsbG93c1VzZXJTY2FsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Bp
bmNoU3RhcnRTY2FsZSA9IC0xOwotCi0gICAgYW5pbWF0ZVBhZ2VJdGVtUmVjdFZpc2libGUobmVh
cmVzdFZhbGlkQm91bmRzKCkpOwotICAgIG1fc2NhbGVVcGRhdGVEZWZlcnJlci5jbGVhcigpOyAv
LyBDbGVhciBhZnRlciBzdGFydGluZyBwb3RlbnRpYWwgYW5pbWF0aW9uLCB3aGljaCB0YWtlcyBv
dmVyIGRlZmVycmluZy4KLX0KLQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6cGluY2hHZXN0dXJl
Q2FuY2VsbGVkKCkKLXsKLSAgICBtX3BpbmNoU3RhcnRTY2FsZSA9IC0xOwotICAgIG1fc2NhbGVV
cGRhdGVEZWZlcnJlci5jbGVhcigpOwotfQotCi1RUmVjdEYgUXRWaWV3cG9ydEhhbmRsZXI6OnZp
c2libGVDb250ZW50c1JlY3QoKSBjb25zdAotewotICAgIGNvbnN0IFFSZWN0RiB2aXNpYmxlUmVj
dChtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkuaW50ZXJzZWN0ZWQobV9wYWdlSXRlbS0+
Ym91bmRpbmdSZWN0KCkpKTsKLSAgICByZXR1cm4gbV92aWV3cG9ydEl0ZW0tPm1hcFJlY3RUb1dl
YkNvbnRlbnQodmlzaWJsZVJlY3QpOwotfQotCi12b2lkIFF0Vmlld3BvcnRIYW5kbGVyOjppbmZv
cm1WaXNpYmxlQ29udGVudENoYW5nZShjb25zdCBRUG9pbnRGJiB0cmFqZWN0b3J5VmVjdG9yKQot
ewotICAgIERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gbV93ZWJQYWdlUHJveHktPmRy
YXdpbmdBcmVhKCk7Ci0gICAgaWYgKCFkcmF3aW5nQXJlYSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgcXJlYWwgc2NhbGUgPSBtX3BhZ2VJdGVtLT5jb250ZW50c1NjYWxlKCk7Ci0KLSAgICBpZiAo
c2NhbGUgIT0gbV9sYXN0Q29tbWl0dGVkU2NhbGUpCi0gICAgICAgIGVtaXQgbV92aWV3cG9ydEl0
ZW0tPmV4cGVyaW1lbnRhbCgpLT50ZXN0KCktPmNvbnRlbnRzU2NhbGVDb21taXR0ZWQoKTsKLSAg
ICBtX2xhc3RDb21taXR0ZWRTY2FsZSA9IHNjYWxlOwotCi0gICAgZHJhd2luZ0FyZWEtPnNldFZp
c2libGVDb250ZW50c1JlY3QodmlzaWJsZUNvbnRlbnRzUmVjdCgpLCBzY2FsZSwgdHJhamVjdG9y
eVZlY3Rvcik7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB1cGRhdGVQYWludE5vZGUgaXMgYWx3YXlz
IGNhbGxlZCBiZWZvcmUgcGFpbnRpbmcuCi0gICAgbV9wYWdlSXRlbS0+dXBkYXRlKCk7Ci19Ci0K
LXZvaWQgUXRWaWV3cG9ydEhhbmRsZXI6OnZpZXdwb3J0SXRlbVNpemVDaGFuZ2VkKCkKLXsKLSAg
ICBRU2l6ZSB2aWV3cG9ydFNpemUgPSBtX3ZpZXdwb3J0SXRlbS0+Ym91bmRpbmdSZWN0KCkuc2l6
ZSgpLnRvU2l6ZSgpOwotCi0gICAgaWYgKHZpZXdwb3J0U2l6ZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIExldCB0aGUgV2ViUHJvY2VzcyBrbm93IGFib3V0IHRoZSBuZXcg
dmlld3BvcnQgc2l6ZSwgc28gdGhhdAotICAgIC8vIGl0IGNhbiByZXNpemUgdGhlIGNvbnRlbnQg
YWNjb3JkaW5nbHkuCi0gICAgbV93ZWJQYWdlUHJveHktPnNldFZpZXdwb3J0U2l6ZSh2aWV3cG9y
dFNpemUpOwotCi0gICAgaW5mb3JtVmlzaWJsZUNvbnRlbnRDaGFuZ2UoUVBvaW50RigpKTsKLX0K
LQotdm9pZCBRdFZpZXdwb3J0SGFuZGxlcjo6c2NhbGVDb250ZW50KGNvbnN0IFFQb2ludEYmIGNl
bnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFsIGNzc1NjYWxlKQotewotICAgIFFQb2ludEYgb2xk
UGluY2hDZW50ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50
KGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMpOwotICAgIG1fcGFnZUl0ZW0tPnNldENvbnRlbnRzU2Nh
bGUoaXRlbVNjYWxlRnJvbUNTUyhjc3NTY2FsZSkpOwotICAgIFFQb2ludEYgbmV3UGluY2hDZW50
ZXJPblZpZXdwb3J0ID0gbV92aWV3cG9ydEl0ZW0tPm1hcEZyb21XZWJDb250ZW50KGNlbnRlcklu
Q1NTQ29vcmRpbmF0ZXMpOwotCi0gICAgbV92aWV3cG9ydEl0ZW0tPnNldENvbnRlbnRQb3MobV92
aWV3cG9ydEl0ZW0tPmNvbnRlbnRQb3MoKSArIChuZXdQaW5jaENlbnRlck9uVmlld3BvcnQgLSBv
bGRQaW5jaENlbnRlck9uVmlld3BvcnQpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNpbmNsdWRlICJtb2NfUXRWaWV3cG9ydEhhbmRsZXIuY3BwIgotCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SGFuZGxlci5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDkyMzdmZTlmMzYzMzE4NzU4YmFiYWJmNGJlYjdjOWVjZGRiYzEzYWYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRIYW5kbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMSBCZW5qYW1p
biBQb3VsYWluIDxiZW5qYW1pbkB3ZWJraXQub3JnPgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBRdFZpZXdwb3J0SGFu
ZGxlcl9oCi0jZGVmaW5lIFF0Vmlld3BvcnRIYW5kbGVyX2gKLQotI2luY2x1ZGUgPFF0Q29yZS9R
T2JqZWN0PgotI2luY2x1ZGUgPFF0Q29yZS9RUmVjdEY+Ci0jaW5jbHVkZSA8UXRDb3JlL1FWYXJp
YW50PgotI2luY2x1ZGUgPFF0Q29yZS9RVmFyaWFudEFuaW1hdGlvbj4KLSNpbmNsdWRlIDxXZWJD
b3JlL1ZpZXdwb3J0QXJndW1lbnRzLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1RVF9C
RUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFQb2ludEY7Ci1jbGFzcyBRV2hlZWxFdmVudDsKLVFUX0VO
RF9OQU1FU1BBQ0UKLQotY2xhc3MgUVF1aWNrV2ViUGFnZTsKLWNsYXNzIFFRdWlja1dlYlZpZXc7
Ci0KLWNsYXNzIFFXZWJLaXRUZXN0OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2Vi
UGFnZVByb3h5OwotY2xhc3MgVmlld3BvcnRVcGRhdGVEZWZlcnJlcjsKLQotY2xhc3MgUXRWaWV3
cG9ydEhhbmRsZXIgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLQotcHVibGljOgot
ICAgIFF0Vmlld3BvcnRIYW5kbGVyKFdlYlBhZ2VQcm94eSosIFFRdWlja1dlYlZpZXcqLCBRUXVp
Y2tXZWJQYWdlKik7Ci0gICAgflF0Vmlld3BvcnRIYW5kbGVyKCk7Ci0KLSAgICB2b2lkIHRvdWNo
QmVnaW4oKTsKLSAgICB2b2lkIHRvdWNoRW5kKCk7Ci0KLSAgICBib29sIHNjcm9sbEFuaW1hdGlv
bkFjdGl2ZSgpIGNvbnN0OwotICAgIHZvaWQgY2FuY2VsU2Nyb2xsQW5pbWF0aW9uKCk7Ci0KLSAg
ICBib29sIHBhbkdlc3R1cmVBY3RpdmUoKSBjb25zdDsKLSAgICB2b2lkIHBhbkdlc3R1cmVTdGFy
dGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMp
OwotICAgIHZvaWQgcGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcG9zaXRp
b24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7Ci0gICAgdm9pZCBwYW5HZXN0dXJlRW5k
ZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7
Ci0gICAgdm9pZCBwYW5HZXN0dXJlQ2FuY2VsbGVkKCk7Ci0KLSAgICBib29sIHNjYWxlQW5pbWF0
aW9uQWN0aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBpbnRlcnJ1cHRTY2FsZUFuaW1hdGlvbigpOwot
Ci0gICAgYm9vbCBwaW5jaEdlc3R1cmVBY3RpdmUoKSBjb25zdDsKLSAgICB2b2lkIHBpbmNoR2Vz
dHVyZVN0YXJ0ZWQoY29uc3QgUVBvaW50RiYgcGluY2hDZW50ZXJJblZpZXdwb3J0Q29vcmRpbmF0
ZXMpOwotICAgIHZvaWQgcGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZShjb25zdCBRUG9pbnRGJiBw
aW5jaENlbnRlckluVmlld3BvcnRDb29yZGluYXRlcywgcXJlYWwgdG90YWxTY2FsZUZhY3Rvcik7
Ci0gICAgdm9pZCBwaW5jaEdlc3R1cmVFbmRlZCgpOwotICAgIHZvaWQgcGluY2hHZXN0dXJlQ2Fu
Y2VsbGVkKCk7Ci0KLSAgICB2b2lkIHpvb21Ub0FyZWFHZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50
RiYgdG91Y2hQb2ludCwgY29uc3QgUVJlY3RGJiB0YXJnZXRBcmVhKTsKLSAgICB2b2lkIGZvY3Vz
RWRpdGFibGVBcmVhKGNvbnN0IFFSZWN0RiYgY2FyZXRBcmVhLCBjb25zdCBRUmVjdEYmIHRhcmdl
dEFyZWEpOwotCi0gICAgdm9pZCBwYWdlQ29udGVudFBvc2l0aW9uUmVxdWVzdGVkKGNvbnN0IFFQ
b2ludCYgcG9zaXRpb24pOwotCi0gICAgdm9pZCB2aWV3cG9ydEl0ZW1TaXplQ2hhbmdlZCgpOwot
ICAgIHZvaWQgdmlld3BvcnRBdHRyaWJ1dGVzQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpWaWV3cG9y
dEF0dHJpYnV0ZXMmKTsKLSAgICB2b2lkIGluZm9ybVZpc2libGVDb250ZW50Q2hhbmdlKGNvbnN0
IFFQb2ludEYmIHRyYWplY3RvcnkgPSBRUG9pbnRGKCkpOwotICAgIHZvaWQgcGFnZUNvbnRlbnRz
U2l6ZUNoYW5nZWQoY29uc3QgUVNpemUmIG5ld1NpemUsIGNvbnN0IFFTaXplJiB2aWV3cG9ydFNp
emUpOwotCi1wcml2YXRlIFFfU0xPVFM6Ci0gICAgLy8gUmVzcG9uZCB0byBjaGFuZ2VzIG9mIHBv
c2l0aW9uIHRoYXQgYXJlIG5vdCBkcml2ZW4gYnkgdXMuCi0gICAgdm9pZCBwYWdlSXRlbVBvc2l0
aW9uQ2hhbmdlZCgpOwotCi0gICAgdm9pZCBzY2FsZUFuaW1hdGlvblN0YXRlQ2hhbmdlZChRQWJz
dHJhY3RBbmltYXRpb246OlN0YXRlLCBRQWJzdHJhY3RBbmltYXRpb246OlN0YXRlKTsKLSAgICB2
b2lkIHNjYWxlQW5pbWF0aW9uVmFsdWVDaGFuZ2VkKFFWYXJpYW50IHZhbHVlKTsKLQotICAgIHZv
aWQgZmxpY2tNb3ZlU3RhcnRlZCgpOyAvLyBDYWxsZWQgd2hlbiBwYW5uaW5nIHN0YXJ0cy4KLSAg
ICB2b2lkIGZsaWNrTW92ZUVuZGVkKCk7IC8vICAgQ2FsbGVkIHdoZW4gcGFubmluZyAoKyBraW5l
dGljIGFuaW1hdGlvbikgZW5kcy4KLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgVmlld3Bv
cnRVcGRhdGVEZWZlcnJlcjsKLSAgICBmcmllbmQgY2xhc3MgOjpRV2ViS2l0VGVzdDsKLQotICAg
IFdlYlBhZ2VQcm94eSogY29uc3QgbV93ZWJQYWdlUHJveHk7Ci0gICAgUVF1aWNrV2ViVmlldyog
Y29uc3QgbV92aWV3cG9ydEl0ZW07Ci0gICAgUVF1aWNrV2ViUGFnZSogY29uc3QgbV9wYWdlSXRl
bTsKLQotICAgIHFyZWFsIGNzc1NjYWxlRnJvbUl0ZW0ocXJlYWwpIGNvbnN0OwotICAgIHFyZWFs
IGl0ZW1TY2FsZUZyb21DU1MocXJlYWwpIGNvbnN0OwotICAgIHFyZWFsIGl0ZW1Db29yZEZyb21D
U1MocXJlYWwpIGNvbnN0OwotICAgIFFSZWN0RiBpdGVtUmVjdEZyb21DU1MoY29uc3QgUVJlY3RG
JikgY29uc3Q7Ci0KLSAgICBxcmVhbCBpbm5lckJvdW5kZWRDU1NTY2FsZShxcmVhbCkgY29uc3Q7
Ci0gICAgcXJlYWwgb3V0ZXJCb3VuZGVkQ1NTU2NhbGUocXJlYWwpIGNvbnN0OwotCi0gICAgdm9p
ZCBzZXRJbml0aWFsU2NhbGVJZk5lZWRlZCgpOwotCi0gICAgdm9pZCBzZXRDU1NTY2FsZShxcmVh
bCk7Ci0gICAgcXJlYWwgY3VycmVudENTU1NjYWxlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFBh
Z2VJdGVtUmVjdFZpc2libGUoY29uc3QgUVJlY3RGJik7Ci0gICAgdm9pZCBhbmltYXRlUGFnZUl0
ZW1SZWN0VmlzaWJsZShjb25zdCBRUmVjdEYmKTsKLQotICAgIFFSZWN0RiB2aXNpYmxlQ29udGVu
dHNSZWN0KCkgY29uc3Q7Ci0gICAgUVJlY3RGIGluaXRpYWxSZWN0KCkgY29uc3Q7Ci0gICAgUVJl
Y3RGIG5lYXJlc3RWYWxpZEJvdW5kcygpIGNvbnN0OwotCi0gICAgUVJlY3RGIGNvbXB1dGVQb3NS
YW5nZUZvclBhZ2VJdGVtQXRTY2FsZShxcmVhbCBpdGVtU2NhbGUpIGNvbnN0OwotICAgIHZvaWQg
c2NhbGVDb250ZW50KGNvbnN0IFFQb2ludEYmIGNlbnRlckluQ1NTQ29vcmRpbmF0ZXMsIHFyZWFs
IGNzc1NjYWxlKTsKLQotICAgIHZvaWQgc3VzcGVuZFBhZ2VDb250ZW50KCk7Ci0gICAgdm9pZCBy
ZXN1bWVQYWdlQ29udGVudCgpOwotCi0gICAgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIG1f
cmF3QXR0cmlidXRlczsKLQotICAgIGJvb2wgbV9hbGxvd3NVc2VyU2NhbGluZzsKLSAgICBxcmVh
bCBtX21pbmltdW1TY2FsZTsKLSAgICBxcmVhbCBtX21heGltdW1TY2FsZTsKLSAgICBxcmVhbCBt
X2RldmljZVBpeGVsUmF0aW87Ci0KLSAgICBRU2l6ZSBtX2xheW91dFNpemU7Ci0KLSAgICBpbnQg
bV9zdXNwZW5kQ291bnQ7Ci0gICAgYm9vbCBtX2hhc1N1c3BlbmRlZENvbnRlbnQ7Ci0KLSAgICBP
d25QdHI8Vmlld3BvcnRVcGRhdGVEZWZlcnJlcj4gbV9zY2FsZVVwZGF0ZURlZmVycmVyOwotICAg
IE93blB0cjxWaWV3cG9ydFVwZGF0ZURlZmVycmVyPiBtX3Njcm9sbFVwZGF0ZURlZmVycmVyOwot
ICAgIE93blB0cjxWaWV3cG9ydFVwZGF0ZURlZmVycmVyPiBtX3RvdWNoVXBkYXRlRGVmZXJyZXI7
Ci0gICAgT3duUHRyPFZpZXdwb3J0VXBkYXRlRGVmZXJyZXI+IG1fYW5pbWF0aW9uVXBkYXRlRGVm
ZXJyZXI7Ci0KLSAgICBib29sIG1faGFkVXNlckludGVyYWN0aW9uOwotCi0gICAgY2xhc3MgU2Nh
bGVBbmltYXRpb24gOiBwdWJsaWMgUVZhcmlhbnRBbmltYXRpb24gewotICAgIHB1YmxpYzoKLSAg
ICAgICAgU2NhbGVBbmltYXRpb24oUU9iamVjdCogcGFyZW50ID0gMCkKLSAgICAgICAgICAgIDog
UVZhcmlhbnRBbmltYXRpb24ocGFyZW50KQotICAgICAgICB7IH0KLQotICAgICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlQ3VycmVudFZhbHVlKGNvbnN0IFFWYXJpYW50JikgeyB9Ci0gICAgfTsKLQot
ICAgIHN0cnVjdCBTY2FsZVN0YWNrSXRlbSB7Ci0gICAgICAgIFNjYWxlU3RhY2tJdGVtKHFyZWFs
IHNjYWxlLCBxcmVhbCB4UG9zaXRpb24pCi0gICAgICAgICAgICA6IHNjYWxlKHNjYWxlKQotICAg
ICAgICAgICAgLCB4UG9zaXRpb24oeFBvc2l0aW9uKQotICAgICAgICB7IH0KLQotICAgICAgICBx
cmVhbCBzY2FsZTsKLSAgICAgICAgcXJlYWwgeFBvc2l0aW9uOwotICAgIH07Ci0KLSAgICBTY2Fs
ZUFuaW1hdGlvbiogbV9zY2FsZUFuaW1hdGlvbjsKLSAgICBRUG9pbnRGIG1fbGFzdFBpbmNoQ2Vu
dGVySW5WaWV3cG9ydENvb3JkaW5hdGVzOwotICAgIFFQb2ludEYgbV9sYXN0U2Nyb2xsUG9zaXRp
b247Ci0gICAgcXJlYWwgbV9waW5jaFN0YXJ0U2NhbGU7Ci0gICAgcXJlYWwgbV9sYXN0Q29tbWl0
dGVkU2NhbGU7Ci0gICAgcXJlYWwgbV96b29tT3V0U2NhbGU7Ci0gICAgUUxpc3Q8U2NhbGVTdGFj
a0l0ZW0+IG1fc2NhbGVTdGFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gUXRWaWV3cG9ydEhhbmRsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcAppbmRleCA4NTE3ZTBmYzQwZmY5ZWRj
MDZhOGE5OWJkN2VkZTBhMDhjMDQ0NjE2Li42NGJjZGJkZjlmNGRlMzZjOGUwYjhkNDRlNWY3ZmIz
NTMyOTNkODE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRX
ZWJQYWdlRXZlbnRIYW5kbGVyLmNwcApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIk5hdGl2
ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAj
aW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlF0Vmlld3BvcnRIYW5k
bGVyLmgiCisjaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0LmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAjaW5j
bHVkZSAicXF1aWNrd2Vidmlld19wLmgiCkBAIC05MSw3ICs5MSw3IEBAIHN0YXRpYyBpbmxpbmUg
V2ViQ29yZTo6RHJhZ09wZXJhdGlvbiBkcm9wQWN0aW9uVG9EcmFnT3BlcmF0aW9uKFF0OjpEcm9w
QWN0aW9ucyBhCiAKIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6UXRXZWJQYWdlRXZlbnRIYW5kbGVy
KFdLUGFnZVJlZiBwYWdlUmVmLCBRUXVpY2tXZWJQYWdlKiBxbWxXZWJQYWdlLCBRUXVpY2tXZWJW
aWV3KiBxbWxXZWJWaWV3KQogICAgIDogbV93ZWJQYWdlUHJveHkodG9JbXBsKHBhZ2VSZWYpKQot
ICAgICwgbV92aWV3cG9ydEhhbmRsZXIoMCkKKyAgICAsIG1fdmlld3BvcnRDb250cm9sbGVyKDAp
CiAgICAgLCBtX3Bhbkdlc3R1cmVSZWNvZ25pemVyKHRoaXMpCiAgICAgLCBtX3BpbmNoR2VzdHVy
ZVJlY29nbml6ZXIodGhpcykKICAgICAsIG1fdGFwR2VzdHVyZVJlY29nbml6ZXIodGhpcykKQEAg
LTMwNSw5ICszMDUsOSBAQCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlRm9jdXNP
dXRFdmVudChRRm9jdXNFdmVudCopCiAgICAgbV93ZWJQYWdlUHJveHktPnZpZXdTdGF0ZURpZENo
YW5nZShXZWJQYWdlUHJveHk6OlZpZXdJc0ZvY3VzZWQgfCBXZWJQYWdlUHJveHk6OlZpZXdXaW5k
b3dJc0FjdGl2ZSk7CiB9CiAKLXZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpzZXRWaWV3cG9y
dEhhbmRsZXIoUXRWaWV3cG9ydEhhbmRsZXIqIGhhbmRsZXIpCit2b2lkIFF0V2ViUGFnZUV2ZW50
SGFuZGxlcjo6c2V0Vmlld3BvcnRDb250cm9sbGVyKFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnRRdCogY29udHJvbGxlcikKIHsKLSAgICBtX3ZpZXdwb3J0SGFuZGxlciA9IGhhbmRsZXI7Cisg
ICAgbV92aWV3cG9ydENvbnRyb2xsZXIgPSBjb250cm9sbGVyOwogfQogCiB2b2lkIFF0V2ViUGFn
ZUV2ZW50SGFuZGxlcjo6aGFuZGxlSW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVudCog
ZXYpCkBAIC00MDYsNyArNDA2LDcgQEAgc3RhdGljIHZvaWQgc2V0SW5wdXRQYW5lbFZpc2libGUo
Ym9vbCB2aXNpYmxlKQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aW5wdXRQYW5lbFZp
c2libGVDaGFuZ2VkKCkKIHsKLSAgICBpZiAoIW1fdmlld3BvcnRIYW5kbGVyKQorICAgIGlmICgh
bV92aWV3cG9ydENvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIG9ubHkg
cmVzcG9uZCB0byB0aGUgaW5wdXQgcGFuZWwgYmVjb21pbmcgdmlzaWJsZS4KQEAgLTQxNSw3ICs0
MTUsNyBAQCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aW5wdXRQYW5lbFZpc2libGVDaGFu
Z2VkKCkKIAogICAgIGNvbnN0IEVkaXRvclN0YXRlJiBlZGl0b3IgPSBtX3dlYlBhZ2VQcm94eS0+
ZWRpdG9yU3RhdGUoKTsKICAgICBpZiAoZWRpdG9yLmlzQ29udGVudEVkaXRhYmxlKQotICAgICAg
ICBtX3ZpZXdwb3J0SGFuZGxlci0+Zm9jdXNFZGl0YWJsZUFyZWEoUVJlY3RGKGVkaXRvci5jdXJz
b3JSZWN0KSwgUVJlY3RGKGVkaXRvci5lZGl0b3JSZWN0KSk7CisgICAgICAgIG1fdmlld3BvcnRD
b250cm9sbGVyLT5mb2N1c0VkaXRhYmxlQXJlYShRUmVjdEYoZWRpdG9yLmN1cnNvclJlY3QpLCBR
UmVjdEYoZWRpdG9yLmVkaXRvclJlY3QpKTsKIH0KIAogdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRs
ZXI6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKCkKQEAgLTQ1MCw3ICs0NTAsNyBAQCB2b2lkIFF0V2Vi
UGFnZUV2ZW50SGFuZGxlcjo6ZG9uZVdpdGhHZXN0dXJlRXZlbnQoY29uc3QgV2ViR2VzdHVyZUV2
ZW50JiBldmVudCwgYgogCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6aGFuZGxlSW5wdXRF
dmVudChjb25zdCBRSW5wdXRFdmVudCogZXZlbnQpCiB7Ci0gICAgQVNTRVJUKG1fdmlld3BvcnRI
YW5kbGVyKTsKKyAgICBBU1NFUlQobV92aWV3cG9ydENvbnRyb2xsZXIpOwogCiAgICAgYm9vbCBp
c01vdXNlRXZlbnQgPSBmYWxzZTsKIApAQCAtNDYwLDkgKzQ2MCw5IEBAIHZvaWQgUXRXZWJQYWdl
RXZlbnRIYW5kbGVyOjpoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFFJbnB1dEV2ZW50KiBldmVudCkK
ICAgICAgICAgbV9pc01vdXNlQnV0dG9uUHJlc3NlZCA9IHRydWU7CiAgICAgICAgIC8vIEZhbGwg
dGhyb3VnaC4KICAgICBjYXNlIFFFdmVudDo6VG91Y2hCZWdpbjoKLSAgICAgICAgQVNTRVJUKCFt
X3ZpZXdwb3J0SGFuZGxlci0+cGFuR2VzdHVyZUFjdGl2ZSgpKTsKLSAgICAgICAgQVNTRVJUKCFt
X3ZpZXdwb3J0SGFuZGxlci0+cGluY2hHZXN0dXJlQWN0aXZlKCkpOwotICAgICAgICBtX3ZpZXdw
b3J0SGFuZGxlci0+dG91Y2hCZWdpbigpOworICAgICAgICBBU1NFUlQoIW1fdmlld3BvcnRDb250
cm9sbGVyLT5wYW5HZXN0dXJlQWN0aXZlKCkpOworICAgICAgICBBU1NFUlQoIW1fdmlld3BvcnRD
b250cm9sbGVyLT5waW5jaEdlc3R1cmVBY3RpdmUoKSk7CisgICAgICAgIG1fdmlld3BvcnRDb250
cm9sbGVyLT50b3VjaEJlZ2luKCk7CiAKICAgICAgICAgLy8gVGhlIGludGVyYWN0aW9uIGVuZ2lu
ZSBtaWdodCBzdGlsbCBiZSBhbmltYXRpbmcga2luZXRpYyBzY3JvbGxpbmcgb3IgYSBzY2FsZSBh
bmltYXRpb24KICAgICAgICAgLy8gc3VjaCBhcyBkb3VibGUtdGFwIHRvIHpvb20gb3IgdGhlIGJv
dW5jZSBiYWNrIGVmZmVjdC4gQSB0b3VjaCBzdG9wcyB0aGUga2luZXRpYyBzY3JvbGxpbmcKQEAg
LTQ3NywxNSArNDc3LDE1IEBAIHZvaWQgUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpoYW5kbGVJbnB1
dEV2ZW50KGNvbnN0IFFJbnB1dEV2ZW50KiBldmVudCkKICAgICAgICAgLy8gRmFsbCB0aHJvdWdo
LgogICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZToKICAgICAgICAgLy8gVGhlIHNjYWxlIGFu
aW1hdGlvbiBjYW4gb25seSBiZSBpbnRlcnJ1cHRlZCBieSBhIHBpbmNoIGdlc3R1cmUsIHdoaWNo
IHdpbGwgdGhlbiB0YWtlIG92ZXIuCi0gICAgICAgIGlmIChtX3ZpZXdwb3J0SGFuZGxlci0+c2Nh
bGVBbmltYXRpb25BY3RpdmUoKSAmJiBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIuaXNSZWNvZ25p
emVkKCkpCi0gICAgICAgICAgICBtX3ZpZXdwb3J0SGFuZGxlci0+aW50ZXJydXB0U2NhbGVBbmlt
YXRpb24oKTsKKyAgICAgICAgaWYgKG1fdmlld3BvcnRDb250cm9sbGVyLT5zY2FsZUFuaW1hdGlv
bkFjdGl2ZSgpICYmIG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5pc1JlY29nbml6ZWQoKSkKKyAg
ICAgICAgICAgIG1fdmlld3BvcnRDb250cm9sbGVyLT5pbnRlcnJ1cHRTY2FsZUFuaW1hdGlvbigp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFFFdmVudDo6TW91c2VCdXR0b25SZWxlYXNlOgog
ICAgICAgICBpc01vdXNlRXZlbnQgPSB0cnVlOwogICAgICAgICBtX2lzTW91c2VCdXR0b25QcmVz
c2VkID0gZmFsc2U7CiAgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KICAgICBjYXNlIFFFdmVudDo6
VG91Y2hFbmQ6Ci0gICAgICAgIG1fdmlld3BvcnRIYW5kbGVyLT50b3VjaEVuZCgpOworICAgICAg
ICBtX3ZpZXdwb3J0Q29udHJvbGxlci0+dG91Y2hFbmQoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gUUV2ZW50OjpNb3VzZUJ1
dHRvbkRibENsaWNrKTsKQEAgLTQ5NCw3ICs0OTQsNyBAQCB2b2lkIFF0V2ViUGFnZUV2ZW50SGFu
ZGxlcjo6aGFuZGxlSW5wdXRFdmVudChjb25zdCBRSW5wdXRFdmVudCogZXZlbnQpCiAKICAgICAv
LyBJZiB0aGUgc2NhbGUgYW5pbWF0aW9uIGlzIGFjdGl2ZSB3ZSBkb24ndCBwYXNzIHRoZSBldmVu
dCB0byB0aGUgcmVjb2duaXplcnMuIEluIHRoZSBmdXR1cmUKICAgICAvLyB3ZSB3b3VsZCB3YW50
IHRvIHF1ZXVlIHRoZSBldmVudCBoZXJlIGFuZCByZXBvc3QgdGhlbiB3aGVuIHRoZSBhbmltYXRp
b24gZW5kcy4KLSAgICBpZiAobV92aWV3cG9ydEhhbmRsZXItPnNjYWxlQW5pbWF0aW9uQWN0aXZl
KCkpCisgICAgaWYgKG1fdmlld3BvcnRDb250cm9sbGVyLT5zY2FsZUFuaW1hdGlvbkFjdGl2ZSgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBRTGlzdDxRVG91Y2hFdmVudDo6VG91Y2hQb2ludD4g
YWN0aXZlVG91Y2hQb2ludHM7CkBAIC01NjgsNyArNTY4LDcgQEAgdm9pZCBRdFdlYlBhZ2VFdmVu
dEhhbmRsZXI6OmhhbmRsZUlucHV0RXZlbnQoY29uc3QgUUlucHV0RXZlbnQqIGV2ZW50KQogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFuZGxlcjo6ZG9uZVdp
dGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW50LCBib29sIHdhc0V2
ZW50SGFuZGxlZCkKIHsKLSAgICBpZiAoIW1fdmlld3BvcnRIYW5kbGVyKQorICAgIGlmICghbV92
aWV3cG9ydENvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICh3YXNFdmVudEhh
bmRsZWQgfHwgZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpUb3VjaENhbmNlbCkgewpAQCAtNTg3
LDEyICs1ODcsMTIgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91Y2hF
dmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCwKIAogdm9pZCBRdFdlYlBhZ2VF
dmVudEhhbmRsZXI6OmRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgSW50UG9pbnQmIHRhcmdldCwg
Y29uc3QgSW50UmVjdCYgYXJlYSkKIHsKLSAgICBpZiAoIW1fdmlld3BvcnRIYW5kbGVyKQorICAg
IGlmICghbV92aWV3cG9ydENvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJ
WE1FOiBBcyB0aGUgZmluZCBtZXRob2QgbWlnaHQgbm90IHJlc3BvbmQgaW1tZWRpYXRlbHkgZHVy
aW5nIGxvYWQgZXRjLAogICAgIC8vIHdlIHNob3VsZCBpZ25vcmUgYWxsIGJ1dCB0aGUgbGF0ZXN0
IHJlcXVlc3QuCi0gICAgbV92aWV3cG9ydEhhbmRsZXItPnpvb21Ub0FyZWFHZXN0dXJlRW5kZWQo
UVBvaW50Rih0YXJnZXQpLCBRUmVjdEYoYXJlYSkpOworICAgIG1fdmlld3BvcnRDb250cm9sbGVy
LT56b29tVG9BcmVhR2VzdHVyZUVuZGVkKFFQb2ludEYodGFyZ2V0KSwgUVJlY3RGKGFyZWEpKTsK
IH0KIAogdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OnN0YXJ0RHJhZyhjb25zdCBXZWJDb3Jl
OjpEcmFnRGF0YSYgZHJhZ0RhdGEsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1h
Z2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZl
bnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRI
YW5kbGVyLmgKaW5kZXggNDQ2ZGI3NTNkZmNiYWI4OTMwMzIyOTQzZDJmNjA3MGU2ZDUyMDZiNy4u
ODcyNGYyZWRlOWIwMDhkN2Y2NGFiYmRkNDBhOTExZjhjNjhjYTJkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZUV2ZW50SGFuZGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuaApAQCAtNDYs
NyArNDYsNyBAQCBjbGFzcyBJbnRSZWN0OwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5h
dGl2ZVdlYlRvdWNoRXZlbnQ7Ci1jbGFzcyBRdFZpZXdwb3J0SGFuZGxlcjsKK2NsYXNzIFBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRRdDsKIGNsYXNzIFNoYXJlYWJsZUJpdG1hcDsKIGNsYXNz
IFdlYkdlc3R1cmVFdmVudDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKQEAgLTc1LDcgKzc1LDcgQEAg
cHVibGljOgogICAgIHZvaWQgaGFuZGxlSW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVu
dCopOwogICAgIHZvaWQgaGFuZGxlVG91Y2hFdmVudChRVG91Y2hFdmVudCopOwogCi0gICAgdm9p
ZCBzZXRWaWV3cG9ydEhhbmRsZXIoUXRWaWV3cG9ydEhhbmRsZXIqKTsKKyAgICB2b2lkIHNldFZp
ZXdwb3J0Q29udHJvbGxlcihQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50UXQqKTsKIAogICAg
IHZvaWQgYWN0aXZhdGVUYXBIaWdobGlnaHQoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQm
KTsKICAgICB2b2lkIGRlYWN0aXZhdGVUYXBIaWdobGlnaHQoKTsKQEAgLTkxLDEzICs5MSwxMyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFFJbnB1dEV2ZW50Kik7
CiAgICAgdm9pZCByZXNldEdlc3R1cmVSZWNvZ25pemVycygpOwogCi0gICAgUXRWaWV3cG9ydEhh
bmRsZXIqIHZpZXdwb3J0SGFuZGxlcigpIHsgcmV0dXJuIG1fdmlld3BvcnRIYW5kbGVyOyB9Cisg
ICAgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudFF0KiB2aWV3cG9ydENvbnRyb2xsZXIoKSB7
IHJldHVybiBtX3ZpZXdwb3J0Q29udHJvbGxlcjsgfQogCiAgICAgdm9pZCBzdGFydERyYWcoY29u
c3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0lt
YWdlKTsKIAogcHJvdGVjdGVkOgogICAgIFdlYlBhZ2VQcm94eSogbV93ZWJQYWdlUHJveHk7Ci0g
ICAgUXRWaWV3cG9ydEhhbmRsZXIqIG1fdmlld3BvcnRIYW5kbGVyOworICAgIFBhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRRdCogbV92aWV3cG9ydENvbnRyb2xsZXI7CiAgICAgUXRQYW5HZXN0
dXJlUmVjb2duaXplciBtX3Bhbkdlc3R1cmVSZWNvZ25pemVyOwogICAgIFF0UGluY2hHZXN0dXJl
UmVjb2duaXplciBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXI7CiAgICAgUXRUYXBHZXN0dXJlUmVj
b2duaXplciBtX3RhcEdlc3R1cmVSZWNvZ25pemVyOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA3MjgzNmIyYTIyOTYxNTBiYjZlMTFkNzMzN2Qx
MTZhMDQ2NjI5MDUuLjlkNzFjOTFiYTAwMjk2NjIzYjlkYTRkN2ZmY2Q5Nzg3NWFmM2I1NWEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNiBAQAorMjAxMi0wOS0wNSAgQW5kcmFzIEJlY3NpICA8YW5kcmFzLmJlY3NpQG5va2lhLmNv
bT4KKworICAgICAgICBbV0syXSBNYWtlIFtRdF1WaWV3cG9ydEhhbmRsZXIgY3Jvc3MgcGxhdGZv
cm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxMjU3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3Zl
IGluaXRpYWwgc2NhbGUgZnJvbSB2aWV3cG9ydCBpbmZvIGl0ZW0gc2luY2UgaXQgaXMKKyAgICAg
ICAgc2V0IHRvIC0xIGFmdGVyIGFwcGxpZWQgdGh1cyBpdCBkb2VzIG5vdCBob2xkIGFueSB2YWx1
YWJsZQorICAgICAgICBpbmZvcm1hdGlvbi4KKworICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3Ft
bC9WaWV3cG9ydEluZm9JdGVtLnFtbDoKKwogMjAxMi0wOS0wNSAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgRnJlcXVlbnQgY3Jhc2hlcyBpbiBQbHVnaW5WaWV3
OjpzY3JpcHRPYmplY3QgdW5kZXIgcnVudGltZU9iamVjdEN1c3RvbUdldE93blByb3BlcnR5U2xv
dApkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1ZpZXdwb3J0SW5mb0l0ZW0u
cW1sIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sCmluZGV4
IDkyYTJhMDQxYWViMjBiNmQ0NzYwY2I0OTQ4MjUxMTJjOGEyN2FmOGYuLjY4NGNjNzA5YjQ5NzE4
NWY5ZTFiMzA1OGIwZDhiNDlhMDEwOWJhZTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2Vy
L3F0L3FtbC9WaWV3cG9ydEluZm9JdGVtLnFtbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9x
bWwvVmlld3BvcnRJbmZvSXRlbS5xbWwKQEAgLTg0LDExICs4NCw2IEBAIEl0ZW0gewogCiAgICAg
ICAgICAgICAgICAgQ29sdW1uIHsKICAgICAgICAgICAgICAgICAgICAgVGV4dCB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0OiAiSW5pdGlhbCBzY2FsZTogIiArIGZvcm1hdFNjYWxlKHRl
c3Qudmlld3BvcnQuaW5pdGlhbFNjYWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5m
YW1pbHk6IHRleHRCb3guZm9udEZhbWlseQotICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6
IHRleHRCb3guZm9udENvbG9yCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgVGV4dCB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAiTWluaW11bSBzY2Fs
ZTogIiArIGZvcm1hdFNjYWxlKHRlc3Qudmlld3BvcnQubWluaW11bVNjYWxlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZm9udC5mYW1pbHk6IHRleHRCb3guZm9udEZhbWlseQogICAgICAgICAg
ICAgICAgICAgICAgICAgY29sb3I6IHRleHRCb3guZm9udENvbG9yCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>